diff --git a/.gitignore b/.gitignore index 62ed097..29c0567 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ certs/ data/ env/ sql/ + +.env diff --git a/compose.yml b/compose.yml index 6e7a680..381567a 100644 --- a/compose.yml +++ b/compose.yml @@ -24,12 +24,13 @@ services: container_name: node-exporter image: quay.io/prometheus/node-exporter:latest restart: always - command: --path.rootfs=/host + command: + - --path.rootfs=/host pid: host volumes: - /:/host:ro,rslave networks: - - service_network + - info_network expose: - 9100 @@ -39,7 +40,7 @@ services: restart: always command: - --housekeeping_interval=30s - - --disable_metrics=disk,diskIO,network,tcp,udp,percpu,sched,process + - --disable_metrics=disk,diskIO,network,tcp,udp,percpu,sched,process # lower CPU usage - --docker_only=true devices: - /dev/kmsg @@ -50,7 +51,7 @@ services: - /var/lib/docker:/var/lib/docker:ro - /dev/disk:/dev/disk:ro networks: - - service_network + - info_network expose: - 8080 @@ -58,13 +59,15 @@ services: container_name: prometheus image: prom/prometheus:latest restart: unless-stopped - command: --config.file=/config/prometheus.yml + command: + - --config.file=/config/prometheus.yml user: 1001:0 volumes: - ./data/prometheus/config:/config - ./data/prometheus/data:/prometheus networks: - service_network + - info_network expose: - 9090 @@ -104,7 +107,7 @@ services: env_file: ./env/nextcloud.env volumes: - ./data/nextcloud:/var/www/html - - /mnt/storage/nextcloud:/var/www/html/data + - $LARGE_STORAGE_DIR/nextcloud:/var/www/html/data networks: - service_network - nextcloud_network @@ -118,7 +121,10 @@ services: container_name: nextcloud-db image: mariadb:10.6 restart: always - command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW + command: + - --transaction-isolation=READ-COMMITTED + - --log-bin=binlog + - --binlog-format=ROW env_file: ./env/nextcloud-db.env volumes: - ./data/nextcloud-db:/var/lib/mysql @@ -152,7 +158,8 @@ services: container_name: pterodactyl-db image: mariadb:10.5 restart: always - command: --default-authentication-plugin=mysql_native_password + command: + - --default-authentication-plugin=mysql_native_password env_file: ./env/pterodactyl-db.env volumes: - ./data/pterodactyl-db:/var/lib/mysql @@ -182,8 +189,8 @@ services: working_dir: /photoprism volumes: - ./data/photoprism:/photoprism/storage - - /mnt/storage/photoprism/import:/photoprism/import - - /mnt/storage/photoprism/originals:/photoprism/originals + - $LARGE_STORAGE_DIR/photoprism/import:/photoprism/import + - $LARGE_STORAGE_DIR/photoprism/originals:/photoprism/originals networks: - service_network - photoprism_network @@ -196,7 +203,14 @@ services: container_name: photoprism-db image: mariadb:10.10 restart: always - command: --innodb-buffer-pool-size=512M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120 + command: + - --innodb-buffer-pool-size=512M + - --transaction-isolation=READ-COMMITTED + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci + - --max-connections=512 + - --innodb-rollback-on-timeout=OFF + - --innodb-lock-wait-timeout=120 env_file: ./env/photoprism-db.env volumes: - ./data/photoprism-db:/var/lib/mysql @@ -219,9 +233,10 @@ services: volumes: - ./data/jellyfin/config:/config - ./data/jellyfin/cache:/cache - - /mnt/storage/media/movies:/movies - - /mnt/storage/media/shows:/shows - - /mnt/storage/media/books:/books + - $LARGE_STORAGE_DIR/media/movies:/movies + - $LARGE_STORAGE_DIR/media/shows:/shows + - $LARGE_STORAGE_DIR/media/books:/books + - $LARGE_STORAGE_DIR/media/yt:/yt networks: service_network: exposed_service_network: @@ -233,7 +248,7 @@ services: restart: unless-stopped env_file: ./env/gitea.env volumes: - - /mnt/storage/gitea:/data + - $LARGE_STORAGE_DIR/gitea:/data networks: - service_network - gitea_network @@ -269,6 +284,7 @@ services: container_name: uptime-kuma image: louislam/uptime-kuma:latest restart: unless-stopped + tty: true volumes: - ./data/uptime-kuma:/app/data networks: @@ -276,8 +292,9 @@ services: expose: - 3001 - networks: + info_network: + name: info_network nextcloud_network: name: nextcloud_network pterodactyl_network: diff --git a/scripts/backup-all.sh b/scripts/backup-all.sh new file mode 100755 index 0000000..8b8c06b --- /dev/null +++ b/scripts/backup-all.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +DEST_DIR="$1" + +if [ -z "$DEST_DIR" ]; then + echo USAGE: "$SCRIPT_DIR"/backup-all.sh [DEST] + exit 1 +fi + +# Backup new data & delete old data +/usr/bin/rsync -a --delete "$SCRIPT_DIR"/../ "$DEST_DIR" diff --git a/scripts/backup-data.sh b/scripts/backup-data.sh new file mode 100755 index 0000000..fda368a --- /dev/null +++ b/scripts/backup-data.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +DEST_DIR="$1" + +if [ -z "$DEST_DIR" ]; then + echo USAGE: "$SCRIPT_DIR"/backup-all.sh [DEST] + exit 1 +fi + +# Backup new data & delete old data +/usr/bin/rsync -a --delete "$SCRIPT_DIR"/../data/ "$DEST_DIR" diff --git a/scripts/backup-db.sh b/scripts/backup-db.sh index 2433ded..84d3b70 100755 --- a/scripts/backup-db.sh +++ b/scripts/backup-db.sh @@ -1,14 +1,14 @@ #!/bin/bash -COMPOSE_PATH=/root/new-services - - -databases=$(docker compose -f ${COMPOSE_PATH}/compose.yml ps | grep '\-db' | awk '{print $1}' | tr '\n' ' ') +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +COMPOSE_DIR="$SCRIPT_DIR"/../ +# Get all service databases, dump databases, & copy database to compose path +databases=$(docker compose -f ${COMPOSE_DIR}/compose.yml ps | grep '\-db' | awk '{print $1}' | tr '\n' ' ') for db in $databases; do - db_env_path=${COMPOSE_PATH}/env/${db}.env + db_env_path=${COMPOSE_DIR}/env/${db}.env - if [ ! -f $db_env_path ]; then + if [ ! -f $db_env_path ]; then echo "Could not find the environment file for database '$db'" continue fi @@ -18,12 +18,12 @@ for db in $databases; do db_dmp_cmd="mysqldump --password=${db_passwd} ${db_service} > /root/${db_service}.sql" echo -e "\nDumping database '${db}'" - docker exec ${db} sh -c "$db_dmp_cmd" &> /dev/null - - echo "Copying database dump '${db_service}.sql' to '${COMPOSE_PATH}/sql/${db_service}.sql'" - docker cp ${db}:/root/${db_service}.sql ${COMPOSE_PATH}/sql/${db_service}.sql &> /dev/null + docker exec ${db} sh -c "$db_dmp_cmd" &> /dev/null - chown -R root:root ${COMPOSE_PATH}/sql + echo "Copying database dump '${db_service}.sql' to '${COMPOSE_DIR}/sql/${db_service}.sql'" + docker cp ${db}:/root/${db_service}.sql ${COMPOSE_DIR}/sql/${db_service}.sql &> /dev/null + + chown -R root:root ${COMPOSE_DIR}/sql done echo -e "\nDumping complete!"