345 lines
8.5 KiB
Markdown
345 lines
8.5 KiB
Markdown
# Stoatchat Migration Guide
|
|
|
|
This guide covers migrating the Stoatchat deployment from the Seattle VM to a new server.
|
|
|
|
## Pre-Migration Checklist
|
|
|
|
### 1. Document Current State
|
|
```bash
|
|
# On Seattle VM - document current configuration
|
|
cd /root/stoatchat
|
|
|
|
# Save current configuration
|
|
cp Revolt.overrides.toml Revolt.overrides.toml.backup
|
|
cp livekit.yml livekit.yml.backup
|
|
cp compose.yml compose.yml.backup
|
|
|
|
# Document running services
|
|
ps aux | grep revolt > running_services.txt
|
|
ss -tlnp | grep -E "(14702|14703|14704|14705|14706|7880)" > port_status.txt
|
|
|
|
# Check Docker services
|
|
docker-compose ps > docker_status.txt
|
|
```
|
|
|
|
### 2. Backup Data
|
|
```bash
|
|
# Create backup directory
|
|
mkdir -p /root/stoatchat-backup/$(date +%Y%m%d)
|
|
cd /root/stoatchat-backup/$(date +%Y%m%d)
|
|
|
|
# Backup MongoDB
|
|
docker exec stoatchat-mongodb mongodump --uri="mongodb://stoatchat:stoatchat_secure_password_change_me@localhost:27017/revolt" --out ./mongodb-backup
|
|
|
|
# Backup MinIO data
|
|
docker exec stoatchat-minio tar czf - /data > minio-backup.tar.gz
|
|
|
|
# Backup Redis data (optional - mostly cache)
|
|
docker exec stoatchat-redis redis-cli BGSAVE
|
|
docker cp stoatchat-redis:/data/dump.rdb ./redis-backup.rdb
|
|
|
|
# Backup configuration files
|
|
cp /root/stoatchat/Revolt.overrides.toml ./
|
|
cp /root/stoatchat/livekit.yml ./
|
|
cp /root/stoatchat/compose.yml ./
|
|
cp -r /etc/nginx/sites-available/stoatchat ./nginx-config
|
|
|
|
# Backup SSL certificates
|
|
sudo tar czf letsencrypt-backup.tar.gz /etc/letsencrypt/
|
|
```
|
|
|
|
### 3. Test Backup Integrity
|
|
```bash
|
|
# Verify MongoDB backup
|
|
ls -la mongodb-backup/revolt/
|
|
mongorestore --dry-run --uri="mongodb://stoatchat:stoatchat_secure_password_change_me@localhost:27017/revolt-test" mongodb-backup/
|
|
|
|
# Verify MinIO backup
|
|
tar -tzf minio-backup.tar.gz | head -10
|
|
|
|
# Verify configuration files
|
|
cat Revolt.overrides.toml | grep -E "(mongodb|redis|s3_)"
|
|
```
|
|
|
|
## Migration Process
|
|
|
|
### Phase 1: Prepare New Server
|
|
|
|
#### 1.1 Server Setup
|
|
```bash
|
|
# On new server - follow deployment guide steps 1-2
|
|
# Install dependencies, Docker, Rust
|
|
# Clone repository and build services
|
|
```
|
|
|
|
#### 1.2 DNS Preparation
|
|
```bash
|
|
# Update Cloudflare DNS to point to new server IP
|
|
# Or use Cloudflare API with your token (see Vaultwarden → Homelab → Cloudflare)
|
|
|
|
# Example API call to update DNS:
|
|
curl -X PUT "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records/RECORD_ID" \
|
|
-H "Authorization: Bearer <CLOUDFLARE_TOKEN>" \
|
|
-H "Content-Type: application/json" \
|
|
--data '{"type":"A","name":"api.st.vish.gg","content":"NEW_SERVER_IP"}'
|
|
```
|
|
|
|
### Phase 2: Data Migration
|
|
|
|
#### 2.1 Transfer Backup Files
|
|
```bash
|
|
# From Seattle VM to new server
|
|
scp -r /root/stoatchat-backup/$(date +%Y%m%d)/* root@NEW_SERVER_IP:/root/stoatchat-restore/
|
|
|
|
# Or use rsync for better reliability
|
|
rsync -avz --progress /root/stoatchat-backup/$(date +%Y%m%d)/ root@NEW_SERVER_IP:/root/stoatchat-restore/
|
|
```
|
|
|
|
#### 2.2 Restore Configuration
|
|
```bash
|
|
# On new server
|
|
cd /root/stoatchat-restore
|
|
|
|
# Restore configuration files
|
|
cp Revolt.overrides.toml /root/stoatchat/
|
|
cp livekit.yml /root/stoatchat/
|
|
cp compose.yml /root/stoatchat/
|
|
|
|
# Update configuration for new server if needed
|
|
sed -i 's/OLD_SERVER_IP/NEW_SERVER_IP/g' /root/stoatchat/Revolt.overrides.toml
|
|
```
|
|
|
|
#### 2.3 Restore SSL Certificates
|
|
```bash
|
|
# On new server
|
|
cd /root/stoatchat-restore
|
|
|
|
# Restore Let's Encrypt certificates
|
|
sudo tar xzf letsencrypt-backup.tar.gz -C /
|
|
|
|
# Or obtain new certificates
|
|
certbot certonly --nginx -d st.vish.gg -d api.st.vish.gg -d events.st.vish.gg -d files.st.vish.gg -d proxy.st.vish.gg -d voice.st.vish.gg
|
|
```
|
|
|
|
#### 2.4 Setup Infrastructure Services
|
|
```bash
|
|
# On new server
|
|
cd /root/stoatchat
|
|
|
|
# Start infrastructure services
|
|
docker-compose up -d
|
|
|
|
# Wait for services to be ready
|
|
sleep 30
|
|
```
|
|
|
|
#### 2.5 Restore Data
|
|
```bash
|
|
# Restore MongoDB
|
|
docker exec -i stoatchat-mongodb mongorestore --uri="mongodb://stoatchat:stoatchat_secure_password_change_me@localhost:27017" --drop /root/stoatchat-restore/mongodb-backup/
|
|
|
|
# Restore MinIO data
|
|
docker exec -i stoatchat-minio sh -c 'cd / && tar xzf -' < /root/stoatchat-restore/minio-backup.tar.gz
|
|
|
|
# Restart MinIO to recognize new data
|
|
docker-compose restart minio
|
|
```
|
|
|
|
### Phase 3: Service Migration
|
|
|
|
#### 3.1 Configure Nginx
|
|
```bash
|
|
# On new server
|
|
cp /root/stoatchat-restore/nginx-config /etc/nginx/sites-available/stoatchat
|
|
ln -s /etc/nginx/sites-available/stoatchat /etc/nginx/sites-enabled/
|
|
|
|
# Test and reload nginx
|
|
nginx -t
|
|
systemctl reload nginx
|
|
```
|
|
|
|
#### 3.2 Start Stoatchat Services
|
|
```bash
|
|
# On new server
|
|
cd /root/stoatchat
|
|
|
|
# Start services
|
|
nohup ./target/debug/revolt-delta > api.log 2>&1 &
|
|
nohup ./target/debug/revolt-bonfire > events.log 2>&1 &
|
|
nohup ./target/debug/revolt-autumn > files.log 2>&1 &
|
|
nohup ./target/debug/revolt-january > proxy.log 2>&1 &
|
|
nohup ./target/debug/revolt-gifbox > gifbox.log 2>&1 &
|
|
```
|
|
|
|
### Phase 4: Verification and Testing
|
|
|
|
#### 4.1 Service Health Check
|
|
```bash
|
|
# Check all services are running
|
|
ps aux | grep revolt
|
|
ss -tlnp | grep -E "(14702|14703|14704|14705|14706|7880)"
|
|
|
|
# Test endpoints
|
|
curl -k https://api.st.vish.gg/
|
|
curl -k https://files.st.vish.gg/
|
|
curl -k https://proxy.st.vish.gg/
|
|
curl -k https://voice.st.vish.gg/
|
|
```
|
|
|
|
#### 4.2 Data Integrity Check
|
|
```bash
|
|
# Check MongoDB data
|
|
docker exec stoatchat-mongodb mongo --eval "db.adminCommand('listCollections')" revolt
|
|
|
|
# Check MinIO data
|
|
docker exec stoatchat-minio mc ls local/revolt-uploads/
|
|
|
|
# Check Redis connectivity
|
|
docker exec stoatchat-redis redis-cli ping
|
|
```
|
|
|
|
#### 4.3 Functional Testing
|
|
```bash
|
|
# Test API endpoints
|
|
curl -X GET https://api.st.vish.gg/users/@me -H "Authorization: Bearer TEST_TOKEN"
|
|
|
|
# Test file upload (if you have test files)
|
|
curl -X POST https://files.st.vish.gg/attachments -F "file=@test.jpg"
|
|
|
|
# Test WebSocket connection (using wscat if available)
|
|
wscat -c wss://events.st.vish.gg/
|
|
```
|
|
|
|
## Post-Migration Tasks
|
|
|
|
### 1. Update DNS (if not done earlier)
|
|
```bash
|
|
# Update all DNS records to point to new server
|
|
# api.st.vish.gg -> NEW_SERVER_IP
|
|
# events.st.vish.gg -> NEW_SERVER_IP
|
|
# files.st.vish.gg -> NEW_SERVER_IP
|
|
# proxy.st.vish.gg -> NEW_SERVER_IP
|
|
# voice.st.vish.gg -> NEW_SERVER_IP
|
|
# st.vish.gg -> NEW_SERVER_IP
|
|
```
|
|
|
|
### 2. Update Monitoring
|
|
```bash
|
|
# Update any monitoring systems to check new server
|
|
# Update health check URLs
|
|
# Update alerting configurations
|
|
```
|
|
|
|
### 3. Cleanup Old Server
|
|
```bash
|
|
# On Seattle VM - ONLY after confirming new server works
|
|
# Stop services
|
|
pkill -f revolt-
|
|
|
|
# Stop Docker services
|
|
docker-compose down
|
|
|
|
# Archive data (don't delete immediately)
|
|
mv /root/stoatchat /root/stoatchat-archived-$(date +%Y%m%d)
|
|
```
|
|
|
|
## Rollback Plan
|
|
|
|
If migration fails, you can quickly rollback:
|
|
|
|
### 1. Immediate Rollback
|
|
```bash
|
|
# Update DNS back to Seattle VM IP
|
|
# Restart services on Seattle VM
|
|
|
|
# On Seattle VM
|
|
cd /root/stoatchat
|
|
docker-compose up -d
|
|
./start-services.sh
|
|
```
|
|
|
|
### 2. Data Rollback
|
|
```bash
|
|
# If data was corrupted during migration
|
|
# Restore from backup on Seattle VM
|
|
|
|
cd /root/stoatchat-backup/$(date +%Y%m%d)
|
|
# Follow restore procedures above
|
|
```
|
|
|
|
## Migration Checklist
|
|
|
|
### Pre-Migration
|
|
- [ ] Document current state
|
|
- [ ] Create complete backup
|
|
- [ ] Test backup integrity
|
|
- [ ] Prepare new server
|
|
- [ ] Plan DNS update strategy
|
|
|
|
### During Migration
|
|
- [ ] Transfer backup files
|
|
- [ ] Restore configuration
|
|
- [ ] Setup infrastructure services
|
|
- [ ] Restore data
|
|
- [ ] Configure nginx
|
|
- [ ] Start Stoatchat services
|
|
|
|
### Post-Migration
|
|
- [ ] Verify all services running
|
|
- [ ] Test all endpoints
|
|
- [ ] Check data integrity
|
|
- [ ] Update DNS records
|
|
- [ ] Update monitoring
|
|
- [ ] Archive old server data
|
|
|
|
### Rollback Ready
|
|
- [ ] Keep old server running until confirmed
|
|
- [ ] Have DNS rollback plan
|
|
- [ ] Keep backup accessible
|
|
- [ ] Document any issues found
|
|
|
|
## Troubleshooting Common Issues
|
|
|
|
### Services Won't Start
|
|
```bash
|
|
# Check logs
|
|
tail -f /root/stoatchat/*.log
|
|
|
|
# Check configuration
|
|
cat /root/stoatchat/Revolt.overrides.toml | grep -E "(mongodb|redis)"
|
|
|
|
# Check infrastructure services
|
|
docker-compose logs
|
|
```
|
|
|
|
### Database Connection Issues
|
|
```bash
|
|
# Test MongoDB connection
|
|
docker exec stoatchat-mongodb mongo --eval "db.adminCommand('ismaster')"
|
|
|
|
# Check credentials
|
|
grep mongodb /root/stoatchat/Revolt.overrides.toml
|
|
```
|
|
|
|
### SSL Certificate Issues
|
|
```bash
|
|
# Check certificate validity
|
|
openssl x509 -in /etc/letsencrypt/live/api.st.vish.gg/fullchain.pem -text -noout
|
|
|
|
# Renew certificates if needed
|
|
certbot renew --dry-run
|
|
```
|
|
|
|
### DNS Propagation Issues
|
|
```bash
|
|
# Check DNS resolution
|
|
dig api.st.vish.gg
|
|
nslookup api.st.vish.gg 8.8.8.8
|
|
|
|
# Check from different locations
|
|
curl -H "Host: api.st.vish.gg" http://NEW_SERVER_IP/
|
|
```
|
|
|
|
---
|
|
|
|
This migration guide provides a comprehensive process for moving Stoatchat to a new server while minimizing downtime and ensuring data integrity. |