blob: 939e9becabfe0a71e05527c1bc1c02af432d39c3 (
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
|
{ pkgs, unstablePkgs, auxiliaryPkgs, ... }:
let
inherit (pkgs) dockerTools;
inherit (auxiliaryPkgs) common;
inherit (unstablePkgs) fedifetcher;
akkomaLocalPort = 1111;
akkomaDir = "/srv/akkoma";
akkoma = unstablePkgs.akkoma.overrideAttrs {
patches = [ ./docker-entrypoint.patch ];
postInstall = ''
cp docker-entrypoint.sh $out/docker-entrypoint.sh
'';
};
akkomaImage = dockerTools.streamLayeredImage {
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
'';
};
fedifetcherScript = pkgs.writeShellScriptBin "fedifetcher-script.sh" ''
fedifetcher -c /etc/fedifetcher/config.json &>> /var/log/fedifetcher.log
'';
fedifetcherCron = pkgs.writeText "fedifetcher-cron" ''
0 */3 * * * /bin/fedifetcher-script.sh
'';
fedifetcherEntry = pkgs.writeShellScriptBin "fedifetcher-entry.sh" ''
crond -b -l 0 -L /var/log/crond.log
touch /var/log/fedifetcher.log
tail -f /var/log/fedifetcher.log
'';
fedifetcherImage = dockerTools.streamLayeredImage {
name = "fedifetcher";
tag = fedifetcher.version;
fromImage = common.alpine.base;
contents = [ pkgs.bash fedifetcher fedifetcherEntry fedifetcherScript ];
extraCommands = ''
mkdir -p etc/crontabs
cat ${fedifetcherCron} > etc/crontabs/root
'';
};
in
{
foundation.service.akkoma = {
akkoma = {
image = akkomaImage;
ports = [ [ 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}";
};
db = {
fullImage = common.postgres14;
volumes = [ [ "${akkomaDir}/pgdata" "/var/lib/postgresql/data" ] ];
environment = {
"POSTGRES_DB" = "akkoma";
"POSTGRES_USER" = "akkoma";
"POSTGRES_PASSWORD" = "akkoma";
};
};
fedifetcher = {
image = fedifetcherImage;
volumes = [
[ "${akkomaDir}/fedifetcher" "/opt/fedifetcher" ]
[ "${akkomaDir}/fedifetcher.json" "/etc/fedifetcher/config.json" ]
];
entrypoint = "/bin/fedifetcher-entry.sh";
};
};
}
|