Index by title

Boards

The OpenProject Foundation consists of three interacting boards with different roles and responsibilities.

Board of Directors

(§ 8) The board of directors consists of two managing directors, a treasurer, a cash audit, a secretary and up to four associates.

The board of directors is responsible for oversight of the overall affairs of the foundation, i.e. organisational set-up. This includes regular meetings, management of assets (funds, code, intellectual property, trademarks, support, resources). However, technical and functional decision-taking authority is directly situated with the members of the different boards.

Board Members

The board members are responsible for the active involvement of the OpenProject community. They decide whether or not a new member in the foundation is accepted. Each board is in the lead for certain topics and decisions and is responsible for their own organisation.
The following paragraphs describe the roles and responsibilities within the different boards.

Product Management

Product Management (PM) is responsible for the product, the product vision, requirements analysis, and project communication.

Role Description
PM Lead Head of the board Product Management, representative in Board of Directors.
Proposition and Prioritisation Responsible for overall OpenProject proposition, product vision and feature prioritization.
Marketing and Public Affairs OpenProject marketing strategy and public relations, events, fairs, publications.
Product Design
Industry Experts

Responsibilities
PM is responsible for the decision of the following topics in accordance with the other board members as well as clearly communicating the decisions to the community.

Topics

Technology

Technology (Tech) is responsible for the development of new features and bug fixes, the inherent testing as well as the operation of the product.
Committer © as part of Tech is responsible for the QA of the developed code and therefore the quality of the product.

Technology Roles

Role Description
Tech Lead Head of the board Technology, representative in Board of Directors.
Committer Responsible for QA, eligable to decide which code will be committed.
Contributor Feature and plugin development, bug fixing, test writing, peer reviews.
Operations Responsible for operation of the development, testing and production evironments of OpenProject as well as futher corresponding instances, e.g. demo systems.
Methods and Tools Define methodas, tools and processes for successful development, testing and QA, documentation.

Responsibilities
Tech is responsible for the decision of the following topics in accordance with the other board members as well as clearly communicating the decisions to the community.

Topics

Support

Support is responsible for the coaching and user support for OpenProject. It ensures that the product is well understood and that questions will be quickly answered and followed-up.

Support Roles

Role Description Support Lead Head of the board Support, representative in Board of Directors.
Support Technology
Coaching and Training
User Support

Responsibilities
Support is responsible for the decision of the following topics in accordance with the other board members as well as clearly communicating the decisions to the community.

Topics


Tutorial: Step By Step how to install OP 3.0 with Apache (“autostart”) on Debian 7.4

This tutorial helps you to deploy OP3. Please, aware that:

  1. it`s primarily for testing purposes and may contain some security misconfiguration, so consider deploying outside of your local network.
  2. there is only 1 requirement you have to meet, that you have to have clean Debian 7.4 x64 install (from netinstall image, minimal installation)
  3. I`m using production environment for OP3
  4. I`m using MySQL from official Debian repo (install guide icluded)
  5. There should be some unnecessary packages that I`m installing in this tutorial, but this is just Copy&Paste tutorial to deploy OP3 in few minutes, so excuse it please :)
  6. If you find any bugs or you have any recommendations for improving this tutorial, please, feel free to send me comment.

Prepare you environment

Install tools needed for DB and Ruby

[root@debian]# apt-get install git curl build-essential libxslt1-dev libxml2-dev libmysql-ruby libmysqlclient-dev libpq-dev libsqlite3-dev libyaml-0-2

Install some handy tools

[root@debian]# apt-get install locate vim

Create dedicated user for OP3

[root@debian]# groupadd openproject
[root@debian]# useradd --create-home --gid openproject openproject      
[root@debian]# passwd openproject (enter desired password)

Install Database (MySQL) necessary packages

During installation you have to enter password for mysql root.

[root@debian]# sudo apt-get install libmagickwand-dev libmagickcore-dev libmagickcore5-extra libgraphviz-dev libgvc5 libmysqlclient-dev libsqlite3-dev libpq-dev mysql-server memcached

Now create databases

[root@debian]# mysql -u root -p

Replace string “openproject” with desired username in MySQL database and “my_password” with desired password (in my case both are “openproject”)

mysql> CREATE DATABASE openproject CHARACTER SET utf8;

mysql> CREATE USER 'openproject'@'localhost' IDENTIFIED BY 'my_password';
mysql> GRANT ALL PRIVILEGES ON openproject.* TO 'openproject'@'localhost';   
mysql> \q

Install Ruby

Switch to desired user (openproject in my case)

Switch to user under which will OP run (user “openproject” in my case):

[root@debian]# su openproject -c "bash -l"

Switch to users home dir or whatever directory you want to install openproject

[openproject@debian]# cd ~

[openproject@debian]#

Install RVM (Ruby Version Manager)

[openproject@debian]# \curl -L https://get.rvm.io | bash -s stable       
[openproject@centos]# source $HOME/.rvm/scripts/rvm

Install Ruby via RVM

[openproject@debian]# rvm autolibs disable       
[openproject@debian]# rvm install 2.1.0       
[openproject@debian]# gem install bundler

Install OpenProject

[openproject@debian]# git clone https://github.com/opf/openproject.git

[openproject@debian]# cd openproject

[openproject@debian]# git checkout release/3.0

[openproject@debian]# bundle install

Configure OpenProject

Please, be aware that database configuration file and configuration file are “ident-sensitive” and consistence of these files are crucial to have working environment (email notifications, database connections, etc.

*Create and configure file in openproject/config/database.yml.
It should look like this:*

production:
  adapter: mysql2
  database: openproject
  host: localhost
  username: openproject
  password: openproject
  encoding: utf8

development:
  adapter: mysql2
  database: openproject
  host: localhost
  username: openproject
  password: openproject
  encoding: utf8

test:
  adapter: mysql2
  database: openproject
  host: localhost
  username: openproject
  password: openproject
  encoding: utf8

Configure email notifications (using gmail account) by creating configuration.yml in openproject/config directory

development:                         #main level
email_delivery_method: :smtp         #main level, will not work

default:                             #main level
  email_delivery_method: :smtp       #setting for default
  smtp_address: smtp.gmail.com       #setting for default
  smtp_port: 587
  smtp_domain: smtp.gmail.com
  smtp_user_name: ***@gmail.com
  smtp_password: ****
  smtp_enable_starttls_auto: true
  smtp_authentication: plain

Add this line into configuration.yml file at the of of file for better performance of OP:

rails_cache_store: :memcache

Install plugins (Optional): *For general information about OpenProject plug-ins refer to to the plug-in page

If you install any plugins you have to install this plugins, so before you go on please call:

[openproject@debian]# bundle install

Finish installation of OpenProject

[openproject@debian]# cd /home/openproject/openproject

[openproject@debian]# bundle exec rake db:create:all 

[openproject@debian]# bundle exec rake db:migrate

[openproject@debian]# RAILS_ENV="production" bundle exec rake db:seed
[openproject@debian]# bundle exec rake generate_secret_token     
[openproject@debian]# RAILS_ENV="production" bundle exec rake db:migrate

Precompile OpenProjects assets

[openproject@debian]# RAILS_ENV="production" bundle exec rake assets:precompile

Install Apache with Passenger to autostart OpenProject with OS and loadbalance traffic

Install necessary packages

[root@debian]# apt-get install apache2 libcurl4-gnutls-dev apache2-threaded-dev libapr1-dev libaprutil1-dev

Grant permission for passenger

[root@debian]# chmod o+x "/home/openproject"

[root@debian]# su - openproject -c "bash -l"

Install Passenger gem

[openproject@debian]# cd ~/openproject

[openproject@debian]# gem install passenger

Compile Passenger for Apache and follow instructions for pasting settings to httpd and virtualhost
Just install it with default values and read statements if there are any errors :)

[openproject@debian]# passenger-install-apache2-module

Add this lines to /etc/apache2/conf/apache2.conf, but first, check if the syntax is the same as the “passenger-install-apache2-module” installer noticed:

LoadModule passenger_module /home/openproject/.rvm/gems/ruby-2.1.0/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/openproject/.rvm/gems/ruby-2.1.0/gems/passenger-4.0.37
     PassengerDefaultRuby /home/openproject/.rvm/gems/ruby-2.1.0/wrappers/ruby
   </IfModule>

Create VirtualHost file for Apache:

[root@debian]# vim /etc/apache2/conf.d/openproject.conf

Paste these lines into it:

   <VirtualHost *:80>
      ServerName www.myopenprojectsite.com
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /home/openproject/openproject/public    
      <Directory /home/openproject/openproject/public>
         # This relaxes Apache security settings.
         AllowOverride all
         # MultiViews must be turned off.
         Options -MultiViews
      </Directory>
   </VirtualHost>

Start Apache

[root@debian]# service apache2 start

Now your OP should be accesible on IP address and port 80 (http) of the PC where you have successfully installed openproject. It is highly recommend to configure SSL module in Apache for https communication.

*Any comments are appreciated here:
https://www.openproject.org/topics/576?r=633.*


Download and Installation of OpenProject

We are thrilled that you want to install OpenProject.

Find all the necessary information here


Please refer to: https://www.openproject.org/docs/faq/


OpenProject feature overview

OpenProject provides you a wide range of powerful features. Have all project information securely accessible from everywhere at any time. Every project team can configure their project set up and can decide which features they want to use; some of them are core features, some are dedicated plugins. Find out which features can support you and your team.

OpenProject Features

OpenProject User Guides


Migration path from Chilliproject to OpenProject

The migration largely depends on the version of ChiliProject you have currently running and the plugins you have installed.

The bare migration (without plugins) for ChiliProject will be described.
With plugins involved you will first have to check their compatibility with OpenProject. And as we just switched from rails 2.3 to rails 3.2 there will not be many plugins out there right now that fit our altered plugin API. As we are going to release a whole lot of plugins in the near future this will change soon. But plugins you might have installed will have to be addressed individually. If you have plugins installed, please us know and we will try to help you finding out what to do with them.

The approach for a bare ChiliProject to OpenProject migration (without plugins) is basically as follows. This assumes that you have a ChiliProject v3.8.0 running:

  1. Backup your DB or copy the DB over to a new one.
  2. Double check that you have a backup of your DB.
  3. Migrate your current database schema down to a version compatible to OpenProject.
  4. Install OpenProject (including running the migrations).

Since OpenProject was forked from ChiliProject it shares most of the migrations. But some of the migrations are unique to ChiliProject and will not work when running an OpenProject. Those have to be removed using the following commands (shell in the rails root directory):

rake db:migrate:down VERSION=20100217010520
rake db:migrate:down VERSION=20111025231354
rake db:migrate:down VERSION=20111125191432
rake db:migrate:down VERSION=20120131142400
rake db:migrate:down VERSION=20120131142401
rake db:migrate:down VERSION=20120320220031

Once that is done, you can install OpenProject and use the DB you just prepared. You will first have to install the OpenProject version 2.4. OpenProject 2.4 is a necessary intermediate step as we squashed some migrations from 2.4 to 3.0. We recommend to switch to OpenProject 3.0 after you installed 2.4 and tested that it works.

Hope that helps. Please let us know if you have any additional questions or comments.


Glossary

 Update July 2023: If you are looking for up-to-date definitions of OpenProject terminology, see our recently published glossary of OpenProject

----------------------------------------------------------------


Warning: Outdated

This guide is highly outdated. Please use the manual installation guide at the following URL:
https://www.openproject.org/open-source/manual-installation/manual-installation-guide/

While being targeted at Linux, it should work identically for Mac OS X.

Installation of OpenProject on MacOS X

