Files
ssl-manager/install.sh
T
2026-04-08 17:52:38 +08:00

183 lines
5.0 KiB
Bash
Executable File

#!/bin/bash
#############################################
# SSL Manager 一键安装脚本
#############################################
set -e
echo "🚀 开始安装 SSL 证书管理器..."
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 检查 Node.js
check_node() {
if ! command -v node &> /dev/null; then
echo -e "${RED}❌ 未检测到 Node.js,请先安装 Node.js 18+${NC}"
exit 1
fi
NODE_VERSION=$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
if [ "$NODE_VERSION" -lt 18 ]; then
echo -e "${RED}❌ Node.js 版本过低,需要 18+,当前版本:$(node -v)${NC}"
exit 1
fi
echo -e "${GREEN}✓ Node.js 版本检查通过:$(node -v)${NC}"
}
# 安装 acme.sh(使用 Gitee 镜像)
install_acme() {
echo "📦 安装 acme.sh..."
if [ -f /root/.acme.sh/acme.sh ]; then
echo -e "${YELLOW}⚠️ acme.sh 已安装,跳过${NC}"
else
echo -e "${YELLOW}📌 使用 Gitee 镜像源安装 acme.sh${NC}"
# 从 Gitee 克隆到临时目录,避免冲突
if command -v git &> /dev/null; then
git clone https://gitee.com/Neilpang/acme.sh.git /tmp/acme.sh
cd /tmp/acme.sh
./acme.sh --install --accountemail "${ACME_EMAIL:-}" --home /root/.acme.sh
rm -rf /tmp/acme.sh
echo -e "${GREEN}✓ acme.sh 安装完成(Gitee 镜像)${NC}"
else
# 备用方案 - 使用 GitHub 镜像站
echo -e "${YELLOW}⚠️ Git 不可用,尝试备用方案...${NC}"
curl -L https://ghproxy.com/https://github.com/acmesh-official/acme.sh/archive/master.tar.gz | tar xz
cd acme.sh-master
./acme.sh --install --accountemail "${ACME_EMAIL:-}" --home /root/.acme.sh
cd ..
rm -rf acme.sh-master
echo -e "${GREEN}✓ acme.sh 安装完成(GitHub 镜像)${NC}"
fi
fi
}
# 安装后端依赖(使用淘宝镜像)
install_backend() {
echo "📦 安装后端依赖..."
cd "$(dirname "$0")/backend"
# 配置 npm 淘宝镜像
npm config set registry https://registry.npmmirror.com
npm install --production
echo -e "${GREEN}✓ 后端依赖安装完成(淘宝镜像)${NC}"
}
# 安装前端依赖并构建(使用淘宝镜像)
install_frontend() {
echo "📦 安装前端依赖并构建..."
cd "$(dirname "$0")/frontend"
# 配置 npm 淘宝镜像
npm config set registry https://registry.npmmirror.com
npm install
npm run build
echo -e "${GREEN}✓ 前端构建完成(淘宝镜像)${NC}"
}
# 创建日志目录
setup_logs() {
echo "📁 创建日志目录..."
sudo mkdir -p /var/log/ssl-manager
sudo chmod 755 /var/log/ssl-manager
echo -e "${GREEN}✓ 日志目录创建完成${NC}"
}
# 配置环境变量
setup_env() {
echo "⚙️ 配置环境变量..."
cd "$(dirname "$0")/backend"
if [ ! -f .env ]; then
cp .env.example .env
# 生成加密密钥
ENCRYPTION_KEY=$(openssl rand -hex 32)
sed -i "s/your-32-character-secret-key-here/$ENCRYPTION_KEY/" .env
echo -e "${GREEN}✓ 环境配置完成${NC}"
else
echo -e "${YELLOW}⚠️ .env 已存在,跳过${NC}"
fi
}
# 配置 systemd 服务(可选)
setup_systemd() {
echo "🔧 配置 systemd 服务..."
read -p "是否配置 systemd 服务以便开机自启?(y/n): " choice
if [ "$choice" != "y" ]; then
echo -e "${YELLOW}⚠️ 跳过 systemd 配置${NC}"
return
fi
SERVICE_FILE="/etc/systemd/system/ssl-manager.service"
cat > "$SERVICE_FILE" << EOF
[Unit]
Description=SSL Certificate Manager
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=$(dirname "$0")/backend
ExecStart=/usr/bin/node src/index.js
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable ssl-manager
systemctl start ssl-manager
echo -e "${GREEN}✓ systemd 服务配置完成${NC}"
echo -e "${GREEN} 服务状态:systemctl status ssl-manager${NC}"
}
# 主流程
main() {
echo ""
check_node
echo ""
install_acme
echo ""
install_backend
echo ""
install_frontend
echo ""
setup_logs
echo ""
setup_env
echo ""
setup_systemd
echo ""
echo "=========================================="
echo -e "${GREEN}🎉 安装完成!${NC}"
echo "=========================================="
echo ""
echo "📍 访问地址:http://localhost:3000"
echo "📝 日志文件:/var/log/ssl-manager/renew.log"
echo "🔧 管理服务:systemctl [start|stop|restart|status] ssl-manager"
echo ""
echo -e "${YELLOW}⚠️ 别忘了配置自动续期:${NC}"
echo " chmod +x scripts/auto-renew.sh"
echo " crontab -e"
echo " 添加:0 0 * * * $(dirname "$0")/scripts/auto-renew.sh"
echo ""
}
# 执行
main