mirror of
https://github.com/nolen777/eagle0.git
synced 2026-07-28 21:35:42 +00:00
* Next steps for productionization * Run deploy job on self-hosted runner for secure SSH * Temporarily disable production environment to debug runner * Use ubuntu-latest for deploy job * Add remote_tags to oci_push for latest tag
97 lines
2.6 KiB
Nginx Configuration File
97 lines
2.6 KiB
Nginx Configuration File
events {
|
|
worker_connections 1024;
|
|
}
|
|
|
|
http {
|
|
# Logging
|
|
log_format grpc_json escape=json '{'
|
|
'"time":"$time_iso8601",'
|
|
'"client":"$remote_addr",'
|
|
'"uri":"$uri",'
|
|
'"status":$status,'
|
|
'"grpc_status":"$sent_http_grpc_status",'
|
|
'"request_time":$request_time,'
|
|
'"upstream_time":"$upstream_response_time"'
|
|
'}';
|
|
|
|
access_log /var/log/nginx/access.log grpc_json;
|
|
error_log /var/log/nginx/error.log warn;
|
|
|
|
# Rate limiting zone
|
|
limit_req_zone $binary_remote_addr zone=grpc_limit:10m rate=100r/s;
|
|
|
|
# Upstream for Eagle gRPC server
|
|
upstream eagle_grpc {
|
|
server eagle:40032;
|
|
keepalive 100;
|
|
}
|
|
|
|
# HTTP server for Let's Encrypt challenge and redirect
|
|
server {
|
|
listen 80;
|
|
server_name eagle0.net;
|
|
|
|
# Let's Encrypt challenge
|
|
location /.well-known/acme-challenge/ {
|
|
root /var/www/certbot;
|
|
}
|
|
|
|
# Redirect all other HTTP to HTTPS
|
|
location / {
|
|
return 301 https://$host$request_uri;
|
|
}
|
|
}
|
|
|
|
# HTTPS server for gRPC
|
|
server {
|
|
listen 443 ssl;
|
|
http2 on;
|
|
server_name eagle0.net;
|
|
|
|
# SSL certificates (managed by certbot)
|
|
ssl_certificate /etc/letsencrypt/live/eagle0.net/fullchain.pem;
|
|
ssl_certificate_key /etc/letsencrypt/live/eagle0.net/privkey.pem;
|
|
|
|
# SSL configuration
|
|
ssl_protocols TLSv1.2 TLSv1.3;
|
|
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
|
|
ssl_prefer_server_ciphers off;
|
|
ssl_session_timeout 1d;
|
|
ssl_session_cache shared:SSL:10m;
|
|
ssl_session_tickets off;
|
|
|
|
# gRPC proxy for Eagle service
|
|
location /net.eagle0.eagle.api.Eagle {
|
|
# Rate limiting
|
|
limit_req zone=grpc_limit burst=50 nodelay;
|
|
|
|
# gRPC proxy
|
|
grpc_pass grpc://eagle_grpc;
|
|
|
|
# Timeouts for long-running streams
|
|
grpc_read_timeout 1200s;
|
|
grpc_send_timeout 1200s;
|
|
grpc_socket_keepalive on;
|
|
|
|
# Error handling
|
|
error_page 502 = /error502grpc;
|
|
}
|
|
|
|
# Health check endpoint
|
|
location /health {
|
|
access_log off;
|
|
return 200 "OK\n";
|
|
add_header Content-Type text/plain;
|
|
}
|
|
|
|
# gRPC error handling
|
|
location = /error502grpc {
|
|
internal;
|
|
default_type application/grpc;
|
|
add_header grpc-status 14;
|
|
add_header grpc-message "unavailable";
|
|
return 204;
|
|
}
|
|
}
|
|
}
|