Files
2026-08-16 15:08:52 -04:00

3.1 KiB

Vortexi OSS

An open-source revival based off of the Syntax[.]eco source code.

Quick Start (Docker)

1. Run Setup

./setup.sh

This wizard will:

  • Ask for your domain name (or default to localhost) and replace any old domains throughout the project.
  • Generate a new RCC access key and copy over the settings JSON.

2. Start the Stack

./start.sh

./start.sh runs docker compose up --build.

On first startup, the container automatically:

  • Generates all missing RSA 1024-bit, 2048-bit, and gameserver signing keys into app/files/
  • Waits for PostgreSQL and Redis to be ready
  • Runs db.create_all() to build all database tables
  • Creates an Admin user with full permissions and prints the username and generated password right in the console output

Once started, the site will be accessible on port 3003 (e.g. http://localhost:3003).


Configuration & Environment Variables

All settings are configured inside the .env file (copied from .env.example).

Key settings:

  • BASE_DOMAIN - Your main domain (e.g. yourdomain.com or localhost).
  • BASE_URL - Full base URL (e.g. https://www.yourdomain.com or http://localhost:3003).
  • RCC_ACCESS_KEY - The access key used for RCCService and FFlags settings.
  • USE_LOCAL_STORAGE - Set to True to store and serve assets locally in ./download_cache without needing an AWS S3 bucket.
  • POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DB - Database credentials.
  • FLASK_SESSION_KEY - Session secret (auto-generated if left blank).
  • CLOUDFLARE_TURNSTILE_SITE_KEY / CLOUDFLARE_TURNSTILE_SECRET_KEY - For captcha verification on signup/login.
  • DISCORD_BOT_TOKEN / DISCORD_CLIENT_ID / DISCORD_CLIENT_SECRET - For Discord linking and bot functionality.
  • MAILJET_APIKEY / MAILJET_SECRETKEY - For email verification and password resets.

Reverse Proxy Examples

You should run a reverse proxy in front of port 3003 for SSL and subdomains.

Caddy

yourdomain.com, *.yourdomain.com {
    reverse_proxy localhost:3003
}

Nginx

server {
    listen 80;
    server_name yourdomain.com *.yourdomain.com;

    client_max_body_size 50M;

    location / {
        proxy_pass http://127.0.0.1:3003;
        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;
    }
}

Apache2

<VirtualHost *:80>
    ServerName yourdomain.com
    ServerAlias *.yourdomain.com
    ProxyPreserveHost On
    ProxyRequests Off

    <Proxy *>
        Require all granted
    </Proxy>

    ProxyPass / http://127.0.0.1:3003/
    ProxyPassReverse / http://127.0.0.1:3003/
    LimitRequestBody 209715200
</VirtualHost>

Helpful Commands

  • Stop containers:
    docker compose down
    
  • View live logs:
    docker compose logs -f web
    
  • Access Flask shell inside container:
    docker compose exec web flask shell
    
  • Run in local debug mode (without Docker):
    ./debug.sh