The OpenProject Foundation consists of three interacting boards with different roles and responsibilities.
(§ 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.
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 (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 (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 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
This tutorial helps you to deploy OP3. Please, aware that:
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)
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
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
[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
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 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.*
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 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.
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:
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.
❗ Update July 2023: If you are looking for up-to-date definitions of OpenProject terminology, see our recently published glossary of OpenProject.
----------------------------------------------------------------
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.
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.
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
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.
\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 .
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 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.
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).
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
*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.
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.
In a production system you probably want to set up
bundle exec rake assets:precompile)production.rb set config.serve_static_assets = true when you are not behind a webserverFor 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:
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)
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
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.
[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
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 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.*
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.
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.
If you’re upgrading from OpenProject 2.4, we have a migration guide to 3.0.
1.5.1 or higher required)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.
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
git clone https://github.com/opf/openproject.git cd openproject git checkout stable
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
bundle install --without mysql mysql2 sqlite development test rmagick
There is an example file config/database.yml.example you can copy and edit.
You choose a database for production, development and test environment.
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
bundle exec rake generate_secret_token
bundle exec rake db:create:all
All databases listed in your database.yml will be created.
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.
bundle exec rake assets:precompile
bundle exec rails server RAILS_ENV=production
You start your application server and by default it should be available under http://localhost:3000
Use the default administrator account to log in.
admin
admin
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.
OpenProject may be deployed similar to any Rails3 application. However, some things need to be considered:
RAILS_ROOT/files directory, where user uploads are stored by default)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.
For now, there is one detailed installation guide for Debian 7 which can be taken as a guideline for other distributions as well:
There is currently one detailed upgrade guide for Debian 7 which can be taken as a guideline for other distributions as well:
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.
bundle installbower installconfig/database.yml file (a template can be found at config/database.yml.example)config/configuration.yml file (a template can be found at config/configuration.yml.example)bundle exec rake db:create:all to create the databasebundle exec rake generate_secret_token to generate the cookie-encryption tokenRAILS_ENV="production" bundle exec rake db:migrate to populate the database with the tables OpenProject needsRAILS_ENV="production" bundle exec rake db:seed to generate the default admin-userRAILS_ENV="production" bundle exec rake assets:precompile To pack the assets (JavaScript, CSS) so that they can be served in productionRAILS_ENV=production bundle exec script/delayed_job start
Many thanks to Dan S. for the first draft of this guide.
Update your system, so you know you have the latest available packages for your system.
apt-get update
apt-get upgrade
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
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
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 .
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.
git clone https://github.com/opf/openproject.git
cd openproject
git checkout stable
bundle install
or the following if you decided not to install rmagick
bundle install —without rmagick
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).
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
*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).
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.
In a production system you probably want to set up
bundle exec rake assets:precompile)For a production setup, we recommend to use the [[openproject:Mod_security|mod_security]] apache module (if you deploy with an apache webserver).
*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.
Open your mind - participate
The community is waiting for you. Together we are looking forward to developing outstanding open source software for project collaboration.
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.
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
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.
Migrating to chiliproject @tag 2.4.0.
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.
git clone -b migrate/1.5_to_2.4 https://dev.finn.de/git/redmine-config-fit migrate-1.5_to_2.4
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.
In the chiliproject directory do:
bundle install
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.
RAILS_ENV=production bundle exec rake generate_session_store
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.
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."
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.
git clone-b migrate/2.4_to_3.0 https://dev.finn.de/git/redmine-config-fit migrate-2.4_to_3.0
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.
In the openproject directory do:
bundle install
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.
RAILS_ENV=production bundle exec rake generate_secret_token
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.
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.
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.
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.
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:
openproject directoryopenproject/files, in this case no separate backup is necessary.
config/configuration.yml for attachments_storage_path and backup the files stored there.reposman.rb, you should back them up. There’s no standard path for them, you can find their path in the cron job running the script or in the individual project settings.Before continuing, backup all of the data listed above.
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
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.
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:
config/database.ymlconfig/configuration.ymlfiles/ (this folder contains all attachments unless moved elsewhere via configuration.yml and attachments_storage_path)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"
You already copied this, so no need to configure from scratch. When using mysql, make sure to use the mysql2 adapter and not mysql.
You can skip this step as you’ll keep your database.
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.
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>
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.
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.
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.
Install three new environments:
In each case, make sure the production environment works correctly with the sample data.
The basic principle is to
In practice there were a few wrinkles.
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
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.
The different branches master (rails2) and feature/rails3 (rails3)
have diverged drastically. The point the divergence started is over a
year ago. Since then:
The following things also apply:
What we want to acomplish:
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
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
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.
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:
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 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.
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.
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.
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.
The OpenProject core does now contain a font set, which does also cover current plugins, like meetings, scrum and cost+reporting.
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.
With the unification of issues and planning elements in work packages we are able to use the advantages of both worlds:
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.
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.
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.
RAILS_ENV=production bundle exec script/delayed_job start, execute the following:RAILS\_ENV=production bundle exec script/delayed\_job stop
\[root@debian\]\# apt-get update \[root@debian\]\# apt-get upgrade
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
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
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
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
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
delayed_job cron job that was disabled in the first step.bower install. What can I do?bower install can fail, if your server is behind a firewall which does not allow git:// URLs. The error looks like this: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://
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.
This tutorial helps you to deploy OpenProject 4.0. Please, aware that:
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
Install tools needed to compile Ruby and run OpenProject:
[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
[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@debian]# groupadd openproject [root@debian]# useradd --create-home --gid openproject openproject [root@debian]# passwd openproject (enter desired password)
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:
[root@debian]# mysql --version mysql Ver 14.14 Distrib 5.5.40, for debian-linux-gnu (x86_64) using readline 6.2
[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@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
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
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
[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
[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
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.
[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
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@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>
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@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.
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.
Your OpenProject installation is ready to run. However, there are some things to consider:
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.
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
db:seed command listed above creates a default admin-user. The username is admin and the default password is admin. You are forced to change the admin password on the first login.db:seed command.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
'stable' branch containing the last stable version (just like we do for the OpenProject core).bower install. What can I do?bower install can fail, if your server is behind a firewall which does not allow git:// URLs. The error looks like this: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://
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.
This tutorial helps you to deploy OpenProject 4.0. Please, aware that:
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
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)
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
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
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
[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
[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
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.
[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
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.
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.
Your OpenProject installation is ready to run. However, there are some things to consider:
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.
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
db:seed command listed above creates a default admin-user. The username is admin and the default password is admin. You are forced to change the admin password on the first login.db:seed command.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
'stable' branch containing the last stable version (just like we do for the OpenProject core).bower install. What can I do?bower install can fail, if your server is behind a firewall which does not allow git:// URLs. The error looks like this: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://
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.
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.
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.
The Open Project Foundation aims to ensure that:
We invite you to get in contact with us, we are happy to tell you more about OpenProject and the OPF.
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
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/
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.
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.
The foundation does not have any economic objectives.
The Open Project Foundation aims to ensure that:
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 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 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)
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.
You can find all of the OpenProject release notes here
Please refer to: https://www.openproject.org/docs/development/security/
(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.
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.
(1) The fiscal year of the society is the calendar year.
(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.
(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.
(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.
The society’s organisational bodies are:
(1) the Board of Directors and
(2) the general meeting
(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.
(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.
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.
(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.
(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.
(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.
(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.
(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.
We do not leave you alone. If you have questions about OpenProject you will hopefully find an answer here.
Here you will find a description of OpenProject’s features to get a better insight into the software.
read about OpenProject Features ›
Have a question on how to use OpenProject?
Browse through our User Guides ›
Post your question to one of the boards to start a discussion and get support from the community.
go to forums ›
You will find frequently asked questions and their answers for quick and easy help.
go to FAQ ›
Here, you will find the installation guidelines.
go to Installation ›
Enhance your productivity and learn about OpenProject keyboard shortcuts and access keys.
go to Keyboard Shortcuts ›
If you have questions or comments and cannot find your answer right away, write us an e-mail: info@openproject.org.
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.
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.
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.
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.
The content from this Wiki has found a new home on www.openproject.org.