Plane is een open-source tool voor projectbeheer - issues, cycles, modules en pages, op hetzelfde terrein als Jira en Linear - en een van de zwaardere zelfgehoste toepassingen die je op een kleine VPS kunt zetten. De Community Edition brengt een stack van dertien containers mee, dus het interessante deel van deze gids is het goed dimensioneren van de server, niet het intikken van docker compose up.
Waarom Plane zelf hosten?
Het gehoste abonnement rekent per gebruiker af. Zelf hosten schrapt die kosten en houdt de issuegeschiedenis, bijlagen en projectgegevens op infrastructuur die jij beheert, wat telt zodra er klantnamen, beveiligingsbevindingen of nog niet gepubliceerde roadmap-punten in staan. De Community Edition valt onder AGPL-3.0, dus je mag hem zonder licentiekosten in een commercieel team inzetten.
De keerzijde is echt: updates, back-ups en de Postgres-instantie liggen bij jou. Wil niemand in het team die klus, dan is de gehoste versie het eerlijke antwoord.
Vereisten
De documentatie van Plane benoemt de eisen ondubbelzinnig:
- 2 CPU-kernen, x64/AMD64 of AArch64/ARM64
- Minimaal 4 GB RAM, 8 GB aanbevolen voor productie
- Ubuntu, Debian, CentOS of Amazon Linux 2/2023
- Docker Engine 20.10+ en Docker Compose v2
- Poorten 80 en 443 bereikbaar, plus een domein dat naar de server wijst
Die ondergrens van 4 GB is geen marge. De stack start web, admin, space, api, worker, beat-worker, migrator, live, een proxy, plus postgres:15.7-alpine, valkey/valkey:7.2.11-alpine, rabbitmq:3.13.6-management-alpine en minio/minio. Dertien containers in rust vullen het grootste deel van 4 GB voordat één gebruiker inlogt.
Heb je nog een server nodig, dan halen Contabo, Hetzner Cloud en DigitalOcean de lat; zie de tabel hieronder en onze volledige VPS-vergelijking.
Stap 1: Kies een pakket boven de 4 GB
Hier gaat het bij de meeste Plane-installaties mis. Het goedkoopste pakket heeft bij vrijwel elke aanbieder 1 GB RAM, een kwart van wat Plane gedocumenteerd vraagt.
| Pakket | vCPU / RAM / Schijf | Prijs | Oordeel voor Plane |
|---|---|---|---|
| Contabo Cloud VPS 4 | 4 / 8 GB / 100 GB SSD | 5.50 EUR/mnd excl. btw | Haalt de aanbevolen 8 GB |
| Hetzner CX33 | 4 / 8 GB / 80 GB NVMe | 8.49 EUR/mnd excl. btw | Haalt de aanbevolen 8 GB |
| Hetzner CX23 | 2 / 4 GB / 40 GB NVMe | 5.49 EUR/mnd excl. btw | Precies het minimum; prima voor een klein team |
| DigitalOcean, instapdroplet | 1 / 1 GB / 25 GB | 6 USD/mnd | Te klein - hier draait Plane niet op |
Zet Ubuntu 24.04 LTS neer, maak een gebruiker zonder rootrechten aan en zet de firewall aan:
sudo apt update && sudo apt upgrade -y
sudo adduser plane
sudo usermod -aG sudo plane
sudo ufw allow OpenSSH && sudo ufw allow 80 && sudo ufw allow 443
sudo ufw enable
Stap 2: Docker installeren
Plane heeft Compose v2 nodig. Installeer vanuit Dockers eigen repository, dan krijg je docker-compose-plugin in plaats van het uitgefaseerde v1-script:
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER
Log uit en weer in, en controleer dan de versie:
docker compose version
Stap 3: Laat DNS eerst naar de server wijzen
Doe dit voordat je de installer start. Die vraagt tijdens de configuratie om je domein en schrijft het weg in WEB_URL en CORS_ALLOWED_ORIGINS; als DNS nog niet resolvet, mislukt de certificaatuitgifte en zit je achteraf in omgevingsbestanden te sleutelen.
Maak een A-record voor plane.example.com naar het IP-adres van de VPS en wacht tot het resolvet:
dig +short plane.example.com
Stap 4: Voer de officiële installer uit
Plane levert één installatiescript dat kant-en-klare images ophaalt en een beheerde docker-compose.yaml schrijft:
curl -fsSL https://prime.plane.so/install/ | sh -
Het script vraagt om je domein en biedt daarna Express (standaardwaarden) of Advanced (variabelen los instellen). Voor een eerste installatie is Express de juiste keuze. Daarna draait Plane op poort 80 en 443, aangestuurd door LISTEN_HTTP_PORT en LISTEN_HTTPS_PORT.
Een kanttekening bij de repository: de docker-compose.yml op GitHub bouwt elke dienst uit de broncode in plaats van images op te halen. Dat is een werkwijze voor bijdragers - een build vraagt aanzienlijk meer RAM dan draaien, en zal op een VPS met 4 GB mislukken of de machine laten swappen. Gebruik de installer.
Open https://plane.example.com en maak het eerste account aan. Dat account wordt beheerder van de instantie; het beheerpaneel staat op /god-mode/, waar je SMTP, registratiebeperkingen en authenticatie instelt.
Stap 5: Back-up wat er echt toe doet
Twee dingen bevatten je gegevens: het PostgreSQL-volume en het MinIO-volume, waarin elke bijlage staat. Een snapshot van de VPS dekt beide, maar een databasedump die je gericht kunt terugzetten is goud waard:
docker exec plane-db pg_dump -U plane plane | gzip > plane-$(date +%F).sql.gz
Kopieer de dump van de server af. Een back-up die op de schijf staat die je back-upt, is geen back-up.
VPS-opties vergeleken voor het zelf hosten van Plane
| Aanbieder | Instappakket vanaf 4 GB | Prijs (per maand) | Opmerkingen | Link |
|---|---|---|---|---|
| Contabo | Cloud VPS 4 - 4 vCPU, 8 GB, 100 GB SSD | 5.50 EUR excl. btw | Goedkoopste route naar de aanbevolen 8 GB | Contabo |
| Hetzner Cloud | CX23 - 2 vCPU, 4 GB, 40 GB NVMe | 5.49 EUR excl. btw | Haalt het minimum; CX33 voor 8.49 met 8 GB | Hetzner |
| DigitalOcean | 2 vCPU, 4 GB, 80 GB SSD | 24 USD | Duurder, maar documentatie en snapshots zijn hier het best | DigitalOcean |
| Vultr | 2 vCPU, 4 GB, 80 GB SSD | 20 USD | De goedkoopste van de drie; ruime keuze aan regio’s | Vultr |
| Linode (Akamai) | 2 vCPU, 4 GB, 80 GB SSD | 24 USD | Voorspelbare prestaties, sterke API | Linode |
Het patroon springt eruit: de Amerikaanse aanbieders vragen 20 tot 24 USD voor de 4 GB-trede, ruwweg drie tot vier keer het Europese equivalent. Voor een zelfgehoste issuetracker die toch één kantoor in één regio bedient, is dat verschil moeilijk te verdedigen.
Het hele veld vind je in onze volledige VPS-vergelijking.
Waar teams vastlopen
Dimensioneren op de productpagina in plaats van de documentatie. Plane ziet eruit als een webapp maar gedraagt zich als een klein platform. Vier GB is de ondergrens, niet het doel.
SMTP overslaan. Zonder ingestelde mail in /god-mode/ komen uitnodigingen nooit aan en kun je niemand aan de workspace toevoegen. Regel dat vóór het onboarden van het team.
MinIO vergeten in de back-up. Alleen Postgres wegschrijven geeft je elke issue en elke reactie terug, zonder één bijlage.
Plane is de installatiemoeite waard als je team toch al in een issuetracker leeft en er liever niet per persoon voor betaalt. Dimensioneer de machine fatsoenlijk, zet de back-ups elders neer, en de dienst draait geruisloos door.
Voor meer zelfhostingprojecten en tips: de lijst awesome-selfhosted of de community r/selfhosted.
Frequently asked questions
Kan ik Plane zelf hosten op een VPS met 1 GB of 2 GB RAM?
Nee. De documentatie van Plane legt de ondergrens op 2 CPU-kernen en 4 GB RAM, en de Compose-stack van de Community Edition start dertien containers, waaronder PostgreSQL, Valkey, RabbitMQ en MinIO. Op een machine met 2 GB loopt de installer wel door, maar containers worden bij echt gebruik afgeschoten wegens geheugentekort. 4 GB is het werkbare minimum en de documentatie adviseert 8 GB voor productie.
Hoe werk ik Plane bij naar een nieuwere versie?
Voer het beheerscript opnieuw uit dat de installer op de server heeft achtergelaten en kies de upgrade-optie. Als alternatief draai je vanuit de installatiemap docker compose pull gevolgd door docker compose up -d. De migrator-container voert bij het starten de databasemigraties uit, dus maak vooraf een PostgreSQL-dump en een snapshot. Lees eerst de release notes, want grote versies wijzigen soms omgevingsvariabelen.
Heb ik een eigen domeinnaam nodig om Plane te draaien?
In de praktijk wel. De installer vraagt tijdens de configuratie om je domein en schrijft dat weg in WEB_URL en CORS_ALLOWED_ORIGINS, die de frontend en de API gebruiken om met elkaar te praten. Een kaal IP-adres werkt voor een lokale proef maar breekt de CORS-instelling zodra het adres verandert, en zonder domein kun je geen Let's Encrypt-certificaat uitgeven.