In this guide we will use Homebrew as a packager manager (http://brew.sh/). Check it out if you don’t have it installed on your machine yet, it’s highly recommended. As an alternative, you’re of course free to use MacPorts or Fink if you prefer.

We will also assume MacOS 10.6 or higher in this guide. Installation on 10.5 is possible, but may require some extra steps.

Install XCode, Homebrew and package dependencies

You will need the XCode command line tools to be able to compile packages with Homebrew. Install XCode from the App Store.
After the installation go to XCode Preferences -> Downloads and install the command line tools.

Then install Homebrew:

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

The script will guide you through the steps necessary to install Homebrew. Check the Homebrew website for detailed information (http://brew.sh/).

If Homebrew is already installed on your system, just run ‘brew update’ followed by ‘brew upgrade’ to upgrade your packages.

Run Brew doctor to ensure everything is properly installed:

brew doctor

Install dependencies:

brew install git curl

Also install the following dependencies if you want to enable OpenProject to generate images (recommended but optional):

brew install imagemagick graphviz 

Install the memcached cache server (optional but recommended for production environments):

brew install memcached

Install Ruby

Ruby version managers

A ruby version manager lets you deploy and use different Ruby versions. Typically, Ruby is installed in the users $HOME directory.
In this guide we will demonstrate setting up a project with both RVM (http://rvm.io/) and chruby (with ruby-install).
rbenv is also widely used.

Option 1 RVM

  \curl -L https://get.rvm.io | bash -s stable
source source $HOME/.rvm/scripts/rvm

If you need help on how to install rvm, have a look at their homepage http://rvm.io .

Option 2 ruby-install and chruby

brew install chruby ruby-install
echo "source /usr/local/opt/chruby/share/chruby/chruby.sh" >> ~/.bashrc
echo "source /usr/local/opt/chruby/share/chruby/auto.sh" >> ~/.bashrc

Ruby and Bundler

Ruby 2.1 is supported

With RVM:

rvm install 2.1.2

With chruby

ruby-install ruby 2.1.2

Install bundler:

gem install bundler

Make sure that

bundle --version

is 1.5.1 or higher. If not, update the bundler gem.

Set up a database

You will need a database to run OpenProject. If you do not have a separate database server, install your favorite (MySQL or PostgreSQL) DBMS now.

You can install MySQL through Homebrew or download a binary distribution (http://www.mysql.com/downloads/):

brew install mysql

For PostgreSQL, both a homebrew package and a binary distribution are available as well (http://www.postgresql.org/download/macosx/):

 brew install postgresql

If you’re looking for a graphical tool to administer your databases, there are many options available. We recommend to have a look at Sequel Pro for Mysql (http://www.sequelpro.com/) and PgAdmin for PostgreSQL (http://www.pgadmin.org/).

You should create a database (MySQL or PostgreSQL) user with appropriate rights (create, remove, modify the openproject tables).

For MySQL:

Open the msyql console with ‘mysql’ and paste the following statements:

CREATE DATABASE openproject CHARACTER SET utf8;
CREATE USER 'openproject'@'localhost' IDENTIFIED BY 'my_password';
GRANT ALL PRIVILEGES ON openproject.* TO 'openproject'@'localhost';

Also create the databases openproject_development and openproject_test and grant privileges on them if you are on a development machine.

For PostgreSQL:

CREATE ROLE openproject LOGIN ENCRYPTED PASSWORD ‘my_password’ NOINHERIT VALID UNTIL ‘infinity’;
CREATE DATABASE openproject WITH ENCODING=‘UTF8’ OWNER=openproject;

Also create the databases openproject_development and openproject_test and grant privileges on them if you are on a development machine.

Replace my_password with an appropriate password (avoid to use ‘!’’ in the password).

Install OpenProject

Clone the OpenProject repository.

git clone https://github.com/opf/openproject.git
cd openproject
git checkout stable

Run bundler to install all gems

bundle install

or the following if you decided not to install rmagick

bundle install --without rmagick

Copy config/database.yml.example to config/database.yml.

cd config
cp database.yml.example database.yml

Edit database.yml and fill in your database username and password.

Create an OpenProject email account. We use a free gmail account in our example configuration.

Copy config/configuration.yml.example to config/configuration.yml.

cp configuration.yml.example configuration.yml

Edit the default key to look like this:

# default configuration options for all environments
default:
  # Outgoing emails configuration (see examples above)
  email_delivery:
    delivery_method: :smtp
    perform_deliveries: true
    smtp_settings:
      address: smtp.gmail.com
      port: 587
      enable_starttls_auto: true
      domain: "gmail.com" 
      authentication: :login
      user_name: "yourgmailaccountname”
      password: "yourpassword"

Note that the enable_starttls_auto: true line was added.

Optional: If you want to use the memcached cache server add the following line to the configuration (don’t forget to install memcached beforehand - see the package dependencies for details):

rails_cache_store: :memcache

Create databases:

Create databases:

bundle exec rake db:create:all

Note: bundle exec helps to execute OpenProject with just those gems that were explicitly installed via bundle install. It is recommended to prepend bundle exec before every ruby oder gem invocation.

Run database migrations:

bundle exec rake db:migrate

Note: Per default the development environment is loaded. If you want to execute a command (like bundle exec rake db:migrate in the production environment, do RAILS_ENV="production" bundle exec rake db:migrate. the same applies to the test environment.)

Populate your database with example data. This is useful for development. In production systems, you probably want to configure OpenProject yourself (note that this also includes creating an admin account).

bundle exec rake db:seed

In development mode the database is populated with a lot of sample usage data (some users, work packages, news, …) to simulate a lively OpenProject installation (grab a cup of coffee, this may take some time).

However, in production mode very few data is generated. Basically it’s just an admin account and some default types and roles.

Generate a secret token for the session store:

bundle exec rake generate_secret_token

Install plugins (optional)

*For general information about OpenProject plug-ins refer to to the plug-in page

Create a Gemfile.plugins file and add OpenProject plugins of your choice. In our example we install the openproject-plugins plugin (which adds a useful plugin generator so that you can start developing your custom plugin faster).

vi Gemfile.plugins
gem "openproject-plugins", "~> 1.0.2"

Run bundler to install the plugin gems:

bundle install

Read the gems README or installation instructions. Some gems need further configuration. Some gems even add migrations - you need to install them manually.

Start application server

bundle exec rails server

You should now be able to access OpenProject at http://localhost:3000, where localhost is the IP address of the current machine.

The default administrator ID is admin and the password is admin.

Further production setup

In a production system you probably want to set up

For a production setup, we recommend to use the [[openproject:Mod_security|mod_security]] apache module (if you deploy with an apache webserver).


This tutorial helps you to deploy OP3. Please, aware that:

  1. it`s primarily for testing purposes and may contain some security misconfiguration, so consider deploying outside of your local network.
  2. there is only 1 requirement you have to meet, that you have to have clean Centos 6.5 x64 install (from netinstall image, minimal installation)
  3. I`m using production environment for OP3
  4. I`m using PostgreSQL 9.3 from official Postgresql repo (install guide icluded)
  5. There should be some unnecessary packages that I`m installing in this tutorial, but this is just Copy&Paste tutorial to deploy OP3 in few minutes, so excuse it please :)
  6. If you find any bugs or you have any recommendations for improving this tutorial, please, feel free to send me comment.

1. Prepare you environment

Update your system

[root@centos]# yum update

Install tools needed for DB and Ruby

[root@centos]# yum install git wget 

[root@centos]# yum groupinstall "Development tools"

Install some handy tools

[root@centos]# yum install vim mlocate

Create dedicated user for OP3

[root@centos]# groupadd openproject
[root@centos]# useradd --create-home --gid openproject openproject      
[root@centos]# passwd openproject (enter desired password)

2. Install Database (PostreSQL 9.3)

Edit .repo file and add this line:
exclude=postgresql*
to the section and :

[root@centos]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
exclude=postgresql*

#released updates 
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
exclude=postgresql*

Then finish PostgreSQL installation

[root@centos]# curl -O http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-1.noarch.rpm

[root@centos]# rpm -ivh pgdg-centos93-9.3-1.noarch.rpm

[root@centos]# yum list postgres*

[root@centos]# yum install postgresql93-server postgresql93-devel

[root@centos]# service postgresql-9.3 initdb

[root@centos]# chkconfig postgresql-9.3 on

Add usermap of your user under which you have installed OP (“openproject” in my case) and PostgreSQL user that has granted rights to the DB.

Edit pg_ident.conf file and add this line at the end of file. This will add UserMap with name “openproject” to linux user “openproject” to DB user “openproject”:

openproject     openproject     openproject

[root@centos]# vim /var/lib/pgsql/9.3/data/pg_ident.conf

Uncomment this line in postgresql.conf file to allow connection to localhost of PostgreSQL service:
listen_addresses = ‘localhost’

[root@centos]# vim /var/lib/pgsql/9.3/data/postgresql.conf

Restart PostgreSQL service

[root@centos]# service postgresql-9.3 restart

Now create databases

[root@centos]# su - postgres

-bash-4.1$ psql -U postgres

Replace string “openproject” with desired username in PostgreSQL database and “my_password” with desired password (in my case both are “openproject”)

postgres=# CREATE ROLE openproject LOGIN ENCRYPTED PASSWORD 'my_password' NOINHERIT VALID UNTIL 'infinity';

postgres=# CREATE DATABASE openproject WITH ENCODING='UTF8' OWNER=openproject;
postgres=# CREATE DATABASE openproject_development WITH ENCODING='UTF8' OWNER=openproject;   
postgres=# CREATE DATABASE openproject_test WITH ENCODING='UTF8' OWNER=openproject;

postgres=# \q

postgres=# exit

3. Install Ruby

Enable ELrepo

[root@centos]# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@centos]# rpm -Uvh epel-release-6*.rpm       
[root@centos]# yum update

Install necessary packages for Ruby

[root@centos]# yum search libyaml

[root@centos]# yum install libyaml libxml2 libxml2-devel libxslt-devel libxml2-devel ruby-mysql mysql-devel ImageMagick-c++ ImageMagick-devel graphviz graphviz-ruby graphviz-devel memcached sqlite-devel

Switch to user under which will OP run (user “openproject” in my case):

[root@centos]# su openproject -c "bash -l"

Switch to users home dir or whatever directory you want to install openproject

[openproject@centos]# cd ~

Add following line into profile file of the desired user:
source ~/.profile

[openproject@centos]# vim /home/openproject/.bash_profile

Install RVM (Ruby Version Manager)

[openproject@centos]# \curl -L https://get.rvm.io | bash -s stable       
[openproject@centos]# source $HOME/.rvm/scripts/rvm

Install Ruby via RVM

[openproject@centos]# rvm autolibs disable       
[openproject@centos]# rvm install 2.1.0       
[openproject@centos]# gem install bundler

Make sure that

bundle —version

is 1.5.1 or higher. If not, update the bundler gem.

4. Install OpenProject

[openproject@centos]# git clone https://github.com/opf/openproject.git

[openproject@centos]# cd openproject

[openproject@centos]# git checkout stable

[openproject@centos]# bundle install

Fix appeared error by:

[openproject@centos]# gem install pg -v '0.17.1' -- --with-pg-config=/usr/pgsql-9.3/bin/pg_config

[openproject@centos]# bundle install

5. Configure OpenProject

Please, be aware that database configuration file and configuration file are “ident-sensitive” and consistence of these files are crutial to have working environment (email notifications, database connections, etc.

*Create and configure file in ../openproject/config/database.yml.
It should look like this:*

production:
      adapter: postgresql
      encoding: utf8
      database: openproject
      pool: 5
      username: openproject
      password: openproject
development:
      adapter: postgresql
      encoding: utf8
      database: openproject_development
      pool: 5
      username: openproject
      password: openproject
test:
      adapter: postgresql
      encoding: utf8
      database: openproject_test
      pool: 5
      username: openproject
      password: openproject

Configure email notifications (using gmail account) by creating configuration.yml in openproject/config directory

development:                         #main level
email_delivery_method: :smtp         #main level, will not work

default:                             #main level
  email_delivery_method: :smtp       #setting for default
  smtp_address: smtp.gmail.com       #setting for default
  smtp_port: 587
  smtp_domain: smtp.gmail.com
  smtp_user_name: ***@gmail.com
  smtp_password: ****
  smtp_enable_starttls_auto: true
  smtp_authentication: plain

Install plugins (Optional)
Create Gemfile.plugins file in openproject directory and paste these files:

Please aware, that all of the plugins are currently in beta state, so after final release, the installation could be different. Consider this step and if you don’t want to install plugins, just skip this step and go to “Finish installation of OpenProject”

gem "pdf-inspector", "~>1.0.0", :group => :test
gem "openproject-meeting", :git => "https://github.com/finnlabs/openproject-meeting.git", :branch => "stable"
gem "openproject-pdf_export", git: "https://github.com/finnlabs/openproject-pdf_export.git", :branch => "stable"
gem "openproject-plugins", git: "https://github.com/opf/openproject-plugins.git", :branch => "stable"
gem "openproject-backlogs", git: "https://github.com/finnlabs/openproject-backlogs.git", :branch => "stable"

Finish installation of OpenProject

[openproject@centos]# cd /home/openproject/openproject

[openproject@centos]# bundle exec rake db:create:all 

[openproject@centos]# bundle exec rake db:migrate

[openproject@centos]# RAILS_ENV="production" bundle exec rake db:seed
[openproject@centos]# bundle exec rake generate_secret_token     
[openproject@centos]# RAILS_ENV="production" bundle exec rake db:migrate

Precompile OpenProjects assets

[openproject@centos]# RAILS_ENV="production" bundle exec rake assets:precompile

Install Apache with Passenger to autostart OpenProject with OS and loadbalance traffic

Install necessary packages

[root@centos]# yum install httpd curl-devel httpd-devel apr-devel apr-util-devel

Grant permission for passenger

[root@centos]# chmod o+x "/home/openproject"

[root@centos]# su - openproject -c "bash -l"

Install Passenger gem

[openproject@centos]# gem install passenger

Compile Passenger for Apache and follow instructions for pasting settings to httpd and virtualhost
Just install it with default values and read statements if there are any errors :)

[openproject@centos]# passenger-install-apache2-module

Add this lines to /etc/httpd/conf/httpd.conf:

LoadModule passenger_module /home/openproject/.rvm/gems/ruby-2.1.0/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/openproject/.rvm/gems/ruby-2.1.0/gems/passenger-4.0.37
     PassengerDefaultRuby /home/openproject/.rvm/gems/ruby-2.1.0/wrappers/ruby
   </IfModule>

Create VirtualHost file for Apache:

[root@centos]# vim /etc/httpd/conf.d/openproject.conf

Paste these lines into it:

   <VirtualHost *:80>
      ServerName www.myopenprojectsite.com
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /home/openproject/openproject/public    
      <Directory /home/openproject/openproject/public>
         # This relaxes Apache security settings.
         AllowOverride all
         # MultiViews must be turned off.
         Options -MultiViews
      </Directory>
   </VirtualHost>

Finally disable temporarly SELINUX and iptables to be able to access your apache from another computer

[root@centos]# setenforce 0

[root@centos]# service iptables disable

Start Apache

[root@centos]# service httpd start

Now your OP should be accesible on IP address and port 80 (http) of the PC where you have successfully installed openproject.

Please, notice, that disabling SELINUX and iptables is really not good way how to finish this installation. This guide is only for testing purposes and to be able to install OP as soon as possible. Configuring Apache (SSL etc.) and iptables is another topic.

*Any comments are appreciated here:
https://www.openproject.org/topics/576?r=633.*


Download and Installation of OpenProject 3.0

Installation via package manager for Debian and Ubuntu systems

If you want the OpenProject core (stable release 3.0.14), you can use the package manager to install OpenProject.

Big thanks goes to pkgr.io who host the instructions at our pkgr project page .

Disclaimer: This is a first version for the installation via package manger. Please provide feedback.

Detailed Installation Instructions

We provide detailed instructions for the following systems:

Unofficial installation instructions:

(*looking forward to contributions for installation instructions)

If your system is not listed, continue reading the general installation instructions. Please consider to adapt every step to your individual system set-up.

General Installation Instructions

If you’re upgrading from OpenProject 2.4, we have a migration guide to 3.0.

Requirements

Before you start the installation make sure that you have a running database server, a current git version, ruby 2.1.0 and a working bundler installed.

Debian Wheezy w/ Postgres 9.1

Basic prerequisites:

apt-get install postgresql-9.1 git gcc make libxml2-dev libxslt-dev g libpq-dev

To install Ruby on debian it is recommended to use RVM, you can install it by following these commands:

curl -sSL https://get.rvm.io | bash -s stable —ruby=2.1
source /etc/profile.d/rvm.sh

You can check if it was successful by typing in ruby -v afterwards and seeing an output such as:

root@server:/# ruby -v
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux]

Install bundler (a dependency manager for Ruby Gems):

gem install bundler —version ‘>=1.5.1’

Optional: Install the memcached service (e.g. apt-get install memcached)

Assuming you have your Postgres already setup all you will need to do is create an openproject, openproject_test and openproject_development database. If you don’t then follow these Instructions:

1) log into your postgres user by typing the following into the command line:

su - postgres

2)Proceed by changing your the password by typing in:

psql
\password postgres

3) Exit Postgresql and add a system user(within Debian/your OS) via “adduser username”, log back into postgresql(su - postgres) , and enter the psql command. Follow this by creating a user with the “createuser” function within psql and make that user a superuser.

4) Exit psql by typing “\q” and type in “su - yourcreatedusername” and enter the password you provided earlier when creating the account. Create your Databases by issueing the following commands

createdb -O createdusername openproject
createdb -O createdusername openproject_test
createdb -O createdusername openproject_development

5) Type in PSQL and issue the following commands:

create role openproject login encrypted password ‘passwordhere’ noinherit valid until ‘infinity’;
create database openproject with encoding=‘UTF8’ owner=openproject;

6) You’re done with the DB setup now

Clone the OpenProject repository

git clone https://github.com/opf/openproject.git
cd openproject
git checkout stable

Add plugins

Plugins in OpenProject behave like normal ruby gems. To preserve the distinction between gems required for OpenProject itself and the plugin gems we decided to have a distinct Gemfile for the later. That way it is also easier to update.

gem "openproject-help_link", :git => "https://github.com/finnlabs/openproject-help_link.git", :branch => "3-0-3"

Available plugins are listed as subprojects to the “Plugins”-project

Install gems

bundle install --without mysql mysql2 sqlite development test rmagick

Configure config/database.yml

There is an example file config/database.yml.example you can copy and edit.

You choose a database for production, development and test environment.

Configure config/configuration.yml

There is an example file config/configuration.yml.example you can copy and edit.

Optional: If you want to use the memcached cache server add the following line to the configuration (don’t forget to install memcached beforehand - see section 2.1.1 for details):

rails_cache_store: :memcache

Generate a secret token for the session store

bundle exec rake generate_secret_token

Create databases

bundle exec rake db:create:all

All databases listed in your database.yml will be created.

Run database migrations and seeds

bundle exec rake db:migrate RAILS_ENV=production
bundle exec rake db:seed RAILS_ENV=production

