diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..29e9178 --- /dev/null +++ b/.env.example @@ -0,0 +1,35 @@ +# PostgreSQL +POSTGRES_USER=shiran +POSTGRES_PASSWORD=change-me-postgres-password +POSTGRES_DB=ciyuan_viewfinder +POSTGRES_PGDATA=/var/lib/postgresql/data/pgdata + +# Redis +REDIS_URL=redis://redis:6379/0 + +# MinIO / S3 +MINIO_ROOT_USER=minioadmin +MINIO_ROOT_PASSWORD=change-me-minio-password +S3_ENDPOINT=http://minio:9000 +S3_ACCESS_KEY=minioadmin +S3_SECRET_KEY=change-me-minio-password +S3_BUCKET=ciyuan-viewfinder + +# Server +DATABASE_URL=postgresql+asyncpg://shiran:change-me-postgres-password@postgres:5432/ciyuan_viewfinder +DATABASE_URL_SYNC=postgresql://shiran:change-me-postgres-password@postgres:5432/ciyuan_viewfinder +SECRET_KEY=change-me-before-production +ACCESS_TOKEN_EXPIRE_MINUTES=43200 +REFRESH_TOKEN_EXPIRE_DAYS=60 +STORAGE_BACKEND=local +LOCAL_STORAGE_PATH=/app/uploads +TENCENT_MAP_KEY= +LOG_LEVEL=INFO +LOG_JSON=false + +# Frontend build +VITE_API_BASE=/api/v1 + +# Nginx host ports +CLIENT_WEB_PORT=5173 +ADMIN_WEB_PORT=5174 diff --git a/docker-compose.yml b/docker-compose.yml index 5b623c9..cc42105 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,12 +1,14 @@ +version: "3.8" + services: postgres: image: postgis/postgis:17-3.5 container_name: ciyuan-postgres environment: - POSTGRES_USER: "${POSTGRES_USER:-shiran}" - POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:-change-me-postgres-password}" - POSTGRES_DB: "${POSTGRES_DB:-ciyuan_viewfinder}" - PGDATA: /var/lib/postgresql/data/pgdata + POSTGRES_USER: "${POSTGRES_USER}" + POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}" + POSTGRES_DB: "${POSTGRES_DB}" + PGDATA: "${POSTGRES_PGDATA}" expose: - "5432" volumes: @@ -43,8 +45,8 @@ services: container_name: ciyuan-minio command: server /data --console-address ":9001" environment: - MINIO_ROOT_USER: "${MINIO_ROOT_USER:-minioadmin}" - MINIO_ROOT_PASSWORD: "${MINIO_ROOT_PASSWORD:-minioadmin}" + MINIO_ROOT_USER: "${MINIO_ROOT_USER}" + MINIO_ROOT_PASSWORD: "${MINIO_ROOT_PASSWORD}" expose: - "9000" - "9001" @@ -59,21 +61,21 @@ services: context: ./server container_name: ciyuan-server environment: - DATABASE_URL: "postgresql+asyncpg://${POSTGRES_USER:-shiran}:${POSTGRES_PASSWORD:-change-me-postgres-password}@postgres:5432/${POSTGRES_DB:-ciyuan_viewfinder}" - DATABASE_URL_SYNC: "postgresql://${POSTGRES_USER:-shiran}:${POSTGRES_PASSWORD:-change-me-postgres-password}@postgres:5432/${POSTGRES_DB:-ciyuan_viewfinder}" - REDIS_URL: redis://redis:6379/0 - SECRET_KEY: "${SECRET_KEY:-change-me-before-production}" - ACCESS_TOKEN_EXPIRE_MINUTES: "${ACCESS_TOKEN_EXPIRE_MINUTES:-43200}" - REFRESH_TOKEN_EXPIRE_DAYS: "${REFRESH_TOKEN_EXPIRE_DAYS:-60}" - STORAGE_BACKEND: local - LOCAL_STORAGE_PATH: /app/uploads - S3_ENDPOINT: http://minio:9000 - S3_ACCESS_KEY: "${MINIO_ROOT_USER:-minioadmin}" - S3_SECRET_KEY: "${MINIO_ROOT_PASSWORD:-minioadmin}" - S3_BUCKET: "${S3_BUCKET:-ciyuan-viewfinder}" - TENCENT_MAP_KEY: "${TENCENT_MAP_KEY:-}" - LOG_LEVEL: "${LOG_LEVEL:-INFO}" - LOG_JSON: "${LOG_JSON:-false}" + DATABASE_URL: "${DATABASE_URL}" + DATABASE_URL_SYNC: "${DATABASE_URL_SYNC}" + REDIS_URL: "${REDIS_URL}" + SECRET_KEY: "${SECRET_KEY}" + ACCESS_TOKEN_EXPIRE_MINUTES: "${ACCESS_TOKEN_EXPIRE_MINUTES}" + REFRESH_TOKEN_EXPIRE_DAYS: "${REFRESH_TOKEN_EXPIRE_DAYS}" + STORAGE_BACKEND: "${STORAGE_BACKEND}" + LOCAL_STORAGE_PATH: "${LOCAL_STORAGE_PATH}" + S3_ENDPOINT: "${S3_ENDPOINT}" + S3_ACCESS_KEY: "${S3_ACCESS_KEY}" + S3_SECRET_KEY: "${S3_SECRET_KEY}" + S3_BUCKET: "${S3_BUCKET}" + TENCENT_MAP_KEY: "${TENCENT_MAP_KEY}" + LOG_LEVEL: "${LOG_LEVEL}" + LOG_JSON: "${LOG_JSON}" expose: - "8000" volumes: @@ -105,7 +107,7 @@ services: build: context: ./admin-web args: - VITE_API_BASE: /api/v1 + VITE_API_BASE: "${VITE_API_BASE}" container_name: ciyuan-admin-web expose: - "80" @@ -133,8 +135,8 @@ services: image: nginx:1.27-alpine container_name: ciyuan-nginx ports: - - "${CLIENT_WEB_PORT:-5173}:80" - - "${ADMIN_WEB_PORT:-5174}:81" + - "${CLIENT_WEB_PORT}:80" + - "${ADMIN_WEB_PORT}:81" volumes: - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro depends_on: