0908
This commit is contained in:
61
acme/issue.sh
Normal file
61
acme/issue.sh
Normal file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# 首次申请证书并启用 HTTPS(完整引导)。
|
||||
#
|
||||
# 1. 准备宿主机目录:acme.sh 写挑战文件,nginx 容器 bind mount 只读
|
||||
# 2. 启动 nginx —— 此时 ssl.d/ 为空,只加载 80 端口配置,不依赖证书
|
||||
# 3. 申请 SAN 证书(webroot 验证,挑战文件由 nginx 直接对外提供)
|
||||
# 4. 把证书安装到 /etc/letsencrypt/live/<CERT_NAME>/
|
||||
# --reloadcmd 会被 acme.sh 记住,之后每次自动续签都执行
|
||||
# 5. 启用 HTTPS server 块并重载 nginx
|
||||
#
|
||||
# 需要 root 权限(要写 /etc/letsencrypt 与 /var/www):sudo bash issue.sh
|
||||
#
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
NGINX_DIR="$SCRIPT_DIR/../nginx"
|
||||
|
||||
EMAIL="${EMAIL:-admin@stonelan.cn}"
|
||||
CERT_NAME="${CERT_NAME:-stonelan.cn}"
|
||||
WEBROOT="${WEBROOT:-/var/www/certbot}"
|
||||
CERT_HOME="${CERT_HOME:-/etc/letsencrypt/live/$CERT_NAME}"
|
||||
DOMAINS="${DOMAINS:-fastgpt.stonelan.cn gitea.stonelan.cn image.stonelan.cn registry.stonelan.cn www.stonelan.cn}"
|
||||
ACME="${ACME:-$HOME/.acme.sh/acme.sh}"
|
||||
|
||||
# acme.sh 的 Main_Domain 就是 -d 列表的第一个,--install-cert 要用它
|
||||
PRIMARY="${DOMAINS%% *}"
|
||||
|
||||
if [ ! -s "$ACME" ]; then
|
||||
echo "未找到 acme.sh,请先执行:$SCRIPT_DIR/install.sh" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 1. 目录
|
||||
mkdir -p "$WEBROOT/.well-known/acme-challenge" "$CERT_HOME"
|
||||
chmod 755 "$WEBROOT" "$WEBROOT/.well-known" "$WEBROOT/.well-known/acme-challenge"
|
||||
|
||||
# 2. nginx(无证书也能起来)
|
||||
echo "==> 启动 nginx"
|
||||
docker compose -f "$NGINX_DIR/docker-compose.yml" up -d
|
||||
|
||||
# 3. 申请
|
||||
args=()
|
||||
for d in $DOMAINS; do
|
||||
args+=(-d "$d")
|
||||
done
|
||||
|
||||
echo "==> 申请证书(主域 $PRIMARY,共 $(echo $DOMAINS | wc -w) 个域名):$DOMAINS"
|
||||
"$ACME" --issue --webroot "$WEBROOT" --server letsencrypt "${args[@]}"
|
||||
|
||||
# 4. 安装证书
|
||||
echo "==> 安装证书到 $CERT_HOME"
|
||||
"$ACME" --install-cert -d "$PRIMARY" \
|
||||
--cert-file "$CERT_HOME/cert.pem" \
|
||||
--key-file "$CERT_HOME/privkey.pem" \
|
||||
--fullchain-file "$CERT_HOME/fullchain.pem" \
|
||||
--reloadcmd "docker kill -s HUP nginx-proxy"
|
||||
|
||||
# 5. 启用 HTTPS
|
||||
echo "==> 启用 HTTPS 配置"
|
||||
exec bash "$NGINX_DIR/enable-ssl.sh"
|
||||
Reference in New Issue
Block a user