Compare commits
2 Commits
66e980a7cc
...
22b1cb47a0
| Author | SHA1 | Date |
|---|---|---|
|
|
22b1cb47a0 | 2 weeks ago |
|
|
5828e563f8 | 2 weeks ago |
17 changed files with 964 additions and 5 deletions
@ -0,0 +1,29 @@ |
|||||
|
# Podman Quadlets Cookbook |
||||
|
|
||||
|
This project is a collection of Podman Quadlets for some widely used selfhosted software. |
||||
|
Your role is to write and maintain the Podman Quadlets. |
||||
|
You may be given Kustomize manifests, Helm charts, Docker Compose files, etc. that you HAVE TO convert in Podman Quadlets. |
||||
|
|
||||
|
## Rules |
||||
|
|
||||
|
- NEVER alter the files at the root of this GIT repository! |
||||
|
- You are ONLY ALLOWED to edit files in the sub-directories. |
||||
|
- Before writing or editing a Podman Quadlet, you MUST read the `podman-systemd.unit(5)` man page! |
||||
|
|
||||
|
## Architecture |
||||
|
|
||||
|
- Convention over configuration: place the files at the right place and the tooling (Makefile) will take care of placing that file at the right location. |
||||
|
|
||||
|
## Useful tools |
||||
|
|
||||
|
- `podlet`: Podlet generates Podman Quadlet files from a Podman command, Docker command, Docker compose file, or existing Podman object (container, image, pod, volume, network, etc). |
||||
|
|
||||
|
## Useful documentation |
||||
|
|
||||
|
- @README.md: to get an overview of the project. |
||||
|
- @common.mk: to understand the development tooling. |
||||
|
- `podman-systemd.unit(5)`: syntax of the Podman Quadlet files. |
||||
|
- `podlet podman --help`: when you need to convert Docker commands. |
||||
|
- `podlet compose --help`: when you need to convert Docker Compose files. |
||||
|
- `podlet generate --help`: when you need to convert existing Podman objects. |
||||
|
|
||||
@ -0,0 +1,41 @@ |
|||||
|
# Podman Quadlet: Base |
||||
|
|
||||
|
## Overview |
||||
|
|
||||
|
The base cookbook provides foundational configuration for Fedora CoreOS systems. It includes: |
||||
|
|
||||
|
- **fastfetch**: A system information tool displayed on login, with color-coded output (red for root, blue for regular users). |
||||
|
- **tmpfiles configuration**: Sets up required directories such as `/var/lib/virtiofs/data`. |
||||
|
- **QEMU guest agent**: Optional installation for better VM integration. |
||||
|
- **SSH key persistence**: Backs up and restores SSH host keys across reboots. |
||||
|
|
||||
|
This cookbook is used as an implicit dependency for other cookbooks that run on Fedora CoreOS. |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
In a separate terminal, follow the logs. |
||||
|
|
||||
|
```sh |
||||
|
sudo make tail-logs |
||||
|
``` |
||||
|
|
||||
|
Install the base configuration. |
||||
|
|
||||
|
```sh |
||||
|
sudo make clean install |
||||
|
``` |
||||
|
|
||||
|
You should see the **install-fastfetch.service** downloading and installing fastfetch. |
||||
|
On next login, fastfetch will display system information. |
||||
|
|
||||
|
To verify the installation: |
||||
|
|
||||
|
```sh |
||||
|
fastfetch --version |
||||
|
``` |
||||
|
|
||||
|
Finally, remove the configuration and its data. |
||||
|
|
||||
|
```sh |
||||
|
sudo make uninstall clean |
||||
|
``` |
||||
@ -0,0 +1,57 @@ |
|||||
|
# Podman Quadlet: Gitea |
||||
|
|
||||
|
## Overview |
||||
|
|
||||
|
Gitea is a lightweight, self-hosted Git service started as a Podman Quadlet. It provides a GitHub/GitLab-like experience for hosting Git repositories. |
||||
|
|
||||
|
This cookbook: |
||||
|
|
||||
|
- Runs Gitea as a rootless container with minimal privileges. |
||||
|
- Uses PostgreSQL as the database backend (requires the `postgresql` cookbook). |
||||
|
- Includes health checks to monitor the service status. |
||||
|
- Supports automatic container image updates via Podman auto-update. |
||||
|
|
||||
|
## Prerequisites |
||||
|
|
||||
|
- The `postgresql` cookbook must be installed and running. |
||||
|
- Configuration file `/etc/quadlets/gitea/config.env` must exist. |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
In a separate terminal, follow the logs. |
||||
|
|
||||
|
```sh |
||||
|
sudo make tail-logs |
||||
|
``` |
||||
|
|
||||
|
Install the Podman Quadlets and start Gitea. |
||||
|
|
||||
|
```sh |
||||
|
sudo make clean install |
||||
|
``` |
||||
|
|
||||
|
You should see the **gitea.service** waiting for PostgreSQL to be available, then starting up. |
||||
|
|
||||
|
Verify Gitea is running: |
||||
|
|
||||
|
```sh |
||||
|
curl -sSf http://127.0.0.1:3000/ |
||||
|
``` |
||||
|
|
||||
|
Restart the **gitea.target** unit. |
||||
|
|
||||
|
```sh |
||||
|
sudo systemctl restart gitea.target |
||||
|
``` |
||||
|
|
||||
|
Finally, remove the quadlets, their configuration and their data. |
||||
|
|
||||
|
```sh |
||||
|
sudo make uninstall clean |
||||
|
``` |
||||
|
|
||||
|
## Integration tests |
||||
|
|
||||
|
```sh |
||||
|
sudo make test |
||||
|
``` |
||||
@ -0,0 +1,58 @@ |
|||||
|
# Podman Quadlet: Keycloak |
||||
|
|
||||
|
## Overview |
||||
|
|
||||
|
Keycloak is an open source identity and access management server started as a Podman Quadlet. It provides single sign-on (SSO), identity brokering, and user federation capabilities. |
||||
|
|
||||
|
This cookbook: |
||||
|
|
||||
|
- Builds a custom Keycloak container image locally for optimized startup. |
||||
|
- Runs Keycloak with PostgreSQL as the database backend (requires the `postgresql` cookbook). |
||||
|
- Includes a timer to periodically rebuild the container image. |
||||
|
- Includes health checks to monitor the service status. |
||||
|
|
||||
|
## Prerequisites |
||||
|
|
||||
|
- The `postgresql` cookbook must be installed and running. |
||||
|
- Configuration file `/etc/quadlets/keycloak/config.env` must exist. |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
In a separate terminal, follow the logs. |
||||
|
|
||||
|
```sh |
||||
|
sudo make tail-logs |
||||
|
``` |
||||
|
|
||||
|
Install the Podman Quadlets and start Keycloak. |
||||
|
|
||||
|
```sh |
||||
|
sudo make clean install |
||||
|
``` |
||||
|
|
||||
|
You should see the **keycloak-build.service** building the optimized Keycloak container image. |
||||
|
Then, the **keycloak.service** should start up after waiting for PostgreSQL to be available. |
||||
|
|
||||
|
Verify Keycloak is running: |
||||
|
|
||||
|
```sh |
||||
|
curl -sSf http://127.0.0.1:8080/health |
||||
|
``` |
||||
|
|
||||
|
Restart the **keycloak.target** unit. |
||||
|
|
||||
|
```sh |
||||
|
sudo systemctl restart keycloak.target |
||||
|
``` |
||||
|
|
||||
|
Finally, remove the quadlets, their configuration and their data. |
||||
|
|
||||
|
```sh |
||||
|
sudo make uninstall clean |
||||
|
``` |
||||
|
|
||||
|
## Integration tests |
||||
|
|
||||
|
```sh |
||||
|
sudo make test |
||||
|
``` |
||||
@ -0,0 +1,66 @@ |
|||||
|
# Podman Quadlet: Lego |
||||
|
|
||||
|
## Overview |
||||
|
|
||||
|
Lego is a Let's Encrypt/ACME client started as a Podman Quadlet. It handles automatic SSL/TLS certificate issuance and renewal. |
||||
|
|
||||
|
This cookbook: |
||||
|
|
||||
|
- Runs an initial certificate fetch via **lego-run.service** when no certificates exist. |
||||
|
- Schedules automatic certificate renewal via **lego-renew.timer**. |
||||
|
- Stores certificates with secure permissions (umask 0077). |
||||
|
- Supports renewal hooks to reload dependent services when certificates are renewed. |
||||
|
|
||||
|
## Prerequisites |
||||
|
|
||||
|
- Configuration file `/etc/quadlets/lego/config.env` must exist with ACME configuration. |
||||
|
- DNS or HTTP challenge must be properly configured. |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
In a separate terminal, follow the logs. |
||||
|
|
||||
|
```sh |
||||
|
sudo make tail-logs |
||||
|
``` |
||||
|
|
||||
|
Install the Podman Quadlets and fetch the initial certificate. |
||||
|
|
||||
|
```sh |
||||
|
sudo make clean install |
||||
|
``` |
||||
|
|
||||
|
You should see the **lego-run.service** fetching a certificate from Let's Encrypt. |
||||
|
The certificate will be stored in `/var/lib/quadlets/lego/certificates/`. |
||||
|
|
||||
|
Check the certificate: |
||||
|
|
||||
|
```sh |
||||
|
sudo ls -la /var/lib/quadlets/lego/certificates/ |
||||
|
``` |
||||
|
|
||||
|
The **lego-renew.timer** will periodically check and renew the certificate before expiration. |
||||
|
|
||||
|
To manually trigger a renewal check: |
||||
|
|
||||
|
```sh |
||||
|
sudo systemctl start lego-renew.service |
||||
|
``` |
||||
|
|
||||
|
Restart the **lego.target** unit. |
||||
|
|
||||
|
```sh |
||||
|
sudo systemctl restart lego.target |
||||
|
``` |
||||
|
|
||||
|
Finally, remove the quadlets, their configuration and their data. |
||||
|
|
||||
|
```sh |
||||
|
sudo make uninstall clean |
||||
|
``` |
||||
|
|
||||
|
## Integration tests |
||||
|
|
||||
|
```sh |
||||
|
sudo make test |
||||
|
``` |
||||
@ -0,0 +1,57 @@ |
|||||
|
# Podman Quadlet: Miniflux |
||||
|
|
||||
|
## Overview |
||||
|
|
||||
|
Miniflux is a minimalist RSS/Atom feed reader started as a Podman Quadlet. It is fast, lightweight, and focuses on simplicity. |
||||
|
|
||||
|
This cookbook: |
||||
|
|
||||
|
- Runs Miniflux as a rootless container with minimal privileges. |
||||
|
- Uses PostgreSQL as the database backend (requires the `postgresql` cookbook). |
||||
|
- Includes health checks to monitor the service status. |
||||
|
- Supports automatic container image updates via Podman auto-update. |
||||
|
|
||||
|
## Prerequisites |
||||
|
|
||||
|
- The `postgresql` cookbook must be installed and running. |
||||
|
- Configuration file `/etc/quadlets/miniflux/miniflux.conf` must exist. |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
In a separate terminal, follow the logs. |
||||
|
|
||||
|
```sh |
||||
|
sudo make tail-logs |
||||
|
``` |
||||
|
|
||||
|
Install the Podman Quadlets and start Miniflux. |
||||
|
|
||||
|
```sh |
||||
|
sudo make clean install |
||||
|
``` |
||||
|
|
||||
|
You should see the **miniflux.service** waiting for PostgreSQL to be available, then starting up. |
||||
|
|
||||
|
Verify Miniflux is running by accessing the web interface or using the health check: |
||||
|
|
||||
|
```sh |
||||
|
curl -sSf http://127.0.0.1:8080/healthcheck |
||||
|
``` |
||||
|
|
||||
|
Restart the **miniflux.target** unit. |
||||
|
|
||||
|
```sh |
||||
|
sudo systemctl restart miniflux.target |
||||
|
``` |
||||
|
|
||||
|
Finally, remove the quadlets, their configuration and their data. |
||||
|
|
||||
|
```sh |
||||
|
sudo make uninstall clean |
||||
|
``` |
||||
|
|
||||
|
## Integration tests |
||||
|
|
||||
|
```sh |
||||
|
sudo make test |
||||
|
``` |
||||
@ -0,0 +1,71 @@ |
|||||
|
# Podman Quadlet: Nextcloud |
||||
|
|
||||
|
## Overview |
||||
|
|
||||
|
Nextcloud is a self-hosted file sync and share platform started as a Podman Quadlet. It provides cloud storage, collaboration, and productivity features. |
||||
|
|
||||
|
This cookbook runs a complete Nextcloud stack: |
||||
|
|
||||
|
- **nextcloud-app**: The main Nextcloud PHP application. |
||||
|
- **nextcloud-nginx**: Nginx web server to serve Nextcloud. |
||||
|
- **nextcloud-redis**: Redis for caching and session management. |
||||
|
- **nextcloud-init**: Initializes the Nextcloud installation. |
||||
|
- **nextcloud-upgrade**: Handles Nextcloud version upgrades. |
||||
|
- **nextcloud-cron**: Scheduled background jobs via timer. |
||||
|
- **nextcloud-collabora**: Optional Collabora Online for document editing. |
||||
|
|
||||
|
This cookbook uses PostgreSQL as the database backend (requires the `postgresql` cookbook). |
||||
|
|
||||
|
## Prerequisites |
||||
|
|
||||
|
- The `postgresql` cookbook must be installed and running. |
||||
|
- Configuration file `/etc/quadlets/nextcloud/config.env` must exist. |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
In a separate terminal, follow the logs. |
||||
|
|
||||
|
```sh |
||||
|
sudo make tail-logs |
||||
|
``` |
||||
|
|
||||
|
Install the Podman Quadlets and start Nextcloud. |
||||
|
|
||||
|
```sh |
||||
|
sudo make clean install |
||||
|
``` |
||||
|
|
||||
|
You should see the services starting in order: |
||||
|
|
||||
|
1. **nextcloud-redis.service** starts the Redis cache. |
||||
|
2. **nextcloud-init.service** initializes Nextcloud if needed. |
||||
|
3. **nextcloud-app.service** starts the PHP application. |
||||
|
4. **nextcloud-nginx.service** starts the web server. |
||||
|
5. **nextcloud-upgrade.service** runs any pending upgrades. |
||||
|
6. **nextcloud-cron.timer** schedules background jobs. |
||||
|
|
||||
|
Access Nextcloud at `http://127.0.0.1/`. |
||||
|
|
||||
|
Restart the **nextcloud.target** unit. |
||||
|
|
||||
|
```sh |
||||
|
sudo systemctl restart nextcloud.target |
||||
|
``` |
||||
|
|
||||
|
To manually run background jobs: |
||||
|
|
||||
|
```sh |
||||
|
sudo systemctl start nextcloud-cron.service |
||||
|
``` |
||||
|
|
||||
|
Finally, remove the quadlets, their configuration and their data. |
||||
|
|
||||
|
```sh |
||||
|
sudo make uninstall clean |
||||
|
``` |
||||
|
|
||||
|
## Integration tests |
||||
|
|
||||
|
```sh |
||||
|
sudo make test |
||||
|
``` |
||||
@ -0,0 +1,63 @@ |
|||||
|
# Podman Quadlet: QEMU User Static |
||||
|
|
||||
|
## Overview |
||||
|
|
||||
|
QEMU User Static provides multi-architecture container support using QEMU user-mode emulation. This allows running containers built for different CPU architectures (e.g., ARM containers on x86_64 hosts). |
||||
|
|
||||
|
This cookbook: |
||||
|
|
||||
|
- Builds a custom container image with QEMU static binaries. |
||||
|
- Registers QEMU interpreters with the kernel's binfmt_misc. |
||||
|
- Includes a timer to periodically rebuild the container image. |
||||
|
- Runs as a privileged one-shot service to register the interpreters. |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
In a separate terminal, follow the logs. |
||||
|
|
||||
|
```sh |
||||
|
sudo make tail-logs |
||||
|
``` |
||||
|
|
||||
|
Install the Podman Quadlets and register the QEMU interpreters. |
||||
|
|
||||
|
```sh |
||||
|
sudo make clean install |
||||
|
``` |
||||
|
|
||||
|
You should see the **qemu-user-static-build.service** building the container image. |
||||
|
Then, the **qemu-user-static.service** registers the QEMU interpreters with the kernel. |
||||
|
|
||||
|
Verify the registration: |
||||
|
|
||||
|
```sh |
||||
|
ls /proc/sys/fs/binfmt_misc/ |
||||
|
``` |
||||
|
|
||||
|
You should see entries for various architectures (e.g., `qemu-aarch64`, `qemu-arm`). |
||||
|
|
||||
|
Test running a container for a different architecture: |
||||
|
|
||||
|
```sh |
||||
|
podman run --rm docker.io/arm64v8/alpine uname -m |
||||
|
``` |
||||
|
|
||||
|
This should output `aarch64` even on an x86_64 host. |
||||
|
|
||||
|
Restart the **qemu-user-static.target** unit. |
||||
|
|
||||
|
```sh |
||||
|
sudo systemctl restart qemu-user-static.target |
||||
|
``` |
||||
|
|
||||
|
Finally, remove the quadlets, their configuration and their data. |
||||
|
|
||||
|
```sh |
||||
|
sudo make uninstall clean |
||||
|
``` |
||||
|
|
||||
|
## Integration tests |
||||
|
|
||||
|
```sh |
||||
|
sudo make test |
||||
|
``` |
||||
@ -0,0 +1,59 @@ |
|||||
|
# Podman Quadlet: Restic Server |
||||
|
|
||||
|
## Overview |
||||
|
|
||||
|
Restic REST Server is a backend server for the restic backup tool, started as a Podman Quadlet. It provides a REST API for storing and retrieving backup data. |
||||
|
|
||||
|
This cookbook: |
||||
|
|
||||
|
- Runs the restic REST server as a rootless container. |
||||
|
- Configures append-only mode for added security (backups can be added but not deleted). |
||||
|
- Enables Prometheus metrics for monitoring. |
||||
|
- Supports private repositories for multi-user setups. |
||||
|
- Stores backup data in `/var/lib/virtiofs/data/restic-server/`. |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
In a separate terminal, follow the logs. |
||||
|
|
||||
|
```sh |
||||
|
sudo make tail-logs |
||||
|
``` |
||||
|
|
||||
|
Install the Podman Quadlets and start the restic REST server. |
||||
|
|
||||
|
```sh |
||||
|
sudo make clean install |
||||
|
``` |
||||
|
|
||||
|
You should see the **restic-server.service** starting up. |
||||
|
|
||||
|
Verify the server is running: |
||||
|
|
||||
|
```sh |
||||
|
curl -sSf http://127.0.0.1:8080/ |
||||
|
``` |
||||
|
|
||||
|
Initialize a new repository (from a restic client): |
||||
|
|
||||
|
```sh |
||||
|
restic -r rest:http://127.0.0.1:8080/myrepo init |
||||
|
``` |
||||
|
|
||||
|
The Prometheus metrics endpoint is available at: |
||||
|
|
||||
|
```sh |
||||
|
curl http://127.0.0.1:8080/metrics |
||||
|
``` |
||||
|
|
||||
|
Finally, remove the quadlets, their configuration and their data. |
||||
|
|
||||
|
```sh |
||||
|
sudo make uninstall clean |
||||
|
``` |
||||
|
|
||||
|
## Integration tests |
||||
|
|
||||
|
```sh |
||||
|
sudo make test |
||||
|
``` |
||||
@ -0,0 +1,70 @@ |
|||||
|
# Podman Quadlet: Samba |
||||
|
|
||||
|
## Overview |
||||
|
|
||||
|
Samba is an SMB/CIFS file sharing server started as a Podman Quadlet. It allows sharing files and directories over the network with Windows, macOS, and Linux clients. |
||||
|
|
||||
|
This cookbook: |
||||
|
|
||||
|
- Builds a custom Samba container image locally. |
||||
|
- Runs Samba with configurable shares via drop-in configuration files. |
||||
|
- Supports user authentication with system users mapped into the container. |
||||
|
- Includes a timer to periodically rebuild the container image. |
||||
|
- Only starts if at least one share configuration file exists. |
||||
|
|
||||
|
## Prerequisites |
||||
|
|
||||
|
- Share configuration files must exist in `/etc/quadlets/samba/smb.conf.d/` with names ending in `shares.conf`. |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
In a separate terminal, follow the logs. |
||||
|
|
||||
|
```sh |
||||
|
sudo make tail-logs |
||||
|
``` |
||||
|
|
||||
|
Install the Podman Quadlets and start Samba. |
||||
|
|
||||
|
```sh |
||||
|
sudo make clean install |
||||
|
``` |
||||
|
|
||||
|
You should see the **samba-build.service** building the Samba container image. |
||||
|
Then, the **samba.service** should start up. |
||||
|
|
||||
|
Verify Samba is running: |
||||
|
|
||||
|
```sh |
||||
|
sudo systemctl status samba.service |
||||
|
``` |
||||
|
|
||||
|
Test connectivity from a client: |
||||
|
|
||||
|
```sh |
||||
|
smbclient -L //localhost -N |
||||
|
``` |
||||
|
|
||||
|
Connect to a share: |
||||
|
|
||||
|
```sh |
||||
|
smbclient //localhost/sharename -U username |
||||
|
``` |
||||
|
|
||||
|
Restart the **samba.target** unit. |
||||
|
|
||||
|
```sh |
||||
|
sudo systemctl restart samba.target |
||||
|
``` |
||||
|
|
||||
|
Finally, remove the quadlets, their configuration and their data. |
||||
|
|
||||
|
```sh |
||||
|
sudo make uninstall clean |
||||
|
``` |
||||
|
|
||||
|
## Integration tests |
||||
|
|
||||
|
```sh |
||||
|
sudo make test |
||||
|
``` |
||||
@ -0,0 +1,75 @@ |
|||||
|
# Podman Quadlet: Seedbox |
||||
|
|
||||
|
## Overview |
||||
|
|
||||
|
The Seedbox cookbook provides a complete media server stack started as Podman Quadlets. It includes all the tools needed for automated media acquisition and streaming. |
||||
|
|
||||
|
This cookbook includes the following services: |
||||
|
|
||||
|
- **qBittorrent**: BitTorrent client for downloading media. |
||||
|
- **Radarr**: Movie collection manager and downloader. |
||||
|
- **Sonarr**: TV series collection manager and downloader. |
||||
|
- **Lidarr**: Music collection manager and downloader. |
||||
|
- **Prowlarr**: Indexer manager for Radarr, Sonarr, and Lidarr. |
||||
|
- **Jellyfin**: Media server for streaming your collection. |
||||
|
- **FlareSolverr**: Proxy server to bypass Cloudflare protection for indexers. |
||||
|
|
||||
|
All services: |
||||
|
|
||||
|
- Run as rootless containers with minimal privileges. |
||||
|
- Share a common storage directory structure. |
||||
|
- Support automatic container image updates via Podman auto-update. |
||||
|
|
||||
|
## Prerequisites |
||||
|
|
||||
|
- Storage must be mounted at `/var/lib/virtiofs/data/`. |
||||
|
- Each service stores its configuration in `/var/lib/virtiofs/data/<service>/config/`. |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
In a separate terminal, follow the logs. |
||||
|
|
||||
|
```sh |
||||
|
sudo make tail-logs |
||||
|
``` |
||||
|
|
||||
|
Install the Podman Quadlets and start the seedbox stack. |
||||
|
|
||||
|
```sh |
||||
|
sudo make clean install |
||||
|
``` |
||||
|
|
||||
|
You should see all services starting up. Access the web interfaces: |
||||
|
|
||||
|
- **qBittorrent**: `http://127.0.0.1:8080/` |
||||
|
- **Radarr**: `http://127.0.0.1:7878/` |
||||
|
- **Sonarr**: `http://127.0.0.1:8989/` |
||||
|
- **Lidarr**: `http://127.0.0.1:8686/` |
||||
|
- **Prowlarr**: `http://127.0.0.1:9696/` |
||||
|
- **Jellyfin**: `http://127.0.0.1:8096/` |
||||
|
- **FlareSolverr**: `http://127.0.0.1:8191/` |
||||
|
|
||||
|
Restart the **seedbox.target** unit. |
||||
|
|
||||
|
```sh |
||||
|
sudo systemctl restart seedbox.target |
||||
|
``` |
||||
|
|
||||
|
To restart individual services: |
||||
|
|
||||
|
```sh |
||||
|
sudo systemctl restart jellyfin.service |
||||
|
sudo systemctl restart qbittorrent.service |
||||
|
``` |
||||
|
|
||||
|
Finally, remove the quadlets, their configuration and their data. |
||||
|
|
||||
|
```sh |
||||
|
sudo make uninstall clean |
||||
|
``` |
||||
|
|
||||
|
## Integration tests |
||||
|
|
||||
|
```sh |
||||
|
sudo make test |
||||
|
``` |
||||
@ -0,0 +1,59 @@ |
|||||
|
# Podman Quadlet: Traefik |
||||
|
|
||||
|
## Overview |
||||
|
|
||||
|
Traefik is a modern HTTP reverse proxy and load balancer started as a Podman Quadlet. It provides automatic service discovery, SSL termination, and routing. |
||||
|
|
||||
|
This cookbook: |
||||
|
|
||||
|
- Runs Traefik as a rootless container with minimal privileges. |
||||
|
- Supports automatic HTTPS with Let's Encrypt integration. |
||||
|
- Includes health checks to monitor the service status. |
||||
|
- Stores configuration in `/etc/quadlets/traefik/` and state in `/var/lib/quadlets/traefik/`. |
||||
|
- Supports automatic container image updates via Podman auto-update. |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
In a separate terminal, follow the logs. |
||||
|
|
||||
|
```sh |
||||
|
sudo make tail-logs |
||||
|
``` |
||||
|
|
||||
|
Install the Podman Quadlets and start Traefik. |
||||
|
|
||||
|
```sh |
||||
|
sudo make clean install |
||||
|
``` |
||||
|
|
||||
|
You should see the **traefik.service** starting up. |
||||
|
|
||||
|
Verify Traefik is running: |
||||
|
|
||||
|
```sh |
||||
|
curl -sSf -H 'Host: ping' http://127.0.0.1/ |
||||
|
``` |
||||
|
|
||||
|
Access the Traefik dashboard (if enabled in configuration): |
||||
|
|
||||
|
```sh |
||||
|
curl http://127.0.0.1:8080/dashboard/ |
||||
|
``` |
||||
|
|
||||
|
Restart the **traefik.target** unit. |
||||
|
|
||||
|
```sh |
||||
|
sudo systemctl restart traefik.target |
||||
|
``` |
||||
|
|
||||
|
Finally, remove the quadlets, their configuration and their data. |
||||
|
|
||||
|
```sh |
||||
|
sudo make uninstall clean |
||||
|
``` |
||||
|
|
||||
|
## Integration tests |
||||
|
|
||||
|
```sh |
||||
|
sudo make test |
||||
|
``` |
||||
@ -0,0 +1,60 @@ |
|||||
|
# Podman Quadlet: Vaultwarden |
||||
|
|
||||
|
## Overview |
||||
|
|
||||
|
Vaultwarden is a Bitwarden-compatible password manager server started as a Podman Quadlet. It provides a self-hosted alternative to the official Bitwarden server, compatible with all Bitwarden clients. |
||||
|
|
||||
|
This cookbook: |
||||
|
|
||||
|
- Runs Vaultwarden as a rootless container with minimal privileges. |
||||
|
- Uses PostgreSQL as the database backend (requires the `postgresql` cookbook). |
||||
|
- Includes health checks to monitor the service status. |
||||
|
- Stores vault data in `/var/lib/virtiofs/data/vaultwarden/`. |
||||
|
- Supports automatic container image updates via Podman auto-update. |
||||
|
|
||||
|
## Prerequisites |
||||
|
|
||||
|
- The `postgresql` cookbook must be installed and running. |
||||
|
- Configuration file `/etc/quadlets/vaultwarden/config.env` must exist. |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
In a separate terminal, follow the logs. |
||||
|
|
||||
|
```sh |
||||
|
sudo make tail-logs |
||||
|
``` |
||||
|
|
||||
|
Install the Podman Quadlets and start Vaultwarden. |
||||
|
|
||||
|
```sh |
||||
|
sudo make clean install |
||||
|
``` |
||||
|
|
||||
|
You should see the **vaultwarden.service** waiting for PostgreSQL to be available, then starting up. |
||||
|
|
||||
|
Verify Vaultwarden is running: |
||||
|
|
||||
|
```sh |
||||
|
curl -sSf http://127.0.0.1:8080/ |
||||
|
``` |
||||
|
|
||||
|
Access the web vault at `http://127.0.0.1:8080/` and configure your Bitwarden clients to use this server. |
||||
|
|
||||
|
Restart the **vaultwarden.target** unit. |
||||
|
|
||||
|
```sh |
||||
|
sudo systemctl restart vaultwarden.target |
||||
|
``` |
||||
|
|
||||
|
Finally, remove the quadlets, their configuration and their data. |
||||
|
|
||||
|
```sh |
||||
|
sudo make uninstall clean |
||||
|
``` |
||||
|
|
||||
|
## Integration tests |
||||
|
|
||||
|
```sh |
||||
|
sudo make test |
||||
|
``` |
||||
@ -0,0 +1,59 @@ |
|||||
|
# Podman Quadlet: vmagent |
||||
|
|
||||
|
## Overview |
||||
|
|
||||
|
vmagent is a Victoria Metrics agent started as a Podman Quadlet. It collects metrics from various sources and forwards them to a Victoria Metrics or Prometheus-compatible remote storage. |
||||
|
|
||||
|
This cookbook: |
||||
|
|
||||
|
- Runs vmagent as a rootless container with minimal privileges. |
||||
|
- Uses environment-based configuration via global and local environment files. |
||||
|
- Stores scraped data temporarily in `/var/lib/quadlets/vmagent/` for reliability. |
||||
|
- Reads scrape configuration from `/etc/quadlets/vmagent/conf.d/`. |
||||
|
- Supports automatic container image updates via Podman auto-update. |
||||
|
|
||||
|
## Prerequisites |
||||
|
|
||||
|
- Configuration file `/etc/quadlets/vmagent/vmagent.local.env` must exist. |
||||
|
- Global configuration in `/etc/quadlets/vmagent/vmagent.global.env`. |
||||
|
- Scrape targets configured in `/etc/quadlets/vmagent/conf.d/`. |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
In a separate terminal, follow the logs. |
||||
|
|
||||
|
```sh |
||||
|
sudo make tail-logs |
||||
|
``` |
||||
|
|
||||
|
Install the Podman Quadlets and start vmagent. |
||||
|
|
||||
|
```sh |
||||
|
sudo make clean install |
||||
|
``` |
||||
|
|
||||
|
You should see the **vmagent.service** starting up and beginning to scrape configured targets. |
||||
|
|
||||
|
Verify vmagent is running: |
||||
|
|
||||
|
```sh |
||||
|
sudo systemctl status vmagent.service |
||||
|
``` |
||||
|
|
||||
|
Check vmagent's own metrics: |
||||
|
|
||||
|
```sh |
||||
|
curl http://127.0.0.1:8429/metrics |
||||
|
``` |
||||
|
|
||||
|
Finally, remove the quadlets, their configuration and their data. |
||||
|
|
||||
|
```sh |
||||
|
sudo make uninstall clean |
||||
|
``` |
||||
|
|
||||
|
## Integration tests |
||||
|
|
||||
|
```sh |
||||
|
sudo make test |
||||
|
``` |
||||
@ -0,0 +1,73 @@ |
|||||
|
# Podman Quadlet: vsftpd |
||||
|
|
||||
|
## Overview |
||||
|
|
||||
|
vsftpd (Very Secure FTP Daemon) is started as a Podman Quadlet. It provides a secure FTP server with TLS support. |
||||
|
|
||||
|
This cookbook: |
||||
|
|
||||
|
- Builds a custom vsftpd container image locally. |
||||
|
- Supports TLS encryption with automatic certificate loading from Let's Encrypt (integrates with the `lego` cookbook). |
||||
|
- Maps system users into the container for authentication. |
||||
|
- Includes a timer to periodically rebuild the container image. |
||||
|
- Reloads certificates automatically when renewed. |
||||
|
|
||||
|
## Prerequisites |
||||
|
|
||||
|
- Configuration file `/etc/quadlets/vsftpd/vsftpd.conf.d/local.conf` must exist. |
||||
|
- For TLS support, the `lego` cookbook should be configured to provide certificates. |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
In a separate terminal, follow the logs. |
||||
|
|
||||
|
```sh |
||||
|
sudo make tail-logs |
||||
|
``` |
||||
|
|
||||
|
Install the Podman Quadlets and start vsftpd. |
||||
|
|
||||
|
```sh |
||||
|
sudo make clean install |
||||
|
``` |
||||
|
|
||||
|
You should see the **vsftpd-build.service** building the vsftpd container image. |
||||
|
Then, the **vsftpd.service** should start up. |
||||
|
|
||||
|
Verify vsftpd is running: |
||||
|
|
||||
|
```sh |
||||
|
sudo systemctl status vsftpd.service |
||||
|
``` |
||||
|
|
||||
|
Test FTP connectivity: |
||||
|
|
||||
|
```sh |
||||
|
ftp localhost |
||||
|
``` |
||||
|
|
||||
|
Or with TLS: |
||||
|
|
||||
|
```sh |
||||
|
lftp -u username localhost |
||||
|
``` |
||||
|
|
||||
|
When Let's Encrypt certificates are renewed, the **vsftpd-load-renewed-certificate.service** automatically reloads them. |
||||
|
|
||||
|
Restart the **vsftpd.target** unit. |
||||
|
|
||||
|
```sh |
||||
|
sudo systemctl restart vsftpd.target |
||||
|
``` |
||||
|
|
||||
|
Finally, remove the quadlets, their configuration and their data. |
||||
|
|
||||
|
```sh |
||||
|
sudo make uninstall clean |
||||
|
``` |
||||
|
|
||||
|
## Integration tests |
||||
|
|
||||
|
```sh |
||||
|
sudo make test |
||||
|
``` |
||||
Loading…
Reference in new issue