5.1 KiB
5.1 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 (grey cloud/DNS-only)
- SSL/TLS: Handled by nginx with Let's Encrypt
- Reverse Proxy: nginx → Docker containers
Architecture
Fluxer uses a microservices architecture with the following components:
Core Services
- caddy: Frontend web server serving the React application
- gateway: WebSocket gateway for real-time communication
- api: REST API backend service
- worker: Background job processing
Data Storage
- postgres: Primary relational database
- redis: Caching and session storage
- cassandra: Distributed message storage
- minio: S3-compatible object storage for files
- meilisearch: Full-text search engine
Additional Services
- livekit: Voice and video calling infrastructure
- media: Media processing and transcoding
- clamav: Antivirus scanning for uploads
- metrics: Monitoring and metrics collection
Installation Process
1. Repository Setup
cd /root
git clone https://github.com/fluxerapp/fluxer.git
cd fluxer
2. Stoat Chat Removal
# Stop existing Stoat Chat services
pkill -f stoat
tmux kill-session -t openhands-None-e7c3d76b-168c-4e2e-927c-338ad97cbdbe
3. Frontend Build Configuration
Fixed asset loading issue by modifying fluxer_app/rspack.config.mjs:
// Changed from hardcoded CDN to configurable endpoint
const CDN_ENDPOINT = process.env.CDN_ENDPOINT || '';
4. Production Build
cd fluxer_app
CDN_ENDPOINT="" NODE_ENV=production npm run build
5. Container Deployment
cd /root/fluxer
docker compose -f dev/compose.yaml up -d
6. Nginx Configuration
Updated /etc/nginx/sites-available/st.vish.gg:
server {
listen 443 ssl http2;
server_name st.vish.gg;
# SSL configuration
ssl_certificate /etc/letsencrypt/live/st.vish.gg/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/st.vish.gg/privkey.pem;
# Proxy to Fluxer frontend
location / {
proxy_pass http://127.0.0.1:3000;
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 for real-time features
location /gateway {
proxy_pass http://127.0.0.1:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
}
}
Current Status
✅ DEPLOYED SUCCESSFULLY: Fluxer chat server is now running on st.vish.gg
Verification Results
- HTML returns HTTP 200 ✅
- Local assets loading correctly ✅
- CSS/JS assets served from local /assets/ path ✅
- All Docker containers running properly ✅
Service Health Check
# Check container status
docker ps --filter "name=dev-"
# Test site accessibility
curl -I https://st.vish.gg
curl -I https://st.vish.gg/assets/cbcb39e9bf38b952.js
curl -I https://st.vish.gg/assets/e2d4313d493182a1.css
Issue Resolution Log
Problem: Asset Loading Failure
Issue: Site loaded HTML but assets failed to load from external CDN
- HTML returned HTTP 200 ✅
- Local assets accessible at /assets/ ✅
- CSS/JS failed to load from fluxerstatic.com CDN ❌
Root Cause: Production build was configured to use https://fluxerstatic.com as the CDN endpoint, but this external CDN was not accessible.
Solution:
- Modified
rspack.config.mjsto make CDN_ENDPOINT configurable via environment variable - Rebuilt frontend with
CDN_ENDPOINT=""to use local asset paths - Restarted Docker containers to load the updated build
- Verified all assets now load from local
/assets/directory
Maintenance
Container Management
# View logs
docker compose -f dev/compose.yaml logs -f
# Restart services
docker compose -f dev/compose.yaml restart
# Update containers
docker compose -f dev/compose.yaml pull
docker compose -f dev/compose.yaml up -d
Backup Considerations
- Database backups: postgres, cassandra
- File storage: minio volumes
- Configuration: docker-compose files and nginx config
Security Notes
- All services run in isolated Docker containers
- nginx handles SSL termination
- Internal services not exposed to public internet
- Regular security updates via Watchtower (if configured)
Performance
- Frontend assets served locally for optimal loading speed
- CDN-free deployment reduces external dependencies
- Microservices architecture allows for horizontal scaling
Deployment Date: February 15, 2026
Deployed By: OpenHands Agent
Status: Production Ready ✅