Files
meijiaka-zy/python-api/nginx/acme-setup.sh
T

90 lines
3.0 KiB
Bash

#!/bin/bash
# 美家卡智影 - acme.sh SSL 证书一键配置脚本
# ===========================================
# 针对国内服务器优化:
# • 使用 Gitee 镜像安装 acme.sh(避免 GitHub 超时)
# • 使用 Let's Encrypt 作为默认 CA(国内验证更稳定)
# • 使用 webroot 模式(无需修改 nginx 配置)
#
# 用法:
# chmod +x acme-setup.sh
# sudo ./acme-setup.sh dev.tapi.meijiaka.cn
set -e
DOMAIN="${1:-dev.tapi.meijiaka.cn}"
NGINX_SSL_DIR="/etc/nginx/ssl"
ACME_CHALLENGE_DIR="/var/www/acme-challenge"
echo "========================================"
echo " acme.sh SSL 证书配置"
echo " 域名: $DOMAIN"
echo "========================================"
# 0. 清理之前失败的残留(空的证书文件等)
echo "[0/6] 清理之前可能的残留..."
rm -f "$NGINX_SSL_DIR/$DOMAIN.crt"
rm -f "$NGINX_SSL_DIR/$DOMAIN.key"
rm -rf "$HOME/.acme.sh/${DOMAIN}_ecc"
# 1. 安装 acme.sh(如果未安装)
if [ ! -d "$HOME/.acme.sh" ]; then
echo "[1/6] 使用 Gitee 镜像安装 acme.sh..."
git clone https://gitee.com/neilpang/acme.sh.git /tmp/acme.sh 2>/dev/null || {
echo "Gitee 也失败了,尝试直接下载 release 包..."
curl -L -o /tmp/acme.sh.tar.gz https://gh.api.99988866.xyz/https://github.com/acmesh-official/acme.sh/archive/refs/tags/3.1.0.tar.gz
mkdir -p /tmp/acme.sh
tar -xzf /tmp/acme.sh.tar.gz -C /tmp/acme.sh --strip-components=1
}
cd /tmp/acme.sh
./acme.sh --install
export PATH="$HOME/.acme.sh:$PATH"
else
echo "[1/6] acme.sh 已安装"
fi
# 2. 设置默认 CA 为 Let's Encrypt
echo "[2/6] 设置 Let's Encrypt 为默认 CA..."
"$HOME/.acme.sh/acme.sh" --set-default-ca --server letsencrypt
# 3. 创建必要目录
echo "[3/6] 创建证书和验证目录..."
mkdir -p "$NGINX_SSL_DIR"
mkdir -p "$ACME_CHALLENGE_DIR"
# 4. 申请证书(webroot 模式 + force,覆盖之前失败的记录)
echo "[4/6] 申请证书: $DOMAIN..."
"$HOME/.acme.sh/acme.sh" --issue -d "$DOMAIN" -w "$ACME_CHALLENGE_DIR" --force
# 5. 安装证书到 nginx 目录
echo "[5/6] 安装证书到 nginx..."
"$HOME/.acme.sh/acme.sh" --install-cert -d "$DOMAIN" \
--key-file "$NGINX_SSL_DIR/$DOMAIN.key" \
--fullchain-file "$NGINX_SSL_DIR/$DOMAIN.crt" \
--reloadcmd "systemctl reload nginx"
# 6. 验证
echo "[6/6] 验证证书..."
"$HOME/.acme.sh/acme.sh" --info -d "$DOMAIN"
# 清理临时下载文件
rm -rf /tmp/acme.sh /tmp/acme.sh.tar.gz 2>/dev/null || true
echo ""
echo "========================================"
echo " ✅ SSL 证书配置完成!"
echo "========================================"
echo " 证书路径:"
echo " $NGINX_SSL_DIR/$DOMAIN.crt"
echo " $NGINX_SSL_DIR/$DOMAIN.key"
echo ""
echo " 验证 HTTPS:"
echo " curl -I https://$DOMAIN/health"
echo ""
echo " 自动续签:"
echo " crontab -l | grep acme"
echo ""
echo " 手动续签测试:"
echo " ~/.acme.sh/acme.sh --renew -d $DOMAIN --dry-run"
echo "========================================"