openproject Documentation

OpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile...

15,750 stars Ruby Ruby 1 file ยท ~2,177 tokens #agile-development#angular#bcf#boards#bug-tracker#gantt#gantt-chart#ifc
RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy openproject on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name openproject -p 3000:3000 --restart always openproject/dev:latest
Configured Services & Ports
โš™๏ธ backend
image: openproject/dev:latest
๐Ÿ”Œ Ports: ${PORT:-3000}:3000
โš™๏ธ worker
image: openproject/dev:latest
โš™๏ธ frontend
image: build locally
๐Ÿ”Œ Ports: ${FE_PORT:-4200}:4200
โš™๏ธ db
image: postgres:17
โš™๏ธ hocuspocus
image: node:24-alpine
โš™๏ธ cache
image: memcached
โš™๏ธ db-test
image: postgres:17
โš™๏ธ hocuspocus-test
image: node:24-alpine
โš™๏ธ frontend-test
image: build locally
โš™๏ธ backend-test
image: build locally
โš™๏ธ selenium-hub
image: selenium/hub:4
โš™๏ธ chrome
image: selenium/node-chrome:4
โš™๏ธ firefox
image: selenium/node-firefox:4
โš™๏ธ cuprite-chrome
image: ghcr.io/browserless/chrome:latest
docker-compose.yml
yaml (docker-compose.yml)
networks:
  network:
  testing:
  # `external` joins the gateway network managed by the TLS proxy stack
  # (traefik + step). Used by services that need to be reachable under
  # https://*.${OPENPROJECT_DOCKER_DEV_TLD:-local}. First step toward
  # TLS-by-default for dev โ€” currently hocuspocus uses it; backend and
  # frontend will follow.
  external:
    name: gateway
    external: true

volumes:
  downloads-test:
  pgdata:
  tmp:
  opdata:
  bundle:
  pgdata-test:
  tmp-test:
  fedata-test:

x-op-restart-policy: &restart_policy
  restart: unless-stopped
x-op-build: &build
  context: .
  dockerfile: ./docker/dev/backend/Dockerfile
  args:
    DEV_UID: $DEV_UID
    DEV_GID: $DEV_GID
x-op-image: &image
  image: openproject/dev:latest
x-op-frontend-build: &frontend-build
  context: .
  dockerfile: ./docker/dev/frontend/Dockerfile
  args:
    DEV_UID: $DEV_UID
    DEV_GID: $DEV_GID
