Skip to content

Commit 250c1e7

Browse files
author
cli
committed
wip: 使用Dockerfile给certbot的容器添加docker compose命令
1 parent e027965 commit 250c1e7

5 files changed

Lines changed: 54 additions & 49 deletions

File tree

.env.default

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,18 @@ WEB_PORT_HTTPS=443
5151
# jtt808和maintain分开部署时, 必须填写这个变量
5252
WEB_BASE_URL='' # https://livedvr.tripsdd.com
5353

54+
# certbot的配置
55+
# 注意: 修改这些配置之后, 必须强制重建(docker compose up --force-recreate certbot), 才会生效
56+
#
57+
# DNS解析的提供商, 常用的提供商如下:
58+
# - dnspod: https://console.dnspod.cn/account/token/token
59+
# - cloudflare: https://go-acme.github.io/lego/dns/cloudflare/
60+
# - tencentcloud: https://console.cloud.tencent.com/cam/capi
61+
CERTBOT_DNS_PROVIDER='dnspod'
62+
CERTBOT_DNS_API_KEY='' # 必填
63+
# tencentcloud还需要额外设置这个变量
64+
CERTBOT_TENCENTCLOUD_SECRET_ID=''
65+
5466
## ================================ Services ================================
5567

5668
## 视频服务器

certbot/Dockerfile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# 支持100+DNS提供商的Certbot插件
2+
# 详见: https://github.com/alexzorin/certbot-dns-multi
3+
FROM ghcr.io/alexzorin/certbot-dns-multi:4.27.0
4+
5+
# 添加docker和docker compose命令
6+
COPY --from=docker:cli /usr/local/bin/docker /usr/local/bin/docker
7+
COPY --from=docker:cli /usr/local/libexec/docker/cli-plugins/docker-compose /usr/local/libexec/docker/cli-plugins/docker-compose

certbot/certbot-renew.sh

Lines changed: 0 additions & 26 deletions
This file was deleted.

certbot/compose.yml

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
services:
22
certbot:
3-
# image: ghcr.io/alexzorin/certbot-dns-multi:4.27.0
4-
# command:
5-
# - certonly
6-
# - --non-interactive
7-
# - --agree-tos
8-
# - --authenticator=dns-multi
9-
# - --dns-multi-credentials=/etc/letsencrypt/dns-multi.ini
10-
# - --domains=${TRACK_HOSTNAME:?required}
11-
# - --domains=${BUS_HOSTNAME:?required}
12-
# - --dry-run
13-
image: docker:cli
14-
command: /home/docker/certbot/certbot-renew.sh
3+
build: .
4+
command:
5+
- certonly
6+
- --non-interactive
7+
- --agree-tos
8+
- --authenticator=dns-multi
9+
- --dns-multi-credentials=/etc/letsencrypt/dns-multi.ini
10+
# 两个域名可以同时申请, 故不要求两个都必填
11+
- --domains=${TRACK_HOSTNAME}
12+
- --domains=${BUS_HOSTNAME}
13+
- --deploy-hook
14+
- "sh -c 'COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME} DATA=${DATA_DIR:-/data} /home/docker/certbot/deploy-hook.sh'"
1515
volumes:
1616
- /var/run/docker.sock:/var/run/docker.sock
1717
- ${DATA_DIR:-/data}/certbot:/etc/letsencrypt
1818
configs:
19-
- source: certbot-renew.sh
20-
target: /home/docker/certbot/certbot-renew.sh
19+
- source: certbot-deploy-hook.sh
20+
target: /home/docker/certbot/deploy-hook.sh
2121
- source: certbot-dns-multi.ini
2222
target: /etc/letsencrypt/dns-multi.ini
2323
mode: 0600
@@ -29,21 +29,22 @@ services:
2929
volumes:
3030
- /var/run/docker.sock:/var/run/docker.sock:ro
3131
labels:
32+
# 通过ofelia重启其他服务, 需要这样绕一道
3233
# https://github.com/mcuadros/ofelia/issues/280#issuecomment-2561863012
3334
ofelia.job-run.certbot-renew.schedule: "@daily"
3435
ofelia.job-run.certbot-renew.command: "sh -c 'docker compose -p ${COMPOSE_PROJECT_NAME} restart certbot'"
3536
ofelia.job-run.certbot-renew.image: "docker:cli"
3637
ofelia.job-run.certbot-renew.volume: "/var/run/docker.sock:/var/run/docker.sock"
3738

3839
configs:
39-
certbot-renew.sh:
40-
file: ./certbot-renew.sh
40+
certbot-deploy-hook.sh:
41+
file: ./deploy-hook.sh
42+
# certbot-dns-multi的配置文件
43+
# https://github.com/alexzorin/certbot-dns-multi#usage
4144
certbot-dns-multi.ini:
4245
content: |
43-
dns_multi_provider=cloudflare
44-
CLOUDFLARE_DNS_API_TOKEN=
45-
certbot-dns-multi-tencentcloud.ini:
46-
content: |
47-
dns_multi_provider=tencentcloud
48-
TENCENTCLOUD_SECRET_ID=
49-
TENCENTCLOUD_SECRET_KEY=
46+
dns_multi_provider=${CERTBOT_DNS_PROVIDER:-dnspod}
47+
DNSPOD_API_KEY=${CERTBOT_DNS_API_KEY:?required}
48+
CLOUDFLARE_DNS_API_TOKEN=${CERTBOT_DNS_API_KEY:?required}
49+
TENCENTCLOUD_SECRET_KEY=${CERTBOT_DNS_API_KEY:?required}
50+
TENCENTCLOUD_SECRET_ID=${CERTBOT_TENCENTCLOUD_SECRET_ID}

certbot/deploy-hook.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/bin/sh
2+
set -e
3+
4+
cp "$RENEWED_LINEAGE/fullchain.pem" "$RENEWED_LINEAGE/certificate.crt"
5+
cp "$RENEWED_LINEAGE/privkey.pem" "$RENEWED_LINEAGE/certificate.key"
6+
7+
echo "请保证将证书变量设置为:"
8+
echo "SSL_CERTIFICATE=${DATA_DIR:-/data}/certbot/live/$(basename "$RENEWED_DOMAINS")/certificate"
9+
10+
echo "重启Nginx..."
11+
docker compose -p "${COMPOSE_PROJECT_NAME}" restart nginx

0 commit comments

Comments
 (0)