| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- # Auto-generated by compose2nix.
- { pkgs, lib, config, ... }:
- {
- # Runtime
- virtualisation.podman = {
- enable = true;
- autoPrune.enable = true;
- dockerCompat = true;
- };
- # Enable container name DNS for all Podman networks.
- networking.firewall.interfaces = let
- matchAll = if !config.networking.nftables.enable then "podman+" else "podman*";
- in {
- "${matchAll}".allowedUDPPorts = [ 53 ];
- };
- virtualisation.oci-containers.backend = "podman";
- # Containers
- virtualisation.oci-containers.containers."caddy" = {
- image = "caddy:latest";
- volumes = [
- "${pkgs.writeText "Caddyfile" ''
- git.johron.no {
- tls johanhrong@icloud.com
- reverse_proxy gogs:3000
- }
- ''}:/etc/caddy/Caddyfile:rw"
- "gogs_caddy_config:/config:rw"
- "gogs_caddy_data:/data:rw"
- ];
- ports = [
- "80:80/tcp"
- "443:443/tcp"
- ];
- dependsOn = [
- "gogs"
- ];
- log-driver = "journald";
- extraOptions = [
- "--network-alias=caddy"
- "--network=gogs_default"
- ];
- };
- systemd.services."podman-caddy" = {
- serviceConfig = {
- Restart = lib.mkOverride 90 "always";
- };
- after = [
- "podman-network-gogs_default.service"
- "podman-volume-gogs_caddy_config.service"
- "podman-volume-gogs_caddy_data.service"
- ];
- requires = [
- "podman-network-gogs_default.service"
- "podman-volume-gogs_caddy_config.service"
- "podman-volume-gogs_caddy_data.service"
- ];
- partOf = [
- "podman-compose-gogs-root.target"
- ];
- wantedBy = [
- "podman-compose-gogs-root.target"
- ];
- };
- virtualisation.oci-containers.containers."gogs" = {
- image = "gogs/gogs:latest";
- volumes = [
- "/opt/docker/gogs/data:/data:rw"
- ];
- ports = [
- "3000:3000/tcp"
- "22:22/tcp"
- ];
- log-driver = "journald";
- extraOptions = [
- "--network-alias=gogs"
- "--network=gogs_default"
- ];
- };
- systemd.services."podman-gogs" = {
- serviceConfig = {
- Restart = lib.mkOverride 90 "always";
- };
- after = [
- "podman-network-gogs_default.service"
- ];
- requires = [
- "podman-network-gogs_default.service"
- ];
- partOf = [
- "podman-compose-gogs-root.target"
- ];
- wantedBy = [
- "podman-compose-gogs-root.target"
- ];
- };
- # Networks
- systemd.services."podman-network-gogs_default" = {
- path = [ pkgs.podman ];
- serviceConfig = {
- Type = "oneshot";
- RemainAfterExit = true;
- ExecStop = "podman network rm -f gogs_default";
- };
- script = ''
- podman network inspect gogs_default || podman network create gogs_default
- '';
- partOf = [ "podman-compose-gogs-root.target" ];
- wantedBy = [ "podman-compose-gogs-root.target" ];
- };
- # Volumes
- systemd.services."podman-volume-gogs_caddy_config" = {
- path = [ pkgs.podman ];
- serviceConfig = {
- Type = "oneshot";
- RemainAfterExit = true;
- };
- script = ''
- podman volume inspect gogs_caddy_config || podman volume create gogs_caddy_config
- '';
- partOf = [ "podman-compose-gogs-root.target" ];
- wantedBy = [ "podman-compose-gogs-root.target" ];
- };
- systemd.services."podman-volume-gogs_caddy_data" = {
- path = [ pkgs.podman ];
- serviceConfig = {
- Type = "oneshot";
- RemainAfterExit = true;
- };
- script = ''
- podman volume inspect gogs_caddy_data || podman volume create gogs_caddy_data
- '';
- partOf = [ "podman-compose-gogs-root.target" ];
- wantedBy = [ "podman-compose-gogs-root.target" ];
- };
- # Root service
- # When started, this will automatically create all resources and start
- # the containers. When stopped, this will teardown all resources.
- systemd.targets."podman-compose-gogs-root" = {
- unitConfig = {
- Description = "Root target generated by compose2nix.";
- };
- wantedBy = [ "multi-user.target" ];
- };
- }
|