mirror of
https://github.com/getlago/lago.git
synced 2025-07-06 08:23:21 +07:00
feat(compose): Adding QA Review, adding default values, updating documentation
This commit is contained in:
103
.env.example
103
.env.example
@ -1,75 +1,74 @@
|
|||||||
#See more informations here : https://doc.getlago.com/guide/self-hosted/docker
|
# See more information here: https://doc.getlago.com/guide/self-hosted/docker
|
||||||
|
|
||||||
LAGO_VERSION=v1.13.1
|
# LAGO_VERSION=v1.13.1
|
||||||
|
|
||||||
# PostgreSQL Configuration
|
# PostgreSQL Configuration
|
||||||
POSTGRES_DB=lago
|
# POSTGRES_DB=lago
|
||||||
POSTGRES_USER=lago
|
# POSTGRES_USER=lago
|
||||||
POSTGRES_PASSWORD=changeme
|
# POSTGRES_PASSWORD=changeme
|
||||||
POSTGRES_HOST=db
|
# POSTGRES_HOST=db
|
||||||
POSTGRES_PORT=5432
|
# POSTGRES_PORT=5432
|
||||||
POSTGRES_SCHEMA=public
|
# POSTGRES_SCHEMA=public
|
||||||
PGDATA=/data/postgres
|
# PGDATA=/data/postgres
|
||||||
|
|
||||||
# Redis Configuration
|
# Redis Configuration
|
||||||
REDIS_HOST=redis
|
# REDIS_HOST=redis
|
||||||
REDIS_PORT=6379
|
# REDIS_PORT=6379
|
||||||
REDIS_PASSWORD=
|
# REDIS_PASSWORD=
|
||||||
|
|
||||||
# Application Ports
|
# Application Ports
|
||||||
API_PORT=3000
|
# API_PORT=3000
|
||||||
FRONT_PORT=80
|
# FRONT_PORT=80
|
||||||
|
|
||||||
|
|
||||||
# Lago Global Configuration
|
# Lago Global Configuration
|
||||||
LAGO_DOMAIN=yourdomain.told
|
# LAGO_DOMAIN=yourdomain.tld
|
||||||
LAGO_API_URL=https://yourdomain.tld/api
|
# LAGO_API_URL=https://yourdomain.tld/api
|
||||||
LAGO_FRONT_URL=https://yourdomain.tld
|
# LAGO_FRONT_URL=https://yourdomain.tld
|
||||||
SECRET_KEY_BASE=your-secret-key-base-hex-64
|
# SECRET_KEY_BASE=your-secret-key-base-hex-64
|
||||||
RAILS_ENV=production
|
# RAILS_ENV=production
|
||||||
LAGO_RAILS_STDOUT=true
|
# LAGO_RAILS_STDOUT=true
|
||||||
LAGO_PDF_URL=http://pdf:3000
|
# LAGO_PDF_URL=http://pdf:3000
|
||||||
LAGO_DISABLE_SIGNUP=false
|
# LAGO_DISABLE_SIGNUP=false
|
||||||
APP_ENV=production
|
# APP_ENV=production
|
||||||
|
|
||||||
# Encryption Keys
|
# Encryption Keys
|
||||||
LAGO_RSA_PRIVATE_KEY=
|
# LAGO_RSA_PRIVATE_KEY=
|
||||||
LAGO_ENCRYPTION_PRIMARY_KEY=your-encryption-primary-key
|
# LAGO_ENCRYPTION_PRIMARY_KEY=your-encryption-primary-key
|
||||||
LAGO_ENCRYPTION_DETERMINISTIC_KEY=your-encryption-deterministic-key
|
# LAGO_ENCRYPTION_DETERMINISTIC_KEY=your-encryption-deterministic-key
|
||||||
LAGO_ENCRYPTION_KEY_DERIVATION_SALT=your-encryption-derivation-salt
|
# LAGO_ENCRYPTION_KEY_DERIVATION_SALT=your-encryption-derivation-salt
|
||||||
|
|
||||||
# AWS S3 Configuration
|
# AWS S3 Configuration
|
||||||
LAGO_USE_AWS_S3=false
|
# LAGO_USE_AWS_S3=false
|
||||||
LAGO_AWS_S3_ACCESS_KEY_ID=azerty123456
|
# LAGO_AWS_S3_ACCESS_KEY_ID=azerty123456
|
||||||
LAGO_AWS_S3_SECRET_ACCESS_KEY=azerty123456
|
# LAGO_AWS_S3_SECRET_ACCESS_KEY=azerty123456
|
||||||
LAGO_AWS_S3_REGION=us-east-1
|
# LAGO_AWS_S3_REGION=us-east-1
|
||||||
LAGO_AWS_S3_BUCKET=bucket
|
# LAGO_AWS_S3_BUCKET=bucket
|
||||||
LAGO_AWS_S3_ENDPOINT=
|
# LAGO_AWS_S3_ENDPOINT=
|
||||||
|
|
||||||
# Google Cloud Storage Configuration
|
# Google Cloud Storage Configuration
|
||||||
LAGO_USE_GCS=false
|
# LAGO_USE_GCS=false
|
||||||
LAGO_GCS_PROJECT=
|
# LAGO_GCS_PROJECT=
|
||||||
LAGO_GCS_BUCKET=
|
# LAGO_GCS_BUCKET=
|
||||||
|
|
||||||
# Redis Cache Configuration
|
# Redis Cache Configuration
|
||||||
LAGO_REDIS_CACHE_HOST=redis
|
# LAGO_REDIS_CACHE_HOST=redis
|
||||||
LAGO_REDIS_CACHE_PORT=6379
|
# LAGO_REDIS_CACHE_PORT=6379
|
||||||
LAGO_REDIS_CACHE_PASSWORD=
|
# LAGO_REDIS_CACHE_PASSWORD=
|
||||||
|
|
||||||
# Sentry Configuration
|
# Sentry Configuration
|
||||||
SENTRY_DSN=
|
# SENTRY_DSN=
|
||||||
SENTRY_DSN_FRONT=
|
# SENTRY_DSN_FRONT=
|
||||||
|
|
||||||
# Lago Feature Flags
|
# Lago Feature Flags
|
||||||
LAGO_DISABLE_SEGMENT=
|
# LAGO_DISABLE_SEGMENT=
|
||||||
LAGO_DISABLE_WALLET_REFRESH=
|
# LAGO_DISABLE_WALLET_REFRESH=
|
||||||
LAGO_SIDEKIQ_WEB=
|
# LAGO_SIDEKIQ_WEB=
|
||||||
SIDEKIQ_EVENTS=
|
# SIDEKIQ_EVENTS=
|
||||||
SIDEKIQ_PDFS=
|
# SIDEKIQ_PDFS=
|
||||||
|
|
||||||
# OAuth and Authentication
|
# OAuth and Authentication
|
||||||
LAGO_OAUTH_PROXY_URL=https://proxy.getlago.com
|
# LAGO_OAUTH_PROXY_URL=https://proxy.getlago.com
|
||||||
GOOGLE_AUTH_CLIENT_ID=
|
# GOOGLE_AUTH_CLIENT_ID=
|
||||||
GOOGLE_AUTH_CLIENT_SECRET=
|
# GOOGLE_AUTH_CLIENT_SECRET=
|
||||||
NANGO_SECRET_KEY=
|
# NANGO_SECRET_KEY=
|
||||||
LAGO_LICENSE=
|
# LAGO_LICENSE=
|
||||||
|
43
README.md
43
README.md
@ -105,32 +105,55 @@ To start using Lago, run the following commands in a shell:
|
|||||||
|
|
||||||
|
|
||||||
#### On a fresh install
|
#### On a fresh install
|
||||||
|
|
||||||
|
##### 1 :Clone the Repository:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Get the code
|
# Get the code
|
||||||
git clone --depth 1 https://github.com/getlago/lago.git
|
git clone --depth 1 https://github.com/getlago/lago.git
|
||||||
|
|
||||||
# Go to Lago folder
|
# Go to Lago folder
|
||||||
cd lago
|
cd lago
|
||||||
|
```
|
||||||
|
|
||||||
# Set up environment configuration
|
##### 2 : Set Up Environment Variables: Run the following script to copy the example .env file, generate necessary keys, and populate the .env file:
|
||||||
echo "LAGO_RSA_PRIVATE_KEY=\"`openssl genrsa 2048 | base64`\"" >> .env
|
|
||||||
source .env
|
|
||||||
|
|
||||||
# Start the api
|
|
||||||
docker compose up -d api
|
|
||||||
|
|
||||||
# Create the database
|
```bash
|
||||||
|
# Copy the example .env file and populate keys
|
||||||
|
cp .env.example .env
|
||||||
|
echo "SECRET_KEY_BASE=\"$(openssl rand -hex 64)\"" >> .env
|
||||||
|
echo "LAGO_RSA_PRIVATE_KEY=\"$(openssl genrsa 2048 | base64)\"" >> .env
|
||||||
|
echo "LAGO_ENCRYPTION_PRIMARY_KEY=\"$(openssl rand -base64 32)\"" >> .env
|
||||||
|
echo "LAGO_ENCRYPTION_DETERMINISTIC_KEY=\"$(openssl rand -base64 32)\"" >> .env
|
||||||
|
echo "LAGO_ENCRYPTION_KEY_DERIVATION_SALT=\"$(openssl rand -base64 32)\"" >> .env
|
||||||
|
```
|
||||||
|
|
||||||
|
##### 3 : Launch the API Service:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose -f docker-compose.new.yml up -d api
|
||||||
|
```
|
||||||
|
|
||||||
|
##### 4 : Create and Migrate the Database:
|
||||||
|
|
||||||
|
```bash
|
||||||
docker compose exec api rails db:create
|
docker compose exec api rails db:create
|
||||||
docker compose exec api rails db:migrate
|
docker compose exec api rails db:migrate
|
||||||
|
|
||||||
# Start all other components
|
|
||||||
docker compose up
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
##### 5 : Launch All Services:
|
||||||
|
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose -f docker-compose.new.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
#### After an update
|
#### After an update
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose up
|
docker compose -f docker-compose.new.yml up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
You can now open your browser and go to http://localhost to connect to the application. Lago's API is exposed at http://localhost:3000.
|
You can now open your browser and go to http://localhost to connect to the application. Lago's API is exposed at http://localhost:3000.
|
||||||
|
@ -5,48 +5,49 @@ volumes:
|
|||||||
traefik_certificates:
|
traefik_certificates:
|
||||||
traefik_config:
|
traefik_config:
|
||||||
|
|
||||||
x-common-environment: &common-environment
|
x-backend-x: &backend-environment
|
||||||
LAGO_API_URL: ${LAGO_API_URL}
|
LAGO_API_URL: ${LAGO_API_URL:-http://localhost/api}
|
||||||
REDIS_PASSWORD: ${REDIS_PASSWORD}
|
REDIS_PASSWORD: ${REDIS_PASSWORD:-changeme}
|
||||||
SECRET_KEY_BASE: ${SECRET_KEY_BASE}
|
SECRET_KEY_BASE: ${SECRET_KEY_BASE:-your-secret-key-base-hex-64}
|
||||||
RAILS_ENV: ${RAILS_ENV}
|
RAILS_ENV: ${RAILS_ENV:-production}
|
||||||
RAILS_LOG_TO_STDOUT: ${LAGO_RAILS_STDOUT}
|
RAILS_LOG_TO_STDOUT: ${LAGO_RAILS_STDOUT:-true}
|
||||||
SENTRY_DSN: ${SENTRY_DSN}
|
SENTRY_DSN: ${SENTRY_DSN:-}
|
||||||
LAGO_FRONT_URL: ${LAGO_FRONT_URL}
|
LAGO_FRONT_URL: ${LAGO_FRONT_URL:-http://localhost}
|
||||||
LAGO_RSA_PRIVATE_KEY: ${LAGO_RSA_PRIVATE_KEY}
|
LAGO_RSA_PRIVATE_KEY: ${LAGO_RSA_PRIVATE_KEY}
|
||||||
LAGO_ENCRYPTION_PRIMARY_KEY: ${LAGO_ENCRYPTION_PRIMARY_KEY}
|
LAGO_ENCRYPTION_PRIMARY_KEY: ${LAGO_ENCRYPTION_PRIMARY_KEY:-your-encryption-primary-key}
|
||||||
LAGO_ENCRYPTION_DETERMINISTIC_KEY: ${LAGO_ENCRYPTION_DETERMINISTIC_KEY}
|
LAGO_ENCRYPTION_DETERMINISTIC_KEY: ${LAGO_ENCRYPTION_DETERMINISTIC_KEY:-your-encryption-deterministic-key}
|
||||||
LAGO_ENCRYPTION_KEY_DERIVATION_SALT: ${LAGO_ENCRYPTION_KEY_DERIVATION_SALT}
|
LAGO_ENCRYPTION_KEY_DERIVATION_SALT: ${LAGO_ENCRYPTION_KEY_DERIVATION_SALT:-your-encryption-derivation-salt}
|
||||||
LAGO_USE_AWS_S3: ${LAGO_USE_AWS_S3}
|
LAGO_USE_AWS_S3: ${LAGO_USE_AWS_S3:-false}
|
||||||
LAGO_AWS_S3_ACCESS_KEY_ID: ${LAGO_AWS_S3_ACCESS_KEY_ID}
|
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}
|
LAGO_AWS_S3_SECRET_ACCESS_KEY: ${LAGO_AWS_S3_SECRET_ACCESS_KEY:-azerty123456}
|
||||||
LAGO_AWS_S3_REGION: ${LAGO_AWS_S3_REGION}
|
LAGO_AWS_S3_REGION: ${LAGO_AWS_S3_REGION:-us-east-1}
|
||||||
LAGO_AWS_S3_BUCKET: ${LAGO_AWS_S3_BUCKET}
|
LAGO_AWS_S3_BUCKET: ${LAGO_AWS_S3_BUCKET:-bucket}
|
||||||
LAGO_AWS_S3_ENDPOINT: ${LAGO_AWS_S3_ENDPOINT}
|
LAGO_AWS_S3_ENDPOINT: ${LAGO_AWS_S3_ENDPOINT:-http://s3.amazonaws.com}
|
||||||
LAGO_USE_GCS: ${LAGO_USE_GCS}
|
LAGO_USE_GCS: ${LAGO_USE_GCS:-false}
|
||||||
LAGO_GCS_PROJECT: ${LAGO_GCS_PROJECT}
|
LAGO_GCS_PROJECT: ${LAGO_GCS_PROJECT:-your-gcs-project}
|
||||||
LAGO_GCS_BUCKET: ${LAGO_GCS_BUCKET}
|
LAGO_GCS_BUCKET: ${LAGO_GCS_BUCKET:-your-gcs-bucket}
|
||||||
LAGO_PDF_URL: ${LAGO_PDF_URL}
|
LAGO_PDF_URL: ${LAGO_PDF_URL:-http://pdf:3000}
|
||||||
LAGO_REDIS_CACHE_PASSWORD: ${LAGO_REDIS_CACHE_PASSWORD}
|
LAGO_REDIS_CACHE_PASSWORD: ${LAGO_REDIS_CACHE_PASSWORD:-changeme}
|
||||||
LAGO_DISABLE_SEGMENT: ${LAGO_DISABLE_SEGMENT}
|
LAGO_DISABLE_SEGMENT: ${LAGO_DISABLE_SEGMENT:-false}
|
||||||
LAGO_DISABLE_WALLET_REFRESH: ${LAGO_DISABLE_WALLET_REFRESH}
|
LAGO_DISABLE_WALLET_REFRESH: ${LAGO_DISABLE_WALLET_REFRESH:-false}
|
||||||
NANGO_SECRET_KEY: ${NANGO_SECRET_KEY}
|
NANGO_SECRET_KEY: ${NANGO_SECRET_KEY:-your-nango-secret-key}
|
||||||
LAGO_LICENSE: ${LAGO_LICENSE}
|
LAGO_LICENSE: ${LAGO_LICENSE:-your-lago-license}
|
||||||
|
|
||||||
x-api-environment: &api-environment
|
x-api-environment: &api-environment
|
||||||
<<: *common-environment
|
<<: *backend-environment
|
||||||
LAGO_SIDEKIQ_WEB: ${LAGO_SIDEKIQ_WEB}
|
LAGO_SIDEKIQ_WEB: ${LAGO_SIDEKIQ_WEB:-true}
|
||||||
LAGO_OAUTH_PROXY_URL: ${LAGO_OAUTH_PROXY_URL}
|
LAGO_OAUTH_PROXY_URL: ${LAGO_OAUTH_PROXY_URL:-https://proxy.getlago.com}
|
||||||
GOOGLE_AUTH_CLIENT_ID: ${GOOGLE_AUTH_CLIENT_ID}
|
GOOGLE_AUTH_CLIENT_ID: ${GOOGLE_AUTH_CLIENT_ID:-}
|
||||||
GOOGLE_AUTH_CLIENT_SECRET: ${GOOGLE_AUTH_CLIENT_SECRET}
|
GOOGLE_AUTH_CLIENT_SECRET: ${GOOGLE_AUTH_CLIENT_SECRET:-}
|
||||||
|
|
||||||
x-front-environment: &front-environment
|
x-front-environment: &front-environment
|
||||||
API_URL: ${LAGO_API_URL}
|
API_URL: ${LAGO_API_URL:-http://localhost/api}
|
||||||
APP_ENV: ${APP_ENV}
|
APP_ENV: ${APP_ENV:-production}
|
||||||
LAGO_DISABLE_SIGNUP: ${LAGO_DISABLE_SIGNUP}
|
LAGO_DISABLE_SIGNUP: ${LAGO_DISABLE_SIGNUP:-false}
|
||||||
LAGO_OAUTH_PROXY_URL: ${LAGO_OAUTH_PROXY_URL}
|
LAGO_OAUTH_PROXY_URL: ${LAGO_OAUTH_PROXY_URL:-https://proxy.getlago.com}
|
||||||
SENTRY_DSN: ${SENTRY_DSN_FRONT}
|
SENTRY_DSN: ${SENTRY_DSN_FRONT:-}
|
||||||
NANGO_SECRET_KEY: ${NANGO_SECRET_KEY}
|
NANGO_SECRET_KEY: ${NANGO_SECRET_KEY:-}
|
||||||
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
traefik:
|
traefik:
|
||||||
@ -71,14 +72,14 @@ services:
|
|||||||
- traefik_certificates:/letsencrypt
|
- traefik_certificates:/letsencrypt
|
||||||
- traefik_config:/traefik
|
- traefik_config:/traefik
|
||||||
labels:
|
labels:
|
||||||
- "traefik.http.routers.traefik.rule=Host(`traefik.${LAGO_DOMAIN}`)"
|
- "traefik.http.routers.traefik.rule=Host(`${LAGO_DOMAIN:-localhost}`)"
|
||||||
- "traefik.http.routers.traefik.entrypoints=websecure"
|
- "traefik.http.routers.traefik.entrypoints=web"
|
||||||
- "traefik.http.routers.traefik.tls.certresolver=lagoresolver"
|
- "traefik.http.routers.traefik.tls.certresolver=lagoresolver"
|
||||||
- "traefik.http.services.traefik.loadbalancer.server.port=8080"
|
- "traefik.http.services.traefik.loadbalancer.server.port=8080"
|
||||||
|
|
||||||
api:
|
api:
|
||||||
container_name: lago-api
|
container_name: lago-api
|
||||||
image: getlago/api:${LAGO_VERSION}
|
image: getlago/api:${LAGO_VERSION:-v1.15.1}
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
db:
|
db:
|
||||||
@ -86,21 +87,24 @@ services:
|
|||||||
redis:
|
redis:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
command: ['./scripts/start.sh']
|
command: ['./scripts/start.sh']
|
||||||
|
ports:
|
||||||
|
- ${API_PORT:-3000}:3000
|
||||||
environment:
|
environment:
|
||||||
<<: *api-environment
|
<<: *api-environment
|
||||||
DATABASE_URL: "postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}?search_path=${POSTGRES_SCHEMA}"
|
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_PORT:-6379}"
|
REDIS_URL: "redis://${REDIS_HOST:-redis}:${REDIS_PORT:-6379}"
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
|
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 60s
|
timeout: 60s
|
||||||
retries: 5
|
retries: 5
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
# SSL
|
||||||
- "traefik.http.routers.api.entrypoints=websecure"
|
# - "traefik.http.routers.api.entrypoints=websecure"
|
||||||
- "traefik.http.routers.api.rule=Host(`${LAGO_DOMAIN}`) && PathPrefix(`/api`)"
|
- "traefik.http.routers.api.entrypoints=web"
|
||||||
- "traefik.http.routers.api.tls.certresolver=lagoresolver"
|
|
||||||
- "traefik.http.routers.api.priority=100"
|
- "traefik.http.routers.api.priority=100"
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.api.rule=Host(`${LAGO_DOMAIN:-localhost}`) && PathPrefix(`/api`)"
|
||||||
- "traefik.http.services.api.loadbalancer.server.port=3000"
|
- "traefik.http.services.api.loadbalancer.server.port=3000"
|
||||||
- "traefik.http.middlewares.api-strip-prefix.stripprefix.prefixes=/api"
|
- "traefik.http.middlewares.api-strip-prefix.stripprefix.prefixes=/api"
|
||||||
- "traefik.http.routers.api.middlewares=api-strip-prefix"
|
- "traefik.http.routers.api.middlewares=api-strip-prefix"
|
||||||
@ -109,7 +113,7 @@ services:
|
|||||||
|
|
||||||
front:
|
front:
|
||||||
container_name: lago-front
|
container_name: lago-front
|
||||||
image: getlago/front:${LAGO_VERSION}
|
image: getlago/front:${LAGO_VERSION:-v1.15.1}
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
api:
|
api:
|
||||||
@ -124,9 +128,8 @@ services:
|
|||||||
labels:
|
labels:
|
||||||
- "traefik.http.routers.front.priority=50"
|
- "traefik.http.routers.front.priority=50"
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.front.entrypoints=websecure"
|
- "traefik.http.routers.front.entrypoints=web"
|
||||||
- "traefik.http.routers.front.rule=Host(`${LAGO_DOMAIN}`) && PathPrefix(`/`)"
|
- "traefik.http.routers.front.rule=Host(`${LAGO_DOMAIN:-localhost}`) && PathPrefix(`/`)"
|
||||||
- "traefik.http.routers.front.tls.certresolver=lagoresolver"
|
|
||||||
- "traefik.http.services.front.loadbalancer.server.port=80"
|
- "traefik.http.services.front.loadbalancer.server.port=80"
|
||||||
volumes:
|
volumes:
|
||||||
- lago_storage_data:/app/storage
|
- lago_storage_data:/app/storage
|
||||||
@ -135,18 +138,18 @@ services:
|
|||||||
image: postgres:14-alpine
|
image: postgres:14-alpine
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_DB: ${POSTGRES_DB}
|
POSTGRES_DB: ${POSTGRES_DB:-lago}
|
||||||
POSTGRES_USER: ${POSTGRES_USER}
|
POSTGRES_USER: ${POSTGRES_USER:-lago}
|
||||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
|
||||||
PGDATA: ${PGDATA}
|
PGDATA: ${PGDATA:-/data/postgres}
|
||||||
PGPORT: ${POSTGRES_PORT}
|
PGPORT: ${POSTGRES_PORT:-5432}
|
||||||
POSTGRES_SCHEMA: ${POSTGRES_SCHEMA}
|
POSTGRES_SCHEMA: ${POSTGRES_SCHEMA:-public}
|
||||||
volumes:
|
volumes:
|
||||||
- lago_postgres_data:/data/postgres
|
- lago_postgres_data:/data/postgres
|
||||||
ports:
|
ports:
|
||||||
- "${POSTGRES_PORT}:${POSTGRES_PORT}"
|
- "${POSTGRES_PORT:-5432}:${POSTGRES_PORT:-5432}"
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
|
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-lago}"]
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 5
|
retries: 5
|
||||||
@ -168,134 +171,55 @@ services:
|
|||||||
|
|
||||||
api-worker:
|
api-worker:
|
||||||
container_name: lago-worker
|
container_name: lago-worker
|
||||||
image: getlago/api:${LAGO_VERSION}
|
image: getlago/api:${LAGO_VERSION:-v1.15.1}
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
api:
|
api:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
command: ['./scripts/start.worker.sh']
|
command: ['./scripts/start.worker.sh']
|
||||||
environment:
|
environment:
|
||||||
<<: *common-environment
|
<<: *backend-environment
|
||||||
LAGO_REDIS_CACHE_URL: "redis://${LAGO_REDIS_CACHE_HOST}:${LAGO_REDIS_CACHE_PORT}"
|
LAGO_REDIS_CACHE_URL: "redis://${LAGO_REDIS_CACHE_HOST:-redis}:${LAGO_REDIS_CACHE_PORT:-6379}"
|
||||||
DATABASE_URL: "postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}?search_path=${POSTGRES_SCHEMA}"
|
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_PORT:-6379}"
|
REDIS_URL: "redis://${REDIS_HOST:-redis}:${REDIS_PORT:-6379}"
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ['CMD-SHELL', 'bundle exec sidekiqmon | grep $(hostname) || exit 1']
|
test: ['CMD-SHELL', 'bundle exec sidekiqmon | grep $(hostname) || exit 1']
|
||||||
volumes:
|
volumes:
|
||||||
- lago_storage_data:/app/storage
|
- lago_storage_data:/app/storage
|
||||||
|
|
||||||
|
|
||||||
api-clock:
|
api-clock:
|
||||||
container_name: lago-clock
|
container_name: lago-clock
|
||||||
image: getlago/api:${LAGO_VERSION}
|
image: getlago/api:${LAGO_VERSION:-v1.15.1}
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
api:
|
api:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
command: ['./scripts/start.clock.sh']
|
command: ['./scripts/start.clock.sh']
|
||||||
environment:
|
environment:
|
||||||
<<: *common-environment
|
<<: *backend-environment
|
||||||
LAGO_REDIS_CACHE_URL: "redis://${LAGO_REDIS_CACHE_HOST}:${LAGO_REDIS_CACHE_PORT}"
|
LAGO_REDIS_CACHE_URL: "redis://${LAGO_REDIS_CACHE_HOST:-redis}:${LAGO_REDIS_CACHE_PORT:-6379}"
|
||||||
DATABASE_URL: "postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}?search_path=${POSTGRES_SCHEMA}"
|
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_PORT:-6379}"
|
REDIS_URL: "redis://${REDIS_HOST:-redis}:${REDIS_PORT:-6379}"
|
||||||
|
|
||||||
pdf:
|
pdf:
|
||||||
image: getlago/lago-gotenberg:7.8.2
|
image: getlago/lago-gotenberg:7.8.2
|
||||||
|
|
||||||
migrate:
|
migrate:
|
||||||
container_name: lago-migrate
|
container_name: lago-migrate
|
||||||
image: getlago/api:${LAGO_VERSION}
|
image: getlago/api:${LAGO_VERSION:-v1.15.1}
|
||||||
depends_on:
|
depends_on:
|
||||||
db:
|
db:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
redis:
|
redis:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
command: ['./scripts/start.migrate.sh']
|
command: ['./scripts/start.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}
|
||||||
|
- LAGO_RSA_PRIVATE_KEY=${LAGO_RSA_PRIVATE_KEY}
|
||||||
|
- 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}
|
||||||
volumes:
|
volumes:
|
||||||
- lago_storage_data:/app/storage
|
- 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:
|
|
||||||
# container_name: lago-events-worker
|
|
||||||
# image: getlago/api:${LAGO_VERSION}
|
|
||||||
# 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
|
|
||||||
# - LAGO_LICENSE=${LAGO_LICENSE:-}
|
|
||||||
|
|
||||||
# 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:
|
|
||||||
# container_name: lago-pdfs-worker
|
|
||||||
# image: getlago/api:${LAGO_VERSION}
|
|
||||||
# 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
|
|
||||||
# - LAGO_LICENSE=${LAGO_LICENSE:-}
|
|
Reference in New Issue
Block a user