make deployment targets configurable
This commit is contained in:
parent
b1acba76f1
commit
f10a3b5012
6 changed files with 248 additions and 8 deletions
36
.env.default
36
.env.default
|
|
@ -1,11 +1,43 @@
|
||||||
|
# deployment
|
||||||
|
DEPLOY=01-blog
|
||||||
|
#DEPLOY=00-monitor 01-blog 02-selfoss 03-shaarli 04-gitea 05-wallabag 06-heimdall 07-ntfy 08-ittools 09-bichon
|
||||||
|
#DEPLOY=07-seafile 08-immich 09-navidrome
|
||||||
|
|
||||||
# general
|
# general
|
||||||
ROOT_INSTALL=/srv
|
ROOT_INSTALL=/srv
|
||||||
TZ=Europe/Paris
|
TZ=Europe/Paris
|
||||||
|
DOMAIN=domain.com
|
||||||
PUID=1000
|
PUID=1000
|
||||||
PGID=1000
|
PGID=1000
|
||||||
|
|
||||||
# apps
|
# wallabag
|
||||||
WALLABAG_URL=http://localhost
|
WALLABAG_URL=http://localhost
|
||||||
|
|
||||||
|
# ntfy
|
||||||
NTFY_URL=http://localhost:8017
|
NTFY_URL=http://localhost:8017
|
||||||
NTFY_BEHIND_PROXY=true
|
NTFY_BEHIND_PROXY=true
|
||||||
MAINTENANT_URL=http://localhost
|
|
||||||
|
# maintenant
|
||||||
|
MAINTENANT_URL=http://localhost
|
||||||
|
|
||||||
|
# seafile
|
||||||
|
HOST_SEAFILE=seafile
|
||||||
|
SEAFILE_ADMIN_EMAIL=admin@domain.com
|
||||||
|
SEAFILE_ADMIN_PASSWORD=adminpassword
|
||||||
|
SEAFILE_DB_ROOT_PASSWORD=dbpassword
|
||||||
|
SEAFILE_DB_USER=seafile
|
||||||
|
SEAFILE_DB_PASSWORD=seafile
|
||||||
|
SEAFILE_JWT_PRIVATE_KEY=GyNUgwdu9chG4lQIvn7sy0BJz4HHNeosXJ1cms6k
|
||||||
|
SEAFILE_PHOTOS=/srv/data/seafile
|
||||||
|
|
||||||
|
# immich
|
||||||
|
IMMICH_VERSION=release
|
||||||
|
UPLOAD_LOCATION=./library
|
||||||
|
DB_DATA_LOCATION=./postgres
|
||||||
|
DB_PASSWORD=postgres
|
||||||
|
DB_USERNAME=postgres
|
||||||
|
DB_DATABASE_NAME=immich
|
||||||
|
|
||||||
|
# navidrome
|
||||||
|
NAVIDROME_URL=https://music.domain.com
|
||||||
|
SEAFILE_ZIC=/srv/data/seafile
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -1,4 +1,4 @@
|
||||||
.env
|
.env
|
||||||
selfhosting.sublime-project
|
selfhosting.sublime-project
|
||||||
selfhosting.sublime-workspace
|
selfhosting.sublime-workspace
|
||||||
vm1.env
|
data/
|
||||||
77
07-seafile/docker-compose.seafile.yml
Normal file
77
07-seafile/docker-compose.seafile.yml
Normal file
|
|
@ -0,0 +1,77 @@
|
||||||
|
services:
|
||||||
|
db:
|
||||||
|
image: ${SEAFILE_DB_IMAGE:-mariadb:10.11}
|
||||||
|
container_name: seafile-mysql
|
||||||
|
environment:
|
||||||
|
- MYSQL_ROOT_PASSWORD=${SEAFILE_DB_ROOT_PASSWORD}
|
||||||
|
- MYSQL_LOG_CONSOLE=true
|
||||||
|
- MARIADB_AUTO_UPGRADE=1
|
||||||
|
volumes:
|
||||||
|
- seafile_db:/var/lib/mysql
|
||||||
|
healthcheck:
|
||||||
|
test:
|
||||||
|
[
|
||||||
|
"CMD",
|
||||||
|
"/usr/local/bin/healthcheck.sh",
|
||||||
|
"--connect",
|
||||||
|
"--mariadbupgrade",
|
||||||
|
"--innodb_initialized",
|
||||||
|
]
|
||||||
|
interval: 20s
|
||||||
|
start_period: 30s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 10
|
||||||
|
|
||||||
|
memcached:
|
||||||
|
image: memcached:1.6.29
|
||||||
|
container_name: seafile-memcached
|
||||||
|
entrypoint: memcached -m 256
|
||||||
|
|
||||||
|
seafile:
|
||||||
|
image: seafileltd/seafile-mc:12.0-latest
|
||||||
|
container_name: seafile
|
||||||
|
ports:
|
||||||
|
- "8017:80"
|
||||||
|
- "8080:8080"
|
||||||
|
environment:
|
||||||
|
- DB_HOST=db
|
||||||
|
- DB_PORT=3306
|
||||||
|
- DB_USER=${SEAFILE_DB_USER}
|
||||||
|
- DB_ROOT_PASSWD=${SEAFILE_DB_ROOT_PASSWORD}
|
||||||
|
- DB_PASSWORD=${SEAFILE_DB_PASSWORD}
|
||||||
|
- SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db
|
||||||
|
- SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db
|
||||||
|
- SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db
|
||||||
|
- TIME_ZONE=${TZ}
|
||||||
|
- INIT_SEAFILE_ADMIN_EMAIL=${SEAFILE_ADMIN_EMAIL}
|
||||||
|
- INIT_SEAFILE_ADMIN_PASSWORD=${SEAFILE_ADMIN_PASSWORD}
|
||||||
|
- SEAFILE_SERVER_HOSTNAME=${HOST_SEAFILE}.${DOMAIN}
|
||||||
|
- SEAFILE_SERVER_PROTOCOL=https
|
||||||
|
- SITE_ROOT=${SITE_ROOT:-/}
|
||||||
|
- NON_ROOT=${NON_ROOT:-false}
|
||||||
|
- JWT_PRIVATE_KEY=${SEAFILE_JWT_PRIVATE_KEY}
|
||||||
|
- SEAFILE_LOG_TO_STDOUT=${SEAFILE_LOG_TO_STDOUT:-false}
|
||||||
|
- ENABLE_SEADOC=${ENABLE_SEADOC:-true}
|
||||||
|
- SEADOC_SERVER_URL=https://${HOST_SEAFILE}.${DOMAIN}/sdoc-server
|
||||||
|
volumes:
|
||||||
|
- seafile_data:/shared:rw
|
||||||
|
- type: bind
|
||||||
|
source: ${ROOT_INSTALL}/data/seafile
|
||||||
|
target: /seafile-fuse
|
||||||
|
bind:
|
||||||
|
propagation: rshared
|
||||||
|
privileged: true
|
||||||
|
cap_add:
|
||||||
|
- SYS_ADMIN
|
||||||
|
labels:
|
||||||
|
caddy: https://${HOST_SEAFILE}.${DOMAIN}
|
||||||
|
caddy.reverse_proxy: "{{upstreams 80}}"
|
||||||
|
depends_on:
|
||||||
|
db:
|
||||||
|
condition: service_healthy
|
||||||
|
memcached:
|
||||||
|
condition: service_started
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
seafile_db:
|
||||||
|
seafile_data:
|
||||||
83
08-immich/docker-compose.immich.yml
Normal file
83
08-immich/docker-compose.immich.yml
Normal 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:
|
||||||
24
09-navidrome/docker-compose.navidrome.yml
Normal file
24
09-navidrome/docker-compose.navidrome.yml
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
services:
|
||||||
|
navidrome:
|
||||||
|
container_name: navidrome
|
||||||
|
image: deluan/navidrome:latest
|
||||||
|
ports:
|
||||||
|
- "4533:4533"
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
ND_LOGLEVEL: info
|
||||||
|
ND_BASEURL: ${NAVIDROME_URL}
|
||||||
|
volumes:
|
||||||
|
- navidrome-data:/data
|
||||||
|
- type: bind
|
||||||
|
source: ${SEAFILE_ZIC}
|
||||||
|
target: /music
|
||||||
|
read_only: true
|
||||||
|
bind:
|
||||||
|
propagation: rslave
|
||||||
|
privileged: true
|
||||||
|
cap_add:
|
||||||
|
- SYS_ADMIN
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
navidrome-data:
|
||||||
|
|
@ -16,12 +16,36 @@ fi
|
||||||
# Store the user-provided arguments
|
# Store the user-provided arguments
|
||||||
ARGS="$@"
|
ARGS="$@"
|
||||||
|
|
||||||
# Find all directories containing a file named docker-compose*.yml
|
CONFIG_FILE=".env"
|
||||||
find . -type f -name 'docker-compose*.yml' | while IFS= read -r compose_file; do
|
|
||||||
|
|
||||||
# Run the docker compose command with user arguments
|
# Check if config file exists
|
||||||
echo "Running: docker compose $compose_file"
|
if [ ! -f "$CONFIG_FILE" ]; then
|
||||||
docker compose -f "$compose_file" $ARGS
|
echo "Error: Config file '$CONFIG_FILE' not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract DEPLOY variable from .env file
|
||||||
|
DEPLOY=$(grep '^DEPLOY=' "$CONFIG_FILE" | cut -d '=' -f 2-)
|
||||||
|
|
||||||
|
if [ -z "$DEPLOY" ]; then
|
||||||
|
echo "Error: DEPLOY variable not set in $CONFIG_FILE"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Find all directories containing docker-compose*.yml files
|
||||||
|
DIRS=$(find . -type f -name 'docker-compose*.yml' -exec dirname {} \; | sort -u)
|
||||||
|
|
||||||
|
# Iterate through the filtered directories
|
||||||
|
for dir in $DIRS; do
|
||||||
|
# Extract directory name (e.g., "01-blog" from "./01-blog")
|
||||||
|
dir_name=$(basename "$dir")
|
||||||
|
|
||||||
|
# Check if directory name is in DEPLOY list
|
||||||
|
if echo "$DEPLOY" | grep -qw "$dir_name"; then
|
||||||
|
compose_file=$(find "$dir" -maxdepth 1 -type f -name 'docker-compose*.yml' | head -1)
|
||||||
|
echo "Running: docker compose --env-file .env -f $compose_file $ARGS"
|
||||||
|
docker compose --env-file .env -f "$compose_file" $ARGS
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue