OpenProject development setup via docker

The quickest way to get started developing OpenProject is to use the docker setup.

Setup

1) Checkout the code

First you will need to checkout the code as usual.

git clone https://github.com/opf/openproject.git

This will checkout the dev branch in openproject. Change into that directory.

If you have OpenProject checked out already make sure that you do not have a config/database.yml as that will interfere with the database connection inside of the docker containers.

2) Execute the setup

export OPENPROJECT_HOME=`pwd`

bin/compose up

This process can take quite a long time on the first run where all gems are installed for the first time. However, these are cached in a docker volume. Meaning that from the 2nd run onwards it will start a lot quicker.

Wait until you see frontend_1 | : Compiled successfully. and backend_1 | => Rails 6.0.2.2 application starting in development http://0.0.0.0:3000 in the logs. This means both frontend and backend have come up successfully. You can now access OpenProject under http://localhost:3000.

Again the first request to the server can take some time too. But subsequent requests will be a lot faster.

Changes you make to the code will be picked up automatically. No need to restart the containers.

Docker

You can stop the processes via Ctrl + C. You can also run everything in the background by adding the -d option as in bin/compose up -d. In that case you’ll still be able to see the logs using docker logs with the respective container name. You can see the started containers using docker ps.

Volumes

There are volumes for

  • the attachments (_opdata)
  • the database (_pgdata)
  • the bundle (rubygems) (_bundle)

This means these will stay between runs even if you stop and restart the containers. If you want to reset the data you can delete the docker volumes via docker volume rm.

Local files

Running the docker images will change some of your local files in the mounted code directory. The tmp directory will be deleted on start of the backend container. The file frontend/npm-shrinkwrap.json may be modified. You can just reset these changes if you want to commit something or pull the latest changes.