|
|
@@ -0,0 +1,152 @@
|
|
|
+# 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 = [
|
|
|
+ "/home/johron/Downloads/tmp/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" ];
|
|
|
+ };
|
|
|
+}
|