【问题标题】:Deploying Laravel on Heroku with Docker heroku.yml and artisan使用 Docker heroku.yml 和 artisan 在 Heroku 上部署 Laravel
【发布时间】:2019-02-28 02:21:55
【问题描述】:

我想在项目的初始阶段将我的 Laravel 应用程序部署到 heroku 以作为暂存环境。这分别是Dockerfiledocker-compose 配置。

Dockerfile:

FROM php:7.2 AS base

RUN apt-get update -y && \
    apt-get install -y openssl zip unzip git gnupg2


RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - && \
    apt-get install -y nodejs

RUN curl -sS https://getcomposer.org/installer | \
    php -- --install-dir=/usr/local/bin --filename=composer

RUN docker-php-ext-install mbstring pdo pdo_mysql

WORKDIR /app
COPY . /app

FROM base AS dev

RUN apt-get update && apt-get install -y zlib1g-dev
RUN docker-php-ext-install zip

RUN composer install --prefer-dist
RUN npm install && npm run dev

docker-compose.yml:

version: '3.4'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
      target: dev
    command: php artisan serve --host=0.0.0.0 --port=8080
    env_file:
      - ./etc/env/.env.dev
    working_dir: /app
    volumes:
      - ./:/app
    ports:
      - 8080:8080

此设置在我使用 docker-compose up -d 的本地部署中运行良好

我想尝试将此设置部署到 Heroku using the heroku.yml

这是heroku.yml 设置。

build:
    docker:
        web: Dockerfile
run:
    web: php artisan serve --host=0.0.0.0 --port=$PORT

然后我执行

heroku container:push web
heroku container:release web

命令返回正常。但是当我使用heroku open 打开时显示错误。这是来自heroku logs --tail 的错误日志。

019-02-28T02:18:59.349362+00:00 app[api]: Deployed web (9552e86dc96a) by user *******@****.***
2019-02-28T02:18:59.349362+00:00 app[api]: Release v16 created by user *******@****.***
2019-02-28T02:19:23.326195+00:00 heroku[web.1]: Starting process with command `php -a`
2019-02-28T02:19:25.764530+00:00 heroku[web.1]: State changed from starting to crashed
2019-02-28T02:19:25.744534+00:00 heroku[web.1]: Process exited with status 0
2019-02-28T02:19:25.667622+00:00 app[web.1]: Interactive shell
2019-02-28T02:19:25.667644+00:00 app[web.1]: 
2019-02-28T02:19:26.615159+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=***************.herokuapp.com request_id=f81366af-be1e-4a92-a14a-5c726bf163d9 fwd="203.210.84.30" dyno= connect= service= status=503 bytes= protocol=https

我做错了什么?

【问题讨论】:

  • Exit 0 和 HTTP 503 表示 PHP 进程不再运行。您是否尝试过创建准系统测试项目?
  • 我没有遇到同样的情况,但我尝试在 apache 服务器上托管 laravel 应用程序,大多数问题是因为我没有 777 权限
  • 根据我的理解,App crashed == build failed,你可以尝试在本地构建你的imgae吗?结果如何?

标签: laravel docker heroku docker-compose


【解决方案1】:

我现在遇到了和你一样的情况,我设法通过使用 buildpacks 而不是编写自己的 docker compose 文件来解决它。

如果你想试试我的解决方案:

  1. 转到您的 heroku 项目中的设置页面
  2. 在 Buildpacks 部分下,点击“Add buildpack”
  3. 点击nodejs
  4. 重复同样的过程,点击PHP

一旦你这样做了,你应该得到这样的结果

接下来要做的是:

  1. 再次单击添加构建包
  2. 输入webback URL https://github.com/dretnan/heroku-buildpack-laravel-deploy-tasks
  3. 点击保存更改

最后一个 buildpack 允许您使用一些将在部署期间执行的自定义命令来自定义变量。

所以你想做的是:

  1. 在同一设置页面中查找 Config Vars
  2. 点击“添加”添加新变量
  3. 输入“DEPLOY_TASKS”作为密钥
  4. 输入“npm run heroku-build”作为值(或任何您想命名的自定义脚本)

你应该得到这样的结果:

现在您有一个将在部署期间调用的自定义脚本。

您需要做的最后一件事是转到您的项目并打开 package.json。在该文件中,在“脚本”下添加新行并定义“heroku-build”命令。 您的脚本对象应如下所示:

"scripts": {
        "dev": "npm run development",
        "development": "mix",
        "watch": "mix watch",
        "watch-poll": "mix watch -- --watch-options-poll=1000",
        "hot": "mix watch --hot",
        "prod": "npm run production",
        "production": "mix --production",
        "heroku-build": "php artisan migrate && php artisan cache:clear && chmod -R 777 public"
    },

当然,您可以在该行中定义自己的命令,我只是使用了 migrate 和 cache clear,但是如果您需要更多内容,请随意添加任何您想要的内容。

【讨论】:

  • 好的,我才意识到这是 2 年前发布的.....但无论如何,我希望这对某人有用。
  • 我使用了非常相似的解决方案,但忘记回答了。还是非常感谢!
猜你喜欢
  • 2019-10-31
  • 2020-05-17
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 2017-08-13
相关资源
最近更新 更多