Tutorial

OpenProject on VPS: Gantt, milestones and time tracking

Deployment7 min read13 steps

Jira Data Center has been forcing migrations to the Cloud since 2024, with pricing grids revised upward every quarter. For agencies that bill by the hour and coordinate multiple teams, paying per seat is no longer sustainable. OpenProject addresses this need precisely: it is an enterprise project management tool — native Gantt, time sheets, contractual milestones, wiki — distributed under the GPLv3 license, making it self-hostable with no licensing costs. This guide explains how to deploy it on a VPS using the official Docker image, place it behind nginx with TLS, and get started with the first project.

Contents· OpenProject, Plane and Kaneo: three tools, three positions1/4
  1. 01OpenProject, Plane and Kaneo: three tools, three positions
  2. 02Comparatif
  3. 03Create your first project and configure the Gantt
  4. 04Troubleshooting — common errors

Why agencies are looking for a Jira alternative in 2026. The migration to Jira Cloud has brought several successive price increases: end-of-life for Data Center announced, end of perpetual Server licenses, and Cloud pricing revisions in 2024 and again in 2026. For a ten-person agency, the annual cost of a cloud PM tool — Jira, Asana, Monday — routinely exceeds 3,000 euros. OpenProject Community edition, self-hosted on a VPS, reduces this line item to zero outside infrastructure costs.

  • Interactive Gantt chart with task dependencies and critical path
  • Time tracking per task and per project, exportable as CSV for billing
  • Milestones and contractual deliverables attached to the roadmap
  • Integrated wiki for project documentation, without a third-party tool
  • Version and release management for software projects
  • Granular role-based access control (viewer, contributor, project manager, administrator)
  • GPLv3 license: the source code is auditable and no telemetry is imposed

Prerequisites: 2 GB RAM minimum. OpenProject runs on Ruby on Rails server-side, which explains its higher memory footprint compared to tools like Plane or Vikunja. In practice, 2 GB of RAM is sufficient for a team of five to fifteen people with a few active projects. A 2 vCPU / 2 GB VPS handles the load. For twenty or more people, moving to 4 GB avoids slowness when loading complex Gantt charts. The disk should provision at least 20 GB for PostgreSQL, attachments and logs.

OpenProject, Plane and Kaneo: three tools, three positions

Three open-source project management tools, three different approaches. The comparison below helps choose based on team needs.

Comparatif

Scroll the table

CritèreOpenprojectPlaneKaneo
Primary paradigmEnterprise PM: Gantt, milestones, time sheets, budgetsAgile PM: cycles, backlogs, sprints, custom statesVisual Kanban: cards, columns, labels
Native GanttYes, with dependencies and critical pathNo (partial roadmap, without dependencies)No
Time trackingYes, per task and per projectNot in Community versionNo
TargetAgencies, teams with contractual milestones, multi-year projectsAgile product teams, small startupsTeams wanting a minimal Kanban
Minimum RAM2 GB1 GB512 MB
LicenseGPLv3AGPL v3MIT
  1. Prepare the VPS

    Connect via SSH, update packages and install Docker with the Compose plugin: apt update && apt install -y docker.io docker-compose-plugin. Verify with docker compose version (v2.x expected).

  2. Fetch the official Compose file

    Clone the official deployment repository: git clone https://github.com/opf/openproject-deploy.git /opt/openproject && cd /opt/openproject/compose. This repository maintains the docker-compose.yml file and the .env file recommended by the OpenProject team.

  3. Configure environment variables

    Copy the example: cp .env.example .env then edit .env. Required variables: OPENPROJECT_HOST__NAME=your-domain.com (double underscore), OPENPROJECT_HTTPS=true, and SECRET_KEY_BASE generated by openssl rand -hex 64. Also set POSTGRES_PASSWORD and OPENPROJECT_DB_PASSWORD to the same strong value.

  4. Start the containers

    Run docker compose up -d. The openproject/community:latest image downloads approximately 600 MB. The first start takes two to four minutes for the database migrations to run. Monitor with docker compose logs -f web until you see Listening on tcp://0.0.0.0:8080.

  5. Verify the application responds

    From the VPS: curl -s -o /dev/null -w "%{http_code}" http://localhost:8080. A 200 or 302 code confirms the application is live. At this stage it is only accessible locally — the nginx reverse proxy follows in the next step.

  1. Install nginx and certbot

    On Debian/Ubuntu: apt install -y nginx certbot python3-certbot-nginx. Ensure the DNS for your domain points to the VPS IP before continuing.

  2. Create the nginx vhost

    Create /etc/nginx/sites-available/openproject with: server { listen 80; server_name your-domain.com; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto https; proxy_read_timeout 120s; client_max_body_size 100M; } }. Enable it: ln -s /etc/nginx/sites-available/openproject /etc/nginx/sites-enabled/ && nginx -t && systemctl reload nginx.

  3. Obtain the TLS certificate

    Run certbot --nginx -d your-domain.com. Certbot modifies the vhost to listen on port 443, adds ssl_certificate directives and configures HTTP→HTTPS redirection automatically. The certificate renews via the certbot.timer systemd timer.

