- Deploy button in sidebar above username - POST /admin/system/deploy endpoint - Updated deploy.sh with locking, logging, user tracking - Prevents concurrent deploys (mkdir lock) - Logs who deployed and what commit - Updated DEPLOYMENT.md with setup instructions Gemini consultation: confirmed synchronous approach, locking, sudoers config
149 lines
3.5 KiB
Markdown
149 lines
3.5 KiB
Markdown
# Arbiter 3.0 Deployment Guide
|
|
|
|
**Location:** Command Center (63.143.34.217)
|
|
**Service:** `arbiter-3` (systemd)
|
|
**Directory:** `/opt/arbiter-3.0`
|
|
**Dashboard:** https://discord-bot.firefrostgaming.com/admin
|
|
|
|
---
|
|
|
|
## 🚀 One-Click Deploy (Trinity Console)
|
|
|
|
**For Holly, Meg, and Michael:**
|
|
|
|
1. Push your code changes to `firefrost-services` repo
|
|
2. Open Trinity Console: https://discord-bot.firefrostgaming.com/admin
|
|
3. Click the **"🚀 Deploy Arbiter"** button in the sidebar
|
|
4. Wait for success confirmation
|
|
|
|
That's it! The button pulls latest code from Gitea and restarts the service.
|
|
|
|
---
|
|
|
|
## ⚠️ IMPORTANT: Arbiter is NOT a Git Repo
|
|
|
|
`/opt/arbiter-3.0` on Command Center is **not** a git repository. It's a deployment target.
|
|
|
|
**Source of truth:** `firefrost-services` repo → `services/arbiter-3.0/`
|
|
|
|
**Why?** Production servers shouldn't have git credentials or .git history. Deploy by copying files.
|
|
|
|
---
|
|
|
|
## Manual Deploy (SSH Required)
|
|
|
|
**On Command Center:**
|
|
```bash
|
|
bash /opt/arbiter-3.0/deploy.sh
|
|
```
|
|
|
|
**Or remote curl:**
|
|
```bash
|
|
curl -fsSL https://git.firefrostgaming.com/firefrost-gaming/firefrost-services/raw/branch/main/services/arbiter-3.0/deploy.sh | bash
|
|
```
|
|
|
|
---
|
|
|
|
## First-Time Server Setup
|
|
|
|
If setting up deploy button for the first time, Michael needs to run these on Command Center:
|
|
|
|
**1. Copy deploy script to /opt/scripts:**
|
|
```bash
|
|
sudo mkdir -p /opt/scripts
|
|
sudo cp /opt/arbiter-3.0/deploy.sh /opt/scripts/deploy-arbiter.sh
|
|
sudo chmod +x /opt/scripts/deploy-arbiter.sh
|
|
```
|
|
|
|
**2. Configure sudoers (allow Arbiter to run deploy script):**
|
|
```bash
|
|
sudo visudo
|
|
```
|
|
Add this line:
|
|
```
|
|
architect ALL=(ALL) NOPASSWD: /opt/scripts/deploy-arbiter.sh
|
|
```
|
|
|
|
**3. Create log file:**
|
|
```bash
|
|
sudo touch /var/log/trinity-deployments.log
|
|
sudo chown architect:architect /var/log/trinity-deployments.log
|
|
```
|
|
|
|
---
|
|
|
|
## Verify Deployment
|
|
|
|
```bash
|
|
# Check service status
|
|
systemctl status arbiter-3
|
|
|
|
# Check logs
|
|
journalctl -u arbiter-3 -n 50
|
|
|
|
# Check deployment log
|
|
tail -20 /var/log/trinity-deployments.log
|
|
|
|
# Test dashboard
|
|
curl -s https://discord-bot.firefrostgaming.com/admin | head -5
|
|
```
|
|
|
|
---
|
|
|
|
## Common Issues
|
|
|
|
### "Deployment already in progress"
|
|
**Cause:** Previous deploy didn't finish or crashed
|
|
**Fix:** `rm -rf /tmp/arbiter_deploy.lock` then try again
|
|
|
|
### "fatal: not a git repository"
|
|
**Cause:** Someone tried to `git pull` in `/opt/arbiter-3.0`
|
|
**Fix:** Use the deploy script or manual copy method above
|
|
|
|
### "/tmp/firefrost-services already exists"
|
|
**Cause:** Previous deploy didn't clean up
|
|
**Fix:** `rm -rf /tmp/firefrost-services /tmp/firefrost-services-deploy-*` then try again
|
|
|
|
### Service fails to start
|
|
**Check:** `journalctl -u arbiter-3 -n 50`
|
|
**Common causes:**
|
|
- Missing .env file
|
|
- Database connection failed
|
|
- Port already in use
|
|
- Syntax error in code
|
|
|
|
---
|
|
|
|
## Environment Variables
|
|
|
|
Required in `/opt/arbiter-3.0/.env`:
|
|
```
|
|
DATABASE_URL=postgresql://...
|
|
DISCORD_TOKEN=...
|
|
DISCORD_CLIENT_ID=...
|
|
DISCORD_CLIENT_SECRET=...
|
|
PANEL_URL=https://panel.firefrostgaming.com
|
|
PANEL_APPLICATION_KEY=...
|
|
PANEL_CLIENT_KEY=...
|
|
STRIPE_SECRET_KEY=...
|
|
STRIPE_WEBHOOK_SECRET=...
|
|
SESSION_SECRET=...
|
|
MINECRAFT_NEST_IDS=1,5
|
|
```
|
|
|
|
---
|
|
|
|
## For Chroniclers & Catalysts
|
|
|
|
**You cannot SSH to Command Center** (port 22 blocked from Claude sandbox).
|
|
|
|
**Workflow:**
|
|
1. Make changes to `firefrost-services/services/arbiter-3.0/`
|
|
2. Commit and push to Gitea
|
|
3. Tell your human to click "🚀 Deploy Arbiter" in Trinity Console
|
|
4. Verify via dashboard or ask them to check logs
|
|
|
|
---
|
|
|
|
**Fire + Frost + Foundation = Where Love Builds Legacy** 🔥❄️
|