at master 3.8 kB view raw
1{ lib, ... }: 2 3let 4 db-pass = "Test2Test2"; 5 app-key = "TestTestTestTestTestTestTestTest"; 6in 7{ 8 name = "firefly-iii"; 9 meta = { 10 maintainers = [ lib.maintainers.savyajha ]; 11 platforms = lib.platforms.linux; 12 }; 13 14 nodes.fireflySqlite = 15 { config, ... }: 16 { 17 environment.etc = { 18 "firefly-iii-appkey".text = app-key; 19 }; 20 services.firefly-iii = { 21 enable = true; 22 enableNginx = true; 23 settings = { 24 APP_KEY_FILE = "/etc/firefly-iii-appkey"; 25 LOG_CHANNEL = "stdout"; 26 SITE_OWNER = "mail@example.com"; 27 }; 28 }; 29 }; 30 31 nodes.fireflyPostgresql = 32 { config, pkgs, ... }: 33 { 34 environment.etc = { 35 "firefly-iii-appkey".text = app-key; 36 "postgres-pass".text = db-pass; 37 }; 38 services.firefly-iii = { 39 enable = true; 40 enableNginx = true; 41 settings = { 42 APP_KEY_FILE = "/etc/firefly-iii-appkey"; 43 LOG_CHANNEL = "stdout"; 44 SITE_OWNER = "mail@example.com"; 45 DB_CONNECTION = "pgsql"; 46 DB_DATABASE = "firefly"; 47 DB_USERNAME = "firefly"; 48 DB_PASSWORD_FILE = "/etc/postgres-pass"; 49 PGSQL_SCHEMA = "firefly"; 50 }; 51 }; 52 53 services.postgresql = { 54 enable = true; 55 package = pkgs.postgresql_16; 56 authentication = '' 57 local all postgres peer 58 local firefly firefly password 59 ''; 60 initialScript = pkgs.writeText "firefly-init.sql" '' 61 CREATE USER "firefly" WITH LOGIN PASSWORD '${db-pass}'; 62 CREATE DATABASE "firefly" WITH OWNER "firefly"; 63 \c firefly 64 CREATE SCHEMA AUTHORIZATION firefly; 65 ''; 66 }; 67 }; 68 69 nodes.fireflyMysql = 70 { config, pkgs, ... }: 71 { 72 environment.etc = { 73 "firefly-iii-appkey".text = app-key; 74 "mysql-pass".text = db-pass; 75 }; 76 services.firefly-iii = { 77 enable = true; 78 enableNginx = true; 79 settings = { 80 APP_KEY_FILE = "/etc/firefly-iii-appkey"; 81 LOG_CHANNEL = "stdout"; 82 SITE_OWNER = "mail@example.com"; 83 DB_CONNECTION = "mysql"; 84 DB_DATABASE = "firefly"; 85 DB_USERNAME = "firefly"; 86 DB_PASSWORD_FILE = "/etc/mysql-pass"; 87 DB_SOCKET = "/run/mysqld/mysqld.sock"; 88 }; 89 }; 90 91 services.mysql = { 92 enable = true; 93 package = pkgs.mariadb; 94 initialScript = pkgs.writeText "firefly-init.sql" '' 95 create database firefly DEFAULT CHARACTER SET utf8mb4; 96 create user 'firefly'@'localhost' identified by '${db-pass}'; 97 grant all on firefly.* to 'firefly'@'localhost'; 98 ''; 99 settings.mysqld.character-set-server = "utf8mb4"; 100 }; 101 }; 102 103 testScript = '' 104 fireflySqlite.wait_for_unit("phpfpm-firefly-iii.service") 105 fireflySqlite.wait_for_unit("nginx.service") 106 fireflySqlite.succeed("curl -fvvv -Ls http://localhost/ | grep 'Firefly III'") 107 fireflySqlite.succeed("curl -fvvv -Ls http://localhost/v1/js/app.js") 108 fireflySqlite.succeed("systemctl start firefly-iii-cron.service") 109 fireflyPostgresql.wait_for_unit("phpfpm-firefly-iii.service") 110 fireflyPostgresql.wait_for_unit("nginx.service") 111 fireflyPostgresql.wait_for_unit("postgresql.target") 112 fireflyPostgresql.succeed("curl -fvvv -Ls http://localhost/ | grep 'Firefly III'") 113 fireflyPostgresql.succeed("systemctl start firefly-iii-cron.service") 114 fireflyMysql.wait_for_unit("phpfpm-firefly-iii.service") 115 fireflyMysql.wait_for_unit("nginx.service") 116 fireflyMysql.wait_for_unit("mysql.service") 117 fireflyMysql.succeed("curl -fvvv -Ls http://localhost/ | grep 'Firefly III'") 118 fireflyMysql.succeed("systemctl start firefly-iii-cron.service") 119 ''; 120}