Note: because of a known issue (OP-1024) you will need to execute these Rake tasks separately.

Creates the default database structure and some test data.

Precompile assets

bundle exec rake assets:precompile

Start application server

bundle exec rails server RAILS_ENV=production

You start your application server and by default it should be available under http://localhost:3000

Login

Use the default administrator account to log in.

Set up delayed job (e-mail, user deletion, …)

For some jobs that might take some time to execute, we choose to rely on delayed job. This enables OpenProject to answer a user’s request quickly while doing the heavy lifting where the user doesn’t care - in the background. We will strive to shift more and more work to the background to increase the responsiveness. Jobs already executed in the background include:

Thus, you need to set up delayed job for those background jobs to work.

Note: If you come from an existing database you want to delete all entries in the table delayed_jobs.

You start delayed job with the following command executed from the OpenProject main folder:

RAILS_ENV=production bundle exec script/delayed_job start

and you stop it with:

RAILS_ENV=production bundle exec script/delayed_job stop

Note: Be aware that you have to restart the delayed job if you change (e.g. update) the OpenProject code because delayed job runs with the code which it finds on startup.

Deployment Considerations

OpenProject may be deployed similar to any Rails3 application. However, some things need to be considered:


Installation of OpenProject 4.0

We are still working on the Installation instructions. With the release of OpenProject 4.0 we are striving to ease installation by providing packages for the various distributions. Those are still in the making but you can expect them very soon.
We would be happy to hear of any guides you can contribute.

Manual Installation

For now, there is one detailed installation guide for Debian 7 which can be taken as a guideline for other distributions as well:

Upgrade From OpenProject 3.0

There is currently one detailed upgrade guide for Debian 7 which can be taken as a guideline for other distributions as well:

Generic Installation Instructions

In case none of the above guides fit your system, we have some general installation instructions. They give you an idea on what to do to install OpenProject without providing the platform-dependent details.

  1. Consider creating a separate OS-user for OpenProject (so that OpenProject does not run as root/admin)
  2. Prepare a database (MySQL or PostgreSQL) including a database-user and access rights to an OpenProject-database
  3. Install Ruby (version 2.1.x) (for example with RVM or rbenv)
  4. Install the Bundler gem
  5. Install Node.js (for example with nodeenv)
  6. Install Bower
  7. Clone the OpenProject repository from https://github.com/opf/openproject/
  8. Within the OpenProject directory do:
    1. bundle install
    2. bower install
  9. Configure OpenProject
    1. Create the config/database.yml file (a template can be found at config/database.yml.example)
    2. Create the config/configuration.yml file (a template can be found at config/configuration.yml.example)
    3. Validate both files (YAML-files are very sensitive, when it comes to whitespace), for example with: http://www.yamllint.com/
  10. Run the following commands within the OpenProject directory:
    1. bundle exec rake db:create:all to create the database
    2. bundle exec rake generate_secret_token to generate the cookie-encryption token
    3. RAILS_ENV="production" bundle exec rake db:migrate to populate the database with the tables OpenProject needs
    4. RAILS_ENV="production" bundle exec rake db:seed to generate the default admin-user
    5. RAILS_ENV="production" bundle exec rake assets:precompile To pack the assets (JavaScript, CSS) so that they can be served in production
  11. Serve OpenProject (just like any other Rails application), for example with Passenger
  12. Start the woker-process (which sends OpenProject mails, copies projects, etc.), for example with RAILS_ENV=production bundle exec script/delayed_job start

Installation of OpenProject on Ubuntu 12.04

Many thanks to Dan S. for the first draft of this guide.

Update and upgrade.

Update your system, so you know you have the latest available packages for your system.

apt-get update
apt-get upgrade

Install dependencies

Install git and curl.

apt-get install git curl

Install dependencies for our gems.

apt-get install build-essential libxslt-dev libxml2-dev libmysql-ruby libmysqlclient-dev libpq-dev libsqlite3-dev libyaml-0-2

Also install the following dependencies if you want to enable OpenProject to generate images (recommended):

apt-get install libmagickwand-dev libmagickcore-dev libmagickcore4-extra libgraphviz-dev libgvc5

You will need a database to run OpenProject. If you do not have a separate database server, install your favorite (MySQL or PostgreSQL) DBMS now.

For MySQL (please read the ubuntu help for details and setup instructions):

sudo apt-get install mysql-server

For PostgreSQL (please read the ubuntu help for details and setup instructions):

sudo apt-get install postgresql

Install the memcached cache server (optional but recommended for production environments):

sudo apt-get install memcached

Add openproject user and group.

It is recommented to have a separate user/group for OpenProject (at least for production systems). You may skip this step (and all further related steps) for your local development setup.

groupadd openproject
useradd —create-home —gid openproject openproject
passwd openproject # (enter desired password)

We continue the setup as the openproject user. This way all directories are created with so that the openproject user can access them.

su openproject -c “bash -l”
cd ~ #or whatever directory you want to install openproject

Install RVM (Ruby Version Manager)

A ruby version manager lets you deploy/use different ruby versions. It is installed in the users $HOME directory

\curl -L https://get.rvm.io | bash -s stable
source $HOME/.rvm/scripts/rvm

If you need help on how to install rvm, have a look at their homepage http://rvm.io .

Use RVM to install Ruby

Ruby 2.1 is supported. Disable rvm autolibs so we don’t need admin privileges to install ruby (see this StackOverflow question for details).

rvm autolibs disable
rvm install 2.1.0

Install bundler.

gem install bundler

Make sure that

bundle —version

is 1.5.1 or higher. If you have an older bundler installed, upgrade the bundle gem.

Clone the OpenProject repository.

git clone https://github.com/opf/openproject.git
cd openproject
git checkout stable

Run bundler to install all gems

bundle install

or the following if you decided not to install rmagick

bundle install —without rmagick

Configure your DBMS

You should create a database (MySQL or PostgreSQL) user with appropriate rights (create, remove, modify the openproject tables).

For MySQL:

CREATE DATABASE openproject CHARACTER SET utf8;
CREATE USER ‘openproject’@'localhost' IDENTIFIED BY 'my_password'; GRANT ALL PRIVILEGES ON openproject.* TO 'openproject'@‘localhost’;

Also create the databases openproject_development and openproject_test and grant privileges on them if you are on a development machine.

For PostgreSQL:

CREATE ROLE openproject LOGIN ENCRYPTED PASSWORD ‘my_password’ NOINHERIT VALID UNTIL ‘infinity’;
CREATE DATABASE openproject WITH ENCODING=‘UTF8’ OWNER=openproject;

Also create the databases openproject_development and openproject_test and grant privileges on them if you are on a development machine.

Replace my_password with an appropriate password (avoid to use ‘!’’ in the password).

Configure OpenProject

Copy config/database.yml.example to config/database.yml.

cd config
cp database.yml.example database.yml

Edit database.yml and fill in your database username and password.

Create an email account from which your OpenProject installation may send mails. You don’t need to do this for a development setup.
We use a free gmail account in our example configuration.

Copy config/configuration.yml.example to config/configuration.yml.

cp configuration.yml.example configuration.yml

Edit the default key to look like this:

# default configuration options for all environments
default:
  # Outgoing emails configuration (see examples above)
  email_delivery:
    delivery_method: :smtp
    perform_deliveries: true
    smtp_settings:
      address: smtp.gmail.com
      port: 587
      enable_starttls_auto: true
      domain: "gmail.com" 
      authentication: :login
      user_name: "yourgmailaccountname”
      password: "yourpassword"

Note that the enable_starttls_auto: true line was added.

Optional: If you want to use the memcached cache server add the following line to the configuration (don’t forget to install memcached beforehand - see section 2 for details):

rails_cache_store: :memcache

Create databases:

bundle exec rake db:create:all

Note: bundle exec helps to execute OpenProject with just those gems that were explicitly installed via bundle install. It is recommended to prepend bundle exec before every ruby oder gem invocation.

Run database migrations:

bundle exec rake db:migrate

Note: Per default the development environment is loaded. If you want to execute a command (like bundle exec rake db:migrate in the production environment, do RAILS_ENV="production" bundle exec rake db:migrate. the same applies to the test environment.)

Populate your database with example data. This is useful for development. In production systems, you probably want to configure OpenProject yourself (note that this also includes creating an admin account).

RAILS_ENV=production bundle exec rake db:seed

In development mode the database is populated with a lot of sample usage data (some users, work packages, news, …) to simulate a lively OpenProject installation (grap a cup of coffee, this may take some time).

However, in production mode very few data is generated. Basically it’s just an admin account and some default types and roles.

Generate a secret token for the session store:

bundle exec rake generate_secret_token

Install plugins (optional)

*For general information about OpenProject plug-ins refer to to the plug-in page

Create a Gemfile.plugins file and add OpenProject plugins of your choice. In our example we install the openproject-plugins plugin (which adds a useful plugin generator so that you can start developing your custom plugin faster).

vi Gemfile.plugins
gem “openproject-plugins”, “~> 1.0.2”, :branch => ‘stable’

Run bundler to install the plugin gems:

bundle install

Read the gems README or installation instructions. Some gems need further configuration. Some gems even add migrations - you need to install them manually.

Please, make sure that the plugins version matches the core versions (if you use a current OpenProject ‘stable’ version, also use a current ‘stable’ version of your plugin).

Start application server.

bundle exec rails server

You should now be able to access OpenProject at http://localhost:3000, where localhost is the IP address of the current machine.

The default administrator ID is admin and the password is admin.

Further production setup

In a production system you probably want to set up

For a production setup, we recommend to use the [[openproject:Mod_security|mod_security]] apache module (if you deploy with an apache webserver).


Installation Windows

*Many thanks to Paul Onwude for this guide. Original posted here

Install ruby on rails*
http://railsinstaller.org/en

After Ruby installation, you wil be guided to the c:\Sites folder. Clone the OpenProject repository into that directory

git clone https://github.com/opf/openproject.git
cd openproject
git checkout stable

Modify gemfile in c:\sites\openproject

comment out THERUBYRACER by adding # in front of it (I believe this is not required for openproject to run)

Install the libv8 gem manually

gem install libv8 v '3.11.8.17' -- --with-system-v8

download mysql connector from the URL below

http://dev.mysql.com/get/Downloads/Connector-C/mysql-connector-c-noinstall-6.0.2-win32.zip/from/pick

copy mysql folder to a convenient location (e.g c:/mysql)

Install mysql2 gem

gem install mysql2 -- '--with-mysql-dir="C:/mysql/"' (Note i used c:\mysql but the slash is the other way)

copy libmysql.dll from the Mysql connector folder to bin folder of Rails Installer (C:\RailsInstaller\Ruby1.9.3\bin)

Run the main bundle installation (it should complete without errors)

bundle install --without rmagick

Modify database.yml and config.yml according to instruction in the manual. (I followed the Ubuntu Steps)

Setup databases according to instruction in the manual. (I followed the Ubuntu Steps)*

From here on, the steps in the manual should work without errors

bundle exec rake db:create:all

bundle exec rake db:migrate

bundle exec rake db:seed

bundle exec rake generate_secret_token

Start Rails server for development environment

bundle exec rails server

Login to openproject on localhost:3000
username: admin
password: admin

Update

For Production environment

bundle update (This does not work everytime so if it breaks your install, pull the latest clone and 
               bundle install without update)
bundle install

Precompile all your assets (if you do not do this, your production will keep flagging errors)
(It takes a really long time to complete depending on the speed of you machine)
(Run with —trace to see verbose mode)

bundle exec rake assets:precompile

Change a setting in the config/production.rb file (set to true)

config.serve_static_assets = true

Set rails environment to production (This is critical else rails will not start in production mode)

set RAILS_ENV=production

Create (if not already done), migrate and seed production database

bundle exec rake generate_secret_token
bundle exec rake db:migrate
bundle exec rake db:seed

Start Rails server for production environment

bundle exec rails server

I am a little concerned about performance issues so i will monitor for a while.


Members

Open your mind - participate
The community is waiting for you. Together we are looking forward to developing outstanding open source software for project collaboration.

Become a member of the foundation

A collaborative development of outstanding open source software and a transparent decision process, enables OpenProject to attract enterprises as well as an international community of individuals. Individuals as well as companies who have a proven commitment to collaborative open source software development through sustained participation and contributions within OpenProject are eligible for membership. Companies will be represented by individuals who will stand in for the interests of the company within the foundation.

An individual or a representative of a company is awarded for membership after submitting the application form and approval by the board of directors of the OPF.

As a member of the foundation you will have the following benefits:

Here you will find the application of membership, statutes and regulations of payment:

Please send your application for membership via e-mail or postal service to our office location.

Office address:
OpenProject Foundation e.V.
Rosenthaler Straße 32
10178 Berlin
Germany
E-mail: opf@openproject.org


Migration from Chiliproject 1.5.2 to OpenProject 3.0

This page describes the migration process all the way from chiliproject 1.5.2 up to openproject 3.0 for the fit configuration (a.k.a cockpit).
While based on that configuration all these steps as well as the referred repositories can be used as a starting point for migrations of arbitrary configurations.

Migration from chiliproject 1.5.2 to 2.4

Migrating to chiliproject @tag 2.4.0.

Migration settings

redmine_backlogs is now chiliproject_backlogs. Accordingly the settings plugin_redmine_backlogs has to be changed to plugin_chiliproject_backlogs.

This has been implemented in a rails migration in the repository referred to below.

Steps

Checkout

git clone -b migrate/1.5_to_2.4 https://dev.finn.de/git/redmine-config-fit migrate-1.5_to_2.4

RVM setup

Use ruby 1.8.7, e.g.:

cd migrate-1.5_to_2.4
echo 1.8.7 > .ruby-version && echo migrate-1.5_to_2.4 > .ruby-gemset
cd . # to apply

You can also put those files directly into the chiliproject directory, that’s up to you, really.

Install Gems

In the chiliproject directory do:

bundle install

Database Setup

This guide assumes that you have an existing production database which you want to migrate.
Accordingly you do the following in the checked out directory:

cd chiliproject
cp config/database.yml.example config/database.yml

Then fill in said database under production.

Generate Session Store

RAILS_ENV=production bundle exec rake generate_session_store

Database Migrations

RAILS_ENV=production bundle exec rake db:migrate:all

This step may take a while depending on the existing data.

After this step you are done with the migration from chiliproject 1.5 to openproject 2.4.

Changes to ActiveRecord

Some migration may not work due to it using an unsafe feature.

If this happens, comment to disable:

/.rvm/gems/ruby-1.8.7-p374@mygemset/gems/activerecord-2.3.18/lib/active_record/attribute_methods.rb:195

that is the following code:

raise ActiveRecordError, "You tried to assign already serialized content to #{attr_name}. This is disabled due to security issues."

Migration from 2.4 to 3.0

Documents

Install plug-in ‘openproject-documents’ by adding the following to Gemfile.plugins:

gem “openproject-documents”, :git => “git@github.com:finnlabs/openproject-documents.git”, :branch => “dev”

This has been done in the configuration referred to below.
Through this all documents except for Project and Version attachments are kept.
Project and Version attachments have to be deleted during migration.
An according notification with further instructions will come up as you execute it.

Steps

Checkout

git clone-b migrate/2.4_to_3.0 https://dev.finn.de/git/redmine-config-fit migrate-2.4_to_3.0

RVM setup

Use ruby 2.0, e.g.:

