diff --git a/deploy.sh b/deploy.sh index b0171ec..f03eb44 100644 --- a/deploy.sh +++ b/deploy.sh @@ -7,6 +7,33 @@ if [[ "$EUID" -ne 0 ]]; then exit 1 fi +# recursive replace function +replace_string_recursive() { + local DIRECTORY="$1" + local OLD_STRING="$2" + local NEW_STRING="$3" + + if [ ! -d "$DIRECTORY" ]; then + echo "Error: Directory '$DIRECTORY' does not exist." + return 1 + fi + + echo "Starting replacement of '$OLD_STRING' with '$NEW_STRING' in '$DIRECTORY'..." + find "$DIRECTORY" -type f -exec sed -i "s/$OLD_STRING/$NEW_STRING/g" {} + + + if [ $? -eq 0 ]; then + echo "Replacement completed successfully." + return 0 + else + echo "An error occurred during replacement." + return 1 + fi +} + +# example use +# replace_string_recursive "/path/to/directory" "oldstring" "newstring" + + # what this script needs to do: # request all install parameters needed from user @@ -37,19 +64,6 @@ bookstackdbpass="$(rand_hex)" bookstackdbrootpass="$(rand_hex)" onlyofficeJWT="$(rand_hex)" -# ---- Debug print (optional — remove in production) ---- -echo "Configuration summary:" -printf "%-25s %s\n" \ - "Admin email:" "$adminemail" \ - "Timezone:" "$timezone" \ - "Domain:" "$domain" \ - "Public IP:" "$publicip" \ - "Local IP:" "$localip" - - - - - # install docker echo "Updating apt and installing prerequisites..." apt update @@ -84,9 +98,6 @@ apt install -y \ echo "Docker installation complete." docker --version - - - # install dockge mkdir -p /opt/stacks /opt/dockge cd /opt/dockge @@ -94,449 +105,9 @@ cd /opt/dockge # Download your compose.yaml curl "https://dockge.kuma.pet/compose.yaml?port=5001&stacksPath=%2Fopt%2Fstacks" --output compose.yaml -# Start the Server -# docker compose up -d - -# create directories in /opt/stacks for containers -# directories needed: npm,dozzle,kuma,browser,site,owncloud,vaultwarden,wireguard,convertx,it-tools,bookstack,jellyfin,onlyoffice,downloader,dashboard,pihole -cd /opt/stacks -mkdir /opt/stacks/{npm,dozzle,kuma,browser,site,owncloud,vaultwarden,wireguard,convertx,it-tools,bookstack,jellyfin,onlyoffice,downloader,dashboard,pihole} -# write docker setup for each component to correct directories - -# Nginx Proxy: -# needed: compose.yml, auto-generated proxy host files -# variables needed: domain, admin email, admin pass -cat > /opt/stacks/npm/compose.yml <: - - 80:80 # Public HTTP Port - - 443:443 # Public HTTPS Port - - 81:81 # Admin Web Port - # Add any other Stream port you want to expose - # - '21:21' # FTP - - environment: - TZ: $timezone - # Uncomment this if you want to change the location of - # the SQLite DB file within the container - # DB_SQLITE_FILE: "/data/database.sqlite" - - # Uncomment this if IPv6 is not enabled on your host - # DISABLE_IPV6: 'true' - - volumes: - - ./data:/data - - ./letsencrypt:/etc/letsencrypt -networks: - dockge_default: - external: true -EOF - -# Uptime Kuma: -# needed: compose.yml -# variables needed: admin email, admin pass -cat > /opt/stacks/kuma/compose.yml < /opt/stacks/browser/compose.yml < /opt/stacks/site/compose.yml < /opt/stacks/owncloud/compose.yml < /opt/stacks/vaultwarden/compose.yml < /opt/stacks/wireguard/compose.yml < /opt/stacks/convertx/compose.yml < /opt/stacks/it-tools/compose.yml < /opt/stacks/bookstack/compose.yml < /opt/stacks/jellyfin/compose.yml < /opt/stacks/onlyoffice/compose.yml < /opt/stacks/dashboard/compose.yml </opt/stacks/dozzle/compose.yml </opt/stacks/pihole/compose.yml <: + - 80:80 # Public HTTP Port + - 443:443 # Public HTTPS Port + - 81:81 # Admin Web Port + # Add any other Stream port you want to expose + # - '21:21' # FTP + + environment: + TZ: $timezone + # Uncomment this if you want to change the location of + # the SQLite DB file within the container + # DB_SQLITE_FILE: "/data/database.sqlite" + + # Uncomment this if IPv6 is not enabled on your host + # DISABLE_IPV6: 'true' + + volumes: + - ./data:/data + - ./letsencrypt:/etc/letsencrypt +networks: + dockge_default: + external: true \ No newline at end of file diff --git a/stacks/onlyoffice/compose.yml b/stacks/onlyoffice/compose.yml index e69de29..3ee6970 100644 --- a/stacks/onlyoffice/compose.yml +++ b/stacks/onlyoffice/compose.yml @@ -0,0 +1,17 @@ +services: + documentserver: + stdin_open: true + tty: true + restart: always + networks: + - dockge_default + image: onlyoffice/documentserver + dns: + - 1.1.1.1 + - 8.8.8.8 + environment: + JWT_SECRET: $onlyofficeJWT + JWT_IN_BODY: true +networks: + dockge_default: + external: true \ No newline at end of file diff --git a/stacks/owncloud/compose.yml b/stacks/owncloud/compose.yml index e69de29..8df7971 100644 --- a/stacks/owncloud/compose.yml +++ b/stacks/owncloud/compose.yml @@ -0,0 +1,69 @@ +services: + owncloud_server: + image: owncloud/server:latest + container_name: owncloud_server + restart: always + networks: + - dockge_default + depends_on: + - owncloud_db + - owncloud_redis + environment: + OWNCLOUD_DOMAIN: https://cloud.$domain + OWNCLOUD_TRUSTED_DOMAINS: localhost, cloud.$domain + OWNCLOUD_DB_TYPE: mysql + OWNCLOUD_DB_NAME: owncloud + OWNCLOUD_DB_USERNAME: owncloud + OWNCLOUD_DB_PASSWORD: $ownclouddbpass + OWNCLOUD_DB_HOST: owncloud_db + OWNCLOUD_ADMIN_USERNAME: $adminemail + OWNCLOUD_ADMIN_PASSWORD: $adminpass + OWNCLOUD_MYSQL_UTF8MB4: true + OWNCLOUD_REDIS_ENABLED: true + OWNCLOUD_REDIS_HOST: owncloud_redis + healthcheck: + test: ["CMD", "/usr/bin/healthcheck"] + interval: 30s + timeout: 10s + retries: 5 + volumes: + - ./data:/mnt/data + + owncloud_db: + image: mariadb:10.11 # minimum required ownCloud version is 10.9 + container_name: owncloud_db + restart: always + networks: + - dockge_default + environment: + - MYSQL_ROOT_PASSWORD=$ownclouddbrootpass + - MYSQL_USER=owncloud + - MYSQL_PASSWORD=$ownclouddbpass + - MYSQL_DATABASE=owncloud + - MARIADB_AUTO_UPGRADE=1 + command: ["--max-allowed-packet=128M", "--innodb-log-file-size=64M"] + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-u", "root", "--password=owncloud"] + interval: 10s + timeout: 5s + retries: 5 + volumes: + - ./mysql:/var/lib/mysql + + owncloud_redis: + image: redis:6 + container_name: owncloud_redis + restart: always + networks: + - dockge_default + command: ["--databases", "1"] + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 5 + volumes: + - ./redis:/data +networks: + dockge_default: + external: true \ No newline at end of file diff --git a/stacks/pihole/compose.yml b/stacks/pihole/compose.yml index e69de29..e2b3669 100644 --- a/stacks/pihole/compose.yml +++ b/stacks/pihole/compose.yml @@ -0,0 +1,23 @@ +services: + pihole: + container_name: pihole + image: pihole/pihole:latest + dns: + - 1.1.1.1 + ports: + - 53:53/tcp + - 53:53/udp + environment: + TZ: Europe/Amsterdam + FTLCONF_WEBSERVER_API_PASSWORD: z5fGWz2i0q + volumes: + - ./config:/etc/pihole + - ./dns:/etc/dnsmasq.d + cap_add: + - NET_ADMIN + restart: unless-stopped + networks: + - dockge_default +networks: + dockge_default: + external: true \ No newline at end of file diff --git a/stacks/site/compose.yml b/stacks/site/compose.yml index e69de29..1d3b052 100644 --- a/stacks/site/compose.yml +++ b/stacks/site/compose.yml @@ -0,0 +1,14 @@ +services: + site: + image: lscr.io/linuxserver/nginx:latest + restart: unless-stopped + user: root + networks: + - dockge_default + environment: + TZ: $timezone + volumes: + - ./config:/config +networks: + dockge_default: + external: true \ No newline at end of file diff --git a/stacks/vaultwarden/compose.yml b/stacks/vaultwarden/compose.yml index e69de29..43eab9f 100644 --- a/stacks/vaultwarden/compose.yml +++ b/stacks/vaultwarden/compose.yml @@ -0,0 +1,12 @@ +services: + vaultwarden: + container_name: vaultwarden + image: vaultwarden/server:latest + restart: unless-stopped + volumes: + - ./data:/data/ + networks: + - dockge_default +networks: + dockge_default: + external: true \ No newline at end of file diff --git a/stacks/wireguard/compose.yml b/stacks/wireguard/compose.yml index e69de29..99eca45 100644 --- a/stacks/wireguard/compose.yml +++ b/stacks/wireguard/compose.yml @@ -0,0 +1,23 @@ +services: + wireguard: + container_name: wireguard + environment: + WG_HOST: $publicip + PASSWORD: $adminpass + volumes: + - ./wireguard:/etc/wireguard + ports: + - 51820:51820/udp + networks: + - dockge_default + cap_add: + - NET_ADMIN + - SYS_MODULE + sysctls: + - net.ipv4.conf.all.src_valid_mark=1 + - net.ipv4.ip_forward=1 + restart: unless-stopped + image: weejewel/wg-easy +networks: + dockge_default: + external: true \ No newline at end of file