You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
2 weeks ago | |
|---|---|---|
| base | 2 weeks ago | |
| gitea | 2 weeks ago | |
| keycloak | 2 weeks ago | |
| lego | 2 weeks ago | |
| miniflux | 2 weeks ago | |
| nextcloud | 2 weeks ago | |
| nginx | 3 weeks ago | |
| postgresql | 3 weeks ago | |
| qemu-user-static | 2 weeks ago | |
| restic-server | 2 weeks ago | |
| samba | 2 weeks ago | |
| seedbox | 2 weeks ago | |
| traefik | 2 weeks ago | |
| vaultwarden | 2 weeks ago | |
| vmagent | 2 weeks ago | |
| vsftpd | 2 weeks ago | |
| .gitignore | 4 weeks ago | |
| CLAUDE.md | 2 weeks ago | |
| Makefile | 4 weeks ago | |
| README.md | 2 weeks ago | |
| butane.blocklist | 4 weeks ago | |
| common.mk | 2 weeks ago | |
| default-butane-spec.sh | 3 weeks ago | |
| generate-butane-spec.sh | 4 weeks ago | |
| local.bu.template | 3 weeks ago | |
README.md
Podman Quadlet Cookbook
Podman Quadlets are awesome, but vastly under-utilized in the Open Source communities. This repository gathers all the recipes (hence the name "Cookbook") to deploy Open Source technologies using Podman Quadlets.
Architecture guidelines
- SELinux is enabled by default. Privileged containers are avoided whenever possible.
- Each cookbook runs as a dedicated Linux user, either directly with
--user=or through user namespaces and UID/GID mapping. - Persistent data are stored in
/var/lib/quadlets/$(PROJECT_NAME). Precious data are stored in/var/lib/virtiofs/data/$(PROJECT_NAME). - Configuration is stored in
/etc/quadlets/$(PROJECT_NAME). - Each Systemd unit / Podman Quadlet perform only one task. Especially, the one-off initialization procedures, upgrade processes, etc. are run as separate units.
- Cookbooks are designed to be composable. If you need to deploy a software that needs PostgreSQL as database and a reverse proxy in front, just add the
postgresqlandtraefikcookbooks as dependencies!
Available Cookbooks
- base: base configuration for Fedora CoreOS with fastfetch, tmpfiles setup, and QEMU guest agent.
- gitea: self-hosted Git service, a lightweight GitHub/GitLab alternative.
- keycloak: open source identity and access management server with PostgreSQL backend.
- lego: Let's Encrypt/ACME client for automatic SSL/TLS certificate management and renewal.
- miniflux: minimalist RSS/Atom feed reader with PostgreSQL backend.
- nextcloud: self-hosted file sync and share platform with all its dependencies, handles automated upgrades.
- nginx: Nginx web server with content initialized and updated from a GIT repository.
- postgresql: PostgreSQL database server with automated major upgrades, periodic backup and restore capabilities.
- qemu-user-static: multi-architecture container support using QEMU user-mode emulation.
- restic-server: REST server backend for restic backups with append-only mode and Prometheus metrics.
- samba: SMB/CIFS file sharing server for network storage access.
- seedbox: complete media server stack with Radarr, Sonarr, Lidarr, Prowlarr, qBittorrent, Jellyfin, and FlareSolverr.
- traefik: modern HTTP reverse proxy and load balancer with automatic service discovery.
- vaultwarden: Bitwarden-compatible password manager server with PostgreSQL backend.
- vmagent: Victoria Metrics agent for collecting and forwarding metrics.
- vsftpd: secure FTP server with TLS support and Let's Encrypt certificate integration.
Cookbook layout
Makefile: Cookbook's Makefile. Includes../common.mk. (REQUIRED)overlay.bu: Fedora CoreOS Butane Specifications to include in the generated Ignition files. (OPTIONAL)fcos.bu: The Fedora CoreOS Butane Specifications to build the test FCOS Virtual Machine. (OPTIONAL)config/*: Cookbook's configuration files (read-only). Goes into/etc/quadlets/$(PROJECT_NAME).config/examples/*: Cookbook configuration files (sample configuration, to be overwritten for each deployment). Goes into/etc/quadlets/$(PROJECT_NAME).config/examples/*.env: Systemd environment files, potentially containing secrets (to be overwritten for each deployment). Goes into/etc/quadlets/$(PROJECT_NAME).sysctl.d/*.conf: Sysctl settings. Goes into/etc/sysctl.d.sysctl.d/examples/*.conf: Sysctl settings (to be overwritten for each deployment). Goes into/etc/sysctl.d.tmpfiles.d/*.conf: systemd-tmpfiles.d settings. Goes into/etc/tmpfiles.d.tmpfiles.d/examples/*.conf: systemd-tmpfiles.d settings (to be overwritten for each deployment). Goes into/etc/tmpfiles.d.profile.d/*.conf: Bash profile settings. Goes into/etc/profile.d.profile.d/examples/*.conf: Bash profile settings (to be overwritten for each deployment). Goes into/etc/profile.d.other/$(DEPENDENCY)/*: Sample configuration files to inject into the Cookbook dependencies. For example,other/postgresql/nextcloud.sqlgoes into/etc/quadlets/postgresql/init.d/nextcloud.sql. This behavior is described in thehooks.mk.hooks.mk: the Makefile that registers rules to copy cookbook configuration files when used as a dependency.
Pre-requisites
- Fedora / CentOS Stream / RHEL or derivative operating system.
- Systemd
Development
To develop Podman Quadlets, it is advised to create a Fedora Virtual Machine dedicated to this task.
You can create a Fedora Virtual Machine with the following commands:
TODO
Dependencies to install in the VM:
dnf install -y make systemd procps-ng @virtualization qemu-img virt-install coreos-installer xterm-resize butane yq podlet
License
MIT