История изменений
Исправление
Tsukasa,
(текущая версия)
:
А ничего, что kdepim ощутимо даёт проседание в производительности?
УМВР
Ну вот тебе другой пример. Чисто рабочий. Понадобился мне так же nginx. С нестандартными модулями для webdav, которых нет в дефолтной сборке. А так же понадобилось для него нагенерить конфигов с подключением ssl с разными параметрами для разных виртхостов. Ну и разумеется с возможностью включать-выключать эти виртхосты и для них давать разные настройки.
Пожалуйста, nginx с модулем dav, автоматически обновляемымими сертификатами letsencrypt для двух доменов и настроенным фаерволом:
{ config, pkgs, ... }:
{
networking.firewall.allowedTCPPorts = [ 80 443 ];
security.acme.acceptTerms = true;
security.acme.defaults.email = "admin@myhost.org";
services.nginx = {
enable = true;
additionalModules = [ pkgs.nginxModules.dav ];
recommendedTlsSettings = true;
virtualHosts = { # можно генерить как душе угодно, пример для двух хостов
"example1.com" = {
enableACME = true;
forceSSL = true;
locations."/" = {
proxyPass = "http://127.0.0.1:1234";
};
};
"example2.com" = {
enableACME = true;
forceSSL = true;
locations."/" = {
proxyPass = "http://127.0.0.1:1235";
};
};
};
};
}
Сколько нужно всего сделать чтобы получить аналогичный результат на генте? Мне достаточно одной команды чтобы это раскатить.
Сделать по уму и написать генераторы конфигов
NixOS практически полностью из них и состоит. Можно сказать это и есть вся суть NixOS.
Положить под каждый виртхост шаблон конфига и копипастить его в нужное место. Второй подход расходится с принципом конфигурации nixos и не даёт возможности гибко добавлять виртхосты одной строкой как задумано, а требует для каждого из них копипастить очередной шаблон(в десятки строк) в конфигурации.
Открой для себя функции:
{ config, pkgs, ... }:
let
makeVhost = port: {
enableACME = true;
forceSSL = true;
locations."/" = {
proxyPass = "http://127.0.0.1:${toString port}";
};
};
in
{
networking.firewall.allowedTCPPorts = [ 80 443 ];
security.acme.acceptTerms = true;
security.acme.defaults.email = "admin@myhost.org";
services.nginx = {
enable = true;
additionalModules = [ pkgs.nginxModules.dav ];
recommendedTlsSettings = true;
virtualHosts = {
"example1.com" = makeVhost 1234;
"example2.com" = makeVhost 1235;
};
};
}
Если не сделать этого, и просто положить конфиги в обычном текстовом виде, это ломает весь принцип повторяемости nixos, ради которого и сделан весь этот язык конфигурации.
Не ломает, если они часть конфига. К примеру
.......
locations."/" = {
proxyPass = "http://127.0.0.1:1234";
extraConfig = ''
include ${./my-config-file.conf}; # my-config-file.conf копируется в /nix/store
'';
};
Файл my-config-file.conf становится частью системы, все гарантии работают.
Блин. Ну вот почему всем надо обозвать оппонента, не ознакомившись даже первыми главами хендбука? Если ты ни разу в жизни не сталкивался ни с чем, кроме дефолта и ни разу не читал документацию на дистрибутив, который пытаешься использовать, то это не значит, что так же и у остальных. Если же ты просто кладёшь файлы с конфигами приложения вместо написания описания конфигурации, то зачем тебе тогда NixOS. Это любой другой дистрибутив умеет.
Не на того напал. Запустишь на генте кластер из пяти виртуалок Talos в одной сети одним конфигом? Я смогу своим модулем (да, мне нехуй делать):
{ config, pkgs, ... }:
{
networking.bridges.br0.interfaces = [ "eth1" ];
networking.interfaces.eth0.useDHCP = true;
networking.interfaces.br0.useDHCP = false;
networking.interfaces.br0.ipv4.addresses = [
{ address = "192.168.1.1"; prefixLength = 24; }
];
networking.nat = {
enable = true;
externalInterface = "eth0";
internalInterfaces = [ "br0" ];
internalIPs = [ "192.168.1.0/24" ];
};
services.dhcpd4 = {
enable = true;
interfaces = config.networking.nat.internalInterfaces;
extraConfig = ''
option domain-name-servers 8.8.8.8, 8.8.4.4;
option routers 192.168.1.1;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.254;
}
'';
};
services.talos = {
control-plane-1 = {
smp = "cores=2";
mem = 2;
disk = 10;
bridge = "br0";
};
control-plane-2 = {
smp = "cores=2";
mem = 2;
disk = 10;
bridge = "br0";
};
worker-1 = {
smp = "cores=4";
mem = 4;
disk = 50;
bridge = "br0";
};
worker-2 = {
smp = "cores=4";
mem = 4;
disk = 50;
bridge = "br0";
};
worker-3 = {
smp = "cores=4";
mem = 4;
disk = 50;
bridge = "br0";
};
};
}
Ещё вопросы?
Исходная версия
Tsukasa,
:
А ничего, что kdepim ощутимо даёт проседание в производительности?
УМВР
Ну вот тебе другой пример. Чисто рабочий. Понадобился мне так же nginx. С нестандартными модулями для webdav, которых нет в дефолтной сборке. А так же понадобилось для него нагенерить конфигов с подключением ssl с разными параметрами для разных виртхостов. Ну и разумеется с возможностью включать-выключать эти виртхосты и для них давать разные настройки.
Пожалуйста, nginx с модулем dav, автоматически обновляемымими сертификатами letsencrypt для двух доменов и настроенным фаерволом:
{ config, pkgs, ... }:
{
networking.firewall.allowedTCPPorts = [ 80 443 ];
security.acme.acceptTerms = true;
security.acme.defaults.email = "admin@myhost.org";
services.nginx = {
enable = true;
additionalModules = [ pkgs.nginxModules.dav ];
recommendedTlsSettings = true;
virtualHosts = { # можно генерить как душе угодно, пример для двух хостов
"example1.com" = {
enableACME = true;
forceSSL = true;
locations."/" = {
proxyPass = "http://127.0.0.1:1234";
};
};
"example2.com" = {
enableACME = true;
forceSSL = true;
locations."/" = {
proxyPass = "http://127.0.0.1:1235";
};
};
};
};
}
Сколько нужно всего сделать чтобы получить аналогичный результат на генте? Мне достаточно одной команды чтобы это раскатить.
Сделать по уму и написать генераторы конфигов
NixOS практически полностью из них и состоит
Положить под каждый виртхост шаблон конфига и копипастить его в нужное место. Второй подход расходится с принципом конфигурации nixos и не даёт возможности гибко добавлять виртхосты одной строкой как задумано, а требует для каждого из них копипастить очередной шаблон(в десятки строк) в конфигурации.
Открой для себя функции:
{ config, pkgs, ... }:
let
makeVhost = port: {
enableACME = true;
forceSSL = true;
locations."/" = {
proxyPass = "http://127.0.0.1:${toString port}";
};
};
in
{
networking.firewall.allowedTCPPorts = [ 80 443 ];
security.acme.acceptTerms = true;
security.acme.defaults.email = "admin@myhost.org";
services.nginx = {
enable = true;
additionalModules = [ pkgs.nginxModules.dav ];
recommendedTlsSettings = true;
virtualHosts = {
"example1.com" = makeVhost 1234;
"example2.com" = makeVhost 1235;
};
};
}
Если не сделать этого, и просто положить конфиги в обычном текстовом виде, это ломает весь принцип повторяемости nixos, ради которого и сделан весь этот язык конфигурации.
Не ломает, если они часть конфига. К примеру
.......
locations."/" = {
proxyPass = "http://127.0.0.1:1234";
extraConfig = ''
include ${./my-config-file.conf}; # my-config-file.conf копируется в /nix/store
'';
};
Файл my-config-file.conf становится частью системы, все гарантии работают.
Блин. Ну вот почему всем надо обозвать оппонента, не ознакомившись даже первыми главами хендбука? Если ты ни разу в жизни не сталкивался ни с чем, кроме дефолта и ни разу не читал документацию на дистрибутив, который пытаешься использовать, то это не значит, что так же и у остальных. Если же ты просто кладёшь файлы с конфигами приложения вместо написания описания конфигурации, то зачем тебе тогда NixOS. Это любой другой дистрибутив умеет.
Не на того напал. Запустишь на генте кластер из пяти виртуалок Talos в одной сети одним конфигом на генте? Я смогу своим модулем (да, мне нехуй делать):
{ config, pkgs, ... }:
{
networking.bridges.br0.interfaces = [ "eth1" ];
networking.interfaces.eth0.useDHCP = true;
networking.interfaces.br0.useDHCP = false;
networking.interfaces.br0.ipv4.addresses = [
{ address = "192.168.1.1"; prefixLength = 24; }
];
networking.nat = {
enable = true;
externalInterface = "eth0";
internalInterfaces = [ "br0" ];
internalIPs = [ "192.168.1.0/24" ];
};
services.dhcpd4 = {
enable = true;
interfaces = config.networking.nat.internalInterfaces;
extraConfig = ''
option domain-name-servers 8.8.8.8, 8.8.4.4;
option routers 192.168.1.1;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.254;
}
'';
};
services.talos = {
control-plane-1 = {
smp = "cores=2";
mem = 2;
disk = 10;
bridge = "br0";
};
control-plane-2 = {
smp = "cores=2";
mem = 2;
disk = 10;
bridge = "br0";
};
worker-1 = {
smp = "cores=4";
mem = 4;
disk = 50;
bridge = "br0";
};
worker-2 = {
smp = "cores=4";
mem = 4;
disk = 50;
bridge = "br0";
};
worker-3 = {
smp = "cores=4";
mem = 4;
disk = 50;
bridge = "br0";
};
};
}
Ещё вопросы?