From 6a1c26dd5f9cc1a72c3960d7d5cfe02e08eb6c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Denquin?= Date: Thu, 30 Jan 2025 12:22:19 +0100 Subject: [PATCH] chore(docker-compose): Simplify docker compose file (#452) * chore(docker-compose): ease the usage of the docker compose file * add some other variables * some cleanup * add email env vars * add docker compose CI * update worker healthcheck * fix ci --- .github/workflows/docker-ci.yml | 34 +++ api | 2 +- docker-compose.yml | 386 ++++++++------------------------ 3 files changed, 129 insertions(+), 293 deletions(-) create mode 100644 .github/workflows/docker-ci.yml diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml new file mode 100644 index 000000000..6abc1468b --- /dev/null +++ b/.github/workflows/docker-ci.yml @@ -0,0 +1,34 @@ +name: "Docker CI" +on: + push: + branches: + - main + workflow_dispatch: +jobs: + docker-ci: + name: Docker CI + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + sparse-checkout: | + docker-compose.yml + - name: Launch all services with default configuration + env: + LAGO_CREATE_ORG: "true" + LAGO_ORG_NAME: "Lago" + LAGO_ORG_USER_EMAIL: "foo@bar.com" + LAGO_ORG_USER_PASSWORD: "foobar" + LAGO_ORG_API_KEY: "test" + run: | + export LAGO_RSA_PRIVATE_KEY="`openssl genrsa 2048 | base64 | tr -d '\n'`" + docker compose up -d --wait + - name: cURL API + run: curl -f http://localhost:3000/health + - name: cURL Front + run: curl -f http://localhost:80 + - name: cURL API Customers + run: | + curl -f http://localhost:3000/api/v1/customers -H "Authorization: Bearer test" + - name: Down services + run: docker compose down diff --git a/api b/api index 0c306421b..576406079 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 0c306421b9acbac51fa53a66f82d76ad12a78b20 +Subproject commit 5764060795989484711347695c1549474d7577ec diff --git a/docker-compose.yml b/docker-compose.yml index b06cb7bbc..d50b5ae4c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,9 +3,74 @@ volumes: lago_redis_data: lago_storage_data: +x-postgres-image: &postgres-image + image: postgres:14-alpine +x-redis-image: &redis-image + image: redis:6-alpine +x-backend-image: &backend-image + image: getlago/api:v1.20.1 +x-frontend-image: &frontend-image + image: getlago/front:v1.20.1 + +x-lago-api-url: &lago-api-url + "LAGO_API_URL": ${LAGO_API_URL:-http://localhost:3000} +x-lago-front-url: &lago-front-url + "LAGO_FRONT_URL": ${LAGO_FRONT_URL:-http://localhost} + +x-backend-environment: &backend-env + "DATABASE_URL": postgresql://${POSTGRES_USER:-lago}:${POSTGRES_PASSWORD:-changeme}@${POSTGRES_HOST:-db}:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-lago}?search_path=${POSTGRES_SCHEMA:-public} + "REDIS_URL": redis://${REDIS_HOST:-redis}:${REDIS_PORT:-6379} + "REDIS_PASSWORD": ${REDIS_PASSWORD:-} + "SECRET_KEY_BASE": ${SECRET_KEY_BASE:-your-secret-key-base-hex-64} + "RAILS_ENV": production + "RAILS_LOG_TO_STDOUT": ${LAGO_RAILS_STDOUT:-true} + "LAGO_RSA_PRIVATE_KEY": ${LAGO_RSA_PRIVATE_KEY} + "LAGO_SIDEKIQ_WEB": ${LAGO_SIDEKIQ_WEB:-true} + "LAGO_ENCRYPTION_PRIMARY_KEY": ${LAGO_ENCRYPTION_PRIMARY_KEY:-your-encryption-primary-key} + "LAGO_ENCRYPTION_DETERMINISTIC_KEY": ${LAGO_ENCRYPTION_DETERMINISTIC_KEY:-your-encryption-deterministic-key} + "LAGO_ENCRYPTION_KEY_DERIVATION_SALT": ${LAGO_ENCRYPTION_KEY_DERIVATION_SALT:-your-encryption-derivation-salt} + "LAGO_USE_AWS_S3": ${LAGO_USE_AWS_S3:-false} + "LAGO_AWS_S3_ACCESS_KEY_ID": ${LAGO_AWS_S3_ACCESS_KEY_ID:-azerty123456} + "LAGO_AWS_S3_SECRET_ACCESS_KEY": ${LAGO_AWS_S3_SECRET_ACCESS_KEY:-azerty123456} + "LAGO_AWS_S3_REGION": ${LAGO_AWS_S3_REGION:-us-east-1} + "LAGO_AWS_S3_BUCKET": ${LAGO_AWS_S3_BUCKET:-bucket} + "LAGO_AWS_S3_ENDPOINT": ${LAGO_AWS_S3_ENDPOINT} + "LAGO_USE_GCS": ${LAGO_USE_GCS:-false} + "LAGO_GCS_PROJECT": ${LAGO_GCS_PROJECT:-} + "LAGO_GCS_BUCKET": ${LAGO_GCS_BUCKET:-} + "LAGO_FROM_EMAIL": ${LAGO_FROM_EMAIL:-} + "LAGO_SMTP_ADDRESS": ${LAGO_SMTP_ADDRESS:-} + "LAGO_SMTP_PORT": ${LAGO_SMTP_PORT:-587} + "LAGO_SMTP_USERNAME": ${LAGO_SMTP_USERNAME:-} + "LAGO_SMTP_PASSWORD": ${LAGO_SMTP_PASSWORD:-} + "LAGO_PDF_URL": ${LAGO_PDF_URL:-http://pdf:3000} + "LAGO_REDIS_CACHE_URL": redis://${LAGO_REDIS_CACHE_HOST:-redis}:${LAGO_REDIS_CACHE_PORT:-6379} + "LAGO_REDIS_CACHE_PASSWORD": ${LAGO_REDIS_CACHE_PASSWORD} + "LAGO_DISABLE_SEGMENT": ${LAGO_DISABLE_SEGMENT} + "LAGO_DISABLE_WALLET_REFRESH": ${LAGO_DISABLE_WALLET_REFRESH} + "LAGO_DISABLE_SIGNUP": ${LAGO_DISABLE_SIGNUP:-false} + "LAGO_OAUTH_PROXY_URL": https://proxy.getlago.com + "LAGO_LICENSE": ${LAGO_LICENSE:-} + "LAGO_CREATE_ORG": ${LAGO_CREATE_ORG:-false} + "LAGO_ORG_USER_PASSWORD": ${LAGO_ORG_USER_PASSWORD:-} + "LAGO_ORG_USER_EMAIL": ${LAGO_ORG_USER_EMAIL:-} + "LAGO_ORG_NAME": ${LAGO_ORG_NAME:-} + "LAGO_ORG_API_KEY": ${LAGO_ORG_API_KEY:-} + "GOOGLE_AUTH_CLIENT_ID": ${GOOGLE_AUTH_CLIENT_ID:-} + "GOOGLE_AUTH_CLIENT_SECRET": ${GOOGLE_AUTH_CLIENT_SECRET:-} + # - SIDEKIQ_EVENTS=true + # - SIDEKIQ_PDFS=true + # - SIDEKIQ_BILLING=true + # - SIDEKIQ_CLOCK=true + # - SIDEKIQ_WEBHOOK=true +x-frontend-environment: &frontend-env + "API_URL": ${LAGO_API_URL:-http://localhost:3000} + "APP_ENV": production + "LAGO_OAUTH_PROXY_URL": https://proxy.getlago.com + services: db: - image: postgres:14-alpine + <<: *postgres-image container_name: lago-db restart: unless-stopped healthcheck: @@ -30,40 +95,34 @@ services: - ${POSTGRES_PORT:-5432}:${POSTGRES_PORT:-5432} redis: - image: redis:6-alpine + <<: *redis-image container_name: lago-redis restart: unless-stopped - command: --port ${REDIS_PORT:-6379} healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 + command: --port ${REDIS_PORT:-6379} volumes: - lago_redis_data:/data ports: - ${REDIS_PORT:-6379}:${REDIS_PORT:-6379} migrate: + <<: *backend-image container_name: lago-migrate - image: getlago/api:v1.20.1 depends_on: db: condition: service_healthy restart: true command: ["./scripts/migrate.sh"] environment: - - RAILS_ENV=production - - SECRET_KEY_BASE=${SECRET_KEY_BASE:-your-secret-key-base-hex-64} - - RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - - LAGO_RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - - DATABASE_URL=postgresql://${POSTGRES_USER:-lago}:${POSTGRES_PASSWORD:-changeme}@${POSTGRES_HOST:-db}:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-lago}?search_path=${POSTGRES_SCHEMA:-public} - - REDIS_URL=redis://${REDIS_HOST:-redis}:${REDIS_PORT:-6379} - - REDIS_PASSWORD=${REDIS_PASSWORD} + <<: *backend-env api: + <<: *backend-image container_name: lago-api - image: getlago/api:v1.20.1 restart: unless-stopped depends_on: migrate: @@ -80,59 +139,17 @@ services: interval: 10s start_period: 30s timeout: 60s - # uncomment for a potentially faster startup if you have docker --version > 25.0.0 - # start_interval: 2s + start_interval: 2s environment: - - LAGO_API_URL=${LAGO_API_URL:-http://localhost:3000} - - DATABASE_URL=postgresql://${POSTGRES_USER:-lago}:${POSTGRES_PASSWORD:-changeme}@${POSTGRES_HOST:-db}:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-lago}?search_path=${POSTGRES_SCHEMA:-public} - - REDIS_URL=redis://${REDIS_HOST:-redis}:${REDIS_PORT:-6379} - - REDIS_PASSWORD=${REDIS_PASSWORD} - - SECRET_KEY_BASE=${SECRET_KEY_BASE:-your-secret-key-base-hex-64} - - RAILS_ENV=production - - RAILS_LOG_TO_STDOUT=${LAGO_RAILS_STDOUT:-true} - - SENTRY_DSN=${SENTRY_DSN} - - LAGO_FRONT_URL=${LAGO_FRONT_URL:-http://localhost} - - RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - - LAGO_RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - - LAGO_SIDEKIQ_WEB=${LAGO_SIDEKIQ_WEB} - - LAGO_ENCRYPTION_PRIMARY_KEY=${LAGO_ENCRYPTION_PRIMARY_KEY:-your-encryption-primary-key} - - LAGO_ENCRYPTION_DETERMINISTIC_KEY=${LAGO_ENCRYPTION_DETERMINISTIC_KEY:-your-encryption-deterministic-key} - - LAGO_ENCRYPTION_KEY_DERIVATION_SALT=${LAGO_ENCRYPTION_KEY_DERIVATION_SALT:-your-encryption-derivation-salt} - - LAGO_USE_AWS_S3=${LAGO_USE_AWS_S3:-false} - - LAGO_AWS_S3_ACCESS_KEY_ID=${LAGO_AWS_S3_ACCESS_KEY_ID:-azerty123456} - - LAGO_AWS_S3_SECRET_ACCESS_KEY=${LAGO_AWS_S3_SECRET_ACCESS_KEY:-azerty123456} - - LAGO_AWS_S3_REGION=${LAGO_AWS_S3_REGION:-us-east-1} - - LAGO_AWS_S3_BUCKET=${LAGO_AWS_S3_BUCKET:-bucket} - - LAGO_AWS_S3_ENDPOINT=${LAGO_AWS_S3_ENDPOINT} - - LAGO_USE_GCS=${LAGO_USE_GCS:-false} - - LAGO_GCS_PROJECT=${LAGO_GCS_PROJECT:-} - - LAGO_GCS_BUCKET=${LAGO_GCS_BUCKET:-} - - LAGO_PDF_URL=${LAGO_PDF_URL:-http://pdf:3000} - - LAGO_REDIS_CACHE_URL=redis://${LAGO_REDIS_CACHE_HOST:-redis}:${LAGO_REDIS_CACHE_PORT:-6379} - - LAGO_REDIS_CACHE_PASSWORD=${LAGO_REDIS_CACHE_PASSWORD} - - LAGO_DISABLE_SEGMENT=${LAGO_DISABLE_SEGMENT} - - LAGO_DISABLE_WALLET_REFRESH=${LAGO_DISABLE_WALLET_REFRESH} - - LAGO_DISABLE_SIGNUP=${LAGO_DISABLE_SIGNUP:-false} - - LAGO_OAUTH_PROXY_URL=https://proxy.getlago.com - - LAGO_LICENSE=${LAGO_LICENSE:-} - - GOOGLE_AUTH_CLIENT_ID=${GOOGLE_AUTH_CLIENT_ID:-} - - GOOGLE_AUTH_CLIENT_SECRET=${GOOGLE_AUTH_CLIENT_SECRET:-} - - NANGO_SECRET_KEY=${NANGO_SECRET_KEY:-} - # - SIDEKIQ_EVENTS=true - # - SIDEKIQ_PDFS=true - # - SIDEKIQ_BILLING=true - # - SIDEKIQ_CLOCK=true - # - SIDEKIQ_WEBHOOK=true + <<: [*backend-env, *lago-api-url, *lago-front-url] volumes: - lago_storage_data:/app/storage - # If using GCS, you need to put the credentials keyfile here - #- gcs_keyfile.json:/app/gcs_keyfile.json ports: - ${API_PORT:-3000}:3000 front: + <<: *frontend-image container_name: lago-front - image: getlago/front:v1.20.1 restart: unless-stopped # Use this command if you want to use SSL with Let's Encrypt # command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'" @@ -141,12 +158,7 @@ services: condition: service_healthy restart: true environment: - - API_URL=${LAGO_API_URL:-http://localhost:3000} - - APP_ENV=${APP_ENV:-production} - - LAGO_DISABLE_SIGNUP=${LAGO_DISABLE_SIGNUP:-false} - - LAGO_OAUTH_PROXY_URL=https://proxy.getlago.com - - SENTRY_DSN=${SENTRY_DSN_FRONT} - - NANGO_SECRET_KEY=${NANGO_SECRET_KEY:-} + <<: [*frontend-env, *lago-api-url, *lago-front-url] ports: - ${FRONT_PORT:-80}:80 # - 443:443 @@ -171,8 +183,8 @@ services: # - ./extra/certbot/www:/var/www/certbot api-worker: + <<: *backend-image container_name: lago-worker - image: getlago/api:v1.20.1 restart: unless-stopped depends_on: migrate: @@ -185,275 +197,82 @@ services: restart: true command: ["./scripts/start.worker.sh"] healthcheck: - test: ["CMD-SHELL", "bundle exec sidekiqmon | grep $(hostname) || exit 1"] + test: curl -f http://localhost:8080 || exit 1 + interval: 10s + start_period: 30s + timeout: 60s + start_interval: 2s environment: - - LAGO_API_URL=${LAGO_API_URL:-http://localhost:3000} - - DATABASE_URL=postgresql://${POSTGRES_USER:-lago}:${POSTGRES_PASSWORD:-changeme}@${POSTGRES_HOST:-db}:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-lago}?search_path=${POSTGRES_SCHEMA:-public} - - REDIS_URL=redis://${REDIS_HOST:-redis}:${REDIS_PORT:-6379} - - REDIS_PASSWORD=${REDIS_PASSWORD} - - SECRET_KEY_BASE=${SECRET_KEY_BASE:-your-secret-key-base-hex-64} - - RAILS_ENV=production - - RAILS_LOG_TO_STDOUT=${LAGO_RAILS_STDOUT:-true} - - SENTRY_DSN=${SENTRY_DSN} - - LAGO_RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - - RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - - LAGO_ENCRYPTION_PRIMARY_KEY=${LAGO_ENCRYPTION_PRIMARY_KEY:-your-encryption-primary-key} - - LAGO_ENCRYPTION_DETERMINISTIC_KEY=${LAGO_ENCRYPTION_DETERMINISTIC_KEY:-your-encryption-deterministic-key} - - LAGO_ENCRYPTION_KEY_DERIVATION_SALT=${LAGO_ENCRYPTION_KEY_DERIVATION_SALT:-your-encryption-derivation-salt} - - LAGO_FRONT_URL=${LAGO_FRONT_URL:-http://localhost} - - LAGO_USE_AWS_S3=${LAGO_USE_AWS_S3:-false} - - LAGO_AWS_S3_ACCESS_KEY_ID=${LAGO_AWS_S3_ACCESS_KEY_ID:-azerty123456} - - LAGO_AWS_S3_SECRET_ACCESS_KEY=${LAGO_AWS_S3_SECRET_ACCESS_KEY:-azerty123456} - - LAGO_AWS_S3_REGION=${LAGO_AWS_S3_REGION:-us-east-1} - - LAGO_AWS_S3_BUCKET=${LAGO_AWS_S3_BUCKET:-bucket} - - LAGO_AWS_S3_ENDPOINT=${LAGO_AWS_S3_ENDPOINT} - - LAGO_USE_GCS=${LAGO_USE_GCS:-false} - - LAGO_GCS_PROJECT=${LAGO_GCS_PROJECT:-} - - LAGO_GCS_BUCKET=${LAGO_GCS_BUCKET:-} - - LAGO_PDF_URL=${LAGO_PDF_URL:-http://pdf:3000} - - LAGO_REDIS_CACHE_URL=redis://${LAGO_REDIS_CACHE_HOST:-redis}:${LAGO_REDIS_CACHE_PORT:-6379} - - LAGO_REDIS_CACHE_PASSWORD=${LAGO_REDIS_CACHE_PASSWORD} - - LAGO_DISABLE_SEGMENT=${LAGO_DISABLE_SEGMENT} - - LAGO_DISABLE_WALLET_REFRESH=${LAGO_DISABLE_WALLET_REFRESH} - - NANGO_SECRET_KEY=${NANGO_SECRET_KEY:-} - - LAGO_LICENSE=${LAGO_LICENSE:-} - # - SIDEKIQ_EVENTS=true - # - SIDEKIQ_PDFS=true - # - SIDEKIQ_BILLING=true - # - SIDEKIQ_CLOCK=true - # - SIDEKIQ_WEBHOOK=true + <<: [*backend-env, *lago-api-url] volumes: - lago_storage_data:/app/storage # You can uncomment this if you want to use a dedicated Sidekiq worker for the event ingestion. # It is recommendend if you have a high usage of events to not impact the other Sidekiq Jobs. #api-events-worker: + # <<: *backend-image # container_name: lago-events-worker - # image: getlago/api:v1.20.1 # restart: unless-stopped # depends_on: # api: # condition: service_healthy # command: ["./scripts/start.events.worker.sh"] # environment: - # - LAGO_API_URL=${LAGO_API_URL:-http://localhost:3000} - # - DATABASE_URL=postgresql://${POSTGRES_USER:-lago}:${POSTGRES_PASSWORD:-changeme}@${POSTGRES_HOST:-db}:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-lago}?search_path=${POSTGRES_SCHEMA:-public} - # - REDIS_URL=redis://${REDIS_HOST:-redis}:${REDIS_PORT:-6379} - # - REDIS_PASSWORD=${REDIS_PASSWORD} - # - SECRET_KEY_BASE=${SECRET_KEY_BASE:-your-secret-key-base-hex-64} - # - RAILS_ENV=production - # - RAILS_LOG_TO_STDOUT=${LAGO_RAILS_STDOUT:-true} - # - SENTRY_DSN=${SENTRY_DSN} - # - LAGO_RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - # - RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - # - LAGO_ENCRYPTION_PRIMARY_KEY=${LAGO_ENCRYPTION_PRIMARY_KEY:-your-encryption-primary-key} - # - LAGO_ENCRYPTION_DETERMINISTIC_KEY=${LAGO_ENCRYPTION_DETERMINISTIC_KEY:-your-encryption-deterministic-key} - # - LAGO_ENCRYPTION_KEY_DERIVATION_SALT=${LAGO_ENCRYPTION_KEY_DERIVATION_SALT:-your-encryption-derivation-salt} - # - LAGO_FRONT_URL=${LAGO_FRONT_URL:-http://localhost} - # - LAGO_USE_AWS_S3=${LAGO_USE_AWS_S3:-false} - # - LAGO_AWS_S3_ACCESS_KEY_ID=${LAGO_AWS_S3_ACCESS_KEY_ID:-azerty123456} - # - LAGO_AWS_S3_SECRET_ACCESS_KEY=${LAGO_AWS_S3_SECRET_ACCESS_KEY:-azerty123456} - # - LAGO_AWS_S3_REGION=${LAGO_AWS_S3_REGION:-us-east-1} - # - LAGO_AWS_S3_BUCKET=${LAGO_AWS_S3_BUCKET:-bucket} - # - LAGO_AWS_S3_ENDPOINT=${LAGO_AWS_S3_ENDPOINT} - # - LAGO_USE_GCS=${LAGO_USE_GCS:-false} - # - LAGO_GCS_PROJECT=${LAGO_GCS_PROJECT:-} - # - LAGO_GCS_BUCKET=${LAGO_GCS_BUCKET:-} - # - LAGO_PDF_URL=${LAGO_PDF_URL:-http://pdf:3000} - # - LAGO_REDIS_CACHE_URL=redis://${LAGO_REDIS_CACHE_HOST:-redis}:${LAGO_REDIS_CACHE_PORT:-6379} - # - LAGO_REDIS_CACHE_PASSWORD=${LAGO_REDIS_CACHE_PASSWORD} - # - LAGO_DISABLE_SEGMENT=${LAGO_DISABLE_SEGMENT} - # - LAGO_DISABLE_WALLET_REFRESH=${LAGO_DISABLE_WALLET_REFRESH} - # - NANGO_SECRET_KEY=${NANGO_SECRET_KEY:-} - # - SIDEKIQ_EVENTS=true - # - SIDEKIQ_CLOCK=true - # - SIDEKIQ_WEBHOOK=true - # - LAGO_LICENSE=${LAGO_LICENSE:-} + # <<: [*backend-env, *lago-api-url] # You can uncomment this if you want to use a dedicated Sidekiq worker for the invoices pdf creation. # It is recommended if you have a high usage of invoices being created to not impact the other Sidekiq Jobs. #api-pdfs-worker: + # <<: *backend-image # container_name: lago-pdfs-worker - # image: getlago/api:v1.20.1 # restart: unless-stopped # depends_on: # api: # condition: service_healthy # command: ["./scripts/start.pdfs.worker.sh"] # environment: - # - LAGO_API_URL=${LAGO_API_URL:-http://localhost:3000} - # - DATABASE_URL=postgresql://${POSTGRES_USER:-lago}:${POSTGRES_PASSWORD:-changeme}@${POSTGRES_HOST:-db}:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-lago}?search_path=${POSTGRES_SCHEMA:-public} - # - REDIS_URL=redis://${REDIS_HOST:-redis}:${REDIS_PORT:-6379} - # - REDIS_PASSWORD=${REDIS_PASSWORD} - # - SECRET_KEY_BASE=${SECRET_KEY_BASE:-your-secret-key-base-hex-64} - # - RAILS_ENV=production - # - RAILS_LOG_TO_STDOUT=${LAGO_RAILS_STDOUT:-true} - # - SENTRY_DSN=${SENTRY_DSN} - # - LAGO_RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - # - RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - # - LAGO_ENCRYPTION_PRIMARY_KEY=${LAGO_ENCRYPTION_PRIMARY_KEY:-your-encryption-primary-key} - # - LAGO_ENCRYPTION_DETERMINISTIC_KEY=${LAGO_ENCRYPTION_DETERMINISTIC_KEY:-your-encryption-deterministic-key} - # - LAGO_ENCRYPTION_KEY_DERIVATION_SALT=${LAGO_ENCRYPTION_KEY_DERIVATION_SALT:-your-encryption-derivation-salt} - # - LAGO_FRONT_URL=${LAGO_FRONT_URL:-http://localhost} - # - LAGO_USE_AWS_S3=${LAGO_USE_AWS_S3:-false} - # - LAGO_AWS_S3_ACCESS_KEY_ID=${LAGO_AWS_S3_ACCESS_KEY_ID:-azerty123456} - # - LAGO_AWS_S3_SECRET_ACCESS_KEY=${LAGO_AWS_S3_SECRET_ACCESS_KEY:-azerty123456} - # - LAGO_AWS_S3_REGION=${LAGO_AWS_S3_REGION:-us-east-1} - # - LAGO_AWS_S3_BUCKET=${LAGO_AWS_S3_BUCKET:-bucket} - # - LAGO_AWS_S3_ENDPOINT=${LAGO_AWS_S3_ENDPOINT} - # - LAGO_USE_GCS=${LAGO_USE_GCS:-false} - # - LAGO_GCS_PROJECT=${LAGO_GCS_PROJECT:-} - # - LAGO_GCS_BUCKET=${LAGO_GCS_BUCKET:-} - # - LAGO_PDF_URL=${LAGO_PDF_URL:-http://pdf:3000} - # - LAGO_REDIS_CACHE_URL=redis://${LAGO_REDIS_CACHE_HOST:-redis}:${LAGO_REDIS_CACHE_PORT:-6379} - # - LAGO_REDIS_CACHE_PASSWORD=${LAGO_REDIS_CACHE_PASSWORD} - # - LAGO_DISABLE_SEGMENT=${LAGO_DISABLE_SEGMENT} - # - LAGO_DISABLE_WALLET_REFRESH=${LAGO_DISABLE_WALLET_REFRESH} - # - NANGO_SECRET_KEY=${NANGO_SECRET_KEY:-} - # - SIDEKIQ_PDFS=true - # - SIDEKIQ_CLOCK=true - # - SIDEKIQ_WEBHOOK=true - # - LAGO_LICENSE=${LAGO_LICENSE:-} + # <<: [*backend-env, *lago-api-url] # You can uncomment this if you want to use a dedicated Sidekiq worker for the invoices creation. # It is recommended if you have a high usage of invoices being created to not impact the other Sidekiq Jobs. #api-billing-worker: + # <<: *backend-image # container_name: lago-billing-worker - # image: getlago/api:v1.20.1 # restart: unless-stopped # depends_on: # api: # condition: service_healthy # command: ["./scripts/start.billing.worker.sh"] # environment: - # - LAGO_API_URL=${LAGO_API_URL:-http://localhost:3000} - # - DATABASE_URL=postgresql://${POSTGRES_USER:-lago}:${POSTGRES_PASSWORD:-changeme}@${POSTGRES_HOST:-db}:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-lago}?search_path=${POSTGRES_SCHEMA:-public} - # - REDIS_URL=redis://${REDIS_HOST:-redis}:${REDIS_PORT:-6379} - # - REDIS_PASSWORD=${REDIS_PASSWORD} - # - SECRET_KEY_BASE=${SECRET_KEY_BASE:-your-secret-key-base-hex-64} - # - RAILS_ENV=production - # - RAILS_LOG_TO_STDOUT=${LAGO_RAILS_STDOUT:-true} - # - SENTRY_DSN=${SENTRY_DSN} - # - LAGO_RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - # - RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - # - LAGO_ENCRYPTION_PRIMARY_KEY=${LAGO_ENCRYPTION_PRIMARY_KEY:-your-encryption-primary-key} - # - LAGO_ENCRYPTION_DETERMINISTIC_KEY=${LAGO_ENCRYPTION_DETERMINISTIC_KEY:-your-encryption-deterministic-key} - # - LAGO_ENCRYPTION_KEY_DERIVATION_SALT=${LAGO_ENCRYPTION_KEY_DERIVATION_SALT:-your-encryption-derivation-salt} - # - LAGO_FRONT_URL=${LAGO_FRONT_URL:-http://localhost} - # - LAGO_USE_AWS_S3=${LAGO_USE_AWS_S3:-false} - # - LAGO_AWS_S3_ACCESS_KEY_ID=${LAGO_AWS_S3_ACCESS_KEY_ID:-azerty123456} - # - LAGO_AWS_S3_SECRET_ACCESS_KEY=${LAGO_AWS_S3_SECRET_ACCESS_KEY:-azerty123456} - # - LAGO_AWS_S3_REGION=${LAGO_AWS_S3_REGION:-us-east-1} - # - LAGO_AWS_S3_BUCKET=${LAGO_AWS_S3_BUCKET:-bucket} - # - LAGO_AWS_S3_ENDPOINT=${LAGO_AWS_S3_ENDPOINT} - # - LAGO_USE_GCS=${LAGO_USE_GCS:-false} - # - LAGO_GCS_PROJECT=${LAGO_GCS_PROJECT:-} - # - LAGO_GCS_BUCKET=${LAGO_GCS_BUCKET:-} - # - LAGO_PDF_URL=${LAGO_PDF_URL:-http://pdf:3000} - # - LAGO_REDIS_CACHE_URL=redis://${LAGO_REDIS_CACHE_HOST:-redis}:${LAGO_REDIS_CACHE_PORT:-6379} - # - LAGO_REDIS_CACHE_PASSWORD=${LAGO_REDIS_CACHE_PASSWORD} - # - LAGO_DISABLE_SEGMENT=${LAGO_DISABLE_SEGMENT} - # - LAGO_DISABLE_WALLET_REFRESH=${LAGO_DISABLE_WALLET_REFRESH} - # - NANGO_SECRET_KEY=${NANGO_SECRET_KEY:-} - # - SIDEKIQ_PDFS=true - # - SIDEKIQ_BILLING=true - # - SIDEKIQ_CLOCK=true - # - SIDEKIQ_WEBHOOK=true - # - LAGO_LICENSE=${LAGO_LICENSE:-} + # <<: [*backend-env, *lago-api-url] # You can uncomment this if you want to use a dedicated Sidekiq worker for the clock jobs. #api-clock-worker: + # <<: *backend-image # container_name: lago-clock-worker - # image: getlago/api:v1.20.1 # restart: unless-stopped # depends_on: # api: # condition: service_healthy # command: ["./scripts/start.clock.worker.sh"] # environment: - # - LAGO_API_URL=${LAGO_API_URL:-http://localhost:3000} - # - DATABASE_URL=postgresql://${POSTGRES_USER:-lago}:${POSTGRES_PASSWORD:-changeme}@${POSTGRES_HOST:-db}:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-lago}?search_path=${POSTGRES_SCHEMA:-public} - # - REDIS_URL=redis://${REDIS_HOST:-redis}:${REDIS_PORT:-6379} - # - REDIS_PASSWORD=${REDIS_PASSWORD} - # - SECRET_KEY_BASE=${SECRET_KEY_BASE:-your-secret-key-base-hex-64} - # - RAILS_ENV=production - # - RAILS_LOG_TO_STDOUT=${LAGO_RAILS_STDOUT:-true} - # - SENTRY_DSN=${SENTRY_DSN} - # - LAGO_RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - # - RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - # - LAGO_ENCRYPTION_PRIMARY_KEY=${LAGO_ENCRYPTION_PRIMARY_KEY:-your-encryption-primary-key} - # - LAGO_ENCRYPTION_DETERMINISTIC_KEY=${LAGO_ENCRYPTION_DETERMINISTIC_KEY:-your-encryption-deterministic-key} - # - LAGO_ENCRYPTION_KEY_DERIVATION_SALT=${LAGO_ENCRYPTION_KEY_DERIVATION_SALT:-your-encryption-derivation-salt} - # - LAGO_FRONT_URL=${LAGO_FRONT_URL:-http://localhost} - # - LAGO_USE_AWS_S3=${LAGO_USE_AWS_S3:-false} - # - LAGO_AWS_S3_ACCESS_KEY_ID=${LAGO_AWS_S3_ACCESS_KEY_ID:-azerty123456} - # - LAGO_AWS_S3_SECRET_ACCESS_KEY=${LAGO_AWS_S3_SECRET_ACCESS_KEY:-azerty123456} - # - LAGO_AWS_S3_REGION=${LAGO_AWS_S3_REGION:-us-east-1} - # - LAGO_AWS_S3_BUCKET=${LAGO_AWS_S3_BUCKET:-bucket} - # - LAGO_AWS_S3_ENDPOINT=${LAGO_AWS_S3_ENDPOINT} - # - LAGO_USE_GCS=${LAGO_USE_GCS:-false} - # - LAGO_GCS_PROJECT=${LAGO_GCS_PROJECT:-} - # - LAGO_GCS_BUCKET=${LAGO_GCS_BUCKET:-} - # - LAGO_PDF_URL=${LAGO_PDF_URL:-http://pdf:3000} - # - LAGO_REDIS_CACHE_URL=redis://${LAGO_REDIS_CACHE_HOST:-redis}:${LAGO_REDIS_CACHE_PORT:-6379} - # - LAGO_REDIS_CACHE_PASSWORD=${LAGO_REDIS_CACHE_PASSWORD} - # - LAGO_DISABLE_SEGMENT=${LAGO_DISABLE_SEGMENT} - # - LAGO_DISABLE_WALLET_REFRESH=${LAGO_DISABLE_WALLET_REFRESH} - # - NANGO_SECRET_KEY=${NANGO_SECRET_KEY:-} - # - SIDEKIQ_PDFS=true - # - SIDEKIQ_BILLING=true - # - SIDEKIQ_CLOCK=true - # - SIDEKIQ_WEBHOOK=true - # - LAGO_LICENSE=${LAGO_LICENSE:-} + # <<: [*backend-env, *lago-api-url] # You can uncomment this if you want to use a dedicated Sidekiq worker for the webhook jobs. #api-webhook-worker: + # <<: *backend-image # container_name: lago-webhook-worker - # image: getlago/api:v1.20.1 # restart: unless-stopped # depends_on: # api: # condition: service_healthy # command: ["./scripts/start.webhook.worker.sh"] # environment: - # - LAGO_API_URL=${LAGO_API_URL:-http://localhost:3000} - # - DATABASE_URL=postgresql://${POSTGRES_USER:-lago}:${POSTGRES_PASSWORD:-changeme}@${POSTGRES_HOST:-db}:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-lago}?search_path=${POSTGRES_SCHEMA:-public} - # - REDIS_URL=redis://${REDIS_HOST:-redis}:${REDIS_PORT:-6379} - # - REDIS_PASSWORD=${REDIS_PASSWORD} - # - SECRET_KEY_BASE=${SECRET_KEY_BASE:-your-secret-key-base-hex-64} - # - RAILS_ENV=production - # - RAILS_LOG_TO_STDOUT=${LAGO_RAILS_STDOUT:-true} - # - SENTRY_DSN=${SENTRY_DSN} - # - LAGO_RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - # - RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - # - LAGO_ENCRYPTION_PRIMARY_KEY=${LAGO_ENCRYPTION_PRIMARY_KEY:-your-encryption-primary-key} - # - LAGO_ENCRYPTION_DETERMINISTIC_KEY=${LAGO_ENCRYPTION_DETERMINISTIC_KEY:-your-encryption-deterministic-key} - # - LAGO_ENCRYPTION_KEY_DERIVATION_SALT=${LAGO_ENCRYPTION_KEY_DERIVATION_SALT:-your-encryption-derivation-salt} - # - LAGO_FRONT_URL=${LAGO_FRONT_URL:-http://localhost} - # - LAGO_USE_AWS_S3=${LAGO_USE_AWS_S3:-false} - # - LAGO_AWS_S3_ACCESS_KEY_ID=${LAGO_AWS_S3_ACCESS_KEY_ID:-azerty123456} - # - LAGO_AWS_S3_SECRET_ACCESS_KEY=${LAGO_AWS_S3_SECRET_ACCESS_KEY:-azerty123456} - # - LAGO_AWS_S3_REGION=${LAGO_AWS_S3_REGION:-us-east-1} - # - LAGO_AWS_S3_BUCKET=${LAGO_AWS_S3_BUCKET:-bucket} - # - LAGO_AWS_S3_ENDPOINT=${LAGO_AWS_S3_ENDPOINT} - # - LAGO_USE_GCS=${LAGO_USE_GCS:-false} - # - LAGO_GCS_PROJECT=${LAGO_GCS_PROJECT:-} - # - LAGO_GCS_BUCKET=${LAGO_GCS_BUCKET:-} - # - LAGO_PDF_URL=${LAGO_PDF_URL:-http://pdf:3000} - # - LAGO_REDIS_CACHE_URL=redis://${LAGO_REDIS_CACHE_HOST:-redis}:${LAGO_REDIS_CACHE_PORT:-6379} - # - LAGO_REDIS_CACHE_PASSWORD=${LAGO_REDIS_CACHE_PASSWORD} - # - LAGO_DISABLE_SEGMENT=${LAGO_DISABLE_SEGMENT} - # - LAGO_DISABLE_WALLET_REFRESH=${LAGO_DISABLE_WALLET_REFRESH} - # - NANGO_SECRET_KEY=${NANGO_SECRET_KEY:-} - # - SIDEKIQ_PDFS=true - # - SIDEKIQ_BILLING=true - # - SIDEKIQ_CLOCK=true - # - SIDEKIQ_WEBHOOK=true - # - LAGO_LICENSE=${LAGO_LICENSE:-} + # <<: [*backend-env, *lago-api-url] api-clock: + <<: *backend-image container_name: lago-clock - image: getlago/api:v1.20.1 restart: unless-stopped depends_on: migrate: @@ -466,24 +285,7 @@ services: restart: true command: ["./scripts/start.clock.sh"] environment: - - LAGO_API_URL=${LAGO_API_URL:-http://localhost:3000} - - DATABASE_URL=postgresql://${POSTGRES_USER:-lago}:${POSTGRES_PASSWORD:-changeme}@${POSTGRES_HOST:-db}:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-lago}?search_path=${POSTGRES_SCHEMA:-public} - - REDIS_URL=redis://${REDIS_HOST:-redis}:${REDIS_PORT:-6379} - - REDIS_PASSWORD=${REDIS_PASSWORD} - - SECRET_KEY_BASE=${SECRET_KEY_BASE:-your-secret-key-base-hex-64} - - RAILS_ENV=production - - RAILS_LOG_TO_STDOUT=${LAGO_RAILS_STDOUT:-true} - - SENTRY_DSN=${SENTRY_DSN} - - LAGO_DISABLE_WALLET_REFRESH=${LAGO_DISABLE_WALLET_REFRESH} - - LAGO_REDIS_CACHE_URL=redis://${LAGO_REDIS_CACHE_HOST:-redis}:${LAGO_REDIS_CACHE_PORT:-6379} - - LAGO_RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - - RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY} # Should be base64 encoded - - LAGO_ENCRYPTION_PRIMARY_KEY=${LAGO_ENCRYPTION_PRIMARY_KEY:-your-encryption-primary-key} - - LAGO_ENCRYPTION_DETERMINISTIC_KEY=${LAGO_ENCRYPTION_DETERMINISTIC_KEY:-your-encryption-deterministic-key} - - LAGO_ENCRYPTION_KEY_DERIVATION_SALT=${LAGO_ENCRYPTION_KEY_DERIVATION_SALT:-your-encryption-derivation-salt} - - NANGO_SECRET_KEY=${NANGO_SECRET_KEY:-} - - LAGO_LICENSE=${LAGO_LICENSE:-} - # - SIDEKIQ_CLOCK=true + <<: [*backend-env, *lago-api-url] pdf: image: getlago/lago-gotenberg:7.8.2