initial commit
This commit is contained in:
commit
89eff52d1b
189
README.md
Normal file
189
README.md
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
# The Quad
|
||||||
|
|
||||||
|
This is my current setup for managing a good portion of my cloud infrastructure.
|
||||||
|
I tried to do this with ansible in the past bug I couldn't be bothered finishing
|
||||||
|
it all. This, I like better. It's more accessible and straightforward.
|
||||||
|
|
||||||
|
More info on [podman
|
||||||
|
quadlets](https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html).
|
||||||
|
|
||||||
|
## Basics
|
||||||
|
|
||||||
|
This repo contains all container definitions that I use. More can be added and
|
||||||
|
then just need to be symlinked to the user `systemd` directory followed by
|
||||||
|
running `systemctl --user daemon-reload`, at which point the container should be
|
||||||
|
picked up and started.
|
||||||
|
|
||||||
|
```
|
||||||
|
cd .config/containers/systemd/
|
||||||
|
ln -s ~/repos/thequad/openhab/openhab.container .
|
||||||
|
systemctl --user daemon-reload
|
||||||
|
```
|
||||||
|
|
||||||
|
## Backups
|
||||||
|
|
||||||
|
I haven't set this up yet but I'm going to use `restic` to back up the data
|
||||||
|
directories to both my NAS and to Backblaze B2.
|
||||||
|
|
||||||
|
> More to come here...
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
I've decided to store all of the container data in `/mnt/data/containers/` in a directory with
|
||||||
|
the containers name. This seemed most straightforward to me.
|
||||||
|
|
||||||
|
`plucky-pinning.sh` provides a way to automatically pin podman to the version
|
||||||
|
released in Ubuntu 25.05 (Plucky). The reason this is useful is that the podman
|
||||||
|
v4 -> v5 transition introduces a lot of nice to haves (such as Pods) because
|
||||||
|
podman quadlets are still in active development.
|
||||||
|
|
||||||
|
### Root containers
|
||||||
|
|
||||||
|
`./drone-agent.container` is not rootless as it needs access to the
|
||||||
|
podman/docker socket to run containers for actions/pipelines.
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo ln -s ~/repos/thequad/drone/* /etc/containers/systemd/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Rootless containers
|
||||||
|
|
||||||
|
If you need the socket in a rootless container, see
|
||||||
|
[here](https://github.com/gethomepage/homepage/discussions/4013#discussioncomment-12135538)
|
||||||
|
|
||||||
|
If you have issues binding ports; podman cannot create rootless containers that
|
||||||
|
bind to ports <= 1024 (see
|
||||||
|
[here](https://github.com/containers/podman/blob/main/rootless.md)), you can run
|
||||||
|
the following to update the systems settings to allow down to whaever you want
|
||||||
|
(80 here):
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo sysctl net.ipv4.ip_unprivileged_port_start=80
|
||||||
|
```
|
||||||
|
|
||||||
|
__NOTE__ this is changing your host's settings, not podman's, BE CAREFUL!
|
||||||
|
|
||||||
|
### Homepage
|
||||||
|
|
||||||
|
This requires some additional configuration, namely updating the file in the
|
||||||
|
containers data directory referenced
|
||||||
|
[here](https://gethomepage.dev/configs/docker/#using-socket-directly) and
|
||||||
|
setting up the podman socket for rootless access, see above.
|
||||||
|
|
||||||
|
### ARR Suite
|
||||||
|
|
||||||
|
Currnt thoughts for getting media automations set up are:
|
||||||
|
|
||||||
|
Using: sonarr, radarr, prowlerr, profilerr, qbittorrent, and gluetun (connected
|
||||||
|
to protonvpn via a wireguard config)
|
||||||
|
|
||||||
|
Things to work out:
|
||||||
|
- networking, I'll want to connect be able to connect locally, can I do this
|
||||||
|
with the vpn handling container network traffic? how should I set up the pod,
|
||||||
|
will it even need a network file, or will the gluetun container be the
|
||||||
|
network?
|
||||||
|
|
||||||
|
Some references:
|
||||||
|
- [podman protonvpn and gluetun](https://beerstra.org/2024/07/12/vpn-enabled-podman-containers/)
|
||||||
|
- [docs](https://github.com/qdm12/gluetun-wiki/blob/main/setup/providers/protonvpn.md)
|
||||||
|
|
||||||
|
UPDATES:
|
||||||
|
|
||||||
|
I've set up usenet, I have sabnzbd for downloading and have switched off
|
||||||
|
qbittorrent, gluetun, and flaresolver.
|
||||||
|
|
||||||
|
### Unifi Network Application
|
||||||
|
|
||||||
|
Although easiest to migrate with a config export and import, I did need to
|
||||||
|
factory reset the devices, ssh into them with
|
||||||
|
|
||||||
|
`ssh ubnt@<device id>`
|
||||||
|
|
||||||
|
and the password of `ubnt`
|
||||||
|
|
||||||
|
and run
|
||||||
|
```
|
||||||
|
set-inform http://192.168.2.61:8080/inform
|
||||||
|
```
|
||||||
|
|
||||||
|
To resolve an issue where the devices were stuck in an infinite 'adopting'
|
||||||
|
state.
|
||||||
|
|
||||||
|
### Photoprism
|
||||||
|
|
||||||
|
UUUUUUUUHHHG, have to use CLI to add users, ffs.
|
||||||
|
|
||||||
|
```
|
||||||
|
photoprism users add -p your_password -r guest your_username
|
||||||
|
```
|
||||||
|
|
||||||
|
It does look like PP is the best option for self hosted though.
|
||||||
|
|
||||||
|
[Managing users reference
|
||||||
|
guide/docs](https://docs.photoprism.app/user-guide/users/cli/#managing-user-accounts)
|
||||||
|
|
||||||
|
I'm going to look into immich which also looks quite nice
|
||||||
|
|
||||||
|
### Authelia
|
||||||
|
|
||||||
|
I have set this up to provide auth if an when I need it, it's pretty simple to
|
||||||
|
integrate into caddy, look at the drone config in caddy for an example. More
|
||||||
|
complicated services like nextcloud might require more in depth configuration
|
||||||
|
but we'll cross that bridge when we get to it.
|
||||||
|
|
||||||
|
I'm not going to include any references here as there's extensive documentation
|
||||||
|
out there and LLMs have a pretty good handle on it. One thing I will say, this
|
||||||
|
was quite hard to get set up. I'm not convinced my configuration file is 100%
|
||||||
|
correct and good but it does work. I have lldap running as the identity provider
|
||||||
|
(I guess) which is where you add users, and postgres as the database for both
|
||||||
|
lldap and authelia.
|
||||||
|
|
||||||
|
### Defguard
|
||||||
|
|
||||||
|
Mostly working, still need to work out the SSL for the gRPC endpoints.
|
||||||
|
|
||||||
|
Also, the gateway needs to run as root for reasons I can't quite work out but
|
||||||
|
its got something to do with creating the network devices for the VPN.
|
||||||
|
|
||||||
|
This is the first thing I've set up with proper use of env files which is nice
|
||||||
|
though.
|
||||||
|
|
||||||
|
Endid up deciding to move this to a vim instead.
|
||||||
|
|
||||||
|
I've completetly fucked this off, I'm keeping the files for posterity but even
|
||||||
|
the one click instill didn't work and given I have openvpn up and running just
|
||||||
|
fine I CBF.
|
||||||
|
|
||||||
|
### wg-easy
|
||||||
|
|
||||||
|
I'm trying to get a vpn set up and chose wg-easy, which is turing out not to be
|
||||||
|
easy. It's running but having trouble with the wg part of the whole thing.
|
||||||
|
|
||||||
|
references:
|
||||||
|
- [docker-compose.yml](https://github.com/wg-easy/wg-easy/blob/master/docker-compose.yml)
|
||||||
|
- [wg-easy Caddy
|
||||||
|
docs](https://wg-easy.github.io/wg-easy/Pre-release/examples/tutorials/caddy/)
|
||||||
|
- [wireguard in podman blog
|
||||||
|
post](https://www.procustodibus.com/blog/2022/10/wireguard-in-podman/)
|
||||||
|
|
||||||
|
I find it annoying that I have to make host changes to make this work but it
|
||||||
|
does sort of make sense given how tied to the network stack VPNs must be.
|
||||||
|
|
||||||
|
I found my solution [here in the wg-easy
|
||||||
|
faq](https://wg-easy.github.io/wg-easy/v15.1/faq/), it was a kernel modules
|
||||||
|
issue. Also some good info and content
|
||||||
|
[here](https://wg-easy.github.io/wg-easy/v15.0/examples/tutorials/podman-nft/).
|
||||||
|
I'm hoping I can have the container rootless but we'll see, might need tobe
|
||||||
|
rootful given their docs.
|
||||||
|
|
||||||
|
for reference:
|
||||||
|
```
|
||||||
|
# POST UP
|
||||||
|
nft add table inet wg_table; nft add chain inet wg_table prerouting { type nat hook prerouting priority 100 \; }; nft add chain inet wg_table postrouting { type nat hook postrouting priority 100 \; }; nft add rule inet wg_table postrouting ip saddr {{ipv4Cidr}} oifname {{device}} masquerade; nft add rule inet wg_table postrouting ip6 saddr {{ipv6Cidr}} oifname {{device}} masquerade; nft add chain inet wg_table input { type filter hook input priority 0 \; policy accept \; }; nft add rule inet wg_table input udp dport {{port}} accept; nft add rule inet wg_table input tcp dport {{uiPort}} accept; nft add chain inet wg_table forward { type filter hook forward priority 0 \; policy accept \; }; nft add rule inet wg_table forward iifname "wg0" accept; nft add rule inet wg_table forward oifname "wg0" accept;
|
||||||
|
|
||||||
|
# POST DOWN
|
||||||
|
|
||||||
|
nft delete table inet wg_table
|
||||||
|
```
|
||||||
|
|
||||||
|
seems to have done the trick, along with the kernel modules :D
|
||||||
30
authelia/authelia-db.container
Normal file
30
authelia/authelia-db.container
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Authelia - DB
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=authelia.pod
|
||||||
|
ContainerName=authelia-db
|
||||||
|
Image=docker.io/library/postgres:17.2-bookworm
|
||||||
|
|
||||||
|
# Environment=POSTGRES_PASSWORD=
|
||||||
|
# Environment=POSTGRES_USER=
|
||||||
|
# Environment=POSTGRES_DB=
|
||||||
|
EnvironmentFile=/mnt/data/containers/authelia/.env.db
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/authelia/postgresql:/var/lib/postgresql/data
|
||||||
|
Volume=/etc/timezone:/etc/timezone:ro
|
||||||
|
Volume=/etc/localtime:/etc/localtime:ro
|
||||||
|
|
||||||
|
# health check
|
||||||
|
HealthCmd=pg_isready -U pguser -d general
|
||||||
|
HealthInterval=5s
|
||||||
|
HealthRetries=3
|
||||||
|
HealthStartPeriod=15s
|
||||||
|
HealthTimeout=30s
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
27
authelia/authelia-server.container
Normal file
27
authelia/authelia-server.container
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Authelia - Server
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=authelia.pod
|
||||||
|
ContainerName=authelia-server
|
||||||
|
Image=docker.io/authelia/authelia:latest
|
||||||
|
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# all secrets and config need to be added to configuration.yml
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/authelia/config:/config
|
||||||
|
|
||||||
|
Label=homepage.group=Tech
|
||||||
|
Label=homepage.name=Authelia
|
||||||
|
Label=homepage.icon=authelia.png
|
||||||
|
Label=homepage.href=https://auth.inkletblot.com
|
||||||
|
Label=homepage.description="Auth Provider"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=90
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
12
authelia/authelia.network
Normal file
12
authelia/authelia.network
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Authelia network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=authelia-network
|
||||||
|
Subnet=10.8.0.0/24
|
||||||
|
Gateway=10.8.0.1
|
||||||
|
DNS=
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
10
authelia/authelia.pod
Normal file
10
authelia/authelia.pod
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[Pod]
|
||||||
|
Network=authelia.network
|
||||||
|
PodName=authelia
|
||||||
|
|
||||||
|
# Authelia frontend
|
||||||
|
PublishPort=9091:9091
|
||||||
|
|
||||||
|
# LLDAP frontend
|
||||||
|
PublishPort=17170:17170
|
||||||
|
|
||||||
39
authelia/lldap-server.container
Normal file
39
authelia/lldap-server.container
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=LLDAP - Server
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=authelia.pod
|
||||||
|
ContainerName=lldap-server
|
||||||
|
Image=docker.io/lldap/lldap:stable
|
||||||
|
|
||||||
|
# Environment=GID=
|
||||||
|
# Environment=UID=
|
||||||
|
# Environment=TZ=
|
||||||
|
# Environment=LLDAP_LDAP_BASE_DN=
|
||||||
|
# Environment=LLDAP_DATABASE_URL=
|
||||||
|
# Environment=LLDAP_LDAP_USER_EMAIL=
|
||||||
|
# Environment=LLDAP_LDAP_USER_PASS=
|
||||||
|
|
||||||
|
# Environment=LLDAP_JWT_SECRET=
|
||||||
|
# Environment=LLDAP_KEY_SEED=
|
||||||
|
EnvironmentFile=/mnt/data/containers/authelia/.env.lldap
|
||||||
|
|
||||||
|
# health check
|
||||||
|
HealthCmd=/app/lldap healthcheck
|
||||||
|
HealthInterval=30s
|
||||||
|
HealthRetries=3
|
||||||
|
HealthStartPeriod=15s
|
||||||
|
HealthTimeout=30s
|
||||||
|
|
||||||
|
Label=homepage.group=Tech
|
||||||
|
Label=homepage.name=LLDAP
|
||||||
|
Label=homepage.icon=lldap.png
|
||||||
|
Label=homepage.href=http://lldap.forest:17170
|
||||||
|
Label=homepage.description="Authelia's IDP"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
29
caddy/caddy.container
Normal file
29
caddy/caddy.container
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Caddy
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=caddy.pod
|
||||||
|
ContainerName=caddy
|
||||||
|
Image=docker.io/caddy:2.11
|
||||||
|
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/caddy/config:/config
|
||||||
|
Volume=/mnt/data/containers/caddy/data:/data
|
||||||
|
Volume=/mnt/data/containers/caddy/conf:/etc/caddy
|
||||||
|
|
||||||
|
# for static site files
|
||||||
|
Volume=/mnt/data/containers/caddy/srv:/srv
|
||||||
|
|
||||||
|
Label=homepage.group=Misc.
|
||||||
|
Label=homepage.name=Caddy
|
||||||
|
Label=homepage.icon=caddy.png
|
||||||
|
Label=homepage.description="Web Server"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=90
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
12
caddy/caddy.network
Normal file
12
caddy/caddy.network
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Caddy network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=caddy-network
|
||||||
|
Subnet=10.36.0.0/24
|
||||||
|
Gateway=10.36.0.1
|
||||||
|
DNS=
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
9
caddy/caddy.pod
Normal file
9
caddy/caddy.pod
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[Pod]
|
||||||
|
PodName=caddy
|
||||||
|
Network=host
|
||||||
|
|
||||||
|
# Network=caddy.network
|
||||||
|
# PublishPort=80:80
|
||||||
|
# PublishPort=443:443
|
||||||
|
# PublishPort=443:443/udp
|
||||||
|
# PublishPort=2019:2019
|
||||||
28
calibre/calibre.container
Normal file
28
calibre/calibre.container
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Calibre - Server
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=calibre.pod
|
||||||
|
ContainerName=calibre
|
||||||
|
Image=lscr.io/linuxserver/calibre-web:latest
|
||||||
|
|
||||||
|
# Environment=PUID=
|
||||||
|
# Environment=PGID=
|
||||||
|
# Environment=TZ=
|
||||||
|
EnvironmentFile=/mnt/data/containers/calibre/.env.calibre
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/calibre/config:/config
|
||||||
|
Volume=/mnt/data/containers/calibre/library:/books
|
||||||
|
|
||||||
|
Label=homepage.group=Life
|
||||||
|
Label=homepage.name=Calibre
|
||||||
|
Label=homepage.icon=calibre.png
|
||||||
|
Label=homepage.href=https://books.inkletblot.com
|
||||||
|
Label=homepage.description="Books"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
9
calibre/calibre.network
Normal file
9
calibre/calibre.network
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Calibre network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=calibre-network
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
5
calibre/calibre.pod
Normal file
5
calibre/calibre.pod
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[Pod]
|
||||||
|
Network=calibre.network
|
||||||
|
PodName=calibre
|
||||||
|
PublishPort=8338:8083
|
||||||
|
|
||||||
14
cryptgeon/cryptgeon-redis.container
Normal file
14
cryptgeon/cryptgeon-redis.container
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Cryptgeon - Redis
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=cryptgeon.pod
|
||||||
|
ContainerName=cryptgeon-redis
|
||||||
|
Image=docker.io/library/redis:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
StartLimitBurst=5
|
||||||
|
|
||||||
27
cryptgeon/cryptgeon.container
Normal file
27
cryptgeon/cryptgeon.container
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Cryptgeon - Server
|
||||||
|
After=cryptgeon-redis.service
|
||||||
|
Wants=cryptgeon-redis.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=cryptgeon.pod
|
||||||
|
ContainerName=cryptgeon
|
||||||
|
Image=docker.io/cupcakearmy/cryptgeon:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Environment=SIZE_LIMIT=
|
||||||
|
# Environment=REDIS=
|
||||||
|
EnvironmentFile=/mnt/data/containers/cryptgeon/.env.cryptgeon
|
||||||
|
|
||||||
|
Label=homepage.group=Tech
|
||||||
|
Label=homepage.name=Cryptgeon
|
||||||
|
Label=homepage.href=https://ots.inkletblot.com
|
||||||
|
Label=homepage.description="Like Privnote"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
StartLimitBurst=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
11
cryptgeon/cryptgeon.network
Normal file
11
cryptgeon/cryptgeon.network
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Cryptgeon network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=cryptgeon-network
|
||||||
|
Subnet=10.43.0.0/24
|
||||||
|
Gateway=10.43.0.1
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
4
cryptgeon/cryptgeon.pod
Normal file
4
cryptgeon/cryptgeon.pod
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[Pod]
|
||||||
|
Network=cryptgeon.network
|
||||||
|
PodName=cryptgeon
|
||||||
|
PublishPort=3080:8000
|
||||||
1
defguard/UNUSED
Normal file
1
defguard/UNUSED
Normal file
@ -0,0 +1 @@
|
|||||||
|
I had some issues with this that I coludn't overcome. I'm going to move to a vm instead and use the one and done script to set it up.
|
||||||
29
defguard/defguard-core.container
Normal file
29
defguard/defguard-core.container
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Defguard - Core
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=defguard.pod
|
||||||
|
ContainerName=defguard-core
|
||||||
|
Image=ghcr.io/defguard/defguard:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
EnvironmentFile=/mnt/data/containers/defguard/.env
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/defguard/rsakey.pem:/keys/rsakey.pem
|
||||||
|
Volume=/mnt/data/containers/defguard/ca.crt:/keys/ca.crt
|
||||||
|
Volume=/mnt/data/containers/defguard/core.crt:/keys/core.crt
|
||||||
|
Volume=/mnt/data/containers/defguard/core.key:/keys/core.key
|
||||||
|
|
||||||
|
Label=homepage.group=Tech
|
||||||
|
Label=homepage.name="Defguard Core"
|
||||||
|
Label=homepage.icon=defguard.png
|
||||||
|
Label=homepage.href=https://guard.inkletblot.com
|
||||||
|
Label=homepage.description="VPN"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=90
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
27
defguard/defguard-db.container
Normal file
27
defguard/defguard-db.container
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Defguard - DB
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=defguard.pod
|
||||||
|
ContainerName=defguard-db
|
||||||
|
Image=docker.io/postgres:17-alpine
|
||||||
|
|
||||||
|
EnvironmentFile=/mnt/data/containers/defguard/.env
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/defguard/postgresql:/var/lib/postgresql/data
|
||||||
|
Volume=/etc/timezone:/etc/timezone:ro
|
||||||
|
Volume=/etc/localtime:/etc/localtime:ro
|
||||||
|
|
||||||
|
# health check
|
||||||
|
HealthCmd=pg_isready -U defguarduser -d defguard
|
||||||
|
HealthInterval=5s
|
||||||
|
HealthRetries=3
|
||||||
|
HealthStartPeriod=15s
|
||||||
|
HealthTimeout=30s
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
31
defguard/defguard-gateway.container
Normal file
31
defguard/defguard-gateway.container
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# THIS IS A ROOT CONTAINER
|
||||||
|
# Must be configured AFTER core.
|
||||||
|
[Unit]
|
||||||
|
Description=Defguard - Gateway
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
ContainerName=defguard-gateway
|
||||||
|
Image=ghcr.io/defguard/gateway:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
Network=host
|
||||||
|
AddCapability=NET_ADMIN
|
||||||
|
|
||||||
|
EnvironmentFile=/mnt/data/containers/defguard/.env
|
||||||
|
|
||||||
|
Environment=DEFGUARD_LOG_LEVEL=debug
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/defguard/ca.crt:/ca.crt
|
||||||
|
|
||||||
|
Label=homepage.group=Misc.
|
||||||
|
Label=homepage.name="Defguard Gateway"
|
||||||
|
Label=homepage.icon=defguard.png
|
||||||
|
Label=homepage.description="Auth Provider"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=90
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
28
defguard/defguard-proxy.container
Normal file
28
defguard/defguard-proxy.container
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Defguard - Proxy
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=defguard.pod
|
||||||
|
ContainerName=defguard-proxy
|
||||||
|
Image=ghcr.io/defguard/defguard-proxy:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
Environment=DEFGUARD_PROXY_GRPC_CERT=/ca/proxy.cert
|
||||||
|
Environment=DEFGUARD_PROXY_GRPC_KEY=/ca/proxy.key
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/defguard/proxy.crt:/ca/proxy.crt
|
||||||
|
Volume=/mnt/data/containers/defguard/proxy.key:/ca/proxy.key
|
||||||
|
|
||||||
|
Label=homepage.group=Tech
|
||||||
|
Label=homepage.name="Defguard Proxy"
|
||||||
|
Label=homepage.icon=defguard.png
|
||||||
|
Label=homepage.href=https://enroll.inkletblot.com
|
||||||
|
Label=homepage.description="VPN Enrollment"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=90
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
12
defguard/defguard.network
Normal file
12
defguard/defguard.network
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Defguard network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=defguard-network
|
||||||
|
Subnet=10.98.0.0/24
|
||||||
|
Gateway=10.98.0.1
|
||||||
|
DNS=
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
15
defguard/defguard.pod
Normal file
15
defguard/defguard.pod
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
[Pod]
|
||||||
|
Network=defguard.network
|
||||||
|
PodName=defguard
|
||||||
|
|
||||||
|
# core
|
||||||
|
# frontend (administration interface)
|
||||||
|
PublishPort=9876:8000
|
||||||
|
# gRPC
|
||||||
|
PublishPort=50055:50055
|
||||||
|
|
||||||
|
# proxy
|
||||||
|
# frontend (enrollment service)
|
||||||
|
PublishPort=8765:8080
|
||||||
|
# gRPC
|
||||||
|
PublishPort=50051:50051
|
||||||
34
drone/drone-docker-agent.container
Normal file
34
drone/drone-docker-agent.container
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Drone Docker Agent
|
||||||
|
Requires=drone-server.container
|
||||||
|
After=drone-server.container
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=drone.pod
|
||||||
|
ContainerName=drone-docker-agent
|
||||||
|
Image=docker.io/drone/drone-runner-docker:1
|
||||||
|
|
||||||
|
# Environment=DRONE_RPC_PROTO=
|
||||||
|
# Environment=DRONE_RPC_HOST=
|
||||||
|
# Environment=DRONE_RPC_SECRET=
|
||||||
|
# Environment=DRONE_RUNNER_CAPACITY=
|
||||||
|
# Environment=DRONE_RUNNER_NAME=
|
||||||
|
# Environment=DRONE_UI_USERNAME=
|
||||||
|
# Environment=DRONE_UI_PASSWORD=
|
||||||
|
# Environment=DRONE_HTTP_BIND=
|
||||||
|
EnvironmentFile=/mnt/data/containers/drone/.env.drone-docker-agent
|
||||||
|
|
||||||
|
Volume=/run/user/1000/podman/podman.sock:/var/run/docker.sock
|
||||||
|
|
||||||
|
Label=homepage.group=Misc.
|
||||||
|
Label=homepage.name=Drone Docker Agent
|
||||||
|
Label=homepage.icon=drone.png
|
||||||
|
Label=homepage.href=http://192.168.2.61:3010
|
||||||
|
Label=homepage.description="CI/CD docker agent"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
32
drone/drone-server.container
Normal file
32
drone/drone-server.container
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Drone Server
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=drone.pod
|
||||||
|
ContainerName=drone-server
|
||||||
|
Image=docker.io/drone/drone:2
|
||||||
|
|
||||||
|
# Environment=DRONE_SERVER_HOST=
|
||||||
|
# Environment=DRONE_RPC_SECRET=
|
||||||
|
# Environment=DRONE_SERVER_PROTO=
|
||||||
|
# Environment=DRONE_GITEA_SERVER=
|
||||||
|
# Environment=DRONE_GITEA_CLIENT_ID=
|
||||||
|
# Environment=DRONE_GITEA_CLIENT_SECRET=
|
||||||
|
EnvironmentFile=/mnt/data/containers/drone/.env.drone-server
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/drone/server:/data
|
||||||
|
|
||||||
|
HealthCmd=nc -z 127.0.0.1 80
|
||||||
|
|
||||||
|
Label=homepage.group=Tech
|
||||||
|
Label=homepage.name=Drone
|
||||||
|
Label=homepage.icon=drone.png
|
||||||
|
Label=homepage.href=https://drone.inkletblot.com
|
||||||
|
Label=homepage.description="CI/CD"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
31
drone/drone-ssh-agent.container
Normal file
31
drone/drone-ssh-agent.container
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Drone SSH Agent
|
||||||
|
Requires=drone-server.container
|
||||||
|
After=drone-server.container
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=drone.pod
|
||||||
|
ContainerName=drone-ssh-agent
|
||||||
|
Image=docker.io/drone/drone-runner-ssh:1
|
||||||
|
|
||||||
|
# Environment=DRONE_RPC_PROTO=
|
||||||
|
# Environment=DRONE_RPC_HOST=
|
||||||
|
# Environment=DRONE_RPC_SECRET=
|
||||||
|
# Environment=DRONE_RUNNER_CAPACITY=
|
||||||
|
# Environment=DRONE_RUNNER_NAME=
|
||||||
|
# Environment=DRONE_UI_USERNAME=
|
||||||
|
# Environment=DRONE_UI_PASSWORD=
|
||||||
|
EnvironmentFile=/mnt/data/containers/drone/.env.drone-ssh-agent
|
||||||
|
|
||||||
|
Label=homepage.group=Misc.
|
||||||
|
Label=homepage.name=Drone SSH Agent
|
||||||
|
Label=homepage.icon=drone.png
|
||||||
|
Label=homepage.href=http://192.168.2.61:3000
|
||||||
|
Label=homepage.description="CI/CD SSH agent"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
12
drone/drone.network
Normal file
12
drone/drone.network
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Drone network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=drone-network
|
||||||
|
Subnet=10.3.0.0/24
|
||||||
|
Gateway=10.3.0.1
|
||||||
|
DNS=
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
7
drone/drone.pod
Normal file
7
drone/drone.pod
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[Pod]
|
||||||
|
Network=drone.network
|
||||||
|
PodName=drone
|
||||||
|
PublishPort=8980:80
|
||||||
|
PublishPort=3010:3010
|
||||||
|
PublishPort=3020:3000
|
||||||
|
|
||||||
36
firefly/firefly-db.container
Normal file
36
firefly/firefly-db.container
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Firefly - DB
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=firefly.pod
|
||||||
|
ContainerName=firefly-db
|
||||||
|
|
||||||
|
Image=docker.io/mariadb:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Persistent volumes
|
||||||
|
Volume=/mnt/data/containers/firefly/mariadb:/var/lib/mysql
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
# Environment=MARIADB_USER=
|
||||||
|
# Environment=MARIADB_DATABASE=
|
||||||
|
# Environment=MARIADB_PASSWORD=
|
||||||
|
# Environment=MARIADB_ROOT_PASSWORD=
|
||||||
|
EnvironmentFile=/mnt/data/containers/firefly/.env.firefly-db
|
||||||
|
|
||||||
|
# Health monitoring
|
||||||
|
HealthCmd=healthcheck.sh --connect
|
||||||
|
HealthInterval=30s
|
||||||
|
HealthTimeout=15s
|
||||||
|
HealthRetries=10
|
||||||
|
HealthStartPeriod=15s
|
||||||
|
|
||||||
|
# Other
|
||||||
|
UserNS=keep-id:uid=999,gid=999
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
37
firefly/firefly-server.container
Normal file
37
firefly/firefly-server.container
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Firefly - Server
|
||||||
|
Requires=firefly-db.service
|
||||||
|
After=firefly-db.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=firefly.pod
|
||||||
|
ContainerName=firefly-server
|
||||||
|
Image=docker.io/fireflyiii/core:latest
|
||||||
|
|
||||||
|
# Environment=APP_KEY=
|
||||||
|
# Environment=DB_HOST=
|
||||||
|
# Environment=DB_PORT=
|
||||||
|
# Environment=DB_CONNECTION=
|
||||||
|
# Environment=DB_DATABASE=
|
||||||
|
# Environment=DB_PASSWORD=
|
||||||
|
# Environment=DB_USERNAME=
|
||||||
|
# Environment=FORCE_HTTPS=
|
||||||
|
# Environment=TRUSTED_PROXIES=
|
||||||
|
# Environment=DEFAULT_LOCALE=
|
||||||
|
EnvironmentFile=/mnt/data/containers/firefly/.env.firefly-server
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/firefly/data:/var/www/html/storage/upload
|
||||||
|
Volume=/usr/lib/locale/locale-archive:/usr/lib/locale/locale-archive:Z
|
||||||
|
|
||||||
|
Label=homepage.group=Life
|
||||||
|
Label=homepage.name="Firefly"
|
||||||
|
Label=homepage.icon=firefly.png
|
||||||
|
Label=homepage.href=http://firefly.forest
|
||||||
|
Label=homepage.description="Budgeting"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
12
firefly/firefly.network
Normal file
12
firefly/firefly.network
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Firefly network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=firefly-network
|
||||||
|
Subnet=10.13.0.0/24
|
||||||
|
Gateway=10.13.0.1
|
||||||
|
DNS=
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
5
firefly/firefly.pod
Normal file
5
firefly/firefly.pod
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[Pod]
|
||||||
|
Network=firefly.network
|
||||||
|
PodName=firefly
|
||||||
|
PublishPort=8342:8080
|
||||||
|
|
||||||
23
gitea/gitea-db.container
Normal file
23
gitea/gitea-db.container
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Gitea DB Server
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=gitea.pod
|
||||||
|
ContainerName=gitea-db
|
||||||
|
Image=docker.io/library/postgres:17.2-bookworm
|
||||||
|
|
||||||
|
# Environment=POSTGRES_PASSWORD=
|
||||||
|
# Environment=POSTGRES_USER=
|
||||||
|
# Environment=POSTGRES_DB=
|
||||||
|
EnvironmentFile=/mnt/data/containers/gitea/.env.gitea-db
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/gitea/postgresql:/var/lib/postgresql/data
|
||||||
|
Volume=/etc/timezone:/etc/timezone:ro
|
||||||
|
Volume=/etc/localtime:/etc/localtime:ro
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
37
gitea/gitea-server.container
Normal file
37
gitea/gitea-server.container
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Gitea Server
|
||||||
|
Requires=gitea-db.service
|
||||||
|
After=gitea-db.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=gitea.pod
|
||||||
|
ContainerName=gitea-server
|
||||||
|
Image=docker.io/gitea/gitea:1.22.4
|
||||||
|
|
||||||
|
# Environment=USER_ID=
|
||||||
|
# Environment=USER_GID=
|
||||||
|
# Environment=DB_TYPE=
|
||||||
|
# Environment=DB_HOST=
|
||||||
|
# Environment=DB_NAME=
|
||||||
|
# Environment=DB_PASSWD=
|
||||||
|
# Environment=DB_USER=
|
||||||
|
EnvironmentFile=/mnt/data/containers/gitea/.env.gitea-server
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/gitea/data:/data
|
||||||
|
Volume=/etc/timezone:/etc/timezone:ro
|
||||||
|
Volume=/etc/localtime:/etc/localtime:ro
|
||||||
|
|
||||||
|
HealthCmd=nc -z 127.0.0.1 5432
|
||||||
|
|
||||||
|
Label=homepage.group=Tech
|
||||||
|
Label=homepage.name=Gitea
|
||||||
|
Label=homepage.icon=gitea.png
|
||||||
|
Label=homepage.href=https://git.inkletblot.com
|
||||||
|
Label=homepage.description="Version Control"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
12
gitea/gitea.network
Normal file
12
gitea/gitea.network
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Gitea network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=gitea-network
|
||||||
|
Subnet=10.1.0.0/24
|
||||||
|
Gateway=10.1.0.1
|
||||||
|
DNS=
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
6
gitea/gitea.pod
Normal file
6
gitea/gitea.pod
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[Pod]
|
||||||
|
Network=gitea.network
|
||||||
|
PodName=gitea
|
||||||
|
PublishPort=3000:4000
|
||||||
|
PublishPort=6122:22
|
||||||
|
|
||||||
26
glance/glance.container
Normal file
26
glance/glance.container
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Glance Dashboard
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
ContainerName=glance
|
||||||
|
Pod=glance.pod
|
||||||
|
Image=docker.io/glanceapp/glance:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/glance/config:/app/config:Z
|
||||||
|
Volume=/mnt/data/containers/glance/assets:/app/assets:Z
|
||||||
|
Volume=/etc/localtime:/etc/localtime:ro
|
||||||
|
Volume=/run/user/1000/podman/podman.sock:/run/podman/podman.sock
|
||||||
|
|
||||||
|
Label=homepage.group=Productivity
|
||||||
|
Label=homepage.name=Glance
|
||||||
|
Label=homepage.icon=glance.png
|
||||||
|
Label=homepage.href=https://dashboard.inkletblot.com
|
||||||
|
Label=homepage.description="Glance Dashboard"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=900
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
9
glance/glance.network
Normal file
9
glance/glance.network
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Glance network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=glance-network
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
4
glance/glance.pod
Normal file
4
glance/glance.pod
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[Pod]
|
||||||
|
PodName=glance
|
||||||
|
Network=glance.network
|
||||||
|
PublishPort=8195:8080
|
||||||
34
homepage/homepage.container
Normal file
34
homepage/homepage.container
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Homepage Dashboard
|
||||||
|
Requires=podman.socket
|
||||||
|
After=podman.socket
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
ContainerName=homepage
|
||||||
|
Pod=homepage.pod
|
||||||
|
Image=ghcr.io/gethomepage/homepage:latest
|
||||||
|
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Can't be bothered with env file for this...
|
||||||
|
Environment=HOMEPAGE_ALLOWED_HOSTS=*
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/homepage/data:/app/config:Z
|
||||||
|
Volume=/mnt/data/containers/homepage/data/images:/app/public/images:Z
|
||||||
|
Volume=/run/user/1000/podman/podman.sock:/run/podman/podman.sock
|
||||||
|
|
||||||
|
# for resource usage
|
||||||
|
Volume=/mnt/audio:/mnt/audio:ro
|
||||||
|
Volume=/mnt/video:/mnt/video:ro
|
||||||
|
Volume=/mnt/photo:/mnt/photo:ro
|
||||||
|
Volume=/mnt/data:/mnt/data:ro
|
||||||
|
Volume=/mnt/backup:/mnt/backup:ro
|
||||||
|
|
||||||
|
SecurityLabelDisable=true
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=900
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
12
homepage/homepage.network
Normal file
12
homepage/homepage.network
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Homepage network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=homepage-network
|
||||||
|
Subnet=10.26.0.0/24
|
||||||
|
Gateway=10.26.0.1
|
||||||
|
DNS=
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
4
homepage/homepage.pod
Normal file
4
homepage/homepage.pod
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[Pod]
|
||||||
|
PodName=homepage
|
||||||
|
Network=homepage.network
|
||||||
|
PublishPort=8030:3000
|
||||||
33
immich/immich-db.container
Normal file
33
immich/immich-db.container
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Immich - DB
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=immich.pod
|
||||||
|
ContainerName=immich-db
|
||||||
|
Image=ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
|
||||||
|
|
||||||
|
ShmSize=128mb
|
||||||
|
|
||||||
|
# Environment=POSTGRES_PASSWORD=
|
||||||
|
# Environment=POSTGRES_USER=
|
||||||
|
# Environment=POSTGRES_DB=
|
||||||
|
# Environment=DB_STORAGE_TYPE=
|
||||||
|
EnvironmentFile=/mnt/data/containers/immich/.env.immich-db
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/immich/postgresql:/var/lib/postgresql/data
|
||||||
|
Volume=/etc/timezone:/etc/timezone:ro
|
||||||
|
Volume=/etc/localtime:/etc/localtime:ro
|
||||||
|
|
||||||
|
HealthCmd=pg_isready -U immichuser -d immich
|
||||||
|
HealthInterval=5s
|
||||||
|
HealthRetries=3
|
||||||
|
HealthStartPeriod=15s
|
||||||
|
HealthTimeout=30s
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
StartLimitBurst=5
|
||||||
|
|
||||||
17
immich/immich-ml.container
Normal file
17
immich/immich-ml.container
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Immich - Machine Learning
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=immich.pod
|
||||||
|
Image= ghcr.io/immich-app/immich-machine-learning:v2.4.1
|
||||||
|
ContainerName=immich-ml
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/immich/modelcache:/cache
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=900
|
||||||
|
SuccessExitStatus=0 143
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
14
immich/immich-redis.container
Normal file
14
immich/immich-redis.container
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Immich - Redis
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=immich.pod
|
||||||
|
ContainerName=immich-redis
|
||||||
|
Image=docker.io/valkey/valkey:9@sha256:fb8d272e529ea567b9bf1302245796f21a2672b8368ca3fcb938ac334e613c8f
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
StartLimitBurst=5
|
||||||
|
|
||||||
41
immich/immich-server.container
Normal file
41
immich/immich-server.container
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Immich - Server
|
||||||
|
Wants=immich-db.service
|
||||||
|
After=immich-db.service
|
||||||
|
After=immich-redis.service
|
||||||
|
After=immich-ml.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=immich.pod
|
||||||
|
Image=ghcr.io/immich-app/immich-server:v2.4.1
|
||||||
|
ContainerName=immich-server
|
||||||
|
|
||||||
|
# Environment=TZ=
|
||||||
|
|
||||||
|
# Environment=DB_USERNAME=
|
||||||
|
# Environment=DB_PASSWORD=
|
||||||
|
# Environment=DB_DATABASE_NAME=
|
||||||
|
# Environment=DB_HOSTNAME=
|
||||||
|
# Environment=DB_PORT=
|
||||||
|
|
||||||
|
# Environment=REDIS_HOSTNAME=
|
||||||
|
# Environment=REDIS_PORT=
|
||||||
|
EnvironmentFile=/mnt/data/containers/immich/.env.immich-server
|
||||||
|
|
||||||
|
Volume=/mnt/photo/Upload:/data
|
||||||
|
Volume=/mnt/photo/Library/:/mnt/Library:ro
|
||||||
|
Volume=/etc/localtime:/etc/localtime:ro
|
||||||
|
|
||||||
|
Label=homepage.group=Documents/Backup
|
||||||
|
Label=homepage.name=Immich
|
||||||
|
Label=homepage.icon=immich.png
|
||||||
|
Label=homepage.href=https://immich.inkletblot.com
|
||||||
|
Label=homepage.description="Photo Library"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=900
|
||||||
|
SuccessExitStatus=0 143
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
12
immich/immich.network
Normal file
12
immich/immich.network
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Immich network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=immich-network
|
||||||
|
Subnet=10.16.0.0/24
|
||||||
|
Gateway=10.16.0.1
|
||||||
|
DNS=
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
4
immich/immich.pod
Normal file
4
immich/immich.pod
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[Pod]
|
||||||
|
Network=immich.network
|
||||||
|
PodName=immich
|
||||||
|
PublishPort=2283:2283
|
||||||
43
jellyfin/jellyfin.container
Normal file
43
jellyfin/jellyfin.container
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Jellyfin
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Image=docker.io/jellyfin/jellyfin:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
ContainerName=jellyfin
|
||||||
|
|
||||||
|
EnvironmentFile=/mnt/data/containers/jellyfin/.env.jellyfin
|
||||||
|
|
||||||
|
# due to migrating an existing installation the following is required
|
||||||
|
# see https://jellyfin.org/docs/general/administration/migrate/
|
||||||
|
Volume=/mnt/data/containers/jellyfin/cache:/var/cache/jellyfin
|
||||||
|
Volume=/mnt/data/containers/jellyfin/config:/etc/jellyfin
|
||||||
|
Volume=/mnt/data/containers/jellyfin/data:/var/lib/jellyfin
|
||||||
|
Volume=/mnt/data/containers/jellyfin/log:/var/log/jellyfin
|
||||||
|
|
||||||
|
# these need to match the source system, from the fstab:
|
||||||
|
# <nas ip or hostname>:/video /mnt/media nfs defaults 0 1
|
||||||
|
# <nas ip or hostname>:/audio /mnt/music nfs defaults 0 1
|
||||||
|
# <nas ip or hostname>:/photo /mnt/camera nfs defaults 0 1
|
||||||
|
|
||||||
|
Volume=/mnt/video:/mnt/media
|
||||||
|
Volume=/mnt/audio:/mnt/music
|
||||||
|
Volume=/mnt/photo:/mnt/camera
|
||||||
|
|
||||||
|
PublishPort=8096:8096
|
||||||
|
|
||||||
|
Label=homepage.group=Media
|
||||||
|
Label=homepage.name=Jellyfin
|
||||||
|
Label=homepage.icon=jellyfin.png
|
||||||
|
Label=homepage.href=https://jellyfin.inkletblot.com
|
||||||
|
Label=homepage.description="Stream Media"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=900
|
||||||
|
SuccessExitStatus=0 143
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
3
koel/UNUSED
Normal file
3
koel/UNUSED
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
This looked really good, and is very popular, but also seemingly totally unknown. I can't seem to find any stuff on google about it.
|
||||||
|
|
||||||
|
Also, although the UI is nice, no feedback about syncing etc, is a no go for me.
|
||||||
36
koel/koel-db.container
Normal file
36
koel/koel-db.container
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Koel - DB
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=koel.pod
|
||||||
|
ContainerName=koel-db
|
||||||
|
|
||||||
|
Image=docker.io/mariadb:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Persistent volumes
|
||||||
|
Volume=/mnt/data/containers/koel/mariadb:/var/lib/mysql
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
# Environment=MARIADB_USER=
|
||||||
|
# Environment=MARIADB_DATABASE=
|
||||||
|
# Environment=MARIADB_PASSWORD=
|
||||||
|
# Environment=MARIADB_ROOT_PASSWORD=
|
||||||
|
EnvironmentFile=/mnt/data/containers/koel/.env.koel-db
|
||||||
|
|
||||||
|
# Health monitoring
|
||||||
|
HealthCmd=healthcheck.sh --connect
|
||||||
|
HealthInterval=30s
|
||||||
|
HealthTimeout=15s
|
||||||
|
HealthRetries=10
|
||||||
|
HealthStartPeriod=15s
|
||||||
|
|
||||||
|
# Other
|
||||||
|
UserNS=keep-id:uid=999,gid=999
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
35
koel/koel-server.container
Normal file
35
koel/koel-server.container
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Koel - Server
|
||||||
|
Requires=koel-db.service
|
||||||
|
After=koel-db.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=koel.pod
|
||||||
|
ContainerName=koel-server
|
||||||
|
Image=docker.io/phanan/koel
|
||||||
|
|
||||||
|
# Environment=APP_KEY=
|
||||||
|
# Environment=DB_HOST=
|
||||||
|
# Environment=DB_DATABASE=
|
||||||
|
# Environment=DB_PASSWORD=
|
||||||
|
# Environment=DB_USERNAME=
|
||||||
|
# Environment=FORCE_HTTPS=
|
||||||
|
EnvironmentFile=/mnt/data/containers/koel/.env.koel-server
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/koel/image_storage:/var/www/html/public/img/storage
|
||||||
|
Volume=/mnt/data/containers/koel/search_index:/var/www/html/storage/search-indexes
|
||||||
|
|
||||||
|
Volume=/mnt/audio/Sorted:/music
|
||||||
|
|
||||||
|
Label=homepage.group=Media
|
||||||
|
Label=homepage.name=Koel
|
||||||
|
Label=homepage.icon=koel.png
|
||||||
|
Label=homepage.href=https://koel.inkletblot.com
|
||||||
|
Label=homepage.description="Music Streaming"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
12
koel/koel.network
Normal file
12
koel/koel.network
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Koel network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=koel-network
|
||||||
|
Subnet=10.12.0.0/24
|
||||||
|
Gateway=10.12.0.1
|
||||||
|
DNS=
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
5
koel/koel.pod
Normal file
5
koel/koel.pod
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[Pod]
|
||||||
|
Network=koel.network
|
||||||
|
PodName=koel
|
||||||
|
PublishPort=8332:80
|
||||||
|
|
||||||
29
mealie/mealie-db.container
Normal file
29
mealie/mealie-db.container
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Mealie - DB
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=mealie.pod
|
||||||
|
ContainerName=mealie-db
|
||||||
|
Image=docker.io/postgres:17
|
||||||
|
|
||||||
|
# Environment=POSTGRES_PASSWORD=
|
||||||
|
# Environment=POSTGRES_USER=
|
||||||
|
# Environment=POSTGRES_DB=
|
||||||
|
EnvironmentFile=/mnt/data/containers/mealie/.env.mealie-db
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/mealie/postgresql:/var/lib/postgresql/data
|
||||||
|
Volume=/etc/timezone:/etc/timezone:ro
|
||||||
|
Volume=/etc/localtime:/etc/localtime:ro
|
||||||
|
|
||||||
|
HealthCmd=pg_isready -U mealieuser -d mealie
|
||||||
|
HealthInterval=5s
|
||||||
|
HealthRetries=3
|
||||||
|
HealthStartPeriod=15s
|
||||||
|
HealthTimeout=30s
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
47
mealie/mealie-server.container
Normal file
47
mealie/mealie-server.container
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Mealie - Server
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=mealie.pod
|
||||||
|
ContainerName=mealie-server
|
||||||
|
Image=ghcr.io/mealie-recipes/mealie:v3.9.1
|
||||||
|
|
||||||
|
# Environment=ALLOW_SIGNUP=
|
||||||
|
# Environment=PUID=
|
||||||
|
# Environment=PGID=
|
||||||
|
# Environment=TZ=
|
||||||
|
# Environment=BASE_URL=
|
||||||
|
|
||||||
|
# Database
|
||||||
|
# Environment=DB_ENGINE=
|
||||||
|
# Environment=POSTGRES_USER=
|
||||||
|
# Environment=POSTGRES_PASSWORD=
|
||||||
|
# Environment=POSTGRES_SERVER=
|
||||||
|
# Environment=POSTGRES_PORT=
|
||||||
|
# Environment=POSTGRES_DB=
|
||||||
|
|
||||||
|
# SMTP
|
||||||
|
# Environment=SMTP_HOST=
|
||||||
|
# Environment=SMTP_PORT=
|
||||||
|
# Environment=SMTP_FROM_NAME=
|
||||||
|
# Environment=SMTP_AUTH_STRATEGY=
|
||||||
|
# Environment=SMTP_FROM_EMAIL=
|
||||||
|
# Environment=SMTP_USER=
|
||||||
|
# Environment=SMTP_PASSWORD=
|
||||||
|
|
||||||
|
EnvironmentFile=/mnt/data/containers/mealie/.env.mealie-server
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/mealie/data:/app/data
|
||||||
|
|
||||||
|
Label=homepage.group=Life
|
||||||
|
Label=homepage.name=Mealie
|
||||||
|
Label=homepage.icon=mealie.png
|
||||||
|
Label=homepage.href=https://mealie.inkletblot.com
|
||||||
|
Label=homepage.description="Food, Glorious Food!"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=900
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
12
mealie/mealie.network
Normal file
12
mealie/mealie.network
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Mealie network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=mealie-network
|
||||||
|
Subnet=10.15.0.0/24
|
||||||
|
Gateway=10.15.0.1
|
||||||
|
DNS=
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
5
mealie/mealie.pod
Normal file
5
mealie/mealie.pod
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[Pod]
|
||||||
|
Network=mealie.network
|
||||||
|
PodName=mealie
|
||||||
|
PublishPort=9925:9000
|
||||||
|
|
||||||
29
memos/memos.container
Normal file
29
memos/memos.container
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Memos
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
ContainerName=memos
|
||||||
|
Image=docker.io/neosmemo/memos:stable
|
||||||
|
|
||||||
|
PublishPort=5230:5230
|
||||||
|
|
||||||
|
# Environment=MEMOS_MODE=
|
||||||
|
# Environment=MEMOS_ADDR=
|
||||||
|
# Environment=MEMOS_PORT=
|
||||||
|
# Environment=MEMOS_DATA=
|
||||||
|
EnvironmentFile=/mnt/data/containers/memos/.env.memos
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/memos/data:/var/opt/memos
|
||||||
|
|
||||||
|
Label=homepage.group=Productivity
|
||||||
|
Label=homepage.name=Memos
|
||||||
|
Label=homepage.icon=memos.png
|
||||||
|
Label=homepage.href=https://memos.inkletblot.com
|
||||||
|
Label=homepage.description="Note Taking"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
36
monica/monica-db.container
Normal file
36
monica/monica-db.container
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Monica - DB
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=monica.pod
|
||||||
|
ContainerName=monica-db
|
||||||
|
|
||||||
|
Image=docker.io/mariadb:11.8
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Persistent volumes
|
||||||
|
Volume=/mnt/data/containers/monica/mariadb:/var/lib/mysql
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
# Environment=MARIADB_USER=
|
||||||
|
# Environment=MARIADB_DATABASE=
|
||||||
|
# Environment=MARIADB_PASSWORD=
|
||||||
|
# Environment=MARIADB_ROOT_PASSWORD=
|
||||||
|
EnvironmentFile=/mnt/data/containers/monica/.env.monica-db
|
||||||
|
|
||||||
|
# Health monitoring
|
||||||
|
HealthCmd=healthcheck.sh --connect
|
||||||
|
HealthInterval=30s
|
||||||
|
HealthTimeout=15s
|
||||||
|
HealthRetries=10
|
||||||
|
HealthStartPeriod=15s
|
||||||
|
|
||||||
|
# Other
|
||||||
|
UserNS=keep-id:uid=999,gid=999
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
36
monica/monica-server.container
Normal file
36
monica/monica-server.container
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Monica - Server
|
||||||
|
Requires=monica-db.service
|
||||||
|
After=monica-db.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=monica.pod
|
||||||
|
ContainerName=monica-server
|
||||||
|
Image=docker.io/monica
|
||||||
|
|
||||||
|
# Environment=APP_ENV=
|
||||||
|
# Environment=APP_KEY=
|
||||||
|
# Environment=DB_HOST=
|
||||||
|
# Environment=DB_DATABASE=
|
||||||
|
# Environment=DB_PASSWORD=
|
||||||
|
# Environment=DB_USERNAME=
|
||||||
|
# Environment=LOG_CHANNEL=
|
||||||
|
# Environment=CACHE_DRIVER=
|
||||||
|
# Environment=SESSION_DRIVER=
|
||||||
|
# Environment=QUEUE_DRIVER=
|
||||||
|
EnvironmentFile=/mnt/data/containers/monica/.env.monica-server
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/monica/data:/var/www/html/storage
|
||||||
|
|
||||||
|
Label=homepage.group=Life
|
||||||
|
Label=homepage.name=Monica
|
||||||
|
Label=homepage.icon=monica.png
|
||||||
|
Label=homepage.href=http://monica.forest
|
||||||
|
Label=homepage.description="CRM your social life"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
12
monica/monica.network
Normal file
12
monica/monica.network
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Monica network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=monica-network
|
||||||
|
Subnet=10.11.0.0/24
|
||||||
|
Gateway=10.11.0.1
|
||||||
|
DNS=
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
5
monica/monica.pod
Normal file
5
monica/monica.pod
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[Pod]
|
||||||
|
Network=monica.network
|
||||||
|
PodName=monica
|
||||||
|
PublishPort=8232:80
|
||||||
|
|
||||||
34
navidrome/navidrome.container
Normal file
34
navidrome/navidrome.container
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Navidrome
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
ContainerName=navidrome
|
||||||
|
Image=docker.io/deluan/navidrome:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Environment=ND_LOGLEVEL=
|
||||||
|
# Environment=ND_ENABLEINSIGHTSCOLLECTOR=
|
||||||
|
# Environment=ND_RECENTLYADDEDBYMODTIME=
|
||||||
|
# Environment=ND_LASTFM_ENABLED=
|
||||||
|
# Environment=ND_AUTOIMPORTPLAYLISTS=
|
||||||
|
# Environment=ND_ENABLESHARING=
|
||||||
|
EnvironmentFile=/mnt/data/containers/navidrome/.env.navidrome
|
||||||
|
|
||||||
|
PublishPort=4533:4533
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/navidrome/data:/data
|
||||||
|
Volume=/mnt/audio/Sorted:/music:ro
|
||||||
|
Volume=/mnt/audio/Playlists:/playlists:ro
|
||||||
|
|
||||||
|
Label=homepage.group=Media
|
||||||
|
Label=homepage.name=Navidrome
|
||||||
|
Label=homepage.icon=navidrome.png
|
||||||
|
Label=homepage.href=https://navidrome.inkletblot.com
|
||||||
|
Label=homepage.description="Music Streaming"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=900
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
36
nextcloud/nextcloud-db.container
Normal file
36
nextcloud/nextcloud-db.container
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Nextcloud - DB
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=nextcloud.pod
|
||||||
|
ContainerName=nextcloud-db
|
||||||
|
Image=docker.io/mariadb:11.8
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Persistent volumes
|
||||||
|
Volume=/mnt/data/containers/nextcloud/db:/var/lib/mysql
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
# Environment=MARIADB_USER=
|
||||||
|
# Environment=MARIADB_DATABASE=
|
||||||
|
# Environment=MARIADB_PASSWORD=
|
||||||
|
# Environment=MARIADB_ROOT_PASSWORD=
|
||||||
|
EnvironmentFile=/mnt/data/containers/nextcloud/.env.nextcloud-db
|
||||||
|
|
||||||
|
# Health monitoring
|
||||||
|
HealthCmd=healthcheck.sh --connect
|
||||||
|
HealthInterval=30s
|
||||||
|
HealthTimeout=15s
|
||||||
|
HealthRetries=10
|
||||||
|
HealthStartPeriod=15s
|
||||||
|
|
||||||
|
# Other
|
||||||
|
UserNS=keep-id:uid=999,gid=999
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
StartLimitBurst=5
|
||||||
|
|
||||||
14
nextcloud/nextcloud-redis.container
Normal file
14
nextcloud/nextcloud-redis.container
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Nextcloud - Redis
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=nextcloud.pod
|
||||||
|
ContainerName=nextcloud-redis
|
||||||
|
Image=docker.io/library/redis:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
StartLimitBurst=5
|
||||||
|
|
||||||
49
nextcloud/nextcloud-server.container
Normal file
49
nextcloud/nextcloud-server.container
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Nextcloud - Server
|
||||||
|
Requires=nextcloud-db.service
|
||||||
|
After=nextcloud-db.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=nextcloud.pod
|
||||||
|
ContainerName=nextcloud-server
|
||||||
|
Image=docker.io/library/nextcloud:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Volumes
|
||||||
|
Volume=/mnt/data/containers/nextcloud/nextcloud:/var/www/html
|
||||||
|
Volume=/mnt/data/containers/nextcloud/custom_apps/:/var/www/html/custom_apps
|
||||||
|
Volume=/mnt/data/containers/nextcloud/config:/var/www/html/config
|
||||||
|
Volume=/mnt/data/containers/nextcloud/data:/var/www/html/data
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
# Environment=APACHE_DISABLE_REWRITE_IP=
|
||||||
|
# Environment=TRUSTED_PROXIES=
|
||||||
|
|
||||||
|
# Database variables
|
||||||
|
# Environment=MYSQL_USER=
|
||||||
|
# Environment=MYSQL_DATABASE=
|
||||||
|
# Environment=MYSQL_HOST=
|
||||||
|
# Environment=MYSQL_PASSWORD=
|
||||||
|
|
||||||
|
# Default admin user and password
|
||||||
|
# Environment=NEXTCLOUD_ADMIN_USER=
|
||||||
|
# Environment=NEXTCLOUD_ADMIN_PASSWORD=
|
||||||
|
|
||||||
|
# Redis variables
|
||||||
|
# Environment=REDIS_HOST=
|
||||||
|
# Environment=REDIS_PORT=
|
||||||
|
EnvironmentFile=/mnt/data/containers/nextcloud/.env.nextcloud-server
|
||||||
|
|
||||||
|
Label=homepage.group=Documents/Backup
|
||||||
|
Label=homepage.name=Nextcloud
|
||||||
|
Label=homepage.icon=nextcloud.png
|
||||||
|
Label=homepage.href=https://cloud.inkletblot.com
|
||||||
|
Label=homepage.description="Files"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
StartLimitBurst=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
12
nextcloud/nextcloud.network
Normal file
12
nextcloud/nextcloud.network
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Nextcloud network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=nextcloud-network
|
||||||
|
Subnet=10.4.0.0/24
|
||||||
|
Gateway=10.4.0.1
|
||||||
|
DNS=
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
7
nextcloud/nextcloud.pod
Normal file
7
nextcloud/nextcloud.pod
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[Pod]
|
||||||
|
Network=nextcloud.network
|
||||||
|
PodName=nextcloud
|
||||||
|
PublishPort=4080:80
|
||||||
|
|
||||||
|
# for access to database
|
||||||
|
# PublishPort=13306:3306
|
||||||
1
onetimesecret/UNUSED
Normal file
1
onetimesecret/UNUSED
Normal file
@ -0,0 +1 @@
|
|||||||
|
It's called one time secret but it doesn't seem to have a way to limit a secret to one view...
|
||||||
14
onetimesecret/onetimesecret-redis.container
Normal file
14
onetimesecret/onetimesecret-redis.container
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=OneTimeSecret - Redis
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=onetimesecret.pod
|
||||||
|
ContainerName=onetimesecret-redis
|
||||||
|
Image=docker.io/library/redis:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
StartLimitBurst=5
|
||||||
|
|
||||||
48
onetimesecret/onetimesecret.container
Normal file
48
onetimesecret/onetimesecret.container
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=OneTimeSecret - Server
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=onetimesecret.pod
|
||||||
|
ContainerName=onetimesecret
|
||||||
|
Image=docker.io/onetimesecret/onetimesecret:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Environment=SSL=
|
||||||
|
# Environment=SECRET=
|
||||||
|
# Environment=HOST=
|
||||||
|
# Environment=REDIS_URL=
|
||||||
|
|
||||||
|
# Auth
|
||||||
|
# Disabled because you cant persist accounts between container restarts, actually retarded.
|
||||||
|
# Environment=AUTH_REQUIRED=
|
||||||
|
# Environment=AUTH_SIGNUP=
|
||||||
|
# Environment=AUTH_SIGNIN=
|
||||||
|
# Environment=AUTH_AUTOVERIFY=
|
||||||
|
# Environment=COLONEL=
|
||||||
|
|
||||||
|
# SMTP
|
||||||
|
# Environment=SMTP_HOST=
|
||||||
|
# Environment=SMTP_PORT=
|
||||||
|
# Environment=FROM_EMAIL=
|
||||||
|
# Environment=FROMNAME=
|
||||||
|
# Environment=SMTP_USERNAME=
|
||||||
|
# Environment=SMTP_PASSWORD=
|
||||||
|
# Environment=SMTP_TLS=
|
||||||
|
# Environment=SMTP_AUTH=
|
||||||
|
|
||||||
|
# Environment=VERIFIER_EMAIL=
|
||||||
|
EnvironmentFile=/mnt/data/containers/onetimesecret/.env.onetimesecret
|
||||||
|
|
||||||
|
Label=homepage.group=Life
|
||||||
|
Label=homepage.name=OneTimeSecret
|
||||||
|
Label=homepage.icon=onetimesecret.png
|
||||||
|
Label=homepage.href=https://ots.inkletblot.com
|
||||||
|
Label=homepage.description="Like Privnote"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
StartLimitBurst=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
11
onetimesecret/onetimesecret.network
Normal file
11
onetimesecret/onetimesecret.network
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=OneTimeSecret network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=onetimesecret-network
|
||||||
|
Subnet=10.41.0.0/24
|
||||||
|
Gateway=10.41.0.1
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
4
onetimesecret/onetimesecret.pod
Normal file
4
onetimesecret/onetimesecret.pod
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[Pod]
|
||||||
|
Network=onetimesecret.network
|
||||||
|
PodName=onetimesecret
|
||||||
|
PublishPort=3080:3000
|
||||||
37
openhab/openhab.container
Normal file
37
openhab/openhab.container
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=OpenHAB
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
ContainerName=openhab
|
||||||
|
Image=docker.io/openhab/openhab:5.0.3
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
Network=host
|
||||||
|
|
||||||
|
# Environment=CRYPTO_POLICY=
|
||||||
|
# Environment=EXTRA_JAVA_OPTS=
|
||||||
|
# Environment=OPENHAB_HTTP_PORT=
|
||||||
|
# Environment=OPENHAB_HTTPS_PORT=
|
||||||
|
EnvironmentFile=/mnt/data/containers/openhab/.env.openhab
|
||||||
|
|
||||||
|
Volume=/etc/localtime:/etc/localtime:ro
|
||||||
|
Volume=/etc/timezone:/etc/timezone:ro
|
||||||
|
Volume=/mnt/data/containers/openhab/conf:/openhab/conf
|
||||||
|
Volume=/mnt/data/containers/openhab/userdata:/openhab/userdata
|
||||||
|
Volume=/mnt/data/containers/openhab/addons:/openhab/addons
|
||||||
|
Volume=/mnt/data/containers/openhab/.java:/openhab/.java
|
||||||
|
|
||||||
|
Label=homepage.group=Life
|
||||||
|
Label=homepage.name=OpenHAB
|
||||||
|
Label=homepage.icon=openhab.png
|
||||||
|
Label=homepage.href=https://hab.inkletblot.com
|
||||||
|
Label=homepage.description="Home Automation"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=900
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
36
photoprism/photoprism-db.container
Normal file
36
photoprism/photoprism-db.container
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Photoprism - DB
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
ContainerName=photoprism-db
|
||||||
|
Pod=photoprism.pod
|
||||||
|
Image=docker.io/mariadb:11.8
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Persistent volumes
|
||||||
|
Volume=/mnt/data/containers/photoprism/db:/var/lib/mysql
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
# Environment=MARIADB_USER=
|
||||||
|
# Environment=MARIADB_DATABASE=
|
||||||
|
# Environment=MARIADB_PASSWORD=
|
||||||
|
# Environment=MARIADB_ROOT_PASSWORD=
|
||||||
|
EnvironmentFile=/mnt/data/containers/photoprism/.env.photoprism-db
|
||||||
|
|
||||||
|
# Health monitoring
|
||||||
|
HealthCmd=healthcheck.sh --connect
|
||||||
|
HealthInterval=30s
|
||||||
|
HealthTimeout=15s
|
||||||
|
HealthRetries=10
|
||||||
|
HealthStartPeriod=15s
|
||||||
|
|
||||||
|
# Other
|
||||||
|
UserNS=keep-id:uid=999,gid=999
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
StartLimitBurst=5
|
||||||
|
|
||||||
40
photoprism/photoprism-server.container
Normal file
40
photoprism/photoprism-server.container
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Photoprism
|
||||||
|
Wants=photoprism-db.service
|
||||||
|
After=photoprism-db.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
ContainerName=photoprism
|
||||||
|
Pod=photoprism.pod
|
||||||
|
Image=docker.io/photoprism/photoprism:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Environment=PHOTOPRISM_UID=
|
||||||
|
# Environment=PHOTOPRISM_GID=
|
||||||
|
# Environment=PHOTOPRISM_UPLOAD_NSFW=
|
||||||
|
# Environment=PHOTOPRISM_ADMIN_PASSWORD=
|
||||||
|
|
||||||
|
# Environment=PHOTOPRISM_DATABASE_DRIVER=
|
||||||
|
# Environment=PHOTOPRISM_DATABASE_USER=
|
||||||
|
# Environment=PHOTOPRISM_DATABASE_NAME=
|
||||||
|
# Environment=PHOTOPRISM_DATABASE_SERVER=
|
||||||
|
# Environment=PHOTOPRISM_DATABASE_PASSWORD=
|
||||||
|
EnvironmentFile=/mnt/data/containers/photoprism/.env.photoprism-server
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/photoprism/storage:/photoprism/storage
|
||||||
|
Volume=/mnt/photo/Library:/photoprism/originals
|
||||||
|
Volume=/mnt/photo/Import:/photoprism/import
|
||||||
|
|
||||||
|
Label=homepage.group=Media
|
||||||
|
Label=homepage.name=Photoprism
|
||||||
|
Label=homepage.icon=photoprism.png
|
||||||
|
Label=homepage.href=http://photoprism.forest:2342
|
||||||
|
Label=homepage.description="Photo Library"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=900
|
||||||
|
SuccessExitStatus=0 143
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
12
photoprism/photoprism.network
Normal file
12
photoprism/photoprism.network
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Photoprism network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=photoprism-network
|
||||||
|
Subnet=10.6.0.0/24
|
||||||
|
Gateway=10.6.0.1
|
||||||
|
DNS=
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
4
photoprism/photoprism.pod
Normal file
4
photoprism/photoprism.pod
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[Pod]
|
||||||
|
Network=photoprism.network
|
||||||
|
PodName=photoprism
|
||||||
|
PublishPort=2342:2342
|
||||||
23
planka/planka-db.container
Normal file
23
planka/planka-db.container
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Planka - DB
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=planka.pod
|
||||||
|
ContainerName=planka-db
|
||||||
|
Image=docker.io/postgres:16-alpine
|
||||||
|
|
||||||
|
# Environment=POSTGRES_PASSWORD=
|
||||||
|
# Environment=POSTGRES_USER=
|
||||||
|
# Environment=POSTGRES_DB=
|
||||||
|
EnvironmentFile=/mnt/data/containers/planka/.env.planka-db
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/planka/postgresql:/var/lib/postgresql/data
|
||||||
|
Volume=/etc/timezone:/etc/timezone:ro
|
||||||
|
Volume=/etc/localtime:/etc/localtime:ro
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
32
planka/planka-server.container
Normal file
32
planka/planka-server.container
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Planka - Server
|
||||||
|
Requires=planka-db.service
|
||||||
|
After=planka-db.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=planka.pod
|
||||||
|
ContainerName=planka-server
|
||||||
|
Image=ghcr.io/plankanban/planka:2.0.0-rc.4
|
||||||
|
|
||||||
|
# Environment=BASE_URL=
|
||||||
|
# Environment=DATABASE_URL=
|
||||||
|
# Environment=SECRET_KEY=
|
||||||
|
EnvironmentFile=/mnt/data/containers/planka/.env.planka-server
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/planka/favicons:/app/public/favicons
|
||||||
|
Volume=/mnt/data/containers/planka/user-avatars:/app/public/user-avatars
|
||||||
|
Volume=/mnt/data/containers/planka/background-images:/app/public/background-images
|
||||||
|
Volume=/mnt/data/containers/planka/attachments:/app/private/attachments
|
||||||
|
|
||||||
|
Label=homepage.group=Productivity
|
||||||
|
Label=homepage.name=Planka
|
||||||
|
Label=homepage.icon=planka.png
|
||||||
|
Label=homepage.href=https://planka.inkletblot.com
|
||||||
|
Label=homepage.description="Kanban Board"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
12
planka/planka.network
Normal file
12
planka/planka.network
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Planka network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=planka-network
|
||||||
|
Subnet=10.14.0.0/24
|
||||||
|
Gateway=10.14.0.1
|
||||||
|
DNS=
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
5
planka/planka.pod
Normal file
5
planka/planka.pod
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[Pod]
|
||||||
|
Network=planka.network
|
||||||
|
PodName=planka
|
||||||
|
PublishPort=1337:1337
|
||||||
|
|
||||||
43
plex/plex.container
Normal file
43
plex/plex.container
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Plex Media Server
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
After=local-fs.target
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=plex.pod
|
||||||
|
ContainerName=plex
|
||||||
|
Image=docker.io/plexinc/pms-docker:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Environment=PLEX_CLAIM=
|
||||||
|
# Environment=PLEX_UID=
|
||||||
|
# Environment=PLEX_GID=
|
||||||
|
# Environment=ADVERTISE_IP=
|
||||||
|
# Environment=ALLOWED_NETWORKS=
|
||||||
|
EnvironmentFile=/mnt/data/containers/plex/.env.plex
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/plex/config:/config:Z
|
||||||
|
Volume=/mnt/data/containers/plex/trans:/transcode
|
||||||
|
Volume=/mnt/video/movies:/movies
|
||||||
|
Volume=/mnt/video/tv:/tv
|
||||||
|
Volume=/mnt/video/anime:/anime
|
||||||
|
Volume=/mnt/audio/Sorted:/music
|
||||||
|
Volume=/mnt/audio/Audio Books:/books
|
||||||
|
|
||||||
|
# don't have cpu features accessible here
|
||||||
|
# for hardware transcoding
|
||||||
|
# AddDevice=/dev/dri
|
||||||
|
|
||||||
|
Label=homepage.group=Media
|
||||||
|
Label=homepage.name=Plex
|
||||||
|
Label=homepage.icon=plex.png
|
||||||
|
Label=homepage.href=http://plex.forest:32400/web/
|
||||||
|
Label=homepage.description="Stream Media"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=90
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
12
plex/plex.network
Normal file
12
plex/plex.network
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Plex network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=plex-network
|
||||||
|
Subnet=10.38.0.0/24
|
||||||
|
Gateway=10.38.0.1
|
||||||
|
DNS=
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
15
plex/plex.pod
Normal file
15
plex/plex.pod
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
[Pod]
|
||||||
|
PodName=plex
|
||||||
|
Network=plex.network
|
||||||
|
|
||||||
|
PublishPort=32400:32400/tcp
|
||||||
|
# theese are all optional and I don't care.
|
||||||
|
#PublishPort=1900:1900/udp
|
||||||
|
#PublishPort=3005:3005/tcp
|
||||||
|
#PublishPort=5353:5353/udp
|
||||||
|
#PublishPort=8324:8324/tcp
|
||||||
|
#PublishPort=32410:32410/udp
|
||||||
|
#PublishPort=32412:32412/udp
|
||||||
|
#PublishPort=32413:32413/udp
|
||||||
|
#PublishPort=32414:32414/udp
|
||||||
|
#PublishPort=32469:32469/tcp
|
||||||
37
plucky-pinning.sh
Executable file
37
plucky-pinning.sh
Executable file
@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Must be run as root
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
echo "Please run as root (e.g., sudo $0)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Define file paths
|
||||||
|
PINNING_FILE="/etc/apt/preferences.d/podman-plucky.pref"
|
||||||
|
SOURCE_LIST="/etc/apt/sources.list.d/plucky.list"
|
||||||
|
|
||||||
|
# Write Plucky APT source list
|
||||||
|
echo "Adding Plucky repo to $SOURCE_LIST..."
|
||||||
|
echo "deb http://archive.ubuntu.com/ubuntu plucky main universe" > "$SOURCE_LIST"
|
||||||
|
|
||||||
|
# Write APT pinning rules
|
||||||
|
echo "Writing APT pinning rules to $PINNING_FILE..."
|
||||||
|
cat <<EOF > "$PINNING_FILE"
|
||||||
|
Package: podman buildah golang-github-containers-common crun libgpgme11t64 libgpg-error0 golang-github-containers-image catatonit conmon containers-storage
|
||||||
|
Pin: release n=plucky
|
||||||
|
Pin-Priority: 991
|
||||||
|
|
||||||
|
Package: libsubid4 netavark passt aardvark-dns containernetworking-plugins libslirp0 slirp4netns
|
||||||
|
Pin: release n=plucky
|
||||||
|
Pin-Priority: 991
|
||||||
|
|
||||||
|
Package: *
|
||||||
|
Pin: release n=plucky
|
||||||
|
Pin-Priority: 400
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Update APT cache
|
||||||
|
echo "Updating APT package list..."
|
||||||
|
apt update
|
||||||
|
|
||||||
|
echo "Plucky pinning setup complete."
|
||||||
36
roundcube/roundcube-db.container
Normal file
36
roundcube/roundcube-db.container
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Roundcube - DB
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=roundcube.pod
|
||||||
|
ContainerName=roundcube-db
|
||||||
|
Image=docker.io/mariadb:11.8
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Persistent volumes
|
||||||
|
Volume=/mnt/data/containers/roundcube/mariadb:/var/lib/mysql
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
# Environment=MARIADB_USER=
|
||||||
|
# Environment=MARIADB_DATABASE=
|
||||||
|
# Environment=MARIADB_PASSWORD=
|
||||||
|
# Environment=MARIADB_ROOT_PASSWORD=
|
||||||
|
EnvironmentFile=/mnt/data/containers/roundcube/.env.roundcube-db
|
||||||
|
|
||||||
|
# Health monitoring
|
||||||
|
HealthCmd=healthcheck.sh --connect
|
||||||
|
HealthInterval=30s
|
||||||
|
HealthTimeout=15s
|
||||||
|
HealthRetries=10
|
||||||
|
HealthStartPeriod=15s
|
||||||
|
|
||||||
|
# Other
|
||||||
|
UserNS=keep-id:uid=999,gid=999
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
StartLimitBurst=5
|
||||||
|
|
||||||
38
roundcube/roundcube-server.container
Normal file
38
roundcube/roundcube-server.container
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Roundcube - Server
|
||||||
|
Requires=roundcube-db.service
|
||||||
|
After=roundcube-db.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=roundcube.pod
|
||||||
|
ContainerName=roundcube-server
|
||||||
|
Image=docker.io/roundcube/roundcubemail:latest
|
||||||
|
|
||||||
|
# Environment=ROUNDCUBEMAIL_DEFAULT_HOST=
|
||||||
|
# Environment=ROUNDCUBEMAIL_DEFAULT_PORT=
|
||||||
|
# Environment=ROUNDCUBEMAIL_SMTP_SERVER=
|
||||||
|
# Environment=ROUNDCUBEMAIL_SMTP_PORT=
|
||||||
|
# Environment=ROUNDCUBEMAIL_USERNAME_DOMAIN=
|
||||||
|
|
||||||
|
# Environment=ROUNDCUBEMAIL_DB_TYPE=
|
||||||
|
# Environment=ROUNDCUBEMAIL_DB_HOST=
|
||||||
|
# Environment=ROUNDCUBEMAIL_DB_PORT=
|
||||||
|
# Environment=ROUNDCUBEMAIL_DB_USER=
|
||||||
|
# Environment=ROUNDCUBEMAIL_DB_PASSWORD=
|
||||||
|
# Environment=ROUNDCUBEMAIL_DB_NAME=
|
||||||
|
EnvironmentFile=/mnt/data/containers/roundcube/.env.roundcube-server
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/roundcube/config:/var/roundcube/config
|
||||||
|
|
||||||
|
Label=homepage.group=Productivity
|
||||||
|
Label=homepage.name=Roundcube
|
||||||
|
Label=homepage.icon=roundcube.png
|
||||||
|
Label=homepage.href=https://mail.inkletblot.com
|
||||||
|
Label=homepage.description="Mail Client"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=300
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
12
roundcube/roundcube.network
Normal file
12
roundcube/roundcube.network
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Roundcube network
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NetworkName=roundcube-network
|
||||||
|
Subnet=10.17.0.0/24
|
||||||
|
Gateway=10.17.0.1
|
||||||
|
DNS=
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
5
roundcube/roundcube.pod
Normal file
5
roundcube/roundcube.pod
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[Pod]
|
||||||
|
Network=roundcube.network
|
||||||
|
PodName=roundcube
|
||||||
|
PublishPort=8567:80
|
||||||
|
|
||||||
28
servarr/flaresolverr.container
Normal file
28
servarr/flaresolverr.container
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Solve Cloudflare Challenges
|
||||||
|
Wants=network-online.target
|
||||||
|
# Wants=servarr-gluetun.service
|
||||||
|
After=network-online.target
|
||||||
|
After=local-fs.target
|
||||||
|
# After=servarr-gluetun.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=servarr.pod
|
||||||
|
ContainerName=flaresolverr
|
||||||
|
|
||||||
|
Image=ghcr.io/flaresolverr/flaresolverr:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Network=container:servarr-gluetun
|
||||||
|
|
||||||
|
Label=homepage.group=Arr
|
||||||
|
Label=homepage.name=Flaresolverr
|
||||||
|
Label=homepage.icon=flaresolverr.png
|
||||||
|
Label=homepage.description="Solve Cloudflare Challenges"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=on-failure
|
||||||
|
TimeoutStartSec=90
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
44
servarr/gluetun.container
Normal file
44
servarr/gluetun.container
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=VPN Network Tunnle
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
After=local-fs.target
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
ContainerName=gluetun
|
||||||
|
|
||||||
|
Image=docker.io/qmcgaw/gluetun
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
AddDevice=/dev/net/tun
|
||||||
|
AddCapability=NET_ADMIN
|
||||||
|
AddCapability=NET_RAW
|
||||||
|
|
||||||
|
# qbittorrent
|
||||||
|
PublishPort=9191:9191
|
||||||
|
|
||||||
|
# gluetun
|
||||||
|
PublishPort=8888:8888
|
||||||
|
|
||||||
|
# Environment=VPN_SERVICE_PROVIDER=
|
||||||
|
# Environment=VPN_TYPE=
|
||||||
|
# Environment=WIREGUARD_PRIVATE_KEY=
|
||||||
|
# Environment=SERVER_COUNTRIES=
|
||||||
|
# Environment=VPN_PORT_FORWARDING=
|
||||||
|
# Environment=HTTP_CONTROL_SERVER_AUTH_DEFAULT_ROLE=
|
||||||
|
EnvironmentFile=/mnt/data/containers/servarr/gluetun/.env.gluetun
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/servarr/gluetun/config:/gluetun:Z
|
||||||
|
|
||||||
|
Label=homepage.group=Arr
|
||||||
|
Label=homepage.name=Gluetun
|
||||||
|
Label=homepage.href=http://gluetun:8888
|
||||||
|
Label=homepage.icon=gluetun.png
|
||||||
|
Label=homepage.description="VPN Tunnle"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=on-failure
|
||||||
|
TimeoutStartSec=90
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
38
servarr/lidarr.container
Normal file
38
servarr/lidarr.container
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Automate Music
|
||||||
|
Wants=network-online.target
|
||||||
|
# Wants=servarr-gluetun.service
|
||||||
|
After=network-online.target
|
||||||
|
After=local-fs.target
|
||||||
|
# After=servarr-gluetun.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=servarr.pod
|
||||||
|
ContainerName=lidarr
|
||||||
|
|
||||||
|
Image=ghcr.io/hotio/lidarr
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Network=container:servarr-gluetun
|
||||||
|
|
||||||
|
# Environment=PUID=
|
||||||
|
# Environment=PGID=
|
||||||
|
# Environment=TZ=
|
||||||
|
EnvironmentFile=/mnt/data/containers/servarr/lidarr/.env.lidarr
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/servarr/lidarr/config:/config:Z
|
||||||
|
Volume=/mnt/audio/Sorted:/data/music
|
||||||
|
Volume=/mnt/data/downloads:/downloads
|
||||||
|
|
||||||
|
Label=homepage.group=Arr
|
||||||
|
Label=homepage.name=Lidarr
|
||||||
|
Label=homepage.icon=lidarr.png
|
||||||
|
Label=homepage.href=http://192.168.2.61:8686
|
||||||
|
Label=homepage.description="Automate Music"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=on-failure
|
||||||
|
TimeoutStartSec=90
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
36
servarr/overseerr.container
Normal file
36
servarr/overseerr.container
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Automate Media Management
|
||||||
|
Wants=network-online.target
|
||||||
|
# Wants=servarr-gluetun.service
|
||||||
|
After=network-online.target
|
||||||
|
After=local-fs.target
|
||||||
|
# After=servarr-gluetun.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=servarr.pod
|
||||||
|
ContainerName=overseerr
|
||||||
|
|
||||||
|
Image=docker.io/sctx/overseerr
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Network=container:servarr-gluetun
|
||||||
|
|
||||||
|
# Environment=LOG_LEVEL=
|
||||||
|
# Environment=TZ=
|
||||||
|
# Environment=PORT=
|
||||||
|
EnvironmentFile=/mnt/data/containers/servarr/overseerr/.env.overseerr
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/servarr/overseerr/config:/app/config:Z
|
||||||
|
|
||||||
|
Label=homepage.group=Arr
|
||||||
|
Label=homepage.name=Overseerr
|
||||||
|
Label=homepage.icon=overseerr.png
|
||||||
|
Label=homepage.href=https://seer.inkletblot.com
|
||||||
|
Label=homepage.description="Request Media"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=on-failure
|
||||||
|
TimeoutStartSec=90
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
31
servarr/profilarr.container
Normal file
31
servarr/profilarr.container
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Auto profiles for sonarr/radarr
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=servarr.pod
|
||||||
|
ContainerName=profilarr
|
||||||
|
|
||||||
|
Image=docker.io/santiagosayshey/profilarr:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Network=container:gluetun
|
||||||
|
|
||||||
|
# Environment=PUID=
|
||||||
|
# Environment=PGID=
|
||||||
|
# Environment=TZ=
|
||||||
|
EnvironmentFile=/mnt/data/containers/servarr/profilarr/.env.profilarr
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/servarr/profilarr/config:/config:Z
|
||||||
|
|
||||||
|
Label=homepage.group=Arr
|
||||||
|
Label=homepage.name=Profilarr
|
||||||
|
Label=homepage.icon=profilarr.png
|
||||||
|
Label=homepage.href=http://profilerr.forest
|
||||||
|
Label=homepage.description="Media profiles for arrs"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=on-failure
|
||||||
|
TimeoutStartSec=90
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
36
servarr/prowlarr.container
Normal file
36
servarr/prowlarr.container
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Manage indexers
|
||||||
|
Wants=network-online.target
|
||||||
|
# Wants=servarr-gluetun.service
|
||||||
|
After=network-online.target
|
||||||
|
After=local-fs.target
|
||||||
|
# After=servarr-gluetun.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=servarr.pod
|
||||||
|
ContainerName=prowlarr
|
||||||
|
|
||||||
|
Image=ghcr.io/hotio/prowlarr:release-2.0.5.5160
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Network=container:servarr-gluetun
|
||||||
|
|
||||||
|
# Environment=PUID=
|
||||||
|
# Environment=PGID=
|
||||||
|
# Environment=TZ=
|
||||||
|
EnvironmentFile=/mnt/data/containers/servarr/prowlarr/.env.prowlarr
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/servarr/prowlarr/config:/config:Z
|
||||||
|
|
||||||
|
Label=homepage.group=Arr
|
||||||
|
Label=homepage.name=Prowlarr
|
||||||
|
Label=homepage.icon=prowlarr.png
|
||||||
|
Label=homepage.href=http://prowlarr.forest
|
||||||
|
Label=homepage.description="Manage indexers"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=on-failure
|
||||||
|
TimeoutStartSec=90
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
38
servarr/qbittorrent.container
Normal file
38
servarr/qbittorrent.container
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Torrent Client
|
||||||
|
Wants=network-online.target
|
||||||
|
Wants=gluetun.service
|
||||||
|
After=network-online.target
|
||||||
|
After=local-fs.target
|
||||||
|
After=gluetun.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
ContainerName=qbittorrent
|
||||||
|
|
||||||
|
Image=lscr.io/linuxserver/qbittorrent:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
Network=container:gluetun
|
||||||
|
|
||||||
|
# Environment=PUID=
|
||||||
|
# Environment=PGID=
|
||||||
|
# Environment=TZ=
|
||||||
|
# Environment=WEBUI_PORT=
|
||||||
|
# Environment=TORRENTING_PORT=
|
||||||
|
EnvironmentFile=/mnt/data/containers/servarr/qbittorrent/.env.qbittorrent
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/servarr/qbittorrent/config:/config
|
||||||
|
Volume=/mnt/data/downloads:/downloads
|
||||||
|
|
||||||
|
Label=homepage.group=Arr
|
||||||
|
Label=homepage.name=qBittorrent
|
||||||
|
Label=homepage.icon=qbittorrent.png
|
||||||
|
Label=homepage.href=http://qbittorrent:9191
|
||||||
|
Label=homepage.description="Automate Downloads"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=90
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
38
servarr/radarr.container
Normal file
38
servarr/radarr.container
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Automate Movies
|
||||||
|
Wants=network-online.target
|
||||||
|
# Wants=servarr-gluetun.service
|
||||||
|
After=network-online.target
|
||||||
|
After=local-fs.target
|
||||||
|
# After=servarr-gluetun.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=servarr.pod
|
||||||
|
ContainerName=radarr
|
||||||
|
|
||||||
|
Image=ghcr.io/hotio/radarr
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Network=container:servarr-gluetun
|
||||||
|
|
||||||
|
# Environment=PUID=
|
||||||
|
# Environment=PGID=
|
||||||
|
# Environment=TZ=
|
||||||
|
EnvironmentFile=/mnt/data/containers/servarr/radarr/.env.radarr
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/servarr/radarr/config:/config:Z
|
||||||
|
Volume=/mnt/video/movies:/data/movies
|
||||||
|
Volume=/mnt/data/downloads:/downloads
|
||||||
|
|
||||||
|
Label=homepage.group=Arr
|
||||||
|
Label=homepage.name=Radarr
|
||||||
|
Label=homepage.icon=radarr.png
|
||||||
|
Label=homepage.href=http://radarr.forest
|
||||||
|
Label=homepage.description="Automate Movies"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=90
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
36
servarr/sabnzbd.container
Normal file
36
servarr/sabnzbd.container
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=NZBD Client
|
||||||
|
Wants=network-online.target
|
||||||
|
# Wants=servarr-gluetun.service
|
||||||
|
After=network-online.target
|
||||||
|
After=local-fs.target
|
||||||
|
# After=servarr-gluetun.service
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Pod=servarr.pod
|
||||||
|
ContainerName=sabnzbd
|
||||||
|
|
||||||
|
Image=lscr.io/linuxserver/sabnzbd:latest
|
||||||
|
AutoUpdate=registry
|
||||||
|
|
||||||
|
# Environment=PUID=
|
||||||
|
# Environment=PGID=
|
||||||
|
# Environment=TZ=
|
||||||
|
EnvironmentFile=/mnt/data/containers/servarr/sabnzbd/.env.sabnzbd
|
||||||
|
|
||||||
|
Volume=/mnt/data/containers/servarr/sabnzbd/config:/config
|
||||||
|
Volume=/mnt/data/downloads:/downloads
|
||||||
|
Volume=/mnt/data/incomplete-downloads:/incomplete-downloads
|
||||||
|
|
||||||
|
Label=homepage.group=Arr
|
||||||
|
Label=homepage.name=SABnzbd
|
||||||
|
Label=homepage.icon=sabnzbd.png
|
||||||
|
Label=homepage.href=http://sabnzbd.forest
|
||||||
|
Label=homepage.description="Automate nzb Downloads"
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Restart=always
|
||||||
|
TimeoutStartSec=90
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
Wantedby=default.target
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user