cd migrate-2.4_to_3.0
echo 2.0 > .ruby-version && echo migrate-2.4_to_3.0 > .ruby-gemset
cd . # to apply

You can also put those files directly into the chiliproject directory, that’s up to you, really.

Install Gems

In the openproject directory do:

bundle install

Database Setup

This guide assumes that you have an existing production database which you want to migrate.
Accordingly you do the following in the checked out directory:

cd openproject
cp config/database.yml.example config/database.yml

Then fill in said database (the same used above in the section for migrating from 1.5 to 2.4) under production.

Generate Secret Token

RAILS_ENV=production bundle exec rake generate_secret_token

Database Migrations

In the checked out directory run:

RAILS_ENV=production FROM="Europe/Berlin" rake migrations:timelines:reregister migrations:strong_passwords:reregister db:migrate

Replace the value for FROM with the correct locale. That is the locale under which the data that is being migrated was saved.
This migration may take a considerable amount of time depending on your existing data which is being migrated.

Error: There are still attachments attached to Versions or Projects!

Support for Project and Version attachments has been dropped in OpenProject 3.0.
Hence the only solution is to delete those attachments altogether:

RAILS_ENV=production rake migrations:attachments:delete_from_projects_and_versions

If you still need them, you might migrate them by creating a documents (requires the documents plugin) for them.
E.g. create one document for each project/version and then in the attachments table change container_type to 'document' and the container_id to the id of the respective document. All this is best done in a separate migration which you would create.

After this you rerun the migration.

Mysql2::Error: Illegal mix of collations

Continue the migrations after:

RAILS_ENV=production rake migrations:journals:fix_table_collation

This may occur when you forgot to specify a collation in database.yml:

production:
  adapter: mysql2
  database: my_database
  host: localhost
  username: my_user
  password: my_password
  encoding: utf8
  collation: utf8_general_ci

So to avoid this problem to begin with use whatever collation is used in the existing production data under collation.
When migrating from an older rails version it likely is 'utf8_general_ci' whereas in newer versions it usually is 'utf8_unicode_ci' which is what leads to this error eventually.
Alternatively you can just update the existing tables to whatever collation you prefer while also specifying it in database.yml before running any migrations.


OpenProject Migration 2.4 to OpenProject 3.0

This guide describes how to upgrade from OpenProject 2.4 to 3.0 including data migrations.
OpenProject 3.0 requires a new Ruby version, Ruby 2.1.

The guide covers the following steps:

If you have any problems along the way, feel free to ask for help in our Support Installation & Updates Forum.

Note: OpenProject 3.0 no longer supports attachments to projects or versions. Before migrating to OpenProject 3.0 you should backup all these attachments or upload them to OpenProject at another place. In case you still have attachments to projects or versions when running the database migrations, they will stop and ask you to delete them.
Note: OpenProject 3.0 no longer includes documents functionality. This functionality has been extracted into the OpenProject Documents plugin. If you want to keep your uploaded documents, you have to add this plugin to your OpenProject installation as described below.

Backup all data

While we try to make things as safe as possible, errors happen and data gets lost. Create a backup to prevent that.

OpenProject has data in these places:

Before continuing, backup all of the data listed above.

Upgrade OpenProject 2.4 to latest version

Before upgrading to 2.4, you need to make sure you have the latest version of 2.4 and have run all database migrations. You’ll have to do this since we squashed most of the previous migrations into a single one for OpenProject 3.0.

The following commands should help you with the upgrade, execute them in the existing openproject directory (assuming you previously cloned the openproject repository).

git fetch
git checkout 2.4.0
bundle install
bundle exec rake db:migrate RAILS_ENV=production

Install OpenProject 3.0

OpenProject 3.0 changes a lot of the underlying technology, e.g. OpenProject 2.4 required plugins to be put within the openproject directory, in the vendor/plugins path. OpenProject 3.0 now uses Gems for plugins. To prevent any remains from 2.4 affecting your 3.0 installation, we recommend installing OpenProject 3.0 in a new folder and start with a fresh clone of the code. If you can use a new machine that’s even better.

You can basically follow the general instructions for installing OpenProject 3.0 (Installation OpenProject 3 0), just make sure to run them in different folder than where your OpenProject 2.4 lies.

Here are some notes on steps you should or should not do while following the installation instructions.

Clone the OpenProject repository and copy files

After this step, you can copy data from your existing OpenProject 2.4 installation to the new OpenProject 3.0 directory. These are the files and folders you should copy:

Add plugins

You can follow the installation instructions here. Previously, plugins were copied into openproject/vendor/plugins. With OpenProject 3.0, they’re now Gems, so you can easily add them to the Gemfile.plugins as described in the installation instructions.

If you’re using the documents functionality in OpenProject 2.4, you’ll have to add the following line to the Gemfile.plugins.

gem "openproject-documents", :git => "https://github.com/finnlabs/openproject-documents.git", :branch => "stable"

Configure config/database.yml

You already copied this, so no need to configure from scratch. When using mysql, make sure to use the mysql2 adapter and not mysql.

Create databases

You can skip this step as you’ll keep your database.

Run database migrations and seeds

This step is a bit more complicated than for a fresh installation as you’ll have to run some rake tasks to migrate existing data.

Change timestamps timezone to UTC

The first rake task changes timestamps in the database from your application server timezone to UTC. It takes on parameter as environment variable, FROM. If your OpenProject 2.4 and OpenProject 3.0 application servers and your database server have the same timezone configured, you can skip the FROM parameter. Otherwise you’ll have to set it to your OpenProject 2.4 application server’s timezone in a way that your database understands.

An excerpt from the rake task’s description:

Examples: LOCAL (PostgreSQL), SYSTEM (MySQL), 'Europe/Berlin' (PostgreSQL), Europe/Berlin (MySQL)
(Note the quotes in the different examples)

Here’s the command to run the rake task:

bundle exec rake migrations:change_timestamps_to_utc FROM=<timezone>

Migrations

bundle exec rake db:migrate SECRET_TOKEN=irrelevanthere RAILS_ENV=production

Project and Version Attaachments
If you still have attachments to projects or versions, the migrations will stop here and ask you to run the following rake task.

WARNING: This rake task will delete all remaining attachments to projects and versions. See the beginning of this guide for more information.

bundle exec rake migrations:attachments:delete_from_projects_and_versions

After running the rake task above, continue the migrations with the same command used previously:

bundle exec rake db:migrate SECRET_TOKEN=irrelevanthere RAILS_ENV=production

Documents

If you still have documents in your OpenProject instance and didn’t add openproject-documents to the Gemfile.lock, the rake task will stop and ask you to run a rake task to delete all existing documents.

bundle exec rake migrations:documents:delete

Again, after running the rake task above, continue the migrations with the same command used previously:

bundle exec rake db:migrate SECRET_TOKEN=irrelevanthere RAILS_ENV=production

If you don’t see an error message, the migrations completed successfully.

Once the migrations are done, you can run OpenProject 3.0, see the installation instructions for more information on how to do that.

Note: Please make sure data looks as it should, check especially timestamps of existing data. If they’re wrong, make sure your user account has the correct timezone set, then double check the time zone of your application and database servers.

Again, if you have any problems along the way or want to give feedback to this guide, please create a topic in our Support Installation & Updates Forum.


Migration paths

We will provide a migration path from OpenProject 2.3 to OpenProject 3.2 as well as from Redmine and ChiliProject.

Please share your experiences and add any further hints.


Migration Redmine 2.x › OpenProject 3.0

Disclaimer

My experience with Ruby applications is rather limited. Please feel free to suggest improvements to this process.

I ran through the process many times to refine it and it is possible that I have missed a step or that others will encounter different problems.

Environment setup

Install three new environments:

In each case, make sure the production environment works correctly with the sample data.

Migration Process

The basic principle is to

In practice there were a few wrinkles.

Migration Steps

1. Make sure your Redmine copy is up and running with the correct data

On existing Redmine production host

    # mysqldump -p redmine > rm-20140311.sql

Copy the sql file to the new Redmine VM

Import the data to the new Redmine database

    # mysql -p redmine < rm-20140311.sql

2. Find a common point in the list of mirations (in db/migrate) between Redmine and OpenProject 2.4

Each migration is a separate file and on close inspection you will find that

In my case this was 20110401192910_add_index_to_users_type.rb

3. Migrate down in redmine to the common point

In the redmine root directory (on the new redmine VM)

There were 34 subsequent migrations so

    # RAILS_ENV=production rake db:rollback STEP=34

4. Copy the data to the new openproject 2.4 database

    # mysqldump -p redmine > rm-migrate.sql

    # mysqladmin -p drop openproject24
    # mysqladmin -p create openproject24

    # mysql -p openproject24 < rm-migrate.sql

5. Run all migrations to bring it up to 2.4 level

In the new openproject 2.4 root directory

    # RAILS_ENV=production rake db:migrate

I ran into a problem with some “NULL” values in the “possible_values” field of the custom_fields table. Fixed this by hand in mysql workbench on openproject24 and re-ran the migration.

6. Copy the data to the openproject 3.0 database

    # mysqldump -p openproject24 > op24-migrate.sql

copy the sql file to the openproject 3 server, then, on the new openproject 3.0 server

    # mysqladmin -p drop openproject     (clear away any old data)

    # mysql -p -u root

    mysql> CREATE DATABASE openproject CHARACTER SET utf8;  (did it this way because otherwise I got locale/collation issues)
    mysql> \q

    # mysql -p openproject < op24-migrate.sql

7. Run all migrations to bring it up to 3.0 level

In openproject 3.0 root directory, as the openproject user:

    $ RAILS_ENV="production" bundle exec rake db:migrate

This ran until it complained about attachments.

I manually (using Mysql Workbench) removed 4 bad attachments, the coresponding legacy journal entries, one other bad legacy journal entry, and the one and only document from the database.

I also changed the locale field in custom_field_translations to en (was en-GB).

Again I ran

    $ RAILS_ENV="production" bundle exec rake db:migrate

This then ran until I got

==  MigrateQueryTrackerReferencesToType: migrating ============================
-- Update tracker references in queries
rake aborted!
An error has occurred, all later migrations canceled:

