Compare commits

...

29 commits

Author SHA1 Message Date
Yax
f10a3b5012 make deployment targets configurable 2026-03-20 20:04:50 +01:00
Yax
b1acba76f1 Add maintenant base url 2026-03-18 19:40:16 +01:00
Yax
536d3964b9 Add maintenant 2026-03-18 19:02:27 +01:00
Yax
f51edb28af Keep port 8888 to fix heath check 2026-02-07 22:43:50 +01:00
Yax
a3c40dd7ec Common Spec compliance 2026-01-04 18:45:26 +01:00
Yax
5dbcb524d3 Common Spec compliance 2026-01-04 18:42:44 +01:00
Yax
88d49c347c Port 8080 2026-01-04 18:27:36 +01:00
Yax
b977a61d38 fix name 2026-01-04 18:18:39 +01:00
Yax
00bb0e7b51 Update it-tools 2026-01-04 18:13:02 +01:00
Yax
20a0767645 Remove gokapi 2025-12-19 05:52:31 +01:00
Yax
6364070e9f Ad gokapi 2025-12-18 16:22:59 +01:00
Yax
6dc04e8bd6 Remove TinyAuth 2025-12-14 19:15:28 +01:00
Yax
fa935af58d Revert "Add tinyauth"
This reverts commit ba2343e658.
2025-12-14 19:14:57 +01:00
Yax
99221fbd5b Fix port 2025-12-10 18:59:37 +01:00
Yax
ba2343e658 Add tinyauth 2025-12-10 18:18:07 +01:00
Yax
7c67d8f093 Add bichon 2025-12-07 12:32:28 +01:00
Yax
4947d836ac fix param 2025-10-27 21:58:00 +01:00
Yax
1801fc624c Add 'It-Tools' 2025-10-04 19:43:54 +02:00
Yax
88d2ebec5f Add ntfy service 2025-09-14 14:27:42 +02:00
Yax
018e3e2afa Add Makefile to ease local testing 2025-04-02 13:27:53 +02:00
Yax
6e78d7ee0c Update images 2025-03-28 19:02:11 +01:00
Yax
51acd19b62 Git ignore 2024-12-26 17:27:44 +01:00
Yax
0498f7c7dc Export Gitea SSH default port 2024-12-15 19:16:55 +01:00
Yax
689d58c207 Don't expose stacosys container 2024-12-14 21:13:39 +01:00
Yax
32f8bb9074 update selfoss container 2024-12-14 21:03:12 +01:00
Yax
0ccda8a71b Refresh selfoss image 2024-12-14 20:53:06 +01:00
Yax
0866001604 Update image name 2024-12-09 17:18:52 +01:00
Yax
09fc19fb1f Update doc 2024-12-08 19:11:56 +01:00
Yax
583ec495b1 Customize to setup a VM 2024-12-08 19:09:45 +01:00
50 changed files with 444 additions and 6689 deletions

View file

@ -1,46 +1,43 @@
# ssl # deployment
LETSENCRYPT_EMAIL=root@localhost.localdomain DEPLOY=01-blog
LETSENCRYPT_DNSPROVIDER_TOKEN= #DEPLOY=00-monitor 01-blog 02-selfoss 03-shaarli 04-gitea 05-wallabag 06-heimdall 07-ntfy 08-ittools 09-bichon
#DEPLOY=07-seafile 08-immich 09-navidrome
# off sites # general
HOST_BAIKAL=
HOST_MAIL=
HOST_NETDATA=
# sites
DOMAIN=traefik.me
HOST_BLOG=blog
HOST_DOKUWIKI=dokuwiki
HOST_PIGALLERY=pigallery
HOST_PHOTOVIEW=photoview
HOST_PHOTONIX=photonix
HOST_LYCHEE=lychee
HOST_SEAFILE=seafile
HOST_SELFOSS=selfoss
HOST_SHAARLI=shaarli
HOST_GITEA=gitea
HOST_WALLABAG=wallabag
HOST_WWW=www
FQDN_DASHBOARD=dashboard.traefik.me
PATH_PORTAINER=/portainer
PATH_GLANCES=/glances
PATH_DELUGE=/deluge
# other
TZ=Europe/Paris
BASIC_AUTH=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/
ROOT_INSTALL=/srv ROOT_INSTALL=/srv
TZ=Europe/Paris
DOMAIN=domain.com
PUID=1000 PUID=1000
PGID=1000 PGID=1000
# torrent # wallabag
DELUGE_TORRENT_PORT=6881 WALLABAG_URL=http://localhost
DOWNLOAD_HTTP_PORT=8000
# ntfy
NTFY_URL=http://localhost:8017
NTFY_BEHIND_PROXY=true
# maintenant
MAINTENANT_URL=http://localhost
# seafile # seafile
SEAFILE_ADMIN_EMAIL=root@localdomain HOST_SEAFILE=seafile
SEAFILE_ADMIN_PASSWORD=abc123456 SEAFILE_ADMIN_EMAIL=admin@domain.com
SEAFILE_DB_ROOT_PASSWORD=rootpassword SEAFILE_ADMIN_PASSWORD=adminpassword
SEAFILE_DB_ROOT_PASSWORD=dbpassword
SEAFILE_DB_USER=seafile
SEAFILE_DB_PASSWORD=seafile
SEAFILE_JWT_PRIVATE_KEY=GyNUgwdu9chG4lQIvn7sy0BJz4HHNeosXJ1cms6k
SEAFILE_PHOTOS=/srv/data/seafile
# mapbox.com # immich
MAPBOX_TOKEN= IMMICH_VERSION=release
UPLOAD_LOCATION=./library
DB_DATA_LOCATION=./postgres
DB_PASSWORD=postgres
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
# navidrome
NAVIDROME_URL=https://music.domain.com
SEAFILE_ZIC=/srv/data/seafile

4
.gitignore vendored
View file

@ -1,2 +1,4 @@
.env .env
source.sh selfhosting.sublime-project
selfhosting.sublime-workspace
data/

View file

@ -0,0 +1,18 @@
services:
maintenant:
container_name: maintenant
image: ghcr.io/kolapsis/maintenant:latest
ports:
- "8000:8000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /proc:/host/proc:ro
- maintenant-data:/data
environment:
MAINTENANT_ADDR: "0.0.0.0:8000"
MAINTENANT_DB: "/data/maintenant.db"
MAINTENANT_BASE_URL: "${MAINTENANT_URL}"
restart: unless-stopped
volumes:
maintenant-data:

18
01-blog/docker-compose.blog.yml Executable file
View file

@ -0,0 +1,18 @@
name: 01-blog
services:
stacosys:
container_name: stacosys
image: source.madyanne.fr/yax/stacosys
volumes:
- ${ROOT_INSTALL}/data/stacosys:/config
restart: unless-stopped
expose:
- 8100
blog:
container_name: blog
image: source.madyanne.fr/yax/blog
depends_on:
- stacosys
restart: unless-stopped
ports:
- 8011:80

View file

@ -0,0 +1,12 @@
services:
selfoss:
container_name: selfoss
image: rsprta/selfoss
volumes:
- ${ROOT_INSTALL}/data/selfoss:/selfoss/data
restart: unless-stopped
ports:
- "8888:8888"
environment:
- SELFOSS_CONFIG_FILE=/selfoss/data/config.ini

View file

@ -0,0 +1,13 @@
services:
shaarli:
container_name: shaarli
image: shaarli/shaarli
volumes:
- shaarli-cache:/var/www/shaarli/cache
- ${ROOT_INSTALL}/data/shaarli:/var/www/shaarli/data
restart: unless-stopped
ports:
- "8013:80"
volumes:
shaarli-cache:

View file

