Files
homelab-optimized/docs/services/fluxer-deployment.md
Gitea Mirror Bot b5e43a65a7
Some checks failed
Documentation / Build Docusaurus (push) Failing after 1m12s
Documentation / Deploy to GitHub Pages (push) Has been skipped
Sanitized mirror from private repository - 2026-03-31 11:35:19 UTC
2026-03-31 11:35:19 +00:00

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 ✅