feat: try new ci/cd blue and green
This commit is contained in:
+91
-145
@@ -1,101 +1,85 @@
|
||||
name: bemeal
|
||||
|
||||
x-app-image: &app-image gitea.leonmorival.com/daily_meal/bemeal-api:${IMAGE_TAG:-latest}
|
||||
|
||||
x-app-environment: &app-environment
|
||||
APP_LOCALE: "fr"
|
||||
APP_ENV: "production"
|
||||
APP_KEY: "${APP_KEY:?APP_KEY is required}"
|
||||
APP_URL: "${APP_URL:?APP_URL is required}"
|
||||
SERVER_NAME: ":80"
|
||||
APP_RUNTIME: "Laravel\\FrankenPHP\\Runtime"
|
||||
APP_DEBUG: "${APP_DEBUG:-false}"
|
||||
|
||||
FILESYSTEM_DISK: "public"
|
||||
|
||||
DB_CONNECTION: "pgsql"
|
||||
DB_HOST: "pgsql"
|
||||
DB_PORT: "5432"
|
||||
DB_DATABASE: "${DB_DATABASE:?DB_DATABASE is required}"
|
||||
DB_USERNAME: "${DB_USERNAME:?DB_USERNAME is required}"
|
||||
DB_PASSWORD: "${DB_PASSWORD:?DB_PASSWORD is required}"
|
||||
|
||||
GEMINI_API_KEY: "${GEMINI_API_KEY:?GEMINI_API_KEY is required}"
|
||||
|
||||
AI_MEAL_USER_NAME: "${AI_MEAL_USER_NAME:-Lolo AI}"
|
||||
AI_MEAL_USER_EMAIL: "${AI_MEAL_USER_EMAIL:-loloai@maily.com}"
|
||||
AI_MEAL_IMAGE_PATH: "${AI_MEAL_IMAGE_PATH:-meal-posts/ai-generated}"
|
||||
AI_MEAL_IMAGE_QUALITY: "${AI_MEAL_IMAGE_QUALITY:-medium}"
|
||||
AI_MEAL_TEXT_TIMEOUT: "${AI_MEAL_TEXT_TIMEOUT:-90}"
|
||||
AI_MEAL_IMAGE_TIMEOUT: "${AI_MEAL_IMAGE_TIMEOUT:-120}"
|
||||
|
||||
REDIS_HOST: "redis"
|
||||
REDIS_CLIENT: "predis"
|
||||
QUEUE_CONNECTION: "redis"
|
||||
|
||||
SCOUT_DRIVER: "meilisearch"
|
||||
MEILISEARCH_HOST: "http://meilisearch:7700"
|
||||
MEILISEARCH_KEY: "${MEILISEARCH_KEY:?MEILISEARCH_KEY is required}"
|
||||
|
||||
x-app-volumes: &app-volumes
|
||||
- storage-data:/var/www/html/storage/app
|
||||
- storage-public-data:/var/www/html/storage/app/public
|
||||
|
||||
x-app-depends-on: &app-depends-on
|
||||
pgsql:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_started
|
||||
meilisearch:
|
||||
condition: service_started
|
||||
|
||||
x-app-healthcheck: &app-healthcheck
|
||||
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1/api/health >/dev/null 2>&1"]
|
||||
start_period: 30s
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 12
|
||||
|
||||
x-app-service: &app-service
|
||||
image: *app-image
|
||||
restart: unless-stopped
|
||||
depends_on: *app-depends-on
|
||||
environment: *app-environment
|
||||
volumes: *app-volumes
|
||||
networks:
|
||||
- internal
|
||||
stop_grace_period: 30s
|
||||
|
||||
services:
|
||||
bemeal-api-blue:
|
||||
image: gitea.leonmorival.com/daily_meal/bemeal-api:latest
|
||||
container_name: bemeal-api-blue
|
||||
restart: unless-stopped
|
||||
bemeal-api-blue:
|
||||
<<: *app-service
|
||||
container_name: bemeal-api-blue
|
||||
ports:
|
||||
- "127.0.0.1:8081:80"
|
||||
healthcheck: *app-healthcheck
|
||||
|
||||
depends_on:
|
||||
pgsql:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_started
|
||||
meilisearch:
|
||||
condition: service_started
|
||||
|
||||
environment:
|
||||
APP_LOCALE: "fr"
|
||||
APP_ENV: "production"
|
||||
APP_KEY: "${APP_KEY}"
|
||||
APP_URL: "${APP_URL}"
|
||||
SERVER_NAME: ":80"
|
||||
APP_RUNTIME: "Laravel\\FrankenPHP\\Runtime"
|
||||
APP_DEBUG: "${APP_DEBUG}"
|
||||
|
||||
FILESYSTEM_DISK: "public"
|
||||
|
||||
DB_CONNECTION: "pgsql"
|
||||
DB_HOST: "pgsql"
|
||||
DB_PORT: 5432
|
||||
DB_DATABASE: "${DB_DATABASE:?DB_DATABASE is required}"
|
||||
DB_USERNAME: "${DB_USERNAME:?DB_USERNAME is required}"
|
||||
DB_PASSWORD: "${DB_PASSWORD:?DB_PASSWORD is required}"
|
||||
|
||||
GEMINI_API_KEY: "${GEMINI_API_KEY:?GEMINI_API_KEY is required}"
|
||||
|
||||
REDIS_HOST: "redis"
|
||||
REDIS_CLIENT: "predis"
|
||||
QUEUE_CONNECTION: "redis"
|
||||
|
||||
SCOUT_DRIVER: "meilisearch"
|
||||
MEILISEARCH_HOST: "http://meilisearch:7700"
|
||||
MEILISEARCH_KEY: "${MEILISEARCH_KEY}"
|
||||
|
||||
volumes:
|
||||
- storage-data:/var/www/html/storage/app
|
||||
- storage-public-data:/var/www/html/storage/app/public
|
||||
|
||||
networks:
|
||||
- nginx
|
||||
- internal
|
||||
|
||||
bemeal-api-green:
|
||||
image: gitea.leonmorival.com/daily_meal/bemeal-api:latest
|
||||
container_name: bemeal-api-green
|
||||
restart: unless-stopped
|
||||
|
||||
depends_on:
|
||||
pgsql:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_started
|
||||
meilisearch:
|
||||
condition: service_started
|
||||
|
||||
environment:
|
||||
APP_LOCALE: "fr"
|
||||
APP_ENV: "production"
|
||||
APP_KEY: "${APP_KEY}"
|
||||
APP_URL: "${APP_URL}"
|
||||
SERVER_NAME: ":80"
|
||||
APP_RUNTIME: "Laravel\\FrankenPHP\\Runtime"
|
||||
APP_DEBUG: "${APP_DEBUG}"
|
||||
|
||||
FILESYSTEM_DISK: "public"
|
||||
|
||||
DB_CONNECTION: "pgsql"
|
||||
DB_HOST: "pgsql"
|
||||
DB_PORT: 5432
|
||||
DB_DATABASE: "${DB_DATABASE:?DB_DATABASE is required}"
|
||||
DB_USERNAME: "${DB_USERNAME:?DB_USERNAME is required}"
|
||||
DB_PASSWORD: "${DB_PASSWORD:?DB_PASSWORD is required}"
|
||||
|
||||
GEMINI_API_KEY: "${GEMINI_API_KEY:?GEMINI_API_KEY is required}"
|
||||
|
||||
REDIS_HOST: "redis"
|
||||
REDIS_CLIENT: "predis"
|
||||
QUEUE_CONNECTION: "redis"
|
||||
|
||||
SCOUT_DRIVER: "meilisearch"
|
||||
MEILISEARCH_HOST: "http://meilisearch:7700"
|
||||
MEILISEARCH_KEY: "${MEILISEARCH_KEY}"
|
||||
|
||||
volumes:
|
||||
- storage-data:/var/www/html/storage/app
|
||||
- storage-public-data:/var/www/html/storage/app/public
|
||||
|
||||
networks:
|
||||
- nginx
|
||||
- internal
|
||||
bemeal-api-green:
|
||||
<<: *app-service
|
||||
container_name: bemeal-api-green
|
||||
ports:
|
||||
- "127.0.0.1:8082:80"
|
||||
healthcheck: *app-healthcheck
|
||||
|
||||
pgsql:
|
||||
image: postgres:15-alpine
|
||||
@@ -108,7 +92,7 @@ bemeal-api-green:
|
||||
volumes:
|
||||
- pgsql-data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: [ "CMD-SHELL", "pg_isready -h 127.0.0.1 -p 5432" ]
|
||||
test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -p 5432"]
|
||||
start_period: 30s
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
@@ -126,7 +110,7 @@ bemeal-api-green:
|
||||
- internal
|
||||
|
||||
horizon:
|
||||
image: gitea.leonmorival.com/daily_meal/bemeal-api:latest
|
||||
image: *app-image
|
||||
container_name: bemeal-horizon
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
@@ -134,26 +118,15 @@ bemeal-api-green:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_started
|
||||
environment:
|
||||
APP_ENV: "production"
|
||||
APP_KEY: "${APP_KEY}"
|
||||
DB_CONNECTION: "pgsql"
|
||||
DB_HOST: "pgsql"
|
||||
DB_PORT: 5432
|
||||
DB_DATABASE: "${DB_DATABASE:?DB_DATABASE is required}"
|
||||
DB_USERNAME: "${DB_USERNAME:?DB_USERNAME is required}"
|
||||
DB_PASSWORD: "${DB_PASSWORD:?DB_PASSWORD is required}"
|
||||
REDIS_HOST: "redis"
|
||||
REDIS_CLIENT: "predis"
|
||||
QUEUE_CONNECTION: "redis"
|
||||
volumes:
|
||||
- storage-data:/var/www/html/storage/app
|
||||
environment: *app-environment
|
||||
volumes: *app-volumes
|
||||
command: "php artisan horizon"
|
||||
stop_grace_period: 60s
|
||||
networks:
|
||||
- internal
|
||||
|
||||
scheduler:
|
||||
image: gitea.leonmorival.com/daily_meal/bemeal-api:latest
|
||||
image: *app-image
|
||||
container_name: bemeal-scheduler
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
@@ -161,33 +134,10 @@ bemeal-api-green:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_started
|
||||
environment:
|
||||
APP_LOCALE: "fr"
|
||||
APP_ENV: "production"
|
||||
APP_KEY: "${APP_KEY}"
|
||||
APP_URL: "${APP_URL}"
|
||||
APP_DEBUG: "${APP_DEBUG}"
|
||||
FILESYSTEM_DISK: "public"
|
||||
DB_CONNECTION: "pgsql"
|
||||
DB_HOST: "pgsql"
|
||||
DB_PORT: 5432
|
||||
DB_DATABASE: "${DB_DATABASE:?DB_DATABASE is required}"
|
||||
DB_USERNAME: "${DB_USERNAME:?DB_USERNAME is required}"
|
||||
DB_PASSWORD: "${DB_PASSWORD:?DB_PASSWORD is required}"
|
||||
GEMINI_API_KEY: "${GEMINI_API_KEY:?GEMINI_API_KEY is required}"
|
||||
AI_MEAL_USER_NAME: "${AI_MEAL_USER_NAME:-Lolo AI}"
|
||||
AI_MEAL_USER_EMAIL: "${AI_MEAL_USER_EMAIL:-loloai@maily.com}"
|
||||
AI_MEAL_IMAGE_PATH: "${AI_MEAL_IMAGE_PATH:-meal-posts/ai-generated}"
|
||||
AI_MEAL_IMAGE_QUALITY: "${AI_MEAL_IMAGE_QUALITY:-medium}"
|
||||
AI_MEAL_TEXT_TIMEOUT: "${AI_MEAL_TEXT_TIMEOUT:-90}"
|
||||
AI_MEAL_IMAGE_TIMEOUT: "${AI_MEAL_IMAGE_TIMEOUT:-120}"
|
||||
REDIS_HOST: "redis"
|
||||
REDIS_CLIENT: "predis"
|
||||
QUEUE_CONNECTION: "redis"
|
||||
volumes:
|
||||
- storage-data:/var/www/html/storage/app
|
||||
- storage-public-data:/var/www/html/storage/app/public
|
||||
environment: *app-environment
|
||||
volumes: *app-volumes
|
||||
command: "php artisan schedule:work"
|
||||
stop_grace_period: 30s
|
||||
networks:
|
||||
- internal
|
||||
|
||||
@@ -196,23 +146,21 @@ bemeal-api-green:
|
||||
container_name: bemeal-adminer
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
# Optionnel : définit PostgreSQL par défaut à la connexion
|
||||
ADMINER_DEFAULT_SERVER: pgsql
|
||||
networks:
|
||||
- internal
|
||||
# - nginx
|
||||
|
||||
meilisearch:
|
||||
image: getmeili/meilisearch:latest
|
||||
container_name: bemeal-meilisearch
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MEILI_NO_ANALYTICS: "true"
|
||||
MEILI_MASTER_KEY: "${MEILISEARCH_KEY}"
|
||||
MEILI_MASTER_KEY: "${MEILISEARCH_KEY:?MEILISEARCH_KEY is required}"
|
||||
volumes:
|
||||
- meilisearch-data:/meili_data
|
||||
networks:
|
||||
- internal
|
||||
# - nginx
|
||||
|
||||
volumes:
|
||||
pgsql-data:
|
||||
@@ -228,7 +176,5 @@ volumes:
|
||||
name: bemeal_meilisearch_data
|
||||
|
||||
networks:
|
||||
nginx:
|
||||
external: true
|
||||
internal:
|
||||
driver: bridge
|
||||
|
||||
Reference in New Issue
Block a user