@ -0,0 +1,18 @@
services:
gitea:
container_name: gitea
image: gitea/gitea:1.23.6-rootless
restart: unless-stopped
volumes:
- gitea_data:/var/lib/gitea
- gitea_config:/etc/gitea
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "8014:3000"
- "2222:2222"
volumes:
gitea_data:
gitea_config:

View file

@ -0,0 +1,17 @@
services:
wallabag:
container_name: wallabag
image: wallabag/wallabag
ports:
- "8015:80"
volumes:
- wallabag_data:/var/www/wallabag/data:rw
- wallabag_images:/var/www/wallabag/web/assets/images:rw
environment:
- SYMFONY__ENV__DOMAIN_NAME="${WALLABAG_URL}"
- SYMFONY__ENV__FOSUSER_REGISTRATION=false
volumes:
wallabag_data:
wallabag_images:

View file

@ -0,0 +1,13 @@
services:
heimdall:
image: lscr.io/linuxserver/heimdall
container_name: heimdall
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- ${ROOT_INSTALL}/data/heimdall:/config
ports:
- "8016:80"
restart: unless-stopped

View file

@ -0,0 +1,32 @@
name: 07-ntfy
services:
ntfy:
container_name: ntfy
image: binwiederhier/ntfy
command:
- serve
volumes:
- ntfy-data:/var/cache/ntfy
environment:
- TZ=${TZ}
- NTFY_BASE_URL=${NTFY_URL}
- NTFY_CACHE_FILE=/var/cache/ntfy/cache.db
- NTFY_AUTH_FILE=/var/cache/ntfy/auth.db
- NTFY_ATTACHMENT_CACHE_DIR=/var/cache/ntfy/attachments
- NTFY_AUTH_DEFAULT_ACCESS=deny-all
- NTFY_BEHIND_PROXY=${NTFY_BEHIND_PROXY}
- NTFY_ENABLE_LOGIN=true
ports:
- 8017:80
healthcheck:
test:
- CMD-SHELL
- wget -q --tries=1 http://ntfy:80/v1/health -O - | grep -Eo
'"healthy"\s*:\s*true' || exit 1
interval: 60s
timeout: 10s
retries: 3
start_period: 40s
restart: unless-stopped
volumes:
ntfy-data:

View file

@ -0,0 +1,77 @@
services:
db:
image: ${SEAFILE_DB_IMAGE:-mariadb:10.11}
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=${SEAFILE_DB_ROOT_PASSWORD}
- MYSQL_LOG_CONSOLE=true
- MARIADB_AUTO_UPGRADE=1
volumes:
- seafile_db:/var/lib/mysql
healthcheck:
test:
[
"CMD",
"/usr/local/bin/healthcheck.sh",
"--connect",
"--mariadbupgrade",
"--innodb_initialized",
]
interval: 20s
start_period: 30s
timeout: 5s
retries: 10
memcached:
image: memcached:1.6.29
container_name: seafile-memcached
entrypoint: memcached -m 256
seafile:
image: seafileltd/seafile-mc:12.0-latest
container_name: seafile
ports:
- "8017:80"
- "8080:8080"
environment:
- DB_HOST=db
- DB_PORT=3306
- DB_USER=${SEAFILE_DB_USER}
- DB_ROOT_PASSWD=${SEAFILE_DB_ROOT_PASSWORD}
- DB_PASSWORD=${SEAFILE_DB_PASSWORD}
- SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db
- SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db
- SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db
- TIME_ZONE=${TZ}
- INIT_SEAFILE_ADMIN_EMAIL=${SEAFILE_ADMIN_EMAIL}
- INIT_SEAFILE_ADMIN_PASSWORD=${SEAFILE_ADMIN_PASSWORD}
- SEAFILE_SERVER_HOSTNAME=${HOST_SEAFILE}.${DOMAIN}
- SEAFILE_SERVER_PROTOCOL=https
- SITE_ROOT=${SITE_ROOT:-/}
- NON_ROOT=${NON_ROOT:-false}
- JWT_PRIVATE_KEY=${SEAFILE_JWT_PRIVATE_KEY}
- SEAFILE_LOG_TO_STDOUT=${SEAFILE_LOG_TO_STDOUT:-false}
- ENABLE_SEADOC=${ENABLE_SEADOC:-true}
- SEADOC_SERVER_URL=https://${HOST_SEAFILE}.${DOMAIN}/sdoc-server
volumes:
- seafile_data:/shared:rw
- type: bind
source: ${ROOT_INSTALL}/data/seafile
target: /seafile-fuse
bind:
propagation: rshared
privileged: true
cap_add:
- SYS_ADMIN
labels:
caddy: https://${HOST_SEAFILE}.${DOMAIN}
caddy.reverse_proxy: "{{upstreams 80}}"
depends_on:
db:
condition: service_healthy
memcached:
condition: service_started
volumes:
seafile_db:
seafile_data:

View file

@ -0,0 +1,83 @@
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# extends:
# file: hwaccel.transcoding.yml
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
volumes:
# Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
- type: bind
source: ${SEAFILE_PHOTOS}
target: /mnt/media/photos
read_only: true
bind:
propagation: rslave
privileged: true
cap_add:
- SYS_ADMIN
ports:
- '2283:2283'
depends_on:
- redis
- database
restart: always
healthcheck:
disable: false
immich-machine-learning:
container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes:
- model-cache:/cache
restart: always
healthcheck:
disable: false
redis:
container_name: immich_redis
image: docker.io/redis:6.2-alpine@sha256:eaba718fecd1196d88533de7ba49bf903ad33664a92debb24660a922ecd9cac8
healthcheck:
test: redis-cli ping || exit 1
restart: always
database:
container_name: immich_postgres
image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
volumes:
# Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
healthcheck:
test: >-
pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1;
Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
--command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
echo "checksum failure count is $$Chksum";
[ "$$Chksum" = '0' ] || exit 1
interval: 5m
start_interval: 30s
start_period: 5m
command: >-
postgres
-c shared_preload_libraries=vectors.so
-c 'search_path="$$user", public, vectors'
-c logging_collector=on
-c max_wal_size=2GB
-c shared_buffers=512MB
-c wal_compression=on
restart: always
volumes:
model-cache:

View file

@ -0,0 +1,8 @@
name: 08-ittools
services:
it-tools:
container_name: it-tools
image: sharevb/it-tools:latest
ports:
- 8018:8080
restart: unless-stopped

View file

@ -0,0 +1,12 @@
services:
bichon:
container_name: bichon
image: 'rustmailer/bichon:latest'
environment:
- BICHON_LOG_LEVEL=INFO
- BICHON_ROOT_DIR=/data
ports:
- '8019:15630'
restart: unless-stopped
volumes:
- ${ROOT_INSTALL}/data/bichon:/data

View file

@ -0,0 +1,24 @@
services:
navidrome:
container_name: navidrome
image: deluan/navidrome:latest
ports:
- "4533:4533"
restart: unless-stopped
environment:
ND_LOGLEVEL: info
ND_BASEURL: ${NAVIDROME_URL}
volumes:
- navidrome-data:/data
- type: bind
source: ${SEAFILE_ZIC}
target: /music
read_only: true
bind:
propagation: rslave
privileged: true
cap_add:
- SYS_ADMIN
volumes:
navidrome-data:

10
Makefile Normal file
View file

@ -0,0 +1,10 @@
# Makefile
blog:
docker-compose --env-file vm1.env -f 01-blog/docker-compose.blog.yml up
selfoss:
docker-compose --env-file vm1.env -f 02-selfoss/docker-compose.selfoss.yml up
shaarli:
docker-compose --env-file vm1.env -f 03-selfoss/docker-compose.shaarli.yml up

View file

