Files
openproject/docs/development/development-environment/linux/README.md
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

352 lines
11 KiB
Markdown
Raw Normal View History

---
sidebar_navigation:
title: Development setup on Debian / Ubuntu
short_title: Setup on Debian / Ubuntu
description: OpenProject development setup on Debian / Ubuntu
keywords: development setup debian ubuntu linux
---
# OpenProject development setup on Debian / Ubuntu
2019-10-17 14:39:25 +02:00
To develop OpenProject a setup similar to that for using OpenProject in production is needed.
2021-12-16 10:30:36 +01:00
This guide assumes that you have a Ubuntu 20.04 installation with administrative rights. This guide will work
2024-03-25 12:16:14 -05:00
analogous with all other distributions, but may require slight changes in the required packages. _Please, help us to
extend this guide with information on other distributions should there be required changes._
2019-10-17 14:39:25 +02:00
2024-03-25 12:16:14 -05:00
OpenProject Development Environment will be installed with a PostgreSQL database, OpenProject on-premises installation
shall NOT be present before.
2019-10-17 14:39:25 +02:00
**Please note**: This guide is NOT suitable for a production setup, but only for developing with it!
2024-03-25 12:16:14 -05:00
If you find any bugs or you have any recommendations for improving this tutorial, please, feel free to send a pull
request or comment in the [OpenProject forums](https://community.openproject.org/projects/openproject/boards).
2019-10-17 14:39:25 +02:00
2024-04-29 17:06:08 +02:00
## Prepare your environment
2019-10-17 14:39:25 +02:00
2024-03-25 12:16:14 -05:00
We need an active Ruby and Node JS environment to run OpenProject. To this end, we need some packages installed on the
system.o
2019-10-17 14:39:25 +02:00
2024-03-25 12:16:14 -05:00
CPU recommendation: 4 CPUs, Memory recommendation: 8 better 16 GB (in general we need double the amount of a normal
production installation)
```shell
2019-11-15 14:46:07 +01:00
sudo apt-get update
sudo apt-get install git curl build-essential zlib1g-dev libyaml-dev libssl-dev libpq-dev libreadline-dev
2019-10-17 14:39:25 +02:00
```
2024-04-29 17:06:08 +02:00
### Install Ruby
2019-10-17 14:39:25 +02:00
2024-03-25 12:16:14 -05:00
Use [rbenv](https://github.com/rbenv/rbenv) and [ruby-build](https://github.com/rbenv/ruby-build#readme) to install
Ruby.
You can check available ruby versions with `rbenv install --list`.
2026-03-31 11:21:01 +02:00
At the time of this writing, the latest stable version is `4.0.2`, which we also require.
We suggest you install the version we require in [.ruby-version](https://github.com/opf/openproject/blob/dev/.ruby-version).
2026-03-31 11:21:01 +02:00
Read the first line e.g. `4.0.2` and install that version.
2019-10-17 14:39:25 +02:00
2024-04-29 17:06:08 +02:00
#### Install rbenv and ruby-build
2019-10-17 14:39:25 +02:00
rbenv is a ruby version manager that lets you quickly switch between ruby versions.
2019-11-15 14:46:07 +01:00
ruby-build is an addon to rbenv that installs ruby versions.
2019-10-17 14:39:25 +02:00
```shell
2019-10-17 14:39:25 +02:00
# Install rbenv locally for the dev user
2019-11-15 14:46:07 +01:00
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
# Optional: Compile bash extensions
2019-11-15 14:46:07 +01:00
cd ~/.rbenv && src/configure && make -C src
2019-10-17 14:39:25 +02:00
# Add rbenv to the shell's $PATH.
2019-11-15 14:46:07 +01:00
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
2019-10-17 14:39:25 +02:00
# Run rbenv-init and follow the instructions to initialize rbenv on any shell
2019-11-15 14:46:07 +01:00
~/.rbenv/bin/rbenv init
# Issue the recommended command from the stdout of the last command
echo 'eval "$(rbenv init - bash)"' >> ~/.bashrc
2019-10-17 14:39:25 +02:00
# Source bashrc
2019-11-15 14:46:07 +01:00
source ~/.bashrc
2019-10-17 14:39:25 +02:00
```
2024-04-29 17:06:08 +02:00
#### Installing ruby-build
2019-10-17 14:39:25 +02:00
ruby-build is an addon to rbenv that installs ruby versions
```shell
2019-11-15 14:46:07 +01:00
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
2019-10-17 14:39:25 +02:00
```
2024-04-29 17:06:08 +02:00
#### Installing ruby
2019-10-17 14:39:25 +02:00
With both installed, we can now install ruby.
You can check available ruby versions with `rbenv install --list`.
2019-10-17 14:39:25 +02:00
We suggest you install the version we require in [.ruby-version](https://github.com/opf/openproject/blob/dev/.ruby-version).
2026-03-31 11:21:01 +02:00
Read the first line e.g. `4.0.2` and install that version.
2019-10-17 14:39:25 +02:00
```shell
# Install the required version as read from the .ruby-version file
2026-03-31 11:21:01 +02:00
rbenv install 4.0.2
2019-10-17 14:39:25 +02:00
```
2024-03-25 12:16:14 -05:00
This might take a while depending on whether ruby is built from source. After it is complete, you need to tell rbenv to
globally activate this version
2019-10-17 14:39:25 +02:00
```shell
2026-03-31 11:21:01 +02:00
rbenv global 4.0.2
2019-11-15 15:19:04 +01:00
rbenv rehash
2019-10-17 14:39:25 +02:00
```
2024-03-25 12:16:14 -05:00
You also need to install [bundler](https://github.com/bundler/bundler/), the ruby gem bundler (remark: if you run into
an error, first try with a fresh reboot).
2019-10-17 14:39:25 +02:00
2024-03-25 12:16:14 -05:00
If you get `Command 'gem' not found...` here, ensure you followed the instructions `rbenv init` command to ensure it is
loaded in your shell.
2019-11-15 15:19:04 +01:00
2024-04-29 17:06:08 +02:00
### Setup PostgreSQL database
2019-10-17 14:39:25 +02:00
Next, install a PostgreSQL database.
```shell
2019-11-15 14:46:07 +01:00
[dev@debian]# sudo apt-get install postgresql postgresql-client
2019-10-17 14:39:25 +02:00
```
Create the OpenProject database user and accompanied database.
```shell
2023-09-06 15:03:22 +02:00
sudo su - postgres
2019-10-17 14:39:25 +02:00
[postgres@ubuntu]# createuser -d -P openproject
```
2024-03-25 12:16:14 -05:00
2019-10-17 14:39:25 +02:00
You will be prompted for a password, for the remainder of these instructions, we assume its `openproject-dev-password`.
Now, create the database `openproject_dev` and `openproject_test` owned by the previously created user.
```shell
2019-10-17 14:39:25 +02:00
[postgres@ubuntu]# createdb -O openproject openproject_dev
[postgres@ubuntu]# createdb -O openproject openproject_test
# Exit the shell as postgres
[postgres@ubuntu]# exit
```
2024-04-29 17:06:08 +02:00
### Install Node.js
2019-10-17 14:39:25 +02:00
2024-03-25 12:16:14 -05:00
We will install the latest LTS version of Node.js via [nodenv](https://github.com/nodenv/nodenv). This is basically the
same steps as for rbenv:
2019-10-17 14:39:25 +02:00
2024-04-29 17:06:08 +02:00
#### Install nodenv
2019-10-17 14:39:25 +02:00
```shell
2019-10-17 14:39:25 +02:00
# Install nodenv
2019-11-15 14:46:07 +01:00
git clone https://github.com/nodenv/nodenv.git ~/.nodenv
2019-10-17 14:39:25 +02:00
# Optional: Install bash extensions
2019-11-15 14:46:07 +01:00
cd ~/.nodenv && src/configure && make -C src
2019-10-17 14:39:25 +02:00
# Add nodenv to the shell's $PATH.
2019-11-15 14:46:07 +01:00
echo 'export PATH="$HOME/.nodenv/bin:$PATH"' >> ~/.bashrc
2019-10-17 14:39:25 +02:00
# Run nodenv init and follow the instructions to initialize nodenv on any shell
2019-11-15 14:46:07 +01:00
~/.nodenv/bin/nodenv init
# Issue the recommended command from the stdout of the last command
echo 'eval "$(nodenv init -)"' >> ~/.bashrc
2019-10-17 14:39:25 +02:00
# Source bashrc
2019-11-15 14:46:07 +01:00
source ~/.bashrc
2019-10-17 14:39:25 +02:00
```
2024-04-29 17:06:08 +02:00
#### Install node-build
2019-10-17 14:39:25 +02:00
```shell
2019-11-15 14:46:07 +01:00
git clone https://github.com/nodenv/node-build.git $(nodenv root)/plugins/node-build
2019-10-17 14:39:25 +02:00
```
2024-04-29 17:06:08 +02:00
#### Install latest LTS node version
2019-10-17 14:39:25 +02:00
You can find the latest LTS version here: [nodejs.org/en/download/](https://nodejs.org/en/download/)
2025-10-27 10:36:46 +01:00
At the time of writing this is v22.21.0 Install and activate it with:
2019-10-17 14:39:25 +02:00
```shell
2025-10-27 10:36:46 +01:00
nodenv install 22.21.0
nodenv global 22.21.0
nodenv rehash
2019-10-17 14:39:25 +02:00
```
2024-04-29 17:06:08 +02:00
#### Update NPM to the latest version
```shell
npm install npm@latest -g
```
2024-04-29 17:06:08 +02:00
### Verify your installation
2019-10-17 14:39:25 +02:00
You should now have an active ruby and node installation. Verify that it works with these commands.
```shell
2019-11-15 14:46:07 +01:00
ruby --version
2026-03-31 11:21:01 +02:00
ruby 4.0.2 (2026-03-17 revision d3da9fec82) +PRISM [arm64-darwin25]
2019-10-17 14:39:25 +02:00
2019-11-15 14:46:07 +01:00
bundler --version
2026-03-31 11:21:01 +02:00
4.0.9
2019-10-17 14:39:25 +02:00
2020-04-20 07:36:47 +02:00
node --version
2025-10-27 10:36:46 +01:00
v22.21.0
2020-04-20 07:36:47 +02:00
2019-11-15 14:46:07 +01:00
npm --version
2024-03-25 12:16:14 -05:00
10.5.0
2019-10-17 14:39:25 +02:00
```
2024-04-29 17:06:08 +02:00
## Install OpenProject Sources
2019-10-17 14:39:25 +02:00
2024-03-25 12:16:14 -05:00
In order to create a pull request to the core OpenProject repository, you will want to fork it to your own GitHub
account.
This allows you to create branches and push changes and finally opening a pull request for us to review.
2024-03-25 12:16:14 -05:00
To do that, go to [github.com/opf/openproject](https://github.com/opf/openproject) and press "Fork" on the upper right
corner.
```shell
2019-10-17 14:39:25 +02:00
# Download the repository
# If you want to create a pull request, replace the URL with your own fork as described above
mkdir ~/dev
cd ~/dev
2019-11-15 14:46:07 +01:00
git clone https://github.com/opf/openproject.git
cd openproject
2019-10-17 14:39:25 +02:00
```
2024-03-25 12:16:14 -05:00
Note that we have checked out the `dev` branch of the OpenProject repository. Development in OpenProject happens in
the `dev` branch (there is no `master` branch).
2019-10-17 14:39:25 +02:00
So, if you want to develop a feature, create a feature branch from a current `dev` branch.
2024-04-29 17:06:08 +02:00
### Configure OpenProject
2019-10-17 14:39:25 +02:00
Create and configure the database configuration file in `config/database.yml` (relative to the openproject-directory.
```shell
2019-10-17 14:39:25 +02:00
[dev@debian]# vim config/database.yml
```
Now edit the `config/database.yml` file and insert your database credentials.
It should look like this (just with your database name, username, and password):
```yaml
2019-10-17 14:39:25 +02:00
default: &default
adapter: postgresql
encoding: unicode
host: localhost
username: openproject
password: openproject-dev-password
development:
<<: *default
database: openproject_dev
test:
<<: *default
database: openproject_test
```
2024-03-25 12:16:14 -05:00
To configure the environment variables such as the number of web server threads `OPENPROJECT_WEB_WORKERS`, copy
the `.env.example` to `.env` and add the environment variables you want to configure. The variables will be
automatically loaded to the application's environment.
2022-05-03 15:37:25 +02:00
2024-04-29 17:06:08 +02:00
### Finish the Installation of OpenProject
2019-10-17 14:39:25 +02:00
Install code dependencies, link plugin modules and export translation files.
2024-03-25 12:16:14 -05:00
- gem dependencies (If you get errors here, you're likely missing a development dependency for your distribution)
- node_modules
- link plugin frontend modules
- and export frontend localization files
2019-10-17 14:39:25 +02:00
```shell
bin/setup_dev
2019-10-17 14:39:25 +02:00
```
Now, run the following tasks to seed the dev database, and prepare the test setup for running tests locally.
```shell
RAILS_ENV=development bin/rails db:seed
```
2019-10-17 14:39:25 +02:00
2024-04-29 17:06:08 +02:00
### Run OpenProject through overmind
2019-10-17 14:39:25 +02:00
2024-03-25 12:16:14 -05:00
You can run all required workers of OpenProject through `overmind`, which combines them in a single tab. Optionally, you
may also
2023-05-24 17:03:51 -05:00
run `overmind` as a daemon and connect to services individually.
The `bin/dev` command will first check if `overmind` is available and run the application via `Procfile.dev`. Otherwise
it will use `foreman` if it is available.
2019-10-17 14:39:25 +02:00
```shell
2023-05-17 15:01:14 +02:00
bin/dev
2019-10-17 14:39:25 +02:00
```
2023-05-17 15:01:14 +02:00
2024-03-25 12:16:14 -05:00
The application will be available at `http://127.0.0.1:3000`. To customize bind address and port copy the `.env.example`
provided in the root of this
project as `.env` and [configure values](https://github.com/DarthSim/overmind/tree/v2.4.0#overmind-environment) as
required.
2019-10-17 14:39:25 +02:00
2024-03-25 12:16:14 -05:00
By default a worker process will also be started. In development asynchronous execution of long-running background
tasks (sending emails, copying projects,
etc.) may be of limited use and it has known issues with regards to memory (see background worker section below). To
disable the worker process:
2019-10-17 14:39:25 +02:00
```shell
2023-05-24 17:03:51 -05:00
echo "OVERMIND_IGNORED_PROCESSES=worker" >> .overmind.env
```
2019-10-17 14:39:25 +02:00
2024-03-25 12:16:14 -05:00
For more information refer to the great Overmind
documentation [usage section](https://github.com/DarthSim/overmind/tree/v2.4.0#usage).
2019-10-17 14:39:25 +02:00
You can access the application with the admin-account having the following credentials:
2024-04-29 13:52:04 +02:00
```text
Username: admin
Password: admin
```
2019-10-17 14:39:25 +02:00
2024-04-29 17:06:08 +02:00
### Run OpenProject manually
2019-10-17 14:39:25 +02:00
To run OpenProject manually, you need to run the rails server and the webpack frontend bundler to:
2024-04-29 17:06:08 +02:00
#### Rails web server
2019-10-17 14:39:25 +02:00
```shell
RAILS_ENV=development bin/rails server
2019-10-17 14:39:25 +02:00
```
This will start the development server on port `3000` by default.
2024-04-29 17:06:08 +02:00
#### Angular frontend
2019-10-17 14:39:25 +02:00
To run the frontend server, please run
```shell
2019-11-15 14:46:07 +01:00
RAILS_ENV=development npm run serve
2019-10-17 14:39:25 +02:00
```
2024-03-25 12:16:14 -05:00
This will watch for any changes within the `frontend/` and compile the application javascript bundle on demand. You will
need to watch this tab for the compilation output,
2019-10-17 14:39:25 +02:00
should you be working on the TypeScript / Angular frontend part.
2024-03-25 12:16:14 -05:00
You can then access the application either through `localhost:3000` (Rails server) or through the frontend
proxied `http://localhost:4200`, which will provide hot reloading for changed frontend code.
2019-10-17 14:39:25 +02:00
2024-04-29 17:06:08 +02:00
#### Background job worker
```shell
RAILS_ENV=development bundle exec good_job start
```
This will start a Delayed::Job worker to perform asynchronous jobs like sending emails.
2024-04-29 17:06:08 +02:00
### Known issues
2024-04-29 17:06:08 +02:00
#### Spawning a lot of browser tabs
2024-03-25 12:16:14 -05:00
If you haven't run this command for a while, chances are that a lot of background jobs have queued up and might cause a
significant amount of open tabs (due to the way we deliver mails with the letter_opener gem). To get rid of the jobs
before starting the worker, use the following command. **This will remove all currently scheduled jobs, never use this
in a production setting.**
2022-01-20 08:15:11 +01:00
```shell
2022-01-20 08:15:11 +01:00
RAILS_ENV=development bin/rails runner "Delayed::Job.delete_all"
```