Blog → Task trackers and processes
How to Self-Host Plane with Docker in Kazakhstan: Production Guide
How to install Plane with Docker on a server in Kazakhstan: requirements, Community and Commercial install commands, plane.env variables, first login, PostgreSQL and file backups, upgrades and common issues.
In short, in plain words
- You can install Plane on your own server in Kazakhstan in one evening, but running it long-term takes a few more steps: change the default passwords, connect a domain and email, and set up backups and updates.
- A guide for engineers and team leads deploying Plane with a local hosting provider or on the company's internal network.
- The key thing is data: database and file backups must run on a schedule and be stored at another location; otherwise a server failure will wipe out everything, backups included.
- First step: decide which edition to install: the free Community Edition, or Commercial if you will soon need single sign-on and advanced permissions.
New to the topic? Start with the basics: What Is a Task Tracker and How to Choose One for Your Team
Plane installs on your own server with Docker in one evening: the setup.sh script for Community Edition or the prime-cli installer for Commercial. A production installation needs a few more steps, without which the system will not survive its first incident: replace the default passwords in plane.env, set up a domain and SMTP, automate database and file backups, and rehearse an upgrade.
This guide is for DevOps engineers, system administrators and team leads in Kazakhstan who are deploying Plane on a virtual machine with a local hosting provider or inside their own perimeter. All commands are taken from Plane’s official documentation as of October 2026. Check the current version of the documentation before installing: scripts and menu options change from release to release.
Community or Commercial: which to install
Plane has three self-hosted editions. Community Edition is open source under AGPL-3.0, free, and matches the Free cloud plan in features. Commercial is a closed-source edition with full feature parity with the cloud: it starts on a free plan with 12 seats per workspace, and paid features are enabled with a license key. Airgapped is a version of Commercial for networks without internet access.
An important detail: to move to a paid plan, you first need to switch to Commercial Edition. If you are fairly sure you will need SSO or advanced permissions within six months, it makes sense to install Commercial from the start. A detailed comparison of editions and a cost calculation are in our article on which Plane edition to choose.
Plane can also be installed on Kubernetes. That makes sense if the company already has a cluster and a team that maintains it. This guide covers Docker Compose on a single virtual machine: such an installation is enough for most small and mid-sized teams, and one engineer can maintain it.
Server requirements and preparation
| Parameter | Documented minimum | What we recommend for production |
|---|---|---|
| CPU | 2 cores, x64 or ARM64 | 4 cores for teams of 25+ people |
| RAM | 4 GB | 8 GB, as Plane recommends |
| OS | Ubuntu, Debian, CentOS, Amazon Linux, macOS, Windows with WSL2 | An LTS version of Ubuntu or Debian |
| Docker | A recent version of Docker Compose | Docker Engine from the official script |
| Network | Ports 80 and 443 | Domain, TLS, unnecessary ports closed |
| Disk | — | Headroom for attachments and local backups, a separate volume for data |
Before installing, prepare:
- A virtual machine with a hosting provider in Kazakhstan or in your own data center.
- A domain or subdomain, for example
tasks.company.kz, with an A record pointing to the server. - SSH access as root or as a user with sudo.
- SMTP for notifications: corporate email or an email service.
- A place to store backup copies outside this server.
Kazakhstan context. On a server with a Kazakhstani hosting provider, data is stored in the country, and you pay in tenge under a contract. Keep in mind that installation and upgrades download scripts from GitHub and images from Docker registries. If the security team blocks the server’s internet access, the standard installation will not work: you need the Airgapped edition with updates from your own registry.
Installation
Community Edition via setup.sh
Install Docker if you do not have it yet:
curl -fsSL https://get.docker.com | sh -
Create an installation folder and download the script:
mkdir plane-selfhost
cd plane-selfhost
curl -fsSL -o setup.sh https://github.com/makeplane/plane/releases/latest/download/setup.sh
chmod +x setup.sh
./setup.sh
The script shows a menu: Install, Start, Stop, Restart, Upgrade, View Logs, Backup Data, Exit. Choose 1 (Install). The script creates a plane-app folder and downloads docker-compose.yaml and plane.env into it. Then exit the menu, edit plane.env (see the next section), run ./setup.sh again and choose 2 (Start).
Commercial Edition via prime-cli
Connect to the server as root or a sudo user and run the installer:
curl -fsSL https://prime.plane.so/install/ | sh -
The installer asks for a domain in domain.tld or subdomain.domain.tld format and offers a mode. Express installs the default configuration. Advanced lets you specify an external database, Redis and file storage, and the documentation strongly recommends it for production. After the successful installation message, activate your license key if you bought a paid plan.
Configuring plane.env
In Community Edition, you need to go through plane.env before the first launch. Stop the services before each change to the file.
| Variable | Default | What to set |
|---|---|---|
WEB_URL |
http://localhost |
The full address, for example https://tasks.company.kz |
CORS_ALLOWED_ORIGINS |
http://localhost |
The same address as in WEB_URL |
APP_DOMAIN |
localhost |
Your domain without the protocol |
LISTEN_HTTP_PORT, LISTEN_HTTPS_PORT |
80, 443 |
Keep or change if the ports are taken |
POSTGRES_PASSWORD |
plane |
A long random password |
RabbitMQ password (RABBITMQ_*) |
plane |
A long random password; check the variable name against your plane.env |
AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY |
access-key, secret-key |
Your own keys for MinIO |
SECRET_KEY |
not set | A random string, stored together with backups |
FILE_SIZE_LIMIT |
5242880 (5 MB) |
Increase if large files are attached to tasks |
DATABASE_URL, REDIS_URL |
empty | Fill in if the database and Redis are external |
Two rules. Do not keep the default passwords: they are published in the documentation. And store plane.env in a secrets manager: without it, restoring a database backup is harder.
First login and instance setup
Open the address from WEB_URL. On the “Let’s secure your instance” screen, enter an email and password: according to Plane’s documentation, whoever brings up the instance first becomes its administrator. After that, the /god-mode panel opens.
In the admin panel, do the following in order:
- Set the instance name and decide whether to keep telemetry.
- Configure SMTP. The documentation recommends doing this in the interface rather than through the environment file.
- In the authentication section, disable sign-up without an invitation and enable the login methods you need, including SSO if it is available in your edition.
- Restrict workspace creation to the administrator only.
Then create a workspace and the first project, and invite the pilot team. If you are moving from Jira, Plane’s importer will transfer tasks, comments, attachments, sprints and users. The migration plan is covered in our article on migrating from Jira to Plane.
PostgreSQL and file backups
Plane consists of several containers. Not all of them need backups, but losing any of the three data stores is painful.
| Component | Responsible for | What to back up |
|---|---|---|
plane-db (PostgreSQL) |
Tasks, projects, users, comments, pages | Mandatory, daily |
plane-minio (file storage) |
Attachments, images, files in descriptions | Mandatory, together with the database |
plane-redis |
Cache and service data | Included in the built-in backup, lower criticality |
plane-mq (RabbitMQ) |
Background job queue | Not required |
api, worker, beat-worker |
Backend and scheduled background jobs | Not required, restored from images |
web, space, admin, live |
Interface, public pages, admin panel, real-time collaboration | Not required |
proxy |
Incoming requests and TLS | Not required, but store certificates separately if you use your own TLS setup |
plane.env |
Configuration and secrets | Mandatory, manually |
In Community Edition, run ./setup.sh and choose 7 (Backup Data). The script saves pgdata.tar.gz, redisdata.tar.gz and uploads.tar.gz to the plane-app/backup/<timestamp> folder. For restoring, the documentation provides a separate script:
curl -fsSL -o restore.sh https://raw.githubusercontent.com/makeplane/plane/refs/heads/preview/deployments/cli/community/restore.sh
chmod +x restore.sh
./restore.sh <folder with *.tar.gz archives>
./setup.sh start
Before restoring, Plane must be installed, started and then stopped.
In Commercial, backups are made with sudo prime-cli backup, and archives are stored in /opt/plane/backups by default. To restore, use sudo prime-cli restore; it overwrites the current data, so first make sure you have selected the right archive. In both editions, copy the plane.env file (in Commercial it is in /opt/plane) manually.
Remember that a backup on the same server does not protect against losing the server itself. If the hosting provider’s disk fails or the virtual machine is deleted by mistake, the local archive folder will disappear along with the data.
What the built-in scripts lack and you need to add yourself: scheduled runs via cron, copying archives to another location, and testing a restore on a separate machine at least once a quarter.
Upgrades and monitoring
The Community Edition upgrade procedure:
- Make a backup.
- Download the latest
setup.shwith the same command used for installation. - Run
./setup.shand choose5(Upgrade). - Compare
variables-upgrade.envwith yourplane.envand move over any new variables. The script does not overwriteplane.envitself. - Start the services with option
2(Start) and check login, task creation and file upload.
These instructions apply to versions 0.14.0 and later. Older versions first need a separate upgrade to 0.14.0. In Commercial, upgrades take two commands: sudo prime-cli update-cli and sudo prime-cli upgrade.
A simple set is enough for monitoring: an external availability check of the address from WEB_URL, an alert on disk and memory usage, and a daily check that a fresh backup has appeared. View service logs with option 6 (View Logs) in the setup.sh menu.
Common issues
- Login does not work or requests fail with CORS errors. Check that
WEB_URL,CORS_ALLOWED_ORIGINSandAPP_DOMAINpoint to the same address with the correct protocol. - Services do not start. Often ports 80 or 443 are already taken by another web server. Free them up or change
LISTEN_HTTP_PORTandLISTEN_HTTPS_PORT. - Emails do not arrive. SMTP is not configured in
/god-mode, or the hosting provider blocks outgoing mail ports. - Attachments do not upload. The file is larger than
FILE_SIZE_LIMIT, or the MinIO keys are set incorrectly. - Something broke after an upgrade. New variables from
variables-upgrade.envwere not moved over. Compare the files and restart. - The system is slow. There is less than the recommended 8 GB of RAM, and the team has grown. Add resources or move the database to a separate server.
How we do it
We do not start with installation. First comes a diagnostic: how many people will use Plane, which edition is needed, where the server will be and who will own it. Then we install Plane on a server in Kazakhstan, replace the secrets, and set up TLS, SMTP, SSO, scheduled backups with a copy at another location, and monitoring. We run a pilot with one team and only after it move the others over.
Details are on our Jira and Plane task tracker implementation page. You can also order server maintenance there if you do not have your own DevOps engineer.
Sources. Official Plane documentation (Docker Compose installation, environment variables, backup and restore, upgrades, admin panel, editions) and the project repository on GitHub. Data as of October 2026.
Terms in plain words
- Docker and Docker Compose
- A way to run software in ready-made isolated 'containers'. Compose brings up all parts of Plane with one command on one server, so a single engineer can maintain the installation.
- Self-hosted
- Software that a company installs on its own server instead of using the vendor's cloud. The data stays with you, but installation, backups and updates are also on you.
- AGPL-3.0
- The open source license under which Community Edition is released. It allows you to install and use Plane yourself for free; if you modify the code and provide network access to it, you must publish the changes.
- Airgapped
- A Plane edition for networks completely cut off from the internet. It is needed when the security team forbids the server from reaching outside; updates then come from the company's own image registry.
- SMTP
- The protocol for sending email. Plane uses it to send notifications and invitations; without SMTP configured, employees will not receive emails.
- SSO (Single Sign-On)
- Single sign-on: an employee logs into Plane with the same account they use for other corporate systems. In Plane, this feature is available in the paid Commercial plans.
- plane.env
- Plane's settings file: site address, database and storage passwords, secret key. It must be filled in before launch and stored separately; otherwise restoring a backup is harder.
- PostgreSQL backup
- A backup copy of Plane's main database, which holds tasks, projects, users and comments. It is made daily together with a copy of attachments and verified with a test restore.
FAQ
Quick answers
What are Plane's server requirements?
According to Plane's documentation, the minimum is 2 CPU cores (x64 or ARM64) and 4 GB of RAM, with 8 GB recommended for production. Supported systems include Ubuntu, Debian, CentOS, Amazon Linux, macOS and Windows via WSL2. You need a recent version of Docker Compose.
How do I install Plane Community Edition with Docker?
Install Docker, download the setup.sh script from Plane's GitHub releases, run it and choose option 1 (Install). The script creates a plane-app folder with docker-compose.yaml and plane.env. Edit plane.env, run setup.sh again and choose option 2 (Start).
How is installing Commercial different from Community?
Commercial is installed with a single command via the prime.plane.so installer and managed with the prime-cli utility. The installer offers an Express mode with default settings and an Advanced mode with an external database, Redis and storage. Commercial starts on a free plan with 12 seats per workspace, and paid features are enabled with a license key.
How do I back up Plane?
In Community Edition, run setup.sh and choose option 7 (Backup Data): the script saves PostgreSQL, Redis and uploaded file archives to a timestamped backup folder. Commercial uses the sudo prime-cli backup command. In both editions, copy the plane.env file manually.
How do I upgrade Plane installed with Docker?
Make a backup, download the latest setup.sh and choose option 5 (Upgrade). The plane.env file is not overwritten, but new variables will appear in variables-upgrade.env, and you need to move them over manually. In Commercial, upgrades are done with sudo prime-cli update-cli and sudo prime-cli upgrade.
Where is the Plane admin panel after installation?
The instance admin panel is available at /god-mode. Whoever completes the instance security step first becomes the administrator. That is where you configure SMTP, login methods, disabling self-registration and workspace creation.
Can Plane be installed on a server in Kazakhstan?
Yes, Plane runs on any virtual machine with Docker, including those from Kazakhstani hosting providers. This keeps data in the country. For networks without internet access, there is a separate Airgapped edition.
Related services
How Gotomarket helps with this
Jira and Plane task tracker implementation in Kazakhstan
Jira, Plane and other task tracker implementation in Kazakhstan: process audit, workflow design, Jira-to-Plane migration, self-hosting on local servers, team training.
About the service 02Twenty CRM and amoCRM implementation in Kazakhstan
Twenty CRM and amoCRM implementation for IT and B2B companies in Kazakhstan: pipeline, import, self-hosting on local servers, integrations, Plane, Jira and AI.
About the service 03Business automation and AI in Kazakhstan
Business automation in Kazakhstan: Jira and Plane task trackers, CRM implementation, integrations, AI website bots, employee assistants, Chat with Data and support automation.
About the service