5.3 KiB
Fluxer Chat Server Deployment
Overview
Fluxer is an open-source, independent instant messaging and VoIP platform deployed on st.vish.gg, replacing the previous Stoat Chat installation.
Deployment Details
Domain Configuration
- Primary Domain: st.vish.gg
- DNS Provider: Cloudflare (DNS-only, A record to Seattle VM YOUR_WAN_IP)
- SSL/TLS: Wildcard Let's Encrypt certificate (
*.st.vish.gg+st.vish.gg) - Reverse Proxy: nginx on the host, proxying to Docker containers
Architecture
Fluxer uses a unified server architecture (fluxer-server) that bundles all backend services into a single deployable container.
Core Services (bundled in fluxer_server)
- app: Frontend web application
- api: REST API backend
- gateway: WebSocket gateway for real-time communication
- admin: Administrative panel
- media_proxy: Media processing and proxying
- s3: Built-in S3-compatible object storage
Supporting Services
- valkey: Cache and session storage (Redis-compatible)
- meilisearch: Full-text search engine (optional,
searchprofile) - elasticsearch: Alternative search backend (optional,
searchprofile) - livekit: Voice and video calling infrastructure (optional,
voiceprofile) - nats-core: Message broker
- nats-jetstream: Persistent message streaming
Docker Compose Configuration
The deployment uses two compose files:
/root/fluxer/compose.yaml: Base service definitions/root/fluxer/compose.override.yaml: Local overrides (build from source, port binding to 127.0.0.1:8088)
Nginx Configuration
The nginx reverse proxy is configured at /etc/nginx/sites-available/fluxer (symlinked to sites-enabled) and routes:
| Domain | Upstream |
|---|---|
st.vish.gg |
http://127.0.0.1:8088 (main app + all routes) |
api.st.vish.gg |
http://127.0.0.1:8088/api/ |
events.st.vish.gg |
http://127.0.0.1:8088/gateway/ (WebSocket) |
files.st.vish.gg |
http://127.0.0.1:8088/media/ |
proxy.st.vish.gg |
http://127.0.0.1:8088/s3/ |
voice.st.vish.gg |
http://127.0.0.1:8088/livekit/ |
SSL certificates are at /etc/nginx/ssl/st.vish.gg.{crt,key}.
Current Status
DEPLOYED AND RUNNING on st.vish.gg (Seattle VM)
Service Health (as of April 2026)
CONTAINER STATUS PORT
fluxer_server Up (healthy) 127.0.0.1:8088->8080/tcp
valkey Up (healthy) 6379/tcp (internal)
livekit Up (healthy) 7880-7881/tcp, 50000-50100/udp
nats-core Up 4222/tcp (internal)
nats-jetstream Up 4223/tcp (internal)
meilisearch Up (healthy) 7700/tcp
elasticsearch Up (healthy) 9200/tcp
Health Check
# Internal health check
curl -fsS http://127.0.0.1:8088/_health
# Returns JSON with status of: kv, s3, jetstream, mediaProxy, admin, api, app
Maintenance
Container Management
cd /root/fluxer
# View logs
MEILI_MASTER_KEY=<key> docker compose logs -f fluxer_server
# Restart services
MEILI_MASTER_KEY=<key> docker compose restart fluxer_server
# Rebuild from source and redeploy
MEILI_MASTER_KEY=<key> docker compose build --no-cache fluxer_server
MEILI_MASTER_KEY=<key> docker compose up -d fluxer_server
Note: MEILI_MASTER_KEY must be set (or use a .env file) because compose.yaml requires it, even if the meilisearch service is not started.
Updating
cd /root/fluxer
git fetch --all
git pull origin refactor # Currently tracking the 'refactor' branch
# Rebuild and redeploy
MEILI_MASTER_KEY=<key> docker compose build --no-cache fluxer_server
MEILI_MASTER_KEY=<key> docker compose up -d fluxer_server
Nginx Management
# Test configuration
nginx -t
# Reload after config changes
systemctl reload nginx
# View active sites
ls -la /etc/nginx/sites-enabled/
SSL Certificate Renewal
The wildcard cert covers all *.st.vish.gg subdomains. Renew with:
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
-d st.vish.gg \
-d "*.st.vish.gg"
Current certificate expires: May 16, 2026.
Configuration
Fluxer Config
- Application config:
/root/fluxer/config/config.json - Environment overrides:
/root/fluxer/dev/.env - Base domain:
st.vish.gg - Database: SQLite at
/usr/src/app/data/db/fluxer.db(inside container volumefluxer_data) - Cache: Valkey (Redis-compatible) at
redis://valkey:6379/0
Repository
- Source: https://github.com/fluxerapp/fluxer
- Branch:
refactor(85 commits ahead ofmainas of April 2026) - Local clone:
/root/fluxer
Security Notes
- All services run in isolated Docker containers
- nginx handles SSL termination on the host
- fluxer_server binds only to
127.0.0.1:8088(not exposed publicly) - Internal services (valkey, nats) are not exposed to the host network
Changelog
- April 7, 2026: Removed stale nextcloud nginx config that was interfering with routing. Rebuilt fluxer_server from latest source on
refactorbranch. - March 21, 2026: Migrated from dev multi-container architecture to unified
fluxer-server:stableimage with compose.override.yaml for local builds. - February 15, 2026: Initial deployment, replacing Stoat Chat.
Last Updated: April 7, 2026 Status: Production Running