feat: 多项优化和修复

1. 修复数据库完整性错误:staging_routers.py 添加 _retry_count 字段默认值 0

2. 时区配置规范化:.env 和 settings.py 使用 IANA 格式(Asia/Shanghai),保持向后兼容

3. Docker 部署优化:
   - Portainer 禁用 Edge 功能,释放 8000 端口
   - Uptime Kuma 和 Portainer 设为默认启动服务

4. 新增部署模板:创建 scripts/deploy_docker/mount 目录结构
This commit is contained in:
DevBox
2026-05-27 01:39:44 +00:00
parent 48867846cd
commit 750e8853f1
7 changed files with 75 additions and 11 deletions
-2
View File
@@ -33,7 +33,6 @@ ehthumbs.db
Thumbs.db
# Logs
logs
*.log
# Runtime data
@@ -92,7 +91,6 @@ project_files/**/remind.py
.binlog_position.json
*.sqlite*
storage/
storage/**/
+2 -2
View File
@@ -184,8 +184,8 @@ async def insert_to_staging_table(
skipped_fields = set()
for item in data_list:
columns = ["_source_system", "_status"]
values = [source_system, "pending"]
columns = ["_source_system", "_status", "_retry_count"]
values = [source_system, "pending", 0]
for key, value in item.items():
if value is not None and key not in exclude_fields:
+16 -7
View File
@@ -16,19 +16,28 @@ logger = log_config.get_logger(__name__)
# 时区,默认东八区
TIMEZONE = os.getenv("TIMEZONE", "+8")
# 时区,默认东八区(使用 IANA 格式)
TIMEZONE = os.getenv("TIMEZONE", "Asia/Shanghai")
def get_timezone_name(offset_str):
def get_timezone_name(timezone_str):
"""
将时区偏移量字符串(如 +8, -5)转换为时区名称(如 Asia/Shanghai
将时区字符串转换为标准 IANA 时区名称
支持两种格式:
1. IANA 时区格式(如 Asia/Shanghai- 直接返回
2. 偏移量格式(如 +8, -5)- 转换为对应的 IANA 时区名称
Args:
offset_str: 时区偏移量字符串,格式为 "+8""-5"
timezone_str: 时区字符串,格式为 "Asia/Shanghai" "+8""-5"
Returns:
时区名称,如 "Asia/Shanghai"
标准 IANA 时区名称,如 "Asia/Shanghai"
"""
# 如果已经是 IANA 格式(包含 '/'),直接返回
if "/" in timezone_str:
return timezone_str
# 偏移量格式转换映射
offset_map = {
"-12": "Etc/GMT+12",
"-11": "Etc/GMT+11",
@@ -59,7 +68,7 @@ def get_timezone_name(offset_str):
"+12": "Pacific/Fiji",
}
return offset_map.get(offset_str, "Asia/Shanghai")
return offset_map.get(timezone_str, "Asia/Shanghai")
TIMEZONE_NAME = get_timezone_name(TIMEZONE)
+57
View File
@@ -34,6 +34,28 @@ services:
timeout: 5s
retries: 5
postgres:
image: postgres:16-alpine
container_name: myaps_postgres
restart: unless-stopped
network_mode: host
env_file:
- .env
environment:
- TZ=${TIMEZONE:-Asia/Shanghai}
- POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C
- POSTGRES_USER=${THIS_DB_USER}
- POSTGRES_PASSWORD=${THIS_DB_PASSWORD}
- POSTGRES_DB=${THIS_DB_NAME}
- POSTGRES_PORT=${THIS_DB_PORT:-5432}
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${THIS_DB_USER} -d ${THIS_DB_NAME}"]
interval: 10s
timeout: 5s
retries: 5
app:
build:
context: .
@@ -47,6 +69,7 @@ services:
environment:
# 覆盖.env中的配置,适配host网络模式
- REDIS_HOST=${REDIS_HOST:-localhost}
- THIS_DB_HOST=${THIS_DB_HOST:-localhost}
- GUNICORN_BIND=0.0.0.0:${PORT:-8000}
- APP_ROOT=/app
volumes:
@@ -63,6 +86,8 @@ services:
depends_on:
redis:
condition: service_healthy
postgres:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/docs"]
interval: 30s
@@ -70,6 +95,38 @@ services:
start_period: 10s
retries: 3
# ============ 附加服务(默认开启)============
# 监控和管理工具,随基础服务一起启动
uptime-kuma:
image: louislam/uptime-kuma:1.23.11
container_name: myaps_uptime_kuma
restart: unless-stopped
network_mode: host
volumes:
- uptime_kuma_data:/app/data
healthcheck:
test: ["CMD", "node", "server/server.js", "--healthcheck"]
interval: 30s
timeout: 10s
retries: 3
portainer:
image: portainer/portainer-ce:2.21.4
container_name: myaps_portainer
restart: unless-stopped
network_mode: host
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
command: -p 9000 --no-edge
volumes:
redis_data:
driver: local
postgres_data:
driver: local
uptime_kuma_data:
driver: local
portainer_data:
driver: local