first commit
This commit is contained in:
Executable
+182
@@ -0,0 +1,182 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user