如何在 Heroku 上部署 Dockerized 网站

时间:2021-01-03 16:39:37

标签: docker web heroku dockerfile

我有一个简单的静态网站,只有几行 JavaScript。该网站已使用此 Docker Compose 进行 Docker 化

version: "3.8"

services:

  web:
    image: docker.io/bitnami/apache:latest
    restart: always
    ports:
      - 80:8080
      - 443:8443
    volumes:
      - .:/app

我想在 Heroku 上部署它,但我发现不支持 docker-compose.yml。所以我翻译了 Dockerfile 中的所有内容:

FROM docker.io/bitnami/apache:latest
COPY . /app
EXPOSE 8080
EXPOSE 8443

现在,运行 docker run -p 80:8080 -p 443:8443 <image-name> 的结果与运行 docker-compose 的结果相同,因此一切正常。

我想在 Heroku 上部署这个容器,我做了一个 heroku.yml

build:
 docker:
   web: Dockerfile
 config:
   REQUIREMENTS_FILENAME: heroku.yml
release:
 image: web

我不知道这个配置是否足以让它在 Heroku 上正确运行。我的疑问之一是端口转发。实际上,在 Heroku 中构建成功,但 Deploy 失败(实际上它似乎陷入了循环)。

我做错了什么?

最好的问候

编辑:

我得到的错误是:

apache 16:40:47.10 INFO  ==> ** Starting Apache **
[Sun Jan 03 16:40:47.215603 2021] [ssl:warn] [pid 38] AH01909: www.example.com:8443:0 server certificate does NOT include an ID which matches the server name
[Sun Jan 03 16:40:47.246370 2021] [ssl:warn] [pid 38] AH01909: www.example.com:8443:0 server certificate does NOT include an ID which matches the server name
[Sun Jan 03 16:40:47.250502 2021] [mpm_prefork:notice] [pid 38] AH00163: Apache/2.4.46 (Unix) OpenSSL/1.1.1d configured -- resuming normal operations
[Sun Jan 03 16:40:47.257621 2021] [core:notice] [pid 38] AH00094: Command line: '/opt/bitnami/apache/bin/httpd -f /opt/bitnami/apache/conf/httpd.conf -D FOREGROUND'

而且感觉像是卡在了 Bootloop 什么的。我在本地也收到了这个“服务器证书警告”,但似乎一切正常,所以我想这不是真正的问题。

1 个答案:

答案 0 :(得分:0)

您需要将 Dockerfile 更改为如下所示:

FROM docker.io/bitnami/apache:latest
COPY . /app
# Heroku container ports are dynamic. So change your Listen port from 8080 to ${PORT}
RUN sed -i "s/8080/\${PORT}/g" /opt/bitnami/apache/conf/httpd.conf /opt/bitnami/apache/conf/vhosts/00_status-vhost.conf

Heroku 本身会为你处理 https。