From 750e8853f1ea8ee72ced29d9793382f068c3134d Mon Sep 17 00:00:00 2001 From: DevBox Date: Wed, 27 May 2026 01:39:44 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A4=9A=E9=A1=B9=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=92=8C=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 目录结构 --- .gitignore | 2 - apps/data_opt/mds/staging_routers.py | 4 +- core/settings.py | 23 +++++--- docker-compose.yml | 57 +++++++++++++++++++ .../mount/project_files/project_dir/client.py | 0 .../mount/project_files/project_dir/prod.json | 0 .../mount/project_files/project_dir/remind.py | 0 7 files changed, 75 insertions(+), 11 deletions(-) create mode 100644 scripts/deploy_docker/mount/project_files/project_dir/client.py create mode 100644 scripts/deploy_docker/mount/project_files/project_dir/prod.json create mode 100644 scripts/deploy_docker/mount/project_files/project_dir/remind.py diff --git a/.gitignore b/.gitignore index 14aa78b..2e601cb 100644 --- a/.gitignore +++ b/.gitignore @@ -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/**/ diff --git a/apps/data_opt/mds/staging_routers.py b/apps/data_opt/mds/staging_routers.py index fca8cd7..b74420b 100644 --- a/apps/data_opt/mds/staging_routers.py +++ b/apps/data_opt/mds/staging_routers.py @@ -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: diff --git a/core/settings.py b/core/settings.py index 8786af0..9cb3c61 100644 --- a/core/settings.py +++ b/core/settings.py @@ -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) diff --git a/docker-compose.yml b/docker-compose.yml index 71ae605..1df5375 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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 diff --git a/scripts/deploy_docker/mount/project_files/project_dir/client.py b/scripts/deploy_docker/mount/project_files/project_dir/client.py new file mode 100644 index 0000000..e69de29 diff --git a/scripts/deploy_docker/mount/project_files/project_dir/prod.json b/scripts/deploy_docker/mount/project_files/project_dir/prod.json new file mode 100644 index 0000000..e69de29 diff --git a/scripts/deploy_docker/mount/project_files/project_dir/remind.py b/scripts/deploy_docker/mount/project_files/project_dir/remind.py new file mode 100644 index 0000000..e69de29