Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions nixos/modules/module-list.nix
Original file line number Diff line number Diff line change
Expand Up @@ -813,6 +813,7 @@
./services/web-apps/restya-board.nix
./services/web-apps/tt-rss.nix
./services/web-apps/trac.nix
./services/web-apps/trilium.nix
./services/web-apps/selfoss.nix
./services/web-apps/shiori.nix
./services/web-apps/virtlyst.nix
Expand Down
137 changes: 137 additions & 0 deletions nixos/modules/services/web-apps/trilium.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
{ config, lib, pkgs, ... }:

let
cfg = config.services.trilium-server;
configIni = pkgs.writeText "trilium-config.ini" ''
[General]
# Instance name can be used to distinguish between different instances
instanceName=${cfg.instanceName}

# Disable automatically generating desktop icon
noDesktopIcon=true

[Network]
# host setting is relevant only for web deployments - set the host on which the server will listen
host=${cfg.host}
# port setting is relevant only for web deployments, desktop builds run on random free port
port=${toString cfg.port}
# true for TLS/SSL/HTTPS (secure), false for HTTP (unsecure).
https=false
'';
in
{

options.services.trilium-server = with lib; {
enable = mkEnableOption "trilium-server";

dataDir = mkOption {
type = types.str;
default = "/var/lib/trilium";
description = ''
The directory storing the nodes database and the configuration.
'';
};

instanceName = mkOption {
type = types.str;
default = "Trilium";
description = ''
Instance name used to distinguish between different instances
'';
};

host = mkOption {
type = types.str;
default = "127.0.0.1";
description = ''
The host address to bind to (defaults to localhost).
'';
};

port = mkOption {
type = types.int;
default = 8080;
description = ''
The port number to bind to.
'';
};

nginx = mkOption {
default = {};
description = ''
Configuration for nginx reverse proxy.
'';

type = types.submodule {
options = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Configure the nginx reverse proxy settings.
'';
};

hostName = mkOption {
type = types.str;
description = ''
The hostname use to setup the virtualhost configuration
'';
};
};
};
};
};

config = lib.mkIf cfg.enable (lib.mkMerge [
{
meta.maintainers = with lib.maintainers; [ kampka ];

users.groups.trilium = {};
users.users.trilium = {
description = "Trilium User";
group = "trilium";
home = cfg.dataDir;
isSystemUser = true;
};

systemd.services.trilium-server = {
wantedBy = [ "multi-user.target" ];
environment.TRILIUM_DATA_DIR = cfg.dataDir;
serviceConfig = {
ExecStart = "${pkgs.trilium-server}/bin/trilium-server";
User = "trilium";
Group = "trilium";
PrivateTmp = "true";
};
};

systemd.tmpfiles.rules = [
"d ${cfg.dataDir} 0750 trilium trilium - -"
"L+ ${cfg.dataDir}/config.ini - - - - ${configIni}"
];

}

(lib.mkIf cfg.nginx.enable {
services.nginx = {
enable = true;
virtualHosts."${cfg.nginx.hostName}" = {
locations."/" = {
proxyPass = "http://${cfg.host}:${toString cfg.port}/";
extraConfig = ''
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
'';
};
extraConfig = ''
client_max_body_size 0;
'';
};
};
})
]);
}
1 change: 1 addition & 0 deletions nixos/tests/all-tests.nix
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,7 @@ in
tor = handleTest ./tor.nix {};
transmission = handleTest ./transmission.nix {};
trac = handleTest ./trac.nix {};
trilium-server = handleTestOn ["x86_64-linux"] ./trilium-server.nix {};
trezord = handleTest ./trezord.nix {};
trickster = handleTest ./trickster.nix {};
udisks2 = handleTest ./udisks2.nix {};
Expand Down
53 changes: 53 additions & 0 deletions nixos/tests/trilium-server.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import ./make-test-python.nix ({ ... }: {
name = "trilium-server";
nodes = {
default = {
services.trilium-server.enable = true;
};
configured = {
services.trilium-server = {
enable = true;
dataDir = "/data/trilium";
};
};

nginx = {
services.trilium-server = {
enable = true;
nginx.enable = true;
nginx.hostName = "trilium.example.com";
};
};
};

testScript =
''
start_all()

with subtest("by default works without configuration"):
default.wait_for_unit("trilium-server.service")

with subtest("by default available on port 8080"):
default.wait_for_unit("trilium-server.service")
default.wait_for_open_port(8080)
# we output to /dev/null here to avoid a python UTF-8 decode error
# but the check will still fail if the service doesn't respond
default.succeed("curl --fail -o /dev/null 127.0.0.1:8080")

with subtest("by default creates empty document"):
default.wait_for_unit("trilium-server.service")
default.succeed("test -f /var/lib/trilium/document.db")

with subtest("configured with custom data store"):
configured.wait_for_unit("trilium-server.service")
configured.succeed("test -f /data/trilium/document.db")

with subtest("nginx with custom host name"):
nginx.wait_for_unit("trilium-server.service")
nginx.wait_for_unit("nginx.service")

nginx.succeed(
"curl --resolve 'trilium.example.com:80:127.0.0.1' http://trilium.example.com/"
)
'';
})
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
From 5be803a1171855f976a5b607970fa3949db72181 Mon Sep 17 00:00:00 2001
From: Christian Kampka <christian@kampka.net>
Date: Mon, 9 Dec 2019 19:40:27 +0100
Subject: [PATCH] Use console logger instead of rolling files

---
src/services/log.js | 26 +++-----------------------
1 file changed, 3 insertions(+), 23 deletions(-)

diff --git a/src/services/log.js b/src/services/log.js
index 1514c209..456c3749 100644
--- a/src/services/log.js
+++ b/src/services/log.js
@@ -1,35 +1,15 @@
"use strict";

-const fs = require('fs');
-const dataDir = require('./data_dir');
-
-if (!fs.existsSync(dataDir.LOG_DIR)) {
- fs.mkdirSync(dataDir.LOG_DIR, 0o700);
-}
-
-const logger = require('simple-node-logger').createRollingFileLogger({
- errorEventName: 'error',
- logDirectory: dataDir.LOG_DIR,
- fileNamePattern: 'trilium-<DATE>.log',
- dateFormat:'YYYY-MM-DD'
-});
-
function info(message) {
// info messages are logged asynchronously
setTimeout(() => {
console.log(message);
-
- logger.info(message);
}, 0);
}

function error(message) {
message = "ERROR: " + message;

- // we're using .info() instead of .error() because simple-node-logger emits weird error for showError()
- // errors are logged synchronously to make sure it doesn't get lost in case of crash
- logger.info(message);
-
console.trace(message);
}

@@ -45,12 +25,12 @@ function request(req) {
if (req.url.includes(".js.map") || req.url.includes(".css.map")) {
return;
}
-
- logger.info(req.method + " " + req.url);
+ if(process.env.DEBUG)
+ console.log(req.method + " " + req.url);
}

module.exports = {
info,
error,
request
-};
\ No newline at end of file
+};
--
2.23.0

Loading