gogs.nix 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. # Auto-generated by compose2nix.
  2. { pkgs, lib, config, ... }:
  3. {
  4. # Runtime
  5. virtualisation.podman = {
  6. enable = true;
  7. autoPrune.enable = true;
  8. dockerCompat = true;
  9. };
  10. # Enable container name DNS for all Podman networks.
  11. networking.firewall.interfaces = let
  12. matchAll = if !config.networking.nftables.enable then "podman+" else "podman*";
  13. in {
  14. "${matchAll}".allowedUDPPorts = [ 53 ];
  15. };
  16. virtualisation.oci-containers.backend = "podman";
  17. # Containers
  18. virtualisation.oci-containers.containers."caddy" = {
  19. image = "caddy:latest";
  20. volumes = [
  21. "${pkgs.writeText "Caddyfile" ''
  22. git.johron.no {
  23. tls johanhrong@icloud.com
  24. reverse_proxy gogs:3000
  25. }
  26. ''}:/etc/caddy/Caddyfile:rw"
  27. "gogs_caddy_config:/config:rw"
  28. "gogs_caddy_data:/data:rw"
  29. ];
  30. ports = [
  31. "80:80/tcp"
  32. "443:443/tcp"
  33. ];
  34. dependsOn = [
  35. "gogs"
  36. ];
  37. log-driver = "journald";
  38. extraOptions = [
  39. "--network-alias=caddy"
  40. "--network=gogs_default"
  41. ];
  42. };
  43. systemd.services."podman-caddy" = {
  44. serviceConfig = {
  45. Restart = lib.mkOverride 90 "always";
  46. };
  47. after = [
  48. "podman-network-gogs_default.service"
  49. "podman-volume-gogs_caddy_config.service"
  50. "podman-volume-gogs_caddy_data.service"
  51. ];
  52. requires = [
  53. "podman-network-gogs_default.service"
  54. "podman-volume-gogs_caddy_config.service"
  55. "podman-volume-gogs_caddy_data.service"
  56. ];
  57. partOf = [
  58. "podman-compose-gogs-root.target"
  59. ];
  60. wantedBy = [
  61. "podman-compose-gogs-root.target"
  62. ];
  63. };
  64. virtualisation.oci-containers.containers."gogs" = {
  65. image = "gogs/gogs:latest";
  66. volumes = [
  67. "/opt/docker/gogs/data:/data:rw"
  68. ];
  69. ports = [
  70. "3000:3000/tcp"
  71. "22:22/tcp"
  72. ];
  73. log-driver = "journald";
  74. extraOptions = [
  75. "--network-alias=gogs"
  76. "--network=gogs_default"
  77. ];
  78. };
  79. systemd.services."podman-gogs" = {
  80. serviceConfig = {
  81. Restart = lib.mkOverride 90 "always";
  82. };
  83. after = [
  84. "podman-network-gogs_default.service"
  85. ];
  86. requires = [
  87. "podman-network-gogs_default.service"
  88. ];
  89. partOf = [
  90. "podman-compose-gogs-root.target"
  91. ];
  92. wantedBy = [
  93. "podman-compose-gogs-root.target"
  94. ];
  95. };
  96. # Networks
  97. systemd.services."podman-network-gogs_default" = {
  98. path = [ pkgs.podman ];
  99. serviceConfig = {
  100. Type = "oneshot";
  101. RemainAfterExit = true;
  102. ExecStop = "podman network rm -f gogs_default";
  103. };
  104. script = ''
  105. podman network inspect gogs_default || podman network create gogs_default
  106. '';
  107. partOf = [ "podman-compose-gogs-root.target" ];
  108. wantedBy = [ "podman-compose-gogs-root.target" ];
  109. };
  110. # Volumes
  111. systemd.services."podman-volume-gogs_caddy_config" = {
  112. path = [ pkgs.podman ];
  113. serviceConfig = {
  114. Type = "oneshot";
  115. RemainAfterExit = true;
  116. };
  117. script = ''
  118. podman volume inspect gogs_caddy_config || podman volume create gogs_caddy_config
  119. '';
  120. partOf = [ "podman-compose-gogs-root.target" ];
  121. wantedBy = [ "podman-compose-gogs-root.target" ];
  122. };
  123. systemd.services."podman-volume-gogs_caddy_data" = {
  124. path = [ pkgs.podman ];
  125. serviceConfig = {
  126. Type = "oneshot";
  127. RemainAfterExit = true;
  128. };
  129. script = ''
  130. podman volume inspect gogs_caddy_data || podman volume create gogs_caddy_data
  131. '';
  132. partOf = [ "podman-compose-gogs-root.target" ];
  133. wantedBy = [ "podman-compose-gogs-root.target" ];
  134. };
  135. # Root service
  136. # When started, this will automatically create all resources and start
  137. # the containers. When stopped, this will teardown all resources.
  138. systemd.targets."podman-compose-gogs-root" = {
  139. unitConfig = {
  140. Description = "Root target generated by compose2nix.";
  141. };
  142. wantedBy = [ "multi-user.target" ];
  143. };
  144. }