@ -1,23 +1,3 @@
# Hosting # Hosting
My server installation recipes (Inspired from https://github.com/tomMoulard/make-my-server) My server installation recipes (Inspired from https://github.com/tomMoulard/make-my-server)
Bash function to override docker-compose command and manage multiple docker-compose.yml files (non executable YAML files are ignored).
```bash
export DOCKER_COMPOSE_BIN='/usr/bin/docker compose'
docker-compose ()
{
$DOCKER_COMPOSE_BIN $(find -name 'docker-compose*.yml' -type f -perm -u+x -printf '%p\t%d\n' 2>/dev/null | sort -n -k2 | cut -f 1 | awk '{print "-f "$0}') $@
}
```
Compose files refer to [service profiles](https://docs.docker.com/compose/profiles/):
- disabled: set for services I don't use
- testing: enable SSL configuration relying on https://traefik.me for local testing
- production: enable domain configuration on deployment server
### Network diagram:
![network diag](__doc__/nwdiag.png)

View file

@ -1,114 +0,0 @@
nwdiag {
inet [shape = cloud];
inet -- router;
network dmz {
address = "10.254.x.x/24"
router;
traefik [address = "10.254.x.254"];
nginx-streaming [address = "10.254.x.1"];
}
network baikal-frontend {
address = "10.10.10.0/24"
traefik [address = "10.10.10.254"];
baikal [address = "10.10.10.1"];
}
network blog-frontend {
address = "10.10.11.0/24"
traefik [address = "10.10.11.254"];
blog [address = "10.10.11.1"];
}
network blog-backend {
address = "10.20.11.0/24"
blog [address = "10.20.11.1"];
stacosys [address = "10.20.11.2"];
}
network deluge-frontend {
address = "10.10.12.0/24"
traefik [address = "10.10.12.254"];
deluge [address = "10.10.12.1"];
}
network dokuwiki-frontend {
address = "10.10.13.0/24"
traefik [address = "10.10.13.254"];
dokuwiki [address = "10.10.13.1"];
}
network glances-frontend {
address = "10.10.14.0/24"
traefik [address = "10.10.14.254"];
glances [address = "10.10.14.1"];
}
network netdata-frontend {
address = "10.10.15.0/24"
traefik [address = "10.10.15.254"];
netdata [address = "10.10.15.1"];
}
network netdata-backend {
address = "10.20.15.0/24"
netdata [address = "10.20.15.1"];
docker-proxy [address = "10.20.15.2"];
}
network photo-frontend {
address = "10.10.16.0/24"
traefik [address = "10.10.16.254"];
pigallery2 [address = "10.10.16.1"];
}
network portainer-frontend {
address = "10.10.17.0/24"
traefik [address = "10.10.17.254"];
portainer [address = "10.10.17.1"];
}
network posteio-frontend {
address = "10.10.18.0/24"
traefik [address = "10.10.18.254"];
posteio [address = "10.10.18.1"];
}
network seafile-frontend {
address = "10.10.19.0/24"
traefik [address = "10.10.19.254"];
seafile [address = "10.10.19.1"];
}
network seafile-backend {
address = "10.20.19.0/24"
seafile [address = "10.20.19.1"];
seafile-db [address = "10.20.19.2"];
seafile-memcached [address = "10.20.19.3"];
}
network selfoss-frontend {
address = "10.10.20.0/24"
traefik [address = "10.10.20.254"];
selfoss [address = "10.10.20.1"];
}
network shaarli-frontend {
address = "10.10.21.0/24"
traefik [address = "10.10.21.254"];
shaarli [address = "10.10.21.1"];
}
network wallabag-frontend {
address = "10.10.22.0/24"
traefik [address = "10.10.22.254"];
wallabag [address = "10.10.22.1"];
}
network www-frontend {
address = "10.10.23.0/24"
traefik [address = "10.10.23.254"];
www [address = "10.10.23.1"];
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

272
__doc__/poetry.lock generated
View file

@ -1,272 +0,0 @@
[[package]]
name = "atomicwrites"
version = "1.4.0"
description = "Atomic file writes."
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
version = "21.2.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
[[package]]
name = "blockdiag"
version = "3.0.0"
description = "blockdiag generates block-diagram image from text"
category = "main"
optional = false
python-versions = ">=3.7"
[package.dependencies]
funcparserlib = ">=1.0.0a0"
Pillow = ">3.0"
webcolors = "*"
[package.extras]
pdf = ["reportlab"]
rst = ["docutils"]
testing = ["nose", "flake8", "flake8-coding", "flake8-copyright", "flake8-isort", "reportlab", "docutils"]
[[package]]
name = "colorama"
version = "0.4.4"
description = "Cross-platform colored terminal text."
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "funcparserlib"
version = "1.0.0a0"
description = "Recursive descent parsing library based on functional combinators"
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
[[package]]
name = "more-itertools"
version = "8.12.0"
description = "More routines for operating on iterables, beyond itertools"
category = "dev"
optional = false
python-versions = ">=3.5"
[[package]]
name = "nwdiag"
version = "3.0.0"
description = "nwdiag generates network-diagram image from text"
category = "main"
optional = false
python-versions = ">=3.7"
[package.dependencies]
blockdiag = ">=3.0.0"
[package.extras]
pdf = ["reportlab"]
rst = ["docutils"]
testing = ["nose", "pep8 (>=1.3)", "flake8", "flake8-coding", "flake8-copyright", "flake8-isort", "reportlab", "docutils"]
[[package]]
name = "packaging"
version = "21.3"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pillow"
version = "8.4.0"
description = "Python Imaging Library (Fork)"
category = "main"
optional = false
python-versions = ">=3.6"
[[package]]
name = "pluggy"
version = "0.13.1"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[package.extras]
dev = ["pre-commit", "tox"]
[[package]]
name = "py"
version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pyparsing"
version = "3.0.6"
description = "Python parsing module"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.extras]
diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pytest"
version = "5.4.3"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
python-versions = ">=3.5"
[package.dependencies]
atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""}
attrs = ">=17.4.0"
colorama = {version = "*", markers = "sys_platform == \"win32\""}
more-itertools = ">=4.0.0"
packaging = "*"
pluggy = ">=0.12,<1.0"
py = ">=1.5.0"
wcwidth = "*"
[package.extras]
checkqa-mypy = ["mypy (==v0.761)"]
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
[[package]]
name = "wcwidth"
version = "0.2.5"
description = "Measures the displayed width of unicode strings in a terminal"
category = "dev"
optional = false
python-versions = "*"
[[package]]
name = "webcolors"
version = "1.11.1"
description = "A library for working with color names and color values formats defined by HTML and CSS."
category = "main"
optional = false
python-versions = ">=3.5,"
[metadata]
lock-version = "1.1"
python-versions = "^3.9"
content-hash = "fe015acce0fbf3644be4807b9c0484d95c2bbb57fc1b09e08e3634ee78491990"
[metadata.files]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
{file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
blockdiag = [
{file = "blockdiag-3.0.0-py3-none-any.whl", hash = "sha256:4031bfae6a7f36071d733dec639987346e10f7871356ee2c7a221961c64961d8"},
{file = "blockdiag-3.0.0.tar.gz", hash = "sha256:dee4195bb87d23654546ba2bf5091480dbf253b409891fce2cd527c91d00a3e2"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
funcparserlib = [
{file = "funcparserlib-1.0.0a0-py2.py3-none-any.whl", hash = "sha256:a5ca025aaec28ae19956556260f5e0f28b0d851863e7982a0daf238161e33752"},
{file = "funcparserlib-1.0.0a0.tar.gz", hash = "sha256:e6fb432a9276078eee71813a59089fd8c4f3e81f183b4ce8b8b4734d0b2faa2a"},
]
more-itertools = [
{file = "more-itertools-8.12.0.tar.gz", hash = "sha256:7dc6ad46f05f545f900dd59e8dfb4e84a4827b97b3cfecb175ea0c7d247f6064"},
{file = "more_itertools-8.12.0-py3-none-any.whl", hash = "sha256:43e6dd9942dffd72661a2c4ef383ad7da1e6a3e968a927ad7a6083ab410a688b"},
]
nwdiag = [
{file = "nwdiag-3.0.0-py3-none-any.whl", hash = "sha256:549cab5400ca33b8c05ea119414fa41e6bd85be222ba524418c2c176eea87e80"},
{file = "nwdiag-3.0.0.tar.gz", hash = "sha256:e267530fcaac8a1d9e7403048597ed30e031e17f0191569dc6f704087bacb2eb"},
]
packaging = [
{file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
{file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pillow = [
{file = "Pillow-8.4.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:81f8d5c81e483a9442d72d182e1fb6dcb9723f289a57e8030811bac9ea3fef8d"},
{file = "Pillow-8.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3f97cfb1e5a392d75dd8b9fd274d205404729923840ca94ca45a0af57e13dbe6"},
{file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb9fc393f3c61f9054e1ed26e6fe912c7321af2f41ff49d3f83d05bacf22cc78"},
{file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d82cdb63100ef5eedb8391732375e6d05993b765f72cb34311fab92103314649"},
{file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc1afda735a8d109007164714e73771b499768b9bb5afcbbee9d0ff374b43f"},
{file = "Pillow-8.4.0-cp310-cp310-win32.whl", hash = "sha256:e3dacecfbeec9a33e932f00c6cd7996e62f53ad46fbe677577394aaa90ee419a"},
{file = "Pillow-8.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:620582db2a85b2df5f8a82ddeb52116560d7e5e6b055095f04ad828d1b0baa39"},
{file = "Pillow-8.4.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:1bc723b434fbc4ab50bb68e11e93ce5fb69866ad621e3c2c9bdb0cd70e345f55"},
{file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72cbcfd54df6caf85cc35264c77ede902452d6df41166010262374155947460c"},
{file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70ad9e5c6cb9b8487280a02c0ad8a51581dcbbe8484ce058477692a27c151c0a"},
{file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25a49dc2e2f74e65efaa32b153527fc5ac98508d502fa46e74fa4fd678ed6645"},
{file = "Pillow-8.4.0-cp36-cp36m-win32.whl", hash = "sha256:93ce9e955cc95959df98505e4608ad98281fff037350d8c2671c9aa86bcf10a9"},
{file = "Pillow-8.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2e4440b8f00f504ee4b53fe30f4e381aae30b0568193be305256b1462216feff"},
{file = "Pillow-8.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8c803ac3c28bbc53763e6825746f05cc407b20e4a69d0122e526a582e3b5e153"},
{file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8a17b5d948f4ceeceb66384727dde11b240736fddeda54ca740b9b8b1556b29"},
{file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1394a6ad5abc838c5cd8a92c5a07535648cdf6d09e8e2d6df916dfa9ea86ead8"},
{file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:792e5c12376594bfcb986ebf3855aa4b7c225754e9a9521298e460e92fb4a488"},
{file = "Pillow-8.4.0-cp37-cp37m-win32.whl", hash = "sha256:d99ec152570e4196772e7a8e4ba5320d2d27bf22fdf11743dd882936ed64305b"},
{file = "Pillow-8.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7b7017b61bbcdd7f6363aeceb881e23c46583739cb69a3ab39cb384f6ec82e5b"},
{file = "Pillow-8.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:d89363f02658e253dbd171f7c3716a5d340a24ee82d38aab9183f7fdf0cdca49"},
{file = "Pillow-8.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a0956fdc5defc34462bb1c765ee88d933239f9a94bc37d132004775241a7585"},
{file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b7bb9de00197fb4261825c15551adf7605cf14a80badf1761d61e59da347779"},
{file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72b9e656e340447f827885b8d7a15fc8c4e68d410dc2297ef6787eec0f0ea409"},
{file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5a4532a12314149d8b4e4ad8ff09dde7427731fcfa5917ff16d0291f13609df"},
{file = "Pillow-8.4.0-cp38-cp38-win32.whl", hash = "sha256:82aafa8d5eb68c8463b6e9baeb4f19043bb31fefc03eb7b216b51e6a9981ae09"},
{file = "Pillow-8.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:066f3999cb3b070a95c3652712cffa1a748cd02d60ad7b4e485c3748a04d9d76"},
{file = "Pillow-8.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:5503c86916d27c2e101b7f71c2ae2cddba01a2cf55b8395b0255fd33fa4d1f1a"},
{file = "Pillow-8.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4acc0985ddf39d1bc969a9220b51d94ed51695d455c228d8ac29fcdb25810e6e"},
{file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b052a619a8bfcf26bd8b3f48f45283f9e977890263e4571f2393ed8898d331b"},
{file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:493cb4e415f44cd601fcec11c99836f707bb714ab03f5ed46ac25713baf0ff20"},
{file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8831cb7332eda5dc89b21a7bce7ef6ad305548820595033a4b03cf3091235ed"},
{file = "Pillow-8.4.0-cp39-cp39-win32.whl", hash = "sha256:5e9ac5f66616b87d4da618a20ab0a38324dbe88d8a39b55be8964eb520021e02"},
{file = "Pillow-8.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:3eb1ce5f65908556c2d8685a8f0a6e989d887ec4057326f6c22b24e8a172c66b"},
{file = "Pillow-8.4.0-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ddc4d832a0f0b4c52fff973a0d44b6c99839a9d016fe4e6a1cb8f3eea96479c2"},
{file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3e5ddc44c14042f0844b8cf7d2cd455f6cc80fd7f5eefbe657292cf601d9ad"},
{file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c70e94281588ef053ae8998039610dbd71bc509e4acbc77ab59d7d2937b10698"},
{file = "Pillow-8.4.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:3862b7256046fcd950618ed22d1d60b842e3a40a48236a5498746f21189afbbc"},
{file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4901622493f88b1a29bd30ec1a2f683782e57c3c16a2dbc7f2595ba01f639df"},
{file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c471a734240653a0ec91dec0996696eea227eafe72a33bd06c92697728046b"},
{file = "Pillow-8.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:244cf3b97802c34c41905d22810846802a3329ddcb93ccc432870243211c79fc"},
{file = "Pillow-8.4.0.tar.gz", hash = "sha256:b8e2f83c56e141920c39464b852de3719dfbfb6e3c99a2d8da0edf4fb33176ed"},
]
pluggy = [
{file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
{file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
]
py = [
{file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pyparsing = [
{file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
{file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
]
pytest = [
{file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"},
{file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"},
]
wcwidth = [
{file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},
{file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"},
]
webcolors = [
{file = "webcolors-1.11.1-py3-none-any.whl", hash = "sha256:b8cd5d865a25c51ff1218f0c90d0c0781fc64312a49b746b320cf50de1648f6e"},
{file = "webcolors-1.11.1.tar.gz", hash = "sha256:76f360636957d1c976db7466bc71dcb713bb95ac8911944dffc55c01cb516de6"},
]

View file

@ -1,16 +0,0 @@
[tool.poetry]
name = "doc"
version = "0.1.0"
description = ""
authors = ["Yax"]
[tool.poetry.dependencies]
python = "^3.9"
nwdiag = "^3.0.0"
[tool.poetry.dev-dependencies]
pytest = "^5.2"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

View file

@ -1,28 +0,0 @@
version: '3.8'
services:
baikal:
container_name: baikal
image: ckulka/baikal:nginx
networks:
- baikal-frontend
expose:
- 80
restart: unless-stopped
volumes:
- baikal_data:/var/www/baikal/Specific:rw
- baikal_config:/var/www/baikal/config:rw
labels:
- traefik.enable=true
- traefik.http.routers.baikal.rule=Host(`${HOST_BAIKAL}.${DOMAIN}`)
- traefik.http.routers.baikal.entrypoints=https
- traefik.http.routers.baikal.tls=true
- traefik.docker.network=baikal-frontend
networks:
baikal-frontend:
name: baikal-frontend
volumes:
baikal_config:
baikal_data:

View file

@ -1,36 +0,0 @@
version: '3.8'
services:
stacosys:
container_name: stacosys
image: kianby/stacosys
volumes:
- ${ROOT_INSTALL}/data/stacosys:/config
networks:
- blog-backend
restart: unless-stopped
expose:
- 8100
blog:
container_name: blog
image: kianby/blogduyax
depends_on:
- stacosys
networks:
- blog-backend
- blog-frontend
restart: unless-stopped
expose:
- 80
labels:
- traefik.enable=true
- traefik.http.routers.blog.rule=Host(`${HOST_BLOG}.${DOMAIN}`)
- traefik.http.routers.blog.entrypoints=https
- traefik.http.routers.blog.tls=true
- traefik.docker.network=blog-frontend
networks:
blog-frontend:
name: blog-frontend
blog-backend:
name: blog-backend

View file

@ -1,55 +0,0 @@
version: '3.8'
services:
deluge:
container_name: deluge
image: linuxserver/deluge
restart: unless-stopped
networks:
- deluge-frontend
environment:
DELUGE_LOGLEVEL: info
TZ: ${TZ}
expose:
- 8112
ports:
- ${DELUGE_TORRENT_PORT}:${DELUGE_TORRENT_PORT}/tcp
- ${DELUGE_TORRENT_PORT}:${DELUGE_TORRENT_PORT}/udp
volumes:
- deluge_config:/config:rw
- deluge_downloads:/downloads:rw
labels:
- traefik.enable=true
- traefik.http.routers.deluge.rule=Host(`${HOST_WWW}.${DOMAIN}`) && PathPrefix(`${PATH_DELUGE}`)
- traefik.http.routers.deluge.entrypoints=https
- traefik.http.routers.deluge.tls=true
- traefik.http.services.deluge.loadbalancer.server.port=8112
- traefik.http.routers.deluge.middlewares=delugeHeader,sameOriginHeader,delugeRedir,delugePStrip
- traefik.http.middlewares.delugeHeader.headers.customrequestheaders.X-Deluge-Base=${PATH_DELUGE}/
- traefik.http.middlewares.sameOriginHeader.headers.customrequestheaders.X-Frame-Options=SAMEORIGIN
- traefik.http.middlewares.delugePStrip.stripprefix.prefixes=${PATH_DELUGE}
- traefik.http.middlewares.delugeRedir.redirectregex.regex=^(.*)${PATH_DELUGE}$$
- traefik.http.middlewares.delugeRedir.redirectregex.replacement=$${1}${PATH_DELUGE}/
- traefik.docker.network=deluge-frontend
torrent:
container_name: torrent
image: kianby/nginx-streaming
restart: unless-stopped
networks:
- dmz
volumes:
- deluge_downloads:/downloads:ro
expose:
- 80
# shortcut to bypass traefik limitation
ports:
- ${DOWNLOAD_HTTP_PORT}:80
networks:
deluge-frontend:
name: deluge-frontend
volumes:
deluge_config:
deluge_downloads:

View file

@ -1,26 +0,0 @@
version: '3.8'
services:
dokuwiki:
image: linuxserver/dokuwiki
container_name: dokuwiki
restart: unless-stopped
expose:
- 80
environment:
- TZ=${TZ}
- APP_URL=/ #optional
volumes:
- ${ROOT_INSTALL}/data/dokuwiki:/config
networks:
- dokuwiki-frontend
labels:
- traefik.enable=true
- traefik.http.routers.dokuwiki.rule=Host(`${HOST_DOKUWIKI}.${DOMAIN}`)
- traefik.http.routers.dokuwiki.entrypoints=https
- traefik.http.routers.dokuwiki.tls=true
- traefik.docker.network=dokuwiki-frontend
networks:
dokuwiki-frontend:
name: dokuwiki-frontend

View file

@ -1,29 +0,0 @@
version: '3.8'
services:
glances:
container_name: glances
image: nicolargo/glances:3.2.3.1
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- GLANCES_OPT=-w
pid: host
networks:
- glances-frontend
expose:
- 61208
labels:
- traefik.enable=true
- traefik.http.routers.glances.rule=Host(`${HOST_WWW}.${DOMAIN}`) && PathPrefix(`${PATH_GLANCES}`)
- traefik.http.routers.glances.entrypoints=https
- traefik.http.routers.glances.tls=true
- traefik.http.routers.glances.middlewares=glancesRedir,glancesPStrip
- traefik.http.middlewares.glancesPStrip.stripprefix.prefixes=${PATH_GLANCES}
- traefik.http.middlewares.glancesRedir.redirectregex.regex=^(.*)${PATH_GLANCES}$$
- traefik.http.middlewares.glancesRedir.redirectregex.replacement=$${1}${PATH_GLANCES}/
- traefik.docker.network=glances-frontend
networks:
glances-frontend:
name: glances-frontend

View file

@ -1,57 +0,0 @@
version: '3.8'
services:
netdata:
image: netdata/netdata
container_name: netdata
hostname: ${HOST_NETDATA}.${DOMAIN}
expose:
- 19999
restart: unless-stopped
cap_add:
- SYS_PTRACE
security_opt:
- apparmor:unconfined
environment:
- DOCKER_HOST=docker-proxy:2375
volumes:
- netdataconfig:/etc/netdata
- netdatalib:/var/lib/netdata
- netdatacache:/var/cache/netdata
- /etc/passwd:/host/etc/passwd:ro
- /etc/group:/host/etc/group:ro
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /etc/os-release:/host/etc/os-release:ro
networks:
- netdata-frontend
- netdata-backend
labels:
- traefik.enable=true
- traefik.http.routers.netdata.rule=Host(`${HOST_NETDATA}.${DOMAIN}`)
- traefik.http.routers.netdata.entrypoints=https
- traefik.http.routers.netdata.tls=true
- traefik.http.routers.netdata.middlewares=auth
- traefik.http.middlewares.auth.basicauth.users=${BASIC_AUTH}
- traefik.docker.network=netdata-frontend
healthcheck:
disable: true
docker-proxy:
image: tecnativa/docker-socket-proxy
container_name: docker-proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- CONTAINERS=1
networks:
- netdata-backend
networks:
netdata-frontend:
name: netdata-frontend
netdata-backend:
name: netdata-backend
volumes:
netdataconfig:
netdatalib:
netdatacache:

View file

@ -1,35 +0,0 @@
version: '3.8'
services:
lychee:
container_name: lychee
environment:
- PHP_TZ=${TZ}
- TIMEZONE=${TZ}
image: lycheeorg/lychee
networks:
- photo-frontend
expose:
- 80
restart: unless-stopped
volumes:
- lychee_conf:/conf
- lychee_uploads:/uploads
- lychee_sym:/sym
labels:
- traefik.enable=true
- traefik.http.routers.photo.rule=Host(`${HOST_LYCHEE}.${DOMAIN}`)
- traefik.http.routers.photo.entrypoints=https
- traefik.http.routers.photo.tls=true
- traefik.docker.network=photo-frontend
networks:
photo-frontend:
name: photo-frontend
photo-backend:
name: photo-backend
volumes:
lychee_conf:
lychee_uploads:
lychee_sym:

View file

@ -1,71 +0,0 @@
version: '3.8'
services:
postgres:
container_name: photonix-postgres
image: postgres:11.1-alpine
environment:
POSTGRES_DB: photonix
POSTGRES_PASSWORD: password
volumes:
- photonix_db:/var/lib/postgresql/data
networks:
- photo-backend
redis:
container_name: photonix-redis
image: redis:6.2.2
networks:
- photo-backend
photonix:
container_name: photonix
image: photonixapp/photonix:latest
expose:
- 80
environment:
ENV: prd
POSTGRES_HOST: postgres
POSTGRES_DB: photonix
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
REDIS_HOST: redis
ALLOWED_HOSTS: '*'
# More configuration options here: https://photonix.org/docs/configuration/
volumes:
# - ./data/photos:/data/photos
- photonix_raw_photos:/data/raw-photos-processed
- photonix_cache:/data/cache
- photonix_models:/data/models
- type: bind
source: ${ROOT_INSTALL}/data/seafile-fuse
target: /seahub
bind:
propagation: rslave
privileged: true
cap_add:
- SYS_ADMIN
depends_on:
- postgres
- redis
networks:
- photo-backend
- photo-frontend
labels:
- traefik.enable=true
- traefik.http.routers.photo.rule=Host(`${HOST_PHOTONIX}.${DOMAIN}`)
- traefik.http.routers.photo.entrypoints=https
- traefik.http.routers.photo.tls=true
- traefik.docker.network=photo-frontend
networks:
photo-frontend:
name: photo-frontend
photo-backend:
name: photo-backend
volumes:
photonix_raw_photos:
photonix_cache:
photonix_models:
photonix_db:

View file

@ -1,77 +0,0 @@
version: '3.8'
services:
photoview-db:
container_name: photoview-db
image: mariadb:10.5
restart: unless-stopped
environment:
- MYSQL_DATABASE=photoview
- MYSQL_USER=photoview
- MYSQL_PASSWORD=photosecret
- MYSQL_RANDOM_ROOT_PASSWORD=1
volumes:
- photoview_db_data:/var/lib/mysql
networks:
- photo-backend
photoview:
container_name: photoview
image: viktorstrate/photoview:2
restart: unless-stopped
expose:
- 80
depends_on:
- photoview-db
networks:
- photo-backend
- photo-frontend
environment:
- PHOTOVIEW_DATABASE_DRIVER=mysql
- PHOTOVIEW_MYSQL_URL=photoview:photosecret@tcp(photoview-db)/photoview
- PHOTOVIEW_LISTEN_IP=photoview
- PHOTOVIEW_LISTEN_PORT=80
- PHOTOVIEW_MEDIA_CACHE=/app/cache
# Optional: If you are using Samba/CIFS-Share and experience problems with "directory not found"
# Enable the following Godebug
# - GODEBUG=asyncpreemptoff=1
# Optional: To enable map related features, you need to create a mapbox token.
# A token can be generated for free here https://account.mapbox.com/access-tokens/
# It's a good idea to limit the scope of the token to your own domain, to prevent others from using it.
- MAPBOX_TOKEN=${MAPBOX_TOKEN}
volumes:
- photoview_api_cache:/app/cache
# Change This: to the directory where your photos are located on your server.
# If the photos are located at `/home/user/photos`, then change this value
# to the following: `/home/user/photos:/photos:ro`.
# You can mount multiple paths, if your photos are spread across multiple directories.
#- ./photos_path:/photos:ro
- type: bind
source: ${ROOT_INSTALL}/data/seafile-fuse
target: /photos
bind:
propagation: rslave
privileged: true
cap_add:
- SYS_ADMIN
labels:
- traefik.enable=true
- traefik.http.routers.photo.rule=Host(`${HOST_PHOTOVIEW}.${DOMAIN}`)
- traefik.http.routers.photo.entrypoints=https
- traefik.http.routers.photo.tls=true
- traefik.docker.network=photo-frontend
networks:
photo-frontend:
name: photo-frontend
photo-backend:
name: photo-backend
volumes:
photoview_db_data:
photoview_api_cache:

View file

@ -1,45 +0,0 @@
version: '3.8'
services:
pigallery2:
container_name: pigallery2
environment:
NODE_ENV: production
image: bpatrik/pigallery2:1.9.0-alpine
networks:
- photo-frontend
expose:
- 80
restart: unless-stopped
volumes:
#/app/data/images
- pigallery_config:/app/data/config:rw
- pigallerydb_data:/app/data/db:rw
- pigallery_tmp:/app/data/tmp:rw
- type: bind
source: ${ROOT_INSTALL}/data/seafile-fuse
target: /seahub
bind:
propagation: rslave
privileged: true
cap_add:
- SYS_ADMIN
healthcheck:
disable: true
labels:
- traefik.enable=true
- traefik.http.routers.photo.rule=Host(`${HOST_PIGALLERY}.${DOMAIN}`)
- traefik.http.routers.photo.entrypoints=https
- traefik.http.routers.photo.tls=true
- traefik.docker.network=photo-frontend
networks:
photo-frontend:
name: photo-frontend
photo-backend:
name: photo-backend
volumes:
pigallerydb_data:
pigallery_tmp:
pigallery_config:

View file

@ -1,33 +0,0 @@
version: '3.8'
services:
portainer:
container_name: portainer
image: portainer/portainer-ce
command: -H unix:///var/run/docker.sock
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
networks:
- portainer-frontend
restart: unless-stopped
expose:
- 9000
labels:
- traefik.enable=true
- traefik.http.routers.portainer.rule=Host(`${HOST_WWW}.${DOMAIN}`) && PathPrefix(`${PATH_PORTAINER}`)
- traefik.http.routers.portainer.entrypoints=https
- traefik.http.routers.portainer.tls=true
- traefik.http.services.portainer.loadbalancer.server.port=9000
- traefik.http.routers.portainer.middlewares=portainerRedir,portainerPStrip
- traefik.http.middlewares.portainerPStrip.stripprefix.prefixes=${PATH_PORTAINER}
- traefik.http.middlewares.portainerRedir.redirectregex.regex=^(.*)${PATH_PORTAINER}$$
- traefik.http.middlewares.portainerRedir.redirectregex.replacement=$${1}${PATH_PORTAINER}/
- traefik.docker.network=portainer-frontend
networks:
portainer-frontend:
name: portainer-frontend
volumes:
portainer_data:

View file

@ -1,32 +0,0 @@
version: '3.8'
services:
poste-io:
container_name: poste-io
image: analogic/poste.io
volumes:
- ${ROOT_INSTALL}/data/poste.io:/data
environment:
- TZ=${TZ}
- HTTPS=OFF
restart: unless-stopped
ports:
- "465:465"
- "993:993"
- "25:25"
expose:
- 80
labels:
- traefik.enable=true
- traefik.http.routers.posteio.rule=Host(`${HOST_MAIL}.${DOMAIN}`)
- traefik.http.routers.posteio.entrypoints=https
- traefik.http.routers.posteio.tls=true
- traefik.docker.network=posteio-frontend
networks:
- posteio-frontend
healthcheck:
disable: true
networks:
posteio-frontend:
name: portainer-frontend

51
run-docker-compose.sh Executable file
View file

@ -0,0 +1,51 @@
#!/bin/bash
# examples:
# ./run-docker-compose.sh --env-file ./.env up -d
# ./run-docker-compose.sh --env-file ./.env down
# Exit on errors
set -e
# Ensure arguments are provided
if [ $# -eq 0 ]; then
echo "Usage: $0 <docker compose arguments>"
exit 1
fi
# Store the user-provided arguments
ARGS="$@"
CONFIG_FILE=".env"
# Check if config file exists
if [ ! -f "$CONFIG_FILE" ]; then
echo "Error: Config file '$CONFIG_FILE' not found"
exit 1
fi
# Extract DEPLOY variable from .env file
DEPLOY=$(grep '^DEPLOY=' "$CONFIG_FILE" | cut -d '=' -f 2-)
if [ -z "$DEPLOY" ]; then
echo "Error: DEPLOY variable not set in $CONFIG_FILE"
exit 1
fi
# Find all directories containing docker-compose*.yml files
DIRS=$(find . -type f -name 'docker-compose*.yml' -exec dirname {} \; | sort -u)
# Iterate through the filtered directories
for dir in $DIRS; do
# Extract directory name (e.g., "01-blog" from "./01-blog")
dir_name=$(basename "$dir")
# Check if directory name is in DEPLOY list
if echo "$DEPLOY" | grep -qw "$dir_name"; then
compose_file=$(find "$dir" -maxdepth 1 -type f -name 'docker-compose*.yml' | head -1)
echo "Running: docker compose --env-file .env -f $compose_file $ARGS"
docker compose --env-file .env -f "$compose_file" $ARGS
fi
done

View file

@ -1,68 +0,0 @@
version: '3.8'
services:
seafile-db:
container_name: seafile-db
environment:
MYSQL_LOG_CONSOLE: "true"
MYSQL_ROOT_PASSWORD: ${SEAFILE_DB_ROOT_PASSWORD}
image: mariadb:10.1
networks:
- seafile-backend
volumes:
- seafile_db:/var/lib/mysql:rw
restart: unless-stopped
seafile-memcached:
container_name: seafile-memcached
entrypoint: memcached -m 256
image: memcached:1.5.6
networks:
- seafile-backend
restart: unless-stopped
seafile:
container_name: seafile
depends_on:
- seafile-db
- seafile-memcached
environment:
DB_HOST: seafile-db
DB_ROOT_PASSWD: ${SEAFILE_DB_ROOT_PASSWORD}
SEAFILE_ADMIN_EMAIL: ${SEAFILE_ADMIN_EMAIL}
SEAFILE_ADMIN_PASSWORD: ${SEAFILE_ADMIN_PASSWORD}
SEAFILE_SERVER_HOSTNAME: ${HOST_SEAFILE}.${DOMAIN}
SEAFILE_SERVER_LETSENCRYPT: "false"
TIME_ZONE: ${TZ}
image: seafileltd/seafile-mc:latest
networks:
- seafile-backend
- seafile-frontend
restart: unless-stopped
expose:
- 80
volumes:
- ${ROOT_INSTALL}/selfhosting/seafile/start.py:/scripts/start.py
- seafile_data:/shared:rw
- type: bind
source: ${ROOT_INSTALL}/data/seafile-fuse
target: /seafile-fuse
bind:
propagation: rshared
privileged: true
cap_add:
- SYS_ADMIN
labels:
- traefik.enable=true
- traefik.http.routers.seafile.rule=Host(`${HOST_SEAFILE}.${DOMAIN}`)
- traefik.http.routers.seafile.entrypoints=https
- traefik.http.routers.seafile.tls=true
- traefik.docker.network=seafile-frontend
networks:
seafile-frontend:
name: seafile-frontend
seafile-backend:
name: seafile-backend
volumes:
seafile_db:
seafile_data:

View file

@ -1,88 +0,0 @@
#!/usr/bin/env python3
#coding: UTF-8
"""
Starts the seafile/seahub server and watches the controller process. It is
the entrypoint command of the docker container.
"""
import json
import os
from os.path import abspath, basename, exists, dirname, join, isdir
import shutil
import sys
import time
from utils import (
call, get_conf, get_install_dir, get_script, get_command_output,
render_template, wait_for_mysql, setup_logging
)
from upgrade import check_upgrade
from bootstrap import init_seafile_server, is_https, init_letsencrypt, generate_local_nginx_conf
shared_seafiledir = '/shared/seafile'
ssl_dir = '/shared/ssl'
generated_dir = '/bootstrap/generated'
installdir = get_install_dir()
topdir = dirname(installdir)
def watch_controller():
maxretry = 4
retry = 0
while retry < maxretry:
controller_pid = get_command_output('ps aux | grep seafile-controller | grep -v grep || true').strip()
garbage_collector_pid = get_command_output('ps aux | grep /scripts/gc.sh | grep -v grep || true').strip()
if not controller_pid and not garbage_collector_pid:
retry += 1
else:
retry = 0
time.sleep(5)
print('seafile controller exited unexpectedly.')
sys.exit(1)
def main():
if not exists(shared_seafiledir):
os.mkdir(shared_seafiledir)
if not exists(generated_dir):
os.makedirs(generated_dir)
if is_https():
init_letsencrypt()
generate_local_nginx_conf()
call('nginx -s reload')
wait_for_mysql()
init_seafile_server()
check_upgrade()
os.chdir(installdir)
admin_pw = {
'email': get_conf('SEAFILE_ADMIN_EMAIL', 'me@example.com'),
'password': get_conf('SEAFILE_ADMIN_PASSWORD', 'asecret'),
}
password_file = join(topdir, 'conf', 'admin.txt')
with open(password_file, 'w') as fp:
json.dump(admin_pw, fp)
try:
call('{} start'.format(get_script('seafile.sh')))
call('{} start'.format(get_script('seahub.sh')))
call('{} start /seafile-fuse'.format(get_script('seaf-fuse.sh')))
finally:
if exists(password_file):
os.unlink(password_file)
print('seafile server is running now.')
try:
watch_controller()
except KeyboardInterrupt:
print('Stopping seafile server.')
sys.exit(0)
if __name__ == '__main__':
setup_logging()
main()

File diff suppressed because it is too large Load diff

View file

@ -1,31 +0,0 @@
version: '3.8'
services:
selfoss:
container_name: selfoss
image: hardware/selfoss
volumes:
- selfoss_data:/selfoss/data
- ${ROOT_INSTALL}/selfhosting/selfoss/cacert-2021-10-26.pem:/etc/ssl/cacerts
- ${ROOT_INSTALL}/selfhosting/selfoss/php7.ini:/etc/php7/php.ini
networks:
- selfoss-frontend
restart: unless-stopped
expose:
- 8888
labels:
- traefik.enable=true
- traefik.http.routers.selfoss.rule=Host(`${HOST_SELFOSS}.${DOMAIN}`)
- traefik.http.routers.selfoss.entrypoints=https
- traefik.http.routers.selfoss.tls=true
- traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=134217728
- traefik.http.middlewares.limit.buffering.memRequestBodyBytes=2000000
- traefik.http.middlewares.limit.buffering.maxResponseBodyBytes=134217728
- traefik.http.middlewares.limit.buffering.memResponseBodyBytes=2000000
- traefik.docker.network=selfoss-frontend
volumes:
selfoss_data:
networks:
selfoss-frontend:
name: selfoss-frontend

File diff suppressed because it is too large Load diff

View file

@ -1,27 +0,0 @@
version: '3.8'
services:
shaarli:
container_name: shaarli
image: shaarli/shaarli
volumes:
- shaarli-cache:/var/www/shaarli/cache
- ${ROOT_INSTALL}/data/shaarli:/var/www/shaarli/data
networks:
- shaarli-frontend
restart: unless-stopped
expose:
- 80
labels:
- traefik.enable=true
- traefik.http.routers.shaarli.rule=Host(`${HOST_SHAARLI}.${DOMAIN}`)
- traefik.http.routers.shaarli.entrypoints=https
- traefik.http.routers.shaarli.tls=true
- traefik.docker.network=shaarli-frontend
networks:
shaarli-frontend:
name: shaarli-frontend
volumes:
shaarli-cache:

View file

@ -1,32 +0,0 @@
version: "3.8"
services:
gitea:
container_name: gitea
image: gitea/gitea:1.17.2-rootless
restart: unless-stopped
volumes:
- gitea_data:/var/lib/gitea
- gitea_config:/etc/gitea
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
networks:
- source-frontend
labels:
- traefik.enable=true
- traefik.http.routers.gitea.rule=Host(`${HOST_GITEA}.${DOMAIN}`)
- traefik.http.services.gitea.loadbalancer.server.port=3000
- traefik.http.routers.gitea.entrypoints=https
- traefik.http.routers.gitea.tls=true
- traefik.docker.network=source-frontend
networks:
source-frontend:
name: source-frontend
volumes:
gitea_data:
gitea_config:

View file

View file

@ -1,67 +0,0 @@
version: '3.8'
services:
traefik-infomaniak:
container_name: traefik-infomaniak
image: traefik:v2.5.3
profiles: ["production"]
command:
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --api.dashboard=false
- --entrypoints.http.address=:80
- --entrypoints.https.address=:443
- --certificatesresolvers.letsencrypt.acme.email=${LETSENCRYPT_EMAIL}
- --certificatesresolvers.letsencrypt.acme.storage=/acme.json
- --certificatesResolvers.letsencrypt.acme.dnsChallenge=true
# example : infomaniak
- --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=infomaniak
environment:
- INFOMANIAK_ACCESS_TOKEN=${LETSENCRYPT_DNSPROVIDER_TOKEN}
labels:
- traefik.enable=true
- traefik.http.routers.api.entrypoints=http
- traefik.http.routers.api.entrypoints=https
- traefik.http.routers.api.service=api@internal
# middleware auth
- traefik.http.routers.api.middlewares=auth
- traefik.http.middlewares.auth.basicauth.users=${BASIC_AUTH}
# request widlcard certificate
- traefik.http.routers.api.tls.certresolver=letsencrypt
- traefik.http.routers.api.tls.domains[0].main=${DOMAIN}
- traefik.http.routers.api.tls.domains[0].sans=*.${DOMAIN}
# global redirect to https
- traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)
- traefik.http.routers.http-catchall.entrypoints=http
- traefik.http.routers.http-catchall.middlewares=redirect-to-https
# middleware redirect
- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
- traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true
ports:
- 80:80
- 443:443
networks:
- dmz
- baikal-frontend
- blog-frontend
- deluge-frontend
- dokuwiki-frontend
- glances-frontend
- netdata-frontend
- photo-frontend
- portainer-frontend
- posteio-frontend
- seafile-frontend
- selfoss-frontend
- shaarli-frontend
- source-frontend
- wallabag-frontend
- wwww-frontend
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ${ROOT_INSTALL}/selfhosting/traefik/acme.json:/acme.json
networks:
dmz:
name: dmz

View file

@ -1,55 +0,0 @@
version: '3.8'
services:
traefik-local:
container_name: traefik-local
image: traefik:v2.5.3
profiles: ["testing"]
ports:
- 80:80
- 443:443
- 8080:8080
expose:
- 8080
labels:
- traefik.enable=true
networks:
- dmz
- baikal-frontend
- blog-frontend
- deluge-frontend
- dokuwiki-frontend
- glances-frontend
- netdata-frontend
- photo-frontend
- portainer-frontend
- posteio-frontend
- seafile-frontend
- selfoss-frontend
- shaarli-frontend
- source-frontend
- wallabag-frontend
- wwww-frontend
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ${ROOT_INSTALL}/selfhosting/traefik/traefik.yml:/etc/traefik/traefik.yml
- ${ROOT_INSTALL}/selfhosting/traefik/tls.yml:/etc/traefik/tls.yml
- certs:/etc/ssl/traefik
traefik-reverse-proxy-https-helper:
container_name: traefik-reverse-proxy-https-helper
image: alpine
profiles: ["testing"]
command: sh -c "cd /etc/ssl/traefik
&& wget traefik.me/cert.pem -O cert.pem
&& wget traefik.me/privkey.pem -O privkey.pem"
volumes:
- certs:/etc/ssl/traefik
networks:
dmz:
name: dmz
volumes:
certs:

View file

@ -1,9 +0,0 @@
tls:
stores:
default:
defaultCertificate:
certFile: /etc/ssl/traefik/cert.pem
keyFile: /etc/ssl/traefik/privkey.pem
certificates:
- certFile: /etc/ssl/traefik/cert.pem
keyFile: /etc/ssl/traefik/privkey.pem

View file

@ -1,37 +0,0 @@
logLevel: INFO
api:
insecure: true
dashboard: true
entryPoints:
http:
address: ":80"
https:
address: ":443"
providers:
file:
filename: /etc/traefik/tls.yml
docker:
endpoint: unix:///var/run/docker.sock
watch: true
exposedByDefault: false
defaultRule: "HostRegexp(`{{ index .Labels \"com.docker.compose.service\"}}.traefik.me`,`{{ index .Labels \"com.docker.compose.service\"}}-{dashed-ip:.*}.traefik.me`)"
http:
# global redirect to https
routers:
http-catchall:
rule: "hostregexp(`{host:.+}`)"
entrypoints:
- http
middlewares:
- redirect-to-https
# middleware redirect
middlewares:
redirect-to-https:
redirectscheme:
scheme: https
permanent: true

View file

@ -1,30 +0,0 @@
version: '3.8'
services:
wallabag:
container_name: wallabag
image: wallabag/wallabag
networks:
- wallabag-frontend
expose:
- 80
volumes:
- wallabag_data:/var/www/wallabag/data:rw
- wallabag_images:/var/www/wallabag/web/assets/images:rw
environment:
- SYMFONY__ENV__DOMAIN_NAME="https://${HOST_WALLABAG}.${DOMAIN}"
- SYMFONY__ENV__FOSUSER_REGISTRATION=false
labels:
- traefik.enable=true
- traefik.http.routers.wallabag.rule=Host(`${HOST_WALLABAG}.${DOMAIN}`)
- traefik.http.routers.wallabag.entrypoints=https
- traefik.http.routers.wallabag.tls=true
- traefik.docker.network=wallabag-frontend
networks:
wallabag-frontend:
name: wallabag-frontend
volumes:
wallabag_data:
wallabag_images:

View file

@ -1,40 +0,0 @@
version: '3.8'
services:
dashy:
# To build from source, replace 'image: lissy93/dashy' with 'build: .'
# build: .
image: lissy93/dashy
container_name: dashy
# Pass in your config file below, by specifying the path on your host machine
volumes:
- ${ROOT_INSTALL}/data/dashy/config.yml:/app/public/conf.yml
# Set any environmental variables
environment:
- NODE_ENV=production
# Specify your user ID and group ID. You can find this by running `id -u` and `id -g`
# - UID=1000
# - GID=1000
# Specify restart policy
restart: unless-stopped
# Configure healthchecks
#healthcheck:
# test: ['CMD', 'node', '/app/services/healthcheck']
# interval: 1m30s
# timeout: 10s
# retries: 3
# start_period: 40s
networks:
- wwww-frontend
expose:
- 80
labels:
- traefik.enable=true
- traefik.http.routers.dashy.rule=Host(`${FQDN_DASHBOARD}`)
- traefik.http.routers.dashy.entrypoints=https
- traefik.http.routers.dashy.tls=true
- traefik.docker.network=wwww-frontend
networks:
wwww-frontend:
name: wwww-frontend

View file

@ -1,27 +0,0 @@
version: '3.8'
services:
heimdall:
image: lscr.io/linuxserver/heimdall
container_name: heimdall
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- ${ROOT_INSTALL}/data/heimdall:/config
expose:
- 80
networks:
- wwww-frontend
restart: unless-stopped
labels:
- traefik.enable=true
- traefik.http.routers.dashy.rule=Host(`${FQDN_DASHBOARD}`)
- traefik.http.routers.dashy.entrypoints=https
- traefik.http.routers.dashy.tls=true
- traefik.docker.network=wwww-frontend
networks:
wwww-frontend:
name: wwww-frontend

View file

@ -1,21 +0,0 @@
version: '3.8'
services:
www:
container_name: www
image: kianby/www-madyanne
restart: unless-stopped
networks:
- wwww-frontend
expose:
- 80
labels:
- traefik.enable=true
- traefik.http.routers.www.rule=Host(`${HOST_WWW}.${DOMAIN}`)
- traefik.http.routers.www.entrypoints=https
- traefik.http.routers.www.tls=true
- traefik.docker.network=wwww-frontend
networks:
wwww-frontend:
name: wwww-frontend