undefined class/module Syck::/usr/local/rvm/gems/ruby-2.1.1/gems/delayed_job-3.0.5/lib/delayed/psych_ext.rb:135:in `rescue in resolve_class_with_constantize'

On investigation, I found I had to edit /usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/psych/class_loader.rb by adding:

require 'yaml'
YAML::ENGINE.yamler = 'syck'
require 'syck'

Again I ran

    $ RAILS_ENV="production" bundle exec rake db:migrate

This then ran to completion

I examined the work packages in the web interface and all looks good.

(I had to manually fix sone hardcoded URL references in Wiki pages that included the IP address of the old redmine server - removing “http://aa.bb.cc.dd”)

8. Copy the “files” directory over and flatten the structure

The files in redmine are organised hierarchically into years and months but openproject used a flat directory. The file names are however the same so just moving all the files from the subdirectories to the files directory itself is sufficient.

Hope this helps.

John Parker


Migration

We’re squashing migrations because the old ones became unmaintainable.
Primary motivation is the change in acts_as_journalized, which renders
some old migrations moving wiki_versions into journals obsolete.
Secondary motivation is the abundance in migrations, clumsy inclusion of
seed data into migrations and rage from operations.

State of the Union

The different branches master (rails2) and feature/rails3 (rails3)
have diverged drastically. The point the divergence started is over a
year ago. Since then:

  1. Migrations were added to the rails2 branch.
  2. Migrations were added to the rails3 branch.
  3. Migrations were merged from the rails2 into the rails3 branch
  4. Migrations in the rails3 branch were made to work w/ ruby 1.9.3
  5. Migrations in the rails3 branch were made to work w/ rails 3.2
  6. Migrations in the rails3 branch were made to work with OpenProject 3.0.0.*
  7. Migrations from plugins were added to the rails3 branch w/ their original timestamps
  8. Migrations from plugins were added to the rails3 branch w/ new timestamps

The following things also apply:

  1. Migrations in the rails2 branch do not work with 1.9.3, but they work w/ 1.8.7
  2. Migrations in the rails3 branch do not work with 1.8.7, but they work w/ 1.9.3
  3. Migrations in the rails2 branch run fine until and including their HEAD.
  4. Migrations in the rails3 branch run fine until and including their HEAD.

Goal

What we want to acomplish:

  1. Migrations to OpenProject 1.9.3 from any state in the rails2 and rails3 branch can be run w/ 1.9.3
  2. Migrations to state in the rails2 branch that is not HEAD can be run w/ 1.8.3
  3. All migrations until a certain migration are squashed into one, not affecting the previoulsy run migrations in any instances.

Steps

Finding a point until which to squash migrations

The commit 1a26f29 has been identified to contain only migrations that both the rails2 and rails3 branch also contain. The rails2 and rails3 branch also only contain younger migrations than the youngest migration in 1a26f29. The youngest migration in 1a26f29 is:

    20120319135006

Compare schema migrations from scratch to 20120319135006

Running the migrations from scratch to 20120319135006, revealed some issues with migration compatibility. This is the diff between the rails2 branch and the rails3 branch until the migration 20120319135006:

< # This file is auto-generated from the current state of the database. Instead of editing this file,
< # please use the migrations feature of Active Record to incrementally modify your database, and
< # then regenerate this schema definition.
---

TextileConverterBlockquoteStart09339cab-f4f4-4739-85b0-d02ba1f342e6

# encoding: UTF-8
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.

TextileConverterBlockquoteEnd09339cab-f4f4-4739-85b0-d02ba1f342e6

5,7c6,9
< # Note that this schema.rb definition is the authoritative source for your database schema. If you need
< # to create the application database on another system, you should be using db:schema:load, not running
< # all the migrations from scratch. The latter is a flawed and unsustainable approach (the more migrations
---

TextileConverterBlockquoteStart09339cab-f4f4-4739-85b0-d02ba1f342e6

# Note that this schema.rb definition is the authoritative source for your
# database schema. If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations

TextileConverterBlockquoteEnd09339cab-f4f4-4739-85b0-d02ba1f342e6

113a116,118

TextileConverterBlockquoteStart09339cab-f4f4-4739-85b0-d02ba1f342e6

t.datetime "created_at",      :null => false
t.datetime "updated_at",      :null => false
t.string   "name"

TextileConverterBlockquoteEnd09339cab-f4f4-4739-85b0-d02ba1f342e6

116,118d120
<     t.string   "name"
<     t.datetime "created_at"
<     t.datetime "updated_at"
121c123,124
<   add_index "custom_field_translations", ["custom_field_id"], :name => "index_f42a0c96f950276606abbd14403e71f580e91394"
---

TextileConverterBlockquoteStart09339cab-f4f4-4739-85b0-d02ba1f342e6

add_index "custom_field_translations", ["custom_field_id"], :name => "index_custom_field_translations_on_custom_field_id"
add_index "custom_field_translations", ["locale"], :name => "index_custom_field_translations_on_locale"

TextileConverterBlockquoteEnd09339cab-f4f4-4739-85b0-d02ba1f342e6

379c382
<     t.text     "summary",     :default => ""
---

TextileConverterBlockquoteStart09339cab-f4f4-4739-85b0-d02ba1f342e6

t.text     "summary"

TextileConverterBlockquoteEnd09339cab-f4f4-4739-85b0-d02ba1f342e6

Next try was 20120319095930:

*** schema-old.rb   Mon Aug 12 16:18:33 2013
--- schema.rb   Mon Aug 12 16:34:07 2013
***************
*** 1,15 ****
! # This file is auto-generated from the current state of the database. Instead of editing this file, 
! # please use the migrations feature of Active Record to incrementally modify your database, and
! # then regenerate this schema definition.
  #
! # Note that this schema.rb definition is the authoritative source for your database schema. If you need
! # to create the application database on another system, you should be using db:schema:load, not running
! # all the migrations from scratch. The latter is a flawed and unsustainable approach (the more migrations
  # you'll amass, the slower it'll run and the greater likelihood for issues).
  #
  # It's strongly recommended to check this file into your version control system.

  ActiveRecord::Schema.define(:version => 20120319095930) do

    create_table "attachments", :force => true do |t|
      t.integer  "container_id",                 :default => 0,  :null => false
--- 1,17 ----
! # encoding: UTF-8
! # This file is auto-generated from the current state of the database. Instead
! # of editing this file, please use the migrations feature of Active Record to
! # incrementally modify your database, and then regenerate this schema definition.
  #
! # Note that this schema.rb definition is the authoritative source for your
! # database schema. If you need to create the application database on another
! # system, you should be using db:schema:load, not running all the migrations
! # from scratch. The latter is a flawed and unsustainable approach (the more migrations
  # you'll amass, the slower it'll run and the greater likelihood for issues).
  #
  # It's strongly recommended to check this file into your version control system.

  ActiveRecord::Schema.define(:version => 20120319095930) do

    create_table "attachments", :force => true do |t|
      t.integer  "container_id",                 :default => 0,  :null => false
***************
*** 362,378 ****
      t.boolean  "is_public",   :default => true, :null => false
      t.integer  "parent_id"
      t.datetime "created_on"
      t.datetime "updated_on"
      t.string   "identifier"
      t.integer  "status",      :default => 1,    :null => false
      t.integer  "lft"
      t.integer  "rgt"
!     t.text     "summary",     :default => ""
    end

    add_index "projects", ["lft"], :name => "index_projects_on_lft"
    add_index "projects", ["rgt"], :name => "index_projects_on_rgt"

    create_table "projects_trackers", :id => false, :force => true do |t|
      t.integer "project_id", :default => 0, :null => false
      t.integer "tracker_id", :default => 0, :null => false
--- 364,380 ----
      t.boolean  "is_public",   :default => true, :null => false
      t.integer  "parent_id"
      t.datetime "created_on"
      t.datetime "updated_on"
      t.string   "identifier"
      t.integer  "status",      :default => 1,    :null => false
      t.integer  "lft"
      t.integer  "rgt"
!     t.text     "summary"
    end

    add_index "projects", ["lft"], :name => "index_projects_on_lft"
    add_index "projects", ["rgt"], :name => "index_projects_on_rgt"

    create_table "projects_trackers", :id => false, :force => true do |t|
      t.integer "project_id", :default => 0, :null => false
      t.integer "tracker_id", :default => 0, :null => false
***************
*** 385,400 ****
--- 387,403 ----
      t.integer "project_id"
      t.string  "name",          :default => "",    :null => false
      t.text    "filters"
      t.integer "user_id",       :default => 0,     :null => false
      t.boolean "is_public",     :default => false, :null => false
      t.text    "column_names"
      t.text    "sort_criteria"
      t.string  "group_by"
+     t.boolean "display_sums"
    end

    add_index "queries", ["project_id"], :name => "index_queries_on_project_id"
    add_index "queries", ["user_id"], :name => "index_queries_on_user_id"

    create_table "repositories", :force => true do |t|
      t.integer "project_id",                  :default => 0,  :null => false
      t.string  "url",                         :default => "", :null => false

Still no empty changeset. Try another old commit 69cbafa and version 20110729125454:

*** schema-old.rb   Mon Aug 12 17:16:14 2013
--- schema.rb   Mon Aug 12 17:21:26 2013
***************
*** 1,15 ****
! # This file is auto-generated from the current state of the database. Instead of editing this file, 
! # please use the migrations feature of Active Record to incrementally modify your database, and
! # then regenerate this schema definition.
  #
! # Note that this schema.rb definition is the authoritative source for your database schema. If you need
! # to create the application database on another system, you should be using db:schema:load, not running
! # all the migrations from scratch. The latter is a flawed and unsustainable approach (the more migrations
  # you'll amass, the slower it'll run and the greater likelihood for issues).
  #
  # It's strongly recommended to check this file into your version control system.

  ActiveRecord::Schema.define(:version => 20110729125454) do

    create_table "attachments", :force => true do |t|
      t.integer  "container_id",                 :default => 0,  :null => false
--- 1,17 ----
! # encoding: UTF-8
! # This file is auto-generated from the current state of the database. Instead
! # of editing this file, please use the migrations feature of Active Record to
! # incrementally modify your database, and then regenerate this schema definition.
  #
! # Note that this schema.rb definition is the authoritative source for your
! # database schema. If you need to create the application database on another
! # system, you should be using db:schema:load, not running all the migrations
! # from scratch. The latter is a flawed and unsustainable approach (the more migrations
  # you'll amass, the slower it'll run and the greater likelihood for issues).
  #
  # It's strongly recommended to check this file into your version control system.

  ActiveRecord::Schema.define(:version => 20110729125454) do

    create_table "attachments", :force => true do |t|
      t.integer  "container_id",                 :default => 0,  :null => false
***************
*** 362,378 ****
      t.boolean  "is_public",   :default => true, :null => false
      t.integer  "parent_id"
      t.datetime "created_on"
      t.datetime "updated_on"
      t.string   "identifier"
      t.integer  "status",      :default => 1,    :null => false
      t.integer  "lft"
      t.integer  "rgt"
!     t.text     "summary",     :default => ""
    end

    add_index "projects", ["lft"], :name => "index_projects_on_lft"
    add_index "projects", ["rgt"], :name => "index_projects_on_rgt"

    create_table "projects_trackers", :id => false, :force => true do |t|
      t.integer "project_id", :default => 0, :null => false
      t.integer "tracker_id", :default => 0, :null => false
--- 364,380 ----
      t.boolean  "is_public",   :default => true, :null => false
      t.integer  "parent_id"
      t.datetime "created_on"
      t.datetime "updated_on"
      t.string   "identifier"
      t.integer  "status",      :default => 1,    :null => false
      t.integer  "lft"
      t.integer  "rgt"
!     t.text     "summary"
    end

    add_index "projects", ["lft"], :name => "index_projects_on_lft"
    add_index "projects", ["rgt"], :name => "index_projects_on_rgt"

    create_table "projects_trackers", :id => false, :force => true do |t|
      t.integer "project_id", :default => 0, :null => false
      t.integer "tracker_id", :default => 0, :null => false

Quashing them into one up migration

Testing

Testing w/ rails2 proper

Testing w/ rails3 proper

Testing w/ intermediate rails2

Testing w/ intermediate rails3


OpenProject gets a fresher, cleaner, flatter design

First, we had to clean-up a lot of the old CSS structure before we started to implement the new icon fonts as well as the changes in the layout and navigation. Now, we will continuously re-redesign also the different views in the content area and harmonize the user interface.

The focus of our first sprint were the following design components:

The next steps are:

Thanks a lot to Christoph Zierz from ZZ Media who contributed all related design work.


Select your Avatar locally from OpenProject

Have you discovered yet the small new plugin on OpenProject.org? Until now, OpenProject got the Avatar only from Gravatar. With the deployment this week, you are able to change your Avatar locally in OpenProject:


News


UPDATE in July 2023: See the new and up-to-date glossary here

----------------------------------------------------------------------------------

When working with OpenProject, you will notice many terms and expressions that may be unclear at first sight.
In order to provide a better understanding and give an overview of the expressions, we created a glossary for OpenProject.
The glossary contains brief definitions of terms such as Work Package, Timeline and Type.
When applicable, a brief explanation is included of what to consider when using the described functionality.

No glossary is ever complete. This one will grow and change along with OpenProject.
If you notice any missing terms or disagree with the provided definitions, please notify us in the comments below.


A severe vulnerability (CVE 2014-0160) was recently revealed in a cryptographic library called OpenSSL. OpenSSL is used on many servers to handle SSL-encryption of web traffic. The people who found the vulnerability called it ‘Heartbleed’ and made a web page providing technical details.

openproject.org infastructure

openproject.org uses Amazon Web Services as hosting provider and uses their ‘Elastic Load Balancing’ (ELB) service for SSL-termination, i.e. it does all the encryption and decryption of web traffic. This service uses the OpenSSL library and was vulnerable. On April 8th, Amazon issued a statement that the vulnerability for their ELB service had been fixed.

The vulnerability allowed an attacker to read memory from the attacked server which could include private encryption keys and other secrets. As a precaution, we revoked the previous SSL-certificate for openproject.org and are now using a new one. On modern browsers, SSL-traffic with openproject.org is encrypted with a cipher that has a property called Forward Secrecy. This property ensures that previously captured traffic can’t be decrypted later when a private key is revealed or stolen.

In addition to revoking the SSL certificates we reset all active user sessions, i.e. all users have been automatically logged out. If you want to be extra cautious, you can change your password on openproject.org.

Our source code is hosted on GitHub, they have fixed the vulnerability as well.

OpenProject installations

If you’re running your own OpenProject instance or any other service providing SSL-encryption (besides web servers, mail and database servers could also be vulnerable), please check whether you’re using a vulnerable version of OpenSSL and upgrade if necessary.

Here are some hints:

You can find more information on vulnerable versions, how to fix it, and details about the vulnerability on http://heartbleed.com.

Conclusion

We always try to keep openproject.org users safe and OpenProject itself and our infrastruture secure. If you find a vulnerability in OpenProject or our infrastructure, please contact us via email.


Font Icons for OpenProject

Keeping track with the rapid development of technical devices is not easy for the people in charge of the user interface design.
The devices’ screens become larger and larger with even higher resolutions and reveal all flaws of the user interface.
Even the small but very detailed screens of mobile devices are posing challenges.
Unless the application icons are included in various resolutions, which makes page loading times multiply, they become blurry when zooming in.

OpenProject suffered from these weaknesses as well.
The icons were very small, not really in line with the rest of the polished user interface and zooming did not improve the view at all.
Moreover, the promised simplicity of customizing the application to make it fit any corporate design or personal preferences, could not be realized as easy as it was strived for.
Adjusting the icon colour was a painful procedure of recolouring the single image files one by one.

Now all of this belongs to the past. Finally, the old images are exchanged for a more stylish monochrome set, embedded in an icon font set.
Besides, we adjusted some views for larger screens, which also includes resizing the common font elements.

What does that mean for you as an OpenProject user?

The OpenProject core does now contain a font set, which does also cover current plugins, like meetings, scrum and cost+reporting.

What’s next?

Credits?


Work package as a unification of issues and planning elements

After rebuilding the whole concept and architecture of issues and planning elements, in this last sprint we finally eliminated the issues completely in the OpenProject Rails 3 core.

Due to historically grown architecture, we initially built the whole timelines functionalities as a plugin - having two separate worlds: One with issues (in the core) and one with planning elements (as plugin) to be displayed in the timelines.

However, a project timeline with phases and milestones (mostly shown as Gantt chart) is the heart of a project. It therefore should be an essential feature of our software and included in the OpenProject core.
Also, the hard differentiation between issues and planning elements was not obvious. One does not only want to have Releases, Sprints or Milestones in this plan, but also the possibility to show and to link other elements in the timeline coming from issues (e.g. User Stories, Tasks, Bugs, …). So, why having issues and planning elements separated if after all it appears to be the same?

We took the rocky road to unify it, having only one element for the future instead of just harmonizing the user interface. And we finally got rid of all former issues and planning elements, having only work packages (e.g. in a task list view or in a project plan with Gantt chart).

So, let’s see where this will lead us with regard to collaborative project planning.

Technical Achievements

With the unification of issues and planning elements in work packages we are able to use the advantages of both worlds:

Migration

We are busy working out a migration path to bring elder instances with issues and planning elements to the new Rails 3 instance with integrated work packages.

Future prospects

Since we believe that project planning, including timeline functionalities, is one of the essential parts of project management, we think that we will more and more anchoring this feature in OpenProject. Our Vision is to head towards a collaborative planning approach:

If you like, let us hear your thoughts on this topic.

Example: Integration Management with adaptive timeline reports, e.g. configured for a project manager*

*Adaptive timeline reports can be configured for any kind of planning perspective or planning horizon based on the decentralized planning.


OpenProject 3.0 to OpenProject 4.0 Debian/Ubuntu Upgrade Guide

This guide describes the upgrade process from OpenProject 3.0 to 4.0 on Debian 7.7 and Ubuntu 14.04 LTS step by step.
Note: We strongly recommend to update your OpenProject installation to the latest available 3.0 version (currently 3.0.14), before attempting an update to 4.0.

Preparation


RAILS\_ENV=production bundle exec script/delayed\_job stop


\[root@debian\]\# apt-get update  
\[root@debian\]\# apt-get upgrade

Get the new OpenProject Source Code

Change into the directory where OpenProject was installed as the operating-system-user OpenProject runs as. We assume that OpenProject is installed in /home/openproject/openproject by the openproject user.

[root@debian]# su - openproject -c "bash -l"
[openproject@debian]# cd ~/openproject/openproject

Remove manual changes and modifications (If you have modified OpenProject source files and want to preserve those changes, back up your changes, and re-apply them later):

[openproject@debian]# git reset --hard
[openproject@debian]# git checkout stable
[openproject@debian]# git pull

Upgrade Ruby

OpenProject 4.0 requires Ruby to be installed in version 2.1.x. Assuming you have installed Ruby via RVM, do the following to upgrade your Ruby installation:

[openproject@debian]# rvm get stable
[openproject@debian]# export -f rvm_debug
[openproject@debian]# rvm install 2.1.4
[openproject@debian]# rvm use --default 2.1.4
[openproject@debian]# gem install bundler
[openproject@debian]# bundle install

Node.js installation

The major change from OpenProject 3.0 to 4.0 (when looking at the system requirements and installation) is how the assets (JavaScript and CSS) are precompiled. The precompilation step needs Node.js now.
We will install the latest 0.10.x version of Node.js via nodeenv :

[openproject@debian]# exit
[root@debian]# apt-get install python python-pip
[root@debian]# pip install nodeenv
[root@debian]# su - openproject -c "bash -l"
[openproject@debian]# cd /home/openproject
[openproject@debian]# nodeenv nodeenv
[openproject@debian]# source ./nodeenv/bin/activate
[openproject@debian]# npm -g install bower

As a reference, the following Node.js and NPM versions have been installed on our system:

[openproject@debian]# node --version
                      v0.10.33
[openproject@debian]# npm --version
                      1.4.28
[openproject@debian]# bower --version
                      1.3.12

The Upgrade

Now that the sources and dependencies are in place, you can migrate the Database and do the upgrade:

[openproject@debian]# cd /home/openproject/openproject
[openproject@debian]# npm install
[openproject@debian]# bower install
[openproject@debian]# RAILS_ENV="production" bundle exec rake db:migrate
[openproject@debian]# RAILS_ENV="production" bundle exec rake db:seed
[openproject@debian]# RAILS_ENV="production" bundle exec rake assets:precompile
[openproject@debian]# touch tmp/restart.txt

Serving OpenProject

This sections only applies to you, if you serve OpenProject via Apache and Passenger. If you serve OpenProject in a different way, be sure to check that it still works.

During the 3.0 installation, we have set-up Passenger in the Apache configuration files. During the OpenProject upgrade, we have potentially installed a new Ruby and Passenger Version. The versions of Ruby and Passenger appear in the Apache configuration like this:

LoadModule passenger_module /home/openproject/.rvm/gems/ruby-2.1.4/gems/passenger-4.0.53/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /home/openproject/.rvm/gems/ruby-2.1.4/gems/passenger-4.0.53
  PassengerDefaultRuby /home/openproject/.rvm/gems/ruby-2.1.4/wrappers/ruby
</IfModule>

Please run the following commands to upgrade passenger and re-install the Apache module:

[openproject@debian]# gem update passenger
[openproject@debian]# gem cleanup passenger
[openproject@debian]# passenger-install-apache2-module

The output of passenger-install-apache2-module2 tells you the new contents of the Apache configuration files.
It is basically the same as what is already installed, except for the updated version numbers. Please adapt your Apache configuration accordingly.

Don’t forget to restart apache after the configuration change:

[root@debian]# service apache2 reload

The Aftermath

Frequently Asked Questions (FAQ)


bower openproject-ui\_components\#with-bower ECMDERR Failed to execute “git ls-remote —tags —heads git://github.com/opf/openproject-ui\_components.git”, exit code of \#128

Additional error details:  
fatal: unable to connect to github.com:  
github.com\[0: 192.30.252.131\]: errno=Connection refused

npm ERR\! OpenProject@0.1.0 postinstall: \`./node\_modules/bower/bin/bower install\`

The solution is to configure git to use https:// URLs instead of git:// URLs lke this:


git config —global url.“https://”.insteadOf git://

Questions, Comments, and Feedback

If you have any further questions, comments, feedback, or an idea to enhance this guide, please tell us at the appropriate community.openproject.org forum.


Tutorial: Step By Step Installation of OpenProject 4.0 with Apache on Debian 7.7 and Ubuntu 14.04 LTS

This tutorial helps you to deploy OpenProject 4.0. Please, aware that:

  1. This guide requires that you have a clean Debian 7.7 x64 installation (from netinstall image, minimal installation) or Ubuntu 14.04 LTS x64 installation with administrative rights.
  2. OpenProject will be installed with a MySQL database (the guide should work analogous with PostgreSQL).
  3. OpenProject will be served in a production environment with Apache (this guide should work analogous with other servers, like nginx and others)

In this guide, we will install OpenProject 4.0 with a MySQL database. Openproject will be served with the Apache web server. When your server needs to reboot, OpenProject should start automatically with your server.

If you find any bugs or you have any recommendations for improving this tutorial, please, feel free to comment

Prepare your environment

Install tools needed to compile Ruby and run OpenProject:

Only on Debian

[root@debian]# apt-get update
[root@debian]# apt-get install git curl build-essential zlib1g-dev libyaml-dev libssl-dev libmysqlclient-dev libpq-dev libsqlite3-dev memcached libffi5

Only on Ubuntu

[root@ubuntu]# apt-get update
[root@ubuntu]# apt-get install git curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libmysqlclient-dev libpq-dev libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties memcached libgdbm-dev libncurses5-dev automake libtool bison libffi-dev

Debian and Ubuntu

Create a dedicated user for OpenProject:

[root@debian]# groupadd openproject
[root@debian]# useradd --create-home --gid openproject openproject
[root@debian]# passwd openproject (enter desired password)

Install Database (MySQL) packages

During installation, you have to enter a password for the mysql root-user.

[root@debian]# apt-get install mysql-server mysql-client

As a reference, we have installed the following MySQL version:

Only on Debian

[root@debian]# mysql --version
  mysql  Ver 14.14 Distrib 5.5.40, for debian-linux-gnu (x86_64) using readline 6.2

Only on Ubuntu

[root@ubuntu]# mysql --version
  mysql  Ver 14.14 Distrib 5.5.40, for debian-linux-gnu (x86_64) using readline 6.3

Debian and Ubuntu

Create the OpenProject MySQL-user and database:

[root@debian]# mysql -u root -p

You may replace the string “openproject” with the desired username and database-name. The password “my_password” should definitely be changed.

mysql> CREATE DATABASE openproject CHARACTER SET utf8;
mysql> CREATE USER 'openproject'@'localhost' IDENTIFIED BY 'my_password';
mysql> GRANT ALL PRIVILEGES ON openproject.* TO 'openproject'@'localhost';
mysql> \q

Install Node.js

We will install the latest 0.10.x version of Node.js via nodeenv :

[root@debian]# apt-get install python python-pip
[root@debian]# pip install nodeenv

Install Ruby

Switch to the dedicated OpenProject-user (user “openproject” in our case):

[root@debian]# su openproject -c "bash -l"

Switch to the user’s home directory …

[openproject@debian]# cd ~

… and install RVM (Ruby Version Manager)

[openproject@debian]# \curl -sSL https://get.rvm.io | bash -s stable

It can be that curl fails to download the RVM source, because of the missing GPG key. If that is the case, download the key (as suggested in the error message):

[openproject@debian]# gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3

Then try to download RVM again and continue the installation with:

[openproject@debian]# source $HOME/.rvm/scripts/rvm
[openproject@debian]# export -f rvm_debug
[openproject@debian]# rvm autolibs disable
[openproject@debian]# rvm install 2.1.4
[openproject@debian]# rvm use --default 2.1.4
[openproject@debian]# gem install bundler

Activate Node.js

[openproject@debian]# cd ~
[openproject@debian]# nodeenv nodeenv
[openproject@debian]# source ./nodeenv/bin/activate
[openproject@debian]# npm -g install bower

As a reference, the following Node.js and NPM versions have been installed on our system:

[openproject@debian]# node --version
                      v0.10.33
[openproject@debian]# npm --version
                      1.4.28
[openproject@debian]# bower --version
                      1.3.12

Install OpenProject

[openproject@debian]# cd ~
[openproject@debian]# git clone https://github.com/opf/openproject.git
[openproject@debian]# cd openproject
[openproject@debian]# git checkout stable
[openproject@debian]# bundle install
[openproject@debian]# npm install
[openproject@debian]# bower install

Configure OpenProject

Create and configure the database configuration file in config/database.yml (relative to the openproject-directory.

[openproject@debian]# cp config/database.yml.example 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):

production:
  adapter: mysql2
  database: openproject
  host: localhost
  username: openproject
  password: openproject
  encoding: utf8

development:
  adapter: mysql2
  database: openproject
  host: localhost
  username: openproject
  password: openproject
  encoding: utf8

Configure email notifications (using a gmail account as an example) by creating configuration.yml in config directory.

[openproject@debian]# cp config/configuration.yml.example config/configuration.yml

Now, edit the configuration.yml file as you like.

production:                          #main level
  email_delivery_method: :smtp       #settings for the production environment
  smtp_address: smtp.gmail.com
  smtp_port: 587
  smtp_domain: smtp.gmail.com
  smtp_user_name: ***@gmail.com
  smtp_password: ****
  smtp_enable_starttls_auto: true
  smtp_authentication: plain

Add this line into configuration.yml file at the of of file for better performance of OpenProject:

rails_cache_store: :memcache

NOTE: You should validate your .yml-files, for example with http://www.yamllint.com/. Both, the database.yml and configuration.yml file are sensitive to whitespace. It is pretty easy to write invalid .yml files without seeing the error. Validating those files prevents you from such errors.

Finish the Installation of OpenProject

[openproject@debian]# cd ~/openproject
[openproject@debian]# bundle exec rake db:create:all
[openproject@debian]# bundle exec rake generate_secret_token
[openproject@debian]# RAILS_ENV="production" bundle exec rake db:migrate
[openproject@debian]# RAILS_ENV="production" bundle exec rake db:seed
[openproject@debian]# RAILS_ENV="production" bundle exec rake assets:precompile

Serve OpenProject with Apache and Passenger

OpenProject will be served by the Rails application server “Passenger”, and the apache webserver.
We set up the system in a way, that automatically starts OpenProject with the operating system.

Only on Debian

First, exit the current bash session with the openproject user, so that we are again in a root shell.
Then, we prepare apache and passenger:

[openproject@debian]# exit
[root@debian]# apt-get install apache2 libcurl4-gnutls-dev apache2-threaded-dev libapr1-dev libaprutil1-dev
[root@debian]# chmod o+x "/home/openproject"

Now, the Passenger gem is installed and integrated into apache.

[root@debian]# su - openproject -c "bash -l"
[openproject@debian]# cd ~/openproject
[openproject@debian]# gem install passenger
[openproject@debian]# passenger-install-apache2-module

Follow the instructions passenger provides.
The passenger installer will ask you the question in “Which languages are you interested in?”. We are interested only in ruby.

As told by the installer, add this lines to /etc/apache2/apache2.conf.
But before copy&pasting the following lines, check if the content (especially the version numbers!) is the same as the “passenger-install-apache2-module” installer said. When you’re in doubt, do what passenger tells you.

LoadModule passenger_module /home/openproject/.rvm/gems/ruby-2.1.4/gems/passenger-4.0.53/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /home/openproject/.rvm/gems/ruby-2.1.4/gems/passenger-4.0.53
  PassengerDefaultRuby /home/openproject/.rvm/gems/ruby-2.1.4/wrappers/ruby
</IfModule>

As the root user, create the file /etc/apache2/conf.d/openproject.conf with the following contents:

<VirtualHost *:80>
   ServerName www.myopenprojectsite.com
   # !!! Be sure to point DocumentRoot to 'public'!
   DocumentRoot /home/openproject/openproject/public
   <Directory /home/openproject/openproject/public>
      # This relaxes Apache security settings.
      AllowOverride all
      # MultiViews must be turned off.
      Options -MultiViews
      # Uncomment this if you're on Apache >= 2.4:
      #Require all granted
   </Directory>
</VirtualHost>

Only on Ubuntu

First, exit the current bash session with the openproject user, so that we are again in a root shell.
Then, we prepare apache and passenger:

[openproject@ubuntu]# exit
[root@ubuntu]# apt-get install apache2 libcurl4-gnutls-dev apache2-threaded-dev libapr1-dev libaprutil1-dev
[root@ubuntu]# chmod o+x "/home/openproject"

As a reference, the following version of apache was installed:

[root@ubuntu]# apache --version

Now, the Passenger gem is installed and integrated into apache.

[root@ubuntu]# su - openproject -c "bash -l"
[openproject@ubuntu]# cd ~/openproject
[openproject@ubuntu]# gem install passenger
[openproject@ubuntu]# passenger-install-apache2-module

Follow the instructions passenger provides.
The passenger installer will ask you the question in “Which languages are you interested in?”. We are interested only in ruby.

The passenger installer tells us to edit the apache config files. To do this, continue as the root user:

[openproject@ubuntu]# exit

As told by the installer, create the file /etc/apache2/mods-available/passenger.load and add the following line.
But before copy&pasting the following lines, check if the content (especially the version numbers!) is the same as the “passenger-install-apache2-module” installer said. When you’re in doubt, do what passenger tells you.

LoadModule passenger_module /home/openproject/.rvm/gems/ruby-2.1.4/gems/passenger-4.0.53/buildout/apache2/mod_passenger.so

Then create the file /etc/apache2/mods-available/passenger.conf with the following contents (again, take care of the version numbers!):

<IfModule mod_passenger.c>
  PassengerRoot /home/openproject/.rvm/gems/ruby-2.1.4/gems/passenger-4.0.53
  PassengerDefaultRuby /home/openproject/.rvm/gems/ruby-2.1.4/wrappers/ruby
</IfModule>

Then run:

[root@openproject]# a2enmod passenger

As the root user, create the file /etc/apache2/sites-available/openproject.conf with the following contents:

<VirtualHost *:80>
   ServerName www.myopenprojectsite.com
   # !!! Be sure to point DocumentRoot to 'public'!
   DocumentRoot /home/openproject/openproject/public
   <Directory /home/openproject/openproject/public>
      # This relaxes Apache security settings.
      AllowOverride all
      # MultiViews must be turned off.
      Options -MultiViews
      # Uncomment this if you're on Apache >= 2.4:
      Require all granted
   </Directory>
</VirtualHost>

Let’s enable our new “openproject” site (and disable the default site, if necessary)

[root@ubuntu]# a2dissite 000-default
[root@ubuntu]# a2ensite openproject

Debian and Ubuntu

Now, we (re-)start Apache:

[root@debian]# service apache2 reload

Your OpenProject installation should be accessible on port 80 (http). A default admin-account is created for you having the following credentials:

Username: admin
Password: admin

Please, change the password on the first login. Also, we highly recommend to configure the SSL module in Apache for https communication.

Activate Background Jobs

OpenProject sends (some) mails asynchronously by using background jobs. All such jobs are collected in a queue, so that a separate process can work on them. This means that we have to start the background worker. To automate this, we put the background worker into a cronjob.

[root@debian]# su - openproject -c "bash -l"
[openproject@debian]# crontab -e

Now, the crontab file opens in the standard editor. Add the following entry to the file:

*/1 * * * * cd /home/openproject/openproject; /home/openproject/.rvm/gems/ruby-2.1.4/wrappers/rake jobs:workoff

This will start the worker job every minute.

Follow ups

Your OpenProject installation is ready to run. However, there are some things to consider:

Plug-In Installation (Optional)

This step is optional.

OpenProject can be extended by various plug-ins, which extend OpenProject’s capabilities.
For general information and a list of all plug-ins known to us, refer to to the plug-in page.

OpenProject plug-ins are separated in ruby gems. You can install them by listing them in a file called Gemfile.plugins. An example Gemfile.plugins file looks like this:

# Required by backlogs
gem "openproject-pdf_export", git: "https://github.com/finnlabs/openproject-pdf_export.git", :branch => "stable"
gem "openproject-backlogs", git: "https://github.com/finnlabs/openproject-backlogs.git", :branch => "stable"

If you have modified the Gemfile.plugins file, always repeat the following steps of the OpenProject installation:

[openproject@debian]# cd ~/openproject
[openproject@debian]# bundle install
[openproject@debian]# bower install
[openproject@debian]# RAILS_ENV="production" bundle exec rake db:migrate
[openproject@debian]# RAILS_ENV="production" bundle exec rake db:seed
[openproject@debian]# RAILS_ENV="production" bundle exec rake assets:precompile

Restart the OpenProject server afterwards (yes, you can do that without restarting Apache):

[openproject@debian]# touch ~/openproject/tmp/restart.txt

The next web-request to the server will take longer (as the application is restarted). All subsequent request should be as fast as always.

We encourage you to extend OpenProject yourself by writing a plug-in. Please, read the plugin-contributions guide for more information.

Troubleshooting

You can find the error logs for apache here:

/var/log/apache2/error.log

The OpenProject logfile can be found here:

/home/openproject/openproject/log/production.log

If an error occurs, it should be logged there.

If you need to restart the server (for example after a configuration change), do

[openproject@debian]# touch ~/openproject/tmp/restart.txt

Frequently Asked Questions (FAQ)


RAILS\_ENV=“production” bundle exec rake db:seed


/var/log/apache2/error.log

The OpenProject log can be found here:


/home/openproject/openproject/log/production.log


bower openproject-ui\_components\#with-bower ECMDERR Failed to execute “git ls-remote —tags —heads git://github.com/opf/openproject-ui\_components.git”, exit code of \#128

Additional error details:  
fatal: unable to connect to github.com:  
github.com\[0: 192.30.252.131\]: errno=Connection refused

npm ERR\! OpenProject@0.1.0 postinstall: \`./node\_modules/bower/bin/bower install\`

The solution is to configure git to use https:// URLs instead of git:// URLs lke this:


git config —global url.“https://”.insteadOf git://

Questions, Comments, and Feedback

If you have any further questions, comments, feedback, or an idea to enhance this guide, please tell us at the appropriate community.openproject.org forum.
Follow OpenProject on twitter, and follow the news on openproject.org to stay up to date.

Screencast of this Installation Guide

Screencast


Tutorial: Step By Step Installation of OpenProject 4.0 with Apache on Ubuntu 14.04 LTS

This tutorial helps you to deploy OpenProject 4.0. Please, aware that:

  1. This guide requires that you have a clean Ubuntu 14.04 x64 installation with administrative rights. We have tested the installation guide on Ubuntu Server, but it should work on any derivative.
  2. OpenProject will be installed with a MySQL database (the guide should work analogous with PostgreSQL).
  3. OpenProject will be served in a production environment with Apache (this guide should work analogous with other servers, like nginx and others)

In this guide, we will install OpenProject 4.0 with a MySQL database. Openproject will be served with the Apache web server. When your server needs to reboot, OpenProject should start automatically with your server.

If you find any bugs or you have any recommendations for improving this tutorial, please, feel free to comment

Prepare your environment

Install tools needed to compile Ruby and run OpenProject:

[root@ubuntu]# apt-get update
[root@ubuntu]# apt-get install git curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libmysqlclient-dev libpq-dev libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties memcached libgdbm-dev libncurses5-dev automake libtool bison libffi-dev

Create a dedicated user for OpenProject:

[root@ubuntu]# groupadd openproject
[root@ubuntu]# useradd --create-home --gid openproject openproject
[root@ubuntu]# passwd openproject (enter desired password)

Install Database (MySQL) packages

During installation, you have to enter a password for the mysql root-user.

[root@ubuntu]# apt-get install mysql-server mysql-client

As a reference, we have installed the following MySQL version:

[root@ubuntu]# mysql --version
  mysql  Ver 14.14 Distrib 5.5.40, for debian-linux-gnu (x86_64) using readline 6.3

Create the OpenProject MySQL-user and database:

[root@ubuntu]# mysql -u root -p

You may replace the string “openproject” with the desired username and database-name. The password “my_password” should definitely be changed.

mysql> CREATE DATABASE openproject CHARACTER SET utf8;
mysql> CREATE USER 'openproject'@'localhost' IDENTIFIED BY 'my_password';
mysql> GRANT ALL PRIVILEGES ON openproject.* TO 'openproject'@'localhost';
mysql> \q

Install Node.js

We will install the latest 0.10.x version of Node.js via nodeenv :

[root@ubuntu]# apt-get install python python-pip
[root@ubuntu]# pip install nodeenv

Install Ruby

Switch to the dedicated OpenProject-user (user “openproject” in our case):

[root@ubuntu]# su openproject -c "bash -l"

Switch to the user’s home directory …

[openproject@ubuntu]# cd ~

… and install RVM (Ruby Version Manager)

[openproject@ubuntu]# \curl -sSL https://get.rvm.io | bash -s stable

It can be that curl fails to download the RVM source, because of the missing GPG key. If that is the case, download the key (as suggested in the error message):

[openproject@ubuntu]# gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3

Then try to download RVM again and continue the installation with:

[openproject@ubuntu]# source $HOME/.rvm/scripts/rvm
[openproject@ubuntu]# rvm autolibs disable
[openproject@ubuntu]# rvm install 2.1.4
[openproject@ubuntu]# rvm use --default 2.1.4
[openproject@ubuntu]# gem install bundler

As a reference, we have installed the following version of bundler:

[openproject@ubuntu]# bundle --version
                      Bundler version 1.7.4

Activate Node.js

[openproject@ubuntu]# cd ~
[openproject@ubuntu]# nodeenv nodeenv
[openproject@ubuntu]# source ./nodeenv/bin/activate
[openproject@ubuntu]# npm -g install bower

As a reference, the following Node.js and NPM versions have been installed on our system:

[openproject@ubuntu]# node --version
                      v0.10.33
[openproject@ubuntu]# npm --version
                      1.4.28
[openproject@ubuntu]# bower --version
                      1.3.12

Install OpenProject

[openproject@ubuntu]# cd ~
[openproject@ubuntu]# git clone https://github.com/opf/openproject.git
[openproject@ubuntu]# cd openproject
[openproject@ubuntu]# git checkout stable
[openproject@ubuntu]# bundle install
[openproject@ubuntu]# npm install
[openproject@ubuntu]# bower install

Configure OpenProject

Create and configure the database configuration file in config/database.yml (relative to the openproject-directory.

[openproject@ubuntu]# cp config/database.yml.example 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):

production:
  adapter: mysql2
  database: openproject
  host: localhost
  username: openproject
  password: openproject
  encoding: utf8

development:
  adapter: mysql2
  database: openproject
  host: localhost
  username: openproject
  password: openproject
  encoding: utf8

Configure email notifications (using a gmail account as an example) by creating configuration.yml in config directory.

[openproject@ubuntu]# cp config/configuration.yml.example config/configuration.yml

Now, edit the configuration.yml file as you like.

production:                          #main level
  email_delivery_method: :smtp       #settings for the production environment
  smtp_address: smtp.gmail.com
  smtp_port: 587
  smtp_domain: smtp.gmail.com
  smtp_user_name: ***@gmail.com
  smtp_password: ****
  smtp_enable_starttls_auto: true
  smtp_authentication: plain

Add this line into configuration.yml file at the of of file for better performance of OpenProject:

rails_cache_store: :memcache

NOTE: You should validate your .yml-files, for example with http://www.yamllint.com/. Both, the database.yml and configuration.yml file are sensitive to whitespace. It is pretty easy to write invalid .yml files without seeing the error. Validating those files prevents you from such errors.

Finish the Installation of OpenProject

[openproject@ubuntu]# cd ~/openproject
[openproject@ubuntu]# bundle exec rake db:create:all
[openproject@ubuntu]# bundle exec rake generate_secret_token
[openproject@ubuntu]# RAILS_ENV="production" bundle exec rake db:migrate
[openproject@ubuntu]# RAILS_ENV="production" bundle exec rake db:seed
[openproject@ubuntu]# RAILS_ENV="production" bundle exec rake assets:precompile

Serve OpenProject with Apache and Passenger

OpenProject will be served by the Rails application server “Passenger”, and the apache webserver.
We set up the system in a way, that automatically starts OpenProject with the operating system.

First, exit the current bash session with the openproject user, so that we are again in a root shell.
Then, we prepare apache and passenger:

[openproject@ubuntu]# exit
[root@ubuntu]# apt-get install apache2 libcurl4-gnutls-dev apache2-threaded-dev libapr1-dev libaprutil1-dev
[root@ubuntu]# chmod o+x "/home/openproject"

As a reference, the following version of apache was installed:

[root@ubuntu]# apache --version

Now, the Passenger gem is installed and integrated into apache.

[root@ubuntu]# su - openproject -c "bash -l"
[openproject@ubuntu]# cd ~/openproject
[openproject@ubuntu]# gem install passenger
[openproject@ubuntu]# passenger-install-apache2-module

Follow the instructions passenger provides.
The passenger installer will ask you the question in “Which languages are you interested in?”. We are interested only in ruby.

The passenger installer tells us to edit the apache config files. To do this, continue as the root user:

[openproject@ubuntu]# exit

As told by the installer, create the file /etc/apache2/mods-available/passenger.load and add the following line.
But before copy&pasting the following lines, check if the content (especially the version numbers!) is the same as the “passenger-install-apache2-module” installer said. When you’re in doubt, do what passenger tells you.

LoadModule passenger_module /home/openproject/.rvm/gems/ruby-2.1.4/gems/passenger-4.0.53/buildout/apache2/mod_passenger.so

Then create the file /etc/apache2/mods-available/passenger.conf with the following contents (again, take care of the version numbers!):

<IfModule mod_passenger.c>
  PassengerRoot /home/openproject/.rvm/gems/ruby-2.1.4/gems/passenger-4.0.53
  PassengerDefaultRuby /home/openproject/.rvm/gems/ruby-2.1.4/wrappers/ruby
</IfModule>

Then run:

[root@openproject]# a2enmod passenger

As the root user, create the file /etc/apache2/sites-available/openproject.conf with the following contents:

<VirtualHost *:80>
   ServerName www.myopenprojectsite.com
   # !!! Be sure to point DocumentRoot to 'public'!
   DocumentRoot /home/openproject/openproject/public
   <Directory /home/openproject/openproject/public>
      # This relaxes Apache security settings.
      AllowOverride all
      # MultiViews must be turned off.
      Options -MultiViews
      # Uncomment this if you're on Apache >= 2.4:
      Require all granted
   </Directory>
</VirtualHost>

Let’s enable our new “openproject” site (and disable the default site, if necessary)

[root@ubuntu]# a2dissite 000-default
[root@ubuntu]# a2ensite openproject

Now, we (re-)start Apache:

[root@ubuntu]# service apache2 reload

Your OpenProject installation should be accessible on port 80 (http). A default admin-account is created for you having the following credentials:

Username: admin
Password: admin

Please, change the password on the first login. Also, we highly recommend to configure the SSL module in Apache for https communication.

Activate Background Jobs

OpenProject sends (some) mails asynchronously by using background jobs. All such jobs are collected in a queue, so that a separate process can work on them. This means that we have to start the background worker. To automate this, we put the background worker into a cronjob.

[root@ubuntu]# su - openproject -c "bash -l"
[openproject@ubuntu]# crontab -e

Now, the crontab file opens in the standard editor. Add the following entry to the file:

*/1 * * * * cd /home/openproject/openproject; /home/openproject/.rvm/gems/ruby-2.1.4/wrappers/rake jobs:workoff

This will start the worker job every minute.

Follow ups

Your OpenProject installation is ready to run. However, there are some things to consider:

Plug-In Installation (Optional)

This step is optional.

OpenProject can be extended by various plug-ins, which extend OpenProject’s capabilities.
For general information and a list of all plug-ins known to us, refer to to the plug-in page.

OpenProject plug-ins are separated in ruby gems. You can install them by listing them in a file called Gemfile.plugin. An example Gemfile.plugin file looks like this:

# Required by backlogs
gem "openproject-pdf_export", git: "https://github.com/finnlabs/openproject-pdf_export.git", :branch => "stable"
gem "openproject-backlogs", git: "https://github.com/finnlabs/openproject-backlogs.git", :branch => "stable"

If you have modified the Gemfile.plugin file, always repeat the following steps of the OpenProject installation:

[openproject@ubuntu]# cd ~/openproject
[openproject@ubuntu]# bundle install
[openproject@ubuntu]# bower install
[openproject@ubuntu]# RAILS_ENV="production" bundle exec rake db:migrate
[openproject@ubuntu]# RAILS_ENV="production" bundle exec rake db:seed
[openproject@ubuntu]# RAILS_ENV="production" bundle exec rake assets:precompile

Restart the OpenProject server afterwards:

[openproject@ubuntu]# touch ~/openproject/tmp/restart.txt

The next web-request to the server will take longer (as the application is restarted). All subsequent request should be as fast as always.

We encourage you to extend OpenProject yourself by writing a plug-in. Please, read the plugin-contributions guide for more information.

Troubleshooting

You can find the error logs for apache here:

/var/log/apache2/error.log

The OpenProject logfile can be found here:

/home/openproject/openproject/log/production.log

If an error occurs, it should be logged there.

If you need to restart the server (for example after a configuration change), do

[openproject@ubuntu]# touch ~/openproject/tmp/restart.txt

Frequently Asked Questions (FAQ)


RAILS\_ENV=“production” bundle exec rake db:seed


/var/log/apache2/error.log

The OpenProject log can be found here:


/home/openproject/openproject/log/production.log


bower openproject-ui\_components\#with-bower ECMDERR Failed to execute “git ls-remote —tags —heads git://github.com/opf/openproject-ui\_components.git”, exit code of \#128

Additional error details:  
fatal: unable to connect to github.com:  
github.com\[0: 192.30.252.131\]: errno=Connection refused

npm ERR\! OpenProject@0.1.0 postinstall: \`./node\_modules/bower/bin/bower install\`

The solution is to configure git to use https:// URLs instead of git:// URLs lke this:


git config —global url.“https://”.insteadOf git://

Questions, Comments, and Feedback

If you have any further questions, comments, feedback, or an idea to enhance this guide, please tell us at the appropriate community.openproject.org forum.
Follow OpenProject on twitter, and follow the news on openproject.org to stay up to date.


OpenProject Foundation (OPF)

Right from the beginning we want to ensure that the participation in OpenProject is well governed. We want to attract talents, both technical experts to drive forward the technical development of the software as well as functional experts, to form a diverse global community with high standards for collaboration, debating, delegation of responsibility and ethics.

About the OPF

One of the main objectives of OpenProject is to create a place for open source software, driven and inspired by the users, the community and by the utilization of state of the art technology. For this challenging goal, the OPF wants to provide a firm basis with active support and guidance -> the vision of the OPF.

The OPF is incorporated as a membership-based, non-profit organisation (Verein). It is registered in Berlin, Germany, and of course the OPF is designated to the global OpenProject community.
The foundation supports and guides the software project, the community and its growth, furthermore, ensures that OpenProject continues to exist beyond the participation of individual members or companies.

Goals of the OPF

Responsibilities of the OpenProject Foundation:

  1. Maintaining the hardware and software infrastructure of OpenProject.org and other corresponding sites.
  2. Empowering the community to participate in and contribute to the project.
  3. Protecting the GPL source code of the project and its community contributions.
  4. Managing intellectual property and financial contributions.
  5. Protecting the project and community through support and advocacy.
  6. Organizing and promoting OpenProject, and communicating the benefits of the OpenProject software.

Decision taking process:

The Open Project Foundation aims to ensure that:

  1. There is a defined process that helps people contribute to decisions regarding the community and the software. It should be clear who is responsible for any given decision, and how others might contribute to the making of it.
  2. Decisions regarding the OpenProject distribution and community are taken in a fair and transparent fashion.
  3. Necessary decisions are eventually taken, even when there is no clear consensus among the community. There is a clear path for decision taking within the OPF.

We invite you to get in contact with us, we are happy to tell you more about OpenProject and the OPF.

Board of directors

OpenProject Foundation e.V.

Office address:

OpenProject Foundation e.V.
Rosenthaler Straße 32
10178 Berlin
Germany

Lower regional court Berlin Charlottenburg, register of associations: VR 32487
Date of foundation: 12. April 2013

References

Yes, in deed, we did not reinvent the wheel. We got most our ideas to the OpenProject Foundation from the well established Ubuntu governance model [1] as well as the Apache Foundation [2].
We admire both communities and pay tribute to their way of community work and participation.
Therefore, we aim to base the OpenProject statues on these well established models.

[1] http://www.ubuntu.com/project/about-ubuntu/governance
[2] http://www.apache.org/foundation/


OpenProject news moved to a new blog

Exciting news! OpenProject news have found a new home - a new blog

From now on you can follow the news on a new platform. Just as here in the community space, you will be able to comment on all new blog entries and let us know what you think.


Plug-Ins for OpenProject

Find out more


One of the main objectives of OpenProject is to create a place for open source software, driven and inspired by the users, the community and the utilization of state of the art technology. For this challenging goal, the OpenProject Foundation (OPF) wants to provide a firm basis with active support and guidance -> the vision of the OPF.

The OpenProject Foundation is incorporated as a membership-based, non-profit organisation (Verein). The legal registration of the OpenProject Foundation e.V. is now confirmed.
It is registered in Berlin, Germany, and of course the OPF is designated to the global OpenProject community.
The OPF has already started to operate according to the defined responsibilities in order to reach the desired vision and goals.

Goals of the OPF

Responsibilities of the OpenProject Foundation:

  1. Creating and empowering an active and open community, consisting of software engineers, users, and companies for a continuous development and improvement of OpenProject;
  2. Definition, improvement and implementation of the project vision, the code of conduct as well as application principles;
  3. Definition and implementation of development processes and guidelines as well as processes for quality improvement;
  4. Maintaining the hardware and software infrastructure of OpenProject.org and other corresponding sites;
  5. Empowering the community to participate in and contribute to the project;
  6. Protecting the GPL source code of the project, its community contributions as well as financial contributions;
  7. Organising and promoting OpenProject and communicating the benefits of the OpenProject software.

The foundation does not have any economic objectives.

Decision taking process:

The Open Project Foundation aims to ensure that:

  1. There is a defined process that helps people and organisations contribute to decisions regarding the community and the software. It should be clear who is responsible for any given decision, and how others might contribute to the making of it.
  2. Decisions regarding the OpenProject distribution and community are taken in a fair and transparent fashion.
  3. Necessary decisions are eventually taken, even when there is no clear consensus among the community. There is a clear path for decision taking within the OPF.

Why does an open source project need such formal structures?

One declared goal is to define responsibilities and ensure the existence of this project beyond any personal and individual motivation and commitment. Of course, any voluntary commit is absolutely necessary and appreciated very much. However, as the lifecycle of different open source projects has shown: various projects depend on a few individuals committing their code and following their very own ideas.
If those people suddenly lose interest or become occupied by different projects, the open source software is nearly sentenced to death. The OPF ensures that the project will flourish and will set new standards in project collaboration.

The Members

The OpenProject Foundation was established to define a group of members, who are experts in their fields and who feel responsible for the development of OpenProject. Individuals as well as companies who have a proven commitment to collaborative open source software development through sustained participation and contributions within OpenProject, are eligible for membership. Companies will be represented by individuals who will stand in for the interests of the company within the foundation to share ideas, exchange best practices, develop new requirements and drive forward the project and the community.

An individual or a representative of a company is awarded for membership after submitting the application form and approval by the board of directors of the OPF -> members.

How can I contribute?

Just start collaborating on openproject.org and/or Github OPF, bring in your contributions and ideas, help to answer questions, help to test and improve the software and the community. Share your experiences with OpenProject. We are looking forward to your participation.

The Boards

The desired final structure of the Boards, their members, and the shared responsibilities are displayed here. So far, the formal election of the Board of Directors of the OpenProject Foundation is already done and the elected representatives are the following:

Directors: Marco Tesch (Deutsche Telekom) and Birthe Russmeyer (Finn GmbH)
Treasurer: Jonas Hahn (Siemens AG)
Cash Audit: Christoph Zierz (ZZ Media)
Secretary: Niels Lindenthal (Finn GmbH)

The Guidelines

Like all other open source projects, everyone is invited to contribute in any way he prefers, which may be writing new code or plugins, testing, code review and so on.
One of the goals is to make these processes as transparent and understandable as possible.
Therefore the OPF will publish official guidelines for these processes. The first one, you can already find on OpenProject - it is the guideline for code review. It shall ensure that all pull requests are treated equally. They shall all be reviewed with the same thoroughness - regardless, whether it is someone’s first or 1000th pull request and are all taken seriously.
Subsequently, also different guidelines for suggesting and requesting new features and so on, will be published.


The next meeting of the OPF will be held on July 11th in Cologne, Germany. News arising will be published soon - stay tuned!

—> Read more about the OpenProject Foundation, its statutes and boards.


Release Notes

You can find all of the OpenProject release notes here


Please refer to: https://www.openproject.org/docs/development/security/


Statutes

Vision of OpenProject

Statutes of OpenProject Foundation

§ 1 Name and Office of the society

(1) The name of the society is OpenProject Foundation e.V..
(2) It is registered in the Berlin Municipal Court and has a title suffix e.V. (registered society)
(3) The society’s main office is in Berlin.

§ 2 Objective of the society

The objective and aims of the society are:
(1) The society operates on a non-profit basis and does not pursue commercial objectives.
(2) The society pursues non-profit goals exclusively, as defined by the German fiscal code.
(3) The goal of the society is promotion of science and research; especially with regard to research and development of the Open Source software Open Project and boosting international development cooperation. The society objectives are supported through:
a. planning and implementation of scientific events, research projects, talks and expert discussions around OpenProject. All research findings are promptly published.
b. the formation and promotion of an active and open OpenProject community comprising developers, users and companies for continuous development of the Open Source project collaboration software OpenProject;
c. the definition and development of the project vision, code of conduct and fundamentals of the application;
d. compilation of the development guidelines and ensuring that they are followed;
e. definition and implementation of development and quality assurance processes;
f. provision and operation of the project platform.

§ 3 Fiscal Year

(1) The fiscal year of the society is the calendar year.

§ 4 The Membership

(1) The members of the society can be a natural person, society of individuals and corporate bodies. The request for membership to the society must be submitted in a written application.
(2) Natural persons must be above 16 years of age.
The Board of Directors will decide on the acceptance of the application. Once accepted, the member will be obligated to follow the statutes.

§ 5 Termination of the Membership

(1) The membership will be terminated by
a) written notification of resignation at the end of the business year. The written notification must reach the Board of Directors at least three months in advance;
b) death of the member;
c) debarment;
d) discontinuation in case of body of individuals and loss of legal capacity in case of corporate bodies.
(2) The debarment will take place after a hearing of the concerned party through a resolution by the Board of Directors of the society. Before the decision, the member will have the opportunity to make a statement in person or in writing, for which the member will be requested in writing to furnish it within 10 days. The decision on debarment will have to be substantiated with a written explanation and notified to the member in a written letter.
(3) A member can only be debarred on account of express reasons. The express reasons for a debarment are, for instance,
a) the member has breached the statutes,
b) is working against the objective of the society or
c) continues to have financial liabilities towards the society in spite of two reminders.
(4) The debarred member can lodge an objection to the Board of Directors of the society within two weeks of notification of debarment. The next general meeting will decide about the objection. The debarred member will retain their voting rights until the final decision of the general meeting.
(5) After the termination, the member will cease to have any claims on the society’s assets.

§ 6 Rights and Duties of the Members

(1) The regular members have the right to participate and vote in the general meetings as well as place requests.
(2) Every natural person has a vote. Bodies of individuals and corporate bodies can nominate up to three representatives, each of which will have a vote.
(3) The members are obligated to follow the statutes and submit the stipulated dues in time in accordance with the ordinance concerning contributions and dues .
(4) The members are obligated to actively support the objective and activities of the society.
(5) The members are obligated to submit dues. The amount of membership fees will be regulated by a separate ordinance decided by the general meeting.

§ 7 Organisation Bodies of the Society

The society’s organisational bodies are:
(1) the Board of Directors and
(2) the general meeting

§ 8 Board of Directors

(1) The Board of Directors comprises two chairpersons, one treasurer, one secretary and up to four observers.
(2) The Board of Directors are, in accordance with Art. 26 BGB, the two chairpersons, who together represent the society.
(3) The Board of Directors will work in an honorary capacity. Travel costs and other expenses will not be provided.
(4) The meeting of the Board of Directors will take place at least once a year. The invitation to a meeting of the Board of Directors will take place through the chairpersons in a written form or e-mail with a notice of at least seven days. The Board of Directors can pass a resolution when half of the members and at least one of the chairpersons is present.
(5) Every member of the Board of Directors has a vote. The majority decides the valid votes put while taking a decision; in case of a tie of votes, the chairpersons get an additional joint vote. Decisions of the Board of Directors can also be taken in writing, in electronic form or telephonically in case of an urgency, if all the members of the Board of Directors give their consent to this procedure in writing or telephonically. Decisions of the Board of Directors taken in writing or telephonically must be recorded in writing and signed by all the members of the Board of Directors.
(6) The Board of Directors is responsible for all the matters of the society unless the responsibility is assigned in the statutes to some other authority.
(7) The office term of the Board of Directors is two business years. A re-election is permitted. The members of the Board of Directors will remain in office after their term only so long as a new Board of Directors is elected in the next general meeting. If a member of the Board of Directors resigns during the term, a successor for the remaining term of the resigned member will be elected by the general meeting.
(8) The Board of Directors will create a budget recommendation for the following business year, the action plan and the strategic objectives for the society.

§ 9 General Meeting

(1) The general meeting will be called by the chairpersons at least once a year or, if required, also on request by two members of the Board of Directors or on the request of at least one fourth of the members of the society in writing or via email with a notice period of two weeks with a mention of the agenda. The deadline will begin with the sending of the invitation on the following day. The invitation will be considered sent to the member when it has been sent to the address last notified by the member to the society in writing or via e-mail.
(2) Members can request an addition in the agenda latest by one week before the general meeting by submitting the request in writing to the Board of Directors. The head of the meeting must inform the change at the beginning of the general meeting.
(3) If a request is made for a change in the agenda during the meeting, it needs a resolution with a majority of three fourths of the participating members.
(4) The general meeting will be conducted by the chairpersons, in the absence of which another member of the Board of Directors will take over. If no member of the Board of Directors is present, the meeting will decide the leader. In case of voting, the meeting can be headed for the duration of the voting and the subsequent discussion by a voting committee.
(5) A member can select a representative among the society members for the voting procedure in the general meeting by a written authority letter. However, one member can only represent one member.
(6) A general meeting can also be conducted as a telephone or video conference.

§ 10 Responsibility of the General Meeting

The general meeting is primarily responsible for:
(1) discussing the annual report of the Board of Directors;
(2) granting or refusal of exoneration;
(3) acceptance of the budget recommendations for the following business year;
(4) voting in and out of members of the Board of Directors;
(5) resolution on a change in the statutes and dissolution of the society;
(6) as an appellate body against the decision on the debarment of a member;
(7) resolution on the changes in the ordinance concerning the dues on the recommendation of the Board of Directors;
(8) selection of an annual accounts auditor and his representative. The annual term of the auditor will be two years.

§ 11 Quorum and Resolution of the General Meeting

(1) Any general meeting called in accordance with the statutes with a third of the society members in attendance forms a quorum.
(2) Resolutions up to those listed in Clause 3 are moved with simple majority of the valid votes cast. Abstentions from votes are not counted. A request is considered dismissed in case of a tie.
(3) Amendment to the statutes, voting out of a member of the Board of Directors and resolutions concerning the dissolution of the society can only take place in a general meeting with a majority of three fourths of the valid votes cast.

§ 12 Voting

(1) All voting stipulated in these statutes will be in secret on request.
(2) It is chosen who will document the majority of the valid votes cast.
(3) If there is no majority during the first voting for the election of a member of the Board of Directors, an immediate run-off ballot between the two persons with the most votes in the first voting will be taken.
(4) If the run-off ballot shows a tie, a draw of lots will decide the member.

§ 13 Resources of the Society

(1) The resources of the society may only be used for purposes in accordance with the statutes.
(2) The members will not receive any profit shares and, in their capacity as members, they will not receive any benefits from the society’s resources either.
(3) No person can be given outlays in breach of the legal purpose of the society or granted disproportionately higher compensations.

§ 14 Dissolution

(1) The society can only be dissolved in a general meeting with a majority of three fourths of the valid votes cast.
(2) If the general meeting is not able to move any other resolution, the chairpersons together are authorised to be representative liquidators.
(3) In case of termination of the society or loss of the non-profit status, the assets of the society are transferred to a corporate body under public law or another non-profit entity for research and science advancement purposes.
(4) The general assembly will decide to which corporate body under public law or another non-profit entity the resources will be transferred. The resources can only be used for a non-profit purpose, in order to pursue the goals of the society further.
(5) The abovementioned clauses are correspondingly applicable if the society is dissolved for some other reason or loses its legal capacity.

§ 15 Minutes

(1) Minutes will be taken in all meetings, assemblies and resolutions of the society and signed by the head of the meeting and a chairperson.
(2) The minutes will be considered accepted if no participant lodges a written objection to the minutes within two weeks.

We assure the correctness and completeness of the statutes in accordance with Art. 71 Para sentence 4 BGB.

1. Chairperson of the Board of Directors 2. Chairperson of the Board of the Directors
Marco Tesch Birthe Lindenthal

(Version 1.1 from 17. January 2014)

The original German version of the statutes can be downloaded here.


OpenProject Support

We do not leave you alone. If you have questions about OpenProject you will hopefully find an answer here.

OpenProject Features

Here you will find a description of OpenProject’s features to get a better insight into the software.
read about OpenProject Features ›

OpenProject User Guides

Have a question on how to use OpenProject?
Browse through our User Guides ›

Forums

Post your question to one of the boards to start a discussion and get support from the community.
go to forums ›

FAQ

You will find frequently asked questions and their answers for quick and easy help.
go to FAQ ›

Installation

Here, you will find the installation guidelines.
go to Installation ›

Keyboard Shortcuts and Access Keys

Enhance your productivity and learn about OpenProject keyboard shortcuts and access keys.
go to Keyboard Shortcuts ›

Cannot find an answer? - Contact us.

If you have questions or comments and cannot find your answer right away, write us an e-mail: info@openproject.org.


OpenProject on Rails 3.2

We are upgrading OpenProject to Rails 3.2. A beta version is already available in a branch of the OPF Github respository. Along the upgrade we are also fixing several known software bugs.
We are appreciating any support in testing and improving this beta version and are looking forward to receiving your bug report via issue in OpenProject.
After finishing the upgrade, we will also publish the available plugins for OpenProject on Github.

Please note that this beta version is not recommended for productive use yet.

OpenProject Foundation (OPF)

The OpenProject Foundation will give official guidance to the project and the community. It has picked up its work and already has had first board meetings. Also, the formal legal registration of the e.V. is almost finished.
The following board of directors of the association has been elected by the members:

The OPF members will meet quarterly. The next meeting will be on the 11th of July in Cologne hosted by congstar. Meeting time and place will be communicated on openproject.org.

OpenProject User Guides

During the last weeks we expanded our support section. Any problems encountered when working with OpenProject may be solved when having a look at our FAQ.

Questions related to the installation are covered at Installing OpenProject.

If you feel that an important issue is not yet covered, just write us an email or post a question to the Forum.

Release Schedule

In the course of the next weeks the plugins will be consecutively published for download in the new Rails version. Please be aware, that those will be unstable versions, aimed at developers, who are willing to contribute source code and want to help finding bugs.

If you are interested in the current state of the software you can look at the issues and bugs on the OpenProject development roadmap.



WIKI

The content from this Wiki has found a new home on www.openproject.org.