diff --git a/.env.example b/.env.example index 766894992..e4a935626 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,7 @@ COMPOSE_PROJECT_NAME=ghostfolio # CACHE -REDIS_HOST=localhost +REDIS_HOST=redis REDIS_PORT=6379 REDIS_PASSWORD= @@ -12,5 +12,5 @@ POSTGRES_PASSWORD= # VARIOUS ACCESS_TOKEN_SALT= -DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?connect_timeout=300&sslmode=prefer +DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?connect_timeout=300&sslmode=prefer JWT_SECRET_KEY= diff --git a/CHANGELOG.md b/CHANGELOG.md index aded12c46..1fbf59122 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Changed the `REDIS_HOST` from `localhost` to `redis` in `.env.example` +- Changed the _Postgres_ host from `localhost` to `postgres` in `.env.example` +- Changed the _Postgres_ image from `postgres:15` to `postgres:15-alpine` in the `docker-compose` files +- Introduced `extends` in the `docker-compose` files - Improved the language localization for German (`de`) ## 2.132.0 - 2024-12-30 diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index b009679ac..9e32b56eb 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -12,7 +12,7 @@ ### Setup 1. Run `npm install` -1. Run `docker compose --env-file ./.env -f docker/docker-compose.dev.yml up -d` to start [PostgreSQL](https://www.postgresql.org) and [Redis](https://redis.io) +1. Run `docker compose -f docker/docker-compose.dev.yml up -d` to start [PostgreSQL](https://www.postgresql.org) and [Redis](https://redis.io) 1. Run `npm run database:setup` to initialize the database schema 1. Start the [server](#start-server) and the [client](#start-client) 1. Open https://localhost:4200/en in your browser diff --git a/README.md b/README.md index dca360c39..4151617c8 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ We provide official container images hosted on [Docker Hub](https://hub.docker.c Run the following command to start the Docker images from [Docker Hub](https://hub.docker.com/r/ghostfolio/ghostfolio): ```bash -docker compose --env-file ./.env -f docker/docker-compose.yml up -d +docker compose -f docker/docker-compose.yml up -d ``` #### b. Build and run environment @@ -126,8 +126,8 @@ docker compose --env-file ./.env -f docker/docker-compose.yml up -d Run the following commands to build and start the Docker images: ```bash -docker compose --env-file ./.env -f docker/docker-compose.build.yml build -docker compose --env-file ./.env -f docker/docker-compose.build.yml up -d +docker compose -f docker/docker-compose.build.yml build +docker compose -f docker/docker-compose.build.yml up -d ``` #### Setup @@ -137,9 +137,19 @@ docker compose --env-file ./.env -f docker/docker-compose.build.yml up -d #### Upgrade Version -1. Increase the version of the `ghostfolio/ghostfolio` Docker image in `docker/docker-compose.yml` -1. Run the following command to start the new Docker image: `docker compose --env-file ./.env -f docker/docker-compose.yml up -d` - At each start, the container will automatically apply the database schema migrations if needed. +1. Update the _Ghostfolio_ Docker image + + - Increase the version of the `ghostfolio/ghostfolio` Docker image in `docker/docker-compose.yml` + - Run the following command if `ghostfolio:latest` is set: + ```bash + docker compose -f docker/docker-compose.yml pull + ``` + +1. Run the following command to start the new Docker image: + ```bash + docker compose -f docker/docker-compose.yml up -d + ``` + The container will automatically apply any required database schema migrations during startup. ### Home Server Systems (Community) diff --git a/docker/docker-compose.build.yml b/docker/docker-compose.build.yml index 96829ad34..a2b3e7cb4 100644 --- a/docker/docker-compose.build.yml +++ b/docker/docker-compose.build.yml @@ -2,51 +2,22 @@ name: ghostfolio_build services: ghostfolio: build: ../ - container_name: ghostfolio-build - init: true - env_file: - - ../.env - environment: - DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?connect_timeout=300&sslmode=prefer - REDIS_HOST: redis - REDIS_PASSWORD: ${REDIS_PASSWORD} - ports: - - 3333:3333 - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - healthcheck: - test: ['CMD-SHELL', 'curl -f http://localhost:3333/api/v1/health'] - interval: 10s - timeout: 5s - retries: 5 + image: ghostfolio/ghostfolio:local + extends: + file: docker-compose.yml + service: ghostfolio postgres: - image: docker.io/library/postgres:15 container_name: gf-postgres-build - env_file: - - ../.env - healthcheck: - test: ['CMD-SHELL', 'pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}'] - interval: 10s - timeout: 5s - retries: 5 - volumes: - - postgres:/var/lib/postgresql/data + extends: + file: docker-compose.yml + service: postgres redis: - image: docker.io/library/redis:alpine container_name: gf-redis-build - env_file: - - ../.env - command: ['redis-server', '--requirepass', $REDIS_PASSWORD] - healthcheck: - test: ['CMD-SHELL', 'redis-cli --pass "$REDIS_PASSWORD" ping | grep PONG'] - interval: 10s - timeout: 5s - retries: 5 + extends: + file: docker-compose.yml + service: redis volumes: postgres: diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml index 39a1d56e9..ec91025ea 100644 --- a/docker/docker-compose.dev.yml +++ b/docker/docker-compose.dev.yml @@ -1,23 +1,18 @@ name: ghostfolio_dev services: postgres: - image: docker.io/library/postgres:15 + extends: + file: docker-compose.yml + service: postgres container_name: gf-postgres-dev - restart: unless-stopped - env_file: - - ../.env ports: - ${POSTGRES_PORT:-5432}:5432 - volumes: - - postgres:/var/lib/postgresql/data redis: - image: docker.io/library/redis:alpine + extends: + file: docker-compose.yml + service: redis container_name: gf-redis-dev - restart: unless-stopped - env_file: - - ../.env - command: ['redis-server', '--requirepass', $REDIS_PASSWORD] ports: - ${REDIS_PORT:-6379}:6379 diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index c6ec5b3d7..8c69e5420 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -3,6 +3,7 @@ services: ghostfolio: image: docker.io/ghostfolio/ghostfolio:latest container_name: ghostfolio + restart: unless-stopped init: true cap_drop: - ALL @@ -10,10 +11,6 @@ services: - no-new-privileges:true env_file: - ../.env - environment: - DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?connect_timeout=300&sslmode=prefer - REDIS_HOST: redis - REDIS_PASSWORD: ${REDIS_PASSWORD} ports: - 3333:3333 depends_on: @@ -28,8 +25,9 @@ services: retries: 5 postgres: - image: docker.io/library/postgres:15 + image: docker.io/library/postgres:15-alpine container_name: gf-postgres + restart: unless-stopped cap_drop: - ALL cap_add: @@ -43,7 +41,8 @@ services: env_file: - ../.env healthcheck: - test: ['CMD-SHELL', 'pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}'] + test: + ['CMD-SHELL', 'pg_isready -d "$${POSTGRES_DB}" -U $${POSTGRES_USER}'] interval: 10s timeout: 5s retries: 5 @@ -53,6 +52,7 @@ services: redis: image: docker.io/library/redis:alpine container_name: gf-redis + restart: unless-stopped user: '999:1000' cap_drop: - ALL @@ -60,9 +60,13 @@ services: - no-new-privileges:true env_file: - ../.env - command: ['redis-server', '--requirepass', $REDIS_PASSWORD] + command: + - /bin/sh + - -c + - redis-server --requirepass "$${REDIS_PASSWORD:?REDIS_PASSWORD variable is not set}" healthcheck: - test: ['CMD-SHELL', 'redis-cli --pass "$REDIS_PASSWORD" ping | grep PONG'] + test: + ['CMD-SHELL', 'redis-cli --pass "$${REDIS_PASSWORD}" ping | grep PONG'] interval: 10s timeout: 5s retries: 5