chore: add an article about nixos
This commit is contained in:
parent
2f7e27d0d4
commit
375f23d959
1 changed files with 125 additions and 0 deletions
125
src/content/notes/nixos.md
Normal file
125
src/content/notes/nixos.md
Normal file
|
@ -0,0 +1,125 @@
|
||||||
|
---
|
||||||
|
title: "Мой опыт использования NixOS"
|
||||||
|
description: "Рассказываю о плюсах и минусах NixOS спустя год использования."
|
||||||
|
pubDate: 2024-05-26
|
||||||
|
updatedAt: 2024-05-26
|
||||||
|
tags: [{name: "Linux", slug: "linux"}]
|
||||||
|
---
|
||||||
|
|
||||||
|
[NixOS](https://nixos.org/) - это дистрибутив linux с декларативной конфигурацией.
|
||||||
|
Вы можете задать настройки системы в виде кода, и она приведёт себя в требуемое состояние.
|
||||||
|
Почти как ansible, только на уровне системы.
|
||||||
|
|
||||||
|
Уже год я использую NixOS на двух серверах, и я должен признать, что это было увлекательное приключение.
|
||||||
|
Об этом дистрибутиве можно сказать и много хорошего, и отнюдь не мало плохого.
|
||||||
|
Начну, пожалуй, в хронологическом порядке.
|
||||||
|
|
||||||
|
## Первая установка
|
||||||
|
|
||||||
|
Начать работать с NixOS довольно легко, местная wiki
|
||||||
|
проведёт вас по всем этапам установки, а система сама сгенерирует стартовые настройки.
|
||||||
|
Они послужат вам хорошей отправной точкой. Полезной идеей будет создание репозитория для настроек.
|
||||||
|
|
||||||
|
Настройки nixos охватывают практически все аспекты системы.
|
||||||
|
Можно настраивать пользователей, программы, сервисы, накопители.
|
||||||
|
Сначала, конечно, придётся привыкнуть к необычному синтаксису nix, но в большинстве случаев он не вызовет проблем.
|
||||||
|
|
||||||
|
Допустим, я хочу запустить forgejo. Для этого в настройки нужно добавить немного кода, а затем применить их:
|
||||||
|
```nix
|
||||||
|
# Пример был немного упрощён, проверьте доступные настройки перед запуском.
|
||||||
|
{ config, ... }:
|
||||||
|
{
|
||||||
|
services.forgejo = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
server = {
|
||||||
|
ROOT_URL = "https://git.example.org";
|
||||||
|
PROTOCOL = "http+unix";
|
||||||
|
DOMAIN = "git.example.org";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
database = {
|
||||||
|
type = "postgres";
|
||||||
|
socket = "/run/postgresql";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
services.nginx.virtualHosts."git.example.org" = {
|
||||||
|
useACMEHost = "example.org";
|
||||||
|
forceSSL = true;
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://unix:${config.services.forgejo.settings.server.HTTP_ADDR}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Выглядит несложно? Так и есть.
|
||||||
|
И если бы моя история заканчивалась здесь, то я бы сказал, что NixOS прекрасна.
|
||||||
|
Но есть одно но...
|
||||||
|
|
||||||
|
## Продвинутая работа
|
||||||
|
|
||||||
|
Допустим, нужной программы нет в NixOS, или же программа есть, но нет необходимых параметров.
|
||||||
|
Что делать в таком случае?
|
||||||
|
|
||||||
|
*Бежать.* Если же отвечать чуть более серьёзно, то не всё так страшно, конечно, но слабонервным лучше не приближаться.
|
||||||
|
Синтаксис настроек nixos воистину необычен и сложен для обывателей.
|
||||||
|
|
||||||
|
Создать свой пакет более чем реально, на данных момент в официальных репозиториях уже 80,000+ пакетов.
|
||||||
|
Но буду честен, я так в них до конца и не разобрался.
|
||||||
|
В интернете есть инструкции и примеры, но полного рецепта для своей ситуации вы можете так и не найти.
|
||||||
|
Иногда достаточно небольших правок готового пакета, что значительно облегчает задачу.
|
||||||
|
|
||||||
|
Самый простой вариант запуска собственного сервиса - docker, podman и их приятели.
|
||||||
|
Настроить k3s можно буквально при помощи 12 строчек кода.
|
||||||
|
Свой выбор я остановил на podman, хоть не исключаю, что перейду на nix, если разберусь с настройками.
|
||||||
|
|
||||||
|
## Стоит ли?
|
||||||
|
|
||||||
|
NixOS - это инструмент, призванный решать проблему контроля настроек и состояния системы.
|
||||||
|
Иногда у инструментов есть свои требования, свой небольшой список проблем, с которым
|
||||||
|
можно смириться, потому что сам инструмент решит куда больший круг других проблем.
|
||||||
|
|
||||||
|
NixOS потребует много внимания. Вы сможете легко начать работу, но в какой-то момент
|
||||||
|
можете найти себя за чтением книги о nix flakes. И всё это лишь для того, чтобы
|
||||||
|
настроить систему. Стоит ли результат усилий в случае NixOS? Я не уверен.
|
||||||
|
|
||||||
|
Лично я не стану менять систему на существующих серверах,
|
||||||
|
но для новых машин я выберу куда более простой и понятный debian, который можно подружить
|
||||||
|
с ansible для достижения подобного эффекта.
|
||||||
|
|
||||||
|
Мне кажется, что проекту не стоило пытаться быть настолько всеобъемлющим и необычным.
|
||||||
|
Например, можно было оставить настройки программ в виде текстовых файлов,
|
||||||
|
это облегчило бы жизнь разработчикам пакетов, а пользователи получили бы более привычный инструмент настройки.
|
||||||
|
Вот как это могло бы быть реализовано:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{ config, ... }:
|
||||||
|
{
|
||||||
|
services.forgejo = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
dotfiles."/etc/forgejo/app.ini" = ''
|
||||||
|
ROOT_URL=https://git.example.org
|
||||||
|
PROTOCOL=http+unix
|
||||||
|
DOMAIN=git.example.org
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Помимо этого, можно было бы выбрать куда более известные языки, тот же toml, как вариант:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[services.forgejo]
|
||||||
|
enable = true
|
||||||
|
|
||||||
|
[dotfiles."/etc/forgejo/app.ini"]
|
||||||
|
content = '''
|
||||||
|
ROOT_URL=https://git.example.org
|
||||||
|
PROTOCOL=http+unix
|
||||||
|
DOMAIN=git.example.org
|
||||||
|
'''
|
||||||
|
```
|
||||||
|
|
||||||
|
Я не исключаю, что я могу не знать о подводных камнях, которые побудили разработчиков
|
||||||
|
создать свой язык. Вполне возможно, у них были свои причины, но я не смог их увидеть.
|
Loading…
Reference in a new issue