共享 dockerized apache/php/mysql 应用程序,无需创建 apache 配置文件

问题描述 投票:0回答:1

我创建了一个简单的待办事项列表 apache/php/mysql Web 应用程序,其中包含 2 个 docker 容器(一个 apache/php/code 和一个 mysql)。然后我在 docker hub 上创建了一个包含 php 代码的镜像。

如果有人想部署我的应用程序,则必须:

  • 使用我提供的内容(可能来自 Github)创建一个 docker-compose.yml 文件
  • 使用 mysql 密码、端口等创建 .env 文件
  • 为 apache vhost 配置创建 000-default.conf 文件
  • 为 https 创建 fullchain.pem 和 privkey.pem
  • 运行 docker-compose.yml

我不确定以这种方式分发公共应用程序是否是最佳实践。我想简化这个过程。我想我可以首先删除创建 000-default.conf 文件的需要,但我真的不知道如何开始。任何想法或建议将不胜感激。谢谢!

编辑以下大卫评论:

apache 配置文件非常简单。看起来像这样:

<VirtualHost *:80>
  ServerName XXXXXX
  DocumentRoot /var/www/html
</VirtualHost>
   
<IfModule mod_ssl.c>
<VirtualHost *:443>
  ServerName XXXXXX
  DocumentRoot /var/www/html
  SSLCertificateFile /etc/apache2/ssl/fullchain.pem
  SSLCertificateKeyFile /etc/apache2/ssl/privkey.pem
  SSLEngine on
</VirtualHost>
</IfModule>

我看到两个问题:

  1. SeverName 根据部署应用程序的人员的域而变化。
  2. 如果部署者不提供证书,容器将无法启动,因为正在查找不存在的 .pem 文件。
docker apache containers
1个回答
0
投票

我成功地做了我想做的事。我只需要在我的 apache 配置文件中创建一个变量:

<VirtualHost *:80>
    ServerName ${SERVER_NAME}
    DocumentRoot /var/www/html
</VirtualHost>
       
<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName ${SERVER_NAME}
    DocumentRoot /var/www/html
    SSLCertificateFile /etc/apache2/ssl/fullchain.pem
    SSLCertificateKeyFile /etc/apache2/ssl/privkey.pem
    SSLEngine on
</VirtualHost>
</IfModule>

复制配置文件构建镜像:

# Copy apache config
COPY ./000-default.conf /etc/apache2/sites-available/000-default.conf

从 .env 传递值:

SERVER_NAME=mydomain.com

到 docker-compose.yml :

environment:
      SERVER_NAME: ${SERVER_NAME}  
© www.soinside.com 2019 - 2024. All rights reserved.