first commit

This commit is contained in:
jonas@geiger-natur.de
2025-12-21 11:53:49 +01:00
commit 579a694fdd
15 changed files with 368 additions and 0 deletions

37
.github/dependabot.yml vendored Normal file
View File

@@ -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"

36
README.md Normal file
View File

@@ -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@<Server-IP>`
## Step 4 - Install Dokploy
Run `curl -sSL https://dokploy.com/install.sh | sh` in the Terminal

View File

@@ -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`

View File

@@ -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

View File

View File

@@ -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`

View File

@@ -0,0 +1,5 @@
services:
it-tools:
container_name: it-tools
image: corentinth/it-tools:2024.5.13-a0bc346
restart: unless-stopped

24
projects/n8n/README.md Normal file
View File

@@ -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`

View File

@@ -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:

View File

View File

@@ -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`

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File