提问人:Pozinux 提问时间:11/11/2023 最后编辑:Pozinux 更新时间:11/13/2023 访问量:50
共享 dockerized apache/php/mysql 应用程序,无需创建 apache 配置文件
Share an dockerized apache/php/mysql app without having to create a apache config file
问:
我创建了一个简单的待办事项列表 apache/php/mysql Web 应用程序,其中包含 2 个 docker 容器(一个 apache/php/code 和一个 mysql)。然后,我在docker hub上创建了一个映像,该映像启动了php代码。
如果有人想要部署我的应用程序,它必须:
- 使用我提供的内容创建一个docker-compose.yml文件(可能来自 Github)
- 创建一个带有 mysql 密码、端口等的 .env 文件。
- 为 apache vhost 配置创建 000-default.conf 文件
- 创建用于 https 的 fullchain.pem 和 privkey.pem
- 运行docker-compose.yml
我不确定以这种方式分发公共应用程序是否是最佳做法。我想简化这个过程。我想我可以首先消除创建 000-default.conf 文件的需要,但我真的不知道从哪里开始。任何想法或建议将不胜感激。谢谢!
编辑1:以下David评论:
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>
我看到两个问题:
- SeverName 根据部署应用程序的人员的域而变化。
- 如果部署程序未提供证书,则容器无法启动,因为要查找不存在的 .pem 文件。
答:
0赞
Pozinux
11/11/2023
#1
我设法将 apache 配置包含在 Docker 映像中。
- 在 apache 配置文件中为 ServerName 和 SSL 路径创建一个变量:
<VirtualHost *:80>
ServerName ${SERVER_NAME}
DocumentRoot /var/www/html
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName ${SERVER_NAME}
DocumentRoot /var/www/html
SSLCertificateFile ${SSL_CERT_FILE}
SSLCertificateKeyFile ${SSL_KEY_FILE}
SSLEngine on
</VirtualHost>
</IfModule>
- 在 Dockerfile 中,复制 apache config:
COPY ./000-default.conf /etc/apache2/sites-available/000-default.conf
- 从 .env 文件中传递值:
SERVER_NAME=mydomain.com
SSL_CERT_FILE=/etc/apache2/ssl/fullchain.pem # Uncomment if certificate provided into ssl folder
SSL_KEY_FILE=/etc/apache2/ssl/privkey.pem # Uncomment if certificate provided into ssl folder
docker-compose.yml :
environment:
SERVER_NAME: ${SERVER_NAME}
SSL_CERT_FILE: ${SSL_CERT_FILE:-/etc/apache2/default_ssl/fullchain.pem}
SSL_KEY_FILE: ${SSL_KEY_FILE:-/etc/apache2/default_ssl/privkey.pem}
- 绑定部署程序提供的 SSL 证书的卷
volumes:
- "./ssl:/etc/apache2/ssl"
容器中的 apache 配置采用部署程序在 .env 中提供的值。如果他不提供证书,则会采用包含在 docker 映像中的默认自动签名证书。
评论