0
0
Fork 0
mirror of https://github.com/NixOS/nixpkgs.git synced 2025-07-14 14:10:33 +03:00
nixpkgs/nixos/tests/firefly-iii.nix
Wolfgang Walther 41c5662cbe
nixos/postgresql: move postStart into separate unit
This avoids restarting the postgresql server, when only ensureDatabases
or ensureUsers have been changed. It will also allow to properly wait
for recovery to finish later.

To wait for "postgresql is ready" in other services, we now provide a
postgresql.target.

Resolves #400018

Co-authored-by: Marcel <me@m4rc3l.de>
2025-06-24 15:26:47 +02:00

117 lines
3.7 KiB
Nix

{ lib, ... }:
let
db-pass = "Test2Test2";
app-key = "TestTestTestTestTestTestTestTest";
in
{
name = "firefly-iii";
meta.maintainers = [ lib.maintainers.savyajha ];
nodes.fireflySqlite =
{ config, ... }:
{
environment.etc = {
"firefly-iii-appkey".text = app-key;
};
services.firefly-iii = {
enable = true;
enableNginx = true;
settings = {
APP_KEY_FILE = "/etc/firefly-iii-appkey";
LOG_CHANNEL = "stdout";
SITE_OWNER = "mail@example.com";
};
};
};
nodes.fireflyPostgresql =
{ config, pkgs, ... }:
{
environment.etc = {
"firefly-iii-appkey".text = app-key;
"postgres-pass".text = db-pass;
};
services.firefly-iii = {
enable = true;
enableNginx = true;
settings = {
APP_KEY_FILE = "/etc/firefly-iii-appkey";
LOG_CHANNEL = "stdout";
SITE_OWNER = "mail@example.com";
DB_CONNECTION = "pgsql";
DB_DATABASE = "firefly";
DB_USERNAME = "firefly";
DB_PASSWORD_FILE = "/etc/postgres-pass";
PGSQL_SCHEMA = "firefly";
};
};
services.postgresql = {
enable = true;
package = pkgs.postgresql_16;
authentication = ''
local all postgres peer
local firefly firefly password
'';
initialScript = pkgs.writeText "firefly-init.sql" ''
CREATE USER "firefly" WITH LOGIN PASSWORD '${db-pass}';
CREATE DATABASE "firefly" WITH OWNER "firefly";
\c firefly
CREATE SCHEMA AUTHORIZATION firefly;
'';
};
};
nodes.fireflyMysql =
{ config, pkgs, ... }:
{
environment.etc = {
"firefly-iii-appkey".text = app-key;
"mysql-pass".text = db-pass;
};
services.firefly-iii = {
enable = true;
enableNginx = true;
settings = {
APP_KEY_FILE = "/etc/firefly-iii-appkey";
LOG_CHANNEL = "stdout";
SITE_OWNER = "mail@example.com";
DB_CONNECTION = "mysql";
DB_DATABASE = "firefly";
DB_USERNAME = "firefly";
DB_PASSWORD_FILE = "/etc/mysql-pass";
DB_SOCKET = "/run/mysqld/mysqld.sock";
};
};
services.mysql = {
enable = true;
package = pkgs.mariadb;
initialScript = pkgs.writeText "firefly-init.sql" ''
create database firefly DEFAULT CHARACTER SET utf8mb4;
create user 'firefly'@'localhost' identified by '${db-pass}';
grant all on firefly.* to 'firefly'@'localhost';
'';
settings.mysqld.character-set-server = "utf8mb4";
};
};
testScript = ''
fireflySqlite.wait_for_unit("phpfpm-firefly-iii.service")
fireflySqlite.wait_for_unit("nginx.service")
fireflySqlite.succeed("curl -fvvv -Ls http://localhost/ | grep 'Firefly III'")
fireflySqlite.succeed("curl -fvvv -Ls http://localhost/v1/js/app.js")
fireflySqlite.succeed("systemctl start firefly-iii-cron.service")
fireflyPostgresql.wait_for_unit("phpfpm-firefly-iii.service")
fireflyPostgresql.wait_for_unit("nginx.service")
fireflyPostgresql.wait_for_unit("postgresql.target")
fireflyPostgresql.succeed("curl -fvvv -Ls http://localhost/ | grep 'Firefly III'")
fireflyPostgresql.succeed("systemctl start firefly-iii-cron.service")
fireflyMysql.wait_for_unit("phpfpm-firefly-iii.service")
fireflyMysql.wait_for_unit("nginx.service")
fireflyMysql.wait_for_unit("mysql.service")
fireflyMysql.succeed("curl -fvvv -Ls http://localhost/ | grep 'Firefly III'")
fireflyMysql.succeed("systemctl start firefly-iii-cron.service")
'';
}