x-op-backend: &backend
  tty: true
  stdin_open: true
  build:
    <<: *build
    target: develop
  <<: [*image, *restart_policy]
  environment:
    DATABASE_URL: postgresql://${DB_USERNAME:-postgres}:${DB_PASSWORD:-postgres}@${DB_HOST:-db}:${DB_PORT:-5432}/${DB_DATABASE:-openproject}?pool=100
    LOCAL_DEV_CHECK: "${LOCAL_DEV_CHECK:?The docker-compose file for OpenProject has moved to https://github.com/opf/openproject-docker-compose}"
    OPENPROJECT_CACHE__MEMCACHE__SERVER: cache:11211
    OPENPROJECT_EDITION: ${OPENPROJECT_EDITION:-standard}
    OPENPROJECT_RAILS__CACHE__STORE: file_store
    OPENPROJECT_RAILS__RELATIVE__URL__ROOT: "${OPENPROJECT_RAILS__RELATIVE__URL__ROOT:-}"
    OPENPROJECT_SSRF_PROTECTION_IP_ALLOWLIST: 0.0.0.0/0,::0/0 # disabling SSRF in dev to not interfere with local integrations (Nextcloud etc.)
    OPENPROJECT_COLLABORATIVE__EDITING__HOCUSPOCUS__URL: ${OPENPROJECT_COLLABORATIVE__EDITING__HOCUSPOCUS__URL:-wss://hocuspocus.local}
    OPENPROJECT_COLLABORATIVE__EDITING__HOCUSPOCUS__SECRET: ${OPENPROJECT_COLLABORATIVE__EDITING__HOCUSPOCUS__SECRET:-secret12345}
    OPENPROJECT_WEB_MAX__THREADS: 1
    OPENPROJECT_WEB_MIN__THREADS: 1
    OPENPROJECT_WEB_WORKERS: 0
    PIDFILE: /home/dev/openproject/tmpfs/pids/server.pid
    RAILS_ENV: development
  volumes:
    - ".:/home/dev/openproject"
    - "opdata:/var/openproject/assets"
    - "bundle:/usr/local/bundle"
    - "tmp:/home/dev/openproject/tmp"
  tmpfs:
    - /home/dev/openproject/tmpfs/pids:uid=$DEV_UID,gid=$DEV_GID
  networks:
    - network
x-op-hocuspocus: &hocuspocus
  # On macOS you may need to specify the platform in your `docker-compose.override.yml`:
  # platform: linux/amd64
  image: node:24-alpine
  restart: unless-stopped
  environment:
    - SECRET=secret12345
    - NODE_TLS_REJECT_UNAUTHORIZED=0
  working_dir: /app
  command: sh -c "npm run dev"
  volumes:
    - ./extensions/op-blocknote-hocuspocus:/app
services:
  backend:
    <<: *backend
    command: run-app
    depends_on:
      - db
      - cache
      - frontend
      - hocuspocus
    ports:
      - "${PORT:-3000}:3000"

  worker:
    <<: *backend
    command: bundle exec good_job start
    depends_on:
      - db
      - cache

  frontend:
    build:
      <<: *frontend-build
    command: "node --max_old_space_size=8096 ./node_modules/@angular/cli/bin/ng serve --host 0.0.0.0"
    volumes:
      - ".:/home/dev/openproject"
      - "${CKEDITOR_BUILD_DIR:-./frontend/src/vendor/ckeditor/}:/home/dev/openproject/frontend/src/vendor/ckeditor/"
    networks:
      - network
    environment:
      __VITE_ADDITIONAL_SERVER_ALLOWED_HOSTS: "openproject-assets.${OPENPROJECT_DOCKER_DEV_TLD:-local}"
    ports:
      - "${FE_PORT:-4200}:4200"

  db:
    image: postgres:17
    <<: *restart_policy
    stop_grace_period: "3s"
    volumes:
      - "pgdata:/var/lib/postgresql/data"
    environment:
      POSTGRES_USER: ${DB_USERNAME:-postgres}
      POSTGRES_PASSWORD: ${DB_PASSWORD:-postgres}
      POSTGRES_DB: ${DB_DATABASE:-openproject}
    networks:
      - network

  hocuspocus:
    <<: *hocuspocus
    networks:
      - network
      - external
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.hocuspocus.rule=Host(`hocuspocus.${OPENPROJECT_DOCKER_DEV_TLD:-local}`)"
      - "traefik.http.routers.hocuspocus.entrypoints=websecure"
      - "traefik.http.services.hocuspocus.loadbalancer.server.port=1234"

  cache:
    image: memcached
    <<: *restart_policy
    networks:
      - network

  ######### Testing stuff below ############

  db-test:
    image: postgres:17
    stop_grace_period: "3s"
    volumes:
      - "pgdata-test:/var/lib/postgresql/data"
    environment:
      POSTGRES_DB: openproject
      POSTGRES_USER: openproject
      POSTGRES_PASSWORD: openproject
    networks:
      - testing

  hocuspocus-test:
    <<: *hocuspocus
    networks:
      - testing

  frontend-test:
    build:
      <<: *frontend-build
    command: "npm run serve"
    volumes:
      - ".:/home/dev/openproject"
      - "fedata-test:/home/dev/openproject/public/assets/frontend"
    environment:
      PROXY_HOSTNAME: backend-test
      CHROME_BIN: chromium
      FE_PORT: 4200
      FE_HOST: frontend-test
    networks:
      - testing
    healthcheck:
      test: ["CMD", "curl", "-f", "http://frontend-test:4200/"]

  backend-test:
    build:
      <<: *build
      target: test
    command: setup-tests
    hostname: backend-test
    networks:
      - testing
    depends_on:
      db-test:
        condition: service_started
      selenium-hub:
        condition: service_started
      frontend-test:
        condition: service_healthy
      cuprite-chrome:
        condition: service_started
      hocuspocus-test:
        condition: service_started
    environment:
      RAILS_ENV: test
      OPENPROJECT_TESTING_WITH_DOCKER: "true"
      OPENPROJECT_RAILS__RELATIVE__URL__ROOT: "${OPENPROJECT_RAILS__RELATIVE__URL__ROOT:-}"
      DATABASE_URL: postgresql://openproject:openproject@db-test/openproject
      DATABASE_CLEANER_ALLOW_REMOTE_DATABASE_URL: "true"
      SELENIUM_GRID_URL: http://selenium-hub:4444/wd/hub
      CHROME_WS_URL: ws://cuprite-chrome:3000/chrome
      CAPYBARA_SERVER_PORT: 3000
      CAPYBARA_BIND_ADDRESS: "0.0.0.0"
      CAPYBARA_APP_HOSTNAME: backend-test
      OPENPROJECT_EMAIL__DELIVERY__METHOD: test
      OPENPROJECT_CLI_PROXY: http://frontend-test:4200
      OPENPROJECT_TESTING_NO_HEADLESS: "true"
      OPENPROJECT_TESTING_AUTO_DEVTOOLS: "true"
    volumes:
      - ".:/home/dev/openproject"
      - "fedata-test:/home/dev/openproject/public/assets/frontend"
      - "opdata:/var/openproject/assets"
      - "bundle:/usr/local/bundle"
      - "tmp-test:/home/dev/openproject/tmp"
      - "./tmp/capybara:/home/dev/openproject/tmp/capybara"

  # https://vitobotta.com/2019/09/04/rails-parallel-system-tests-selenium-docker/
  selenium-hub:
    image: selenium/hub:4
    container_name: selenium-hub
    hostname: selenium-hub
    environment:
      GRID_MAX_SESSION: "${CI_JOBS:-4}"
    depends_on:
      - chrome
      - firefox
    networks:
      - testing

  chrome:
    image: selenium/node-chrome:4
    volumes:
      - /dev/shm:/dev/shm
      - "downloads-test:/home/seluser/Downloads"
    networks:
      - testing
    shm_size: 2g
    environment:
      SE_EVENT_BUS_HOST: selenium-hub
      SE_EVENT_BUS_PUBLISH_PORT: 4442
      SE_EVENT_BUS_SUBSCRIBE_PORT: 4443
      SCREEN_WIDTH: 1920
      SCREEN_HEIGHT: 1080
      # in case we want multiple sessions per container
      NODE_MAX_INSTANCES: "${CI_JOBS:-4}"
      NODE_MAX_SESSION: "${CI_JOBS:-4}"

  firefox:
    image: selenium/node-firefox:4
    volumes:
      - /dev/shm:/dev/shm
      - "downloads-test:/home/seluser/Downloads"
    networks:
      - testing
    shm_size: 2g
    environment:
      SE_EVENT_BUS_HOST: selenium-hub
      SE_EVENT_BUS_PUBLISH_PORT: 4442
      SE_EVENT_BUS_SUBSCRIBE_PORT: 4443
      SCREEN_WIDTH: 1920
      SCREEN_HEIGHT: 1080
      # in case we want multiple sessions per container
      NODE_MAX_INSTANCES: "${CI_JOBS:-4}"
      NODE_MAX_SESSION: "${CI_JOBS:-4}"

  cuprite-chrome:
    # Currently, Apple M1 is only supported in unnumbered "latest" versions.
    # See https://github.com/browserless/chrome/issues/1393
    image: ghcr.io/browserless/chrome:latest
    networks:
      - testing
    environment:
      HOST: cuprite-chrome
      # Set connection timeout to avoid timeout exception during debugging
      # https://docs.browserless.io/docs/docker.html#connection-timeout
      CONNECTION_TIMEOUT: 600000

File: README.md

OpenProject

We empower teams to achieve great things together for the good of society.

OpenProject is a web-based open source project management software for teams and organizations that require transparency, flexibility, and data sovereignty.
Manage projects, portfolios, products, tasks, bugs, agile workflows, roadmaps, and team collaboration in a single platform. OpenProject can be self-hosted and is designed for organizations looking for an open source enterprise-ready alternative to tools such as Jira, MS Project, Monday, Asana, YouTrack while maintaining full control over their data and infrastructure.

OpenProject is trusted by organizations worldwide, including enterprises, public institutions, and highly regulated industries.

OpenProject's key features include:

More information can be found on our website.

Start now with OpenProject

Report bugs

You found a bug? Please report it to our OpenProject Community. Thank you!

Contribute

OpenProject is supported by its Community members, both companies and individuals.

We are always looking for new members to our Community, so if you are interested in improving OpenProject we would be glad to welcome and support you getting into the code. There are guides as well, e.g. a Quick Start for Developers, but don't hesitate to simply contact us if you have questions.

Working on OpenProject comes with the satisfaction of working on a widely used open source application.

Also, if you do not want to be limited to working on open source in your free time, OpenProject GmbH, the company contributing to the OpenProject development, is hiring.

Stay in contact

Here you can find our contact information. As we regularly update OpenProject, we recommend staying in touch โ€“ here is where you can find us:

Security / responsible disclosure

We take security very seriously at OpenProject. We value any kind of feedback that
will keep our Community secure. If you happen to come across a security issue we urge
you to disclose it to us privately to allow our users and Community enough time to
upgrade. Security issues will always take precedence over anything else in the pipeline.

For more information on how to disclose a security vulnerability, please see this page.

License

OpenProject is licensed under the terms of the GNU General Public License version 3.
See COPYRIGHT and LICENSE files for details.

Credits

Icons

Thanks to Vincent Le Moign and his fabulous Minicons icons on webalys.com.

OpenProject icon font

Published and created by the OpenProject Foundation (OPF) under Creative Commons Attribution 3.0 Unported License
with icons from the following sources
Minicons Free Vector Icons Pack and
User Interface Design framework both by webalys

Creative Commons License

OpenProject Icon Font by the OpenProject Foundation (OPF) is licensed under Creative Commons Attribution 3.0 Unported License
and Free for both personal and commercial use. You can copy, adapt, remix, distribute or transmit it.

Under this condition: provide a mention of the "OpenProject Foundation" and a link back to OpenProject www.openproject.org.


File: docs/README.md


OpenProject Documentation

[!NOTE]
For enhanced usability, access the OpenProject documentation at www.openproject.org/docs/.

Installation

Get started with installing and upgrading OpenProject using our Installation Guide starting point.

The guides for packaged and Docker-based installations are provided.

Upgrading

The detailed upgrade instructions for our packaged installer are located on the official website.

The guides for upgrading are provided.

Operation

User Guides

Please see our User Guide pages for detailed documentation on the functionality of OpenProject.

Use Cases

Please see our Use Cases section for detailed how-to guides and step-by-step instruction on how to set up a variety of common cases and views.

Development

APIv3 documentation sources

The documentation for APIv3 is written in the OpenAPI Format and its sources are being built from the entry point openapi-spec.yml.