tinynas/docker-compose.yml

238 lines
5.8 KiB
YAML

version: "3.0"
volumes:
media:
transmission-config:
transmission-watch:
nextcloud-config:
nextcloud-data:
nextcloud-www:
caddy-config:
caddy-data:
vw-data:
postgres-data:
postgres-backups:
networks:
inner:
services:
minidlna:
build:
context: minidlna
dockerfile: Dockerfile
container_name: dlna
environment:
PUID: 1000
PGID: 1000
TZ: ${TZ}
MINIDLNA_MEDIA_DIR: /media
MINIDLNA_FRIENDLY_NAME: tinyNAS
volumes:
- media:/media
healthcheck:
test:
[
"CMD",
"curl",
"--silent",
"--fail",
"127.0.0.1:8200",
"||",
"exit 1"
]
interval: 10s
timeout: 10s
retries: 6
start_period: 10s
restart: unless-stopped
ports:
- 8200:8200
transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: transmission
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ}
- USER=${TRANSMISSION_USER}
- PASS=${TRANSMISSION_PASSWORD}
volumes:
- transmission-config:/config
- media:/downloads
- transmission-watch:/watch
ports:
- 51413:51413
- 51413:51413/udp
restart: unless-stopped
networks:
- inner
nextcloud:
image: nextcloud:stable-fpm-alpine
container_name: nextcloud
environment:
PUID: 1000
PGID: 1000
TZ: ${TZ}
POSTGRES_DB: nextcloud
POSTGRES_USER: ${PG_USER}
POSTGRES_PASSWORD: ${PG_PASSWORD}
POSTGRES_HOST: postgres:5432
NEXTCLOUD_TRUSTED_DOMAINS: nextcloud.${HOST}
REDIS_HOST: redis
REDIS_HOST_PASSWORD: ${REDIS_PASSWORD}
volumes:
- nextcloud-config:/config:rw
- nextcloud-data:/var/data:rw
- nextcloud-www:/var/www/html:rw
restart: unless-stopped
networks:
- inner
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_started
nextcloud-cron:
image: nextcloud:stable-fpm-alpine
restart: always
container_name: nextcloud-cron
environment:
PUID: 1000
PGID: 1000
TZ: ${TZ}
POSTGRES_DB: nextcloud
POSTGRES_USER: ${PG_USER}
POSTGRES_PASSWORD: ${PG_PASSWORD}
POSTGRES_HOST: postgres:5432
NEXTCLOUD_TRUSTED_DOMAINS: nextcloud.${HOST}
REDIS_HOST: redis
REDIS_HOST_PASSWORD: ${REDIS_PASSWORD}
volumes:
- nextcloud-config:/config:rw
- nextcloud-data:/data:rw
- nextcloud-www:/var/www/html:rw
entrypoint: /cron.sh
networks:
- inner
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_started
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
PUID: 1000
PGID: 1000
TZ: ${TZ}
WEBSOCKET_ENABLED: "true"
DATABASE_URL: postgresql://${PG_USER}:${PG_PASSWORD}@postgres:5432/vaultwarden
volumes:
- vw-data:/data
networks:
- inner
depends_on:
postgres:
condition: service_healthy
gateway:
image: caddy:2
container_name: caddy
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./etc/Caddyfile:/etc/caddy/Caddyfile:ro
- caddy-config:/config:rw
- caddy-data:/data:rw
- nextcloud-www:/var/www/nextcloud:rw
environment:
PUID: 1000
PGID: 1000
TZ: ${TZ}
HOST: ${HOST}
EMAIL: ${EMAIL}
LOG_FILE: "/data/access.log"
networks:
- inner
depends_on:
- nextcloud
- vaultwarden
- transmission
postgres:
image: postgres:15.2-alpine3.17
restart: always
container_name: postgres
environment:
PUID: 1000
PGID: 1000
TZ: ${TZ}
PGUSER: ${PG_USER}
POSTGRES_USER: ${PG_USER}
POSTGRES_PASSWORD: ${PG_PASSWORD}
DB_NAME: nextcloud,vaultwarden
LANG: ru_RU.utf8
volumes:
- "postgres-data:/var/lib/postgresql/data"
- "./etc/init.sql:/docker-entrypoint-initdb.d/init.sql"
healthcheck:
test: ["CMD-SHELL", "pg_isready -d vaultwarden -U docker"]
interval: 20s
timeout: 10s
retries: 10
networks:
- inner
backups:
image: postgres:15.2-alpine3.17
container_name: postgres_backup
# Run nextcloud-restore-application-data.sh to restore application data if needed.
# Run nextcloud-restore-database.sh to restore database if needed.
command: sh -c 'sleep 30m
&& while true; do
PGPASSWORD="$$(echo $$POSTGRES_PASSWORD)"
pg_dump
-h postgres
-p 5432
-d nextcloud
-U docker | gzip > /srv/nextcloud-postgres/backups/nextcloud-postgres-backup-$$(date "+%Y-%m-%d_%H-%M").gz
&& tar -zcpf /srv/nextcloud-application-data/backups/nextcloud-application-data-backup-$$(date "+%Y-%m-%d_%H-%M").tar.gz /var/www/html
&& find /srv/nextcloud-postgres/backups -type f -mtime +7 | xargs rm -f
&& find /srv/nextcloud-application-data/backups -type f -mtime +7 | xargs rm -f;
sleep 24h; done'
environment:
PUID: 1000
PGID: 1000
TZ: ${TZ}
PGUSER: ${PG_USER}
POSTGRES_USER: ${PG_USER}
POSTGRES_PASSWORD: ${PG_PASSWORD}
DB_NAME: nextcloud,vaultwarden
LANG: ru_RU.utf8
volumes:
- "postgres-data:/var/lib/postgresql/data"
# Database backups location
- "postgres-backups:/srv/nextcloud-postgres/backups"
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
redis:
container_name: redis
image: redis:alpine3.17
restart: always
mem_limit: 2048m
mem_reservation: 512m
command: redis-server --requirepass $REDIS_PASSWORD
networks:
- inner