183 lines
5.0 KiB
Bash
Executable File
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
|