blob: 4cd402270f8d0379ca8ab7e140f227436b99a276 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
{ lib, pkgs, unstablePkgs, auxiliaryPkgs, ... }:
let
inherit (pkgs) dockerTools;
inherit (auxiliaryPkgs) common;
akkomaLocalPort = "1111";
akkomaDir = "/srv/akkoma";
akkoma = unstablePkgs.akkoma.overrideAttrs {
patches = [ ./docker-entrypoint.patch ];
postInstall = ''
cp docker-entrypoint.sh $out/docker-entrypoint.sh
'';
};
akkomaImage = dockerTools.buildLayeredImage {
name = "akkoma";
tag = akkoma.version;
fromImage = common.alpine.base;
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 = {
inherit (common.postgres14) image imageFile;
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" ]; };
};
};
}
|