commit 579a694fdd6c683d37722df2d42c76e7c8be95e1 Author: jonas@geiger-natur.de Date: Sun Dec 21 11:53:49 2025 +0100 first commit diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..da84060 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,37 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + #firefly + - package-ecosystem: "docker-compose" + directory: "/projects/firefly" + schedule: + interval: "daily" + #immich + - package-ecosystem: "docker-compose" + directory: "/projects/immich" + schedule: + interval: "daily" + #it-tools + - package-ecosystem: "docker-compose" + directory: "/projects/it-tools" + schedule: + interval: "daily" + #n8n + - package-ecosystem: "docker-compose" + directory: "/projects/n8n" + schedule: + interval: "daily" + #paperless + - package-ecosystem: "docker-compose" + directory: "/projects/paperless" + schedule: + interval: "daily" + #tandoor + - package-ecosystem: "docker-compose" + directory: "/projects/tandoor" + schedule: + interval: "daily" \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..c6c17a3 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +# Prerequisites + +- Hetzner Account +- Github Account + +## Step 1 - Generate SSH Keys + +- Run command "ssh-keygen -t ed25519" in terminal + +## Step 2 - Hetzner Project + +- Select ``Console` and create a new Project + +### SSH-Key + +- Select `Security` and add a SSH-Key. Copy the whole content of the id_ed25519.pub file into the input field + +### Server + +- Select `Server` and add a Server. +- Choose a Server-type and location. +- For a Image klick on `Apps` and select Docker CE. +- Add yor SSH-Key and scroll down `Name`. + +### Firewall + +- Klick on the new Server and select Tab `Firewalls`. Then `Create Firewall`. +- The presets can stay. Just add one new incoming-rule with port `3000`. Then click `Create Firewall` again. + +## Step 3 - Connect to Server via SSH + +- Open the Terminal and type `ssh root@` + +## Step 4 - Install Dokploy + +Run `curl -sSL https://dokploy.com/install.sh | sh` in the Terminal \ No newline at end of file diff --git a/projects/firefly/README.md b/projects/firefly/README.md new file mode 100644 index 0000000..9c58c7c --- /dev/null +++ b/projects/firefly/README.md @@ -0,0 +1,29 @@ +# [firefly](https://www.firefly-iii.org) + +## firefly + +### General + +- Compose Path: `./projects/firefly/docker-compose.yml` + +### Environment + +- SITE_OWNER: #site owner email-address +- DB_CONNECTION: #db connection type like `mysql` or `postgres` +- DB_HOST: #db hostname +- DB_PORT: #database port - default: `3306` +- DB_DATABASE: #database name +- DB_USERNAME: #database user-name +- DB_PASSWORD: #database password +- STATIC_CRON_TOKEN: #32 digits token - use [it-tools token-generator](https://it-tools.tech/token-generator?length=32) to get one +- APP_ENV: #default: `production` +- APP_KEY: #a base64 php app key - use [Generate Laravel APP_KEY](https://generate-random.org/laravel-key) to get one +- APP_URL: #default: `http://app:8080` +- TRUSTED_PROXIES: default: `"*"` + +### Domains + +- Service Name: `firefly` +- Container Port: `8080` +- HTTPS: `true` +- Certificate Provider: `Let's Encrypt` \ No newline at end of file diff --git a/projects/firefly/docker-compose.yml b/projects/firefly/docker-compose.yml new file mode 100644 index 0000000..403c639 --- /dev/null +++ b/projects/firefly/docker-compose.yml @@ -0,0 +1,62 @@ +version: '3.8' +services: + firefly: + image: fireflyiii/core:latest + hostname: app + container_name: firefly_iii_core + restart: unless-stopped + volumes: + - firefly_iii_upload:/var/www/html/storage/upload + environment: + SITE_OWNER: ${SITE_OWNER} + DB_CONNECTION: ${DB_CONNECTION} + DB_HOST: ${DB_HOST} + DB_PORT: ${DB_PORT} + DB_DATABASE: ${DB_DATABASE} + DB_USERNAME: ${DB_USERNAME} + DB_PASSWORD: ${DB_PASSWORD} + STATIC_CRON_TOKEN: ${STATIC_CRON_TOKEN} + APP_ENV: ${APP_ENV} + APP_KEY: ${APP_KEY} + APP_URL: ${APP_URL} + TRUSTED_PROXIES: ${TRUSTED_PROXIES} + networks: + - dokploy-network + + cron: + image: alpine:3.23.2 + restart: unless-stopped + container_name: firefly_iii_cron + environment: + STATIC_CRON_TOKEN: ${STATIC_CRON_TOKEN} + command: sh -c " + apk add tzdata && \ + (ln -s /usr/share/zoneinfo/$$TZ /etc/localtime || true) && \ + echo \"0 3 * * * wget -qO- http://app:8080/api/v1/cron/$$STATIC_CRON_TOKEN;echo\" + | crontab - && \ + crond -f -L /dev/stdout" + networks: + - dokploy-network + + db: + image: mariadb:11.8 + hostname: db + container_name: firefly_iii_db + restart: unless-stopped + environment: + MYSQL_RANDOM_ROOT_PASSWORD: ${MYSQL_RANDOM_ROOT_PASSWORD} + MYSQL_USER: ${DB_USERNAME} + MYSQL_PASSWORD: ${DB_PASSWORD} + MYSQL_DATABASE: ${DB_DATABASE} + networks: + - dokploy-network + volumes: + - firefly_iii_db:/var/lib/mysql + +volumes: + firefly_iii_upload: + firefly_iii_db: + +networks: + dokploy-network: + external: true diff --git a/projects/immich/README.md b/projects/immich/README.md new file mode 100644 index 0000000..e69de29 diff --git a/projects/it-tools/README.md b/projects/it-tools/README.md new file mode 100644 index 0000000..259494b --- /dev/null +++ b/projects/it-tools/README.md @@ -0,0 +1,14 @@ +# [it-tools](https://it-tools.tech) + +## n8n + +### General + +- Compose Path: `./projects/it-tools/it-tools.yml` + +### Domains + +- Service Name: `it-tools` +- Container Port: `80` +- HTTPS: `true` +- Certificate Provider: `Let's Encrypt` \ No newline at end of file diff --git a/projects/it-tools/docker-compose.yml b/projects/it-tools/docker-compose.yml new file mode 100644 index 0000000..21dc5e4 --- /dev/null +++ b/projects/it-tools/docker-compose.yml @@ -0,0 +1,5 @@ +services: + it-tools: + container_name: it-tools + image: corentinth/it-tools:2024.5.13-a0bc346 + restart: unless-stopped diff --git a/projects/n8n/README.md b/projects/n8n/README.md new file mode 100644 index 0000000..238991f --- /dev/null +++ b/projects/n8n/README.md @@ -0,0 +1,24 @@ +# [n8n](https://n8n.io) + +## n8n + +### General + +- Compose Path: `./projects/n8n/n8n.yml` + +### Environment + +- N8N_HOST: same as host in #[domains](#domains) +- N8N_PORT: #default `5678` +- N8N_PROTOCOL: #default: `http` +- NODE_ENV: #default: `production` +- WEBHOOK_URL: #default: `https://${N8N_HOST}/` +- GENERIC_TIMEZONE: #local time zone - example: `Europe/Berlin` +- N8N_SECURE_COOKIE: #default `false` + +### Domains + +- Service Name: `n8n` +- Container Port: `5678` +- HTTPS: `true` +- Certificate Provider: `Let's Encrypt` \ No newline at end of file diff --git a/projects/n8n/docker-compose.yml b/projects/n8n/docker-compose.yml new file mode 100644 index 0000000..1c5cc30 --- /dev/null +++ b/projects/n8n/docker-compose.yml @@ -0,0 +1,17 @@ +services: + n8n: + image: docker.n8n.io/n8nio/n8n:1.104.0 + restart: always + environment: + - N8N_HOST=${N8N_HOST} + - N8N_PORT=${N8N_PORT} + - N8N_PROTOCOL=http + - NODE_ENV=production + - WEBHOOK_URL=https://${N8N_HOST}/ + - GENERIC_TIMEZONE=${GENERIC_TIMEZONE} + - N8N_SECURE_COOKIE=false + volumes: + - n8n_data:/home/node/.n8n + +volumes: + n8n_data: diff --git a/projects/nextcloud/README.md b/projects/nextcloud/README.md new file mode 100644 index 0000000..e69de29 diff --git a/projects/paperless/README.md b/projects/paperless/README.md new file mode 100644 index 0000000..39b43a7 --- /dev/null +++ b/projects/paperless/README.md @@ -0,0 +1,29 @@ +# [paperless](https://docs.paperless-ngx.com) + +## paperless + +### General + +- Compose Path: `./projects/paperless/docker-compose.yml` + +### Environment + +- PAPERLESS_REDIS: #default: `redis://redis:6379` +- PAPERLESS_TIME_ZONE: #local time zone - example: `Europe/Berlin` +- PAPERLESS_ADMIN_USER: +- PAPERLESS_ADMIN_PASSWORD: +- PAPERLESS_OCR_LANGUAGE: #example: `deu+eng` +- PAPERLESS_URL: #same as [domains](#domains) host +- PAPERLESS_ALLOWED_HOSTS: +- PAPERLESS_DBHOST: #db container-name +- PAPERLESS_DBPASS: #same as db POSTGRES_PASSWORD +- POSTGRES_DB: #default: `paperless` +- POSTGRES_USER: +- POSTGRES_PASSWORD: #database password - same as PAPERLESS_DBPASS + +### Domains + +- Service Name: `paperless` +- Container Port: `8000` +- HTTPS: `true` +- Certificate Provider: `Let's Encrypt` \ No newline at end of file diff --git a/projects/paperless/docker-compose.yml b/projects/paperless/docker-compose.yml new file mode 100644 index 0000000..62b861f --- /dev/null +++ b/projects/paperless/docker-compose.yml @@ -0,0 +1,62 @@ +version: '3.8' +services: + paperless: + image: ghcr.io/paperless-ngx/paperless-ngx:2.20.3 + container_name: paperless + restart: unless-stopped + volumes: + - paperlessdata:/usr/src/paperless/data + - paperlessmedia:/usr/src/paperless/media + - paperlessexport:/usr/src/paperless/export + - paperlessconsume:/usr/src/paperless/consume + environment: + PAPERLESS_REDIS: ${PAPERLESS_REDIS} + PAPERLESS_TIME_ZONE: ${PAPERLESS_TIME_ZONE} + PAPERLESS_ADMIN_USER: ${PAPERLESS_ADMIN_USER} + PAPERLESS_ADMIN_PASSWORD: ${PAPERLESS_ADMIN_PASSWORD} + PAPERLESS_OCR_LANGUAGE: ${PAPERLESS_OCR_LANGUAGE} + PAPERLESS_URL: https://${PAPERLESS_URL} + PAPERLESS_ALLOWED_HOSTS: ${PAPERLESS_ALLOWED_HOSTS} + PAPERLESS_DBHOST: ${PAPERLESS_DBHOST} + PAPERLESS_DBPASS: ${PAPERLESS_DBPASS} + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8000"] + interval: 30s + timeout: 10s + retries: 5 + networks: + - dokploy-network + + redis: + image: redis:8.4.0 + container_name: paperless-redis + restart: unless-stopped + volumes: + - paperlessredis:/user/local/etc/redis + networks: + - dokploy-network + + db: + container_name: paperless-db + image: postgres:16 + restart: unless-stopped + volumes: + - paperlessdb:/var/lib/postgresql/data + environment: + POSTGRES_DB: ${POSTGRES_DB} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + networks: + - dokploy-network + +volumes: + paperlessdb: + paperlessdata: + paperlessmedia: + paperlessexport: + paperlessconsume: + paperlessredis: + +networks: + dokploy-network: + external: true diff --git a/projects/tandoor/README.md b/projects/tandoor/README.md new file mode 100644 index 0000000..c5c1af9 --- /dev/null +++ b/projects/tandoor/README.md @@ -0,0 +1,16 @@ +# [tandoor](https://tandoor.dev) + +## tandoor + +### General + +- Compose Path: `./projects/tandoor/docker-compose.yml` + +### Environment + +POSTGRES_HOST: #db name (not container-name) +POSTGRES_PORT: #default: `5432` +POSTGRES_USER: #database user +POSTGRES_PASSWORD: #database password +POSTGRES_DB: #database name +SECRET_KEY: #32 digits token - use [it-tools token-generator](https://it-tools.tech/token-generator?length=32) to get one \ No newline at end of file diff --git a/projects/tandoor/docker-compose.yml b/projects/tandoor/docker-compose.yml new file mode 100644 index 0000000..b62912f --- /dev/null +++ b/projects/tandoor/docker-compose.yml @@ -0,0 +1,37 @@ +version: '3.8' +services: + tandoor: + restart: unless-stopped + image: vabene1111/recipes:2.3.6 + environment: + POSTGRES_HOST: ${POSTGRES_HOST} + POSTGRES_PORT: ${POSTGRES_PORT} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + SECRET_KEY: ${SECRET_KEY} + volumes: + - staticfiles:/opt/recipes/staticfiles + - ./mediafiles:/opt/recipes/mediafiles + networks: + - dokploy-network + + db: + container_name: tandoor_db + restart: unless-stopped + image: postgres:16-alpine + volumes: + - ./postgresql:/var/lib/postgresql/data + environment: + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + networks: + - dokploy-network + +volumes: + staticfiles: + +networks: + dokploy-network: + external: true diff --git a/projects/vaultwarden/README.md b/projects/vaultwarden/README.md new file mode 100644 index 0000000..e69de29