# Task #47 — Plane Project Management Deployment **Status:** READY **Priority:** Tier 2 — Major Infrastructure **Time:** 2-3 hours **Created:** March 15, 2026 **Created By:** The Navigator (Chronicler #30) **Updated:** March 15, 2026 — Chronicler #31 **Owner:** Michael "Frostystyle" Krause **Target URL:** tasks.firefrostgaming.com **Server:** TX1 Dallas (38.68.14.26) ## Hardware Decision (March 15, 2026) Full fleet audit conducted. VPS machines all RAM-constrained for Plane's 4GB minimum: - Command Center: 3.8GB total - Panel VPS: 1.9GB total - Ghost VPS: overloaded with Ghost + 3 Wiki.js instances - Billing VPS: reserved for Mailcow TX1 and NC1 are dedicated servers with 251GB RAM each. TX1 selected: - TX1: 226GB free RAM, 771GB free disk — Plane is a rounding error - NC1: disk at 61% used — TX1 has more headroom **Philosophy note:** TX1 is nominally "game servers only" but the resource headroom makes this a pragmatic exception. Plane won't impact game server performance. --- ## Why Plane Firefrost needs a task management system that: - Works for non-technical staff (Meg, Holly, moderators, social media helpers) - Scales from 3 to 15+ people without migrating - Stays self-hosted (data ownership, fits Firefrost philosophy) - Has a mobile-friendly interface - Supports assignment, priorities, milestones, and comments Plane is the open source self-hosted answer to Linear. Docker-based, actively developed, genuinely good UI. Free forever when self-hosted. **Decision:** Self-hosted Plane on Command Center, accessible at tasks.firefrostgaming.com. --- ## System Requirements Per Plane documentation: - **Minimum:** 2 CPU cores, 4GB RAM, 20GB storage - **Recommended for production:** 4+ CPU cores, 16GB RAM Command Center (63.143.34.217) handles Gitea, Uptime Kuma, and Code-Server comfortably. Plane fits here. Verify before deploying: ```bash free -h df -h / docker --version docker compose version ``` --- ## Phase 1: DNS Setup (5 min — Cloudflare) Add A record in Cloudflare: ``` tasks.firefrostgaming.com A 63.143.34.217 (cf-proxied: false) ``` --- ## Phase 2: Installation (30 min) ### SSH to Command Center ```bash ssh root@63.143.34.217 ``` ### Create directory ```bash mkdir -p /opt/plane && cd /opt/plane ``` ### Download Plane installer ```bash curl -fsSL https://raw.githubusercontent.com/makeplane/plane/master/deploy/selfhost/install.sh -o install.sh chmod +x install.sh ``` ### Run installer ```bash ./install.sh ``` When prompted: - **Action:** 1 (Install) - **Domain:** `tasks.firefrostgaming.com` - **Installation type:** Express (use defaults) ### Start Plane ```bash ./install.sh ``` Select **2 (Start)** ### Verify containers running ```bash docker compose ps ``` Key containers that should be Up: - plane-web - plane-api - plane-worker - plane-postgres - plane-redis - plane-minio (file storage) - plane-proxy (nginx) --- ## Phase 3: Nginx + SSL (20 min) ### Create Nginx config ```bash nano /etc/nginx/sites-available/plane ``` ```nginx server { listen 80; server_name tasks.firefrostgaming.com; location / { proxy_pass http://localhost:8080; 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; proxy_cache_bypass $http_upgrade; } } ``` ### Enable site ```bash ln -s /etc/nginx/sites-available/plane /etc/nginx/sites-enabled/ nginx -t && systemctl reload nginx ``` ### SSL certificate ```bash certbot --nginx -d tasks.firefrostgaming.com ``` --- ## Phase 4: Initial Setup (20 min) ### Access Plane Go to: **https://tasks.firefrostgaming.com** ### Create admin account - Email: frostystyle@firefrostgaming.com (or michael@ once Mailcow is live) - Set strong password — store in Vaultwarden ### Create the Firefrost workspace - Workspace name: **Firefrost Gaming** - URL: `firefrost` (will be tasks.firefrostgaming.com/firefrost) ### Create projects Start with these projects: | Project | Description | Who uses it | |---|---|---| | Infrastructure | Server, deployment, technical tasks | Michael + future devs | | Community | Discord, social media, moderation tasks | Meg, moderators | | Content | Ghost posts, server spotlights, announcements | Meg, social media helpers | | Builds | Holly's builder tasks, world projects | Holly, builders | | Operations | General ops, cross-team tasks | All staff | ### Create staff accounts Invite via email once Mailcow is live. For now, create accounts manually: - gingerfury@firefrostgaming.com — Meg — Member role - unicorn20089@firefrostgaming.com — Holly — Member role ### Set up labels (global) Create these labels for consistent tagging: **Priority:** - 🔴 Critical - 🟠 High - 🟡 Medium - 🟢 Low **Type:** - 🔧 Infrastructure - 🎨 Content - 🛡️ Moderation - 🏗️ Build - 🐛 Bug - ✨ Feature --- ## Phase 5: Migrate Current Tasks (1 hour) Migrate the top priority tasks from tasks.md into Plane. Don't migrate everything at once — start with active tasks only. **Priority order for migration:** 1. Task #47 — This task (mark complete once deployed) 2. Task #11 — Mailcow (April 1 target — assign to Michael) 3. Task #40 — Holly's Builder rank (assign to Michael + Holly) 4. Task #45 — Server Sunset Evaluation (assign to Michael) 5. Task #28 — Discord reorganization (assign to Meg — she's handling it via Holly) 6. Task #46 — Ghost music player (assign to Michael) For each task in Plane: - Title matches tasks.md task name - Description links to `docs/tasks/[task-name]/README.md` in Gitea - Assignee set - Priority set - Due date if applicable (e.g. Mailcow = April 1, 2026) --- ## Phase 6: Backup Configuration (15 min) ### Manual backup command ```bash cd /opt/plane && ./install.sh ``` Select **7 (Backup Data)** ### Automate daily backups ```bash crontab -e ``` Add: ```bash 0 3 * * * cd /opt/plane && ./install.sh backup >> /var/log/plane-backup.log 2>&1 ``` Backups at 3am daily. Review logs weekly. --- ## Phase 7: Uptime Kuma Monitor (5 min) Add Plane to Uptime Kuma monitoring: - URL: https://tasks.firefrostgaming.com - Monitor type: HTTP(s) - Name: Plane (tasks.firefrostgaming.com) - Interval: 5 minutes --- ## Post-Deployment - [ ] tasks.firefrostgaming.com accessible via HTTPS - [ ] Admin account created, password in Vaultwarden - [ ] Firefrost workspace created - [ ] 5 projects created (Infrastructure, Community, Content, Builds, Operations) - [ ] Meg and Holly accounts created - [ ] Labels configured - [ ] Top priority tasks migrated from tasks.md - [ ] Daily backup cron running - [ ] Uptime Kuma monitor added - [ ] DNS record confirmed - [ ] tasks.md updated with note: "Active tasks tracked in Plane at tasks.firefrostgaming.com" --- ## Staff Onboarding Once deployed, each staff member needs a quick orientation: **For Meg and Holly:** - Log in at tasks.firefrostgaming.com - Check "My Issues" to see assigned tasks - Click a task to see details and add comments - Mark done by changing status to Done - That's it — they don't need to know anything else to start **Mobile:** Plane has a mobile web interface that works well. Native apps are in development. --- ## Future Integrations When ready: - **Gitea webhook** — link commits to Plane issues via issue ID in commit messages - **Mailcow** — email notifications for task assignments (configure after Mailcow live) - **Discord bot** — post task updates to #staff-announcements (future) --- ## Related Documentation - Plane self-hosting docs: https://developers.plane.so/self-hosting/methods/docker-compose - Current tasks: `docs/core/tasks.md` - Staff accounts: `docs/reference/staff-accounts.md` (to be created) --- **Fire + Frost + Foundation = Where Love Builds Legacy** 💙🔥❄️