A Dockerfile that installs OpenProject.
Actually it installs
passenger,and a fresh
openproject development snapshot.
To spawn a new instance of OpenProject on port 80 of your host machine:
$ docker run -p 80:8080 -d openpf/openproject:stable
-d flag lets docker start the image in the background and prints the container id to stdout.
You can the visit the following URL in a browser on your host machine to get started:
Get a shell on your OpenProject image
Concurrently with the OpenProject server, we start an ssh daemon which listens on the default port 22.
To connect to your OpenProject image, you have to tell docker to connect that port.
Start your image with the additional port:
$ docker run -p 8080 -p 20 -d openpf/openproject:stable
You may find out which of your local ports is mapped to the image-22-port with
docker port and connect to your image:
$ ssh -p <port> openproject@localhost $ openproject@localhost's password:
Well, we need a password now. The openproject account is secured with a random password.
We set that password during the image setup - watch for a line like
ssh openproject password: <random password>
docker build -t="openpf/openproject" . step.
Persist your data
Everything OpenProject needs lies within its docker image. That includes the database and uploaded files (and log data, and maybe some repositories).
The time may come when you want to use a new OpenProject docker image (e.g. when a new OpenProject version was released) and we need to take care
of the data stored in your old image.
Brian proposes to use two docker containers - One for the app and another one for the data.
Now, the application container can mount directories from the data-container.
You can easily backup your data container, or replace your app container.
The places we need to take care of for OpenProject are:
RAILS_ROOT/files- all files which are uploaded are placed here
/var/lib/mysql- the place where MySQL stores its database
RAILS_ROOT/log- the OpenProject logfiles, in case you care
- if you have configured OpenProject to use/create local repositories, the place where you store those repositories
Update the OpenProject code base
To upgrade your OpenProject installation, ssh into your container and do a
git pull within the OpenProject directory.
bundle exec rake db:migrate, and
bundle exec rake assets:precompile should finish the upgrade.
Now restart your container and a new OpenProject should be running.
As always: If you care about your data, do a backup before upgrading!
As a default the OpenProject docker image does not send any mails to anyone.
To change that you must specify an smtp account from which OpenProject can send mails through environment variables.
You can do that when starting the OpenProject docker image like this:
docker run -d \ -p 8080 -p 20 -e "EMAIL_DELIVERY_METHOD=smtp" \ -e "SMTP_ADDRESS=smtp.gmail.com" \ -e "SMTP_PORT=587" \ -e "SMTP_DOMAIN=smpt.gmail.com" \ -e "SMTP_AUTHENTICAITON=plain" \ -e "SMTP_ENABLE_STARTTLS_AUTO=true" \ -e "SMTP_USER_NAME=user" \ -e "SMTP_PASSWORD=password" \ openpf/openproject
Of course you have to insert the your
password, etc. values.
The settings above (except maybe the username and password) should work for a standard gmail account.
Please also visit the
Modules -> Administration -> Settings -> Email notifications page for further settings.
We have included some OpenProject plug-ins into the docker image. However, you can change the list of plug-ins (and install some themes, or even remove all the plug-ins).
To do this, edit the
files/Gemfile.plugins file before you build.
Use an external database
Through defining the
DATABASE_URL environment variable you may use an external database. Currently we support MySQL and PostgreSQL databases.
The variable must be set when starting the OpenProject docker image:
docker run -d \ -p 8080 -p 20 -e "DATABASE_URL=mysql2://user:password@host/db" \ openpf/openproject
Of course you have to insert the correct
db (database name).
Note: for a PostgreSQL database, let your URI start with
postgres:// instead of
Note: make sure, that your external database is set-up correctly!
It must be accessible, the user must exist and have appropriate rights to the OpenProject database, and the schema must be up-to-date (run
bundle exec rake db:migrate targeted at your remote database to update the schema).
$ docker build --rm -t openpf/openproject git://github.com/opf/openproject.git
NOTE: depending on your docker installation, you might need to prepend
sudo to your
Features which we'd love to have
- make the admin change his password on the first login
- nice seed data
- an additional image (or instructions) for 'easy' development
- ssh-login with a different user (so that we can remove the openproject user from the sudoers list)
- have a smallter image size
We are happy for any contribution :) You may either
- make a Pull Request (which we favor ;))
- open a new issue at our bug tracker
- or discuss at the forums
This work is licensed under the GPLv3 - see COPYRIGHT.md for details.