Files
common-server-public/acme/issue.sh
张威33321 a9ec40a289 0908
2026-09-09 15:04:54 +08:00

62 lines
2.1 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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/wwwsudo 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"