mattermost: add mattermost with tooling
This commit is contained in:
parent
e7a66e8af1
commit
89e8c1dc67
4 changed files with 163 additions and 1 deletions
|
@ -132,6 +132,33 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
"chat.ingolf-wagner.de" = {
|
||||||
|
listen = [
|
||||||
|
{
|
||||||
|
addr = "0.0.0.0";
|
||||||
|
port = 4443;
|
||||||
|
ssl = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
addr = "0.0.0.0";
|
||||||
|
port = 80;
|
||||||
|
ssl = false;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
forceSSL = true;
|
||||||
|
enableACME = true;
|
||||||
|
locations = {
|
||||||
|
"/" = {
|
||||||
|
proxyPass = "http://chat.workhorse.private";
|
||||||
|
proxyWebsockets = true;
|
||||||
|
extraConfig = ''
|
||||||
|
sub_filter "http://chat.ingolf-wagner.de" "https://chat.ingolf-wagner.de";
|
||||||
|
sub_filter "chat.workhorse.private" "chat.ingolf-wagner.de";
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
"nextcloud.ingolf-wagner.de" = {
|
"nextcloud.ingolf-wagner.de" = {
|
||||||
listen = [
|
listen = [
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
./weechat.nix
|
./weechat.nix
|
||||||
./wetten.nix
|
./wetten.nix
|
||||||
./nextcloud.nix
|
./nextcloud.nix
|
||||||
|
./mattermost.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
networking.hostName = "workhorse";
|
networking.hostName = "workhorse";
|
||||||
|
|
|
@ -47,6 +47,8 @@ in {
|
||||||
services.graylog.rootPasswordSha2 =
|
services.graylog.rootPasswordSha2 =
|
||||||
lib.fileContents <secrets/graylog/root-password-hash>;
|
lib.fileContents <secrets/graylog/root-password-hash>;
|
||||||
|
|
||||||
|
services.graylog.plugins = [ pkgs.graylogPlugins.slack ];
|
||||||
|
|
||||||
# not working at the moment
|
# not working at the moment
|
||||||
#services.geoip-updater.enable = true;
|
#services.geoip-updater.enable = true;
|
||||||
|
|
||||||
|
|
133
configs/workhorse/mattermost.nix
Normal file
133
configs/workhorse/mattermost.nix
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
{ pkgs, lib, ... }:
|
||||||
|
let
|
||||||
|
|
||||||
|
hostAddress = "192.168.100.20";
|
||||||
|
containerAddress = "192.168.100.21";
|
||||||
|
|
||||||
|
in {
|
||||||
|
|
||||||
|
# backup mattermost
|
||||||
|
backup.all.restic.dirs = [ "/home/mattermost" ];
|
||||||
|
|
||||||
|
containers.mattermost = {
|
||||||
|
|
||||||
|
# mount host folders
|
||||||
|
bindMounts = {
|
||||||
|
home = {
|
||||||
|
# make sure this folder exist on the host
|
||||||
|
hostPath = toString "/home/mattermost/home";
|
||||||
|
mountPoint = "/var/lib/mattermost";
|
||||||
|
isReadOnly = false;
|
||||||
|
};
|
||||||
|
db = {
|
||||||
|
# make sure this folder exist on the host
|
||||||
|
hostPath = toString "/home/mattermost/db";
|
||||||
|
mountPoint = "/var/lib/postgresql";
|
||||||
|
isReadOnly = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# container network setup
|
||||||
|
# see also nating on host system.
|
||||||
|
privateNetwork = true;
|
||||||
|
hostAddress = hostAddress;
|
||||||
|
localAddress = containerAddress;
|
||||||
|
|
||||||
|
autoStart = true;
|
||||||
|
|
||||||
|
config = { config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
|
imports = [ <modules> <krops-lib> ];
|
||||||
|
|
||||||
|
services.nginx = {
|
||||||
|
|
||||||
|
# Use recommended settings
|
||||||
|
recommendedGzipSettings = lib.mkDefault true;
|
||||||
|
recommendedOptimisation = lib.mkDefault true;
|
||||||
|
recommendedProxySettings = lib.mkDefault true;
|
||||||
|
recommendedTlsSettings = lib.mkDefault true;
|
||||||
|
|
||||||
|
# for graylog logging
|
||||||
|
commonHttpConfig = let
|
||||||
|
access_log_sink = "${hostAddress}:12304";
|
||||||
|
error_log_sink = "${hostAddress}:12305";
|
||||||
|
in ''
|
||||||
|
log_format graylog2_json escape=json '{ "timestamp": "$time_iso8601", '
|
||||||
|
'"facility": "nginx", '
|
||||||
|
'"remote_addr": "$remote_addr", '
|
||||||
|
'"body_bytes_sent": $body_bytes_sent, '
|
||||||
|
'"request_time": $request_time, '
|
||||||
|
'"response_status": $status, '
|
||||||
|
'"request": "$request", '
|
||||||
|
'"request_method": "$request_method", '
|
||||||
|
'"host": "$host",'
|
||||||
|
'"upstream_cache_status": "$upstream_cache_status",'
|
||||||
|
'"upstream_addr": "$upstream_addr",'
|
||||||
|
'"http_x_forwarded_for": "$http_x_forwarded_for",'
|
||||||
|
'"http_referrer": "$http_referer", '
|
||||||
|
'"http_user_agent": "$http_user_agent" }';
|
||||||
|
|
||||||
|
access_log syslog:server=${access_log_sink} graylog2_json;
|
||||||
|
error_log syslog:server=${error_log_sink};
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [ 8065 6667 ];
|
||||||
|
networking.firewall.allowedUDPPorts = [ 8065 ];
|
||||||
|
|
||||||
|
# setup matter most
|
||||||
|
services.mattermost = {
|
||||||
|
enable = true;
|
||||||
|
siteUrl = "https://chat.ingolf-wagner.de";
|
||||||
|
localDatabaseName = "chat";
|
||||||
|
localDatabaseUser = "chatty";
|
||||||
|
listenAddress = ":8065";
|
||||||
|
|
||||||
|
matterircd = {
|
||||||
|
enable = true;
|
||||||
|
parameters = [
|
||||||
|
"-mmserver chat.ingolf-wagner.de"
|
||||||
|
"-restrict chat.ingolf-wagner.de"
|
||||||
|
"-bind [::]:6667"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# send log to host systems graylog (use tinc or wireguard if host is not graylog)
|
||||||
|
services.SystemdJournal2Gelf.enable = true;
|
||||||
|
services.SystemdJournal2Gelf.graylogServer = "${hostAddress}:11201";
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# give containers internet access
|
||||||
|
networking.nat.enable = true;
|
||||||
|
networking.nat.internalInterfaces = [ "ve-mattermost" ];
|
||||||
|
networking.nat.externalInterface = "eth0";
|
||||||
|
|
||||||
|
# don't let networkmanager manger container network
|
||||||
|
networking.networkmanager.unmanaged = [ "interface-name:ve-*" ];
|
||||||
|
|
||||||
|
# open ports for logging
|
||||||
|
networking.firewall.interfaces."ve-mattermost".allowedTCPPorts =
|
||||||
|
[ 11201 12304 12305 ];
|
||||||
|
networking.firewall.interfaces."ve-mattermost".allowedUDPPorts =
|
||||||
|
[ 11201 12304 12305 ];
|
||||||
|
|
||||||
|
# host nginx setup
|
||||||
|
services.nginx = {
|
||||||
|
enable = true;
|
||||||
|
recommendedProxySettings = true;
|
||||||
|
virtualHosts = {
|
||||||
|
"chat.workhorse.private" = {
|
||||||
|
serverAliases = [ "chat.ingolf-wagner.de" ];
|
||||||
|
locations."/" = {
|
||||||
|
proxyWebsockets = true;
|
||||||
|
proxyPass = "http://${containerAddress}:8065";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue