177 lines
5.1 KiB
Markdown
177 lines
5.1 KiB
Markdown
# 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
|
|
```bash
|
|
cd /root
|
|
git clone https://github.com/fluxerapp/fluxer.git
|
|
cd fluxer
|
|
```
|
|
|
|
#### 2. Stoat Chat Removal
|
|
```bash
|
|
# 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`:
|
|
```javascript
|
|
// Changed from hardcoded CDN to configurable endpoint
|
|
const CDN_ENDPOINT = process.env.CDN_ENDPOINT || '';
|
|
```
|
|
|
|
#### 4. Production Build
|
|
```bash
|
|
cd fluxer_app
|
|
CDN_ENDPOINT="" NODE_ENV=production npm run build
|
|
```
|
|
|
|
#### 5. Container Deployment
|
|
```bash
|
|
cd /root/fluxer
|
|
docker compose -f dev/compose.yaml up -d
|
|
```
|
|
|
|
#### 6. Nginx Configuration
|
|
Updated `/etc/nginx/sites-available/st.vish.gg`:
|
|
```nginx
|
|
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
|
|
```bash
|
|
# 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**:
|
|
1. Modified `rspack.config.mjs` to make CDN_ENDPOINT configurable via environment variable
|
|
2. Rebuilt frontend with `CDN_ENDPOINT=""` to use local asset paths
|
|
3. Restarted Docker containers to load the updated build
|
|
4. Verified all assets now load from local `/assets/` directory
|
|
|
|
### Maintenance
|
|
|
|
#### Container Management
|
|
```bash
|
|
# 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 ✅ |