93 lines
2.8 KiB
Bash
93 lines
2.8 KiB
Bash
#!/bin/bash
|
||
|
||
# 停止转录服务
|
||
sudo systemctl stop transcription
|
||
|
||
# 创建应用目录并设置所有者
|
||
sudo mkdir -p /opt/transcription-app
|
||
sudo chown $USER:$USER /opt/transcription-app
|
||
|
||
# 复制应用文件
|
||
cp app.py /opt/transcription-app/
|
||
cp -r templates /opt/transcription-app/
|
||
cp requirements.txt /opt/transcription-app/
|
||
cp scripts/reset_db.py /opt/transcription-app/
|
||
cp scripts/create_admin.py /opt/transcription-app/
|
||
cp .env /opt/transcription-app/ # 复制包含 API 密钥的 .env 文件
|
||
|
||
# 如果 .env 文件中不存在 SECRET_KEY,则添加
|
||
if ! grep -q "SECRET_KEY" /opt/transcription-app/.env; then
|
||
echo "SECRET_KEY=$(openssl rand -hex 32)" >> /opt/transcription-app/.env
|
||
echo "已添加 SECRET_KEY 到 .env 文件"
|
||
fi
|
||
|
||
# 创建并激活虚拟环境
|
||
python3 -m venv /opt/transcription-app/venv
|
||
source /opt/transcription-app/venv/bin/activate
|
||
|
||
# 安装依赖
|
||
cd /opt/transcription-app
|
||
pip install -r requirements.txt
|
||
|
||
# 创建上传和数据库目录并设置权限
|
||
mkdir -p /opt/transcription-app/uploads
|
||
mkdir -p /opt/transcription-app/instance
|
||
chmod 755 /opt/transcription-app/uploads
|
||
chmod 755 /opt/transcription-app/instance
|
||
|
||
# 初始化或迁移数据库
|
||
if [ ! -f /opt/transcription-app/instance/transcriptions.db ]; then
|
||
# 如果数据库不存在,从头创建
|
||
echo "数据库不存在,正在创建新数据库..."
|
||
python reset_db.py
|
||
else
|
||
# 如果数据库存在,迁移模式以保留数据
|
||
echo "数据库已存在,正在迁移模式以保留数据..."
|
||
python migrate_db.py
|
||
fi
|
||
|
||
# 设置所有文件的正确所有者
|
||
sudo chown -R $USER:$USER /opt/transcription-app
|
||
|
||
# 创建 systemd 服务文件
|
||
sudo tee /etc/systemd/system/transcription.service << EOF
|
||
[Unit]
|
||
Description=Transcription Web Application
|
||
After=network.target
|
||
|
||
[Service]
|
||
User=$USER
|
||
EnvironmentFile=/opt/transcription-app/.env
|
||
WorkingDirectory=/opt/transcription-app
|
||
Environment="PATH=/opt/transcription-app/venv/bin"
|
||
Environment="PYTHONPATH=/opt/transcription-app"
|
||
ExecStart=/opt/transcription-app/venv/bin/gunicorn --workers 3 --threads 8 --bind 0.0.0.0:8899 --timeout 600 app:app
|
||
Restart=always
|
||
RestartSec=5
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
|
||
# 重新加载 systemd 并启动服务
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl restart transcription
|
||
sudo systemctl disable transcription
|
||
sudo systemctl enable transcription
|
||
|
||
# 检查服务状态
|
||
echo "正在检查服务状态..."
|
||
sleep 3
|
||
sudo systemctl status transcription
|
||
|
||
echo "安装完成!应用应在 8899 端口上运行。"
|
||
|
||
# 询问是否创建管理员账户
|
||
read -p "是否现在创建管理员账户?(y/n): " create_admin
|
||
if [[ $create_admin == "y" || $create_admin == "Y" ]]; then
|
||
echo "正在创建管理员账户..."
|
||
python create_admin.py
|
||
else
|
||
echo "你可以稍后运行以下命令来创建管理员账户:python create_admin.py"
|
||
fi
|