Compare commits

...
Sign in to create a new pull request.

23 commits

Author SHA1 Message Date
Yax
f3d6805dc3 Fix readonly 2025-01-01 09:53:57 +01:00
Yax
bf135a21fc Add Immich 2025-01-01 09:51:50 +01:00
Yax
90936d9157 Port mapping 8017 2024-12-29 18:47:49 +01:00
Yax
a316a8ebb3 Port mapping 2024-12-29 18:44:43 +01:00
Yax
cc5ead065a seafile 2024-12-29 18:33:32 +01:00
Yax
46ce2eb844 force https 2024-12-29 11:02:46 +01:00
Yax
5a76df1024 trim 2024-12-29 10:50:34 +01:00
Yax
e770b84bf5 fix seafile 2024-12-29 10:47:58 +01:00
Yax
a7f5ae1372 seafile fix 2024-12-29 10:45:23 +01:00
Yax
a7b68f4acc Seafile 2024-12-29 10:34:40 +01:00
Yax
5a40460011 Fix mariadb config 2024-12-28 23:21:54 +01:00
Yax
df00b6436e Fix owncloud 2024-12-28 23:18:59 +01:00
Yax
c6644e7a8b MariaDB 2024-12-28 23:17:31 +01:00
Yax
8bc72c9448 owncloud 2024-12-28 22:00:30 +01:00
Yax
cac8fb2769 Nextcloud 2024-12-26 17:58:56 +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
38 changed files with 176 additions and 6693 deletions

View file

@ -1,46 +1,19 @@
# ssl
LETSENCRYPT_EMAIL=root@localhost.localdomain
LETSENCRYPT_DNSPROVIDER_TOKEN=
# off sites
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/
# general
ROOT_INSTALL=/srv
PUID=1000
PGID=1000
# torrent
DELUGE_TORRENT_PORT=6881
DOWNLOAD_HTTP_PORT=8000
TZ=Europe/Paris
DOMAIN=domain.com
# seafile
SEAFILE_ADMIN_EMAIL=root@localdomain
SEAFILE_ADMIN_PASSWORD=abc123456
SEAFILE_DB_ROOT_PASSWORD=rootpassword
HOST_SEAFILE=seafile
SEAFILE_ADMIN_EMAIL=admin@domain.com
SEAFILE_ADMIN_PASSWORD=adminpassword
SEAFILE_DB_ROOT_PASSWORD=dbpassword
SEAFILE_PHOTOS=/srv/data/seafile
# mapbox.com
MAPBOX_TOKEN=
# immich
IMMICH_VERSION=release
UPLOAD_LOCATION=./library
DB_DATA_LOCATION=./postgres
DB_PASSWORD=postgres
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

5
.gitignore vendored
View file

@ -1,2 +1,5 @@
.env
source.sh
.env.vm1
.env.vm2
selfhosting.sublime-project
selfhosting.sublime-workspace

View file

@ -0,0 +1,47 @@
services:
db:
container_name: seafile-db
image: mariadb:10.11
environment:
- MYSQL_LOG_CONSOLE=true
- MYSQL_ROOT_PASSWORD=${SEAFILE_DB_ROOT_PASSWORD}
- MARIADB_AUTO_UPGRADE=1
volumes:
- seafile_db:/var/lib/mysql
memcached:
container_name: seafile-memcached
entrypoint: memcached -m 256
image: memcached:1.6.18
seafile:
container_name: seafile
image: seafileltd/seafile-mc:11.0-latest
depends_on:
- db
- memcached
environment:
- DB_HOST=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
- FORCE_HTTPS_IN_CONF=true
- TIME_ZONE=${TZ}
ports:
- "8017:80"
volumes:
- seafile_data:/shared:rw
- type: bind
source: ${ROOT_INSTALL}/data/seafile
target: /seafile-fuse
bind:
propagation: rshared
privileged: true
cap_add:
- SYS_ADMIN
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

@ -1,23 +1,3 @@
# Hosting
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

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

@ -0,0 +1,27 @@
#!/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="$@"
# Find all directories containing a file named docker-compose*.yml
find . -type f -name 'docker-compose*.yml' | while IFS= read -r compose_file; do
# Run the docker compose command with user arguments
echo "Running: docker compose $compose_file"
docker compose -f "$compose_file" $ARGS
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