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