From 194b674c7d4cd76eef3d2f54a01149d16f3841ec Mon Sep 17 00:00:00 2001 From: Ksan Date: Thu, 12 Jun 2025 00:09:45 +0200 Subject: [PATCH] Initial docker compose files --- .gitignore | 4 +++ crafty/compose.yaml | 21 ++++++++++++++ ddns/compose.yaml | 41 +++++++++++++++++++++++++++ gitea/compose.yaml | 61 ++++++++++++++++++++++++++++++++++++++++ nextcloud/compose.yaml | 50 ++++++++++++++++++++++++++++++++ test/docker-compose.yaml | 20 +++++++++++++ traefik/compose.yaml | 22 +++++++++++++++ 7 files changed, 219 insertions(+) create mode 100644 .gitignore create mode 100644 crafty/compose.yaml create mode 100644 ddns/compose.yaml create mode 100644 gitea/compose.yaml create mode 100644 nextcloud/compose.yaml create mode 100644 test/docker-compose.yaml create mode 100644 traefik/compose.yaml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e89c092 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.env +todo +certs/ +traefik/config/ diff --git a/crafty/compose.yaml b/crafty/compose.yaml new file mode 100644 index 0000000..5de05ef --- /dev/null +++ b/crafty/compose.yaml @@ -0,0 +1,21 @@ +--- + +services: + crafty: + container_name: crafty_container + image: registry.gitlab.com/crafty-controller/crafty-4:latest + restart: always + environment: + - TZ=Etc/UTC + ports: + - "8443:8443" # HTTPS + # - "8123:8123" # DYNMAP + - "19132:19132/udp" # BEDROCK + - "25500-25600:25500-25600" # MC SERV PORT RANGE + volumes: + - ./docker/backups:/crafty/backups + - ./docker/logs:/crafty/logs + - ./docker/servers:/crafty/servers + - ./docker/config:/crafty/app/config + - ./docker/import:/crafty/import + diff --git a/ddns/compose.yaml b/ddns/compose.yaml new file mode 100644 index 0000000..ff5144c --- /dev/null +++ b/ddns/compose.yaml @@ -0,0 +1,41 @@ +--- +services: + cloudflare-ddns: + image: oznu/cloudflare-ddns:latest + container_name: cloudflare-ddns + environment: + - API_KEY=${API_KEY} + - ZONE=${DOMAIN} + - PROXIED=false + restart: always + + ddns-git: + image: oznu/cloudflare-ddns:latest + container_name: ddns-git + environment: + - API_KEY=${API_KEY} + - ZONE=${DOMAIN} + - SUBDOMAIN=git + - PROXIED=false + restart: always + + ddns-crafty: + image: oznu/cloudflare-ddns:latest + container_name: ddns-crafty + environment: + - API_KEY=${API_KEY} + - ZONE=${DOMAIN} + - SUBDOMAIN=crafty + - PROXIED=false + restart: always + + ddns-nextcloud: + image: oznu/cloudflare-ddns:latest + container_name: ddns-nextcloud + environment: + - API_KEY=${API_KEY} + - ZONE=${DOMAIN} + - SUBDOMAIN=cloud + - PROXIED=false + restart: always + diff --git a/gitea/compose.yaml b/gitea/compose.yaml new file mode 100644 index 0000000..53a22d4 --- /dev/null +++ b/gitea/compose.yaml @@ -0,0 +1,61 @@ +--- +services: + server: + image: gitea/gitea:1.23.8 + container_name: gitea-server + environment: + - USER_UID=1000 + - USER_GID=1000 + - GITEA__database__DB_TYPE=postgres + - GITEA__database__HOST=${POSTGRES_HOST:-db}:${POSTGRES_PORT:-5432} + - GITEA__database__NAME=${POSTGRES_DB:?POSTGRES_DB not set} + - GITEA__database__USER=${POSTGRES_USER:?POSTGRES_USER not set} + - GITEA__database__PASSWD=${POSTGRES_PASSWORD:?POSTGRES_PASSWORD not set} + - GITEA__server__SSH_PORT=2221 + - GITEA__server__ROOT_URL=https://git.${DOMAIN} + networks: + - frontend + - backend + volumes: + - /mnt/hdd1/data/docker/volumes/gitea-data:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: + + - "2221:22" + depends_on: + - db + # <-- + labels: + - traefik.enable=true + - traefik.http.services.gitea.loadbalancer.server.port=3000 + - traefik.http.services.gitea.loadbalancer.server.scheme=http + - traefik.http.routers.gitea-https.entrypoints=websecure + - traefik.http.routers.gitea-https.rule=Host(`git.${DOMAIN}`) + - traefik.http.routers.gitea-https.tls=true + - traefik.http.routers.gitea-https.tls.certresolver=cloudflare + restart: always + + db: + image: postgres:14 + container_name: gitea-db + environment: + - POSTGRES_USER=${POSTGRES_USER:?POSTGRES_USER not set} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:?POSTGRES_PASSWORD not set} + - POSTGRES_DB=${POSTGRES_DB:?POSTGRES_DB not set} + networks: + - backend + volumes: + - /mnt/hdd1/data/docker/volumes/gitea-db:/var/lib/postgresql/data + restart: always +volumes: + gitea-data: + driver: local + gitea-db: + driver: local + +networks: + frontend: + external: true + backend: + external: true diff --git a/nextcloud/compose.yaml b/nextcloud/compose.yaml new file mode 100644 index 0000000..c2dac98 --- /dev/null +++ b/nextcloud/compose.yaml @@ -0,0 +1,50 @@ +--- +volumes: + nextcloud-main: + nextcloud-db: +services: + nextcloud-app: + image: docker.io/library/nextcloud:31.0.5-apache + container_name: nextcloud-app + volumes: + - /mnt/hdd1/nextcloud-data:/var/www/html/data + - nextcloud-main:/var/www/html + labels: + - traefik.enable=true + - traefik.http.routers.nextcloud.rule=Host(`cloud.${DOMAIN}`) + - traefik.http.routers.nextcloud.entrypoints=websecure + - traefik.http.routers.nextcloud.tls=true + - traefik.http.routers.nextcloud.tls.certresolver=cloudflare + - traefik.http.middlewares.nextcloud-headers.headers.customrequestheaders.X-Forwarded-Proto=https + + + environment: + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + - POSTGRES_DB=${POSTGRES_DB} + - POSTGRES_USER=${POSTGRES_USER} + - POSTGRES_HOST=nextcloud-db + networks: + - frontend + - backend + restart: unless-stopped + + nextcloud-db: + image: postgres:14 + container_name: nextcloud-db + networks: + - backend + volumes: + - nextcloud-db:/var/lib/postgresql/data + environment: + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + - POSTGRES_DB=${POSTGRES_DB} + - POSTGRES_USER=${POSTGRES_USER} + restart: unless-stopped + +networks: + frontend: + external: true + backend: + external: true + + diff --git a/test/docker-compose.yaml b/test/docker-compose.yaml new file mode 100644 index 0000000..a52dc69 --- /dev/null +++ b/test/docker-compose.yaml @@ -0,0 +1,20 @@ +version: '3.7' + +services: + nginx: + image: nginx:latest # Use the latest official Nginx image + container_name: nginx_test_site + networks: + - frontend + labels: + - traefik.enable=true + - traefik.http.routers.nginx-http.rule=Host(`${DOMAIN}`) || Host(`www.${DOMAIN}`) + - traefik.http.routers.nginx-http.entrypoints=web + - traefik.http.routers.nginx-https.tls=true + - traefik.http.routers.nginx-https.tls.certresolver=cloudflare + - traefik.http.routers.nginx-https.entrypoints=websecure + - traefik.http.routers.nginx-https.rule=Host(`${DOMAIN}`) || Host(`www.${DOMAIN}`) + restart: always +networks: + frontend: + external: true diff --git a/traefik/compose.yaml b/traefik/compose.yaml new file mode 100644 index 0000000..9702680 --- /dev/null +++ b/traefik/compose.yaml @@ -0,0 +1,22 @@ +--- +services: + traefik: + image: docker.io/library/traefik:v3.4.0 + container_name: traefik + ports: + - 80:80 + - 443:443 + #- 8080:8080 + volumes: + - /run/docker.sock:/run/docker.sock:ro + - ./config/:/etc/traefik/:ro + - ./certs/:/var/traefik/certs/:rw + environment: + - CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN} + networks: + - frontend + restart: always + +networks: + frontend: + external: true