|
|
@@ -0,0 +1,112 @@
|
|
|
+version: '3.8'
|
|
|
+
|
|
|
+services:
|
|
|
+ reverse-proxy:
|
|
|
+ container_name: "reverse-proxy"
|
|
|
+ image: "traefik:v3.6.5"
|
|
|
+ restart: "unless-stopped"
|
|
|
+ labels:
|
|
|
+ # global redirect to https
|
|
|
+ - "traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)"
|
|
|
+ - "traefik.http.routers.http-catchall.entrypoints=web"
|
|
|
+ - "traefik.http.routers.http-catchall.middlewares=redirect-to-https"
|
|
|
+ # middleware redirect
|
|
|
+ - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
|
|
|
+ command:
|
|
|
+ - "--api.insecure=true"
|
|
|
+ - "--certificatesresolvers.njordresolver.acme.caserver=https://acme-v02.api.letsencrypt.org/directory"
|
|
|
+ - "--certificatesresolvers.njordresolver.acme.email=progisart@gmx.de"
|
|
|
+ - "--certificatesresolvers.njordresolver.acme.httpchallenge.entrypoint=web"
|
|
|
+ - "--certificatesresolvers.njordresolver.acme.storage=/letsencrypt/acme.json"
|
|
|
+ - "--certificatesresolvers.njordresolver.acme.dnschallenge.resolvers=1.1.1.1:53,8.8.8.8:53"
|
|
|
+ - "--entrypoints.web.address=0.0.0.0:80"
|
|
|
+ - "--entrypoints.websecure.address=0.0.0.0:443"
|
|
|
+ - "--log.level=info"
|
|
|
+ - "--providers.docker=true"
|
|
|
+ ports:
|
|
|
+ - "80:80"
|
|
|
+ - "443:443"
|
|
|
+ - "8080:8080"
|
|
|
+ volumes:
|
|
|
+ - "./letsencrypt:/letsencrypt"
|
|
|
+ - "/var/run/docker.sock:/var/run/docker.sock"
|
|
|
+ depends_on:
|
|
|
+ - gogs
|
|
|
+ - nxtcld
|
|
|
+ - httpd
|
|
|
+
|
|
|
+ gogs:
|
|
|
+ image: "gogs/gogs:0.13"
|
|
|
+ container_name: "gogs"
|
|
|
+ privileged: true
|
|
|
+ restart: "unless-stopped"
|
|
|
+ labels:
|
|
|
+ - "traefik.enable=true"
|
|
|
+ - "traefik.http.routers.gogs.entrypoints=websecure"
|
|
|
+ - "traefik.http.routers.gogs.rule=Host(`gogs.njord.dynv6.net`)"
|
|
|
+ - "traefik.http.routers.gogs.tls.certresolver=njordresolver"
|
|
|
+ - "traefik.http.routers.gogs.tls=true"
|
|
|
+ - "traefik.http.services.gogs.loadbalancer.server.port=3000"
|
|
|
+ ports:
|
|
|
+ - "881:3000"
|
|
|
+ volumes:
|
|
|
+ - "./gogs/data:/data"
|
|
|
+ environment:
|
|
|
+ - "DB_TYPE=sqlite3"
|
|
|
+
|
|
|
+
|
|
|
+ nxtcld_db:
|
|
|
+ image: "mariadb:latest"
|
|
|
+ container_name: "nxtcld_db"
|
|
|
+ command: [ "--transaction-isolation=READ-COMMITTED", "--binlog-format=ROW" ]
|
|
|
+ restart: "unless-stopped"
|
|
|
+ volumes:
|
|
|
+ - "./nxtcld/db:/var/lib/mysql"
|
|
|
+ environment:
|
|
|
+ - MYSQL_ROOT_PASSWORD=nextcloud_admin
|
|
|
+ - MYSQL_PASSWORD=nextcloud
|
|
|
+ - MYSQL_DATABASE=nextcloud
|
|
|
+ - MYSQL_USER=nextcloud
|
|
|
+
|
|
|
+ nxtcld:
|
|
|
+ image: "nextcloud:stable"
|
|
|
+ container_name: "nxtcld"
|
|
|
+ privileged: true
|
|
|
+ restart: "unless-stopped"
|
|
|
+ labels:
|
|
|
+ - "traefik.enable=true"
|
|
|
+ - "traefik.http.routers.nxtcld.entrypoints=websecure"
|
|
|
+ - "traefik.http.routers.nxtcld.rule=Host(`nxtcld.njord.dynv6.net`)"
|
|
|
+ - "traefik.http.routers.nxtcld.tls.certresolver=njordresolver"
|
|
|
+ - "traefik.http.routers.nxtcld.tls=true"
|
|
|
+ - "traefik.http.services.nxtcld.loadbalancer.server.port=80"
|
|
|
+ ports:
|
|
|
+ - "882:80"
|
|
|
+ links:
|
|
|
+ - "nxtcld_db"
|
|
|
+ volumes:
|
|
|
+ - "./nxtcld/data:/var/www/html"
|
|
|
+ environment:
|
|
|
+ - MYSQL_PASSWORD=nextcloud
|
|
|
+ - MYSQL_DATABASE=nextcloud
|
|
|
+ - MYSQL_USER=nextcloud
|
|
|
+ - MYSQL_HOST=nxtcld_db
|
|
|
+ depends_on:
|
|
|
+ - nxtcld_db
|
|
|
+
|
|
|
+ httpd:
|
|
|
+ image: "httpd:2.4.57"
|
|
|
+ container_name: "httpd"
|
|
|
+ restart: "unless-stopped"
|
|
|
+ labels:
|
|
|
+ - "traefik.enable=true"
|
|
|
+ - "traefik.http.routers.httpd.entrypoints=websecure"
|
|
|
+ - "traefik.http.routers.httpd.rule=Host(`progisart.njord.dynv6.net`)"
|
|
|
+ - "traefik.http.routers.httpd.tls.certresolver=njordresolver"
|
|
|
+ - "traefik.http.routers.httpd.tls=true"
|
|
|
+ - "traefik.http.services.httpd.loadbalancer.server.port=80"
|
|
|
+ ports:
|
|
|
+ - "883:80"
|
|
|
+ volumes:
|
|
|
+ - "./httpd/data:/usr/local/apache2/htdocs"
|
|
|
+
|