nixos-config/services.nix

166 lines
5.5 KiB
Nix
Raw Normal View History

2018-04-01 15:04:49 +02:00
{ config, pkgs, ... }:
{
2018-04-03 21:13:18 +02:00
services.haproxy.enable = true;
services.haproxy.config = ''
2018-04-03 21:58:01 +02:00
global
2018-04-03 21:13:18 +02:00
log /dev/log local0
log /dev/log local1 notice
user haproxy
group haproxy
2018-04-05 00:14:12 +02:00
ssl-default-bind-ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
ssl-default-server-ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
ssl-default-server-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
2018-04-03 21:58:01 +02:00
defaults
2018-04-03 21:13:18 +02:00
option forwardfor
option http-server-close
2018-04-07 21:51:02 +02:00
timeout client 10s
timeout connect 4s
timeout server 30s
2018-04-03 23:54:27 +02:00
userlist LOUTRE
user paul password $6$6rDdCtzSVsAwB6KP$V8bR7KP7FSL2BSEh6n3op6iYhAnsVSPI2Ar3H6MwKrJ/lZRzUI8a0TwVBD2JPnAntUhLpmRudrvdq2Ls2odAy.
2018-04-04 20:30:18 +02:00
frontend public
2018-04-05 00:10:38 +02:00
bind :::80 v4v6
bind :::443 v4v6 ssl crt /var/lib/acme/tars.nyanlout.re/full.pem
2018-04-04 20:30:18 +02:00
mode http
2018-04-03 21:13:18 +02:00
acl letsencrypt-acl path_beg /.well-known/acme-challenge/
2018-04-05 00:14:12 +02:00
redirect scheme https code 301 if !{ ssl_fc } !letsencrypt-acl
2018-04-07 21:51:02 +02:00
use_backend letsencrypt-backend if letsencrypt-acl
2018-04-03 22:25:49 +02:00
acl grafana-acl hdr(host) -i grafana.tars.nyanlout.re
acl emby-acl hdr(host) -i emby.tars.nyanlout.re
2018-04-03 23:09:51 +02:00
acl radarr-acl hdr(host) -i radarr.tars.nyanlout.re
2018-04-03 23:54:27 +02:00
acl transmission-acl hdr(host) -i transmission.tars.nyanlout.re
2018-04-04 21:22:53 +02:00
acl syncthing-acl hdr(host) -i syncthing.tars.nyanlout.re
2018-04-03 22:25:49 +02:00
use_backend grafana-backend if grafana-acl
use_backend emby-backend if emby-acl
2018-04-03 23:09:51 +02:00
use_backend radarr-backend if radarr-acl
2018-04-03 23:54:27 +02:00
use_backend transmission-backend if transmission-acl
2018-04-04 21:22:53 +02:00
use_backend syncthing-backend if syncthing-acl
2018-04-03 22:25:49 +02:00
backend letsencrypt-backend
mode http
server letsencrypt 127.0.0.1:54321
2018-04-03 21:58:01 +02:00
backend grafana-backend
mode http
server grafana 127.0.0.1:3000 check
2018-04-03 22:25:49 +02:00
backend emby-backend
2018-04-03 21:58:01 +02:00
mode http
2018-04-03 22:25:49 +02:00
server emby 127.0.0.1:8096 check
2018-04-03 23:09:51 +02:00
backend radarr-backend
mode http
server radarr 127.0.0.1:7878 check
2018-04-03 23:54:27 +02:00
backend transmission-backend
mode http
acl AuthOK_LOUTRE http_auth(LOUTRE)
http-request auth realm LOUTRE if !AuthOK_LOUTRE
2018-04-04 21:22:53 +02:00
server transmission 127.0.0.1:9091 check
backend syncthing-backend
mode http
acl AuthOK_LOUTRE http_auth(LOUTRE)
http-request auth realm LOUTRE if !AuthOK_LOUTRE
server syncthing 127.0.0.1:8384 check
2018-04-03 21:13:18 +02:00
'';
services.nginx.enable = true;
services.nginx.virtualHosts = {
"acme" = {
2018-04-03 21:58:01 +02:00
listen = [ { addr = "127.0.0.1"; port = 54321; } ];
locations = { "/" = { root = "/var/www/challenges"; }; };
2018-04-03 21:13:18 +02:00
};
};
2018-04-04 09:12:23 +02:00
security.acme.certs = {
"tars.nyanlout.re" = {
extraDomains = {
"grafana.tars.nyanlout.re" = null;
"emby.tars.nyanlout.re" = null;
"radarr.tars.nyanlout.re" = null;
"transmission.tars.nyanlout.re" = null;
2018-04-04 21:22:53 +02:00
"syncthing.tars.nyanlout.re" = null;
2018-04-04 09:12:23 +02:00
};
webroot = "/var/www/challenges/";
email = "paul@nyanlout.re";
2018-04-04 20:30:18 +02:00
user = "haproxy";
group = "haproxy";
2018-04-07 21:51:02 +02:00
postRun = "systemctl reload haproxy";
2018-04-04 09:12:23 +02:00
};
};
security.acme.directory = "/var/lib/acme";
2018-04-03 21:13:18 +02:00
2018-04-01 15:04:49 +02:00
services.influxdb.enable = true;
2018-04-03 08:47:49 +02:00
services.influxdb.dataDir = "/var/db/influxdb";
2018-04-01 15:04:49 +02:00
services.telegraf.enable = true;
services.telegraf.extraConfig = {
inputs = {
zfs = { poolMetrics = true; };
net = { interfaces = [ "eno1" "eno2" "eno3" "eno4" ]; };
netstat = {};
cpu = { totalcpu = true; };
kernel = {};
mem = {};
processes = {};
system = {};
2018-04-10 16:53:13 +02:00
ipmi_sensor = { path = "${pkgs.ipmitool}/bin/ipmitool"; };
2018-04-01 15:04:49 +02:00
};
outputs = {
influxdb = { database = "telegraf"; urls = [ "http://localhost:8086" ]; };
};
};
2018-04-10 16:53:13 +02:00
services.udev.extraRules = ''
KERNEL=="ipmi*", MODE="660", OWNER="telegraf"
'';
2018-04-01 15:04:49 +02:00
services.grafana.enable = true;
2018-04-03 22:25:49 +02:00
services.grafana.addr = "127.0.0.1";
2018-04-03 08:47:49 +02:00
services.grafana.dataDir = "/var/lib/grafana";
2018-04-01 15:17:44 +02:00
services.emby.enable = true;
2018-04-03 08:47:49 +02:00
services.emby.dataDir = "/var/lib/emby/ProgramData-Server";
2018-04-01 15:17:44 +02:00
2018-04-03 19:21:26 +02:00
services.slimserver.enable = true;
services.slimserver.dataDir = "/var/lib/slimserver";
2018-04-03 08:47:49 +02:00
services.syncthing.enable = true;
services.syncthing.dataDir = "/var/lib/syncthing";
services.syncthing.openDefaultPorts = true;
2018-04-03 18:55:07 +02:00
services.nfs.server = {
enable = true;
exports = ''
/exports/steam 192.168.1.0/24(rw,no_root_squash)
'';
statdPort = 4000;
lockdPort = 4001;
mountdPort = 4002;
};
2018-04-03 23:22:44 +02:00
services.transmission.enable = true;
services.transmission.home = "/var/lib/transmission";
services.transmission.settings = {
2018-04-03 23:54:27 +02:00
rpc-bind-address = "127.0.0.1";
rpc-host-whitelist = "*";
2018-04-03 23:22:44 +02:00
rpc-whitelist-enabled = false;
};
2018-04-03 23:09:51 +02:00
services.radarr.enable = true;
2018-04-04 00:09:14 +02:00
services.murmur.enable = true;
services.murmur.bandwidth = 128000;
services.murmur.imgMsgLength = 0;
services.murmur.textMsgLength = 0;
2018-04-01 15:17:44 +02:00
networking.firewall.allowedTCPPorts = [
2018-04-03 21:13:18 +02:00
80 443 # HAProxy
2018-04-03 18:55:07 +02:00
111 2049 4000 4001 4002 # NFS
2018-04-03 20:17:09 +02:00
3483 9000 # Slimserver
2018-04-04 22:15:27 +02:00
51413 # Transmission
2018-04-03 18:55:07 +02:00
];
networking.firewall.allowedUDPPorts = [
111 2049 4000 4001 4002 # NFS
2018-04-03 20:17:09 +02:00
3483 # Slimserver
2018-04-04 22:15:27 +02:00
51413 # Transmission
2018-04-01 15:17:44 +02:00
];
2018-04-01 15:04:49 +02:00
}