#!/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