Модульная конфигурация NixOS, разработанная специально для контейнеров Proxmox LXC, включающая коллекцию self-hosted сервисов с автоматической загрузкой модулей и управлением на основе flakes.
Данная конфигурация предоставляет комплексную основу для развёртывания self-hosted сервисов в контейнерах NixOS, работающих на Proxmox. Модульная архитектура позволяет легко добавлять и удалять сервисы, сохраняя чистое разделение ответственности.
- Оптимизация для Proxmox LXC: Специально настроена для контейнеров Proxmox LXC с соответствующим подавлением systemd-юнитов
- Модульная архитектура: Каждый сервис инкапсулирован в собственном модуле с независимой конфигурацией flake
- Автоматическая загрузка модулей: Динамическое обнаружение сервисов и загрузка модулей из директории services
- Self-hosted сервисы: Предварительно настроенные модули для популярных self-hosted приложений
- Управление на основе flakes: Современные Nix flakes для воспроизводимых развёртываний
- SSH доступ: Настроен SSH доступ для удалённого управления
.
├── flake.nix # Основной системный flake с динамической загрузкой модулей
├── configuration.nix # Базовая конфигурация системы для LXC
├── flake.lock # Lock-файл для воспроизводимых сборок
├── services/ # Директория модулей сервисов
│ ├── _default.nix # Утилита обнаружения сервисов
│ ├── adguardhome/ # DNS-сервис AdGuard Home
│ │ ├── flake.nix
│ │ └── modules/adguardhome.nix
│ ├── authentik/ # Сервис аутентификации Authentik (закомментирован)
│ │ ├── flake.nix
│ │ └── modules/authentik.nix
│ ├── navidrome/ # Музыкальный сервер Navidrome
│ │ ├── flake.nix
│ │ └── modules/navidrome.nix
│ ├── netdata/ # Система мониторинга Netdata
│ │ ├── flake.nix
│ │ └── modules/netdata.nix
│ ├── nginx-proxy-manager/ # Nginx Proxy Manager
│ │ ├── flake.nix
│ │ └── modules/nginx-proxy-manager.nix
│ ├── portainer/ # Управление контейнерами Portainer
│ │ ├── flake.nix
│ │ └── modules/portainer.nix
│ ├── vaultwarden/ # Менеджер паролей Vaultwarden
│ │ ├── flake.nix
│ │ └── modules/vaultwarden.nix
│ └── vscode-server/ # VSCode Server
│ ├── flake.nix
│ └── modules/vscode-server.nix
└── README.md # Этот файл
---
config:
style: neo
---
graph LR
A[flake.nix] --> B[configuration.nix]
A --> C[services/adguardhome/flake.nix]
A --> D[services/navidrome/flake.nix]
A --> E[services/netdata/flake.nix]
A --> F[services/nginx-proxy-manager/flake.nix]
A --> G[services/portainer/flake.nix]
A --> H[services/vaultwarden/flake.nix]
A --> I[services/vscode-server/flake.nix]
C --> J[services/adguardhome/modules/adguardhome.nix]
D --> K[services/navidrome/modules/navidrome.nix]
E --> L[services/netdata/modules/netdata.nix]
F --> M[services/nginx-proxy-manager/modules/nginx-proxy-manager.nix]
G --> N[services/portainer/modules/portainer.nix]
H --> O[services/vaultwarden/modules/vaultwarden.nix]
I --> P[services/vscode-server/modules/vscode-server.nix]
B --> Q[modulesPath + /virtualisation/proxmox-lxc.nix]
style A stroke:#01579b,stroke-width:2px
style B stroke:#4a148c,stroke-width:2px
style C stroke:#1b5e20,stroke-width:1px
style D stroke:#1b5e20,stroke-width:1px
style E stroke:#1b5e20,stroke-width:1px
style F stroke:#1b5e20,stroke-width:1px
style G stroke:#1b5e20,stroke-width:1px
style H stroke:#1b5e20,stroke-width:1px
style I stroke:#1b5e20,stroke-width:1px
- AdGuard Home (Порт 3000)
- Блокировка рекламы и фильтрация DNS на уровне сети
- Веб-интерфейс для управления
- Порт в файрволе открывается автоматически
- Vaultwarden (Порт 8222)
- Менеджер паролей, совместимый с Bitwarden
- Self-hosted альтернатива Bitwarden
- Настроен для доступа из сети
- Nginx Proxy Manager (Порты 80, 81, 443)
- Управление обратным прокси на базе Docker
- Управление SSL-сертификатами через Let's Encrypt
- Веб-интерфейс для простой настройки
- Portainer (Порт 9443)
- Веб-интерфейс управления Docker-контейнерами
- Визуальный мониторинг и управление контейнерами
- Безопасный доступ по HTTPS
- Navidrome (Порт 4533)
- Музыкальный сервер с веб-интерфейсом
- Настроен для монтирования сетевых шар CIFS
- Автоматическое управление музыкальной библиотекой
- Netdata (Порт 19999)
- Мониторинг системы и приложений в реальном времени
- Обнаружение аномалий с помощью машинного обучения
- Комплексный сбор метрик
- VSCode Server
- Visual Studio Code на базе браузера
- Возможности удалённой разработки
- Интеграция с системными пакетами
Базовая конфигурация оптимизирована для контейнеров Proxmox LXC:
- Интеграция с модулем Proxmox LXC
- Поддержка привилегированных контейнеров
- Управление сетью отключено (обрабатывается Proxmox)
- Подавление systemd-юнитов для совместимости с LXC
- SSH-сервер включён с доступом через файрвол
- Вход root разрешён (для управления контейнером)
- Аутентификация по паролю включена
- Пустые пароли разрешены (для первоначальной настройки)
- Экспериментальные возможности включены:
nix-command,flakes - Nix-ld включён для совместимости бинарных файлов
- Git включён для операций контроля версий
- Proxmox VE 7.2 или новее
- NixOS 22.05 или новее
- Доступ к CLI Proxmox (SSH или веб-консоль)
Сначала сгенерируйте NixOS LXC шаблон с помощью nixos-generators:
# Генерация LXC шаблона для Proxmox
nix run github:nix-community/nixos-generators -- --format proxmox-lxcЭта команда создаст tarball с NixOS, оптимизированный для Proxmox LXC.
Скопируйте сгенерированный tarball на хост Proxmox и загрузите его как шаблон контейнера:
# Скопируйте tarball на Proxmox хост
scp nixos-system-x86_64-linux.tar.xz root@proxmox:/tmp/
# На хосте Proxmox загрузите шаблон
pveam upload local vztmpl /tmp/nixos-system-x86_64-linux.tar.xzСоздайте новый LXC контейнер из шаблона через CLI Proxmox:
# Создание контейнера
pct create 100 local:vztmpl/nixos-system-x86_64-linux.tar.xz \
--hostname nixos-services \
--memory 2048 \
--cores 2 \
--net0 name=eth0,bridge=vmbr0 \
--ostype unmanaged \
--features nesting=1 \
--privileged 1Важные параметры:
--ostype unmanaged: Необходим, чтобы Proxmox не пытался выполнять дополнительные операции с системой--features nesting=1: Включает вложенность для запуска Docker и других контейнеров внутри--privileged 1: Требуется для некоторых сервисов (Docker, systemd сервисы)
После создания контейнера отредактируйте его конфигурационный файл:
# Откройте конфигурационный файл контейнера
nano /etc/pve/lxc/100.confДобавьте следующие строки:
# Для NixOS 21.11 и новее
lxc.init.cmd: /sbin/init
# Для старых версий NixOS (до 21.11)
# lxc.init.cmd: /init
Запустите контейнер и выполните первоначальную настройку:
# Запуск контейнера
pct start 100
# Вход в контейнер
pct enter 100
# Обновление nix-каналов
nix-channel --update
nix-channel --add https://nixos.org/channels/nixos-unstable nixos
# Перезагрузка для применения обновлений
rebootПосле перезагрузки войдите в контейнер и установите конфигурацию:
# Вход в контейнер
pct enter 100
# Клонирование репозитория
git clone <адрес-репозитория>
cd nixos-configuration
# Применение конфигурации
nixos-rebuild switch --flake .#nixosЕсли консоль не работает, установите режим консоли в /dev/console:
- В веб-интерфейсе Proxmox выберите контейнер
- Перейдите в раздел "Configuration" → "Options"
- Найдите "Console Mode" и установите значение
/dev/console(вместоtty)
Если вы предпочитаете использовать готовый шаблон, вы можете скачать его с Hydra:
# Перейдите на https://hydra.nixos.org/project/nixos
# Выберите релиз (маленькие релизы не содержат нужный tarball)
# Откройте вкладку Jobs и найдите nixos.containerTarball
# Выберите свою архитектуру (обычно x86_64)
# Скачайте последний успешный system-tarball
# Переименуйте tarball согласно конвенции Proxmox
mv nixos-system-x86_64-linux.tar.xz nixos-24.05-default_123456_amd64.tar.xz-
Создайте директорию сервиса:
mkdir services/new-service
-
Создайте flake сервиса:
# services/new-service/flake.nix { inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05"; }; outputs = { self, nixpkgs, ... }: { nixosModules = rec { default = new-service; new-service = import ./modules/new-service.nix; }; }; }
-
Создайте модуль сервиса:
# services/new-service/modules/new-service.nix { config, pkgs, ... }: { # Ваша конфигурация сервиса здесь # Например: # services.my-service = { # enable = true; # port = 8080; # }; }
-
Обновите основной flake: Сервис будет автоматически обнаружен и загружен основным flake.
Для включения или отключения сервисов измените секцию inputs в основном flake.nix:
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05";
adguardhome.url = "./services/adguardhome";
# Закомментируйте сервисы для их отключения:
# authentik.url = "./services/authentik";
navidrome.url = "./services/navidrome";
# ... другие сервисы
};После изменения списка сервисов примените конфигурацию:
nixos-rebuild switch --flake .#nixos- SSH доступ: Настроен для удобного управления контейнером, но должен быть защищён в production
- Файрвол: Каждый сервис автоматически открывает необходимые порты
- Привилегированный контейнер: Требуется для некоторых сервисов, но увеличивает поверхность атаки
- Аутентификация по паролю: Включена для удобства, но рассмотрите аутентификацию по ключам для production
- Требует настройки сетевой шары CIFS
- Обновите IP-адрес в
fileSystems."/run/media/navidrome"в соответствии с вашей сетью - Права доступа к музыкальной папке управляются автоматически
- Работает в Docker-контейнере
- Постоянное хранилище для данных и сертификатов Let's Encrypt
- Всегда загружает последний образ при перезапуске
- API, совместимый с Bitwarden
- Настроен для доступа из всей сети
- Рассмотрите возможность добавления SSL-терминации через Nginx Proxy Manager
nixos-rebuild switch --flake .#nixos --updatenix flake update
nixos-rebuild switch --flake .#nixosКаждый сервис может быть обновлён индивидуально путём изменения входных данных его flake или конфигурации.
- Форкните репозиторий
- Создайте ветку функции
- Добавьте свой сервис, следуя установленному шаблону
- Протестируйте ваш сервис в LXC контейнере
- Отправьте pull request
Эта конфигурация предоставляется как есть для образовательных и личных целей. Убедитесь в соблюдении лицензий отдельных сервисов и приложений.
- Сообщество NixOS за отличную документацию и инструменты
- Сопровождающие сервисов за предоставление модулей NixOS
- Команда Proxmox за отличную платформу виртуализации