230 lines
3.7 KiB
Markdown
230 lines
3.7 KiB
Markdown
|
|
# ports NixOS Module
|
||
|
|
|
||
|
|
Port management module for NixOS.
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
This module provides centralized port management across multiple hosts. Define default ports and host-specific overrides to prevent conflicts.
|
||
|
|
|
||
|
|
See [Port Management Guide](../../guides/port-management.md) for detailed usage.
|
||
|
|
|
||
|
|
## Quick Start
|
||
|
|
|
||
|
|
```nix
|
||
|
|
{config, ...}: {
|
||
|
|
m3ta.ports = {
|
||
|
|
enable = true;
|
||
|
|
|
||
|
|
# Define default ports
|
||
|
|
definitions = {
|
||
|
|
nginx = 80;
|
||
|
|
grafana = 3000;
|
||
|
|
prometheus = 9090;
|
||
|
|
};
|
||
|
|
|
||
|
|
# Host-specific overrides
|
||
|
|
hostOverrides = {
|
||
|
|
laptop = {
|
||
|
|
nginx = 8080;
|
||
|
|
grafana = 3001;
|
||
|
|
};
|
||
|
|
};
|
||
|
|
|
||
|
|
# Current host
|
||
|
|
currentHost = config.networking.hostName;
|
||
|
|
};
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Module Options
|
||
|
|
|
||
|
|
### `m3ta.ports.enable`
|
||
|
|
|
||
|
|
Enable port management.
|
||
|
|
|
||
|
|
- Type: `boolean`
|
||
|
|
- Default: `false`
|
||
|
|
|
||
|
|
### `m3ta.ports.definitions`
|
||
|
|
|
||
|
|
Default port definitions.
|
||
|
|
|
||
|
|
- Type: `attrsOf int`
|
||
|
|
- Default: `{}`
|
||
|
|
|
||
|
|
Example:
|
||
|
|
|
||
|
|
```nix
|
||
|
|
definitions = {
|
||
|
|
nginx = 80;
|
||
|
|
grafana = 3000;
|
||
|
|
prometheus = 9090;
|
||
|
|
};
|
||
|
|
```
|
||
|
|
|
||
|
|
### `m3ta.ports.hostOverrides`
|
||
|
|
|
||
|
|
Host-specific port overrides.
|
||
|
|
|
||
|
|
- Type: `attrsOf (attrsOf int)`
|
||
|
|
- Default: `{}`
|
||
|
|
|
||
|
|
Example:
|
||
|
|
|
||
|
|
```nix
|
||
|
|
hostOverrides = {
|
||
|
|
laptop = {
|
||
|
|
nginx = 8080;
|
||
|
|
grafana = 3001;
|
||
|
|
};
|
||
|
|
server = {
|
||
|
|
nginx = 80;
|
||
|
|
prometheus = 9091;
|
||
|
|
};
|
||
|
|
};
|
||
|
|
```
|
||
|
|
|
||
|
|
### `m3ta.ports.currentHost`
|
||
|
|
|
||
|
|
Current hostname. Determines which overrides to apply.
|
||
|
|
|
||
|
|
- Type: `string`
|
||
|
|
- Example: `config.networking.hostName`
|
||
|
|
|
||
|
|
## Functions
|
||
|
|
|
||
|
|
### `config.m3ta.ports.get "service"`
|
||
|
|
|
||
|
|
Get port for a service with host-specific override.
|
||
|
|
|
||
|
|
```nix
|
||
|
|
services.nginx = {
|
||
|
|
port = config.m3ta.ports.get "nginx";
|
||
|
|
};
|
||
|
|
```
|
||
|
|
|
||
|
|
If current host is `laptop` and `hostOverrides.laptop.nginx = 8080`, returns `8080`.
|
||
|
|
If no override, returns default `80`.
|
||
|
|
|
||
|
|
### `config.m3ta.ports.getHostPorts "hostname"`
|
||
|
|
|
||
|
|
Get all ports for a specific host.
|
||
|
|
|
||
|
|
```nix
|
||
|
|
# Get all ports for laptop
|
||
|
|
laptopPorts = config.m3ta.ports.getHostPorts "laptop";
|
||
|
|
# Returns: { nginx = 8080; grafana = 3000; ... }
|
||
|
|
```
|
||
|
|
|
||
|
|
### `config.m3ta.ports.listServices`
|
||
|
|
|
||
|
|
List all defined service names.
|
||
|
|
|
||
|
|
```nix
|
||
|
|
allServices = config.m3ta.ports.listServices;
|
||
|
|
# Returns: ["nginx" "grafana" "prometheus"]
|
||
|
|
```
|
||
|
|
|
||
|
|
## Usage Examples
|
||
|
|
|
||
|
|
### Basic Usage
|
||
|
|
|
||
|
|
```nix
|
||
|
|
{config, ...}: {
|
||
|
|
m3ta.ports = {
|
||
|
|
enable = true;
|
||
|
|
definitions = {
|
||
|
|
nginx = 80;
|
||
|
|
grafana = 3000;
|
||
|
|
};
|
||
|
|
currentHost = "server";
|
||
|
|
};
|
||
|
|
|
||
|
|
services.nginx = {
|
||
|
|
enable = true;
|
||
|
|
httpConfig = ''
|
||
|
|
server {
|
||
|
|
listen ${toString (config.m3ta.ports.get "nginx")};
|
||
|
|
}
|
||
|
|
'';
|
||
|
|
};
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Multi-Host Setup
|
||
|
|
|
||
|
|
```nix
|
||
|
|
{config, ...}: {
|
||
|
|
m3ta.ports = {
|
||
|
|
enable = true;
|
||
|
|
definitions = {
|
||
|
|
nginx = 80;
|
||
|
|
grafana = 3000;
|
||
|
|
prometheus = 9090;
|
||
|
|
};
|
||
|
|
hostOverrides = {
|
||
|
|
laptop = {
|
||
|
|
nginx = 8080;
|
||
|
|
grafana = 3001;
|
||
|
|
};
|
||
|
|
server = {
|
||
|
|
nginx = 80;
|
||
|
|
grafana = 3000;
|
||
|
|
};
|
||
|
|
};
|
||
|
|
currentHost = config.networking.hostName;
|
||
|
|
};
|
||
|
|
|
||
|
|
services.nginx = {
|
||
|
|
enable = true;
|
||
|
|
httpConfig = ''
|
||
|
|
server {
|
||
|
|
listen ${toString (config.m3ta.ports.get "nginx")};
|
||
|
|
}
|
||
|
|
'';
|
||
|
|
};
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### With Multiple Services
|
||
|
|
|
||
|
|
```nix
|
||
|
|
{config, ...}: {
|
||
|
|
m3ta.ports = {
|
||
|
|
enable = true;
|
||
|
|
definitions = {
|
||
|
|
# Monitoring
|
||
|
|
grafana = 3000;
|
||
|
|
prometheus = 9090;
|
||
|
|
loki = 3100;
|
||
|
|
promtail = 9080;
|
||
|
|
|
||
|
|
# Web
|
||
|
|
nginx = 80;
|
||
|
|
|
||
|
|
# Databases
|
||
|
|
postgres = 5432;
|
||
|
|
redis = 6379;
|
||
|
|
qdrant = 6333;
|
||
|
|
};
|
||
|
|
currentHost = config.networking.hostName;
|
||
|
|
};
|
||
|
|
|
||
|
|
# Use ports
|
||
|
|
services.grafana = {
|
||
|
|
enable = true;
|
||
|
|
settings.server.http_port = config.m3ta.ports.get "grafana";
|
||
|
|
};
|
||
|
|
|
||
|
|
services.postgresql = {
|
||
|
|
enable = true;
|
||
|
|
port = config.m3ta.ports.get "postgres";
|
||
|
|
};
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Related
|
||
|
|
|
||
|
|
- [Port Management Guide](../../guides/port-management.md) - Detailed guide
|
||
|
|
- [Home Manager Ports Module](../home-manager/ports.md) - User-level port management
|