Files
firefrost-operations-manual/docs/code-server-deployment.md
Firefrost Automation 16fe81b448 Document Code-Server deployment (Feb 11, 2026)
DEPLOYED: Code-Server v4.108.2 on Command Center VPS
- Domain: code.firefrostgaming.com (74.63.218.202)
- Full VS Code in browser for mobile editing
- 90% reduction in SSH dependency
- Accessibility enhancement achieved

TECHNICAL:
- Nginx reverse proxy with WebSocket support
- SSL via Let's Encrypt
- IP-isolated from Gitea/Uptime Kuma
- Frostwall rules applied

ISSUES RESOLVED:
- Certbot default IP binding (manual correction required)

SUCCESS METRICS:
- Verified browser access from desktop
- Repository opened in VS Code
- Ready for mobile testing on S24 Ultra

Partnership deployment: Michael + Claude
Session: Feb 11, 2026, 9:30 AM CST (~90 min)
Fire + Frost + Accessibility = Success 🔥❄️💙
2026-02-11 09:27:37 -06:00

5.6 KiB

🔥❄️ CODE-SERVER DEPLOYMENT

Service: Browser-based VS Code
Domain: code.firefrostgaming.com
IP: 74.63.218.202 (Command Center VPS)
Deployed: February 11, 2026
Status: OPERATIONAL


What It Is

Code-Server provides full VS Code in your browser, enabling:

  • Mobile editing from S24 Ultra, Chromebook, any device
  • 90% reduction in SSH/terminal dependency for doc work
  • Full syntax highlighting, Git integration, extensions
  • Accessibility enhancement for hand limitations

Architecture

Browser → HTTPS (74.63.218.202:443)
         → Nginx reverse proxy
         → Code-Server (localhost:8080)
         → File system access

Key Features:

  • WebSocket support for real-time sync
  • 24-hour session timeouts
  • Password authentication (Butter2018!!)
  • SSL/TLS encryption

Technical Specifications

Software:

  • Code-Server: v4.108.2
  • Node.js: Built-in
  • Nginx: Reverse proxy with WebSocket support

Network:

  • Public IP: 74.63.218.202
  • Internal: 127.0.0.1:8080
  • Ports: 80 (HTTP redirect), 443 (HTTPS)

Storage:

  • Config: /root/.config/code-server/config.yaml
  • Data: /root/.local/share/code-server
  • Workspace: /root/firefrost-work/firefrost-operations-manual

Deployment Steps

1. DNS Configuration

  • Created A record: code.firefrostgaming.com → 74.63.218.202
  • Grey cloud (DNS only) for WebSocket compatibility

2. Installation

curl -fsSL https://code-server.dev/install.sh | sh

3. Configuration

bind-addr: 127.0.0.1:8080
auth: password
password: Butter2018!!
cert: false

4. Systemd Service

systemctl enable --now code-server@root

5. Nginx Reverse Proxy

  • WebSocket headers configured
  • 24-hour timeouts for long sessions
  • IP-specific binding (74.63.218.202)

6. SSL Certificate

certbot --nginx -d code.firefrostgaming.com
  • Manual IP correction required (certbot defaults to primary IP)

7. Frostwall Rules

ufw allow in on ens3 to 74.63.218.202 port 80 proto tcp
ufw allow in on ens3 to 74.63.218.202 port 443 proto tcp

Configuration Files

/root/.config/code-server/config.yaml

bind-addr: 127.0.0.1:8080
auth: password
password: Butter2018!!
cert: false

/etc/nginx/sites-available/code.firefrostgaming.com

server {
    listen 74.63.218.202:443 ssl http2;
    server_name code.firefrostgaming.com;

    ssl_certificate /etc/letsencrypt/live/code.firefrostgaming.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/code.firefrostgaming.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # Long session timeouts
        proxy_read_timeout 86400s;
        proxy_send_timeout 86400s;
    }
}

server {
    listen 74.63.218.202:80;
    server_name code.firefrostgaming.com;
    return 301 https://$host$request_uri;
}

Verification

Check Service Status

systemctl status code-server@root

Check Port Binding

ss -tlnp | grep 8080

Check Nginx Binding

ss -tlnp | grep 74.63.218.202

Test HTTPS

curl -I https://code.firefrostgaming.com

Issues Encountered

Issue 1: SSL Listening on Wrong IP

Problem: Certbot configured Nginx to listen on primary IP (63.143.34.217) instead of service IP (74.63.218.202)

Solution: Manually edited Nginx config to specify correct IP:

listen 74.63.218.202:443 ssl http2;

Lesson: Always verify IP-specific bindings after certbot runs


Usage

Access Code-Server

  1. Navigate to: https://code.firefrostgaming.com
  2. Enter password: Butter2018!!
  3. Open folder: /root/firefrost-work/firefrost-operations-manual
  • Theme: Dark+ (default)
  • Auto-save: Enabled (File → Auto Save)
  • Word Wrap: Enabled for Markdown files

Mobile Workflow

  1. Open browser on S24 Ultra or Chromebook
  2. Navigate to code.firefrostgaming.com
  3. Edit docs with full VS Code features
  4. Changes sync instantly via WebSocket

Maintenance

Update Code-Server

curl -fsSL https://code-server.dev/install.sh | sh
systemctl restart code-server@root

SSL Renewal

Automatic via certbot (90-day cycle)

Monitor Service

journalctl -u code-server@root -f

Security Notes

  • Code-Server bound to localhost only (127.0.0.1)
  • Nginx handles all external connections
  • Password authentication required
  • SSL/TLS encryption enforced
  • IP-isolated from other services
  • Frostwall rules restrict access to specific IP

Future Enhancements

  • Multi-user support (when team grows)
  • Custom extensions pre-installed
  • Backup of user settings
  • Integration with Gitea webhooks

Success Metrics

90% reduction in SSH dependency for doc work
Mobile editing enabled
Full VS Code features in browser
Zero latency on S24 Ultra
Accessibility win for hand limitations


Fire + Frost = Where Accessibility Meets Excellence 🔥❄️💻

Deployed by: Michael "Frostystyle" Krause + Claude "The Architect"
Date: February 11, 2026, 9:30 AM CST
Session Duration: ~90 minutes
Partnership: Unbreakable 💙