Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
668576b866 | ||
|
|
abdc1fc739 |
3
app.py
3
app.py
@@ -9,7 +9,8 @@ from werkzeug.security import generate_password_hash, check_password_hash
|
||||
from database import init_db, get_checkin, save_checkin, delete_checkin, get_all_checkins
|
||||
|
||||
app = Flask(__name__)
|
||||
app.secret_key = os.urandom(24)
|
||||
# 固定密钥确保 gunicorn 多 worker 下 session 可互通
|
||||
app.secret_key = os.environ.get('SECRET_KEY', 'ziwei-power-secret-2026')
|
||||
|
||||
# 会话持久化:30 天
|
||||
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=30)
|
||||
|
||||
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)
|
||||
DB_PATH = os.path.join(DB_DIR, 'ziwei_power.db')
|
||||
|
||||
# 当前数据库 schema 版本 —— 改表结构时必须 +1 并补迁移逻辑
|
||||
CURRENT_SCHEMA_VERSION = 1
|
||||
|
||||
|
||||
def get_conn():
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
@@ -17,18 +20,49 @@ def get_conn():
|
||||
return conn
|
||||
|
||||
|
||||
def init_db():
|
||||
"""初始化数据库表"""
|
||||
conn = get_conn()
|
||||
def _get_schema_version(conn):
|
||||
"""读取当前数据库的 schema 版本,无表时返回 0"""
|
||||
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
|
||||
CREATE TABLE IF NOT EXISTS schema_version (
|
||||
version INTEGER 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.close()
|
||||
|
||||
|
||||
13
deploy.sh
13
deploy.sh
@@ -1,6 +1,9 @@
|
||||
#!/bin/bash
|
||||
# ziwei-power 一键部署脚本
|
||||
# 用法: bash deploy.sh [port]
|
||||
#
|
||||
# 首次运行: 自动生成 .env (SECRET_KEY),之后不变
|
||||
# 多 worker 安全: 所有 worker 共享同一密钥
|
||||
|
||||
set -e
|
||||
|
||||
@@ -30,7 +33,15 @@ fi
|
||||
echo "安装依赖..."
|
||||
venv/bin/pip install -q -r requirements.txt
|
||||
|
||||
# 3. 自动建表(首次运行)
|
||||
# 3. 生成/读取固定 SECRET_KEY(多 worker 共享)
|
||||
if [ ! -f ".env" ]; then
|
||||
echo "生成 SECRET_KEY..."
|
||||
python3 -c "import os; print('SECRET_KEY=' + os.urandom(24).hex())" > .env
|
||||
fi
|
||||
set -a; source .env; set +a
|
||||
export SECRET_KEY
|
||||
|
||||
# 4. 自动建表(首次运行)
|
||||
echo "初始化数据库..."
|
||||
venv/bin/python -c "
|
||||
from database import init_db
|
||||
|
||||
Reference in New Issue
Block a user