- Remove KCL ecosystem (~220 files deleted) - Migrate all infrastructure to Nickel schema system - Consolidate documentation: legacy docs → provisioning/docs/src/ - Add CI/CD workflows (.github/) and Rust build config (.cargo/) - Update core system for Nickel schema parsing - Update README.md and CHANGES.md for v5.0.0 release - Fix pre-commit hooks: end-of-file, trailing-whitespace - Breaking changes: KCL workspaces require migration - Migration bridge available in docs/src/development/
234 lines
6.0 KiB
Plaintext
234 lines
6.0 KiB
Plaintext
# Infrastructure - Nginx Schema
|
|
# Defines type-safe Nginx configuration generation
|
|
# Validates upstreams, locations, rate limiting, and TLS settings
|
|
|
|
{
|
|
# Upstream server configuration
|
|
UpstreamServer = {
|
|
address | String,
|
|
weight | Number | default = 1,
|
|
max_fails | Number | default = 3,
|
|
fail_timeout | String | default = "10s",
|
|
},
|
|
|
|
# Upstream pool definition
|
|
Upstream = {
|
|
name | String,
|
|
servers | Array UpstreamServer,
|
|
keepalive | Number | default = 32,
|
|
least_conn | Bool | default = false,
|
|
},
|
|
|
|
# Rate limiting zone
|
|
RateLimitZone = {
|
|
name | String,
|
|
key | String,
|
|
size | String | default = "10m",
|
|
rate | String,
|
|
},
|
|
|
|
# TLS/SSL configuration
|
|
TLSConfig = {
|
|
enabled | Bool | default = false,
|
|
cert_path | String | optional,
|
|
key_path | String | optional,
|
|
protocols | Array String | default = ["TLSv1.2", "TLSv1.3"],
|
|
ciphers | String | default = "HIGH:!aNULL:!MD5",
|
|
},
|
|
|
|
# Security headers
|
|
SecurityHeaders = {
|
|
strict_transport_security | String | optional,
|
|
content_security_policy | String | optional,
|
|
x_frame_options | String | optional,
|
|
x_content_type_options | String | optional,
|
|
},
|
|
|
|
# Location block configuration
|
|
Location = {
|
|
path | String,
|
|
proxy_pass | String | optional,
|
|
proxy_set_header | {_ | String} | default = {},
|
|
rate_limit | String | optional,
|
|
auth | {
|
|
enabled | Bool | default = false,
|
|
user_file | String | optional,
|
|
} | default = {enabled = false},
|
|
cors | {
|
|
enabled | Bool | default = false,
|
|
allowed_origins | Array String | optional,
|
|
allowed_methods | Array String | optional,
|
|
} | default = {enabled = false},
|
|
rewrite | {
|
|
pattern | String | optional,
|
|
replacement | String | optional,
|
|
flags | String | optional,
|
|
} | default = {},
|
|
},
|
|
|
|
# Server block configuration
|
|
ServerBlock = {
|
|
listen_port | Number | default = 80,
|
|
server_names | Array String,
|
|
tls | TLSConfig | default = {enabled = false},
|
|
security_headers | SecurityHeaders | default = {},
|
|
client_max_body_size | String | default = "1m",
|
|
proxy_read_timeout | String | default = "60s",
|
|
proxy_connect_timeout | String | default = "60s",
|
|
gzip_enabled | Bool | default = true,
|
|
locations | Array Location,
|
|
rate_limit_zone | String | optional,
|
|
},
|
|
|
|
# Nginx configuration
|
|
NginxConfig = {
|
|
user | String | default = "nginx",
|
|
worker_processes | Number | default = 4,
|
|
worker_connections | Number | default = 1024,
|
|
keepalive_timeout | String | default = "65s",
|
|
sendfile | Bool | default = true,
|
|
tcp_nopush | Bool | default = true,
|
|
tcp_nodelay | Bool | default = true,
|
|
types_hash_max_size | Number | default = 2048,
|
|
client_max_body_size | String | default = "20m",
|
|
upstreams | Array Upstream,
|
|
rate_limit_zones | Array RateLimitZone | default = [],
|
|
servers | Array ServerBlock,
|
|
},
|
|
|
|
# Platform service presets
|
|
platformServicePresets = {
|
|
orchestrator = {
|
|
name = "orchestrator",
|
|
listen_port = 8080,
|
|
rate_limit = "10r/s",
|
|
},
|
|
control_center = {
|
|
name = "control-center",
|
|
listen_port = 8081,
|
|
rate_limit = "5r/s",
|
|
},
|
|
extension_registry = {
|
|
name = "extension-registry",
|
|
listen_port = 8082,
|
|
rate_limit = "20r/s",
|
|
},
|
|
api_server = {
|
|
name = "api-server",
|
|
listen_port = 8083,
|
|
rate_limit = "100r/s",
|
|
},
|
|
mcp_server = {
|
|
name = "mcp-server",
|
|
listen_port = 8084,
|
|
rate_limit = "50r/s",
|
|
},
|
|
},
|
|
|
|
# Solo mode preset
|
|
soloNginxPreset = {
|
|
user = "nginx",
|
|
worker_processes = 1,
|
|
worker_connections = 512,
|
|
upstreams = [
|
|
{
|
|
name = "orchestrator",
|
|
servers = [{address = "127.0.0.1:8080"}],
|
|
},
|
|
{
|
|
name = "control-center",
|
|
servers = [{address = "127.0.0.1:8081"}],
|
|
},
|
|
],
|
|
rate_limit_zones = [
|
|
{
|
|
name = "api_limit",
|
|
key = "$binary_remote_addr",
|
|
rate = "10r/s",
|
|
},
|
|
],
|
|
servers = [
|
|
{
|
|
listen_port = 80,
|
|
server_names = ["localhost", "127.0.0.1"],
|
|
locations = [
|
|
{
|
|
path = "/api/orchestrator",
|
|
proxy_pass = "http://orchestrator",
|
|
rate_limit = "10r/s",
|
|
},
|
|
{
|
|
path = "/api/control-center",
|
|
proxy_pass = "http://control-center",
|
|
rate_limit = "5r/s",
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
|
|
# Enterprise mode preset
|
|
enterpriseNginxPreset = {
|
|
user = "nginx",
|
|
worker_processes = 8,
|
|
worker_connections = 2048,
|
|
client_max_body_size = "100m",
|
|
upstreams = [
|
|
{
|
|
name = "orchestrator",
|
|
servers = [
|
|
{address = "orchestrator-1:8080", weight = 1},
|
|
{address = "orchestrator-2:8080", weight = 1},
|
|
{address = "orchestrator-3:8080", weight = 1},
|
|
],
|
|
least_conn = true,
|
|
},
|
|
{
|
|
name = "control_center",
|
|
servers = [
|
|
{address = "control-center-1:8081", weight = 1},
|
|
{address = "control-center-2:8081", weight = 1},
|
|
],
|
|
},
|
|
],
|
|
rate_limit_zones = [
|
|
{
|
|
name = "api_limit",
|
|
key = "$binary_remote_addr",
|
|
rate = "100r/s",
|
|
size = "50m",
|
|
},
|
|
{
|
|
name = "login_limit",
|
|
key = "$binary_remote_addr",
|
|
rate = "5r/m",
|
|
size = "10m",
|
|
},
|
|
],
|
|
servers = [
|
|
{
|
|
listen_port = 80,
|
|
server_names = ["api.example.com"],
|
|
tls = {
|
|
enabled = true,
|
|
cert_path = "/etc/nginx/certs/api.crt",
|
|
key_path = "/etc/nginx/certs/api.key",
|
|
protocols = ["TLSv1.2", "TLSv1.3"],
|
|
},
|
|
security_headers = {
|
|
strict_transport_security = "max-age=31536000; includeSubDomains",
|
|
content_security_policy = "default-src 'self'",
|
|
x_frame_options = "DENY",
|
|
},
|
|
locations = [
|
|
{
|
|
path = "/api/",
|
|
proxy_pass = "http://orchestrator",
|
|
rate_limit = "100r/s",
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
}
|