nixos-config/systems/LoutreOS/services.nix

303 lines
8.3 KiB
Nix
Raw Normal View History

2018-04-10 20:28:22 +02:00
{ config, lib, pkgs, ... }:
with lib;
let
2018-04-19 19:35:11 +02:00
domaine = "nyanlout.re";
2018-04-25 00:32:42 +02:00
2019-06-15 14:37:58 +02:00
sendMail = to: subject: message: pkgs.writeShellScriptBin "mail.sh" ''
${pkgs.system-sendmail}/bin/sendmail ${to} <<EOF
2019-06-07 11:57:12 +02:00
From: root@nyanlout.re
2019-06-15 14:37:58 +02:00
Subject: ${subject}
${message}
2019-06-07 11:57:12 +02:00
EOF
2019-06-15 14:37:58 +02:00
'';
login_mail_alert = pkgs.writeShellScriptBin "mail_alert.sh" ''
if [ "$PAM_TYPE" != "close_session" ]; then
2019-07-31 13:53:17 +02:00
${sendMail "paul@nyanlout.re" "SSH Login: $PAM_USER from $PAM_RHOST" "`env`"}/bin/mail.sh
2019-06-07 11:57:12 +02:00
fi
'';
2019-06-15 14:37:58 +02:00
backup_mail_alert = sendMail "paul@nyanlout.re" "ERREUR: Sauvegarde Borg" "Impossible de terminer la sauvegarde. Merci de voir les logs";
2018-04-10 20:28:22 +02:00
in
2018-04-01 15:04:49 +02:00
{
2018-04-11 22:09:44 +02:00
imports = [
2018-06-09 13:23:26 +02:00
../../services/haproxy-acme.nix
../../services/mail-server.nix
../../services/site-max.nix
2018-10-23 22:24:13 +02:00
../../services/auto-pr.nix
../../services/python-ci.nix
2018-11-26 17:26:55 +01:00
../../services/sdtdserver.nix
2018-09-19 11:54:33 +02:00
../../containers/vsftpd.nix
2019-11-01 15:24:50 +01:00
# /mnt/secrets/factorio_secrets.nix
./monitoring.nix
./medias.nix
./web.nix
2018-04-11 22:09:44 +02:00
];
nixpkgs.overlays = [
(import ../../overlays/dogetipbot-telegram.nix)
];
2018-09-04 14:05:06 +02:00
services = {
fail2ban.enable = true;
2018-04-03 21:13:18 +02:00
2018-09-04 14:05:06 +02:00
fstrim.enable = true;
mailserver = {
enable = true;
domaine = domaine;
};
2018-04-01 15:17:44 +02:00
2018-09-04 14:05:06 +02:00
syncthing = {
enable = true;
dataDir = "/var/lib/syncthing";
openDefaultPorts = true;
2018-04-19 20:17:48 +02:00
};
2018-09-04 14:05:06 +02:00
nfs.server = {
enable = true;
exports = ''
2019-05-01 23:06:17 +02:00
/mnt/medias 10.30.0.0/16(ro,no_root_squash)
/exports/steam 10.30.0.0/16(rw,async,no_root_squash)
2019-10-22 00:34:08 +02:00
/var/lib/minecraft 10.30.0.0/16(rw,no_root_squash)
2018-09-04 14:05:06 +02:00
'';
statdPort = 4000;
lockdPort = 4001;
mountdPort = 4002;
2018-04-22 00:01:25 +02:00
};
2018-09-04 14:05:06 +02:00
matrix-synapse = {
enable = true;
enable_registration = true;
server_name = "nyanlout.re";
listeners = [
{ # federation
bind_address = "";
port = 8448;
resources = [
{ compress = true; names = [ "client" "webclient" ]; }
{ compress = false; names = [ "federation" ]; }
];
tls = true;
type = "http";
x_forwarded = false;
}
{ # client
bind_address = "127.0.0.1";
port = 8008;
resources = [
{ compress = true; names = [ "client" "webclient" ]; }
];
tls = false;
type = "http";
x_forwarded = true;
}
];
max_upload_size = "100M";
2018-09-04 14:05:06 +02:00
database_type = "psycopg2";
database_args = {
database = "matrix-synapse";
2018-05-27 18:41:47 +02:00
};
tls_private_key_path = "/var/lib/acme/${domaine}/key.pem";
tls_certificate_path = "/var/lib/acme/${domaine}/fullchain.pem";
url_preview_enabled = true;
2018-09-04 14:05:06 +02:00
logConfig = ''
version: 1
formatters:
journal_fmt:
format: '%(name)s: [%(request)s] %(message)s'
filters:
context:
(): synapse.util.logcontext.LoggingContextFilter
request: ""
handlers:
journal:
class: systemd.journal.JournalHandler
formatter: journal_fmt
filters: [context]
SYSLOG_IDENTIFIER: synapse
root:
level: WARNING
handlers: [journal]
disable_existing_loggers: False
2018-05-27 18:41:47 +02:00
'';
2019-10-04 22:32:59 +02:00
app_service_config_files = [
"/var/lib/matrix-synapse/mautrix-telegram-registration.yaml"
];
};
mautrix-telegram = {
enable = true;
settings = {
homeserver = {
address = "https://matrix.nyanlout.re";
domain = "nyanlout.re";
};
appservice = {
bot_username = "loutrebot";
};
bridge = {
relaybot.authless_portals = false;
permissions = {
"@nyanloutre:nyanlout.re" = "admin";
};
};
};
environmentFile = "/mnt/secrets/mautrix-telegram.env";
serviceDependencies = [ "matrix-synapse.service" ];
2018-05-27 18:41:47 +02:00
};
2018-09-04 14:05:06 +02:00
borgbackup.jobs = {
loutre = {
paths = [
"/var/certs"
"/var/dkim"
2019-06-15 14:36:14 +02:00
"/var/lib/jellyfin"
2018-09-04 14:05:06 +02:00
"/var/lib/gitea"
"/var/lib/grafana"
"/var/lib/jackett"
2019-02-27 13:32:25 +01:00
"/var/lib/matrix-synapse"
2018-09-04 14:05:06 +02:00
"/var/lib/postgresql/.zfs/snapshot/borgsnap"
"/var/lib/radarr"
"/var/lib/sonarr"
"/var/lib/syncthing"
"/var/lib/transmission"
"/mnt/medias/musique"
"/mnt/medias/torrent/lidarr"
"/mnt/medias/torrent/musique"
"/var/sieve"
"/var/vmail"
];
repo = "/mnt/backup/borg";
encryption = {
mode = "repokey-blake2";
passCommand = "cat /mnt/secrets/borgbackup_loutre_encryption_pass";
};
startAt = "weekly";
prune.keep = {
within = "1d";
weekly = 4;
monthly = 12;
};
preHook = "${pkgs.zfs}/bin/zfs snapshot loutrepool/var/postgresql@borgsnap";
postHook = ''
${pkgs.zfs}/bin/zfs destroy loutrepool/var/postgresql@borgsnap
if [[ $exitStatus == 0 ]]; then
2019-01-22 11:03:15 +01:00
${pkgs.rclone}/bin/rclone --config /mnt/secrets/rclone_loutre.conf sync -v $BORG_REPO BackupStorage:loutre
2019-06-15 14:37:58 +02:00
else
${backup_mail_alert}/bin/mail.sh
2018-09-04 14:05:06 +02:00
fi
'';
};
};
2018-06-05 14:04:36 +02:00
2018-09-04 14:05:06 +02:00
borgbackup.repos = {
diskstation = {
authorizedKeys = [ "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDllbxON66dBju7sMnhX8/E0VRo3+PDYvDsHP0/FK+h8JHol4+pouLmI7KIDKYOJmSuom283OqnyZOMqk+RShTwWIFm9hOd2R9aj45Zrd9jPW2APOCec/Epgogj0bwBnc0l2v6qxkxaBMgL5DnAQ+E00uvL1UQpK8c8j4GGiPlkWJD6Kf+pxmnfH1TIm+J2XCwl0oeCkSK/Frd8eM+wCraMSzoaGiEcfMz2jK8hxDWjDxX7epU0ELF22BVCuyN8cYRoFTnV88E38PlaqsOqD5ePkxk425gDh7j/C06f8QKgnasVH2diixo92kYSd7i/RmfeXDDwAD5xqUvODczEuIdt root@DiskStation" ];
path = "/mnt/backup_loutre/diskstation_borg";
user = "synology";
};
};
2018-06-26 14:13:45 +02:00
2018-10-23 22:24:13 +02:00
auto-pr.enable = true;
2019-01-22 11:03:32 +01:00
sdtdserver.enable = false;
2019-01-03 10:04:35 +01:00
factorio = {
2019-11-01 15:24:50 +01:00
enable = false;
2019-01-03 10:04:35 +01:00
autosave-interval = 10;
game-name = "Shame";
public = true;
username = "nyanloutre";
};
2019-01-24 09:53:21 +01:00
2019-10-04 22:31:43 +02:00
minecraft-server = {
2019-10-22 00:34:08 +02:00
enable = false;
2019-10-04 22:31:43 +02:00
jvmOpts = "-Xms512m -Xmx3072m";
eula = true;
declarative = true;
openFirewall = true;
whitelist = {
nyanloutre = "db0669ea-e332-4ca3-8d50-f5d1458f5822";
Hautension = "f05677f4-be5a-47df-ad77-21c739180aa2";
LordDarkKiwi = "79290cfc-0b00-484f-9c94-ab0786402de6";
Madahin = "f5f747e3-fac2-43e8-9b9b-a67dc2f368ff";
Hopegcx = "4497f759-2210-48db-8764-307d33011442";
wyrd68 = "127a3021-cdc1-419f-9010-4651df9ae3af";
sparsyateloutre = "d2ff63c1-4e9f-4b21-9bfc-decce5d987b3";
};
serverProperties = {
difficulty = 2;
gamemode = 0;
max-players = 50;
motd = "Hi Mark !";
white-list = true;
};
};
2018-09-04 14:05:06 +02:00
};
2018-05-10 19:00:14 +02:00
2018-06-28 20:52:31 +02:00
systemd.services.dogetipbot-telegram = {
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
script = "${pkgs.dogetipbot-telegram}/bin/dogetipbot-telegram --block-io-api-key $BLOCK_IO_API_KEY --block-io-pin $BLOCK_IO_PIN --telegram-api-key $TELEGRAM_API_KEY --network DOGE";
enable = true;
serviceConfig = {
2018-08-28 15:30:39 +02:00
EnvironmentFile = "/mnt/secrets/dogetipbot-telegram_env";
2019-01-22 11:01:25 +01:00
DynamicUser = true;
2018-06-28 20:52:31 +02:00
};
};
2018-09-04 14:05:06 +02:00
systemd.services.matrix-synapse = {
serviceConfig = {
MemoryHigh = "3G";
MemoryMax = "5G";
};
};
2018-06-28 20:52:31 +02:00
users.groups.acme.members = [ "matrix-synapse" ];
2019-11-01 15:24:50 +01:00
security.pam.services.sshd.text = pkgs.lib.mkDefault( pkgs.lib.mkAfter "session optional ${pkgs.pam}/lib/security/pam_exec.so seteuid ${login_mail_alert}/bin/mail_alert.sh" );
2018-09-04 14:05:06 +02:00
2018-09-16 16:28:47 +02:00
networking = {
wireguard.interfaces = {
wg0 = {
ips = [ "192.168.20.1/24" ];
privateKeyFile = "/mnt/secrets/wireguard/wg0.privatekey";
listenPort = 51820;
2019-10-04 22:34:13 +02:00
allowedIPsAsRoutes = true;
2018-09-16 16:28:47 +02:00
peers = [
{
2019-10-04 22:34:13 +02:00
allowedIPs = [ "192.168.20.2/32" ];
2018-09-16 16:28:47 +02:00
publicKey = "b/SXiqo+GPdNOc54lyEVeUBc6B5AbVMKh+g5EZPGzlE=";
}
];
};
};
2019-10-04 22:34:13 +02:00
nat.internalInterfaces = [ "wg0" ];
nat.internalIPs = [ "192.168.20.0/24" ];
2018-09-16 16:28:47 +02:00
firewall.allowedTCPPorts = [
8448 # Matrix federation
20 21 # FTP
];
firewall.allowedTCPPortRanges = [
{ from = 64000; to = 65535; } # FTP
];
firewall.allowedUDPPorts = [
2019-11-01 15:24:50 +01:00
config.networking.wireguard.interfaces.wg0.listenPort
2018-09-16 16:28:47 +02:00
];
};
2018-04-01 15:04:49 +02:00
}