Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
abdc1fc739 | ||
|
|
082d7fa133 |
3
app.py
3
app.py
@@ -179,4 +179,5 @@ def api_user():
|
|||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
init_db()
|
init_db()
|
||||||
app.config['TEMPLATES_AUTO_RELOAD'] = True
|
app.config['TEMPLATES_AUTO_RELOAD'] = True
|
||||||
app.run(host='0.0.0.0', port=5058, debug=False)
|
port = int(os.environ.get('PORT', 5058))
|
||||||
|
app.run(host='0.0.0.0', port=port, debug=False)
|
||||||
|
|||||||
52
database.py
52
database.py
@@ -10,6 +10,9 @@ DB_DIR = os.path.join(os.path.expanduser('~'), '.workbuddy', 'data', 'ziwei-powe
|
|||||||
os.makedirs(DB_DIR, exist_ok=True)
|
os.makedirs(DB_DIR, exist_ok=True)
|
||||||
DB_PATH = os.path.join(DB_DIR, 'ziwei_power.db')
|
DB_PATH = os.path.join(DB_DIR, 'ziwei_power.db')
|
||||||
|
|
||||||
|
# 当前数据库 schema 版本 —— 改表结构时必须 +1 并补迁移逻辑
|
||||||
|
CURRENT_SCHEMA_VERSION = 1
|
||||||
|
|
||||||
|
|
||||||
def get_conn():
|
def get_conn():
|
||||||
conn = sqlite3.connect(DB_PATH)
|
conn = sqlite3.connect(DB_PATH)
|
||||||
@@ -17,18 +20,49 @@ def get_conn():
|
|||||||
return conn
|
return conn
|
||||||
|
|
||||||
|
|
||||||
def init_db():
|
def _get_schema_version(conn):
|
||||||
"""初始化数据库表"""
|
"""读取当前数据库的 schema 版本,无表时返回 0"""
|
||||||
conn = get_conn()
|
|
||||||
conn.execute('''
|
conn.execute('''
|
||||||
CREATE TABLE IF NOT EXISTS checkins (
|
CREATE TABLE IF NOT EXISTS schema_version (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
version INTEGER NOT NULL
|
||||||
date TEXT UNIQUE NOT NULL,
|
|
||||||
data TEXT NOT NULL,
|
|
||||||
created_at TEXT NOT NULL,
|
|
||||||
updated_at TEXT NOT NULL
|
|
||||||
)
|
)
|
||||||
''')
|
''')
|
||||||
|
row = conn.execute('SELECT version FROM schema_version').fetchone()
|
||||||
|
return row['version'] if row else 0
|
||||||
|
|
||||||
|
|
||||||
|
def _set_schema_version(conn, version):
|
||||||
|
"""写入 schema 版本"""
|
||||||
|
conn.execute('DELETE FROM schema_version')
|
||||||
|
conn.execute('INSERT INTO schema_version (version) VALUES (?)', (version,))
|
||||||
|
|
||||||
|
|
||||||
|
def init_db():
|
||||||
|
"""初始化数据库表 & 自动迁移"""
|
||||||
|
conn = get_conn()
|
||||||
|
current = _get_schema_version(conn)
|
||||||
|
|
||||||
|
# ── 迁移步骤(按版本号递增)────────────────────────
|
||||||
|
if current < 1:
|
||||||
|
# v1: 初始表结构
|
||||||
|
conn.execute('''
|
||||||
|
CREATE TABLE IF NOT EXISTS checkins (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
date TEXT UNIQUE NOT NULL,
|
||||||
|
data TEXT NOT NULL,
|
||||||
|
created_at TEXT NOT NULL,
|
||||||
|
updated_at TEXT NOT NULL
|
||||||
|
)
|
||||||
|
''')
|
||||||
|
|
||||||
|
# ── 将来加字段/改表在此扩展 ──
|
||||||
|
# if current < 2:
|
||||||
|
# conn.execute('ALTER TABLE checkins ADD COLUMN tags TEXT DEFAULT ""')
|
||||||
|
# # 可选:对已有行做数据补全
|
||||||
|
# conn.execute("UPDATE checkins SET tags = '[]' WHERE tags IS NULL")
|
||||||
|
|
||||||
|
# ── 写入最新版本号 ──
|
||||||
|
_set_schema_version(conn, CURRENT_SCHEMA_VERSION)
|
||||||
conn.commit()
|
conn.commit()
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
|
|||||||
56
deploy.sh
Normal file
56
deploy.sh
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# ziwei-power 一键部署脚本
|
||||||
|
# 用法: bash deploy.sh [port]
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
PORT="${1:-5058}"
|
||||||
|
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
LOG_FILE="/tmp/ziwei-power.log"
|
||||||
|
|
||||||
|
echo "=== ziwei-power 部署 ==="
|
||||||
|
echo "目录: $PROJECT_DIR"
|
||||||
|
echo "端口: $PORT"
|
||||||
|
|
||||||
|
# 1. 停止旧进程
|
||||||
|
OLD_PID=$(lsof -ti :$PORT 2>/dev/null || true)
|
||||||
|
if [ -n "$OLD_PID" ]; then
|
||||||
|
echo "停止旧进程 PID=$OLD_PID..."
|
||||||
|
kill $OLD_PID 2>/dev/null || true
|
||||||
|
sleep 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. 创建/激活 venv
|
||||||
|
cd "$PROJECT_DIR"
|
||||||
|
if [ ! -d "venv" ]; then
|
||||||
|
echo "创建虚拟环境..."
|
||||||
|
python3 -m venv venv
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "安装依赖..."
|
||||||
|
venv/bin/pip install -q -r requirements.txt
|
||||||
|
|
||||||
|
# 3. 自动建表(首次运行)
|
||||||
|
echo "初始化数据库..."
|
||||||
|
venv/bin/python -c "
|
||||||
|
from database import init_db
|
||||||
|
init_db()
|
||||||
|
print('数据库就绪')
|
||||||
|
"
|
||||||
|
|
||||||
|
# 4. 启动服务
|
||||||
|
echo "启动服务 (PID=$$)..."
|
||||||
|
nohup venv/bin/python app.py > "$LOG_FILE" 2>&1 &
|
||||||
|
NEW_PID=$!
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
if kill -0 $NEW_PID 2>/dev/null; then
|
||||||
|
echo "部署完成!"
|
||||||
|
echo " 访问: http://localhost:$PORT"
|
||||||
|
echo " 日志: $LOG_FILE"
|
||||||
|
echo " PID : $NEW_PID"
|
||||||
|
else
|
||||||
|
echo "启动失败,查看日志:"
|
||||||
|
cat "$LOG_FILE"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user