# Fluxer Chat Server Deployment ## Overview Fluxer is a modern, Discord-like messaging platform that has been deployed to replace Stoat Chat on the st.vish.gg domain. This document covers the complete deployment process, configuration, and maintenance procedures. ## Deployment Summary **Date**: February 15, 2026 **Domain**: st.vish.gg **Status**: ✅ Successfully Deployed **Previous Service**: Stoat Chat (migrated) ## Architecture Fluxer is deployed using a microservices architecture with Docker Compose, consisting of: ### Core Services - **Frontend**: React-based web application with modern UI - **API**: Node.js/TypeScript backend with comprehensive REST API - **Gateway**: Erlang-based WebSocket server for real-time messaging - **Worker**: Background job processing service - **Admin**: Administrative panel (Gleam-based) - **Marketing**: Landing page service - **Docs**: Documentation service ### Infrastructure Services - **Caddy**: Reverse proxy and static file server - **PostgreSQL**: Primary database for user data and messages - **Cassandra/ScyllaDB**: High-performance database for message history - **Redis/Valkey**: Caching and session storage - **MinIO**: S3-compatible object storage for file uploads - **Meilisearch**: Full-text search engine - **ClamAV**: Antivirus scanning for uploaded files - **Media**: Media processing service ## Network Configuration ### Domain Structure - **Main App**: https://st.vish.gg (Frontend) - **API**: https://api.st.vish.gg (REST API endpoints) - **Events**: https://events.st.vish.gg (WebSocket gateway) - **Files**: https://files.st.vish.gg (File uploads/downloads) - **Voice**: https://voice.st.vish.gg (LiveKit voice chat) - **Proxy**: https://proxy.st.vish.gg (S3/MinIO proxy) ### Port Mapping - **External**: 8088 (Caddy reverse proxy) - **Internal Services**: Various container ports - **Database**: 9042 (Cassandra), 5432 (PostgreSQL) ## Installation Process ### 1. Environment Setup ```bash # Clone Fluxer repository cd /root git clone https://github.com/fluxerdev/fluxer.git cd fluxer/dev # Copy environment configuration cp .env.example .env # Edit .env with appropriate values ``` ### 2. Database Migration ```bash # Build migration tool cd /root/fluxer/packages/cassandra-migrations cargo build --release # Run migrations (60 total) cd /root/fluxer/dev ../packages/cassandra-migrations/target/release/cassandra-migrations ``` ### 3. Frontend Build ```bash # Install dependencies and build cd /root/fluxer/packages/frontend npm install npm run build ``` ### 4. Docker Deployment ```bash # Start all services cd /root/fluxer/dev docker compose up -d # Verify services docker compose ps ``` ### 5. Nginx Configuration ```bash # SSL certificates location /etc/nginx/ssl/st.vish.gg.crt /etc/nginx/ssl/st.vish.gg.key # Nginx configuration /etc/nginx/sites-available/fluxer /etc/nginx/sites-enabled/fluxer ``` ## Service Status ### Current Status (as of deployment) ``` SERVICE STATUS admin Restarting (minor issue) api ✅ Up and running caddy ✅ Up and running cassandra ✅ Up and healthy clamav ✅ Up and healthy docs ✅ Up and running gateway ✅ Up and running marketing ✅ Up and running media ✅ Up and running meilisearch ✅ Up and running metrics ✅ Up and healthy minio ✅ Up and healthy postgres ✅ Up and running redis ✅ Up and running worker ✅ Up and running ``` ## Configuration Files ### Docker Compose - **Location**: `/root/fluxer/dev/docker-compose.yml` - **Environment**: `/root/fluxer/dev/.env` ### Nginx Configuration ```nginx # Main configuration at /etc/nginx/sites-available/fluxer server { listen 443 ssl http2; server_name st.vish.gg; ssl_certificate /etc/nginx/ssl/st.vish.gg.crt; ssl_certificate_key /etc/nginx/ssl/st.vish.gg.key; location / { proxy_pass http://localhost:8088; 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; } } # Additional subdomains for API, events, files, voice, proxy # Each configured with appropriate proxy_pass directives ``` ## SSL Certificate Requirements ### Current Status - ✅ **st.vish.gg**: SSL configured and working - ⚠️ **Subdomains**: Need SSL certificates for full functionality ### Required Certificates The following subdomains need SSL certificates for complete functionality: - api.st.vish.gg - events.st.vish.gg - files.st.vish.gg - voice.st.vish.gg - proxy.st.vish.gg ### SSL Setup Options #### Option 1: Let's Encrypt with Certbot ```bash # Install certbot sudo apt update && sudo apt install certbot python3-certbot-nginx # Generate certificates for all subdomains sudo certbot --nginx -d st.vish.gg -d api.st.vish.gg -d events.st.vish.gg -d files.st.vish.gg -d voice.st.vish.gg -d proxy.st.vish.gg # Auto-renewal sudo crontab -e # Add: 0 12 * * * /usr/bin/certbot renew --quiet ``` #### Option 2: Cloudflare API (Recommended) If using Cloudflare DNS, you can use the Cloudflare API for certificate generation: ```bash # Install cloudflare plugin sudo apt install python3-certbot-dns-cloudflare # Create credentials file sudo mkdir -p /etc/letsencrypt sudo tee /etc/letsencrypt/cloudflare.ini << EOF dns_cloudflare_api_token = REDACTED_TOKEN EOF sudo chmod 600 /etc/letsencrypt/cloudflare.ini # Generate wildcard certificate sudo certbot certonly \ --dns-cloudflare \ --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \ -d st.vish.gg \ -d "*.st.vish.gg" ``` ## Maintenance ### Log Monitoring ```bash # View all service logs cd /root/fluxer/dev docker compose logs -f # View specific service logs docker compose logs -f api docker compose logs -f gateway docker compose logs -f caddy ``` ### Health Checks ```bash # Check service status docker compose ps # Test API endpoint curl -s http://localhost:8088/api/_rpc -X POST \ -H "Content-Type: application/json" \ -d '{"method":"ping"}' # Test frontend curl -s https://st.vish.gg | head -10 ``` ### Database Maintenance ```bash # PostgreSQL backup docker compose exec postgres pg_dump -U fluxer fluxer > backup.sql # Cassandra backup docker compose exec cassandra nodetool snapshot # Redis backup docker compose exec redis redis-cli BGSAVE ``` ### Updates ```bash # Update Fluxer cd /root/fluxer git pull origin main # Rebuild and restart cd dev docker compose build docker compose up -d ``` ## Troubleshooting ### Common Issues #### Admin Service Restarting The admin service may restart occasionally. This is typically not critical as it's only used for administrative tasks. ```bash # Check admin logs docker compose logs admin # Restart admin service docker compose restart admin ``` #### SSL Certificate Issues If subdomains return SSL errors: 1. Verify DNS records point to the server 2. Generate SSL certificates for all subdomains 3. Update nginx configuration 4. Reload nginx: `sudo nginx -s reload` #### Database Connection Issues ```bash # Check database connectivity docker compose exec api npm run db:check # Restart database services docker compose restart postgres cassandra redis ``` ### Performance Monitoring ```bash # Check resource usage docker stats # Monitor specific services docker compose top ``` ## Security Considerations ### Firewall Configuration ```bash # Allow necessary ports sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 8088/tcp # If direct access needed ``` ### Regular Updates - Keep Docker images updated - Monitor security advisories for dependencies - Regular backup of databases and configuration ### Access Control - Admin panel access should be restricted - API rate limiting is configured - File upload scanning with ClamAV ## Migration from Stoat Chat ### Completed Steps 1. ✅ Stopped all Stoat Chat processes 2. ✅ Removed Stoat Chat tmux sessions 3. ✅ Freed up port 8088 4. ✅ Deployed Fluxer services 5. ✅ Configured nginx routing 6. ✅ Verified SSL for main domain ### Data Migration If user data migration is needed from Stoat Chat: - Export user accounts and messages - Transform data format for Fluxer - Import into PostgreSQL/Cassandra databases ## Support and Documentation ### Official Resources - **GitHub**: https://github.com/fluxerdev/fluxer - **Documentation**: Available via docs service - **Community**: Discord/Matrix channels ### Local Documentation - Service logs: `docker compose logs` - Configuration: `/root/fluxer/dev/.env` - Database schemas: Available in migration files ## Backup Strategy ### Automated Backups ```bash #!/bin/bash # Add to crontab for daily backups BACKUP_DIR="/backup/fluxer/$(date +%Y%m%d)" mkdir -p "$BACKUP_DIR" # Database backups docker compose exec postgres pg_dump -U fluxer fluxer > "$BACKUP_DIR/postgres.sql" docker compose exec cassandra nodetool snapshot docker compose exec redis redis-cli BGSAVE # Configuration backup cp -r /root/fluxer/dev/.env "$BACKUP_DIR/" cp -r /etc/nginx/sites-available/fluxer "$BACKUP_DIR/" ``` ## Next Steps 1. **SSL Certificates**: Configure SSL for all subdomains 2. **Monitoring**: Set up monitoring and alerting 3. **Backups**: Implement automated backup strategy 4. **Performance**: Monitor and optimize performance 5. **Features**: Explore and configure additional Fluxer features --- **Last Updated**: February 15, 2026 **Maintainer**: Homelab Team **Status**: Production Ready