1{
2 config,
3 self,
4 ...
5}:
6let
7 dataDir = "/var/lib/planka";
8 d = self.lib.data.services.planka;
9in
10{
11 virtualisation.oci-containers.containers = {
12 planka-server = {
13 image = "ghcr.io/plankanban/planka:2.0.0-rc.4";
14 ports = [ "${toString d.port}:1337" ];
15 environment = {
16 BASE_URL = "https://${d.extUrl}";
17 DATABASE_URL = "postgresql://planka@planka-db/planka";
18 # Default Admin
19 DEFAULT_ADMIN_EMAIL = "pyrox@pyrox.dev";
20 DEFAULT_ADMIN_USERNAME = "pyrox";
21 TRUST_PROXY = "true";
22 DEFAULT_LANGUAGE = "en-US";
23 };
24 environmentFiles = [ config.age.secrets.planka-env.path ];
25 volumes = [
26 "${dataDir}/user-avatars:/app/public/user-avatars"
27 "${dataDir}/project-background-images:/app/public/project-background-images"
28 "${dataDir}/attachments:/app/private/attachments"
29 "${dataDir}/favicons:/app/public/favicons"
30 "${dataDir}/background-images:/app/public/background-images"
31 ];
32 extraOptions = [ "--network=planka" ];
33 };
34 planka-db = {
35 image = "postgres:16-alpine";
36 volumes = [ "${dataDir}/db:/var/lib/postgresql/data" ];
37 environment = {
38 POSTGRES_USER = "planka";
39 POSTGRES_DB = "planka";
40 POSTGRES_HOST_AUTH_METHOD = "trust";
41 };
42 extraOptions = [ "--network=planka" ];
43 };
44 };
45 age.secrets.planka-env = {
46 file = ./secrets/planka-env.age;
47 owner = "thehedgehog";
48 group = "misc";
49 };
50 services.anubis.instances.planka = {
51 settings = {
52 COOKIE_DOMAIN = ".cs2a.club";
53 BIND = ":${toString d.anubis}";
54 TARGET = "http://localhost:${toString d.port}";
55 };
56 };
57}