-
Notifications
You must be signed in to change notification settings - Fork 329
Expand file tree
/
Copy pathdeploy.sh
More file actions
168 lines (147 loc) · 4.41 KB
/
deploy.sh
File metadata and controls
168 lines (147 loc) · 4.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#!/bin/bash
# ========================================
# 自动部署脚本 - 适用于 Ubuntu/Debian 小鸡
# 1H1G 优化版
# ========================================
set -e
APP_DIR="/opt/auto_bindcard"
APP_USER="bindcard"
STREAMLIT_PORT=8501
echo "============================="
echo " 自动绑卡工具 - 部署脚本"
echo "============================="
# 检查 root
if [ "$EUID" -ne 0 ]; then
echo "❌ 请使用 root 运行: sudo bash deploy.sh"
exit 1
fi
# ---- 1. 系统依赖 ----
echo ""
echo "[1/7] 安装系统依赖..."
apt-get update -qq
apt-get install -y -qq \
python3 python3-venv python3-pip \
xvfb \
wget curl unzip \
libnss3 libatk-bridge2.0-0 libdrm2 libxcomposite1 \
libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 \
libcairo2 libasound2 libatspi2.0-0 libcups2 \
libxkbcommon0 libgtk-3-0 fonts-liberation \
> /dev/null 2>&1
echo " ✅ 系统依赖已安装"
# ---- 2. Swap (1H1G 必需) ----
echo ""
echo "[2/7] 配置 Swap..."
if [ ! -f /swapfile ]; then
fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile > /dev/null
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
echo " ✅ 已创建 1G Swap"
else
echo " ⏭ Swap 已存在"
fi
# ---- 3. 创建用户和目录 ----
echo ""
echo "[3/7] 创建应用用户和目录..."
if ! id "$APP_USER" &>/dev/null; then
useradd -r -m -s /bin/bash "$APP_USER"
echo " ✅ 已创建用户 $APP_USER"
else
echo " ⏭ 用户 $APP_USER 已存在"
fi
mkdir -p "$APP_DIR"
cp -r ./* "$APP_DIR/"
cp -r .streamlit "$APP_DIR/"
chown -R "$APP_USER:$APP_USER" "$APP_DIR"
echo " ✅ 文件已复制到 $APP_DIR"
# ---- 4. Python 虚拟环境 ----
echo ""
echo "[4/7] 创建 Python 虚拟环境..."
cd "$APP_DIR"
sudo -u "$APP_USER" python3 -m venv venv
sudo -u "$APP_USER" venv/bin/pip install --upgrade pip -q
sudo -u "$APP_USER" venv/bin/pip install -r requirements.txt -q
sudo -u "$APP_USER" venv/bin/pip install playwright -q
echo " ✅ Python 依赖已安装"
# ---- 5. 安装 Playwright Chromium ----
echo ""
echo "[5/7] 安装 Playwright Chromium..."
sudo -u "$APP_USER" venv/bin/playwright install chromium
echo " ✅ Chromium 已安装"
# ---- 6. 配置文件 ----
echo ""
echo "[6/7] 检查配置文件..."
if [ ! -f "$APP_DIR/config.json" ]; then
cp "$APP_DIR/config.example.json" "$APP_DIR/config.json"
echo " ⚠️ 已从模板创建 config.json,请编辑: $APP_DIR/config.json"
else
echo " ⏭ config.json 已存在"
fi
# ---- 7. Systemd 服务 ----
echo ""
echo "[7/8] 配置 systemd 服务..."
cat > /etc/systemd/system/xvfb.service << 'EOF'
[Unit]
Description=Xvfb Virtual Framebuffer
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/Xvfb :99 -screen 0 1280x720x24 -ac -nolisten tcp
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
cat > /etc/systemd/system/auto-bindcard.service << EOF
[Unit]
Description=Auto BindCard Web UI
After=network.target xvfb.service
Requires=xvfb.service
[Service]
Type=simple
User=$APP_USER
WorkingDirectory=$APP_DIR
Environment=DISPLAY=:99
Environment=PYTHONUNBUFFERED=1
ExecStart=$APP_DIR/venv/bin/streamlit run ui.py \\
--server.port=$STREAMLIT_PORT \\
--server.address=0.0.0.0 \\
--server.headless=true \\
--server.maxUploadSize=5 \\
--browser.gatherUsageStats=false
Restart=always
RestartSec=10
# 内存限制 (防止 OOM killer)
MemoryMax=800M
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable xvfb auto-bindcard
systemctl start xvfb
systemctl start auto-bindcard
echo " ✅ 服务已启动"
# ---- 8. 初始化数据库 & 修复权限 ----
echo ""
echo "[8/8] 初始化数据库..."
cd "$APP_DIR"
sudo -u "$APP_USER" venv/bin/python -c "from database import init_db; init_db(); print(' ✅ 数据库已初始化')"
chown -R "$APP_USER:$APP_USER" "$APP_DIR"
# ---- 完成 ----
echo ""
echo "============================="
echo " ✅ 部署完成!"
echo "============================="
echo ""
echo " 📦 应用目录: $APP_DIR"
echo " 🌐 访问地址: http://$(hostname -I | awk '{print $1}'):$STREAMLIT_PORT"
echo " 📝 配置文件: $APP_DIR/config.json"
echo ""
echo " 常用命令:"
echo " 查看状态: systemctl status auto-bindcard"
echo " 查看日志: journalctl -u auto-bindcard -f"
echo " 重启服务: systemctl restart auto-bindcard"
echo " 管理兑换码: cd $APP_DIR && venv/bin/python admin_cli.py generate 10 --uses 5"
echo ""