techarmor-iaac/docker/docker-compose.yml

277 lines
7 KiB
YAML

version: '3.8'
networks:
proxy-net:
driver: bridge
internal-net:
driver: bridge
volumes:
npm_data:
npm_letsencrypt:
homepage_config:
authentik_db:
authentik_redis:
simplelogin_data:
simplelogin_postgres:
simplelogin_redis:
nextcloud_data:
nextcloud_db:
forgejo_data:
plane_postgres:
plane_redis:
plane_minio:
docmost_data:
docmost_db:
paperless_data:
paperless_media:
paperless_db:
paperless_redis:
calibre_data:
uptime_kuma:
services:
# ==========================================
# 1. REVERSE PROXY & SSL (Nginx Proxy Manager)
# ==========================================
nginx-proxy-manager:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '443:443'
- '81:81' # Admin Web UI
networks:
- proxy-net
- internal-net
volumes:
- npm_data:/data
- npm_letsencrypt:/etc/letsencrypt
# ==========================================
# 2. CENTRAL DASHBOARD (Homepage)
# ==========================================
homepage:
image: ghcr.io/gethomepage/homepage:latest
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- HOMEPAGE_ALLOWED_HOSTS=*
networks:
- proxy-net
- internal-net
volumes:
- homepage_config:/app/config
- /var/run/docker.sock:/var/run/docker.sock:ro
# ==========================================
# 3. EMAIL ALIAS SERVICE (SimpleLogin)
# ==========================================
simplelogin-app:
image: simplelogin/app:latest
restart: unless-stopped
environment:
- DB_URI=postgresql://sl:${SL_DB_PASSWORD:-secure_password}@simplelogin-db:5432/sl
- REDIS_URL=redis://simplelogin-redis:6379
- URL=https://mail.techarmor.pl
- EMAIL_DOMAIN=${DOMAIN:-techarmor.pl}
- SUPPORT_EMAIL=gwolaniuk@gmail.com
- FLASK_SECRET=${SL_FLASK_SECRET:-supersecretflaskkey}
- COOKIE_SECURE=true
networks:
- proxy-net
- internal-net
depends_on:
- simplelogin-db
- simplelogin-redis
simplelogin-db:
image: postgres:15-alpine
restart: unless-stopped
environment:
- POSTGRES_DB=sl
- POSTGRES_USER=sl
- POSTGRES_PASSWORD=${SL_DB_PASSWORD:-secure_password}
networks:
- internal-net
volumes:
- simplelogin_postgres:/var/lib/postgresql/data
simplelogin-redis:
image: redis:7-alpine
restart: unless-stopped
networks:
- internal-net
# ==========================================
# 4. CLOUD PLATFORM & OFFICE (Nextcloud + Collabora)
# ==========================================
nextcloud:
image: nextcloud:apache
restart: unless-stopped
environment:
- POSTGRES_HOST=nextcloud-db
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-secure_db_password}
networks:
- proxy-net
- internal-net
volumes:
- nextcloud_data:/var/www/html
depends_on:
- nextcloud-db
nextcloud-db:
image: postgres:15-alpine
restart: unless-stopped
environment:
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-secure_db_password}
networks:
- internal-net
volumes:
- nextcloud_db:/var/lib/postgresql/data
collabora:
image: collabora/code:latest
restart: unless-stopped
environment:
- 'domain=cloud\.techarmor\.pl'
- 'server_name=office.techarmor.pl'
- 'extra_params=--o:ssl.enable=false --o:ssl.termination=true'
networks:
- proxy-net
- internal-net
cap_add:
- MKNOD
# ==========================================
# 5. GIT & CI/CD (Forgejo)
# ==========================================
forgejo:
image: codeberg.org/forgejo/forgejo:10
restart: unless-stopped
environment:
- USER_UID=1000
- USER_GID=1000
networks:
- proxy-net
- internal-net
volumes:
- forgejo_data:/data
ports:
- "222:22" # SSH port mapping
# ==========================================
# 6. KNOWLEDGE BASE & WIKI (Docmost)
# ==========================================
docmost:
image: docmost/docmost:latest
restart: unless-stopped
environment:
- DATABASE_URL=postgresql://docmost:${DOCMOST_DB_PASSWORD:-secure_password}@docmost-db:5432/docmost?sslmode=disable
- APP_URL=https://wiki.techarmor.pl
- APP_SECRET=${DOCMOST_SECRET:-supersecretkey}
- REDIS_URL=redis://docmost-redis:6379
networks:
- proxy-net
- internal-net
volumes:
- docmost_data:/app/data
depends_on:
- docmost-db
- docmost-redis
docmost-db:
image: postgres:15-alpine
restart: unless-stopped
environment:
- POSTGRES_DB=docmost
- POSTGRES_USER=docmost
- POSTGRES_PASSWORD=${DOCMOST_DB_PASSWORD:-secure_password}
networks:
- internal-net
volumes:
- docmost_db:/var/lib/postgresql/data
docmost-redis:
image: redis:7-alpine
restart: unless-stopped
networks:
- internal-net
# ==========================================
# 7. DOCUMENT ARCHIVING (Paperless-ngx)
# ==========================================
paperless-webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
environment:
- PAPERLESS_REDIS=redis://paperless-redis:6379
- PAPERLESS_DBHOST=paperless-db
- PAPERLESS_DBNAME=paperless
- PAPERLESS_DBUSER=paperless
- PAPERLESS_DBPASS=${PAPERLESS_DB_PASSWORD:-secure_password}
- PAPERLESS_SECRET_KEY=${PAPERLESS_SECRET:-supersecretkey}
- PAPERLESS_URL=https://docs.techarmor.pl
networks:
- proxy-net
- internal-net
volumes:
- paperless_data:/usr/src/paperless/data
- paperless_media:/usr/src/paperless/media
depends_on:
- paperless-db
- paperless-redis
paperless-db:
image: postgres:15-alpine
restart: unless-stopped
environment:
- POSTGRES_DB=paperless
- POSTGRES_USER=paperless
- POSTGRES_PASSWORD=${PAPERLESS_DB_PASSWORD:-secure_password}
networks:
- internal-net
volumes:
- paperless_db:/var/lib/postgresql/data
paperless-redis:
image: redis:7-alpine
restart: unless-stopped
networks:
- internal-net
# ==========================================
# 8. E-BOOK LIBRARY (Calibre-Web)
# ==========================================
calibre-web:
image: lscr.io/linuxserver/calibre-web:latest
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- HOMEPAGE_ALLOWED_HOSTS=*
- TZ=UTC
networks:
- proxy-net
- internal-net
volumes:
- calibre_data:/config
- /srv/company/books:/books
# ==========================================
# 9. MONITORING (Uptime Kuma)
# ==========================================
uptime-kuma:
image: louislam/uptime-kuma:1
restart: unless-stopped
networks:
- proxy-net
- internal-net
volumes:
- uptime_kuma:/app/data