Compare commits

..

10 Commits

Author SHA1 Message Date
SauravDhakal
e2310052ca feat: add memos 2026-04-02 19:22:31 +05:45
sauravdhakal12
014e7cb8ed Cache test 2026-04-02 13:34:57 +00:00
SauravDhakal
29913c972f fix: site volume issue 2026-04-01 21:24:38 +05:45
sauravdhakal12
457ec43c8a fix: woodpecker 2026-04-01 15:23:05 +00:00
SauravDhakal
b2bfdb0064 fix: add missing services in main docker compose 2026-04-01 12:39:41 +05:45
SauravDhakal
c03b9eed6c feat: gitea and woodpecker 2026-04-01 12:25:04 +05:45
sauravdhakal12
32b90be079 fix: Filebrowser and stuff 2026-04-01 06:27:59 +00:00
SauravDhakal
251cb1aa2a fix: include all in main docker compose 2026-03-30 22:40:51 +05:45
SauravDhakal
1f843fabf7 feat: more services
file browser, n8n, portainer, syncthing, uptime-kuma, watchtower
2026-03-30 22:39:23 +05:45
SauravDhakal
3f850d5734 fix: localhost 2026-03-30 21:53:00 +05:45
13 changed files with 216 additions and 6 deletions

2
.gitignore vendored
View File

@@ -4,3 +4,5 @@ data/
caddy/data/ caddy/data/
caddy/config/ caddy/config/
filebrowser/

View File

