CURSOR / VPS

Env Manager

One map of domains, ports, and edge nginx so a hostname cannot fall through to the wrong app. Workspace /opt/cursor

Download nginx

Public hostnames

DomainAppUpstreamBind 80?
docvault.doxstation.com DocVault host.docker.internal:8088 NO
play.doxstation.com Byte / AI Coding Tutor frontend:3000 EDGE
doxstation.com AI Teacher host.docker.internal:3000 NO
www.doxstation.com AI Teacher host.docker.internal:3000 NO
shorts.doxstation.com Short Video Maker host.docker.internal:3123 NO

Host ports

AppClaimedCompose scan
DocVault
doc-vault
8088 missing folder
Byte / AI Coding Tutor
ai-coder
80, 443, 3010 missing folder
AI Teacher
auto-reader
3000, 8000 missing folder
Short Video Maker
short-video-maker
3123 missing folder

registry.yaml

Generated edge HTTP

# Generated by cursor/env-manager. Do not hand-edit on the VPS.
# Copy into aicoder-nginx (baked image) or mount as the single edge config.
# Policy: one process on :80/:443. Unknown Host headers are rejected, never Byte.

events {}
http {
  include       mime.types;
  default_type  application/octet-stream;
  sendfile      on;
  client_max_body_size 60m;

  upstream doc_vault_app {
    server host.docker.internal:8088;
  }

  upstream ai_coder_app {
    server frontend:3000;
  }

  upstream auto_reader_app {
    server host.docker.internal:3000;
  }

  upstream auto_reader_api {
    server host.docker.internal:8000;
  }

  upstream short_video_maker_app {
    server host.docker.internal:3123;
  }

  server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    default_type text/plain;
    return 404 'unknown host. use a registered domain from env-manager.\n';
  }

  # DocVault
  server {
    listen 80;
    listen [::]:80;
    server_name docvault.doxstation.com;
    client_max_body_size 60m;

    location /.well-known/acme-challenge/ {
      root /var/www/html;
    }

    location / {
      proxy_pass http://doc_vault_app;
      proxy_http_version 1.1;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_read_timeout 120s;
    }
  }

  # Byte / AI Coding Tutor
  server {
    listen 80;
    listen [::]:80;
    server_name play.doxstation.com;
    client_max_body_size 60m;

    location /.well-known/acme-challenge/ {
      root /var/www/html;
    }

    location / {
      proxy_pass http://ai_coder_app;
      proxy_http_version 1.1;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_read_timeout 120s;
    }
  }

  # AI Teacher
  server {
    listen 80;
    listen [::]:80;
    server_name doxstation.com www.doxstation.com;
    client_max_body_size 60m;

    location /.well-known/acme-challenge/ {
      root /var/www/html;
    }

    location /api/ {
      proxy_pass http://auto_reader_api;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_read_timeout 120s;
    }

    location / {
      proxy_pass http://auto_reader_app;
      proxy_http_version 1.1;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_read_timeout 120s;
    }
  }

  # Short Video Maker
  server {
    listen 80;
    listen [::]:80;
    server_name shorts.doxstation.com;
    client_max_body_size 60m;

    location /.well-known/acme-challenge/ {
      root /var/www/html;
    }

    location / {
      proxy_pass http://short_video_maker_app;
      proxy_http_version 1.1;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_read_timeout 120s;
    }
  }

}