new start !
This commit is contained in:
commit
b909f1a107
8 changed files with 260 additions and 0 deletions
28
.gitignore
vendored
Normal file
28
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
# Ignore everything in the root and all subdirectories
|
||||
/*
|
||||
!/*/
|
||||
|
||||
# Keep the Containers folder
|
||||
!/Containers/
|
||||
|
||||
# Ignore everything inside Containers/*
|
||||
/Containers/*/*
|
||||
|
||||
# Except compose.yml and tailscale serve
|
||||
!/Containers/*/compose.yml
|
||||
!/Containers/*/serveconfig/
|
||||
|
||||
# navidrome toml for auto-clean
|
||||
!/Containers/Navidrome/data/
|
||||
/Containers/Navidrome/data/*
|
||||
!/Containers/Navidrome/data/navidrome.toml
|
||||
|
||||
# Scripts
|
||||
!/Scripts/*
|
||||
|
||||
# VMS (not used for the moment)
|
||||
!/VMs/*
|
||||
|
||||
# Keep utility files in root
|
||||
!.gitignore
|
||||
!README.md
|
||||
52
Containers/Forgejo/compose.yml
Normal file
52
Containers/Forgejo/compose.yml
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
services:
|
||||
forgejo-ts:
|
||||
image: tailscale/tailscale
|
||||
container_name: forgejo-ts
|
||||
cap_add:
|
||||
- net_admin
|
||||
devices:
|
||||
- /dev/net/tun:/dev/net/tun
|
||||
volumes:
|
||||
- ./tailscale/state:/var/lib/tailscale
|
||||
- ./serveconfig:/config
|
||||
environment:
|
||||
- TS_AUTHKEY=${TS_AUTHKEY}
|
||||
- TS_EXTRA_ARGS=--advertise-tags=tag:forgejo --reset
|
||||
- TS_STATE_DIR=/var/lib/tailscale
|
||||
- TS_SERVE_CONFIG=/config/serve-config.json
|
||||
- TS_USERSPACE=false
|
||||
hostname: git
|
||||
restart: unless-stopped
|
||||
|
||||
forgejo:
|
||||
image: codeberg.org/forgejo/forgejo:11
|
||||
container_name: forgejo
|
||||
network_mode: service:forgejo-ts
|
||||
environment:
|
||||
- USER_UID=1000
|
||||
- USER_GID=1000
|
||||
- FORGEJO__database__DB_TYPE=postgres
|
||||
- FORGEJO__database__HOST=forgejo_db:5432
|
||||
- FORGEJO__database__NAME=forgejo
|
||||
- FORGEJO__database__USER=forgejo
|
||||
- FORGEJO__database__PASSWD=${POSTGRES_PASSWORD}
|
||||
- FORGEJO__database__SSL_MODE=disable
|
||||
- FORGEJO__database__SCHEMA=public
|
||||
- FORGEJO__database__CHARSET=utf8
|
||||
volumes:
|
||||
- ./forgejo:/data
|
||||
# - /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
restart: unless-stopped
|
||||
|
||||
forgejo_db:
|
||||
image: postgres:16
|
||||
container_name: forgejo-postgres
|
||||
environment:
|
||||
- POSTGRES_DB=forgejo
|
||||
- POSTGRES_USER=forgejo
|
||||
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
||||
- POSTGRES_HOST_AUTH_METHOD=md5
|
||||
volumes:
|
||||
- ./postgres:/var/lib/postgresql/data
|
||||
restart: always
|
||||
19
Containers/Forgejo/serveconfig/serve-config.json
Normal file
19
Containers/Forgejo/serveconfig/serve-config.json
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"TCP": {
|
||||
"443": {
|
||||
"HTTPS": true
|
||||
}
|
||||
},
|
||||
"Web": {
|
||||
"${TS_CERT_DOMAIN}:443": {
|
||||
"Handlers": {
|
||||
"/": {
|
||||
"Proxy": "http://127.0.0.1:3000"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"AllowFunnel": {
|
||||
"${TS_CERT_DOMAIN}:443": true
|
||||
}
|
||||
}
|
||||
31
Containers/Navidrome/compose.yml
Normal file
31
Containers/Navidrome/compose.yml
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
services:
|
||||
navidrome-ts:
|
||||
image: tailscale/tailscale
|
||||
container_name: navidrome-ts
|
||||
cap_add:
|
||||
- net_admin
|
||||
devices:
|
||||
- /dev/net/tun:/dev/net/tun
|
||||
volumes:
|
||||
- ./tailscale/state:/var/lib/tailscale
|
||||
- ./serveconfig:/config
|
||||
environment:
|
||||
- TS_AUTHKEY=${TS_AUTHKEY}
|
||||
- TS_EXTRA_ARGS=--advertise-tags=tag:navidrome --reset
|
||||
- TS_STATE_DIR=/var/lib/tailscale
|
||||
- TS_SERVE_CONFIG=/config/serve-config.json
|
||||
- TS_USERSPACE=false
|
||||
hostname: music
|
||||
restart: unless-stopped
|
||||
|
||||
navidrome:
|
||||
network_mode: service:navidrome-ts
|
||||
container_name: navidrome
|
||||
image: deluan/navidrome:latest
|
||||
user: 1000:1000 # should be owner of volumes
|
||||
# ports:
|
||||
# - "4533:4533"
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- "./data:/data"
|
||||
- "/mnt/usb-ssd-01/music:/music:ro"
|
||||
2
Containers/Navidrome/data/navidrome.toml
Normal file
2
Containers/Navidrome/data/navidrome.toml
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
[scanner]
|
||||
PurgeMissing = "always"
|
||||
19
Containers/Navidrome/serveconfig/serve-config.json
Normal file
19
Containers/Navidrome/serveconfig/serve-config.json
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"TCP": {
|
||||
"443": {
|
||||
"HTTPS": true
|
||||
}
|
||||
},
|
||||
"Web": {
|
||||
"${TS_CERT_DOMAIN}:443": {
|
||||
"Handlers": {
|
||||
"/": {
|
||||
"Proxy": "http://127.0.0.1:4533"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"AllowFunnel": {
|
||||
"${TS_CERT_DOMAIN}:443": true
|
||||
}
|
||||
}
|
||||
19
Containers/NextCloud/serveconfig/serve-config.json
Normal file
19
Containers/NextCloud/serveconfig/serve-config.json
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"TCP": {
|
||||
"443": {
|
||||
"HTTPS": true
|
||||
}
|
||||
},
|
||||
"Web": {
|
||||
"${TS_CERT_DOMAIN}:443": {
|
||||
"Handlers": {
|
||||
"/": {
|
||||
"Proxy": "http://127.0.0.1:80"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"AllowFunnel": {
|
||||
"${TS_CERT_DOMAIN}:443": true
|
||||
}
|
||||
}
|
||||
90
README.md
Normal file
90
README.md
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
# Selfhosting personnal repo
|
||||
|
||||
My very simple self-hosting setup.
|
||||
On my new mini-pc.
|
||||
Gettings things simpler & simpler overtime.
|
||||
Check Old_TSDPROXT for old setup.
|
||||
|
||||
Not 100% reproductible (Maybe one day NixOs?), some light debugging & manual adjust when migrating. See random dump at the end
|
||||
|
||||
## Hardware & OS
|
||||
|
||||
- Origimagic C2 Neo Mini PC
|
||||
- N95 Alder Lake
|
||||
- 12gb ddr5
|
||||
- 512gb internal nvme
|
||||
- 1 To external USB SSD (For nextcloud files)
|
||||
|
||||
## Stack
|
||||
|
||||
- Debian13
|
||||
- Tailscale (VPN)
|
||||
- Docker (with compose)
|
||||
|
||||
## Networking
|
||||
|
||||
Heavy use of Tailscale sidecar (see network_mode: "service:myapp-ts") :
|
||||
- Https without much efforts
|
||||
- Easy domain name with MagicDNS (ending in rufous-trench.ts.net).
|
||||
- Both VPN access for best-perf, and funnel for public access without opening ports.
|
||||
|
||||
Inconvenients :
|
||||
- Vendor lock-in for networking. Even if tailscale seems cooler than cloudflare, it's still a vendor lock-in
|
||||
- Not so wide adoption, need often manual thinkering
|
||||
|
||||
## Services
|
||||
|
||||
- Forgejo (git repo management)
|
||||
- Nextcloud (google drive replacement)
|
||||
- Navidrome (Music streaming)
|
||||
|
||||
## CI
|
||||
|
||||
- Forgejo runners on my school computers for the moment lol. With podman for easy rootless containers.
|
||||
|
||||
## Backup
|
||||
|
||||
#TODO rsync thingy to family NAS
|
||||
|
||||
# Random dump / doc
|
||||
|
||||
### Nextcloud
|
||||
group & user : 33, chown nextcloud folders
|
||||
|
||||
|
||||
Music folder owned by 1000 (for navidrome access)
|
||||
But I want nextcloud to also be able to move those files (easy access & add)
|
||||
|
||||
|
||||
Solution :
|
||||
|
||||
```bash
|
||||
sudo apt install acl
|
||||
sudo setfacl -R -m u:33:rwx /.../.../Music
|
||||
```
|
||||
|
||||
Also Nextcloud crontab thingy
|
||||
|
||||
|
||||
```bash
|
||||
sudo crontab -e
|
||||
*/5 * * * * docker exec -u www-data nextcloud php /var/www/html/cron.php
|
||||
```
|
||||
|
||||
### Forgejo
|
||||
postgres complaining when networking change : Check pg_hba.conf, change it if needed
|
||||
|
||||
### Navidrome
|
||||
Because external mess, Nextcloud can modify files etc...
|
||||
```toml
|
||||
[scanner]
|
||||
PurgeMissing = "always"
|
||||
```
|
||||
|
||||
## TODO / Random vaguely related projects
|
||||
|
||||
- Home assistant
|
||||
- Old laptop as test server (probably on new branch)
|
||||
- Wake on Wan for computer desktop via rasberry pi
|
||||
- Old phones used for dashboard
|
||||
- Maybe graphana things one day
|
||||
Loading…
Add table
Add a link
Reference in a new issue