使用Dokku部署Laravel

时间:2018-02-22 21:02:00

标签: laravel dokku

我无法理解如何正确部署它。

我想做什么?

  1. 我所有的Laravel项目都应该是bitbucket(这里也是用于本地部署的Dockerfile);
  2. 当我使用dokku部署时,它应该从bitbucket部署我的Laravel项目并运行laravel app命令:migrate,seed等。
  3. 现在发生了什么?

    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

      如果[“$ BUILD_ENV”=“生产”]则运行;然后cd $ APP_HOME&& git clone git@bitbucket.org:laravel.git;网络

      如果[“$ BUILD_ENV”=“生产”]则运行;然后cd $ APP_HOME / laravel&&作曲家安装;网络

      如果[“$ BUILD_ENV”=“生产”]则运行;然后cd $ APP_HOME / laravel&& cp .env.example .env;网络

      如果[“$ BUILD_ENV”=“生产”]则运行;然后cd $ APP_HOME / laravel&& php artisan key:generate;网络

    2. 但我知道不应该这样; D

      所以我需要一些帮助如何部署它?我应该使用Jenkins或者可能存在像Pecilfile或者......?

      这样的dokku文件

1 个答案:

答案 0 :(得分:0)

好的,我决定:

  1. 首先是app.json文件。当从Dockerfile构建完成构建时,它运行predeploy和postdeploy。

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

  2. dokku文件夹位于项目根目录中。

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

    1. 接下来我做了什么。创建了具有laravel主图像的Dockerfile;
    2. 为dokku创建init.sh以运行php artisan migrate,seed,.env等等;
    3. 创建rebuild.sh以重建dokku图像并执行每次构建时需要执行的操作;
    4. 因此,如果您知道app.json预部署可能出现的问题,请在评论中写一下:)

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

      现在我有个好消息。最后我知道出了什么问题。默认情况下,dokku对init.sh有ENTRYPOINT,而且我的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" } } }