Create your first project and configure the Gantt

Once OpenProject is deployed and accessible, these steps guide creating the first project and enabling the Gantt view.

  1. Access the interface and change the admin password

    Open https://your-domain.com in a browser. Log in with admin / admin and change the password immediately. Then configure the application URL in Administration > Settings > General if it was not automatically detected from OPENPROJECT_HOST__NAME.

  2. Create a project and invite members

    Click New Project, choose a name, enable the useful modules: Work Packages, Gantt, Time Tracking, Wiki. Invite members from the Settings > Members tab by assigning them a role (Member, Project Manager, etc.).

  3. Create tasks and define dependencies

    In the Work Package list view, create the first tasks with start and end dates. Switch to Gantt view to visualize the timeline. To create a dependency, open a task and fill in the Precedes field with the parent task number.

  4. Configure milestones

    A milestone is a task of type Milestone. Create one from the Gantt view (type Milestone) or from the list by changing the type. Milestones appear as diamonds on the chart — useful for marking contractual deliverables.

  5. Enable time sheets

    In Administration > Settings > Work Logs, enable the module. Each member can then log time via the stopwatch button on an open task. Aggregated reports by project and period are accessible from Reports > Work Logs.

Weekly PostgreSQL backups: add this cron on the VPS to export the database weekly: 0 3 * * 0 docker exec openproject_db pg_dump -U openproject openproject | gzip > /var/backups/openproject_$(date +%Y%m%d).sql.gz. Keep the last seven archives with find /var/backups -name 'openproject_*.sql.gz' -mtime +7 -delete. Test restoration once a month in an isolated environment.

Troubleshooting — common errors

The most common errors during OpenProject deployment or first use, with their solutions.

  • 502 Bad Gateway on first start: Rails migrations are not complete. Wait two to five minutes and check docker compose logs web to confirm listening on port 8080.
  • Blank page or 500 error: SECRET_KEY_BASE is empty or incorrectly set. Regenerate with openssl rand -hex 64 and restart with docker compose up -d --force-recreate.
  • Rejected attachments: nginx default size limit is 1 MB. Increase client_max_body_size in the vhost (100 MB recommended for project files).
  • Email delivery issues: configure OPENPROJECT_SMTP_* variables in .env (SMTP host, port 587, credentials). Without SMTP configuration, member invitations are not sent.
  • Image update: docker compose pull && docker compose up -d. OpenProject runs migrations automatically on startup. Make a database backup before each major update.

Sovereign adoption: the Dutch case. In September 2026, the Dutch government published the specifications for DAWO (Digitaal Autonome Werkomgeving Overheid), a sovereign workplace environment plan based on NixOS. The selected stack includes Nextcloud for files, Element for messaging, Collabora for office documents and OpenProject for project management. This choice validates the tool's maturity for contexts where data hosting cannot be delegated to a US provider.

Going further. OpenProject covers projects with heavy Gantt and time-sheet requirements. For an agile product backlog, Plane (cycles and sprints) is a better fit. For a lightweight Kanban with minimal memory overhead, Kaneo remains the most economical option. If you manage multiple clients from a single interface, the ServOrbit agency space lets you supervise each client's VPS, access consoles and manage renewals without juggling multiple dashboards.

Manage your clients' VPS from a centralized space

The ServOrbit agency space lets you provision, monitor and renew all your clients' VPS from a single interface. Each client has their own isolated environment, and you retain full control over the infrastructure.

Need help?

Browse our help center and FAQ, or reach our team — callback, WhatsApp or email. Support in French, English and Arabic.

Message us on WhatsAppopens in a new tab