我在学习 Docker
所以如果这个问题听起来很傻,我很抱歉。无论如何,我的目标是创建一个 LAMP
在一个地方处理所有数据库的容器,而且我想为许多站点设置多个虚拟主机。对于我想使用的每个站点 certbot
需要 SSL 证书。
为此,我写了以下 docker-compose.yaml
:
version: "3"
services:
web:
image: webdevops/php-apache:alpine-php7
ports:
- "80:80"
volumes:
- ./www:/app
- ./php.ini:/opt/docker/etc/php/php.ini
- ./sites-available:/opt/docker/etc/httpd/vhost.common.d
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- "3306:3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- "8088:80"
certbot:
image: webdevops/certbot
volumes:
- ./etc/letsencrypt:/etc/letsencrypt
在第一个服务中,我声明 Apache
如web
,我正在使用 alpine
图片由 webdevops
创建, here the documentation .我绑定(bind)端口80
,所以我可以访问Apache
外部没有指定自定义端口。在
volumes
我添加了 www
部分包含 php
的文件夹脚本。我还指定了一个自定义
php.ini
覆盖默认 php
设置。然后,作为 volumes
的最后一部分我试图挂载我在文件夹 sites-available
中创建的所有虚拟主机在 vhost.common.d
目录。然后我有
certbot
容器作为我的 docker-compose
的最后一部分文件,我想做以下事情:最佳答案
我承认,docker 有时很难将所有适当的部分拼凑在一起,话虽如此,我的回答并不完整,但希望能让你更进一步。
以下将创建一个证书(注意 --dry-run
,强烈建议您使用它来进行测试,否则您将受到限制)
docker run -it --rm \
-v /docker-volumes/etc/letsencrypt:/etc/letsencrypt \
-v /docker-volumes/var/lib/letsencrypt:/var/lib/letsencrypt \
-v /vol/to/the/web/root:/data/letsencrypt \
certbot/certbot certonly \
--noninteractive \
--webroot --webroot-path=/data/letsencrypt \
-d sub.domain.com \
--dry-run
-v /docker-volumes/etc/letsencrypt:/etc/letsencrypt
这是存储证书本身所必需的-v /docker-volumes/var/lib/letsencrypt:/var/lib/letsencrypt
不是必需的,但如果您想查看日志消息-v /vol/to/the/web/root:/data/letsencrypt
您需要授予对 Web 根目录的访问权限,以便 certbot 可以创建 .well-known
dir 并进行检查,这是一个棘手的问题,因为您需要链接/使用与 Web 容器 web-root vol 相同的位置--noninteractive
certbot 将绕过向您提问--webroot --webroot-path=/data/letsencrypt
告诉 certbot 在哪里可以找到 webroot(例如在它自己的容器中)虽然不在上面的命令中,但如果提示输入电子邮件地址,您可以添加以下内容以帮助创建证书,不确定是否是必需的
--email [email_address] --agree-tos --no-eff-email
要记住的事情:--dry-run
中运行 certbot否则,您将受到限制 certbot
将需要对主机的 http 访问,您的 vhost 声明不应重定向或拒绝对 http 请求的访问,至少到 .well-known
目录 /etc/init.d/apache2 reload
-it
何时/如果您在 cron 虽然我知道这不是“答案”,但希望其中一些有所帮助。
关于apache - 如何正确配置具有自动续订的 certbot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64186169/