mirror of
https://github.com/ghndrx/docker-compose.git
synced 2026-02-10 06:45:14 +00:00
-refactor file names .yml
-update gitignore for all .env -segment docker-compose.ymls in folders for each app instead of one mega .yml
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,3 +1 @@
|
|||||||
web-apps/docker-env.env
|
*.env
|
||||||
wordpress/docker-wordpress-env.env
|
|
||||||
secret-messages/docker-secrets-env.env
|
|
||||||
|
|||||||
46
ghost-blog/docker-compose.yml
Normal file
46
ghost-blog/docker-compose.yml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
# MySQL service for Ghost
|
||||||
|
mysql-ghost:
|
||||||
|
image: mysql:latest
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: ${GHOST_DB_ROOT_PASSWORD} # Set MySQL root password
|
||||||
|
MYSQL_DATABASE: ${GHOST_DB_NAME} # Set Ghost database name
|
||||||
|
MYSQL_USER: ${GHOST_DB_USER} # Set Ghost database user
|
||||||
|
MYSQL_PASSWORD: ${GHOST_DB_PASSWORD} # Set Ghost database password
|
||||||
|
volumes:
|
||||||
|
- /opt/storagemysql-ghost:/var/lib/mysql # Mount MySQL data directory
|
||||||
|
hostname: mysql-ghost # Set hostname for MySQL container
|
||||||
|
networks:
|
||||||
|
- traefik # Use external network named "traefik"
|
||||||
|
|
||||||
|
# Ghost service
|
||||||
|
ghost:
|
||||||
|
image: ghost:latest
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
url: ${GHOST_URL} # Set Ghost URL
|
||||||
|
database__client: mysql # Set Ghost database client
|
||||||
|
database__connection__host: mysql-ghost # Set MySQL host for Ghost
|
||||||
|
database__connection__user: ${GHOST_DB_USER} # Set Ghost database user
|
||||||
|
database__connection__password: ${GHOST_DB_PASSWORD} # Set Ghost database password
|
||||||
|
database__connection__database: ${GHOST_DB_NAME} # Set Ghost database name
|
||||||
|
volumes:
|
||||||
|
- opt/storageghost/content:/var/lib/ghost/content # Mount Ghost content directory
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true" # Enable Traefik for this service
|
||||||
|
- "traefik.http.routers.ghost.rule=Host(`${GHOST_DOMAIN}`)" # Route Ghost to specified host
|
||||||
|
- "traefik.http.routers.ghost.entrypoints=websecure" # Use HTTPS entrypoint for Ghost
|
||||||
|
- "traefik.http.routers.ghost.tls=true" # Enable TLS for Ghost
|
||||||
|
- "traefik.http.routers.ghost.tls.certresolver=myresolver" # Use Let's Encrypt resolver for Ghost
|
||||||
|
- "traefik.http.services.ghost.loadbalancer.server.port=2368" # Set load balancer port for Ghost
|
||||||
|
- "traefik.http.routers.ghost.middlewares=redirect-to-https@docker" # Use redirect middleware for Ghost
|
||||||
|
networks:
|
||||||
|
- traefik # Use external network named "traefik"
|
||||||
|
|
||||||
|
#This specifies external network traefik - docker network create traefik is required (managed outside of docker-compose)
|
||||||
|
networks:
|
||||||
|
traefik:
|
||||||
|
external: true # Use external network named "traefik"
|
||||||
7
ghost-blog/docker-env.env.example
Normal file
7
ghost-blog/docker-env.env.example
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# Ghost configuration
|
||||||
|
GHOST_DOMAIN=blog.example.com
|
||||||
|
GHOST_DB_ROOT_PASSWORD=ghost_mysql
|
||||||
|
GHOST_DB_NAME=ghost_db
|
||||||
|
GHOST_DB_USER=ghost_user
|
||||||
|
GHOST_DB_PASSWORD=ghost_mysql
|
||||||
|
GHOST_URL=https://blog.example.com
|
||||||
75
nextcloud/docker-compose.yml
Normal file
75
nextcloud/docker-compose.yml
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
# MySQL service for Nextcloud
|
||||||
|
mysql-nextcloud:
|
||||||
|
image: mysql:latest
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
MYSQL_DATABASE: ${NEXTCLOUD_DB_NAME} # Set Nextcloud database name
|
||||||
|
MYSQL_USER: ${NEXTCLOUD_DB_USER} # Set Nextcloud database user
|
||||||
|
MYSQL_ROOT_PASSWORD: ${NEXTCLOUD_DB_ROOT_PASSWORD} # Set MySQL root password
|
||||||
|
MYSQL_PASSWORD: ${NEXTCLOUD_DB_PASSWORD} # Set Nextcloud database password
|
||||||
|
hostname: mysql-nextcloud # Set hostname for MySQL container
|
||||||
|
volumes:
|
||||||
|
- /opt/storagemysql-nextcloud:/var/lib/mysql # Mount MySQL data directory
|
||||||
|
networks:
|
||||||
|
- traefik # Use external network named "traefik"
|
||||||
|
|
||||||
|
# Nextcloud service
|
||||||
|
nextcloud:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
image: nextcloud-full:latest
|
||||||
|
# image: nextcloud:latest
|
||||||
|
restart: always
|
||||||
|
hostname: nextcloud # Set hostname for Nextcloud container
|
||||||
|
environment:
|
||||||
|
VIRTUAL_HOST: ${NEXTCLOUD_HOST} # Set virtual host for Nextcloud
|
||||||
|
MYSQL_HOST: mysql-nextcloud # Set MySQL host for Nextcloud
|
||||||
|
MYSQL_DATABASE: ${NEXTCLOUD_DB_NAME} # Set Nextcloud database name
|
||||||
|
MYSQL_USER: ${NEXTCLOUD_DB_USER} # Set Nextcloud database user
|
||||||
|
MYSQL_PASSWORD: ${NEXTCLOUD_DB_PASSWORD} # Set Nextcloud database password
|
||||||
|
NEXTCLOUD_ADMIN_USER: ${NEXTCLOUD_ADMIN_USER} # Set Nextcloud admin user
|
||||||
|
NEXTCLOUD_ADMIN_PASSWORD: ${NEXTCLOUD_ADMIN_PASSWORD} # Set Nextcloud admin password
|
||||||
|
NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_HOST} # Set trusted domains for Nextcloud
|
||||||
|
volumes:
|
||||||
|
- /opt/storagenextcloud/data:/var/www/html # Mount Nextcloud data directory
|
||||||
|
- /opt/storagenextcloud/config:/var/www/html/config # Mount Nextcloud config directory
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true" # Enable Traefik for this service
|
||||||
|
- "traefik.http.routers.nextcloud.rule=Host(`${NEXTCLOUD_HOST}`)" # Route Nextcloud to specified host
|
||||||
|
- "traefik.http.routers.nextcloud.entrypoints=websecure" # Use HTTPS entrypoint for Nextcloud
|
||||||
|
- "traefik.http.routers.nextcloud.tls=true" # Enable TLS for Nextcloud
|
||||||
|
- "traefik.http.services.ghost.loadbalancer.server.port=80" # Set load balancer port for Nextcloud
|
||||||
|
- "traefik.http.routers.nextcloud.tls.certresolver=myresolver" # Use Let's Encrypt resolver for Nextcloud
|
||||||
|
- "traefik.http.routers.nextcloud.middlewares=nc-rep,nc-header" # Use redirect and header middlewares for Nextcloud
|
||||||
|
- "traefik.http.middlewares.nc-rep.redirectregex.regex=https://(.*)/.well-known/(card|cal)dav" # Set regex for redirect middleware
|
||||||
|
- "traefik.http.middlewares.nc-rep.redirectregex.replacement=https://$$1/remote.php/dav/" # Set replacement for redirect middleware
|
||||||
|
- "traefik.http.middlewares.nc-rep.redirectregex.permanent=true" # Set redirect as permanent
|
||||||
|
- "traefik.http.middlewares.nc-header.headers.frameDeny=true" # Set header for frame deny
|
||||||
|
- "traefik.http.middlewares.nc-header.headers.sslRedirect=true" # Set header for SSL redirect
|
||||||
|
- "traefik.http.middlewares.nc-header.headers.contentTypeNosniff=true" # Set header for content type nosniff
|
||||||
|
- "traefik.http.middlewares.nc-header.headers.stsIncludeSubdomains=true" # Set header for STS include subdomains
|
||||||
|
- "traefik.http.middlewares.nc-header.headers.stsPreload=true" # Set header for STS preload
|
||||||
|
- "traefik.http.middlewares.nc-header.headers.stsSeconds=31536000" # Set header for STS seconds
|
||||||
|
- "traefik.http.middlewares.nc-header.headers.referrerPolicy=same-origin" # Set header for referrer policy
|
||||||
|
- "traefik.http.middlewares.nc-header.headers.browserXssFilter=true" # Set header for browser XSS filter
|
||||||
|
- "traefik.http.middlewares.nc-header.headers.customRequestHeaders.X-Forwarded-Proto=https" # Set custom request header for X-Forwarded-Proto
|
||||||
|
- "traefik.http.middlewares.nc-header.headers.customRequestHeaders.X-Forwarded-Proto=websecure" # Set custom request header for X-Forwarded-Proto
|
||||||
|
- "traefik.http.middlewares.nc-header.headers.customResponseHeaders.X-Robots-Tag=noindex, nofollow" # Set custom response header for X-Robots-Tag
|
||||||
|
- "traefik.http.middlewares.nc-header.headers.customFrameOptionsValue=SAMEORIGIN" # Set custom frame options value
|
||||||
|
# - "traefik.http.routers.nextcloud.middlewares: 'nextcloud_redirectregex'"
|
||||||
|
# - "traefik.http.middlewares.nextcloud_redirectregex.redirectregex.permanent: true"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
- traefik # Use external network named "traefik"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
networks:
|
||||||
|
traefik:
|
||||||
|
external: true # Use external network named "traefik"
|
||||||
|
|
||||||
|
|
||||||
@@ -1,9 +1,5 @@
|
|||||||
<!-- This file contains environment variables for configuring Traefik, Nextcloud, and Ghost services. The variables include domain names, passwords, and database names. The commented out sections include configuration for Prometheus and Grafana services. -->
|
<!-- This file contains environment variables for configuring Traefik, Nextcloud, and Ghost services. The variables include domain names, passwords, and database names. The commented out sections include configuration for Prometheus and Grafana services. -->
|
||||||
# Traefik configuration
|
|
||||||
TRAEFIK_DOMAIN=example.com
|
|
||||||
TRAEFIK_CERT_RESOLVER=myresolver
|
|
||||||
TRAEFIK_HOST=example.com
|
|
||||||
ACME_EMAIL=admin@example.com
|
|
||||||
|
|
||||||
# Nextcloud configuration
|
# Nextcloud configuration
|
||||||
NEXTCLOUD_DOMAIN=cloud.example.com
|
NEXTCLOUD_DOMAIN=cloud.example.com
|
||||||
@@ -16,10 +12,3 @@ NEXTCLOUD_DB_ROOT_PASSWORD=nextcloud_mysql
|
|||||||
NEXTCLOUD_DB_PASSWORD=nextcloud_mysql
|
NEXTCLOUD_DB_PASSWORD=nextcloud_mysql
|
||||||
NEXTCLOUD_HOST=cloud.example.com
|
NEXTCLOUD_HOST=cloud.example.com
|
||||||
|
|
||||||
# Ghost configuration
|
|
||||||
GHOST_DOMAIN=blog.example.com
|
|
||||||
GHOST_DB_ROOT_PASSWORD=ghost_mysql
|
|
||||||
GHOST_DB_NAME=ghost_db
|
|
||||||
GHOST_DB_USER=ghost_user
|
|
||||||
GHOST_DB_PASSWORD=ghost_mysql
|
|
||||||
GHOST_URL=https://blog.example.com
|
|
||||||
40
traefik-proxy/docker-compose.yml
Normal file
40
traefik-proxy/docker-compose.yml
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
# Traefik service for reverse proxy and SSL termination
|
||||||
|
traefik:
|
||||||
|
image: traefik:v2.4
|
||||||
|
command:
|
||||||
|
- "--api.insecure=true" # Enable insecure API for Traefik dashboard
|
||||||
|
- "--providers.docker=true" # Enable Docker provider for Traefik
|
||||||
|
- "--providers.docker.exposedbydefault=false" # Do not expose containers by default
|
||||||
|
- "--entrypoints.web.address=:80" # HTTP entrypoint
|
||||||
|
- "--entrypoints.websecure.address=:443" # HTTPS entrypoint
|
||||||
|
- "--certificatesresolvers.myresolver.acme.email=${ACME_EMAIL}" # Email for Let's Encrypt registration
|
||||||
|
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" # Storage for Let's Encrypt certificates
|
||||||
|
- "--certificatesresolvers.myresolver.acme.httpchallenge=true" # Use HTTP challenge for Let's Encrypt
|
||||||
|
- "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web" # Use HTTP entrypoint for Let's Encrypt challenge
|
||||||
|
ports:
|
||||||
|
- "80:80" # Expose HTTP port
|
||||||
|
- "443:443" # Expose HTTPS port
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock:ro # Mount Docker socket for Traefik to access Docker API
|
||||||
|
- /opt/storagehndrx.co/traefik/letsencrypt:/letsencrypt # Mount Let's Encrypt certificates storage
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true" # Enable Traefik for this service
|
||||||
|
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" # Redirect HTTP to HTTPS
|
||||||
|
- "traefik.http.routers.traefik.rule=Host(`${TRAEFIK_HOST}`)" # Route Traefik dashboard to specified host
|
||||||
|
- "traefik.http.routers.traefik.entrypoints=websecure" # Use HTTPS entrypoint for Traefik dashboard
|
||||||
|
- "traefik.http.routers.traefik.tls=true" # Enable TLS for Traefik dashboard
|
||||||
|
- "traefik.http.routers.traefik.tls.certresolver=myresolver" # Use Let's Encrypt resolver for Traefik dashboard
|
||||||
|
- "traefik.http.routers.traefik.service=api@internal" # Use Traefik API for Traefik dashboard
|
||||||
|
- "traefik.http.routers.traefik.middlewares=redirect-to-https@docker" # Use redirect middleware for Traefik dashboard
|
||||||
|
networks:
|
||||||
|
- traefik # Use external network named "traefik"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#This specifies external network traefik - docker network create traefik is required (managed outside of docker-compose)
|
||||||
|
networks:
|
||||||
|
traefik:
|
||||||
|
external: true # Use external network named "traefik"
|
||||||
5
traefik-proxy/docker-env.env.example
Normal file
5
traefik-proxy/docker-env.env.example
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# Traefik configuration
|
||||||
|
TRAEFIK_DOMAIN=example.com
|
||||||
|
TRAEFIK_CERT_RESOLVER=myresolver
|
||||||
|
TRAEFIK_HOST=example.com
|
||||||
|
ACME_EMAIL=admin@example.com
|
||||||
@@ -1,276 +0,0 @@
|
|||||||
version: '3'
|
|
||||||
|
|
||||||
services:
|
|
||||||
# Traefik service for reverse proxy and SSL termination
|
|
||||||
traefik:
|
|
||||||
image: traefik:v2.4
|
|
||||||
command:
|
|
||||||
- "--api.insecure=true" # Enable insecure API for Traefik dashboard
|
|
||||||
- "--providers.docker=true" # Enable Docker provider for Traefik
|
|
||||||
- "--providers.docker.exposedbydefault=false" # Do not expose containers by default
|
|
||||||
- "--entrypoints.web.address=:80" # HTTP entrypoint
|
|
||||||
- "--entrypoints.websecure.address=:443" # HTTPS entrypoint
|
|
||||||
- "--certificatesresolvers.myresolver.acme.email=${ACME_EMAIL}" # Email for Let's Encrypt registration
|
|
||||||
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" # Storage for Let's Encrypt certificates
|
|
||||||
- "--certificatesresolvers.myresolver.acme.httpchallenge=true" # Use HTTP challenge for Let's Encrypt
|
|
||||||
- "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web" # Use HTTP entrypoint for Let's Encrypt challenge
|
|
||||||
ports:
|
|
||||||
- "80:80" # Expose HTTP port
|
|
||||||
- "443:443" # Expose HTTPS port
|
|
||||||
volumes:
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro # Mount Docker socket for Traefik to access Docker API
|
|
||||||
- /opt/storagehndrx.co/traefik/letsencrypt:/letsencrypt # Mount Let's Encrypt certificates storage
|
|
||||||
labels:
|
|
||||||
- "traefik.enable=true" # Enable Traefik for this service
|
|
||||||
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" # Redirect HTTP to HTTPS
|
|
||||||
- "traefik.http.routers.traefik.rule=Host(`${TRAEFIK_HOST}`)" # Route Traefik dashboard to specified host
|
|
||||||
- "traefik.http.routers.traefik.entrypoints=websecure" # Use HTTPS entrypoint for Traefik dashboard
|
|
||||||
- "traefik.http.routers.traefik.tls=true" # Enable TLS for Traefik dashboard
|
|
||||||
- "traefik.http.routers.traefik.tls.certresolver=myresolver" # Use Let's Encrypt resolver for Traefik dashboard
|
|
||||||
- "traefik.http.routers.traefik.service=api@internal" # Use Traefik API for Traefik dashboard
|
|
||||||
- "traefik.http.routers.traefik.middlewares=redirect-to-https@docker" # Use redirect middleware for Traefik dashboard
|
|
||||||
networks:
|
|
||||||
- traefik # Use external network named "traefik"
|
|
||||||
|
|
||||||
# MySQL service for Nextcloud
|
|
||||||
mysql-nextcloud:
|
|
||||||
image: mysql:latest
|
|
||||||
restart: always
|
|
||||||
environment:
|
|
||||||
MYSQL_DATABASE: ${NEXTCLOUD_DB_NAME} # Set Nextcloud database name
|
|
||||||
MYSQL_USER: ${NEXTCLOUD_DB_USER} # Set Nextcloud database user
|
|
||||||
MYSQL_ROOT_PASSWORD: ${NEXTCLOUD_DB_ROOT_PASSWORD} # Set MySQL root password
|
|
||||||
MYSQL_PASSWORD: ${NEXTCLOUD_DB_PASSWORD} # Set Nextcloud database password
|
|
||||||
hostname: mysql-nextcloud # Set hostname for MySQL container
|
|
||||||
volumes:
|
|
||||||
- /opt/storagemysql-nextcloud:/var/lib/mysql # Mount MySQL data directory
|
|
||||||
networks:
|
|
||||||
- traefik # Use external network named "traefik"
|
|
||||||
|
|
||||||
# Nextcloud service
|
|
||||||
nextcloud:
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: Dockerfile
|
|
||||||
image: nextcloud-full:latest
|
|
||||||
# image: nextcloud:latest
|
|
||||||
restart: always
|
|
||||||
hostname: nextcloud # Set hostname for Nextcloud container
|
|
||||||
environment:
|
|
||||||
VIRTUAL_HOST: ${NEXTCLOUD_HOST} # Set virtual host for Nextcloud
|
|
||||||
MYSQL_HOST: mysql-nextcloud # Set MySQL host for Nextcloud
|
|
||||||
MYSQL_DATABASE: ${NEXTCLOUD_DB_NAME} # Set Nextcloud database name
|
|
||||||
MYSQL_USER: ${NEXTCLOUD_DB_USER} # Set Nextcloud database user
|
|
||||||
MYSQL_PASSWORD: ${NEXTCLOUD_DB_PASSWORD} # Set Nextcloud database password
|
|
||||||
NEXTCLOUD_ADMIN_USER: ${NEXTCLOUD_ADMIN_USER} # Set Nextcloud admin user
|
|
||||||
NEXTCLOUD_ADMIN_PASSWORD: ${NEXTCLOUD_ADMIN_PASSWORD} # Set Nextcloud admin password
|
|
||||||
NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_HOST} # Set trusted domains for Nextcloud
|
|
||||||
volumes:
|
|
||||||
- /opt/storagenextcloud/data:/var/www/html # Mount Nextcloud data directory
|
|
||||||
- /opt/storagenextcloud/config:/var/www/html/config # Mount Nextcloud config directory
|
|
||||||
labels:
|
|
||||||
- "traefik.enable=true" # Enable Traefik for this service
|
|
||||||
- "traefik.http.routers.nextcloud.rule=Host(`${NEXTCLOUD_HOST}`)" # Route Nextcloud to specified host
|
|
||||||
- "traefik.http.routers.nextcloud.entrypoints=websecure" # Use HTTPS entrypoint for Nextcloud
|
|
||||||
- "traefik.http.routers.nextcloud.tls=true" # Enable TLS for Nextcloud
|
|
||||||
- "traefik.http.services.ghost.loadbalancer.server.port=80" # Set load balancer port for Nextcloud
|
|
||||||
- "traefik.http.routers.nextcloud.tls.certresolver=myresolver" # Use Let's Encrypt resolver for Nextcloud
|
|
||||||
- "traefik.http.routers.nextcloud.middlewares=nc-rep,nc-header" # Use redirect and header middlewares for Nextcloud
|
|
||||||
- "traefik.http.middlewares.nc-rep.redirectregex.regex=https://(.*)/.well-known/(card|cal)dav" # Set regex for redirect middleware
|
|
||||||
- "traefik.http.middlewares.nc-rep.redirectregex.replacement=https://$$1/remote.php/dav/" # Set replacement for redirect middleware
|
|
||||||
- "traefik.http.middlewares.nc-rep.redirectregex.permanent=true" # Set redirect as permanent
|
|
||||||
- "traefik.http.middlewares.nc-header.headers.frameDeny=true" # Set header for frame deny
|
|
||||||
- "traefik.http.middlewares.nc-header.headers.sslRedirect=true" # Set header for SSL redirect
|
|
||||||
- "traefik.http.middlewares.nc-header.headers.contentTypeNosniff=true" # Set header for content type nosniff
|
|
||||||
- "traefik.http.middlewares.nc-header.headers.stsIncludeSubdomains=true" # Set header for STS include subdomains
|
|
||||||
- "traefik.http.middlewares.nc-header.headers.stsPreload=true" # Set header for STS preload
|
|
||||||
- "traefik.http.middlewares.nc-header.headers.stsSeconds=31536000" # Set header for STS seconds
|
|
||||||
- "traefik.http.middlewares.nc-header.headers.referrerPolicy=same-origin" # Set header for referrer policy
|
|
||||||
- "traefik.http.middlewares.nc-header.headers.browserXssFilter=true" # Set header for browser XSS filter
|
|
||||||
- "traefik.http.middlewares.nc-header.headers.customRequestHeaders.X-Forwarded-Proto=https" # Set custom request header for X-Forwarded-Proto
|
|
||||||
- "traefik.http.middlewares.nc-header.headers.customRequestHeaders.X-Forwarded-Proto=websecure" # Set custom request header for X-Forwarded-Proto
|
|
||||||
- "traefik.http.middlewares.nc-header.headers.customResponseHeaders.X-Robots-Tag=noindex, nofollow" # Set custom response header for X-Robots-Tag
|
|
||||||
- "traefik.http.middlewares.nc-header.headers.customFrameOptionsValue=SAMEORIGIN" # Set custom frame options value
|
|
||||||
# - "traefik.http.routers.nextcloud.middlewares: 'nextcloud_redirectregex'"
|
|
||||||
# - "traefik.http.middlewares.nextcloud_redirectregex.redirectregex.permanent: true"
|
|
||||||
|
|
||||||
networks:
|
|
||||||
- traefik # Use external network named "traefik"
|
|
||||||
|
|
||||||
# # MySQL service for Ghost
|
|
||||||
# mysql-ghost:
|
|
||||||
# image: mysql:latest
|
|
||||||
# restart: always
|
|
||||||
# environment:
|
|
||||||
# MYSQL_ROOT_PASSWORD: ${GHOST_DB_ROOT_PASSWORD} # Set MySQL root password
|
|
||||||
# MYSQL_DATABASE: ${GHOST_DB_NAME} # Set Ghost database name
|
|
||||||
# MYSQL_USER: ${GHOST_DB_USER} # Set Ghost database user
|
|
||||||
# MYSQL_PASSWORD: ${GHOST_DB_PASSWORD} # Set Ghost database password
|
|
||||||
# volumes:
|
|
||||||
# - /opt/storagemysql-ghost:/var/lib/mysql # Mount MySQL data directory
|
|
||||||
# hostname: mysql-ghost # Set hostname for MySQL container
|
|
||||||
# networks:
|
|
||||||
# - traefik # Use external network named "traefik"
|
|
||||||
|
|
||||||
# # Ghost service
|
|
||||||
# ghost:
|
|
||||||
# image: ghost:latest
|
|
||||||
# restart: always
|
|
||||||
# environment:
|
|
||||||
# url: ${GHOST_URL} # Set Ghost URL
|
|
||||||
# database__client: mysql # Set Ghost database client
|
|
||||||
# database__connection__host: mysql-ghost # Set MySQL host for Ghost
|
|
||||||
# database__connection__user: ${GHOST_DB_USER} # Set Ghost database user
|
|
||||||
# database__connection__password: ${GHOST_DB_PASSWORD} # Set Ghost database password
|
|
||||||
# database__connection__database: ${GHOST_DB_NAME} # Set Ghost database name
|
|
||||||
# volumes:
|
|
||||||
# - opt/storageghost/content:/var/lib/ghost/content # Mount Ghost content directory
|
|
||||||
# labels:
|
|
||||||
# - "traefik.enable=true" # Enable Traefik for this service
|
|
||||||
# - "traefik.http.routers.ghost.rule=Host(`${GHOST_DOMAIN}`)" # Route Ghost to specified host
|
|
||||||
# - "traefik.http.routers.ghost.entrypoints=websecure" # Use HTTPS entrypoint for Ghost
|
|
||||||
# - "traefik.http.routers.ghost.tls=true" # Enable TLS for Ghost
|
|
||||||
# - "traefik.http.routers.ghost.tls.certresolver=myresolver" # Use Let's Encrypt resolver for Ghost
|
|
||||||
# - "traefik.http.services.ghost.loadbalancer.server.port=2368" # Set load balancer port for Ghost
|
|
||||||
# - "traefik.http.routers.ghost.middlewares=redirect-to-https@docker" # Use redirect middleware for Ghost
|
|
||||||
# networks:
|
|
||||||
# - traefik # Use external network named "traefik"
|
|
||||||
|
|
||||||
|
|
||||||
networks:
|
|
||||||
traefik:
|
|
||||||
external: true # Use external network named "traefik"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#Same shit as above basically ^ working is above.
|
|
||||||
# version: '3'
|
|
||||||
|
|
||||||
# services:
|
|
||||||
# traefik:
|
|
||||||
# image: traefik:v2.4
|
|
||||||
# command:
|
|
||||||
# - "--api.insecure=true"
|
|
||||||
# - "--providers.docker=true"
|
|
||||||
# - "--providers.docker.exposedbydefault=false"
|
|
||||||
# - "--entrypoints.web.address=:80"
|
|
||||||
# - "--entrypoints.websecure.address=:443"
|
|
||||||
# - "--certificatesresolvers.myresolver.acme.email=${ACME_EMAIL}"
|
|
||||||
# - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
|
|
||||||
# - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
|
|
||||||
# - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
|
|
||||||
# ports:
|
|
||||||
# - "80:80"
|
|
||||||
# - "443:443"
|
|
||||||
# volumes:
|
|
||||||
# - /var/run/docker.sock:/var/run/docker.sock:ro
|
|
||||||
# - opt/storagehndrx.co/traefik/letsencrypt:/letsencrypt
|
|
||||||
# labels:
|
|
||||||
# - "traefik.enable=true"
|
|
||||||
# - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
|
|
||||||
# - "traefik.http.routers.traefik.rule=Host(`${TRAEFIK_HOST}`)"
|
|
||||||
# - "traefik.http.routers.traefik.entrypoints=websecure"
|
|
||||||
# - "traefik.http.routers.traefik.tls=true"
|
|
||||||
# - "traefik.http.routers.traefik.tls.certresolver=myresolver"
|
|
||||||
# - "traefik.http.routers.traefik.service=api@internal"
|
|
||||||
# - "traefik.http.routers.traefik.middlewares=redirect-to-https@docker"
|
|
||||||
# networks:
|
|
||||||
# - traefik
|
|
||||||
|
|
||||||
# mysql-nextcloud:
|
|
||||||
# image: mysql:latest
|
|
||||||
# restart: always
|
|
||||||
# environment:
|
|
||||||
# MYSQL_DATABASE: ${NEXTCLOUD_DB_NAME}
|
|
||||||
# MYSQL_USER: ${NEXTCLOUD_DB_USER}
|
|
||||||
# MYSQL_ROOT_PASSWORD: ${NEXTCLOUD_DB_ROOT_PASSWORD}
|
|
||||||
# MYSQL_PASSWORD: ${NEXTCLOUD_DB_PASSWORD}
|
|
||||||
# hostname: mysql-nextcloud
|
|
||||||
# volumes:
|
|
||||||
# - opt/storagemysql-nextcloud:/var/lib/mysql
|
|
||||||
# networks:
|
|
||||||
# - traefik
|
|
||||||
|
|
||||||
# nextcloud:
|
|
||||||
# image: nextcloud:latest
|
|
||||||
# restart: always
|
|
||||||
# hostname: nextcloud
|
|
||||||
# environment:
|
|
||||||
# VIRTUAL_HOST: ${NEXTCLOUD_HOST}
|
|
||||||
# MYSQL_HOST: mysql-nextcloud
|
|
||||||
# MYSQL_DATABASE: ${NEXTCLOUD_DB_NAME}
|
|
||||||
# MYSQL_USER: ${NEXTCLOUD_DB_USER}
|
|
||||||
# MYSQL_PASSWORD: ${NEXTCLOUD_DB_PASSWORD}
|
|
||||||
# NEXTCLOUD_ADMIN_USER: ${NEXTCLOUD_ADMIN_USER}
|
|
||||||
# NEXTCLOUD_ADMIN_PASSWORD: ${NEXTCLOUD_ADMIN_PASSWORD}
|
|
||||||
# NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_HOST}
|
|
||||||
# volumes:
|
|
||||||
# - opt/storagenextcloud/data:/var/www/html
|
|
||||||
# - /opt/storagenextcloud/config:/var/www/html/config
|
|
||||||
# labels:
|
|
||||||
# - "traefik.enable=true"
|
|
||||||
# - "traefik.http.routers.nextcloud.rule=Host(`${NEXTCLOUD_HOST}`)"
|
|
||||||
# - "traefik.http.routers.nextcloud.entrypoints=websecure"
|
|
||||||
# - "traefik.http.routers.nextcloud.tls=true"
|
|
||||||
# - "traefik.http.services.ghost.loadbalancer.server.port=80"
|
|
||||||
# - "traefik.http.routers.nextcloud.tls.certresolver=myresolver"
|
|
||||||
# - "traefik.http.routers.nextcloud.middlewares=nc-rep,nc-header"
|
|
||||||
# - "traefik.http.middlewares.nc-rep.redirectregex.regex=https://(.*)/.well-known/(card|cal)dav"
|
|
||||||
# - "traefik.http.middlewares.nc-rep.redirectregex.replacement=https://$$1/remote.php/dav/"
|
|
||||||
# - "traefik.http.middlewares.nc-rep.redirectregex.permanent=true"
|
|
||||||
# - "traefik.http.middlewares.nc-header.headers.frameDeny=true"
|
|
||||||
# - "traefik.http.middlewares.nc-header.headers.sslRedirect=true"
|
|
||||||
# - "traefik.http.middlewares.nc-header.headers.contentTypeNosniff=true"
|
|
||||||
# - "traefik.http.middlewares.nc-header.headers.stsIncludeSubdomains=true"
|
|
||||||
# - "traefik.http.middlewares.nc-header.headers.stsPreload=true"
|
|
||||||
# - "traefik.http.middlewares.nc-header.headers.stsSeconds=31536000"
|
|
||||||
# - "traefik.http.middlewares.nc-header.headers.referrerPolicy=same-origin"
|
|
||||||
# - "traefik.http.middlewares.nc-header.headers.browserXssFilter=true"
|
|
||||||
# - "traefik.http.middlewares.nc-header.headers.customRequestHeaders.X-Forwarded-Proto=https"
|
|
||||||
# - "traefik.http.middlewares.nc-header.headers.customRequestHeaders.X-Forwarded-Proto=websecure"
|
|
||||||
# - "traefik.http.middlewares.nc-header.headers.customResponseHeaders.X-Robots-Tag=none"
|
|
||||||
# - "traefik.http.middlewares.nc-header.headers.customFrameOptionsValue=SAMEORIGIN"
|
|
||||||
# networks:
|
|
||||||
# - traefik
|
|
||||||
|
|
||||||
# mysql-ghost:
|
|
||||||
# image: mysql:latest
|
|
||||||
# restart: always
|
|
||||||
# environment:
|
|
||||||
# MYSQL_ROOT_PASSWORD: ${GHOST_DB_ROOT_PASSWORD}
|
|
||||||
# MYSQL_DATABASE: ${GHOST_DB_NAME}
|
|
||||||
# MYSQL_USER: ${GHOST_DB_USER}
|
|
||||||
# MYSQL_PASSWORD: ${GHOST_DB_PASSWORD}
|
|
||||||
# volumes:
|
|
||||||
# - /opt/storagemysql-ghost:/var/lib/mysql
|
|
||||||
# hostname: mysql-ghost
|
|
||||||
# networks:
|
|
||||||
# - traefik
|
|
||||||
|
|
||||||
# ghost:
|
|
||||||
# image: ghost:latest
|
|
||||||
# restart: always
|
|
||||||
# environment:
|
|
||||||
# url: ${GHOST_URL}
|
|
||||||
# database__client: mysql
|
|
||||||
# database__connection__host: mysql-ghost
|
|
||||||
# database__connection__user: ${GHOST_DB_USER}
|
|
||||||
# database__connection__password: ${GHOST_DB_PASSWORD}
|
|
||||||
# database__connection__database: ${GHOST_DB_NAME}
|
|
||||||
# volumes:
|
|
||||||
# - /opt/storageghost/content:/var/lib/ghost/content
|
|
||||||
# labels:
|
|
||||||
# - "traefik.enable=true"
|
|
||||||
# - "traefik.http.routers.ghost.rule=Host(`${GHOST_DOMAIN}`)"
|
|
||||||
# - "traefik.http.routers.ghost.entrypoints=websecure"
|
|
||||||
# - "traefik.http.routers.ghost.tls=true"
|
|
||||||
# - "traefik.http.routers.ghost.tls.certresolver=myresolver"
|
|
||||||
# - "traefik.http.services.ghost.loadbalancer.server.port=2368"
|
|
||||||
# - "traefik.http.routers.ghost.middlewares=redirect-to-https@docker"
|
|
||||||
# networks:
|
|
||||||
# - traefik
|
|
||||||
|
|
||||||
|
|
||||||
# networks:
|
|
||||||
# traefik:
|
|
||||||
# external: true
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
FROM nextcloud:apache
|
|
||||||
|
|
||||||
RUN set -ex; \
|
|
||||||
\
|
|
||||||
apt-get update; \
|
|
||||||
apt-get install -y --no-install-recommends \
|
|
||||||
ffmpeg \
|
|
||||||
ghostscript \
|
|
||||||
libmagickcore-6.q16-6-extra \
|
|
||||||
procps \
|
|
||||||
smbclient \
|
|
||||||
supervisor \
|
|
||||||
# libreoffice \
|
|
||||||
; \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
RUN set -ex; \
|
|
||||||
\
|
|
||||||
savedAptMark="$(apt-mark showmanual)"; \
|
|
||||||
\
|
|
||||||
apt-get update; \
|
|
||||||
apt-get install -y --no-install-recommends \
|
|
||||||
libbz2-dev \
|
|
||||||
libc-client-dev \
|
|
||||||
libkrb5-dev \
|
|
||||||
libsmbclient-dev \
|
|
||||||
; \
|
|
||||||
\
|
|
||||||
docker-php-ext-configure imap --with-kerberos --with-imap-ssl; \
|
|
||||||
docker-php-ext-install \
|
|
||||||
bz2 \
|
|
||||||
imap \
|
|
||||||
; \
|
|
||||||
pecl install smbclient; \
|
|
||||||
docker-php-ext-enable smbclient; \
|
|
||||||
\
|
|
||||||
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
|
|
||||||
apt-mark auto '.*' > /dev/null; \
|
|
||||||
apt-mark manual $savedAptMark; \
|
|
||||||
ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \
|
|
||||||
| awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); print so }' \
|
|
||||||
| sort -u \
|
|
||||||
| xargs -r dpkg-query --search \
|
|
||||||
| cut -d: -f1 \
|
|
||||||
| sort -u \
|
|
||||||
| xargs -rt apt-mark manual; \
|
|
||||||
\
|
|
||||||
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
RUN mkdir -p \
|
|
||||||
/var/log/supervisord \
|
|
||||||
/var/run/supervisord \
|
|
||||||
;
|
|
||||||
|
|
||||||
COPY supervisord.conf /
|
|
||||||
|
|
||||||
ENV NEXTCLOUD_UPDATE=1
|
|
||||||
|
|
||||||
CMD ["/usr/bin/supervisord", "-c", "/supervisord.conf"]
|
|
||||||
Reference in New Issue
Block a user