services: postgres: image: ${POSTGRESQL_IMAGE} container_name: ${POSTGRESQL_CONTAINER_NAME} hostname: ${POSTGRESQL_HOSTNAME_NAME} environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} restart: always ports: - "5432:5432" volumes: - ./data:/var/lib/postgresql/data - ./backups:/backups networks: - postgres-network init-db: image: ${POSTGRESQL_IMAGE} container_name: ${INITDB_CONTAINER_NAME} environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} volumes: - ./backups:/backups depends_on: - postgres networks: - postgres-network entrypoint: > bash -c " echo 'Waiting for PostgreSQL to start...'; until pg_isready -h ${POSTGRESQL_HOSTNAME_NAME} -U ${POSTGRES_USER}; do sleep 1; done; echo 'Creating database ${POSTGRES_DB} if it does not exist...'; psql -h ${POSTGRESQL_HOSTNAME_NAME} -U ${POSTGRES_USER} -c 'CREATE DATABASE ${POSTGRES_DB};' || true; echo 'Restoring backup from /backups/backup.dump into ${POSTGRES_DB}...'; pg_restore -h ${POSTGRESQL_HOSTNAME_NAME} -U ${POSTGRES_USER} -d ${POSTGRES_DB} ${POSTGRES_DB_DUMP}; echo 'Backup restored successfully.'; " restart: on-failure networks: postgres-network: driver: bridge