diff options
| author | Mel <einebeere@gmail.com> | 2024-11-14 04:08:53 +0100 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2024-11-14 04:08:53 +0100 |
| commit | d48e145294d938b5c9ae6c6f690fef1aeaad5c29 (patch) | |
| tree | a96ed181411df8d2f9dffd7428d5323e5e6fee1e | |
| parent | 0b4cd202dbb96ac949891247bbc2c8b1bb654db3 (diff) | |
| download | network-d48e145294d938b5c9ae6c6f690fef1aeaad5c29.tar.zst network-d48e145294d938b5c9ae6c6f690fef1aeaad5c29.zip | |
Akkoma service configuration
Signed-off-by: Mel <einebeere@gmail.com>
| -rw-r--r-- | machines/lapin/default.nix | 2 | ||||
| -rw-r--r-- | services/akkoma/default.nix | 133 | ||||
| -rw-r--r-- | services/akkoma/docker-entrypoint.patch | 12 |
3 files changed, 147 insertions, 0 deletions
diff --git a/machines/lapin/default.nix b/machines/lapin/default.nix index 2047cba..e32d109 100644 --- a/machines/lapin/default.nix +++ b/machines/lapin/default.nix @@ -8,6 +8,8 @@ ./devices.nix ../../modules/www.nix + + ../../services/akkoma ]; services.nginx.virtualHosts = { diff --git a/services/akkoma/default.nix b/services/akkoma/default.nix new file mode 100644 index 0000000..84c1bff --- /dev/null +++ b/services/akkoma/default.nix @@ -0,0 +1,133 @@ +{ lib, pkgs, unstablePkgs, ... }: + +let + inherit (pkgs) dockerTools; + + akkomaLocalPort = "1111"; + akkomaDir = "/srv/akkoma"; + + akkoma = unstablePkgs.akkoma.overrideAttrs { + patches = [ ./docker-entrypoint.patch ]; + postInstall = '' + cp docker-entrypoint.sh $out/docker-entrypoint.sh + ''; + }; + + baseImageArm = dockerTools.pullImage { + imageName = "alpine"; + imageDigest = "sha256:1e42bbe2508154c9126d48c2b8a75420c3544343bf86fd041fb7527e017a4b4a"; + sha256 = "06c0q5kk60i89y1d83a28wk282ymp806xjcsmlca4cwwqp590j0q"; + finalImageName = "alpine"; + finalImageTag = "3.20.3"; + os = "linux"; + arch = "arm64"; + }; + + akkomaImage = dockerTools.buildLayeredImage { + name = "akkoma"; + tag = akkoma.version; + fromImage = baseImageArm; + + contents = with unstablePkgs; [ + exiftool imagemagick ffmpeg_7-headless postgresql elixir + ] ++ [ akkoma ]; + + extraCommands = '' + mkdir -p opt/akkoma + ''; + }; + +in +{ + virtualisation.oci-containers.containers = { + akkoma = { + imageFile = akkomaImage; + image = "akkoma:${akkoma.version}"; + ports = [ "127.0.0.1:${akkomaLocalPort}:4000"]; + + volumes = [ + "${akkomaDir}/data:/var/lib/akkoma" + "${akkomaDir}/config:/opt/akkoma/config" + ]; + + # TODO: remove redundant variables + environment = { + "RUNTIME_DIRECTORY" = "/opt/akkoma"; + "AKKOMA_CONFIG_PATH" = "/opt/akkoma/config/config.exs"; + "RELEASE_COOKIE" = "99ff9ca022574585269e737cdc4fa28b"; + "RELEASE_NAME" = "akkoma"; + "MIX_ENV" = "prod"; + "DB_NAME" = "akkoma"; + "DB_USER" = "akkoma"; + "DB_PASS" = "akkoma"; + "DB_HOST" = "db"; + }; + + entrypoint = "${akkoma}/docker-entrypoint.sh"; + workdir = "${akkoma}"; + + extraOptions = [ + "--network-alias=akkoma" + "--network=akkoma" + ]; + }; + + akkoma-db = { + # TODO: pull through `dockerTools`. + image = "postgres:14-alpine"; + volumes = [ "${akkomaDir}/pgdata:/var/lib/postgresql/data" ]; + + environment = { + "POSTGRES_DB" = "akkoma"; + "POSTGRES_USER" = "akkoma"; + "POSTGRES_PASSWORD" = "akkoma"; + }; + + extraOptions = [ + "--network-alias=db" + "--network=akkoma" + ]; + }; + }; + + # systemd configuration to combine containers. + # mostly condensed from compose2nix output. + # TODO: make this automatic!! + systemd = let + root = "docker-akkoma-root"; + network = "docker-akkoma-network"; + + containerService = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + RestartMaxDelaySec = lib.mkOverride 90 "1m"; + RestartSec = lib.mkOverride 90 "100ms"; + RestartSteps = lib.mkOverride 90 9; + }; + after = [ "${network}.service" ]; requires = [ "${network}.service" ]; + partOf = [ "${root}.target" ]; wantedBy = [ "${root}.target" ]; + }; + in { + services = { + "docker-akkoma-db" = containerService; + "docker-akkoma" = containerService; + + "${network}" = { + path = [ pkgs.docker ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + ExecStop = "docker network rm -f akkoma"; + }; + script = '' + docker network inspect akkoma || docker network create akkoma --driver=bridge + ''; + partOf = [ "${root}.target" ]; wantedBy = [ "${root}.target" ]; + }; + }; + + targets = { + "${root}" = { wantedBy = [ "multi-user.target" ]; }; + }; + }; +} diff --git a/services/akkoma/docker-entrypoint.patch b/services/akkoma/docker-entrypoint.patch new file mode 100644 index 0000000..bf84008 --- /dev/null +++ b/services/akkoma/docker-entrypoint.patch @@ -0,0 +1,12 @@ +--- a/docker-entrypoint.sh 2023-10-02 00:12:00.075281627 +0000 ++++ b/docker-entrypoint.sh 2023-10-02 00:06:36.989085305 +0000 +@@ -8,7 +8,7 @@ + done + + echo "-- Running migrations..." +-mix ecto.migrate ++/bin/pleroma_ctl migrate + + echo "-- Starting!" +-mix phx.server ++/bin/pleroma start |