@@ -18,10 +18,6 @@
# Public — only webhook endpoint, no UI # Public — only webhook endpoint, no UI
n8n.sauravdhakal.com.np { n8n.sauravdhakal.com.np {
reverse_proxy localhost:5678 {
# Only allow webhook paths publicly
header_up Host {host}
}
@public path /webhook/* /webhook-test/* @public path /webhook/* /webhook-test/*
handle @public { handle @public {
reverse_proxy localhost:5678 reverse_proxy localhost:5678
@@ -54,10 +50,66 @@ actual.sauravdhakal.com.np {
immich.sauravdhakal.com.np { immich.sauravdhakal.com.np {
bind 100.81.85.182 bind 100.81.85.182
reverse_proxy immich-server:8082 reverse_proxy localhost:8082
} }
filebrowser.sauravdhakal.com.np { filebrowser.sauravdhakal.com.np {
bind 100.81.85.182 bind 100.81.85.182
reverse_proxy filebrowser:8083 reverse_proxy localhost:8083
} }
syncthing.sauravdhakal.com.np {
bind 100.81.85.182
reverse_proxy localhost:8384
}
portainer.sauravdhakal.com.np {
bind 100.81.85.182
reverse_proxy localhost:9000
}
uptime.sauravdhakal.com.np {
bind 100.81.85.182
reverse_proxy localhost:3001
}
# Gitea — VPN only, it's your private git server
gitea.sauravdhakal.com.np {
bind 100.81.85.182
reverse_proxy localhost:3000
}
# Woodpecker CI — VPN only
ci.sauravdhakal.com.np {
bind 100.81.85.182
reverse_proxy localhost:8000
}
# Your site — public, with caching
sauravdhakal.com.np, www.sauravdhakal.com.np {
root * /home/saurav/site/public
header /static/* Cache-Control "public, max-age=31536000, immutable" # assets forever
header /assets/* Cache-Control "public, max-age=31536000, immutable" # assets forever
# This is where you learn caching
header Cache-Control "public, max-age=3600" # cache 1 hour by default
file_server
encode gzip
}
memos.sauravdhakal.com.np {
bind 100.81.85.182
reverse_proxy localhost:5230
}
dozzle.sauravdhakal.com.np {
bind 100.81.85.182
reverse_proxy localhost:8888
}
#
# glances.sauravdhakal.com.np {
# bind 100.81.85.182
# reverse_proxy localhost:61208
# }

View File

@@ -3,6 +3,15 @@ include:
- services/vaultwarden.yml - services/vaultwarden.yml
- services/actual.yml - services/actual.yml
- services/immich.yml - services/immich.yml
- services/filebrowser.yml
- services/syncthing.yml
- services/n8n.yml
- services/portainer.yml
# - services/watchtower.yml
- services/uptime-kuma.yml
- services/woodpecker.yml
- services/gitea.yml
- services/memos.yml
networks: networks:
caddy_net: caddy_net:

View File

@@ -8,6 +8,7 @@ services:
- ../caddy/Caddyfile:/etc/caddy/Caddyfile - ../caddy/Caddyfile:/etc/caddy/Caddyfile
- ../caddy/data:/data - ../caddy/data:/data
- ../caddy/config:/config - ../caddy/config:/config
- /home/saurav/site/public:/home/saurav/site/public:ro # Mount your portfolio site (read-only)
network_mode: host # Caddy sees ALL host interfaces including Netbird network_mode: host # Caddy sees ALL host interfaces including Netbird
networks: networks:

13
services/filebrowser.yml Normal file
View File

@@ -0,0 +1,13 @@
services:
filebrowser:
image: filebrowser/filebrowser:latest
restart: unless-stopped
user: "1000:1000"
ports:
- "127.0.0.1:8083:8080"
command: --address 0.0.0.0 --port 8080 --database /filebrowser.db --root /srv
volumes:
- /home/saurav:/srv
- /home/saurav/cloud:/srv/cloud
- /home/saurav/hetzner_self/filebrowser/filebrowser.db:/filebrowser.db
- /home/saurav/hetzner_self/filebrowser/settings.json:/config/settings.json

19
services/gitea.yml Normal file
View File

@@ -0,0 +1,19 @@
services:
gitea:
image: gitea/gitea:latest
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000"
- "2222:22" # git ssh — different port to avoid conflict
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=sqlite3
- GITEA__database__PATH=/data/gitea/gitea.db
- GITEA__server__DOMAIN=gitea.sauravdhakal.com.np
- GITEA__server__ROOT_URL=https://gitea.sauravdhakal.com.np
- GITEA__server__SSH_DOMAIN=gitea.sauravdhakal.com.np
- GITEA__server__SSH_PORT=2222
- GITEA__service__DISABLE_REGISTRATION=true # only you use this
volumes:
- /home/saurav/hetzner_self/data/gitea:/data

9
services/memos.yml Normal file
View File

@@ -0,0 +1,9 @@
services:
memos:
image: neosmemo/memos:stable
restart: unless-stopped
user: "1000:1000"
ports:
- "127.0.0.1:5230:5230"
volumes:
- /home/saurav/hetzner_self/data/memos:/var/opt/memos

17
services/n8n.yml Normal file
View File

@@ -0,0 +1,17 @@
services:
n8n:
image: n8nio/n8n:latest
restart: unless-stopped
user: "node"
ports:
- "127.0.0.1:5678:5678"
environment:
- N8N_HOST=n8n.sauravdhakal.com.np
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.sauravdhakal.com.np
- N8N_EDITOR_BASE_URL=https://n8n-admin.sauravdhakal.com.np
- GENERIC_TIMEZONE=Asia/Kathmandu
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
volumes:
- /home/saurav/hetzner_self/data/n8n:/home/node/.n8n

9
services/portainer.yml Normal file
View File

@@ -0,0 +1,9 @@
services:
portainer:
image: portainer/portainer-ce:latest
restart: unless-stopped
ports:
- "127.0.0.1:9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock # needs docker socket
- /home/saurav/hetzner_self/data/portainer:/data

16
services/syncthing.yml Normal file
View File

@@ -0,0 +1,16 @@
services:
syncthing:
image: syncthing/syncthing:latest
restart: unless-stopped
user: "1000:1000"
ports:
- "127.0.0.1:8384:8384" # web UI — VPN only via Caddy
- "22000:22000/tcp" # sync protocol — needs to be public
- "22000:22000/udp"
- "21027:21027/udp" # discovery
environment:
- PUID=1000
- PGID=1000
volumes:
- /home/saurav/hetzner_self/data/syncthing:/var/syncthing
# NOTE: - /home/saurav/cloud:/sync/cloud # sync your cloud folder

9
services/uptime-kuma.yml Normal file
View File

@@ -0,0 +1,9 @@
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
restart: unless-stopped
ports:
- "127.0.0.1:3001:3001"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /home/saurav/hetzner_self/data/uptime-kuma:/app/data

16
services/watchtower.yml Normal file
View File

@@ -0,0 +1,16 @@
services:
watchtower:
image: containrrr/watchtower:latest
restart: unless-stopped
environment:
- WATCHTOWER_NOTIFICATIONS=email
- WATCHTOWER_NOTIFICATION_EMAIL_FROM=${WATCHTOWER_EMAIL_FROM}
- WATCHTOWER_NOTIFICATION_EMAIL_TO=${WATCHTOWER_EMAIL_TO}
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.gmail.com
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=${WATCHTOWER_EMAIL_USER}
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=${WATCHTOWER_EMAIL_PASSWORD}
- WATCHTOWER_MONITOR_ONLY=true # notify only, no auto updates
- WATCHTOWER_SCHEDULE=0 0 8 * * * # check every day at 8am
volumes:
- /var/run/docker.sock:/var/run/docker.sock

38
services/woodpecker.yml Normal file
View File

@@ -0,0 +1,38 @@
services:
woodpecker-server:
image: woodpeckerci/woodpecker-server:v3
restart: unless-stopped
ports:
- "127.0.0.1:8000:8000"
- "127.0.0.1:9001:9000" # changed to 9001
environment:
- WOODPECKER_OPEN=false
- WOODPECKER_ADMIN=saurav12 # your Gitea username
- WOODPECKER_GITEA=true
- WOODPECKER_GITEA_URL=https://gitea.sauravdhakal.com.np
- WOODPECKER_GITEA_CLIENT=${WOODPECKER_GITEA_CLIENT}
- WOODPECKER_GITEA_SECRET=${WOODPECKER_GITEA_SECRET}
- WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET}
- WOODPECKER_HOST=https://ci.sauravdhakal.com.np
volumes:
- /home/saurav/hetzner_self/data/woodpecker:/var/lib/woodpecker
networks:
- woodpecker_internal
woodpecker-agent:
image: woodpeckerci/woodpecker-agent:v3
restart: unless-stopped
environment:
- WOODPECKER_SERVER=woodpecker-server:9000
- WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET}
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /home/saurav/hetzner_self/data/woodpecker-agent:/etc/woodpecker
networks:
- woodpecker_internal
depends_on:
- woodpecker-server
networks:
woodpecker_internal:
driver: bridge