使用 Dokku 部署 Laravel

Deploy Laravel with Dokku

我不明白如何正确部署它。

我想做什么?

  1. 我的所有 Laravel 项目都应该在 bitbucket 中(这里还有用于本地部署的 Dockerfile);

  2. 当我使用 dokku 部署时,它应该从 bitbucket 部署我的 Laravel 项目和 运行 Laravel 应用程序命令:迁移、种子等。

现在发生了什么?

  1. Dokku 从 bitbucket 构建我的 Laravel 应用程序并加载 Docerfile。所以我最后在 Dockerfile 中添加了这样的东西:
COPY docker/id_docker /home/docker/.ssh/id_rsa
COPY docker/id_docker.pub /home/docker/.ssh/id_rsa.pub
COPY docker/known_hosts /home/docker/.ssh/known_hosts
RUN eval "$(ssh-agent)" && ssh-agent -s
RUN if [ "$BUILD_ENV" = "production" ] ; then cd $APP_HOME && git clone         git@bitbucket.org:laravel.git; fi
RUN if [ "$BUILD_ENV" = "production" ] ; then cd $APP_HOME/laravel && composer install; fi
RUN if [ "$BUILD_ENV" = "production" ] ; then cd $APP_HOME/laravel && cp .env.example .env; fi
RUN if [ "$BUILD_ENV" = "production" ] ; then cd $APP_HOME/laravel && php artisan key:generate; fi

但我知道不应该这样;D

所以我需要一些帮助,我该如何部署它?我应该使用 Jenkins 或者可能存在诸如 Pecilfile 或 ... 之类的 dokku 文件?

好的,我决定:

  1. 首先是app.json文件。当从 Dockerfile 完成构建时,它的 运行s 部署前和部署后。

    { "name": "laravel", "description": "laravel app on Dokku/Heroku.", "keywords": [ "laravel", "dokku", "heroku" ], "scripts": { "dokku": { "predeploy": "dokku/predeploy.sh", "postdeploy": "dokku/postdeploy.sh" } } }

dokku文件夹在项目根目录下。

!!!!!重要!!!!!! - 运行ning composer 安装时 predeploy.sh 出现问题。 Laravel 可能更改服务器中的某些内容或错误的 .env 文件。所以它从 Dockerfile 构建并安装 composer deps。然后 dokku 等待 10 秒来检查容器是否正常,但它以某种方式失败并且不打印错误。 ;/

  1. 接下来我做了什么。为 laravel;
  2. 创建了包含主图像的 Dockerfile
  3. 为 dokku 创建 init.sh 到 运行 php artisan 迁移、种子、.env 等等;
  4. 已创建 rebuild.sh 来重建 dokku 映像并做一些每次构建都需要做的事情;

因此,如果您知道 app.json 预部署有什么问题,请写在评论中:)

---- 编辑 2018-10-20 ----

现在我有个好消息。最后我知道出了什么问题。默认情况下,dokku 有 init.sh 的入口点,而我的 docker 项目中的这个文件不存在。因此,为 Dockerfile 指定 ENTRYPOINT 很重要。在我的例子中是:

ENTRYPOINT [""] CMD ["dumb-init", "php", "src/tokara-auto-laravel/artisan", "serve", "--host", "0.0.0.0", "--port", "8000"]

并且不要忘记创建 app.json 文件。如果您在 Dockerfile 中指定的不是默认的 WORKDIR,那么您可以在 Dockerfile 中编写类似这样的内容:

WORKDIR /home/docker COPY app.json /home/docker COPY dokku /home/docker/dokku

还有我的app.json:

{ "name": "laravel", "description": Llaravel app on Dokku/Heroku.", "keywords": [ "laravel", "dokku", "heroku" ], "scripts": { "dokku": { "predeploy": "/home/docker/dokku/predeploy.sh", "postdeploy": "/home/docker/dokku/postdeploy.sh" } } }