Compare commits
260 Commits
f8762ed06c
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| fac196aa60 | |||
| 93cc0f7bd7 | |||
| d4bf0f044a | |||
| 2c00f40150 | |||
| 026fd46004 | |||
| f107c1ba5e | |||
| 32fccb8683 | |||
| 6a2e2eb7dd | |||
| df22fcc717 | |||
| a839a51074 | |||
| 8ab6ecfac1 | |||
| 72a03d0101 | |||
| 86a9de8e6b | |||
| f229a25d5e | |||
| e91097ebc2 | |||
| 64320b3677 | |||
| f9efbd8784 | |||
| e38018afaf | |||
| 47c481d1b4 | |||
| a376705962 | |||
| f3a53fd823 | |||
| a2a80f7c0f | |||
| 14fec7bbe6 | |||
| c828653341 | |||
| 15d3d4570c | |||
| 9605daed02 | |||
| 18080290a9 | |||
| b8576d11d0 | |||
| 0a95868b36 | |||
| 538aad2dd1 | |||
| ab701a11bd | |||
| d4d5b2a6b3 | |||
| 844b83a3f2 | |||
| 8dcc755222 | |||
| 65eed74dfb | |||
| e266a78843 | |||
| 9c6aa40453 | |||
| ca33fc6d1f | |||
| ff9f3d3749 | |||
| fcd88276c7 | |||
| c76e8ce3f1 | |||
| 635baf2362 | |||
| a0f63ab43f | |||
| 5d2a44b419 | |||
| 0315ae7043 | |||
| 159373354f | |||
| 221b262562 | |||
| 067e616c70 | |||
| af5b6eb840 | |||
| 97aa13c6b3 | |||
| fe292f9a0e | |||
| fb00e72650 | |||
| 6831ad1f03 | |||
| d12926dda8 | |||
| b24fa2e13d | |||
| 9ac1707617 | |||
| e442576391 | |||
| 38cf7ddd0a | |||
| 564f4938fa | |||
| db9b42d8b3 | |||
| 084bf8bba8 | |||
| 1f73b62605 | |||
| 2280ef9fef | |||
| bc99ef25b5 | |||
| 1353a8ff29 | |||
| 67bbec9f83 | |||
| 721c3e23e7 | |||
| 98a029dc37 | |||
| 6f070216b7 | |||
| 438b6d950e | |||
| e8b70e7d48 | |||
| a8c81cef12 | |||
| 65ca5f4a82 | |||
| 84ee914bea | |||
| ee8a96f0cf | |||
| 221932f90e | |||
| d7a1e900d9 | |||
| 88ea22caa0 | |||
| 8df7afa511 | |||
| cda41d6055 | |||
| 52e8cd2da6 | |||
| e323e4b3b4 | |||
| b8ddf52633 | |||
| e7eae03a9d | |||
| 5adee23135 | |||
| 9cd773dd63 | |||
| d78da41a47 | |||
| 3b862362fe | |||
| ee71fccc58 | |||
| 22a3c3145f | |||
| 3699ec494d | |||
| 0572da6853 | |||
| 38de32a680 | |||
| b7a91a8ea8 | |||
| 165cc12450 | |||
| 99c12fe33a | |||
| 723e2a571a | |||
| 49c86b1c85 | |||
| 02e2504ad2 | |||
| 9eab24730d | |||
| f4ea66ea31 | |||
| 7b7c6af453 | |||
| 888ada1263 | |||
| e8b95cacb4 | |||
| 50b35361a2 | |||
| f2239e668a | |||
| fa06ef0754 | |||
| ca5fcaad07 | |||
| 18020c3ce9 | |||
| 81d8f89552 | |||
| be3601b39d | |||
| 18267c3f71 | |||
| 4c11ae66e0 | |||
| 6465cd9ddc | |||
| c8a9ad0438 | |||
| dd7585f2a0 | |||
| a1f8a33737 | |||
| 7f308e4ee4 | |||
| e057dc84fc | |||
| eb55ef32e6 | |||
| 8d8ea2a6fb | |||
| bf36d12396 | |||
| 1da2665fa8 | |||
| cec0fb7a1a | |||
| 0c1da36fbd | |||
| affbeb666b | |||
| c0edb4295f | |||
| 3519493688 | |||
| f315c8a371 | |||
| 0cc8814188 | |||
| 121955d4b9 | |||
| c22e813d0a | |||
| d48b65f039 | |||
| 75409bffec | |||
| 62fc532e14 | |||
| e2101b6059 | |||
| 6f31d28cc2 | |||
| ceeed62eaa | |||
| 33cd40694c | |||
| 7accc13053 | |||
| c8b21cb41c | |||
| bebfd4acdb | |||
| 1e3f814137 | |||
| b095939837 | |||
| 6a2e525441 | |||
| c891697abc | |||
| 15a346e47b | |||
| d8bffaacfc | |||
| 55f18c66b9 | |||
| 7be10bda0c | |||
| cd908faf09 | |||
| f5fc8c3146 | |||
| ca91eaf3bc | |||
| a680791adf | |||
| 56cc6199ed | |||
| 73c45e8923 | |||
| cfaef4207e | |||
| 963a57fca2 | |||
| d0d6640131 | |||
| 2db2d5e068 | |||
| fb96362ea7 | |||
| 34f8f4f8c1 | |||
| 5d29e5ef2e | |||
| c90af8f58f | |||
| 3cf102b037 | |||
| 50c2c15c02 | |||
| f3965fc807 | |||
| 0efd364260 | |||
| f1d32c0ba4 | |||
| 1867a71993 | |||
| 773092b1ba | |||
| 1f10003776 | |||
| e07a953360 | |||
| a7fdd8be9f | |||
| 9f2e517d35 | |||
| cc08b429d6 | |||
| 1a2e2cf580 | |||
| 13da68bf64 | |||
| de9ab79d1c | |||
| 085973885c | |||
| 7ec3ae41ed | |||
| b4ec3b127d | |||
| d99e4f7fb7 | |||
| 6a09b56a1d | |||
| 46325dc97d | |||
| 73ff6292cf | |||
| 4f7abe45c3 | |||
| d6ae6a03ac | |||
| 1c7fc9fbda | |||
| ab178c9b5a | |||
| 4aab974d50 | |||
| a331fa1519 | |||
| f06bd59a7c | |||
| f62d773556 | |||
| f8c80670df | |||
| 2d3a376ff7 | |||
| be38484a23 | |||
| 5de624ae12 | |||
| 0f3a12a87d | |||
| 644939779e | |||
| 302f5fd32d | |||
| adef02452e | |||
| 2a2bf3d8ae | |||
| cd985561af | |||
| 5b117b9057 | |||
| ab5e8d8fe6 | |||
| 3ab84b2037 | |||
| 22cc3c1392 | |||
| c886dc64f6 | |||
| d6e4224bac | |||
| 44ea5c657d | |||
| 6c40c0b228 | |||
| 63871a2d45 | |||
| 1711733072 | |||
| 6992c8f07b | |||
| 4cae82c200 | |||
| 3937b36892 | |||
| 57b68d747e | |||
| 962e96ee07 | |||
| 77365cb512 | |||
| f1e9936bf9 | |||
| d0a6d2e0a9 | |||
| 1772d4da54 | |||
| dd10ef93a0 | |||
| 842be469b5 | |||
| df8d1e0e43 | |||
| 132c6c5288 | |||
| a835dfba04 | |||
| 62f5de810e | |||
| 108e10a545 | |||
| 16c606af39 | |||
| 7b444e62d9 | |||
| 9381244bd0 | |||
| d4890e6c13 | |||
| 560056d503 | |||
| 37b7013655 | |||
| 05506a75ad | |||
| 1b4032acc3 | |||
| 011ef949fe | |||
| 80f014b5ff | |||
| f1f194c184 | |||
| 55a5d94300 | |||
| f8c4f60a2d | |||
| 5401e6a6e7 | |||
| a5c5d1cc2f | |||
| 32d3b66115 | |||
| 884f55e784 | |||
| f0a5d00b7c | |||
| 3a382278d4 | |||
| 4d1c5fb7c5 | |||
| f643161c0d | |||
| 7560d525c3 | |||
| 1ad05d7a83 | |||
| 38a95848eb | |||
| 122ce374ff | |||
| 550effdd16 | |||
| 2b5962c4b8 | |||
| c4f27d6626 | |||
| fdf5e79a2d | |||
| fa60ea5b65 |
@@ -1,13 +1,13 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
adguardhome:
|
||||
image: adguard/adguardhome:v0.107.69
|
||||
container_name: adguardhome
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
ports:
|
||||
- 3003:3000
|
||||
volumes:
|
||||
- /docker/Daten/adguardhome/work:/opt/adguardhome/work
|
||||
- /docker/Daten/adguardhome/conf:/opt/adguardhome/conf
|
||||
- /srv/docker/daten/adguardhome/work:/opt/adguardhome/work
|
||||
- /srv/docker/daten/adguardhome/conf:/opt/adguardhome/conf
|
||||
environment:
|
||||
TZ: Europe/Berlin
|
||||
15
compose/caddy/docker-compose.yml
Normal file
15
compose/caddy/docker-compose.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
######### AKTUELL DOWN ##########
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
caddy:
|
||||
image: caddy:latest
|
||||
container_name: caddy
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- /srv/docker/daten/caddy/Caddyfile:/etc/caddy/Caddyfile
|
||||
- /srv/docker/daten/caddy/data:/data
|
||||
- /srv/docker/daten/caddy/config:/config
|
||||
76
compose/docker-compose.yml
Normal file
76
compose/docker-compose.yml
Normal file
@@ -0,0 +1,76 @@
|
||||
#
|
||||
# WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose
|
||||
#
|
||||
# Make sure to use the docker-compose.yml of the current release:
|
||||
#
|
||||
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
|
||||
#
|
||||
# The compose file on main may not be compatible with the latest release.
|
||||
|
||||
name: immich
|
||||
|
||||
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}:/data
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
env_file:
|
||||
- .env
|
||||
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, rocm, openvino, rknn] 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://docs.immich.app/features/ml-hardware-acceleration
|
||||
# file: hwaccel.ml.yml
|
||||
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
|
||||
volumes:
|
||||
- model-cache:/cache
|
||||
env_file:
|
||||
- .env
|
||||
restart: always
|
||||
healthcheck:
|
||||
disable: false
|
||||
|
||||
redis:
|
||||
container_name: immich_redis
|
||||
image: docker.io/valkey/valkey:9@sha256:3eeb09785cd61ec8e3be35f8804c8892080f3ca21934d628abc24ee4ed1698f6
|
||||
healthcheck:
|
||||
test: redis-cli ping || exit 1
|
||||
restart: always
|
||||
|
||||
database:
|
||||
container_name: immich_postgres
|
||||
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
|
||||
environment:
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||
POSTGRES_USER: ${DB_USERNAME}
|
||||
POSTGRES_DB: ${DB_DATABASE_NAME}
|
||||
POSTGRES_INITDB_ARGS: '--data-checksums'
|
||||
# Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
|
||||
# DB_STORAGE_TYPE: 'HDD'
|
||||
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
|
||||
shm_size: 128mb
|
||||
restart: always
|
||||
healthcheck:
|
||||
disable: false
|
||||
|
||||
volumes:
|
||||
model-cache:
|
||||
@@ -1,18 +1,16 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
server:
|
||||
image: gitea/gitea:1.24
|
||||
container_name: gitea
|
||||
environment:
|
||||
- USER_UID=1000
|
||||
- USER_GID=1000
|
||||
- USER_UID=1001
|
||||
- USER_GID=1001
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- gitea
|
||||
- bruchtal-net # 👈 neu für bruchtal-webhook
|
||||
volumes:
|
||||
- /docker/Daten/gitea/data:/data
|
||||
- /srv/docker/daten/gitea/data:/data
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
ports:
|
||||
@@ -23,4 +21,4 @@ networks:
|
||||
gitea:
|
||||
external: false
|
||||
bruchtal-net: # 👈 neu für bruchtal-webhook
|
||||
external: true
|
||||
external: true
|
||||
@@ -1,16 +1,18 @@
|
||||
version: "2.1"
|
||||
## test
|
||||
|
||||
services:
|
||||
heimdall:
|
||||
image: lscr.io/linuxserver/heimdall:latest
|
||||
container_name: heimdall2
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- PUID=1001
|
||||
- PGID=1001
|
||||
- TZ=Europe/Berlin
|
||||
volumes:
|
||||
- /home/christian/docker/heimdall/data/config:/config
|
||||
- /srv/docker/daten/heimdall/config:/config
|
||||
|
||||
ports:
|
||||
- 1280:80
|
||||
- 12443:443
|
||||
restart: unless-stopped
|
||||
|
||||
34
compose/homepage/docker-compose.yml
Normal file
34
compose/homepage/docker-compose.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
|
||||
dockerproxy:
|
||||
image: ghcr.io/tecnativa/docker-socket-proxy:latest
|
||||
container_name: dockerproxy
|
||||
environment:
|
||||
- CONTAINERS=1 # Allow access to viewing containers
|
||||
- SERVICES=1 # Allow access to viewing services (necessary when using Docker Swarm)
|
||||
- TASKS=1 # Allow access to viewing tasks (necessary when using Docker Swarm)
|
||||
- POST=0 # Disallow any POST operations (effectively read-only)
|
||||
ports:
|
||||
- 127.0.0.1:2375:2375
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro # Mounted as read-only
|
||||
restart: unless-stopped
|
||||
|
||||
homepage:
|
||||
image: ghcr.io/gethomepage/homepage:latest
|
||||
container_name: homepage
|
||||
# network_mode: host
|
||||
ports:
|
||||
- "3004:3000"
|
||||
volumes:
|
||||
- /srv/docker/daten/homepage:/app/config
|
||||
- /srv/docker/daten/homepage/icons:/app/public/icons
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
environment:
|
||||
# - PORT=8080
|
||||
- NODE_TLS_REJECT_UNAUTHORIZED=0
|
||||
# - HOMEPAGE_ALLOWED_HOSTS=192.168.178.204:8080,192.168.178.204,localhost:8080,localhost,127.0.0.1
|
||||
- HOMEPAGE_ALLOWED_HOSTS=192.168.178.204,192.168.178.204:3004,localhost,127.0.0.1
|
||||
restart: unless-stopped
|
||||
84
compose/immich/docker-compose.yml
Normal file
84
compose/immich/docker-compose.yml
Normal file
@@ -0,0 +1,84 @@
|
||||
#
|
||||
# WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose
|
||||
#
|
||||
# Make sure to use the docker-compose.yml of the current release:
|
||||
#
|
||||
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
|
||||
#
|
||||
# The compose file on main may not be compatible with the latest release.
|
||||
|
||||
name: immich
|
||||
|
||||
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
|
||||
#user: "1001:1001"
|
||||
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}:/data
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
env_file:
|
||||
- .env
|
||||
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, rocm, openvino, rknn] 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://docs.immich.app/features/ml-hardware-acceleration
|
||||
# file: hwaccel.ml.yml
|
||||
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
|
||||
#user: "1001:1001"
|
||||
environment:
|
||||
- MPLCONFIGDIR=/cache/.matplotlib
|
||||
- IMMICH_TEMP_DIR=/cache/temp
|
||||
volumes:
|
||||
- /srv/docker/daten/immich/model-cache:/cache
|
||||
- ${UPLOAD_LOCATION}:/data # <<< hier hinzufügen
|
||||
env_file:
|
||||
- .env
|
||||
restart: always
|
||||
healthcheck:
|
||||
disable: false
|
||||
|
||||
redis:
|
||||
container_name: immich_redis
|
||||
image: docker.io/valkey/valkey:9@sha256:3eeb09785cd61ec8e3be35f8804c8892080f3ca21934d628abc24ee4ed1698f6
|
||||
#user: "1001:1001"
|
||||
healthcheck:
|
||||
test: redis-cli ping || exit 1
|
||||
restart: always
|
||||
|
||||
database:
|
||||
container_name: immich_postgres
|
||||
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
|
||||
#user: "1001:1001"
|
||||
environment:
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||
POSTGRES_USER: ${DB_USERNAME}
|
||||
POSTGRES_DB: ${DB_DATABASE_NAME}
|
||||
POSTGRES_INITDB_ARGS: '--data-checksums'
|
||||
# Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
|
||||
# DB_STORAGE_TYPE: 'HDD'
|
||||
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
|
||||
shm_size: 128mb
|
||||
restart: always
|
||||
healthcheck:
|
||||
disable: false
|
||||
|
||||
volumes:
|
||||
model-cache:
|
||||
10
compose/kea/docker-compose.yml
Normal file
10
compose/kea/docker-compose.yml
Normal file
@@ -0,0 +1,10 @@
|
||||
######### AKTUELL DOWN ##########
|
||||
services:
|
||||
kea-dhcp4:
|
||||
image: serhiymakarenko/isc-kea-dhcp4-server:latest
|
||||
container_name: kea-dhcp4
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
volumes:
|
||||
- /home/christian/docker/kea/config:/etc/kea:ro
|
||||
- /home/christian/docker/kea/leases:/var/lib/kea
|
||||
62
compose/monitoring/docker-compose.yml
Normal file
62
compose/monitoring/docker-compose.yml
Normal file
@@ -0,0 +1,62 @@
|
||||
services:
|
||||
prometheus:
|
||||
image: prom/prometheus:latest
|
||||
container_name: prometheus
|
||||
restart: unless-stopped
|
||||
user: "root" # Verhindert Permission-Probleme beim Lesen der Config
|
||||
volumes:
|
||||
- /srv/docker/daten/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
||||
- /srv/docker/daten/prometheus:/prometheus
|
||||
command:
|
||||
- '--config.file=/etc/prometheus/prometheus.yml'
|
||||
- '--storage.tsdb.path=/prometheus'
|
||||
ports:
|
||||
- "9090:9090"
|
||||
|
||||
grafana:
|
||||
image: grafana/grafana:latest
|
||||
container_name: grafana
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- GF_SECURITY_ADMIN_PASSWORD=admin
|
||||
volumes:
|
||||
- /srv/docker/daten/grafana:/var/lib/grafana
|
||||
ports:
|
||||
- "3000:3000"
|
||||
|
||||
node-exporter:
|
||||
image: prom/node-exporter:latest
|
||||
container_name: node-exporter
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /proc:/host/proc:ro
|
||||
- /sys:/host/sys:ro
|
||||
- /:/rootfs:ro
|
||||
command:
|
||||
- '--path.procfs=/host/proc'
|
||||
- '--path.rootfs=/rootfs'
|
||||
- '--path.sysfs=/host/sys'
|
||||
|
||||
cadvisor:
|
||||
image: gcr.io/cadvisor/cadvisor:v0.49.1
|
||||
container_name: cadvisor
|
||||
restart: unless-stopped
|
||||
privileged: true
|
||||
devices:
|
||||
- /dev/kmsg
|
||||
volumes:
|
||||
- /:/rootfs:ro
|
||||
- /var/run:/var/run:ro
|
||||
- /sys:/sys:ro
|
||||
- /var/lib/docker/:/var/lib/docker:ro
|
||||
- /dev/disk/:/dev/disk:ro
|
||||
|
||||
proxmox-exporter:
|
||||
image: ghcr.io/prometheus-pve/prometheus-pve-exporter:latest
|
||||
container_name: proxmox-exporter
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
# Wir mounten das VERZEICHNIS. Darin liegt die pve.yml
|
||||
- /srv/docker/daten/proxmox-exporter:/etc/prometheus:ro
|
||||
ports:
|
||||
- "9221:9221"
|
||||
37
compose/newt/docker-compose.yml
Normal file
37
compose/newt/docker-compose.yml
Normal file
@@ -0,0 +1,37 @@
|
||||
services:
|
||||
newt:
|
||||
command:
|
||||
- newt
|
||||
container_name: newt
|
||||
entrypoint:
|
||||
- /entrypoint.sh
|
||||
environment:
|
||||
- PANGOLIN_ENDPOINT=https://tunnel.seanluc.de
|
||||
- NEWT_ID=q8ddcxxoutrrhnc
|
||||
- NEWT_SECRET=4vl316fhjkht127zxwndxryz13zu4w5w2jh7vm38eq7zja56
|
||||
- PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
hostname: 60a60dd2e962
|
||||
image: fosrl/newt
|
||||
ipc: private
|
||||
labels:
|
||||
com.docker.compose.config-hash: 66bc96213313b76f1a9874ff172919dad568b0964c744d55534da6566a2a0a2a
|
||||
com.docker.compose.container-number: 1
|
||||
com.docker.compose.depends_on: ""
|
||||
com.docker.compose.image: sha256:b6f17a3a018ea6803f386a3ee028765e001c862d521397fdfe6053531462f212
|
||||
com.docker.compose.oneoff: False
|
||||
com.docker.compose.project: pangolintunnel
|
||||
com.docker.compose.project.config_files: ""
|
||||
com.docker.compose.project.working_dir: /data/compose/1/v4
|
||||
com.docker.compose.replace: 490f03e84817d49e3242fa6ddd529de25d937744991fee24d50224d3fbf9ab0e
|
||||
com.docker.compose.service: newt
|
||||
com.docker.compose.version: ""
|
||||
logging:
|
||||
driver: json-file
|
||||
options: {}
|
||||
networks:
|
||||
- pangolintunnel_default
|
||||
restart: unless-stopped
|
||||
working_dir: /
|
||||
networks:
|
||||
pangolintunnel_default:
|
||||
external: true
|
||||
58
compose/nextcloud/docker-compose.yml
Normal file
58
compose/nextcloud/docker-compose.yml
Normal file
@@ -0,0 +1,58 @@
|
||||
services:
|
||||
db:
|
||||
image: mariadb:latest
|
||||
container_name: nextcloud-db
|
||||
volumes:
|
||||
- /srv/docker/daten/nextcloud/db:/var/lib/mysql
|
||||
networks:
|
||||
- default
|
||||
restart: always
|
||||
environment:
|
||||
TZ: europe/berlin
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
||||
MYSQL_USER: ${MYSQL_USER}
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
||||
redis:
|
||||
image: redis:latest
|
||||
container_name: nextcloud-redis
|
||||
restart: always
|
||||
volumes:
|
||||
- /srv/docker/daten/nextcloud/redis:/data
|
||||
networks:
|
||||
- proxy
|
||||
- default
|
||||
|
||||
nextcloud:
|
||||
depends_on:
|
||||
- redis
|
||||
- db
|
||||
image: nextcloud
|
||||
container_name: nextcloud
|
||||
volumes:
|
||||
- /srv/docker/daten/nextcloud/www:/var/www/html
|
||||
networks:
|
||||
- proxy
|
||||
- default
|
||||
ports:
|
||||
- 1180:80
|
||||
- 1444:443
|
||||
restart: always
|
||||
environment:
|
||||
REDIS_HOST: redis
|
||||
MYSQL_HOST: db:3306
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
||||
MYSQL_USER: ${MYSQL_USER}
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
||||
PUID: "1001"
|
||||
PGID: "1001"
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
|
||||
volumes:
|
||||
nextcloud-db-data:
|
||||
name: nextcloud-db-data
|
||||
redis:
|
||||
name: nextcloud-redis
|
||||
|
||||
40
compose/pihole/docker-compose.yml
Normal file
40
compose/pihole/docker-compose.yml
Normal file
@@ -0,0 +1,40 @@
|
||||
# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
|
||||
services:
|
||||
pihole:
|
||||
container_name: pihole
|
||||
image: pihole/pihole:latest
|
||||
ports:
|
||||
# DNS Ports
|
||||
- "53:53/tcp"
|
||||
- "53:53/udp"
|
||||
# Default HTTP Port
|
||||
- "3080:80/tcp"
|
||||
# Default HTTPs Port. FTL will generate a self-signed certificate
|
||||
- "8443:443/tcp"
|
||||
# Uncomment the below if using Pi-hole as your DHCP Server
|
||||
#- "67:67/udp"
|
||||
# Uncomment the line below if you are using Pi-hole as your NTP server
|
||||
#- "123:123/udp"
|
||||
environment:
|
||||
# Set the appropriate timezone for your location from
|
||||
# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones, e.g:
|
||||
TZ: 'Europe/Berlin'
|
||||
# Set a password to access the web interface. Not setting one will result in a random password being assigned
|
||||
FTLCONF_webserver_api_password: '!!Zazen17**'
|
||||
# If using Docker's default `bridge` network setting the dns listening mode should be set to 'ALL'
|
||||
FTLCONF_dns_listeningMode: 'ALL'
|
||||
# Volumes store your data between container upgrades
|
||||
volumes:
|
||||
# For persisting Pi-hole's databases and common configuration file
|
||||
- '/docker/Daten/pihole:/etc/pihole'
|
||||
# Uncomment the below if you have custom dnsmasq config files that you want to persist. Not needed for most starting fresh with Pi-hole v6. If you're upgrading from v5 you and have used this directory before, you should keep it enabled for the first v6 container start to allow for a complete migration. It can be removed afterwards. Needs environment variable FTLCONF_misc_etc_dnsmasq_d: 'true'
|
||||
#- './etc-dnsmasq.d:/etc/dnsmasq.d'
|
||||
cap_add:
|
||||
# See https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
|
||||
# Required if you are using Pi-hole as your DHCP server, else not needed
|
||||
- NET_ADMIN
|
||||
# Required if you are using Pi-hole as your NTP client to be able to set the host's system time
|
||||
- SYS_TIME
|
||||
# Optional, if Pi-hole should get some more processing time
|
||||
- SYS_NICE
|
||||
restart: unless-stopped
|
||||
12
compose/portainer/docker-compose.yml
Normal file
12
compose/portainer/docker-compose.yml
Normal file
@@ -0,0 +1,12 @@
|
||||
services:
|
||||
portainer:
|
||||
image: portainer/portainer-ee:2.27.3
|
||||
container_name: portainer
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9000:9000" # Webinterface
|
||||
- "9443:9443"
|
||||
volumes:
|
||||
- /srv/docker/daten/portainer-data:/data:rw # Portainer-Daten (DB + Key)
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
16
compose/tvheadend/docker-compose.yml
Normal file
16
compose/tvheadend/docker-compose.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
services:
|
||||
tvheadend:
|
||||
image: lscr.io/linuxserver/tvheadend:latest
|
||||
container_name: tvheadend
|
||||
network_mode: host
|
||||
|
||||
environment:
|
||||
- PUID=1001
|
||||
- PGID=1001
|
||||
- TZ=Europe/Berlin
|
||||
|
||||
volumes:
|
||||
- /srv/docker/daten/tvheadend/config:/config
|
||||
- /srv/docker/daten/tvheadend/recordings:/recordings
|
||||
|
||||
restart: unless-stopped
|
||||
11
compose/uptime-kuma/docker-compose.yml
Normal file
11
compose/uptime-kuma/docker-compose.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
uptime-kuma:
|
||||
image: louislam/uptime-kuma:latest
|
||||
container_name: uptime-kuma
|
||||
ports:
|
||||
- "3006:3001"
|
||||
volumes:
|
||||
- /srv/docker/daten/uptime-kuma:/app/data
|
||||
restart: unless-stopped
|
||||
17
compose/vaultwarden/docker-compose.yml
Normal file
17
compose/vaultwarden/docker-compose.yml
Normal file
@@ -0,0 +1,17 @@
|
||||
services:
|
||||
vaultwarden:
|
||||
image: vaultwarden/server:latest
|
||||
container_name: vaultwarden4
|
||||
restart: always
|
||||
volumes:
|
||||
- /srv/docker/daten/vaultwarden/bw-data:/data
|
||||
|
||||
environment:
|
||||
- ADMIN_TOKEN=${VAULTWARDEN_ADMIN_TOKEN}
|
||||
- WEBSOCKET_ENABLED=true
|
||||
ports:
|
||||
- 1380:80
|
||||
- 1443:443
|
||||
|
||||
|
||||
|
||||
1
compose/vaultwarden/stack.env
Normal file
1
compose/vaultwarden/stack.env
Normal file
@@ -0,0 +1 @@
|
||||
VAULTWARDEN_ADMIN_TOKEN='$argon2i$v=19$m=16,t=2,p=1$QWlraWRvMTc$5+whtbbk9O625JUlcDikMQ'
|
||||
24
compose/vaultwarden_backup/docker-compose.yml
Normal file
24
compose/vaultwarden_backup/docker-compose.yml
Normal file
@@ -0,0 +1,24 @@
|
||||
services:
|
||||
vaultwarden_backup:
|
||||
image: bruceforce/vaultwarden-backup
|
||||
container_name: vaultwarden_backup
|
||||
restart: unless-stopped
|
||||
init: true
|
||||
volumes:
|
||||
- /srv/docker/daten/vaultwarden/bw-data:/data/
|
||||
- /mnt/vaultwardenBackupOnQnap:/backups/
|
||||
- /mnt/vaultwardenBackupOnQnap/logs:/logs/
|
||||
environment:
|
||||
- BACKUP_DIR=/backups/
|
||||
- LOG_DIR=/logs/
|
||||
- CRON_TIME=0 5 * * *
|
||||
- DELETE_AFTER=30
|
||||
- TIMESTAMP=true
|
||||
- BACKUP_ON_STARTUP=true
|
||||
- BACKUP_ADD_DATABASE=true
|
||||
- BACKUP_ADD_ATTACHMENTS=true
|
||||
- BACKUP_ADD_CONFIG_JSON=true
|
||||
- BACKUP_ADD_ICON_CACHE=true
|
||||
- BACKUP_ADD_RSA_KEY=true
|
||||
- LOG_LEVEL=INFO
|
||||
- TZ= Europe/Berlin
|
||||
8
compose/webhook/deploy/Dockerfile
Normal file
8
compose/webhook/deploy/Dockerfile
Normal file
@@ -0,0 +1,8 @@
|
||||
FROM thecatlady/webhook:2.8.0
|
||||
|
||||
USER root
|
||||
|
||||
RUN apk add --no-cache git docker-cli bash openssh-client docker-compose
|
||||
|
||||
RUN mkdir -p /root/.ssh && \
|
||||
ssh-keyscan 192.168.178.204 >> /root/.ssh/known_hosts
|
||||
31
compose/webhook/docker-compose.yml
Normal file
31
compose/webhook/docker-compose.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
services:
|
||||
bruchtal-webhook:
|
||||
build: ./deploy
|
||||
container_name: webhook
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9001:9001"
|
||||
volumes:
|
||||
- /srv/docker/repo:/workspace
|
||||
- /srv/docker/scripts/webhook-deploy/hooks.json:/hooks/hooks.json:ro
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- /root/.ssh:/root/.ssh:ro
|
||||
|
||||
# environment:
|
||||
# - WEBHOOK_ALLOWED_HOST_LIST=192.168.178.204,0.0.0.0,localhost
|
||||
# - WEBHOOK_VERBOSE=true
|
||||
# - WEBHOOK_PORT=9001
|
||||
# - WEBHOOK_IP=0.0.0.0
|
||||
|
||||
command: [
|
||||
"-hooks", "/hooks/hooks.json",
|
||||
"-verbose", "-port", "9001",
|
||||
"-ip", "0.0.0.0",
|
||||
# "-allowed-host-list", "0.0.0.0,192.168.178.204,localhost"
|
||||
]
|
||||
networks:
|
||||
- bruchtal-net
|
||||
|
||||
networks:
|
||||
bruchtal-net:
|
||||
external: true
|
||||
@@ -1,4 +1,5 @@
|
||||
version: "2.1"
|
||||
######### AKTUELL DOWN ##########
|
||||
|
||||
services:
|
||||
wikijs:
|
||||
image: linuxserver/wikijs:2.5.312
|
||||
@@ -1,3 +0,0 @@
|
||||
FROM thecatlady/webhook:2.8.0
|
||||
USER root
|
||||
RUN apk add --no-cache git docker-cli bash
|
||||
@@ -1,25 +0,0 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
# test test
|
||||
|
||||
cd /docker/Bruchtal
|
||||
|
||||
echo "==> Pulling latest changes"
|
||||
git pull
|
||||
|
||||
echo "==> Checking for changed markdown files"
|
||||
|
||||
# Liste der Dateien im letzten Commit
|
||||
CHANGED_FILES=$(git diff --name-only HEAD@{1} HEAD)
|
||||
|
||||
echo "$CHANGED_FILES"
|
||||
|
||||
# Prüfen ob .md Datei enthalten ist
|
||||
if echo "$CHANGED_FILES" | grep -qE '\.md$'; then
|
||||
echo "==> Markdown changes detected. Restarting container..."
|
||||
docker restart bruchtal-docs
|
||||
else
|
||||
echo "==> No markdown changes detected. Skipping restart."
|
||||
fi
|
||||
|
||||
echo "==> Deploy finished"
|
||||
@@ -8,10 +8,10 @@ services:
|
||||
- "8005:8000"
|
||||
|
||||
volumes:
|
||||
- /docker/Bruchtal:/docs
|
||||
- /srv/docker/repo:/docs
|
||||
|
||||
command: serve --dev-addr=0.0.0.0:8000
|
||||
|
||||
environment:
|
||||
- TZ=Europe/Berlin
|
||||
- WATCHDOG_FORCE_POLLING=true
|
||||
# - WATCHDOG_FORCE_POLLING=true
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
services:
|
||||
bruchtal-webhook:
|
||||
build: ./deploy
|
||||
container_name: bruchtal-webhook
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9001:9001"
|
||||
volumes:
|
||||
- /docker/Bruchtal:/workspace
|
||||
- /docker/Bruchtal/deploy/hooks.json:/hooks/hooks.json:ro
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
command: ["-hooks", "/hooks/hooks.json", "-verbose", "-port", "9001", "-ip", "0.0.0.0"]
|
||||
4
docs/backup_restore/docker/docker_backup.md
Normal file
4
docs/backup_restore/docker/docker_backup.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# Docker Backup
|
||||
|
||||
Docker läuft als VM unter Proxmox und wird dort täglich vollständig auf der Qnap gesichert
|
||||
[=> Proxmox_Backup:](../../backup_restore/proxmox/proxmox_backup.md)
|
||||
5
docs/backup_restore/hetzner/seanluc1_backup.md
Normal file
5
docs/backup_restore/hetzner/seanluc1_backup.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# Server Seanluc1
|
||||
|
||||
- Location: Hetzner
|
||||
- Schedule: täglich
|
||||
- Skript: Hetzner Voreinstellung
|
||||
@@ -0,0 +1,18 @@
|
||||
# Homeassistent
|
||||
|
||||
## läuft als VM unter Proxmox und wird dort täglich vollständig auf der Qnap gesichert
|
||||
[=> Proxmox_Backup:](../../backup_restore/proxmox/proxmox_backup.md)
|
||||
|
||||
## aus HA heraus
|
||||
=> Einstellungen => System => Speicher
|
||||
- Netzwerkspeicher
|
||||
- Verwendung: Backup
|
||||
- Server: 192.168.178.254 (Qnap)
|
||||
- Protokoll: NFS
|
||||
- Remote Freigabepfad: Backups_homeassistant
|
||||
|
||||
=> Einstellungen => System => Backups
|
||||
- Täglich und 7 Backups aufbewahren
|
||||
- zu sichernde Daten: HA Einstellungen, Verlauf
|
||||
- Speicherorte: Backups_homeassistant
|
||||
|
||||
177
docs/backup_restore/proxmox/paperless/paperless_backup.md
Normal file
177
docs/backup_restore/proxmox/paperless/paperless_backup.md
Normal file
@@ -0,0 +1,177 @@
|
||||
# Paperless Backup
|
||||
|
||||
- tägliches backup der VM unter Proxmox auf der QNAP [=> Proxmox_Backup](/docs/backup_restore/proxmox/proxmox_backup.md)
|
||||
- Sicherung der Nutzdaten: erfolgt per Skript und cron auf hetzner.storage
|
||||
|
||||
<details>
|
||||
<summary>Location /paperless/backup_storage:</summary>
|
||||
```
|
||||
#!/usr/bin/env bash
|
||||
#####!/bin/bash
|
||||
|
||||
########### Initialisierung ##############
|
||||
#### https://docs.hetzner.com/de/robot/storage-box/backup-space-ssh-keys/
|
||||
|
||||
## Führe auf dem Clienten die folgenden Befehle aus:
|
||||
# ssh-keygen
|
||||
# cat ~/.ssh/id_rsa.pub | ssh -p23 u338XXX@u338XXX.your-storagebox.de install-ssh-key
|
||||
|
||||
###### Hier deine Daten einfügen #########
|
||||
export BORG_PASSPHRASE="%ci5pKqWvXj!iBm9khAR@Z2ohJ2inMMht8ZNsU*"
|
||||
|
||||
BACKUP_USER="u358899"
|
||||
REPOSITORY_DIR="paperless"
|
||||
##########################################
|
||||
|
||||
LOG_DIR="/paperless/backuplogs"
|
||||
LOG="$LOG_DIR/backup_storage.log"
|
||||
|
||||
echo "MOIN!" >> /paperless/test.log
|
||||
|
||||
if [ ! -d "$LOG_DIR" ]; then
|
||||
mkdir -p "$LOG_DIR"
|
||||
fi
|
||||
|
||||
|
||||
full_path=$(realpath $0)
|
||||
dir_path=$(dirname $full_path)
|
||||
echo $dir_path
|
||||
|
||||
## Hinweis: Für die Verwendung mit einem Backup-Account muss
|
||||
## 'your-storagebox.de' in 'your-backup.de' geändert werden.
|
||||
|
||||
REPOSITORY="ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}"
|
||||
|
||||
## Zeitstempel-Variable setzen
|
||||
TIMESTAMP=$(date +'%Y-%m-%d_%H:%M')
|
||||
|
||||
##
|
||||
## Ausgabe in Logdatei schreiben
|
||||
##
|
||||
|
||||
exec > >(tee -i ${LOG})
|
||||
exec 2>&1
|
||||
|
||||
start_time=$(date +'%Y-%m-%d %H:%M:%S')
|
||||
echo "###### Backup gestartet: $start_time ######"
|
||||
|
||||
## Überprüfen, ob eine spezielle Aktion durchgeführt werden soll
|
||||
BACKUP_SUFFIX=""
|
||||
case "$1" in
|
||||
NEW_INIT)
|
||||
echo "Überprüfe, ob das Verzeichnis backups/${REPOSITORY_DIR} existiert..."
|
||||
ssh -p23 ${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de "[ -d backups/${REPOSITORY_DIR} ] || mkdir -p backups/${REPOSITORY_DIR}"
|
||||
echo "Das Repository wird komplett gelöscht und neu angelegt..."
|
||||
borg delete --force --stats $REPOSITORY
|
||||
borg init --encryption=repokey $REPOSITORY
|
||||
BACKUP_SUFFIX="_NEW_INIT"
|
||||
;;
|
||||
INIT)
|
||||
echo "Überprüfe, ob das Verzeichnis backups/${REPOSITORY_DIR} existiert..."
|
||||
ssh -p23 ${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de "[ -d backups/${REPOSITORY_DIR} ] || mkdir -p backups/${REPOSITORY_DIR}"
|
||||
echo "Überprüfe, ob das Repository existiert..."
|
||||
if borg info $REPOSITORY > /dev/null 2>&1; then
|
||||
echo "Das Repository existiert bereits. Vorgang wird abgebrochen."
|
||||
exit 1
|
||||
else
|
||||
echo "Das Repository wird neu angelegt..."
|
||||
borg init --encryption=repokey $REPOSITORY
|
||||
fi
|
||||
BACKUP_SUFFIX="_INIT"
|
||||
;;
|
||||
?)
|
||||
echo -e "\n######################################"
|
||||
echo -e "Verwendung des Backup-Skripts:"
|
||||
echo -e "######################################"
|
||||
echo -e "Ohne Parameter:"
|
||||
echo -e " Führt ein reguläres Backup durch und hängt an den Backup-Namen das aktuelle Datum und die Uhrzeit."
|
||||
echo -e "\nParameter:"
|
||||
echo -e " NEW_INIT - Löscht das Repository komplett und legt es neu an."
|
||||
echo -e " INIT - Legt das Repository neu an, wenn es nicht bereits existiert."
|
||||
echo -e " ? - Zeigt diese Hilfemeldung an und bricht das Skript ab."
|
||||
echo -e "\nBeispiele:"
|
||||
echo -e " ./backup_script.sh"
|
||||
echo -e " ./backup_script.sh NEW_INIT"
|
||||
echo -e " ./backup_script.sh INIT"
|
||||
echo -e " ./backup_script.sh ?"
|
||||
echo -e "\nBackups auflisten mit:"
|
||||
echo -e " borg list ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}\n"
|
||||
echo -e "Rücksichern einzelner Verzeichnisse mit:"
|
||||
echo -e " cd /mytmp # Wechseln Sie in ein Testverzeichnis, um das Backup zu testen."
|
||||
echo -e " borg extract ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}::${TIMESTAMP}${BACKUP_SUFFIX} etc var lib lib64 sbin usr bin"
|
||||
echo -e "######################################\n"
|
||||
echo -e "Komplette Rücksicherung mit:"
|
||||
echo -e "cd / # Wechseln Sie in das Root-Verzeichnis, um das gesamte System wiederherzustellen."
|
||||
echo -e "borg extract ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}::${TIMESTAMP}${BACKUP_SUFFIX}"
|
||||
echo -e "######################################\n"
|
||||
echo -e "Auf den Backup-Server verbinden:"
|
||||
echo -e "ssh -p23 ${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de"
|
||||
echo -e "Verzeichnisinhalt anzeigen:"
|
||||
echo -e "ls backups/${REPOSITORY_DIR}"
|
||||
echo -e "Verzeichnis der aktuellen Backups löschen:"
|
||||
echo -e "rm -rf backups/${REPOSITORY_DIR}"
|
||||
echo -e "######################################\n"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
## Überprüfen, ob ein zusätzlicher Parameter übergeben wurde
|
||||
if [ -n "$1" ] && [ "$1" != "INIT" ] && [ "$1" != "NEW_INIT" ]; then
|
||||
BACKUP_SUFFIX="_$1"
|
||||
fi
|
||||
|
||||
##
|
||||
## Zu sichernde Verzeichnisse
|
||||
##
|
||||
# Hier werden alle Verzeichnisse im Root-Verzeichnis gesichert, außer den ausgeschlossenen Verzeichnissen
|
||||
DIRS_TO_BACKUP=(
|
||||
"/paperless/paperless-ngx/export"
|
||||
)
|
||||
|
||||
##
|
||||
## Dateien ins Repository übertragen
|
||||
##
|
||||
|
||||
echo "Übertrage Dateien ..."
|
||||
borg create -v --stats \
|
||||
$REPOSITORY::"${TIMESTAMP}${BACKUP_SUFFIX}" \
|
||||
"${DIRS_TO_BACKUP[@]}" # \
|
||||
|
||||
|
||||
end_time=$(date +'%Y-%m-%d %H:%M:%S')
|
||||
duration=$(date -u -d @$(( $(date -d "$end_time" +%s) - $(date -d "$start_time" +%s) )) +%H:%M:%S)
|
||||
|
||||
echo "###### Backup beendet: $end_time ######"
|
||||
echo "Time (start): $start_time"
|
||||
echo "Time (end): $end_time"
|
||||
echo "Duration: $duration"
|
||||
|
||||
echo -e "\n######################################"
|
||||
echo -e "Backups auflisten mit:"
|
||||
echo -e "borg list ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}\n"
|
||||
|
||||
echo -e "Rücksichern einzelner Verzeichnisse mit:"
|
||||
echo -e "cd /mytmp # Wechseln Sie in ein Testverzeichnis, um das Backup zu testen."
|
||||
echo -e "borg extract ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}::${TIMESTAMP}${BACKUP_SUFFIX} etc var lib lib64 sbin usr bin"
|
||||
echo -e "######################################\n"
|
||||
|
||||
echo -e "Komplette Rücksicherung mit:"
|
||||
echo -e "borg extract ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}::${TIMESTAMP}${BACKUP_SUFFIX}"
|
||||
echo -e "######################################\n"
|
||||
|
||||
echo -e "Auf den Backup-Server verbinden:"
|
||||
echo -e "ssh -p23 ${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de"
|
||||
echo -e "Verzeichnisinhalt anzeigen:"
|
||||
echo -e "ls backups/${REPOSITORY_DIR}"
|
||||
echo -e "Verzeichnis der aktuellen Backups löschen:"
|
||||
echo
|
||||
|
||||
echo -e "rm -rf backups/${REPOSITORY_DIR}"
|
||||
echo -e "######################################\n"
|
||||
|
||||
borg list ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR} >> ${LOG}
|
||||
|
||||
|
||||
```
|
||||
</details>
|
||||
|
||||
123
docs/backup_restore/proxmox/proxmox_backup.md
Normal file
123
docs/backup_restore/proxmox/proxmox_backup.md
Normal file
@@ -0,0 +1,123 @@
|
||||
# Backup Proxmox
|
||||
|
||||
## 1. PVE
|
||||
- Location: verschlüsselt auf hetznerstoragebox gemäß Anleitung https://ralf-peter-kleinert.de/linux-server/proxmox-verschluesselt-backup.html. (Die liegt auch als Anhang im bitwarden)
|
||||
- Scedule: täglich im cron und wird 14 Tage aufgehoben
|
||||
- ÄNDERUNGEN siehe
|
||||
|
||||
<details>
|
||||
<summary>Location: /etc/fstab</summary>
|
||||
```
|
||||
#QNAP
|
||||
//192.168.178.254/qnapmultimedia /mnt/qnapmount_mm cifs user,credentials=/root/.credentials/qnapcreds,iocharset=utf8,noperm 0 0
|
||||
//192.168.178.254/Backups /mnt/qnapmount_backups cifs user,credentials=/root/.credentials/qnapcreds,iocharset=utf8,noperm 0 0
|
||||
|
||||
#Hetznerbox
|
||||
//u358899.your-storagebox.de/backup /mnt/hetznerbox cifs user,credentials=/root/.credentials/hetznercreds,iocharset=utf8,noperm 0 0
|
||||
#//u358899.your-storagebox.de/backups /mnt/hetznerbox cifs username=u358899,password=vgceBjPMxwq2eT7k,rw
|
||||
|
||||
#Storagebox Crypted
|
||||
//u358899.your-storagebox.de/backup/backups/proxmox /mnt/storagebox-crypted cifs credentials=/root/.credentials/hetznercreds,iocharset=utf8,rw,_netdev,uid=0,gid=0,file_mode=0660,dir_mode=0770 0 0
|
||||
#Storagebox Uncrypted - wird automatisch mit Crypted verbunden
|
||||
/mnt/storagebox-crypted /mnt/storagebox-nocrypt fuse./usr/bin/gocryptfs rw,nofail,auto,x-systemd.idle-timeout=10,x-systemd.automount,allow_other,quiet,passfile=/root/.gocryptfspw 0 0
|
||||
|
||||
```
|
||||
</details>
|
||||
|
||||
- Log: /root/pve-backup.log
|
||||
- Skript:
|
||||
<details>
|
||||
<summary>Location: /root/backup-pve-configs.sh :</summary>
|
||||
```
|
||||
#!/bin/bash
|
||||
|
||||
BACKUP_DIR="/mnt/storagebox-nocrypt/pve-configs-backup"
|
||||
TODAY=$(date +%T_%F)-pve-configs-backup
|
||||
LOGFILE="pve-backup.log"
|
||||
|
||||
mkdir -p "$BACKUP_DIR/$TODAY"
|
||||
|
||||
FILES=(
|
||||
"/root/"
|
||||
"/etc/pve/"
|
||||
"/etc/network/interfaces"
|
||||
"/etc/hosts"
|
||||
"/etc/resolv.conf"
|
||||
"/etc/hostname"
|
||||
"/etc/timezone"
|
||||
"/etc/passwd"
|
||||
"/etc/group"
|
||||
"/etc/shadow"
|
||||
"/root/.ssh/"
|
||||
"/etc/vzdump.conf"
|
||||
"/etc/ssh/sshd_config"
|
||||
"/var/lib/pve-cluster/"
|
||||
"/etc/ssh/"
|
||||
"/etc/cron.d/"
|
||||
"/etc/cron.daily/"
|
||||
"/etc/cron.hourly/"
|
||||
"/etc/cron.weekly/"
|
||||
"/etc/cron.monthly/"
|
||||
"/var/spool/cron/"
|
||||
"/etc/fstab"
|
||||
"/etc/default/"
|
||||
"/etc/apt/sources.list"
|
||||
"/etc/apt/sources.list.d/"
|
||||
"/var/log/"
|
||||
"/etc/systemd/"
|
||||
"/etc/sysctl.conf"
|
||||
"/etc/security/"
|
||||
"/var/backups/"
|
||||
"/etc/fail2ban/"
|
||||
"/root/backup-pve-configs.sh"
|
||||
)
|
||||
|
||||
EXCLUDE_DIRS=(
|
||||
"/mnt/storagebox-crypt"
|
||||
"/mnt/storagebox-nocrypt"
|
||||
"/var/lib/vz/images/"
|
||||
"/var/lib/lxc/"
|
||||
"/var/lib/vz/private/"
|
||||
"/var/lib/lxcfs/"
|
||||
)
|
||||
|
||||
# rsync-Ausschlussparameter erstellen
|
||||
EXCLUDE_PARAMS=()
|
||||
for EXCLUDE in "${EXCLUDE_DIRS[@]}"; do
|
||||
EXCLUDE_PARAMS+=(--exclude="$EXCLUDE")
|
||||
done
|
||||
|
||||
for FILE in "${FILES[@]}"; do
|
||||
if [ -e "$FILE" ]; then
|
||||
echo "Kopiere $FILE..."
|
||||
rsync -aL --relative --ignore-missing-args --safe-links "${EXCLUDE_PARAMS[@]}" "$FILE" "$BACKUP_DIR/$TODAY/" 2>/dev/null
|
||||
else
|
||||
echo "Warnung: $FILE existiert nicht und wird uebersprungen." >> ${LOGFILE}
|
||||
fi
|
||||
done
|
||||
|
||||
find "$BACKUP_DIR" -mindepth 1 -maxdepth 1 -type d -mtime +14 -exec rm -rf {} \;
|
||||
|
||||
echo "Backup fuer $TODAY abgeschlossen." >> ${LOGFILE}
|
||||
|
||||
```
|
||||
</details>
|
||||
|
||||
|
||||
|
||||
## 2. Komplette lxc und VMs #
|
||||
- Skript: GUI
|
||||
- Log: GUI
|
||||
- Location: /QNAP_Bckups/Backups/proxmox
|
||||
- Scedule: 0:30, keep-dayily, keep-mpnthly=12, keep-weekly=4, keep-yearly=2
|
||||
|
||||
- **TODO: Borgbackup für Container**
|
||||
|
||||
|
||||
## weitere Datenbackups
|
||||
[=> Paperless Backup](paperless/paperless_backup.md)
|
||||
[=> Homeassistent Backup](paperless/homeassistent_backup.md)
|
||||
[=> TV-Headend](paperless/tv-headend_backup.md)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
## TV-Headend Backup
|
||||
|
||||
nur Containersicherung über [Proxmox backup](../proxmox_backup.md)
|
||||
32
docs/backup_restore/workstations/christian-linux_backup.md
Normal file
32
docs/backup_restore/workstations/christian-linux_backup.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# Backup Konfiguration christian-linux PC
|
||||
|
||||
Backupsystem läuft auf 2 Ebenen:
|
||||
- Systembackup: Timeshift
|
||||
- Datenbckup: Borgbackup mit Frontend Vortabackup
|
||||
|
||||
|
||||
## Systembackup: TimeshiftS
|
||||
- Benutzerdaten sind AUSgeschlossen
|
||||
- Schnappschusstyp: rsync
|
||||
- lokas auf SSD
|
||||
- Zeitplan: monatlich 6 , wöchentlich 4, täglich 5 aufheben
|
||||
|
||||
## Datenbackup: Vortabackup als Frontend für Borgbackup
|
||||
### Quellen:
|
||||
- /home/christian/
|
||||
- .ssh
|
||||
- thunderbird
|
||||
- Bilder
|
||||
- Dokumente
|
||||
- Inkrementelle Sicherung
|
||||
|
||||
### Repository:
|
||||
- ssh://u358899@u358899.your-storagebox.de:23/./backups/christianLinux
|
||||
- SSH-Schlüssel automatisch auswählen
|
||||
- Kompression: LZ4
|
||||
- Rhythmus: täglich 21:40 Uhr
|
||||
- Repo wird all 3 Wochen validiert
|
||||
|
||||
## Restore
|
||||
- Gezielt Dateien: Archiv einhängen (Mountpunkt: /home/christina/borgbackupHetzner), Dateien kopierne
|
||||
- allgemeines Restore: ausgewähltes Archiv -> exctract
|
||||
0
docs/backup_restore/workstations/opi-pc_backup.md
Normal file
0
docs/backup_restore/workstations/opi-pc_backup.md
Normal file
13
docs/backup_restore/workstations/workstation:backup.md
Normal file
13
docs/backup_restore/workstations/workstation:backup.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Backup Konfiguration Workstations
|
||||
## christian-linux-mint
|
||||
=> [christian-linux-mint](../workstations/christian-linux_backup.md)
|
||||
|
||||
## Christians Handy
|
||||
=> [christian-handy_backup.md](../workstations/christian-handy_backup.md)
|
||||
|
||||
## Dorotheas Labtop
|
||||
=> [dorothea-laptop_backup.md](../workstations/dorothea-laptop_backup.md)
|
||||
|
||||
## Opis PC
|
||||
=> [opi-pc_backup.md](../workstations/opi-pc_backup.md)
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
# Adguardhome
|
||||
|
||||
# Adguardhome - ist DOWN, ZUR ZEIT LÄUFT PIHOLE
|
||||
## Allgemein
|
||||
|
||||
- Image: `adguard/adguardhome:v0.107.69`
|
||||
@@ -16,7 +15,14 @@
|
||||
|
||||
## Deployment
|
||||
```bash
|
||||
cd /docker/Bruchtal/docker/adguardhome
|
||||
cd /docker/Bruchtal/compose/adguardhome
|
||||
git pull
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## aktuelles Skript
|
||||
|
||||
```snippet
|
||||
--8<-- "/docs/docker/adguardhome/docker-compose.yml"
|
||||
```
|
||||
|
||||
89
docs/docker/docker.md
Normal file
89
docs/docker/docker.md
Normal file
@@ -0,0 +1,89 @@
|
||||
# 🏗 Bruchtal Docker-Architektur
|
||||
|
||||
## Übersicht
|
||||
|
||||
Die Bruchtal-Infrastruktur läuft vollständig containerisiert auf einer VM.
|
||||
Alle Dienste kommunizieren über ein dediziertes Docker-Netzwerk, nutzen Git zur Versionierung und automatisches Deploy über Webhooks.
|
||||
|
||||
**Hauptkomponenten:**
|
||||
|
||||
| Service | Containername | Funktion |
|
||||
|----------------|-------------------|---------|
|
||||
| Gitea | `gitea` | Git-Server für Infrastruktur & Dokumentation |
|
||||
| Wiki.js | `wikijs` | Wissensmanagement & Dokumentation |
|
||||
| MkDocs | `bruchtal-docs` | Statische Markdown-Dokumentation |
|
||||
| Webhook | `bruchtal-webhook`| Automatisches Deploy bei Git Push |
|
||||
| Docker Host | VM | Plattform für alle Container |
|
||||
|
||||
---
|
||||
|
||||
## IP
|
||||
192.168.178.204
|
||||
|
||||
## derzeit belegte Ports:
|
||||
|
||||
| Port | Dienst | Container | Funktion | URL |
|
||||
|-------|--------------------|--------------|-----------------------------------|--------------------------------|
|
||||
| 9443 |Portainer | portainer | **reines Dashboard** für Docker | [portainer.seanluc.de](https://portainer.seanluc.de) |
|
||||
| 1380 | Vaultwarden | vaulttwarden | Passwortmanager | [bitwarden.seanluc.de](https://bitwarden.seanluc.de) |
|
||||
| 1180 | Nextcloud | nexcloud | Cloud | [nc.seanluc.de](https://nc.seanluc.de) |
|
||||
| 3002 | Gitea | gitea | Repo Verwaltung | [gitea.seanluc.de](https://gitea.seanluc.de) |
|
||||
| 9005 | Mkdocs | bruchtal-docs| Dokumentation | [doku.seanluc.de](doku.seanluc.de) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
## 🔗 Netzwerke
|
||||
|
||||
Alle Container laufen im **gemeinsamen Docker-Netzwerk** `bruchtal-net`:
|
||||
|
||||
- Kommunikation per Service-Namen (`gitea`, `bruchtal-webhook`)
|
||||
- Keine Abhängigkeit von Host-IP
|
||||
- Isoliert von anderen VM-Netzwerken
|
||||
|
||||
Beispiel Docker-Compose-Netzwerkdefinition:
|
||||
|
||||
```yaml
|
||||
networks:
|
||||
bruchtal-net:
|
||||
external: true
|
||||
```
|
||||
|
||||
## Mounts
|
||||
Die Mount laufen nicht über die fstab. Grund: die QNAP geht seltsam mit Sonderzeichen in den credentials um.
|
||||
Lösung:
|
||||
sudo nano /etc/systemd/system/mnt-vaultwardenBackupOnQnap.mount:
|
||||
|
||||
``` ini
|
||||
[Unit]
|
||||
After=network-online.target
|
||||
|
||||
[Mount]
|
||||
What=//192.168.178.254/Backups/docker_backups/vaultwarden
|
||||
Where=/mnt/vaultwardenBackupOnQnap
|
||||
Type=cifs
|
||||
Options=rw,vers=3.0,username=admin,password=!!Zazen17**,uid=1001,gid=1001
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
dann
|
||||
|
||||
```
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable mnt-vaultwardenBackupOnQnap.mount
|
||||
|
||||
sudo systemctl start mnt-vaultwardenBackupOnQnap.mount #Mount wird auch beim booten gestartet
|
||||
sudo systemctl stop mnt-vaultwardenBackupOnQnap.mount #Mount wird gestoppt
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Docker Backup
|
||||
Docker läuft als VM unter Proxmox und wird dort täglich vollständig auf der Qnap gesichert
|
||||
[=> Proxmox_Backup:](../../backup_restore/proxmox/proxmox_backup.md)
|
||||
@@ -10,14 +10,21 @@
|
||||
|
||||
| Host Path | Container Path | Zweck |
|
||||
|------------|----------------|--------|
|
||||
| /docker/Bruchtal/docker/heimdall/data/config:/config | /config | Konfiguration |
|
||||
| /docker/Bruchtal/compose/heimdall/data/config:/config | /config | Konfiguration |
|
||||
|
||||
|
||||
## Deployment
|
||||
|
||||
```bash
|
||||
cd /docker/Bruchtal/docker/heimdall
|
||||
cd /docker/Bruchtal/compose/heimdall
|
||||
git pull
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
``
|
||||
```
|
||||
|
||||
|
||||
## aktuelles Skript
|
||||
|
||||
```snippet
|
||||
--8<-- "/docs/docker/heimdall/docker-compose.yml"
|
||||
```
|
||||
|
||||
@@ -12,8 +12,14 @@
|
||||
## Deployment
|
||||
|
||||
```bash
|
||||
cd /docker/Bruchtal/docker/it-tools
|
||||
cd /docker/Bruchtal/compose/it-tools
|
||||
git pull
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
``
|
||||
```
|
||||
|
||||
## aktuelles Skript
|
||||
|
||||
```snippet
|
||||
--8<-- "/docs/docker/it-tools/docker-compose.yml"
|
||||
```
|
||||
|
||||
31
docs/docker/mkdocs/mkdocs.md
Normal file
31
docs/docker/mkdocs/mkdocs.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# Mkdocs
|
||||
## Zweck:
|
||||
Dokumentation des Systems in Markdown
|
||||
|
||||
|
||||
## /ssrv/docker/docker-compose.yml
|
||||
-> liegt nicht in gesondertem Container.
|
||||
-> erwartet Verzeichnis docs und mkdocs.yml (diese Datei)
|
||||
|
||||
``` yaml
|
||||
services:
|
||||
bruchtal-docs:
|
||||
image: squidfunk/mkdocs-material:latest
|
||||
container_name: bruchtal-docs
|
||||
restart: unless-stopped
|
||||
|
||||
ports:
|
||||
- "8005:8000"
|
||||
|
||||
volumes:
|
||||
- /docker/Bruchtal:/docs
|
||||
|
||||
command: serve --dev-addr=0.0.0.0:8000
|
||||
|
||||
environment:
|
||||
- TZ=Europe/Berlin
|
||||
- WATCHDOG_FORCE_POLLING=true
|
||||
```
|
||||
|
||||
## Backup & Restore
|
||||
kein spezielles Backup notwendig.
|
||||
1
docs/docker/pihole/pihole.md
Normal file
1
docs/docker/pihole/pihole.md
Normal file
@@ -0,0 +1 @@
|
||||
testtest
|
||||
181
docs/docker/portainer/portainer.md
Normal file
181
docs/docker/portainer/portainer.md
Normal file
@@ -0,0 +1,181 @@
|
||||
# Portainer EE mit Remote-Agent (Hetzner) über SSH-Tunnel
|
||||
|
||||
## Ziel
|
||||
|
||||
Lokaler Portainer EE verwaltet zusätzlich einen entfernten Docker-Host (Hetzner),
|
||||
ohne dass der Agent-Port (9001) öffentlich erreichbar ist. Der Key für die EE ist in Bitwarden hinterlegt.
|
||||
|
||||
Die Verbindung erfolgt ausschließlich über einen SSH-Tunnel.
|
||||
|
||||
---
|
||||
|
||||
## Architektur
|
||||
|
||||
### Übersicht
|
||||
|
||||
- Heimserver: Portainer EE
|
||||
- Hetzner-Server: Portainer Agent
|
||||
- Verbindung: SSH-Tunnel (autossh + systemd)
|
||||
- Kein öffentlicher Port 9001
|
||||
|
||||
---
|
||||
|
||||
### Netzwerkarchitektur mit Namespace- und Layer-Trennung
|
||||
|
||||
```
|
||||
┌────────────────────────────┐
|
||||
│ Internet │
|
||||
└──────────────┬─────────────┘
|
||||
│
|
||||
│ SSH (TCP 22)
|
||||
│
|
||||
┌──────────────────────────┴──────────────────────────┐
|
||||
│ Hetzner VPS (Host OS) │
|
||||
│-----------------------------------------------------│
|
||||
│ │
|
||||
│ Docker Engine │
|
||||
│ ┌──────────────────────────────────────────────┐ │
|
||||
│ │ portainer_agent Container │ │
|
||||
│ │----------------------------------------------│ │
|
||||
│ │ Agent lauscht auf: 0.0.0.0:9001 │ │
|
||||
│ └──────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ Host-Port-Mapping: 9001 -> Container 9001 │
|
||||
└──────────────────────────┬──────────────────────────┘
|
||||
│
|
||||
│ localhost:9001
|
||||
============================================== SSH Tunnel =======================
|
||||
ssh -L 0.0.0.0:9002:localhost:9001 root@hetzner-ip
|
||||
=================================================================================
|
||||
│
|
||||
│ 0.0.0.0:9002 (Heimserver Host)
|
||||
┌──────────────────────────┴──────────────────────────┐
|
||||
│ Heimserver (Host OS) │
|
||||
│-----------------------------------------------------│
|
||||
│ │
|
||||
│ autossh Service │
|
||||
│ lauscht auf: 0.0.0.0:9002 │
|
||||
│ │
|
||||
│ Docker Bridge Netzwerk │
|
||||
│ IP: 172.17.0.1 │
|
||||
│ │
|
||||
│ Docker Engine │
|
||||
│ ┌──────────────────────────────────────────────┐ │
|
||||
│ │ portainer-ee Container │ │
|
||||
│ │----------------------------------------------│ │
|
||||
│ │ Verbindet zu: 172.17.0.1:9002 │ │
|
||||
│ │ (Host-Bridge-IP) │ │
|
||||
│ └──────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
## Funktionsweise
|
||||
|
||||
1. Der Portainer-Agent läuft auf Hetzner und lauscht auf Port 9001.
|
||||
2. Dieser Port ist **nicht öffentlich relevant**, da keine direkte Nutzung erfolgt.
|
||||
3. Der Heimserver baut per SSH einen Tunnel auf:
|
||||
- Lokaler Port 9002 → Hetzner localhost:9001
|
||||
4. Portainer EE verbindet sich intern über: 172.17.0.1:9002 (docker bridge)
|
||||
5. Der gesamte Traffic läuft verschlüsselt über SSH.
|
||||
|
||||
## 1. Portainer-Agent auf Hetzner
|
||||
### docker-compose.yml
|
||||
|
||||
``` yaml
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
portainer_agent:
|
||||
image: portainer/agent:2.27.3
|
||||
container_name: portainer_agent
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9001:9001"
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- /var/lib/docker/volumes:/var/lib/docker/volumes
|
||||
```
|
||||
|
||||
Starten: docker compose up -d
|
||||
Prüfen: ss -tlnp | grep 9001
|
||||
Erwartet: 0.0.0.0:9001
|
||||
|
||||
## 2. SSH-Tunnel automatisieren (VM Docker)
|
||||
### autossh installieren
|
||||
apt update
|
||||
apt install autossh -y
|
||||
|
||||
### systemd Service anlegen
|
||||
|
||||
Datei:
|
||||
/etc/systemd/system/portainer-hetzner-tunnel.service
|
||||
|
||||
Inhalt:
|
||||
``` ini
|
||||
[Unit]
|
||||
Description=SSH Tunnel to Hetzner Portainer Agent
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User=root
|
||||
Environment="AUTOSSH_GATETIME=0"
|
||||
ExecStart=/usr/bin/autossh \
|
||||
-M 0 \
|
||||
-N \
|
||||
-o "ServerAliveInterval=30" \
|
||||
-o "ServerAliveCountMax=3" \
|
||||
-o "ExitOnForwardFailure=yes" \
|
||||
-o "StrictHostKeyChecking=no" \
|
||||
-i /root/.ssh/portainer_tunnel \
|
||||
-L 0.0.0.0:9002:localhost:9001 \
|
||||
root@65.
|
||||
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
### Service aktivieren
|
||||
```snippet
|
||||
systemctl daemon-reload
|
||||
systemctl enable portainer-hetzner-tunnel
|
||||
systemctl start portainer-hetzner-tunnel
|
||||
```
|
||||
|
||||
Status prüfen:
|
||||
```
|
||||
systemctl status portainer-hetzner-tunnel
|
||||
```
|
||||
Port prüfen:
|
||||
```
|
||||
ss -tlnp | grep 9002
|
||||
```
|
||||
Erwartet:
|
||||
```
|
||||
0.0.0.0:9002
|
||||
```
|
||||
## 3. Portainer EE konfigurieren
|
||||
In der WebUI:
|
||||
Environments → Add Environment → Agent
|
||||
Adresse: 172.17.0.1:9002
|
||||
Hinweis: 172.17.0.1 ist die Docker-Bridge-IP des Hosts
|
||||
Portainer läuft im Container
|
||||
Der Tunnel läuft auf dem Host
|
||||
|
||||
## Sicherheitsmodell
|
||||
- Port 9001 nicht öffentlich erreichbar
|
||||
- Kommunikation ausschließlich über SSH
|
||||
- SSH-Key-basierte Authentifizierung
|
||||
- Automatischer Reconnect via autossh
|
||||
- Kein zusätzlicher VPN erforderlich
|
||||
|
||||
## Troubleshooting
|
||||
```
|
||||
|Problem |Ursache | Prüfen
|
||||
|connection refused |Agent nicht auf 9001 gemappt | - ports9001:9001 in der docker-compose
|
||||
|SSH channel open failed |Agent lauscht nicht |keys vorhanden?
|
||||
|Endpoint unreachable |Tunnel nicht aktiv
|
||||
|curl localhost:9001 schlägt fehl |Agent läuft nicht korrekt
|
||||
```
|
||||
74
docs/docker/vaultwarden/vaultwarden.md
Normal file
74
docs/docker/vaultwarden/vaultwarden.md
Normal file
@@ -0,0 +1,74 @@
|
||||
# VAULTWARDEN
|
||||
## Produktiv-Vault (Self-Hosted):
|
||||
- Software: Vaultwarden
|
||||
- Zugriff:
|
||||
- LAN: HTTPS über lokalen Reverse Proxy (Caddy)
|
||||
- Internet: HTTPS über Pangolin-Tunnel
|
||||
- Enthält:
|
||||
- alle regulären Zugänge
|
||||
- Organisationen / Secrets
|
||||
- Risiko:
|
||||
- abhängig von Tunnel / Internet / Heimnetz
|
||||
|
||||
## Kritischer Eintrag:
|
||||
Name:
|
||||
"Hetzner Login (NOTFALL manuell pflegen!)"
|
||||
|
||||
Zweck:
|
||||
- Sichtbarer Hinweis bei JEDEM Login
|
||||
- Erzwingt bewusste manuelle Pflege
|
||||
des Notfall-Zugangs
|
||||
|
||||
|
||||
## NOTFALL-STRATEGIE
|
||||
|
||||
### Notfall-Passwortsafe:
|
||||
- Software: KeePassXC
|
||||
- Dateiformat: notfall.kdbx
|
||||
- Plattformen:
|
||||
- Linux
|
||||
- Windows
|
||||
- Speicherort:
|
||||
- verschlüsselter Cloud-Speicher => auf Schulcampus/Dokumente/Notfall/Notfall.kdbx
|
||||
- im U-Netz: Dokumente/Kram/Notfall
|
||||
- unabhängig vom Heimnetz / Tunnel
|
||||
|
||||
### Schutz:
|
||||
- Starkes Master-Passwort (wie immer)
|
||||
|
||||
### Inhalt (bewusst minimal):
|
||||
- Hetzner Login
|
||||
- ggf. Hetzner Recovery Codes
|
||||
|
||||
------------
|
||||
## Pflegeregel:
|
||||
Wenn Hetzner-Passwort oder 2FA geändert wird:
|
||||
-> Eintrag in notfall.kdbx **MANUELL** auf **BEIDEN** Speichern aktualisieren
|
||||
|
||||
Keine Automatisierung! (Bewusste Entscheidung).
|
||||
|
||||
|
||||
## DESIGN-ENTSCHEIDUNG
|
||||
- Keine Admin-API-Exports aus Vaultwarden
|
||||
- Keine Cronjobs mit sensiblen Tokens
|
||||
- Keine Abhängigkeit von kostenpflichtigen Cloud-Abos
|
||||
- Notfallzugang bewusst getrennt gehalten
|
||||
----------
|
||||
Fokus auf:
|
||||
- Robustheit
|
||||
- Transparenz
|
||||
- Plattform-Kompatibilität
|
||||
- Langfristige Wartbarkeit
|
||||
|
||||
|
||||
|
||||
## aktuelles Skript
|
||||
|
||||
```snippet
|
||||
--8<-- "/docs/docker/vaultwarden/docker-compose.yml"
|
||||
```
|
||||
|
||||
|
||||
## Backup
|
||||
=> [Vaultwarden_backup](../vaultwarden_backup/vaultwarden_backup.md).
|
||||
|
||||
6
docs/docker/vaultwarden_backup/vaultwarden_backup.md
Normal file
6
docs/docker/vaultwarden_backup/vaultwarden_backup.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# Vaultwarden_Backup
|
||||
Container vaultwarden_backup sichert die komplette DB täglich 5:00 auf QNAP/Backups/docker_backups_vaultwarden
|
||||
|
||||
```snippet
|
||||
--8<-- "/docs/docker/vaultwarden_backup/docker-compose.yml"
|
||||
```
|
||||
@@ -17,8 +17,14 @@
|
||||
## Deployment
|
||||
|
||||
```bash
|
||||
cd /docker/Bruchtal/docker/wikijs
|
||||
cd /docker/Bruchtal/compose/wikijs
|
||||
git pull
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
``
|
||||
```
|
||||
|
||||
## aktuelles Skript
|
||||
|
||||
```snippet
|
||||
--8<-- "/docs/docker/wikijs/docker-compose.yml"
|
||||
```
|
||||
|
||||
67
docs/homepage/homepage.md
Normal file
67
docs/homepage/homepage.md
Normal file
@@ -0,0 +1,67 @@
|
||||
# Homepage Stack
|
||||
|
||||
## dockerproxy
|
||||
um den Status von Dockercontainern direkt auslesen zu können
|
||||
|
||||
- Image: `ghcr.io/tecnativa/docker-socket-proxy:latest`
|
||||
- Port: `127.0.0.1:2375:2375`
|
||||
- Restart Policy: `unless-stopped`
|
||||
|
||||
## Homepage
|
||||
das eigentlich
|
||||
|
||||
|
||||
|
||||
## Volumes
|
||||
|
||||
| Host Path | Container Path | Zweck |
|
||||
|------------|----------------|--------|
|
||||
| /var/run/docker.sock:/var/run/docker.sock:ro | | |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Deployment
|
||||
|
||||
```bash
|
||||
cd /docker/Bruchtal/compose/heimdall
|
||||
git pull
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
|
||||
## aktuelles Skript
|
||||
|
||||
```snippet
|
||||
--8<-- "/docs/docker/heimdall/docker-compose.yml"
|
||||
```
|
||||
|
||||
|
||||
dockerproxy:
|
||||
image: ghcr.io/tecnativa/docker-socket-proxy:latest
|
||||
container_name: dockerproxy
|
||||
environment:
|
||||
- CONTAINERS=1 # Allow access to viewing containers
|
||||
- SERVICES=1 # Allow access to viewing services (necessary when using Docker Swarm)
|
||||
- TASKS=1 # Allow access to viewing tasks (necessary when using Docker Swarm)
|
||||
- POST=0 # Disallow any POST operations (effectively read-only)
|
||||
ports:
|
||||
- 127.0.0.1:2375:2375
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro # Mounted as read-only
|
||||
restart: unless-stopped
|
||||
|
||||
homepage:
|
||||
image: ghcr.io/gethomepage/homepage:latest
|
||||
container_name: homepage
|
||||
ports:
|
||||
- "3004:3000"
|
||||
volumes:
|
||||
- /srv/docker/daten/homepage:/app/config
|
||||
- /srv/docker/daten/homepage/icons:/app/public/icons
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
environment:
|
||||
- HOMEPAGE_ALLOWED_HOSTS=192.168.178.204:3004,localhost
|
||||
restart: unless-stopped
|
||||
@@ -2,8 +2,7 @@
|
||||
|
||||
Willkommen in der Infrastruktur-Dokumentation von **Bruchtal**.
|
||||
|
||||
## Ziel
|
||||
|
||||
## Inhalt ##
|
||||
Diese Dokumentation beschreibt:
|
||||
|
||||
- ⚙️ Workflows
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
# Allgemeine Einstellungen
|
||||
|
||||
## DHCP
|
||||
### Fritzbox (derzeit aktuell)
|
||||
- Range: 192.168.178.20 - 199
|
||||
|
||||
## feste IPs
|
||||
[192.168.178.200: Proxmox](http://192.168.178.200:8006)
|
||||
[192.168.178.201: vm-Pihole](http://192.168.178.201)
|
||||
[192.168.178.203: vm-homeassistent](http://192.168.178.203:8123)
|
||||
[192.168.178.204: vm-docker](http://192.168.178.204:9443)
|
||||
[192.168.178.214: vm-jellyfin]()
|
||||
[192.168.178.217: vm-docker-restore](http://192.168.178.221:9443)
|
||||
[192.168.178.221: vm-paperless2](http://192.168.178.221:8000)
|
||||
[192.168.178.254: QNAP](https://192.168.178.254)
|
||||
### Kea-dhcp4 + Adguard # caddy
|
||||
|
||||
4
docs/proxmox/homeassistent/homeassistent.md
Normal file
4
docs/proxmox/homeassistent/homeassistent.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# Homeasistent
|
||||
## Plattform
|
||||
- VM im Docker
|
||||
|
||||
52
docs/proxmox/paperless/docker-compose.yml
Normal file
52
docs/proxmox/paperless/docker-compose.yml
Normal file
@@ -0,0 +1,52 @@
|
||||
services:
|
||||
broker:
|
||||
image: docker.io/library/redis:8
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- redisdata:/data
|
||||
db:
|
||||
image: docker.io/library/postgres:17
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /paperless/database:/var/lib/postgresql/data
|
||||
environment:
|
||||
POSTGRES_DB: paperless
|
||||
POSTGRES_USER: paperless
|
||||
POSTGRES_PASSWORD: paperless
|
||||
webserver:
|
||||
image: ghcr.io/paperless-ngx/paperless-ngx:latest
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
- broker
|
||||
- gotenberg
|
||||
- tika
|
||||
ports:
|
||||
- "8000:8000"
|
||||
volumes:
|
||||
- /paperless/data:/usr/src/paperless/data
|
||||
- /paperless/media:/usr/src/paperless/media
|
||||
- ./export:/usr/src/paperless/export
|
||||
- /paperless/paperless-ngx/consume:/usr/src/paperless/consume
|
||||
env_file: docker-compose.env
|
||||
environment:
|
||||
PAPERLESS_REDIS: redis://broker:6379
|
||||
PAPERLESS_DBHOST: db
|
||||
PAPERLESS_TIKA_ENABLED: 1
|
||||
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
|
||||
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
|
||||
gotenberg:
|
||||
image: docker.io/gotenberg/gotenberg:8.20
|
||||
restart: unless-stopped
|
||||
# The gotenberg chromium route is used to convert .eml files. We do not
|
||||
# want to allow external content like tracking pixels or even javascript.
|
||||
command:
|
||||
- "gotenberg"
|
||||
- "--chromium-disable-javascript=true"
|
||||
- "--chromium-allow-list=file:///tmp/.*"
|
||||
tika:
|
||||
image: docker.io/apache/tika:latest
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
redisdata:
|
||||
|
||||
17
docs/proxmox/paperless/paperless.md
Normal file
17
docs/proxmox/paperless/paperless.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# Paperless VM
|
||||
|
||||
## Architektur
|
||||
- läuft als VM direkt auf Proxmox
|
||||
- Plattform: Ubuntu Server 24
|
||||
- Paperless läuft unter Docker
|
||||
|
||||
## docker-compose.yml
|
||||
``` snippet
|
||||
--8<-- "/docs/proxmox/paperless/docker-compose.yml"
|
||||
```
|
||||
|
||||
** docker-compose.env Datei mit Key in Bitwarden **
|
||||
|
||||
## Backup
|
||||
==>
|
||||
|
||||
55
docs/proxmox/proxmox.md
Normal file
55
docs/proxmox/proxmox.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# Proxmox Host
|
||||
|
||||
## System
|
||||
- Hostname: vm-proxmox
|
||||
- OS: Debian 12
|
||||
- VMs:
|
||||
- paperless-ngx
|
||||
- home-assistant
|
||||
- Docker-VM
|
||||
- Backup: tägliche Snapshots
|
||||
|
||||
## Root-Zugriff
|
||||
derzeit noch möglich: das übliche PW
|
||||
|
||||
## Crontab
|
||||
```snippet
|
||||
0 1 * * * /root/backup-pve-configs.sh
|
||||
```
|
||||
|
||||
## Mounts
|
||||
/etc/fstab
|
||||
|
||||
``` snippet
|
||||
# <file system> <mount point> <type> <options> <dump> <pass>
|
||||
/dev/pve/root / ext4 errors=remount-ro 0 1
|
||||
/dev/pve/swap none swap sw 0 0
|
||||
proc /proc proc defaults 0 0
|
||||
|
||||
#SSD
|
||||
UUID=fe878af4-c44e-4ab8-8d81-1efb0391aaf7 /mnt/DockerDaten ext4 defaults 0 0
|
||||
|
||||
#QNAP
|
||||
//192.168.178.254/qnapmultimedia /mnt/qnapmount_mm cifs user,credentials=/root/.credentials/qnapcreds,iocharset=utf8,noperm 0 0
|
||||
//192.168.178.254/Backups /mnt/qnapmount_backups cifs user,credentials=/root/.credentials/qnapcreds,iocharset=utf8,noperm 0 0
|
||||
|
||||
#Hetznerbox
|
||||
//u358899.your-storagebox.de/backup /mnt/hetznerbox cifs user,credentials=/root/.credentials/hetznercreds,iocharset=utf8,noperm 0 0
|
||||
|
||||
#Storagebox Crypted
|
||||
//u358899.your-storagebox.de/backup/backups/proxmox /mnt/storagebox-crypted cifs credentials=/root/.credentials/hetznercreds,iocharset=utf8,rw,_netdev,uid=0,gid=0,file_mode=0660,dir_mode=07>
|
||||
#Storagebox Uncrypted - wird automatisch mit Crypted verbunden
|
||||
/mnt/storagebox-crypted /mnt/storagebox-nocrypt fuse./usr/bin/gocryptfs rw,nofail,auto,x-systemd.idle-timeout=10,x-systemd.automount,allow_other,quiet,passfile=/root/.gocryptfspw 0 0
|
||||
```
|
||||
|
||||
## Backup
|
||||
|
||||
## aktuelles Skript
|
||||
|
||||
``` snippet
|
||||
--8<-- "/docs/backup_restore/proxmox/backup_pve_configs.sh"
|
||||
```
|
||||
=> [Proxmox Backup](../backup_restore/proxmox/proxmox_backup.md).
|
||||
=> [Skript:](../backup_restore/proxmox/backup_pve_configs.sh)
|
||||
|
||||
|
||||
2
docs/proxmox/tv-headend/tv-headend.md
Normal file
2
docs/proxmox/tv-headend/tv-headend.md
Normal file
@@ -0,0 +1,2 @@
|
||||
# TV-Headend
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
# Proxmox Host
|
||||
|
||||
- Hostname: vm-proxmox
|
||||
- OS: Debian 12
|
||||
- VMs:
|
||||
- paperless-ngx
|
||||
- home-assistant
|
||||
- Docker-VM
|
||||
- Backup: tägliche Snapshots
|
||||
48
docs/workflows/adguard-kea-caddy.md
Normal file
48
docs/workflows/adguard-kea-caddy.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# DNS - DHCP Konfiguration
|
||||
** AKTUELL PIHOLE ALS DNS!**
|
||||
|
||||
|
||||
## Pihole
|
||||
- derzeit aktuell im Einsatz, Adguard & Co abgeschaltet.
|
||||
-
|
||||
|
||||
### aktuelles Skript
|
||||
```snippet
|
||||
--8<-- "/docs/docker/pihole/docker-compose.yml"
|
||||
```
|
||||
|
||||
|
||||
## AdGuardHome
|
||||
- die Konfiguration findet in der adguard/config/AdGuardHome.yaml statt.
|
||||
**Problem**: dummerweise überschreibt die GUI diese bei jedem Start gnadenlos.
|
||||
- Blaupause liegt in /docker/AdguardHome.yaml bzw. s.u.
|
||||
- Entscheidend: dhcp_enabled: false
|
||||
- bevor Adguard neu gestartet wird die Blaupause in den config-Ordner kopieren
|
||||
- neue Einträge:
|
||||
-- WebUI aufrufen (http://192.168.178.204:3001)
|
||||
-- Filters => DNS-Rewrites
|
||||
-- dort name und IP eintragen
|
||||
-- Container **NICHT** neu starten!
|
||||
|
||||
### aktuelles Skript
|
||||
```snippet
|
||||
--8<-- "/docs/docker/adguardhome/docker-compose.yml"
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Anmerkungen zu Kea:
|
||||
- DHCP-Server, bewusst in der IPv4-Version. IPv6 ist komplett abgestellt, ausser auf der FB für DSlite.
|
||||
### aktuelles Skript
|
||||
```snippet
|
||||
--8<-- "/docs/docker/kea-dhcp4/docker-compose.yml"
|
||||
```
|
||||
|
||||
|
||||
## Anmerkungen zu caddy
|
||||
- Reverse-Proxy für internes HTTPS
|
||||
- Problem: rootCA.crt muss auf dem Client vorhanden sein damit der Browserzugriff funktioniert. Ist ein Browserproblme, eins von DNS verursachtes
|
||||
### aktuelles Skript
|
||||
```snippet
|
||||
--8<-- "/docs/docker/caddy/docker-compose.yml"
|
||||
```
|
||||
3
docs/workflows/backup_restore-Workstations.md
Normal file
3
docs/workflows/backup_restore-Workstations.md
Normal file
@@ -0,0 +1,3 @@
|
||||
siehe [Backups Workstaions](../backup_restore/workstations/workstation:backup.md)
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ Ziel:
|
||||
- Alles versioniert in Git
|
||||
- Reproduzierbare Deployments
|
||||
- Dokumentation immer synchron zur Infrastruktur
|
||||
|
||||
---
|
||||
|
||||
## Grundprinzip
|
||||
@@ -15,28 +14,81 @@ Ziel:
|
||||
**Konfiguration passiert lokal in VS Code.**
|
||||
Die VM ist nur noch Laufzeitumgebung.
|
||||
|
||||
|
||||
1. Lokal ändern, egal was
|
||||
2. Committen & Pushen
|
||||
3. Auf VM pullen
|
||||
3. der Pull auf der VM wird automatisch über einen Webhook ausgeführt
|
||||
4. Container neu starten
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
Dev -->|git push| Gitea
|
||||
Gitea -->|POST Hook| Webhook
|
||||
Webhook -->|git pull| Workspace
|
||||
Workspace -->|Markdown changes| MkDocs
|
||||
MkDocs -->|serve| Browser
|
||||
```
|
||||
---
|
||||
|
||||
## Verzeichnisstruktur
|
||||
compose, scripts, docs sind im Repo. Daher als Unterordner, damit bei einem pull force die Daten nicht mit überschrieben werden
|
||||
```
|
||||
/srv/docker/
|
||||
├─ repo
|
||||
│ ├─ compose # Docker-Compose Stacks für jeden Container
|
||||
│ │ ├─ nextcloud/
|
||||
│ │ │ └─ docker-compose.yml
|
||||
│ │ ├─ tvheadend/
|
||||
│ │ │ └─ docker-compose.yml
|
||||
│ │ ├─ signal-rest-api/
|
||||
│ │ │ └─ docker-compose.yml
|
||||
│ │ └─ ... (weitere aktive Container)
|
||||
│ │
|
||||
│ ├─ scripts/ # Deploy-Scripts, Webhooks, Utilities
|
||||
│ │ ├─ deploy-changed-containers-final.sh
|
||||
│ │ ├─ webhook-deploy.sh
|
||||
│ │ └─ ... (weitere Scripts)
|
||||
│ │
|
||||
│ ├─ docs/ # MkDocs / Markdown Dokumentation
|
||||
│ │ ├─ backup_restore
|
||||
│ │ | ├─ docker
|
||||
| │ | └─ docker_backup.md
|
||||
| │ | ├─ hetzner
|
||||
│ │ ├─ docker
|
||||
│ │ | ├─ adguardhome
|
||||
| │ | | └─ adguardhome.md
|
||||
│ │ | ├─ heimdall
|
||||
| │ │ └─ heimdall.md
|
||||
| │ └─ ... (weitere .md Dateien)
|
||||
│ │
|
||||
│ ├─ mkdocs.yml # MkDocs Konfiguration
|
||||
│
|
||||
├─ daten/ # Docker-Volumes / persistent data
|
||||
│ ├─ nextcloud/
|
||||
│ │ ├─ www/ # Nextcloud Webdaten
|
||||
│ │ ├─ db/ # MariaDB Daten
|
||||
│ │ └─ redis/ # Redis Daten
|
||||
│ ├─ tvheadend/
|
||||
│ │ └─ config/ # TVHeadend config / recordings
|
||||
│ ├─ signal-rest-api/
|
||||
│ │ └─ data/
|
||||
│ └─ ... (weitere Container-Daten)
|
||||
│
|
||||
└─ .gitignore # ignoriert daten/ und ggf. temp files
|
||||
```
|
||||
|
||||
|
||||
## Workflow "neuer Container"
|
||||
- VSCode starten in ~Bruchtal mit code . => VS startet sauber mit der Giteinstellung
|
||||
**ALLE ÄNDERUNGEN NUR IN VS**
|
||||
|
||||
### neuen Containeranlegen
|
||||
- `Bruchtal/<Containername>` anlegen
|
||||
- `Bruchtal/<Containername>/docker-compose.yml` anlegen
|
||||
- `compose/<Containername>` anlegen
|
||||
- `compose/<Containername>/docker-compose.yml` anlegen
|
||||
- docker-compose.yml editieren,
|
||||
- commit mit Message `"infra(<Containername>): docker-compose.yml neu angelegt"`
|
||||
- push
|
||||
|
||||
|
||||
### neuen Container dokumentieren
|
||||
- `Bruchtal/docs/<Containername>` anlegen
|
||||
- `docker/docs/<Containername>` anlegen
|
||||
- `Bruchtal/docs/<Containername>/<Containername>.md` anlegen
|
||||
- `<Containername>.md` editieren, Blaupause z.B: wikijs.md
|
||||
- commit message `docs(<Containername>): Dokumentation angelegt`
|
||||
@@ -53,14 +105,3 @@ cd /docker/Bruchtal/<Containername>
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Repository-Struktur
|
||||
```
|
||||
Bruchtal/
|
||||
├── docker/
|
||||
│ └── <Containername>/
|
||||
│ └── docker-compose.yml
|
||||
└── docs/
|
||||
└── docker/
|
||||
└── <Containername>/
|
||||
└── <Containername>.md
|
||||
```
|
||||
|
||||
27
docs/workflows/repo-reparieren.md
Normal file
27
docs/workflows/repo-reparieren.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# Reparieren des Gitea-Repos
|
||||
## Ausgangslage: aus Versehen Datei auf Vm editier anstatt in VS Code
|
||||
Problem: das Repo ist auseiander gelaufen.
|
||||
|
||||
## Voraussetzung:
|
||||
docker/gitea muss laufen
|
||||
|
||||
## Lösungsansatz:
|
||||
- **Wichtig:** dafür sorgen, dass die "korrekten" Dateien auf dem PC liegen wo VS läuft
|
||||
- auf der lokalen Maschine in Bruchtal:
|
||||
``` snippet
|
||||
git push origin main --force
|
||||
```
|
||||
|
||||
auf der VM:
|
||||
``` snippet
|
||||
cd /srv/docker/repo
|
||||
|
||||
|
||||
git fetch origin
|
||||
git reset --hard origin/main
|
||||
```
|
||||
Optional noch alte Dateien entfernen:
|
||||
```
|
||||
git clean -fd
|
||||
|
||||
```
|
||||
58
mkdocs.yml
58
mkdocs.yml
@@ -1,6 +1,6 @@
|
||||
site_name: Bruchtal
|
||||
site_description: Infrastruktur- und Betriebsdokumentation von Bruchtal
|
||||
site_author: Bruchtal
|
||||
site_author: Christian
|
||||
|
||||
theme:
|
||||
name: material
|
||||
@@ -10,16 +10,58 @@ nav:
|
||||
- Übersicht: index.md
|
||||
- Workflows:
|
||||
- Docker-workflow: workflows/docker-workflow.md
|
||||
- Adguardhome-Kea-Caddy: workflows/adguard-kea-caddy.md
|
||||
|
||||
- Netzwerk:
|
||||
- Topologie: network/topology.md
|
||||
- Tunnel: network/tunnel.md
|
||||
|
||||
- Proxmox:
|
||||
- VMs: proxmox/vms.md
|
||||
- Docker:
|
||||
- System: proxmox/proxmox.md
|
||||
- Paperless: proxmox/paperless/paperless.md
|
||||
- Homeassistant: proxmox/homeassistent/homeassistent.md
|
||||
|
||||
- Docker:
|
||||
- Architektur: docker/docker.md
|
||||
- Adguardhome: docker/adguardhome/adguardhome.md
|
||||
- Wikijs: docker/wikijs/wikijs.md
|
||||
- Architektur: docker/architecture.md
|
||||
- Heimdall: docker/heimdall/heimdall.md
|
||||
- It-Tools: docker/it-tools/it-tools.md
|
||||
- Backup_Storage:
|
||||
- Backup: backup/backup.md
|
||||
- Storage: backup/storage.md
|
||||
- PiholeTests: docker/pihole/pihole.md
|
||||
- Portainer: docker/portainer/portainer.md
|
||||
- Vaultwarden: docker/vaultwarden/vaultwarden.md
|
||||
- Vaultwarden_Backup: docker/vaultwarden_backup/vaultwarden_backup.md
|
||||
- Wikijs: docker/wikijs/wikijs.md
|
||||
|
||||
- Backup:
|
||||
- Docker: /docker/docker_backup.md
|
||||
- Hetzner: backup_restore/hetzner/hetzner_backup.md
|
||||
- Homeassistant: backup_restore/proxmox/homeassistant/homeassistant_backup.md
|
||||
- Paperless: backup_restore/proxmox/paperless/paperless_backup.md
|
||||
- Proxmox: backup_restore/proxmox/proxmox_backup.md
|
||||
- Workstation: backup_restore/workstation/workstation_backup.md
|
||||
|
||||
|
||||
markdown_extensions:
|
||||
- admonition
|
||||
- pymdownx.highlight
|
||||
- pymdownx.snippets:
|
||||
check_paths: false
|
||||
- pymdownx.tasklist
|
||||
- pymdownx.tabbed
|
||||
- pymdownx.mark
|
||||
- pymdownx.tilde
|
||||
- pymdownx.critic
|
||||
- pymdownx.inlinehilite
|
||||
- pymdownx.details
|
||||
- pymdownx.keys
|
||||
- pymdownx.emoji
|
||||
- pymdownx.betterem
|
||||
- pymdownx.caret
|
||||
- pymdownx.mark
|
||||
- pymdownx.smartsymbols
|
||||
- pymdownx.magiclink
|
||||
- pymdownx.superfences:
|
||||
custom_fences:
|
||||
- name: mermaid
|
||||
class: mermaid
|
||||
format: !!python/name:pymdownx.superfences.fence_code_format
|
||||
69
scripts/redeploy-containers.sh
Normal file
69
scripts/redeploy-containers.sh
Normal file
@@ -0,0 +1,69 @@
|
||||
#!/bin/bash
|
||||
# Auto-Restart Script für geänderte Docker-Compose Stacks
|
||||
# Nur laufende, aktive Container werden neu gestartet
|
||||
# Inaktive Container bleiben unberührt
|
||||
# Logs im Repo-Verzeichnis
|
||||
#test
|
||||
|
||||
REPO_DIR="/srv/docker"
|
||||
LOGFILE="$REPO_DIR/scripts/docker-update.log"
|
||||
|
||||
# Liste der inaktiven Container
|
||||
INACTIVE_CONTAINERS=("adguard" "kea" "caddy" "wikijs")
|
||||
|
||||
log() {
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') | $*" | tee -a "$LOGFILE"
|
||||
}
|
||||
|
||||
log "===== Starting Auto-Restart (final) ====="
|
||||
|
||||
cd "$REPO_DIR" || { log "ERROR: Cannot enter $REPO_DIR"; exit 1; }
|
||||
|
||||
# 1️⃣ Git Pull + Hard Reset (VM exakt auf Remote-Stand bringen)
|
||||
git fetch --all &>/dev/null
|
||||
git reset --hard origin/main &>/dev/null
|
||||
log "Pulled latest changes and reset VM to remote state."
|
||||
|
||||
# 2️⃣ Geänderte Compose-Dateien ermitteln
|
||||
CHANGED=$(git diff --name-only HEAD~1 HEAD | grep -E '^compose/.+/docker-compose\.yml$' || true)
|
||||
|
||||
if [ -z "$CHANGED" ]; then
|
||||
log "No Compose files changed. Nothing to restart."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 3️⃣ Nur laufende, geänderte Container neu starten
|
||||
for FILE in $CHANGED; do
|
||||
CONTAINER_NAME=$(echo "$FILE" | cut -d'/' -f2)
|
||||
|
||||
# Inaktive Container überspringen
|
||||
if [[ " ${INACTIVE_CONTAINERS[@]} " =~ " ${CONTAINER_NAME} " ]]; then
|
||||
log "Skipping inactive container: $CONTAINER_NAME"
|
||||
continue
|
||||
fi
|
||||
|
||||
COMPOSE_DIR="$REPO_DIR/compose/$CONTAINER_NAME"
|
||||
if [ ! -d "$COMPOSE_DIR" ]; then
|
||||
log "Warning: $COMPOSE_DIR does not exist, skipping..."
|
||||
continue
|
||||
fi
|
||||
|
||||
# Prüfen, ob Container läuft
|
||||
RUNNING=$(docker compose -f "$COMPOSE_DIR/docker-compose.yml" ps -q)
|
||||
if [ -z "$RUNNING" ]; then
|
||||
log "Container $CONTAINER_NAME is stopped. Skipping restart."
|
||||
continue
|
||||
fi
|
||||
|
||||
log "Restarting running container: $CONTAINER_NAME"
|
||||
cd "$COMPOSE_DIR" || continue
|
||||
|
||||
docker compose up -d &>/dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
log "✅ $CONTAINER_NAME restarted successfully"
|
||||
else
|
||||
log "❌ Failed to restart $CONTAINER_NAME"
|
||||
fi
|
||||
done
|
||||
|
||||
log "===== Auto-Restart Completed ====="
|
||||
5
scripts/stop-all.sh
Normal file
5
scripts/stop-all.sh
Normal file
@@ -0,0 +1,5 @@
|
||||
cd /docker/Bruchtal/docker
|
||||
|
||||
for d in */; do
|
||||
(cd "$d" && docker compose down)
|
||||
done
|
||||
57
scripts/webhook-deploy/deploy-bruchtal.sh
Executable file
57
scripts/webhook-deploy/deploy-bruchtal.sh
Executable file
@@ -0,0 +1,57 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
# test XDG_RUNTIME_DIR
|
||||
|
||||
LOGFILE="/srv/docker/repo/scripts/bruchtal-deploy.log"
|
||||
cd /workspace
|
||||
|
||||
log() {
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') | $*" | tee -a "$LOGFILE"
|
||||
}
|
||||
|
||||
# -----------------------------
|
||||
# 1️⃣ VM-Repo sauber halten
|
||||
# -----------------------------
|
||||
log "Checking for local changes on VM..."
|
||||
if [ -n "$(git status --porcelain)" ]; then
|
||||
log "⚠️ Warning: Local changes on VM will be lost!"
|
||||
git reset --hard
|
||||
git clean -fd
|
||||
log "Local changes discarded."
|
||||
else
|
||||
log "VM repo is clean, no local changes to discard."
|
||||
fi
|
||||
|
||||
# -----------------------------
|
||||
# 2️⃣ Pull latest changes
|
||||
# -----------------------------
|
||||
# safe directory for git in CI environment
|
||||
git config --global --add safe.directory /workspace
|
||||
|
||||
log "Pulling latest changes from Gitea"
|
||||
git pull
|
||||
|
||||
# -----------------------------
|
||||
# 3️⃣ Redeploy changed containers
|
||||
# -----------------------------
|
||||
#/srv/docker/scripts/redeploy-containers.sh
|
||||
|
||||
|
||||
# -----------------------------
|
||||
# 4️⃣ Check for Markdown changes
|
||||
# -----------------------------
|
||||
log "Checking for new or modified Markdown files..."
|
||||
changed=$(git diff --name-status HEAD~1 HEAD | grep -E '^[AM]\s.*(\.md$|mkdocs\.yml$)' | awk '{print $2}' || true)
|
||||
|
||||
if [ -n "$changed" ]; then
|
||||
log "Markdown changes detected:"
|
||||
for f in $changed; do
|
||||
log " - $f"
|
||||
done
|
||||
log "Restarting bruchtal-docs container..."
|
||||
docker restart bruchtal-docs
|
||||
else
|
||||
log "No Markdown changes detected. Skipping restart."
|
||||
fi
|
||||
|
||||
log "Deploy finished."
|
||||
25
scripts/webhook-deploy/deploy-bruchtal.sh-sik
Executable file
25
scripts/webhook-deploy/deploy-bruchtal.sh-sik
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
# test XDG_RUNTIME_DIR
|
||||
#HALLO
|
||||
cd /workspace
|
||||
|
||||
echo "==> Pulling latest changes"
|
||||
git pull
|
||||
|
||||
echo "==> Checking for new or modified Markdown files"
|
||||
# A = Added, M = Modified
|
||||
changed=$(git diff --name-status HEAD~1 HEAD | grep -E '^[AM]\s.*(\.md$|mkdocs\.yml$)' | awk '{print $2}' || true)
|
||||
|
||||
|
||||
if [ -n "$changed" ]; then
|
||||
echo "Markdown changes detected:"
|
||||
echo "$changed"
|
||||
echo "==> Restarting bruchtal-docs container"
|
||||
cd /workspace
|
||||
docker restart bruchtal-docs
|
||||
else
|
||||
echo "No Markdown changes detected. Skipping restart."
|
||||
fi
|
||||
|
||||
echo "==> Deploy finished"
|
||||
@@ -1,7 +1,8 @@
|
||||
[
|
||||
{
|
||||
"id": "bruchtal-deploy",
|
||||
"execute-command": "/workspace/deploy/deploy-bruchtal.sh",
|
||||
"execute-command": "/workspace/scripts/webhook-deploy/deploy-bruchtal.sh",
|
||||
|
||||
"command-working-directory": "/workspace"
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user