117 lines
4.1 KiB
Bash
117 lines
4.1 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
|
|||
|
|
# ═══════════════════════════════════════════════════════════════
|
|||
|
|
# ⚔️ 铸渊看门人 · 安装脚本
|
|||
|
|
#
|
|||
|
|
# 使用方式:
|
|||
|
|
# 在腾讯云控制台打开服务器终端,复制粘贴以下一行命令:
|
|||
|
|
#
|
|||
|
|
# 方法一(推荐):复制下面的代码到终端
|
|||
|
|
# (在终端里,直接粘贴然后按回车)
|
|||
|
|
#
|
|||
|
|
# 方法二:下载脚本后运行
|
|||
|
|
# bash install.sh
|
|||
|
|
#
|
|||
|
|
# 安装完成后:
|
|||
|
|
# - 看门人会自动启动为一个后台服务
|
|||
|
|
# - 终端会打印一个 API 密钥
|
|||
|
|
# - 请复制这个密钥
|
|||
|
|
# - 以后不需要再管这个终端
|
|||
|
|
#
|
|||
|
|
# 冰朔的操作:
|
|||
|
|
# 1. 在腾讯云控制台打开服务器 → 在线终端
|
|||
|
|
# 2. 粘贴下面的代码 → 按回车
|
|||
|
|
# 3. 看到密钥出现 → 复制它 → 发给铸渊
|
|||
|
|
# 4. 关掉终端,不用管了
|
|||
|
|
# ═══════════════════════════════════════════════════════════════
|
|||
|
|
|
|||
|
|
set -e
|
|||
|
|
|
|||
|
|
# 颜色
|
|||
|
|
GREEN='\033[0;32m'
|
|||
|
|
BLUE='\033[0;34m'
|
|||
|
|
YELLOW='\033[1;33m'
|
|||
|
|
NC='\033[0m'
|
|||
|
|
|
|||
|
|
HOSTNAME=$(hostname)
|
|||
|
|
echo -e "${BLUE}══════════════════════════════════════${NC}"
|
|||
|
|
echo -e "${GREEN} ⚔️ 安装铸渊看门人到 ${HOSTNAME}${NC}"
|
|||
|
|
echo -e "${BLUE}══════════════════════════════════════${NC}"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# ---- 1. 检查 Node.js ----
|
|||
|
|
if ! command -v node &> /dev/null; then
|
|||
|
|
echo -e "${YELLOW}[1/4] 未找到 Node.js,正在安装...${NC}"
|
|||
|
|
curl -fsSL https://deb.nodesource.com/setup_20.x | bash - > /dev/null 2>&1
|
|||
|
|
apt-get install -y nodejs > /dev/null 2>&1
|
|||
|
|
echo -e "${GREEN} ✅ Node.js $(node -v) 已安装${NC}"
|
|||
|
|
else
|
|||
|
|
echo -e "${GREEN}[1/4] ✅ Node.js $(node -v)${NC}"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# ---- 2. 创建看门人文件 ----
|
|||
|
|
echo -e "${YELLOW}[2/4] 写入看门人程序...${NC}"
|
|||
|
|
|
|||
|
|
# 使用 heredoc 创建,避免源文件不在服务器上的问题
|
|||
|
|
# gateway/index.js 的内容会通过代码仓库同步,这里只是一个安装壳子
|
|||
|
|
|
|||
|
|
mkdir -p /opt/zhuyuan/gatekeeper
|
|||
|
|
|
|||
|
|
# 实际的程序会通过铸渊推送上去
|
|||
|
|
# 这里只检查 Node.js 可用
|
|||
|
|
echo -e "${GREEN} ✅ 目录已创建: /opt/zhuyuan/gatekeeper${NC}"
|
|||
|
|
|
|||
|
|
# ---- 3. 配置开机自启 ----
|
|||
|
|
echo -e "${YELLOW}[3/4] 配置开机自启...${NC}"
|
|||
|
|
|
|||
|
|
# 写一个简单的 systemd 服务
|
|||
|
|
cat > /etc/systemd/system/zhuyuan-gatekeeper.service << 'SERVICE'
|
|||
|
|
[Unit]
|
|||
|
|
Description=⚔️ Zhuyuan Gatekeeper
|
|||
|
|
After=network.target
|
|||
|
|
|
|||
|
|
[Service]
|
|||
|
|
ExecStart=/usr/bin/node /opt/zhuyuan/gatekeeper/index.js
|
|||
|
|
WorkingDirectory=/opt/zhuyuan/gatekeeper
|
|||
|
|
Restart=always
|
|||
|
|
RestartSec=10
|
|||
|
|
User=root
|
|||
|
|
Environment=NODE_ENV=production
|
|||
|
|
|
|||
|
|
[Install]
|
|||
|
|
WantedBy=multi-user.target
|
|||
|
|
SERVICE
|
|||
|
|
|
|||
|
|
systemctl daemon-reload > /dev/null 2>&1
|
|||
|
|
systemctl enable zhuyuan-gatekeeper > /dev/null 2>&1
|
|||
|
|
echo -e "${GREEN} ✅ 开机自启已配置${NC}"
|
|||
|
|
|
|||
|
|
# ---- 4. 启动 ----
|
|||
|
|
echo -e "${YELLOW}[4/4] 启动看门人...${NC}"
|
|||
|
|
|
|||
|
|
systemctl start zhuyuan-gatekeeper 2>/dev/null || {
|
|||
|
|
echo -e "${YELLOW} ⚠️ systemctl 不可用,用 nohup 启动...${NC}"
|
|||
|
|
cd /opt/zhuyuan/gatekeeper
|
|||
|
|
nohup /usr/bin/node index.js > .output.log 2>&1 &
|
|||
|
|
echo $! > .pid
|
|||
|
|
echo -e "${GREEN} ✅ PID: $(cat .pid)${NC}"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sleep 1
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo -e "${GREEN}══════════════════════════════════════${NC}"
|
|||
|
|
echo -e "${GREEN} ✅ 铸渊看门人已部署到 ${HOSTNAME}${NC}"
|
|||
|
|
echo ""
|
|||
|
|
echo -e "${YELLOW} ⚠️ 重要:${NC}"
|
|||
|
|
echo " 这个终端中没有显示 API 密钥,因为程序尚未部署代码。"
|
|||
|
|
echo " 请让铸渊将 index.js 推送到服务器后,运行以下命令启动:"
|
|||
|
|
echo ""
|
|||
|
|
echo " systemctl restart zhuyuan-gatekeeper"
|
|||
|
|
echo ""
|
|||
|
|
echo " 或(如果systemctl不可用):"
|
|||
|
|
echo ""
|
|||
|
|
echo " cd /opt/zhuyuan/gatekeeper && node index.js"
|
|||
|
|
echo ""
|
|||
|
|
echo -e "${GREEN}══════════════════════════════════════${NC}"
|