Git Product home page Git Product logo

docker-redmine's Introduction

redmine Join the chat at https://gitter.im/direktspeed/docker-redmine

Table of Contents

Introduction

Dockerfile to build a Redmine container image.

Version

Current Version: sameersbn/redmine:5.1.2-1

P.S.: If your installation depends on various third party plugins, please stick with 2.6.xx series to avoid breakage.

Contributing

If you find this image useful here's how you can help:

  • Send a Pull Request with your awesome new features and bug fixes
  • Help new users with Issues they may encounter
  • Support the development of this image with a donation

Issues

Docker is a relatively new project and is active being developed and tested by a thriving community of developers and testers and every release of docker features many enhancements and bugfixes.

Given the nature of the development and release cycle it is very important that you have the latest version of docker installed because any issue that you encounter might have already been fixed with a newer docker release.

Install the most recent version of the Docker Engine for your platform using the official Docker releases, which can also be installed using:

wget -qO- https://get.docker.com/ | sh

Fedora and RHEL/CentOS users should try disabling selinux with setenforce 0 and check if resolves the issue. If it does than there is not much that I can help you with. You can either stick with selinux disabled (not recommended by redhat) or switch to using ubuntu.

If using the latest docker version and/or disabling selinux does not fix the issue then please file a issue request on the issues page.

In your issue report please make sure you provide the following information:

  • The host distribution and release version.
  • Output of the docker version command.
  • Output of the docker info command.
  • The docker run command you used to run the image (mask out the sensitive bits).

Installation

Automated builds of the image are available on Dockerhub and is the recommended method of installation.

Note: Builds are also available on Quay.io

docker pull sameersbn/redmine:latest

Since version 2.4.2, the image builds are being tagged. You can now pull a particular version of redmine by specifying the version number. For example,

docker pull sameersbn/redmine:5.1.2-1

Alternately you can build the image yourself.

docker build -t sameersbn/redmine github.com/sameersbn/docker-redmine

Quick Start

The quickest way to get started is using docker-compose.

wget https://raw.githubusercontent.com/sameersbn/docker-redmine/master/docker-compose.yml
docker-compose up

Alternately, you can manually launch the redmine container and the supporting postgresql container by following this two step guide.

Step 1. Launch a postgresql container

docker run --name=postgresql-redmine -d \
  --env='DB_NAME=redmine_production' \
  --env='DB_USER=redmine' --env='DB_PASS=password' \
  --volume=/srv/docker/redmine/postgresql:/var/lib/postgresql \
  sameersbn/postgresql:14-20230628

Step 2. Launch the redmine container

docker run --name=redmine -d \
  --link=postgresql-redmine:postgresql --publish=10083:80 \
  --env='REDMINE_PORT=10083' \
  --volume=/srv/docker/redmine/redmine:/home/redmine/data \
  --volume=/srv/docker/redmine/redmine-logs:/var/log/redmine/ \
  sameersbn/redmine:5.1.2-1

NOTE: Please allow a minute or two for the Redmine application to start.

Point your browser to http://localhost:10083 and login using the default username and password:

  • username: admin
  • password: admin

Make sure you visit the Administration link and Load the default configuration before creating any projects.

You now have the Redmine application up and ready for testing. If you want to use this image in production the please read on.

The rest of the document will use the docker command line. You can quite simply adapt your configuration into a docker-compose.yml file if you wish to do so.

Configuration

Data Store

For the file storage we need to mount a volume at the following location.

  • /home/redmine/data
  • /var/log/redmine for server logs

NOTE

Existing users need to move the existing files directory inside /srv/docker/redmine/redmine/.

mkdir -p /srv/docker/redmine/redmine
mv /opt/redmine/files /srv/docker/redmine/redmine

SELinux users are also required to change the security context of the mount point so that it plays nicely with selinux.

mkdir -p /srv/docker/redmine/redmine
sudo chcon -Rt svirt_sandbox_file_t /srv/docker/redmine/redmine

Volumes can be mounted in docker by specifying the '-v' option in the docker run command.

docker run --name=redmine -it --rm \
  --volume=/srv/docker/redmine/redmine:/home/redmine/data \
  --volume=/srv/docker/redmine/redmine-logs:/var/log/redmine/ \
  sameersbn/redmine:5.1.2-1

Database

Redmine uses a database backend to store its data.

MySQL

Internal MySQL Server

The internal mysql server has been removed from the image. Please use a linked mysql or postgresql container instead or connect with an external mysql or postgresql server.

If you have been using the internal mysql server follow these instructions to migrate to a linked mysql container:

Assuming that your mysql data is available at /srv/docker/redmine/mysql

docker run --name=mysql-redmine -d \
  --volume=/srv/docker/redmine/mysql:/var/lib/mysql \
  sameersbn/mysql:5.7.22-1

This will start a mysql container with your existing mysql data. Now login to the mysql container and create a user for the existing redmine_production database.

All you need to do now is link this mysql container to the redmine container using the --link=mysql-redmine:mysql option and provide the DB_NAME, DB_USER and DB_PASS parameters.

Refer to Linking to MySQL Container for more information.

External MySQL Server

The image can be configured to use an external MySQL database instead of starting a MySQL server internally. The database configuration should be specified using environment variables while starting the Redmine image.

Before you start the Redmine image create user and database for redmine.

mysql -uroot -p
CREATE USER 'redmine'@'%.%.%.%' IDENTIFIED BY 'password';
CREATE DATABASE IF NOT EXISTS `redmine_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `redmine_production`.* TO 'redmine'@'%.%.%.%';

We are now ready to start the redmine application.

docker run --name=redmine -it --rm \
  --env='DB_ADAPTER=mysql2' \
  --env='DB_HOST=192.168.1.100' --env='DB_NAME=redmine_production' \
  --env='DB_USER=redmine' --env='DB_PASS=password' \
  --volume=/srv/docker/redmine/redmine:/home/redmine/data \
  --volume=/srv/docker/redmine/redmine-logs:/var/log/redmine/ \
  sameersbn/redmine:5.1.2-1

This will initialize the redmine database and after a couple of minutes your redmine instance should be ready to use.

Linking to MySQL Container

You can link this image with a mysql container for the database requirements. The alias of the mysql server container should be set to mysql while linking with the redmine image.

If a mysql container is linked, only the DB_ADAPTER, DB_HOST and DB_PORT settings are automatically retrieved using the linkage. You may still need to set other database connection parameters such as the DB_NAME, DB_USER, DB_PASS and so on.

To illustrate linking with a mysql container, we will use the sameersbn/mysql image. When using docker-mysql in production you should mount a volume for the mysql data store. Please refer the README of docker-mysql for details.

First, lets pull the mysql image from the docker index.

docker pull sameersbn/mysql:5.7.22-1

For data persistence lets create a store for the mysql and start the container.

SELinux users are also required to change the security context of the mount point so that it plays nicely with selinux.

mkdir -p /srv/docker/redmine/mysql
sudo chcon -Rt svirt_sandbox_file_t /srv/docker/redmine/mysql

The run command looks like this.

docker run --name=mysql-redmine -d \
  --env='DB_NAME=redmine_production' \
  --env='DB_USER=redmine' --env='DB_PASS=password' \
  --volume=/srv/docker/redmine/mysql:/var/lib/mysql \
  sameersbn/mysql:5.7.22-1

The above command will create a database named redmine_production and also create a user named redmine with the password password with full/remote access to the redmine_production database.

We are now ready to start the redmine application.

docker run --name=redmine -it --rm --link=mysql-redmine:mysql \
  --volume=/srv/docker/redmine/redmine:/home/redmine/data \
  --volume=/srv/docker/redmine/redmine-logs:/var/log/redmine/ \
  sameersbn/redmine:5.1.2-1

Here the image will also automatically fetch the DB_NAME, DB_USER and DB_PASS variables from the mysql container as they are specified in the docker run command for the mysql container. This is made possible using the magic of docker links and works with the following images:

PostgreSQL

External PostgreSQL Server

The image also supports using an external PostgreSQL Server. This is also controlled via environment variables.

CREATE ROLE redmine with LOGIN CREATEDB PASSWORD 'password';
CREATE DATABASE redmine_production;
GRANT ALL PRIVILEGES ON DATABASE redmine_production to redmine;

We are now ready to start the redmine application.

docker run --name=redmine -it --rm \
  --env='DB_ADAPTER=postgresql' \
  --env='DB_HOST=192.168.1.100' --env='DB_NAME=redmine_production' \
  --env='DB_USER=redmine' --env='DB_PASS=password' \
  --volume=/srv/docker/redmine/redmine:/home/redmine/data \
  --volume=/srv/docker/redmine/redmine-logs:/var/log/redmine/ \
  sameersbn/redmine:5.1.2-1

This will initialize the redmine database and after a couple of minutes your redmine instance should be ready to use.

Linking to PostgreSQL Container

You can link this image with a postgresql container for the database requirements. The alias of the postgresql server container should be set to postgresql while linking with the redmine image.

If a postgresql container is linked, only the DB_ADAPTER, DB_HOST and DB_PORT settings are automatically retrieved using the linkage. You may still need to set other database connection parameters such as the DB_NAME, DB_USER, DB_PASS and so on.

To illustrate linking with a postgresql container, we will use the sameersbn/postgresql image. When using postgresql image in production you should mount a volume for the postgresql data store. Please refer the README of docker-postgresql for details.

First, lets pull the postgresql image from the docker index.

docker pull sameersbn/postgresql:14-20230628

For data persistence lets create a store for the postgresql and start the container.

SELinux users are also required to change the security context of the mount point so that it plays nicely with selinux.

mkdir -p /srv/docker/redmine/postgresql
sudo chcon -Rt svirt_sandbox_file_t /srv/docker/redmine/postgresql

The run command looks like this.

docker run --name=postgresql-redmine -d \
  --env='DB_NAME=redmine_production' \
  --env='DB_USER=redmine' --env='DB_PASS=password' \
  --volume=/srv/docker/redmine/postgresql:/var/lib/postgresql \
  sameersbn/postgresql:14-20230628

The above command will create a database named redmine_production and also create a user named redmine with the password password with access to the redmine_production database.

We are now ready to start the redmine application.

docker run --name=redmine -it --rm --link=postgresql-redmine:postgresql \
  --volume=/srv/docker/redmine/redmine:/home/redmine/data \
  --volume=/srv/docker/redmine/redmine-logs:/var/log/redmine/ \
  sameersbn/redmine:5.1.2-1

Here the image will also automatically fetch the DB_NAME, DB_USER and DB_PASS variables from the postgresql container as they are specified in the docker run command for the postgresql container. This is made possible using the magic of docker links and works with the following images:

Memcached (Optional)

This image can (optionally) be configured to use a memcached server to speed up Redmine. This is particularly useful when you have a large number users.

External Memcached Server

The image can be configured to use an external memcached server. The memcached server host and port configuration should be specified using environment variables MEMCACHE_HOST and MEMCACHE_PORT like so:

Assuming that the memcached server host is 192.168.1.100

docker run --name=redmine -it --rm \
  --env='MEMCACHE_HOST=192.168.1.100' --env='MEMCACHE_PORT=11211' \
  sameersbn/redmine:5.1.2-1

Linking to Memcached Container

Alternately you can link this image with a memcached container. The alias of the memcached server container should be set to memcached while linking with the redmine image.

To illustrate linking with a memcached container, we will use the sameersbn/memcached image. Please refer the README of docker-memcached for details.

First, lets pull and launch the memcached image from the docker index.

docker run --name=memcached-redmine -d sameersbn/memcached:1.5.6

Now you can link memcached to the redmine image:

docker run --name=redmine -it --rm --link=memcached-redmine:memcached \
  sameersbn/redmine:5.1.2-1

Mail

The mail configuration should be specified using environment variables while starting the redmine image. The configuration defaults to using gmail to send emails and requires the specification of a valid username and password to login to the gmail servers.

Please refer the Available Configuration Parameters section for the list of SMTP parameters that can be specified.

docker run --name=redmine -it --rm \
  --env='[email protected]' --env='SMTP_PASS=PASSWORD' \
  --volume=/srv/docker/redmine/redmine:/home/redmine/data \
  --volume=/srv/docker/redmine/redmine-logs:/var/log/redmine/ \
  sameersbn/redmine:5.1.2-1

If you are not using google mail, then please configure the SMTP host and port using the SMTP_HOST and SMTP_PORT configuration parameters.

If you are using a google apps account with a custom domain (other than google.com), you need to set the SMTP_DOMAIN parameters or else you will get internal server error when doing an action that would normally send a mail.

Please see redmine email config for examples of different email configurations: https://www.redmine.org/projects/redmine/wiki/emailconfiguration

Similary you can configure receiving emails using the IMAP_ configuration options. Please refer Available Configuration Parameters for details. When receiving emails is enabled users can comment on issues by replying to emails.

P.S. The receiving emails feature is only available since versions 2.6.6-2, 3.0.4-2 and 3.1.0-2. Refer the Changelog for details.

SSL

Access to the redmine application can be secured using SSL so as to prevent unauthorized access. While a CA certified SSL certificate allows for verification of trust via the CA, a self signed certificates can also provide an equal level of trust verification as long as each client takes some additional steps to verify the identity of your website. I will provide instructions on achieving this towards the end of this section.

To secure your application via SSL you basically need two things:

  • Private key (.key)
  • SSL certificate (.crt)

When using CA certified certificates, these files are provided to you by the CA. When using self-signed certificates you need to generate these files yourself. Skip the following section if you are armed with CA certified SSL certificates.

Jump to the Using HTTPS with a load balancer section if you are using a load balancer such as hipache, haproxy or nginx.

Generation of Self Signed Certificates

Generation of self-signed SSL certificates involves a simple 3 step procedure.

STEP 1: Create the server private key

openssl genrsa -out redmine.key 2048

STEP 2: Create the certificate signing request (CSR)

openssl req -new -key redmine.key -out redmine.csr

STEP 3: Sign the certificate using the private key and CSR

openssl x509 -req -days 365 -in redmine.csr -signkey redmine.key -out redmine.crt

Congratulations! you have now generated an SSL certificate thats valid for 365 days.

Strengthening the server security

This section provides you with instructions to strengthen your server security. To achieve this we need to generate stronger DHE parameters.

openssl dhparam -out dhparam.pem 2048

Installation of the SSL Certificates

Out of the four files generated above, we need to install the redmine.key, redmine.crt and dhparam.pem files at the redmine server. The CSR file is not needed, but do make sure you safely backup the file (in case you ever need it again).

The default path that the redmine application is configured to look for the SSL certificates is at /home/redmine/data/certs, this can however be changed using the SSL_KEY_PATH, SSL_CERTIFICATE_PATH and SSL_DHPARAM_PATH configuration options.

If you remember from above, the /home/redmine/data path is the path of the data store, which means that we have to create a folder named certs inside /srv/docker/redmine/redmine/ and copy the files into it and as a measure of security we will update the permission on the redmine.key file to only be readable by the owner.

mkdir -p /srv/docker/redmine/redmine/certs
cp redmine.key /srv/docker/redmine/redmine/certs/
cp redmine.crt /srv/docker/redmine/redmine/certs/
cp dhparam.pem /srv/docker/redmine/redmine/certs/
chmod 400 /srv/docker/redmine/redmine/certs/redmine.key

Great! we are now just one step away from having our application secured.

Enabling HTTPS support

HTTPS support can be enabled by setting the REDMINE_HTTPS option to true.

docker run --name=redmine -d \
  --publish=10083:80 --publish 10445:443 \
  --env='REDMINE_PORT=10445' --env='REDMINE_HTTPS=true' \
  --volume=/srv/docker/redmine/redmine:/home/redmine/data \
  --volume=/srv/docker/redmine/redmine-logs:/var/log/redmine/ \
  sameersbn/redmine:5.1.2-1

In this configuration, any requests made over the plain http protocol will automatically be redirected to use the https protocol. However, this is not optimal when using a load balancer.

Note: If startup prints SSL keys and certificates were not found. refer to SSL and verify you put the certs in the correct place. Unless your trying to setup for Using HTTPS with a load balancer

Configuring HSTS

HSTS if supported by the browsers makes sure that your users will only reach your server via HTTPS. When the user comes for the first time it sees a header from the server which states for how long from now this site should only be reachable via HTTPS - that's the HSTS max-age value.

With NGINX_HSTS_MAXAGE you can configure that value. The default value is 31536000 seconds. If you want to disable a already sent HSTS MAXAGE value, set it to 0.

docker run --name=redmine -d \
  --env='REDMINE_HTTPS=true' \
  --env='NGINX_HSTS_MAXAGE=2592000'
  --volume=/srv/docker/redmine/redmine:/home/redmine/data \
  --volume=/srv/docker/redmine/redmine-logs:/var/log/redmine/ \
  sameersbn/redmine:5.1.2-1

If you want to completely disable HSTS set NGINX_HSTS_ENABLED to false.

Using HTTPS with a load balancer

Load balancers like nginx/haproxy/hipache talk to backend applications over plain http and as such the installation of ssl keys and certificates are not required and should NOT be installed in the container. The SSL configuration has to instead be done at the load balancer. Hoewever, when using a load balancer you MUST set REDMINE_HTTPS to true.

With this in place, you should configure the load balancer to support handling of https requests. But that is out of the scope of this document. Please refer to Using SSL/HTTPS with HAProxy for information on the subject.

When using a load balancer, you probably want to make sure the load balancer performs the automatic http to https redirection. Information on this can also be found in the link above.

In summation, when using a load balancer, the docker command would look for the most part something like this:

docker run --name=redmine -d --publish=10083:80 \
  --env='REDMINE_HTTPS=true' \
  --volume=/srv/docker/redmine/redmine:/home/redmine/data \
  --volume=/srv/docker/redmine/redmine-logs:/var/log/redmine/ \
  sameersbn/redmine:5.1.2-1

Deploy to a subdirectory (relative url root)

By default redmine expects that your application is running at the root (eg. /). This section explains how to run your application inside a directory.

Let's assume we want to deploy our application to '/redmine'. Redmine needs to know this directory to generate the appropriate routes. This can be specified using the REDMINE_RELATIVE_URL_ROOT configuration option like so:

docker run --name=redmine -d --publish=10083:80 \
  --env='REDMINE_RELATIVE_URL_ROOT=/redmine' \
  --volume=/srv/docker/redmine/redmine:/home/redmine/data \
  --volume=/srv/docker/redmine/redmine-logs:/var/log/redmine/ \
  sameersbn/redmine:5.1.2-1

Redmine will now be accessible at the /redmine path, e.g. http://www.example.com/redmine.

Note: The REDMINE_RELATIVE_URL_ROOT parameter should always begin with a slash and SHOULD NOT have any trailing slashes.

Apache Proxy as frontend

Ref #370

Apache config

# REDMINE Pass connections to docker
ProxyRequests Off
ProxyPass /redmine http://127.0.0.1:10083/redmine/
ProxyPassReverse /redmine http://127.0.0.1:10083/redmine/

Note the following should be set: REDMINE_RELATIVE_URL_ROOT=/redmine and port mapped --publish=10083:80

Mapping host user and group

Per default the container is configured to run redmine as user and group redmine with uid and gid 1000. The host possibly uses this ids for different purposes leading to unfavorable effects. From the host it appears as if the mounted data volumes are owned by the host's user/group 1000.

Also the container processes seem to be executed as the host's user/group 1000. The container can be configured to map the uid and gid of redmine user to different ids on host by passing the environment variables USERMAP_UID and USERMAP_GID. The following command maps the ids to user and group redmine on the host.

docker run --name=redmine -it --rm [options] \
  --env="USERMAP_UID=500" --env="USERMAP_GID=500" \
  sameersbn/redmine:5.1.2-1

Available Configuration Parameters

Please refer the docker run command options for the --env-file flag where you can specify all required environment variables in a single file. This will save you from writing a potentially long docker run command.

Below is the complete list of parameters that can be set using environment variables.

  • REDMINE_HTTPS: Enable HTTPS (SSL/TLS) port on server. Defaults to false
  • REDMINE_PORT: The port of the Redmine server. Defaults to 80 for plain http and 443 when https is enabled.
  • REDMINE_RELATIVE_URL_ROOT: The relative url of the Redmine server, e.g. /redmine. No default.
  • REDMINE_ATTACHMENTS_DIR: The attachments directory. Defaults to /home/redmine/data/files
  • REDMINE_SECRET_TOKEN: Secret key for verifying cookie session data integrity. Defaults to a random alphanumeric string.
  • REDMINE_MINIMAGICK_FONT_PATH: The minimagick_font_path for the png export function of GANTT to work. Defaults to /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf.
  • REDMINE_CONCURRENT_UPLOADS: Maximum number of simultaneous AJAX uploads. Defaults to 2.
  • REDMINE_SUDO_MODE_ENABLED: Requires users to re-enter their password for sensitive actions. Defaults to false.
  • REDMINE_SUDO_MODE_TIMEOUT: Sudo mode timeout. Defaults to 15 minutes.
  • REDMINE_FETCH_COMMITS: Setup cron job to fetch commits. Possible values disable, hourly, daily or monthly. Disabled by default.
  • REDMINE_AUTOLOGIN_COOKIE_NAME: The name of autologin-cookie. Defaults to autologin.
  • REDMINE_AUTOLOGIN_COOKIE_PATH: The path of autologin-cookie. Defaults to /.
  • REDMINE_AUTOLOGIN_COOKIE_SECURE: Set autologin-cookie to secure. Defaults to true when REDMINE_HTTPS is true, else defaults to false.
  • REDMINE_BACKUPS_DIR: The backup folder in the container. Defaults to /home/redmine/data/backups
  • REDMINE_BACKUP_SCHEDULE: Setup cron job to schedule automatic backups. Possible values disable, daily, weekly or monthly. Disabled by default
  • REDMINE_BACKUP_EXPIRY: Configure how long (in seconds) to keep backups before they are deleted. By default when automated backups are disabled backups are kept forever (0 seconds), else the backups expire in 7 days (604800 seconds).
  • REDMINE_BACKUP_TIME: Set a time for the automatic backups in HH:MM format. Defaults to 04:00.
  • REDMINE_AVATAR_SERVER_URL: Avatar server for displaying user icons. Defaults to https://www.gravatar.com
  • DATABASE_URL: The database URL. See Configuring a Database. Possible schemes: postgres, postgresql, mysql2, and sqlite3. Defaults to no URL.
  • DB_ADAPTER: The database type. Possible values: mysql2, postgresql, and 'sqlite3'. Defaults to mysql.
  • DB_ENCODING: The database encoding. For DB_ADAPTER values postresql and mysql2, this parameter defaults to unicode and utf8 respectively. For full unicode support (all emojis) with mariadb or mysql set this to utf8mb4 and make sure to also set all tables to utf8mb4 and use collate utf8mb4_unicode_ci. Existing databases can be converted by following this HowTo.
  • DB_HOST: The database server hostname. Defaults to localhost.
  • DB_PORT: The database server port. Defaults to 3306.
  • DB_NAME: The database name. Defaults to redmine_production
  • DB_USER: The database user. Defaults to root
  • DB_PASS: The database password. Defaults to no password
  • DB_POOL: The database connection pool count. Defaults to 5.
  • DB_SKIP_CHECK: Skip waiting for the database to start. Defaults to false.
  • DB_SSL_MODE: Configures the database ssl mode. Valid options for postgresql (disable|allow|prefer|require|verify-ca|verify-full) and mysql (disable||preferred|required|verify_ca|verify_identity). Defaults to ''
  • LOGGER_LEVEL: Configures the amount of messages that are generated when redmine is running. Possible values are: debug, info, warn, error. Defaults to info
  • NGINX_ENABLED: Enable/disable the nginx server. Disabling Nginx is not recommended (see #148), use at your discretion. Defaults to true. When disabled publish port 8080 instead of the usual port 80 or 443.
  • NGINX_WORKERS: The number of nginx workers to start. Defaults to 1.
  • NGINX_MAX_UPLOAD_SIZE: Maximum acceptable upload size. Defaults to 20m.
  • NGINX_X_FORWARDED_PROTO: Advanced configuration option for the proxy_set_header X-Forwarded-Proto setting in the redmine nginx vHost configuration. Defaults to https when REDMINE_HTTPS is true, else defaults to $scheme.
  • NGINX_HSTS_ENABLED: Advanced configuration option for turning off the HSTS configuration. Applicable only when SSL is in use. Defaults to true. See #138 for use case scenario.
  • NGINX_HSTS_MAXAGE: Advanced configuration option for setting the HSTS max-age in the redmine nginx vHost configuration. Applicable only when SSL is in use. Defaults to 31536000.
  • NGINX_CORS_ALLOW_ORIGIN: Sets Access-Control-Allow-Origin response header to indicate that the response can be shared with requesting code from the given origin.
  • NGINX_CORS_ALLOW_METHODS: Sets Access-Control-Allow-Methods response header to specify the methods allowed when accessing the resource in response to a preflight request.
  • NGINX_CORS_ALLOW_HEADERS: Sets Access-Control-Allow-Headers response header to specify which headers can be used during the actual request.
  • NGINX_CORS_ALLOW_CREDENTIALS: Sets Access-Control-Allow-Credentials response header to tell browsers whether to expose the response to frontend JavaScript code when the request's credentials mode (Request.credentials) is include.
  • UNICORN_WORKERS: The number of unicorn workers to start. Defaults to 2.
  • UNICORN_TIMEOUT: Sets the timeout of unicorn worker processes. Defaults to 60 seconds.
  • MEMCACHE_HOST: The host name of the memcached server. No defaults.
  • MEMCACHE_PORT: The connection port of the memcached server. Defaults to 11211.
  • SSL_CERTIFICATE_PATH: The path to the SSL certificate to use. Defaults to /home/redmine/data/certs/redmine.crt.
  • SSL_KEY_PATH: The path to the SSL certificate's private key. Defaults to /home/redmine/data/certs/redmine.key.
  • SSL_DHPARAM_PATH: The path to the Diffie-Hellman parameter. Defaults to /home/redmine/data/certs/dhparam.pem.
  • SSL_VERIFY_CLIENT: Enable verification of client certificates using the SSL_CA_CERTIFICATES_PATH file. Configures ssl_verify_client in nginx, options (off, on, optional, optional_no_ca). Defaults to off
  • SSL_CA_CERTIFICATES_PATH: List of SSL certificates to trust. Defaults to /home/redmine/data/certs/ca.crt.
  • SMTP_ENABLED: Enable mail delivery via SMTP. Defaults to true if SMTP_USER is defined, else defaults to false.
  • SMTP_DOMAIN: SMTP domain. Defaults to www.gmail.com
  • SMTP_HOST: SMTP server host. Defaults to smtp.gmail.com
  • SMTP_PORT: SMTP server port. Defaults to 587.
  • SMTP_USER: SMTP username.
  • SMTP_PASS: SMTP password.
  • SMTP_METHOD: SMTP delivery method. Possible values: smtp. Defaults to smtp.
  • SMTP_OPENSSL_VERIFY_MODE: SMTP openssl verification mode. Accepted values are none, peer, client_once and fail_if_no_peer_cert. SSL certificate verification is performed by default.
  • SMTP_STARTTLS: Enable STARTTLS. Defaults to true.
  • SMTP_TLS: Enable SSL/TLS. Defaults to false.
  • SMTP_SSL: Enable SSL. Defaults to false. https://www.redmine.org/projects/redmine/wiki/EmailConfiguration#Error-TimeoutError-due-to-SSL-SMTP-server-connection
  • SMTP_AUTHENTICATION: Specify the SMTP authentication method. Defaults to :login if SMTP_USER is set.
  • SMTP_CA_ENABLED: Enable custom CA certificates for SMTP email configuration. Defaults to false.
  • SMTP_CA_PATH: Specify the ca_path parameter for SMTP email configuration. Defaults to /home/redmine/data/certs.
  • SMTP_CA_FILE: Specify the ca_file parameter for SMTP email configuration. Defaults to /home/redmine/data/certs/ca.crt.
  • IMAP_ENABLED: Enable receiving email via IMAP. Defaults to false.
  • IMAP_USER: IMAP username. Defaults to value of SMTP_USER. NOTE: May require escaping special characters for (CRON or Bash). Currently known: '%' needs to be escaped '%'
  • IMAP_PASS: IMAP password. Defaults to value of SMTP_PASS. NOTE: May require escaping special characters for (CRON or Bash). Currently known: '%' needs to be escaped '%'
  • IMAP_HOST: IMAP server host. Defaults to imap.gmail.com.
  • IMAP_PORT: IMAP server port. Defaults to 993.
  • IMAP_SSL: IMAP enable SSL. Defaults to true.
  • IMAP_STARTTLS: IMAP enabled STARTTLS. Defaults to false.
  • IMAP_INTERVAL: The interval in minutes between checking emails. Defaults to 30. Values allowed in the range 1 - 60.
  • IMAP_FOLDER: IMAP folder to read. Defaults to INBOX.
  • IMAP_MOVE_ON_SUCCESS: Move emails that were successfully received to MAILBOX instead of deleting them.
  • IMAP_MOVE_ON_FAILURE: Move emails that were ignored to MAILBOX.
  • INCOMING_EMAIL_UNKNOWN_USER: How to handle emails from an unknown user. Accepted values are ignore, accept and create. Defaults to ignore.
  • INCOMING_EMAIL_NO_PERMISSION_CHECK: Disable permission checking when receiving the email. Defaults to false.
  • INCOMING_EMAIL_NO_ACCOUNT_NOTICE: Disable new user account notification. Defaults to true.
  • INCOMING_EMAIL_DEFAULT_GROUP: Adds created user to foo and bar groups.
  • INCOMING_EMAIL_PROJECT: Identifier of the target project.
  • INCOMING_EMAIL_PROJECT_FROM_SUBADRESS: ADDR select project from subaddress of ADDR found in To, Cc, Bcc headers.
  • INCOMING_EMAIL_STATUS: Name of the target status.
  • INCOMING_EMAIL_TRACKER: Name of the target tracker.
  • INCOMING_EMAIL_CATEGORY: Name of the target category.
  • INCOMING_EMAIL_PRIORITY: Name of the target priority.
  • INCOMING_EMAIL_PRIVATE: Create new issues as private.
  • INCOMING_EMAIL_ALLOW_OVERRIDE: Allow email content to override attributes specified by previous options. Value is a comma separated list of attributes. See redmine documentation for acceptable values.
  • USERMAP_UID: ID of user redmine inside container. Defaults to 1000.
  • USERMAP_GID: ID of group redmine inside container. Defaults to 1000.

Plugins

The functionality of redmine can be extended using plugins developed by the community. You can find a list of available plugins in the Redmine Plugins Directory. You can also search for plugins on github.

Please check the plugin compatibility with the redmine version before installing a plugin.

Installing Plugins

Plugins should be installed in the plugins directory at the data store. If you are following the readme verbatim, on the host this location would be /srv/docker/redmine/redmine/plugins.

mkdir -p /srv/docker/redmine/redmine/plugins

To install a plugin, simply copy the plugin assets to the plugins directory. For example, to install the recurring tasks plugin:

cd /srv/docker/redmine/redmine/plugins
git clone https://github.com/nutso/redmine-plugin-recurring-tasks.git

For most plugins this is all you need to do. With the plugin installed you can start the docker image normally. The image will detect that a plugin has been added (or removed) and automatically install the required gems and perform the plugin migrations and will be ready for use.

If the gem installation fails after adding a new plugin, please retry after removing the /srv/docker/redmine/redmine/tmp directory

In some cases it might be necessary to install additional packages and/or perform some post installation setup for a plugin to function correctly. For such case the image allows you to install a pre-install.sh and post-install.sh script at the /srv/docker/redmine/redmine/plugins directory that will be executed everytime the image is started.

For example, the recurring tasks plugin requires that you create a cron job to periodically execute a rake task. To achieve this, create the /srv/docker/redmine/redmine/plugins/post-install.sh file with the following content:

## Recurring Tasks Configuration

# get the list existing cron jobs for the redmine user
crontab -u redmine -l 2>/dev/null >/tmp/cron.redmine

# add new job for recurring tasks if it does not exist
if ! grep -q redmine:recur_tasks /tmp/cron.redmine; then
  echo '@hourly /sbin/entrypoint.sh app:rake redmine:recur_tasks RAILS_ENV=production >> log/cron_rake.log 2>&1' >>/tmp/cron.redmine
  crontab -u redmine /tmp/cron.redmine 2>/dev/null
fi

# remove the temporary file
rm -rf /tmp/cron.redmine

## End of Recurring Tasks Configuration

Now whenever the image is started the post-install.sh script will be executed and the required cron job will be installed.

If you need to install additional packages to satisfy a plugins dependencies then install such packages using the pre-install.sh script.

Previously this image packaged a couple of plugins by default. Existing users would notice that those plugins are no longer available. If you want them back, follow these instructions:

cd /srv/docker/redmine/redmine/plugins
wget http://goo.gl/iJcvCP -O - | sh

Please Note: this plugin install script is not maintained and you would need to fix it if required (especially broken links)

Reloading plugins for development

Changing files in /srv/docker/redmine/redmine/plugins won't be automatically loaded. If you want to reload the plugins without restarting the docker, you can run the following.

docker exec -it redmine redmine-install-plugins

Uninstalling Plugins

To uninstall plugins you need to first tell redmine about the plugin you need to uninstall. This is done via a rake task:

docker run --name=redmine -it --rm \
  --volume=/srv/docker/redmine/redmine:/home/redmine/data \
  --volume=/srv/docker/redmine/redmine-logs:/var/log/redmine/ \
  sameersbn/redmine:5.1.2-1 \
  app:rake redmine:plugins:migrate NAME=plugin_name VERSION=0

Once the rake task has been executed, the plugin should be removed from the /srv/docker/redmine/redmine/plugins/ directory.

rm -rf /srv/docker/redmine/redmine/plugins/plugin_name

Any configuration that you may have added in the /srv/docker/redmine/redmine/plugins/post-install.sh script for the plugin should also be removed.

For example, to remove the recurring tasks plugin:

docker run --name=redmine -it --rm \
  --volume=/srv/docker/redmine/redmine:/home/redmine/data \
  --volume=/srv/docker/redmine/redmine-logs:/var/log/redmine/ \
  sameersbn/redmine:5.1.2-1 \
  app:rake redmine:plugins:migrate NAME=recurring_tasks VERSION=0
rm -rf /srv/docker/redmine/redmine/plugins/recurring_tasks

Now when the image is started the plugin will be gone.

Themes

Just like plugins, redmine allows users to install additional themes. You can find a list of available themes in the Redmine Themes Directory

Installing Themes

Themes should be installed in the themes directory at the data store. If you are following the readme verbatim, on the host this location would be /srv/docker/redmine/redmine/themes.

mkdir -p /srv/docker/redmine/redmine/themes

To install a theme, simply copy the theme assets to the themes directory. For example, to install the gitmike theme:

cd /srv/docker/redmine/redmine/themes
git clone https://github.com/makotokw/redmine-theme-gitmike.git gitmike

With the theme installed you can start the docker image normally and the newly installed theme should be available for use.

Previously this image packaged a couple of themes by default. Existing users would notice that those themes are no longer available. If you want them back, follow these instructions:

cd /srv/docker/redmine/redmine/themes
wget http://goo.gl/deKDpp -O - | sh

Please Note: this theme install script is not maintained and you would need to fix it if required (especially broken links)

Reloading themes for development

Changing files in /srv/docker/redmine/redmine/themes won't be automatically loaded. If you want to reload the themes without restarting the docker, you can run the following.

docker exec -it redmine redmine-install-themes

Uninstalling Themes

To uninstall themes you simply need to remove the theme from the /srv/docker/redmine/redmine/themes/ directory and restart the image.

rm -rf /srv/docker/redmine/redmine/themes/theme_name

For example, to remove the gitmike theme:

rm -rf /srv/docker/redmine/redmine/themes/gitmike

Now when the image is started the theme will be not be available anymore.

Maintenance

Creating backups

Only available in versions >3.2.0-2, >3.1.3-1, >3.0.7-1 and >2.6.9-1

The image allows users to create backups of the Redmine installation using the app:backup:create command or the redmine-backup-create helper script. The generated backup consists of configuration files, uploaded files and the sql database.

Before generating a backup — stop and remove the running instance.

docker stop redmine && docker rm redmine

Relaunch the container with the app:backup:create argument.

docker run --name redmine -it --rm [OPTIONS] \
  sameersbn/redmine:5.1.2-1 app:backup:create

The backup will be created in the backups/ folder of the Data Store. You can change the location using the REDMINE_BACKUPS_DIR configuration parameter.

NOTE

Backups can also be generated on a running instance using:

docker exec -it redmine redmine-backup-create

To avoid undesired side-effects, you are advised against creating a backup on a running instance.

Restoring Backups

Only available in versions >3.2.0-2, >3.1.3-1, >3.0.7-1 and >2.6.9-1

Backups created using instructions from the Creating backups section can be restored using the app:backup:restore argument.

Before restoring a backup — stop and remove the running instance.

docker stop redmine && docker rm redmine

Relaunch the container with the app:backup:restore argument. Ensure you launch the container in the interactive mode -it.

docker run --name redmine -it --rm [OPTIONS] \
  sameersbn/redmine:5.1.2-1 app:backup:restore

A list of existing backups will be displayed. Select a backup you wish to restore.

To avoid this interaction you can specify the backup filename using the BACKUP argument to app:backup:restore, eg.

docker run --name redmine -it --rm [OPTIONS] \
  sameersbn/redmine:5.1.2-1 app:backup:restore BACKUP=1417624827_redmine_backup.tar

Automated backups

Only available in versions >3.2.0-2, >3.1.3-1, >3.0.7-1 and >2.6.9-1

The image can be configured to automatically create backups daily, weekly or monthly using the REDMINE_BACKUP_SCHEDULE configuration option.

Daily backups are created everyday at REDMINE_BACKUP_TIME, which defaults to 04:00. Weekly backups are created every Sunday at REDMINE_BACKUP_TIME. Monthly backups are created on the 1st of every month at REDMINE_BACKUP_TIME.

By default when automated backups are enabled, backups are held for a period of 7 days before they are deleted. When disabled, the backups are held for an infinite period of time. This behavior can be modified using the REDMINE_BACKUP_EXPIRY option.

Rake Tasks

The app:rake command allows you to run redmine rake tasks. To run a rake task simply specify the task to be executed to the app:rake command. For example, if you want to send a test email to the admin user.

docker run --name=redmine -d [OPTIONS] \
  sameersbn/redmine:5.1.2-1 app:rake redmine:email:test[admin]

You can also use docker exec to run rake tasks on running redmine instance. For example,

docker exec redmine /sbin/entrypoint.sh app:rake redmine:email:test[admin] RAILS_ENV=production

Similarly, to remove uploaded files left unattached

docker run --name=redmine -d [OPTIONS] \
  sameersbn/redmine:5.1.2-1 app:rake redmine:attachments:prune

Or,

docker exec redmine /sbin/entrypoint.sh app:rake redmine:attachments:prune RAILS_ENV=production

For a complete list of available rake tasks please refer www.redmine.org/projects/redmine/wiki/RedmineRake.

Upgrading

To upgrade to newer redmine releases, simply follow this 4 step upgrade procedure.

  • Step 1: Update the docker image.
docker pull sameersbn/redmine:5.1.2-1
  • Step 2: Stop and remove the currently running image
docker stop redmine
docker rm redmine
  • Step 3: Create a backup
docker run --name redmine -it --rm [OPTIONS] \
    sameersbn/redmine:x.x.x app:backup:create

Replace x.x.x with the version you are upgrading from. For example, if you are upgrading from version 2.6.4, set x.x.x to 2.6.4

  • Step 4: Start the image
docker run --name=redmine -d [OPTIONS] sameersbn/redmine:5.1.2-1

Shell Access

For debugging and maintenance purposes you may want access the containers shell. If you are using docker version 1.3.0 or higher you can access a running containers shell using docker exec command.

docker exec -it redmine bash

Development

Upgrading to next redmine release

  • Commands to run to update image to next redmine release, examples are from 5.0.4 to 5.1.2-1
sed -i 's/5.1.2-1/5.1.2-1/g' VERSION README.md docker-compose-memcached.yml docker-compose-mysql.yml docker-compose-ssl.yml docker-compose-sqlite3.yml docker-compose-mariadb.yml Dockerfile docker-compose.yml
vim Changelog.md # Update change log
make test-release # Runs the following
#  sudo rm -rf /srv/docker/redmine/ # Clean old run
#  docker-compose down
#  docker-compose build
#  docker-compose up # Test new build
./make_release.sh # Runs the following
#  git add -p
#  git commit -sS -m "release: $(cat VERSION)"
#  git tag -s $(cat VERSION) -m "$(cat VERSION)"
#  git push
#  git push origin --tags

References

* http://www.redmine.org/
* http://www.redmine.org/projects/redmine/wiki/Guide
* http://www.redmine.org/projects/redmine/wiki/RedmineInstall

docker-redmine's People

Contributors

colinhuang avatar dalance avatar danielbadura avatar danone-dev avatar dns2utf8 avatar frank-dspeed avatar ichizok avatar imzack avatar j0wi avatar jcormier avatar jdsn avatar k0gihf9s avatar maescool avatar nishidayuya avatar obsessionsys avatar patope avatar petiepooo avatar sachilles avatar sameersbn avatar sandratatarevicova avatar siberianlove avatar sugi avatar svenroederer avatar thomas-nilsson-irfu avatar urimaro avatar w3blogfr avatar williamschey avatar wookietreiber avatar znz avatar zveronline avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

docker-redmine's Issues

Doesn't show up on host

Hi! I'm running a host with docker installed and a separate MariaDB (== MySQL) instance running for other stuff on that server already, too. I tried attaching Redmine to it and this seems to work, but the service doesn't show up:

docker run --name=redmine -it --rm -e "DB_HOST=lambda" -e "DB_NAME=redmine_production" -e "DB_USER=redmine" -e "DB_PASS=r3dm1n3yourself!" -e "DB_TYPE=mysql" -v /scratch/redmine-data:/home/redmine/data sameersbn/redmine
2014-10-22 12:18:32,660 CRIT Supervisor running as root (no user in config file)
2014-10-22 12:18:32,660 WARN Included extra file "/etc/supervisor/conf.d/cron.conf" during parsing
2014-10-22 12:18:32,660 WARN Included extra file "/etc/supervisor/conf.d/nginx.conf" during parsing
2014-10-22 12:18:32,660 WARN Included extra file "/etc/supervisor/conf.d/unicorn.conf" during parsing
2014-10-22 12:18:32,769 INFO RPC interface 'supervisor' initialized
2014-10-22 12:18:32,770 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2014-10-22 12:18:32,770 INFO supervisord started with pid 1
2014-10-22 12:18:33,773 INFO spawned: 'cron' with pid 79
2014-10-22 12:18:33,776 INFO spawned: 'nginx' with pid 80
2014-10-22 12:18:33,779 INFO spawned: 'unicorn' with pid 81
2014-10-22 12:18:35,243 INFO success: cron entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-10-22 12:18:35,244 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-10-22 12:18:35,244 INFO success: unicorn entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
^C2014-10-22 14:01:01,702 WARN received SIGINT indicating exit request
2014-10-22 14:01:01,703 INFO waiting for cron, nginx, unicorn to die
2014-10-22 14:01:02,074 INFO stopped: unicorn (exit status 0)
2014-10-22 14:01:02,081 INFO stopped: nginx (exit status 0)
2014-10-22 14:01:02,083 INFO stopped: cron (terminated by SIGTERM)
[peltzer@lambda ~]$ docker run --name=redmine -it --rm -e "DB_HOST=lambda" -e "DB_NAME=redmine_production" -e "DB_USER=redmine" -e "DB_PASS=password" -e "DB_TYPE=mysql" -e 'REDMINE_RELATIVE_URL_ROOT=/redmine' -v /scratch/redmine-data:/home/redmine/data sameersbn/redmine
2014-10-22 14:01:40,197 CRIT Supervisor running as root (no user in config file)
2014-10-22 14:01:40,198 WARN Included extra file "/etc/supervisor/conf.d/cron.conf" during parsing
2014-10-22 14:01:40,198 WARN Included extra file "/etc/supervisor/conf.d/nginx.conf" during parsing
2014-10-22 14:01:40,198 WARN Included extra file "/etc/supervisor/conf.d/unicorn.conf" during parsing
2014-10-22 14:01:40,307 INFO RPC interface 'supervisor' initialized
2014-10-22 14:01:40,307 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2014-10-22 14:01:40,308 INFO supervisord started with pid 1
2014-10-22 14:01:41,311 INFO spawned: 'cron' with pid 87
2014-10-22 14:01:41,314 INFO spawned: 'nginx' with pid 88
2014-10-22 14:01:41,317 INFO spawned: 'unicorn' with pid 89
2014-10-22 14:01:42,782 INFO success: cron entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-10-22 14:01:42,782 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-10-22 14:01:42,782 INFO success: unicorn entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

I'm kind of curious whats going on. Do I have to configure stuff on the server itself too?

browser error: Ruby (Rack) application could not be started

hi,

i followed your instructions, but
redmine gives errors in the browser:

any idea what's wrong?

tx!

Ruby (Rack) application could not be started
These are the possible causes:

There may be a syntax error in the application's code. Please check for such errors and fix them.
A required library may not installed. Please install all libraries that this application requires.
The application may not be properly configured. Please check whether all configuration files are written correctly, fix any incorrect configurations, and restart this application.
A service that the application relies on (such as the database server or the Ferret search engine server) may not have been started. Please start that service.

Further information about the error may have been written to the application's log file. Please check it in order to analyse the problem.

Error message:
(eval):2: syntax error, unexpected '}', expecting tASSOC config.action_controller.perform_caching = {{ENABLE_CACHE}} ^
Exception class:
SyntaxError
Application root:
/redmine

Update to your Quick Start

Hi,

Great work on the docker images.
There is a quick suggestion for improvement, only a minor, on my part.

In your Quickstart there is something missing, currently its:

Quick Start

Run the redmine image

REDMINE=$(sudo docker run -d redmine)
REDMINE_IP=$(sudo docker inspect $REDMINE | grep IPAddres | awk -F'"' '{print $4}')

This will generate this error:

REDMINE=$(sudo docker run -d redmine)Unable to find image 'redmine' (tag: latest) locally
Pulling repository redmine
2014/01/13 17:29:02 HTTP code: 404

It should be:

Quick Start

Run the redmine image

REDMINE=$(sudo docker run -d sameersbn/redmine)
REDMINE_IP=$(sudo docker inspect $REDMINE | grep IPAddres | awk -F'"' '{print $4}')

As i said, something minor. 👍 Thanks for the docker-redmine environment!

Add dist-upgrade to the Dockerfile

Although base image for redmine is very recent, still if I enter the container and issue 'apt-get update' I can see that there are already certain packages require an update. I understand, that eventually base will be upgraded and new image will get packages up-to-date, but while I'm rebuilding image from Dockerfile I'm installing the latest at the moment of the build additional packages to the base image. But still, packages, that were in the base image remain outdated.

I believe, it's reasonable to add additional line with 'apt-get -y dist-upgrade' in the RUN chain so resulting image will have all installed packages up-to-date.

dot files in /home/redmine

With svn+ssh access to remote repository we need to keep .ssh/ somewhere. The same applies to git, bzr keeps some configs in .bzrfile(?), svn keeps repository access configuration in .subversion/ and so on. With the docker changes in /home/redmine are not persistent, unless you clone your own container from docker-redmine with 'docker commit'. That's an option, of course, but then you lock yourself from further upgrades of the base image or you need to remember to backup those diffs somehow...

A better option would be to make volume out of /home/redmine rather than just /home/redmine/data. But that would break current setup, as /home/redmine/redmine should go somewhere else. Dunno, what would you think about such a move...

A less intrusive solution would be to put all the essential dot dirs/files inside /home/redmine/data and symlink them to the upper /home/redmine on startup. At least with .ssh/ that worked.

So, what do you think would be a better solution and would you like to implement it?

nginx outside of container

Hi!

I've to migrate a redmine cause of some issues on our current version and we discussed on maybe going for the docker way. Found your repo, tested, all is working good, good job! :)

Now I've a question.. as we (and probably everybody else) will use another nginx on the host for connecting to the container and publishing the content to the world, couldn't it be a bit better if we leave the gunicorns directly answering on the container instead of having that other nginx inside?

Thanks.

rake complains that some gems are added twice in Gemfile

If you take a look into unicorn.log you can see, that on startup it complains, that 'mysql2' and some other gems are mentioned more, than once in Gemfile. Error says that it may lead to the problems to the future. So, adding a guardian code before adding those gems to the Gemfile should help:

--- a/assets/setup/install
+++ b/assets/setup/install
@@ -36,8 +40,12 @@ cd ${INSTALL_DIR}
 echo "${REDMINE_VERSION}" > ${INSTALL_DIR}/VERSION

 # add support for mysql and postgresql databases
-echo 'gem "mysql2", "~> 0.3.11"' >> Gemfile
-echo 'gem "pg", ">= 0.11.0"' >> Gemfile
+if ! fgrep 'gem "mysql2"' Gemfile >/dev/null; then
+    echo 'gem "mysql2", "~> 0.3.11"' >> Gemfile
+fi
+if ! fgrep 'gem "pg"' Gemfile >/dev/null; then
+    echo 'gem "pg", ">= 0.11.0"' >> Gemfile
+fi

 # add gems for app server and memcache support
 echo 'gem "unicorn"' >> Gemfile
@@ -45,8 +53,12 @@ echo 'gem "dalli", "~> 2.7.0"' >> Gemfile

 # following gems are added to fix some issues that are
 # generally seen when installing gems from the cache
-echo 'gem "fastercsv", "~> 1.5.0"' >> Gemfile
-echo 'gem "yard"' >> Gemfile
+if ! fgrep 'gem "fastercsv"' Gemfile >/dev/null; then
+    echo 'gem "fastercsv", "~> 1.5.0"' >> Gemfile
+fi
+if ! fgrep 'gem "yard"' Gemfile >/dev/null; then
+    echo 'gem "yard"' >> Gemfile
+fi

 # install gems, use cache if available
 if [ -d "${GEM_CACHE_DIR}" ]; then

Plugins do not get activated anymore

Since the commits from Dec 18, 2014 the plugins directory will be created and populated, but the plugins won' t get activated in redmine anymore. The version from Dec 9, 2014 works fine.

REDMINE_HTTPS=true does not seem to work

I created the cert and exposed 80 and also 443, 80 is still working. Also using the RELATIVE_URL option and that is working.

This is the exact command:
docker run --name=redmine_cyphy -d -e 'REDMINE_HTTPS=true' -e 'REDMINE_RELATIVE_URL_ROOT=/redmine' --link mysql_cyphy:mysql -p 80:80 -p 443:443 -v /data/redmine/data:/home/redmine/data sameersbn/redmine:2.6.0-1

Linking DB container

Great image and documentation! Thanks for you effort.

One question though: Does this support linking with a mysql-only container using environment variables?

Nginx gives alerts about not being able to read from upstream server

When running the docker with this command:

docker run -e DB_HOST=10.0.0.1 -e DB_NAME=redmine -e DB_USER=redmine -e DB_PASS=mypass -e DB_TYPE=mysql -v /tmp/log:/var/log/redmine --name=redmine -it --rm -p 10080:80 -v /var/run/docker.sock:/run/docker.sock -v $(which docker):/bin/docker sameersbn/redmine:2.6.0-1

It will stop responding to requests after a few requests. Retrying will eventually return the requested page. Adding -e UNICORN_WORKERS=12 helps a bit but will still throw errors in the nginx logs after a few requests (less than 12). The error I see in the logs is:

2014/12/10 15:32:26 [alert] 124#0: *37 readv() failed (13: Permission denied) while reading upstream, client: 10.0.0.10, server: , request: "GET / HTTP/1.1", upstream: "http://unix:/home/redmine/redmine/tmp/sockets/redmine.socket:/", host: "10.0.0.1:10080"

The requests were made using curl and even with 12 workers it will return 'transfer closed with outstanding read data remaining'.

502 Bad Gateway after commit

Hi,

after creating the image and running the container, redmine is working as expected. But when I make an new image, using "docker commit...", I get only "502 bad gateway" after running this new image.

In var/log/nginx/redmine_error.log, the error is:

2014/09/11 13:17:24 [error] 104#0: *5 connect() to unix:/home/redmine/redmine/tmp/sockets/redmine.socket failed (111: Connection refused) while connecting to upstream, client: ...

Thanks

Check the logs

After restarting the host, my redmine installation is giving some errors, inviting to check the logs.

But how do I read them? Is there a way to run the container so that I can access the shell? Or maybe to add SSH access?

I was thinking about cloning the container rerunning with the /bin/bash command, and then start redmine manually.

database connection

when I'm running this image, I got a err report showing that the database connection is not specified...

$ docker run --name=redmine -it --rm -p 10080:80 \

-v /var/run/docker.sock:/run/docker.sock
-v $(which docker):/bin/docker
sameersbn/redmine:latest
Database connection details not specified.
Will try to spin up a new postgresql image with the name postgresql-redmine.
Please manually configure the database connection in production.
Starting up a new postgresql container...
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0e3fa7344fe1 training/webapp:latest "/bin/bash" About an hour ago Up About an hour 5000/tcp compassionate_goodall
cd4a36bfc173 training/webapp:latest "python app.py" 2 hours ago Up 2 hours 0.0.0.0:49155->5000/tcp web
cd4795ce7094 mongo:2 "/entrypoint.sh mong 2 hours ago Up About an hour 27017/tcp db

Avoid duplicate fetch commits cronjobs

I've make some changes to the docker-redmine container and commited changes to the new image to save my work under new tag. After starting this altered image I've noticed, that REDMINE_FETCH_COMMITS was duplicated in the crontab. And after second commit I actually got three same commands in the crontab...

I think it's reasonable to grep current crontab for the presence of the line which is going to be (re)added. Here is the way I've implemented it:

--- a/assets/init
+++ b/assets/init
@@ -428,14 +428,18 @@ if [ -d ${DATA_DIR}/themes ]; then
 fi

 # create a cronjob to periodically fetch commits
+REDMINE_CRONJOB_FILE=/tmp/cron.redmine
 case "${REDMINE_FETCH_COMMITS}" in
   hourly|daily|monthly)
     set +e
-    crontab -u redmine -l 2>/dev/null >/tmp/cron.redmine
+    crontab -u redmine -l 2>/dev/null >${REDMINE_CRONJOB_FILE}
     set -e
-    echo "@${REDMINE_FETCH_COMMITS} cd /home/redmine/redmine && ./script/rails runner \"Repository.fetch_changesets\" -e production >> log/cron_rake.log 2>&1" >>/tmp/cron.redmine
-    crontab -u redmine /tmp/cron.redmine 2>/dev/null
-    rm -rf /tmp/cron.redmine
+    REDMINE_FETCH_CRONJOB="@${REDMINE_FETCH_COMMITS} cd /home/redmine/redmine && ./script/rails runner \"Repository.fetch_changesets\" -e production >> log/cron_rake.log 2>&1"
+    if ! fgrep "${REDMINE_FETCH_CRONJOB}" ${REDMINE_CRONJOB_FILE} >/dev/null; then
+       echo "${REDMINE_FETCH_CRONJOB}" >>${REDMINE_CRONJOB_FILE}
+       crontab -u redmine ${REDMINE_CRONJOB_FILE} 2>/dev/null
+    fi
+    rm -f ${REDMINE_CRONJOB_FILE}
     ;;
 esac


That should fix the problem.

Announcements

Subscribe to this issue to get notified about project announcements.
This is mainly created so that you can keep up with the changes in the application stack.
Please do not use this thread to report issues.

Remove Charts plugin

I don't think charts plugin works with redmine 2.4.x. I don't see it doing any thing in my test installation.

Please let me know if it works for anyone of you, else it got's to go

Cleaning up tmp/sockets before starting application

After commiting altered version of the container one of the side effects of such an operation is that socket files are stored as plan files in the diff. One of such files is tmp/unicorn.socket, which prevents unicorn from starting up, as server sees it's not a socket and fails.

The easiest fix to that is to add a clean up into the appStart() function:

--- a/assets/init
+++ b/assets/init
@@ -443,6 +447,10 @@ esac
 chown -R redmine:redmine ${DATA_DIR}/tmp/

 appStart () {
+  # clear pids and sockets
+  rm -f /home/redmine/redmine/tmp/sockets/* /home/redmine/redmine/tmp/pids/*
+  #sudo -u redmine -H bundle exec rake tmp:pids:clear RAILS_ENV=production >/dev/null
+  #sudo -u redmine -H bundle exec rake tmp:sockets:clear RAILS_ENV=production >/dev/null
   # start supervisord
   exec /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
 }

manpages inside the container

With the docker-entry I find it's easy and handy to access container to peek log files and check/tweak some configuration parameters. Sometimes I need to check options or other help information for the installed packages within container. Hence I try to access manpages for that packages within container, but 'man' command isn't available :(

I can imagine, that it's not installed to keep image smaller, but then - the whole bunch of manpages in /usr/share/man/* are actually there, together with /usr/share/doc/*. So, if the priority is saving space, taken by the image its worth deleting content of those directories(together with /etc/alternatives/).

Otherwise, if they are there already it's handy to be able to access those manpages and add 'man-db' package to the image.

Actually, it's possibly better to add this to the parent image, sameersbn/ubuntu and/or sameersbn/debian, as those alreasy have some manpages.

plugin init example at docker start causes duplicated cron

The suggested documentation for creating a cron entry says to set up a script at plugins/init. Every time the container is restarted, the script is run, which causes the example script to stack an additional cron job into the crontab. Running the recurring tasks cron many times at once causes a lot of duplicate tasks.

Presumably the correct options are to either make it so plugins/init only runs at initial configuration or to make a suggested script that doesn't insert a new cron if there's an existing entry.

Enforce order of daemons to start

Hi, @sameersbn!

Hope, this is the last on from me :) On startup of the container I see in the logs:

2014-10-21 22:51:26,625 WARN Included extra file "/etc/supervisor/conf.d/nginx.conf" during parsing
2014-10-21 22:51:26,625 WARN Included extra file "/etc/supervisor/conf.d/cron.conf" during parsing
2014-10-21 22:51:26,625 WARN Included extra file "/etc/supervisor/conf.d/unicorn.conf" during parsing
2014-10-21 22:51:27,119 INFO RPC interface 'supervisor' initialized

Possibly I'm just too quick, but when I'm trying to open the URL of the Redmine in the first minute or so I do get 502 Bad gateway from nginx. This seems to be a result of nginx starting before unicorn. Not a big deal again, but maybe explicit ordering in the startup sequence can help. Like naming config files 01-unicorn.conf, 02-cron.conf,03-nginx.conf`.

gmail smtp setting not working

the mail config is below
-e "SMTP_USER=[email protected]" -e "SMTP_PASS=PASSWORD"

when docker redmine is running, testing mail can not send, the default redmine mail setting has no tls attribute

it seems that redmine image need more tls plugin or disable gmail tls setting

Connecting mysql on host

Hi,
First of all, thanks for the great work on this image! Unfortunately I'm having a problem connecting to my mysql server on the host. Using 127.0.0.1 does not work, so I think I have to use a socket connection.
The problem is I don't know how to configure this using the environment variables.
Could you point me in the right direction?

Best regards,
Peter

Not working on ubuntu 14.04

Hi guys,

I tried to launch this container on ubuntu 14.04, but it return an error page.

The only thing I did differently from the default, is -p 1680:80, to map the port of the container, because 80 is not free on my host.

Can anyone else confirm this?>

Squshing image in public repository

Hi, Sameer!

Just a suggestion - I came across http://jasonwilder.com/blog/2014/08/19/squashing-docker-images/ and his tool https://github.com/jwilder/docker-squash. By squashing image with the sequence:

docker save -o adlantic-latest.tar 2adf78665c7e
docker-squash --verbose -i adlantic-latest.tar -o squashed.tar -t adlantic/redmine:squash
docker load -i squashed.tar

I've got:

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
adlantic/redmine    squash              69131321fdf0        4 hours ago         632.6 MB
adlantic/redmine    local               2adf78665c7e        4 hours ago         661.1 MB

Dunno, would it make any sense for you.

  ▒▒8cbdf71a8e7f Virtual Size: 192.6 MB
    ▒▒e630be76d257 Virtual Size: 632.6 MB
    ▒ ▒▒377d75fdc1ac Virtual Size: 632.6 MB
    ▒   ▒▒cfa3478378e8 Virtual Size: 632.6 MB
    ▒     ▒▒c44d01d82931 Virtual Size: 632.6 MB
    ▒       ▒▒9421a7f4c053 Virtual Size: 632.6 MB
    ▒         ▒▒b4ca9c4ab71e Virtual Size: 632.6 MB
    ▒           ▒▒0f2e81fe0681 Virtual Size: 632.6 MB
    ▒             ▒▒0845f8d018f7 Virtual Size: 632.6 MB
    ▒               ▒▒cd4b4fdad1d1 Virtual Size: 632.6 MB
    ▒                 ▒▒db0fd50fbe56 Virtual Size: 632.6 MB
    ▒                   ▒▒69131321fdf0 Virtual Size: 632.6 MB Tags: adlantic/redmine:squash
    ▒▒c31865d83ea1 Virtual Size: 192.7 MB
      ▒▒1b2af7d5307a Virtual Size: 192.7 MB
        ▒▒311ec46308da Virtual Size: 192.8 MB
          ▒▒96e1c132acb3 Virtual Size: 194.9 MB
            ▒▒c3d5614fecc4 Virtual Size: 194.9 MB
              ▒▒75a9ec6cb3c6 Virtual Size: 194.9 MB
                ▒▒5dc5a7797214 Virtual Size: 194.9 MB
                  ▒▒b17722c406a6 Virtual Size: 201.1 MB Tags: sameersbn/ubuntu:14.04.20141001
                    ▒▒d9c3d78d368a Virtual Size: 201.1 MB
                      ▒▒acae0763b0a3 Virtual Size: 543.8 MB
                        ▒▒d1980eb8f049 Virtual Size: 543.8 MB
                          ▒▒892bf2db3780 Virtual Size: 661 MB
                            ▒▒ccdf2dc9af8e Virtual Size: 661 MB
                              ▒▒61b05ca62a0c Virtual Size: 661 MB
                                ▒▒f6ab9d6bc5f3 Virtual Size: 661.1 MB
                                  ▒▒bf36d3f0616a Virtual Size: 661.1 MB
                                    ▒▒5194e8d20990 Virtual Size: 661.1 MB
                                      ▒▒8c357e608fc9 Virtual Size: 661.1 MB
                                        ▒▒58a9997b683c Virtual Size: 661.1 MB
                                          ▒▒bbbf6cfa0e51 Virtual Size: 661.1 MB
                                            ▒▒2adf78665c7e Virtual Size: 661.1 MB Tags: adlantic/redmine:local
# docker history adlantic/redmine:local
IMAGE               CREATED             CREATED BY                                      SIZE
2adf78665c7e        4 hours ago         /bin/sh -c #(nop) CMD [app:start]               0 B
bbbf6cfa0e51        4 hours ago         /bin/sh -c #(nop) ENTRYPOINT [/app/init]        0 B
58a9997b683c        4 hours ago         /bin/sh -c #(nop) VOLUME [/var/log/redmine]     0 B
8c357e608fc9        4 hours ago         /bin/sh -c #(nop) VOLUME [/home/redmine/data]   0 B
5194e8d20990        4 hours ago         /bin/sh -c #(nop) EXPOSE map[443/tcp:{}]        0 B
bf36d3f0616a        4 hours ago         /bin/sh -c #(nop) EXPOSE map[80/tcp:{}]         0 B
f6ab9d6bc5f3        4 hours ago         /bin/sh -c chmod 755 /app/init                  19.91 kB
61b05ca62a0c        4 hours ago         /bin/sh -c #(nop) ADD file:b2ac5c8cb13d820914   19.91 kB
ccdf2dc9af8e        4 hours ago         /bin/sh -c #(nop) ADD dir:e4c01b409ece3474987   10.6 kB
892bf2db3780        4 hours ago         /bin/sh -c chmod 755 /app/setup/install && /a   117.2 MB
d1980eb8f049        4 hours ago         /bin/sh -c #(nop) ADD dir:1758c79e006f05d72a8   4.783 kB
acae0763b0a3        4 hours ago         /bin/sh -c apt-key adv --keyserver keyserver.   342.8 MB
d9c3d78d368a        4 hours ago         /bin/sh -c #(nop) MAINTAINER sameer@damagehea   0 B
b17722c406a6        2 weeks ago         /bin/sh -c echo "APT::Install-Recommends 0;"    6.137 MB
5dc5a7797214        2 weeks ago         /bin/sh -c #(nop) ENV DEBIAN_FRONTEND=noninte   0 B
75a9ec6cb3c6        2 weeks ago         /bin/sh -c #(nop) MAINTAINER sameer@damagehea   0 B
c3d5614fecc4        2 weeks ago         /bin/sh -c #(nop) CMD [/bin/bash]               0 B
96e1c132acb3        2 weeks ago         /bin/sh -c apt-get update && apt-get dist-upg   2.178 MB
311ec46308da        2 weeks ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/   1.895 kB
1b2af7d5307a        2 weeks ago         /bin/sh -c rm -rf /var/lib/apt/lists/*          0 B
c31865d83ea1        2 weeks ago         /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic   194.5 kB
8cbdf71a8e7f        2 weeks ago         /bin/sh -c #(nop) ADD file:c0f316fa0dcbdd4635   192.6 MB
511136ea3c5a        16 months ago                                                       0 B
# docker history adlantic/redmine:squash
IMAGE               CREATED             CREATED BY                                      SIZE
69131321fdf0        4 hours ago         /bin/sh -c #(nop) CMD [app:start]               0 B
db0fd50fbe56        4 hours ago         /bin/sh -c #(nop) ENTRYPOINT [/app/init]        0 B
cd4b4fdad1d1        4 hours ago         /bin/sh -c #(nop) VOLUME [/var/log/redmine]     0 B
0845f8d018f7        4 hours ago         /bin/sh -c #(nop) VOLUME [/home/redmine/data]   0 B
0f2e81fe0681        4 hours ago         /bin/sh -c #(nop) EXPOSE map[443/tcp:{}]        0 B
b4ca9c4ab71e        4 hours ago         /bin/sh -c #(nop) EXPOSE map[80/tcp:{}]         0 B
9421a7f4c053        4 hours ago         /bin/sh -c #(nop) MAINTAINER sameer@damagehea   0 B
c44d01d82931        4 hours ago         /bin/sh -c #(nop) ENV DEBIAN_FRONTEND=noninte   0 B
cfa3478378e8        4 hours ago         /bin/sh -c #(nop) MAINTAINER sameer@damagehea   0 B
377d75fdc1ac        4 hours ago         /bin/sh -c #(nop) CMD [/bin/bash]               0 B
e630be76d257        4 hours ago         /bin/sh -c #(squash) from 8cbdf71a8e7f          440.1 MB
8cbdf71a8e7f        2 weeks ago         /bin/sh -c #(nop) ADD file:c0f316fa0dcbdd4635   192.6 MB
511136ea3c5a        16 months ago                                                       0 B

data stored in the mysql database will be lost if the container is stopped?

hi,

You say: "However in this case, the data stored in the mysql database will be lost if the container is stopped/deleted"
I am new to docker, but I thought that when you stop a container all data is written to the container layer, and when you start that container it will have the same state and data as when it was stopped.
Am I missing something here?

Quick Start in ReadMe stopped after starting up a postgresql

this is quick start shell command in readme

docker run --name=redmine -it --rm -p 10080:80 \
-v /var/run/docker.sock:/run/docker.sock \
-v $(which docker):/bin/docker \
sameersbn/redmine:2.6.0-1

container stopped after

Database connection details not specified.
Will try to spin up a new postgresql image with the name postgresql-redmine.
Please manually configure the database connection in production.
Starting up a new postgresql container...

mysql error

hi. i just wanted to try the redmine container, using the provided db - i know i'm warned - and i got the following error :

Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''show', 'projects', 'label_overview', 1, 0, 0, 100)' at line 1: INSERT INTO `permissions` (`action`, `controller`, `description`, `is_public`, `mail_enabled`, `mail_option`, `sort`) VALUES ('show', 'projects', 'label_overview', 1, 0, 0, 100)/home/redmine/redmine/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.19/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `query'

redmine error in browser: Ruby (Rack) application could not be started

Hi,
I followed your instructions but I get errors:

any idea what is wrong?

tx

error:

Ruby (Rack) application could not be started
These are the possible causes:

There may be a syntax error in the application's code. Please check for such errors and fix them.
A required library may not installed. Please install all libraries that this application requires.
The application may not be properly configured. Please check whether all configuration files are written correctly, fix any incorrect configurations, and restart this application.
A service that the application relies on (such as the database server or the Ferret search engine server) may not have been started. Please start that service.

Further information about the error may have been written to the application's log file. Please check it in order to analyse the problem.

Error message:
(eval):2: syntax error, unexpected '}', expecting tASSOC config.action_controller.perform_caching = {{ENABLE_CACHE}} ^
Exception class:
SyntaxError
Application root:
/redmine

groupadd: failure while writing changes to /etc/group

just build it...
addgroup: `/usr/sbin/groupadd -g 103 mysql' returned error code 10. Exiting.
dpkg: error processing /var/cache/apt/archives/mysql-server-5.5_5.5.38-0ubuntu0.12.04.1_amd64.deb (--unpack):
subprocess new pre-installation script returned error exit status 1
...
Errors were encountered while processing:
/var/cache/apt/archives/mysql-server-5.5_5.5.38-0ubuntu0.12.04.1_amd64.deb
Sub-process /usr/bin/dpkg returned an error code (1)

trying to change mysql-server to mysql-client (I use external base)
maddgroup: /usr/sbin/groupadd -g 103 ssh' returned error code 10. Exiting. mdpkg: error processing openssh-client (--configure): subprocess installed post-installation script returned error exit status 1 ... groupadd: failure while writing changes to /etc/group addgroup:/usr/sbin/groupadd -g 103 _cvsadmin' returned error code 10. Exiting.
dpkg: error processing cvs (--configure):
subprocess installed post-installation script returned error exit status 1
...
groupadd: failure while writing changes to /etc/group
addgroup: `/usr/sbin/groupadd -g 103 memcache' returned error code 10. Exiting.
dpkg: error processing memcached (--configure):
subprocess installed post-installation script returned error exit status 1
...
Errors were encountered while processing:
openssh-client
cvs
memcached
Sub-process /usr/bin/dpkg returned an error code (1)

Move redmine logs to /var/log

If you ever tried to debug failing server you know, that it's very handy to have them in one place. Most of the docker-redmine logs are situated in /var/log, except, well, redmine logs themselves. It would be very handy to have them there as well, in /var/log/redmine/, for example. Altering all the references to log/ is not a trivial task, so I think the easiest way to solve this is to use symlink from log/ to /var/log/redmine/.

--- a/assets/setup/install
+++ b/assets/setup/install
@@ -22,6 +22,10 @@ passwd -d redmine
 # create the data store
 sudo -u redmine -H mkdir -p /home/redmine/data

+# create redmine log directory
+mkdir -p /var/log/redmine
+chown -R redmine:redmine /var/log/redmine
+
 # install redmine, use local copy if available
 mkdir -p ${INSTALL_DIR}
 if [ -f ${SETUP_DIR}/redmine-${REDMINE_VERSION}.tar.gz ]; then
@@ -71,6 +83,10 @@ ln -sf ${DATA_DIR}/tmp/thumbnails tmp/thumbnails
 # create link to tmp/secret_token.rb
 ln -sf ${DATA_DIR}/tmp/secret_token.rb config/initializers/secret_token.rb

+# create link to the log directory
+rm -rf log
+ln -sf /var/log/redmine log
+
 # create production log
 sudo -u redmine -H touch log/production.log

PLZ Add: sendmail support via env

I need to run internal sendmail because i hate gmail they always block and discuss with me my ips and all that i simply need working mail and would love that without setting up postfix

SMTP not working

Hello,

while installing a recent image on ubuntu 14.04, I found out I couldn't open issues due to system error.

I couldn't see why, but with nsenter I was able to troubleshoot it, finding SMTP as the culprit.

We should either fix SMTP, or make SMTP disabled by default.

Another possible reason is that I have a tight firewall, but other images just worked fine in this regard. Or maybe is that I use a clean image with everything set to default?

Add openssh-client to the image

Hi!

svn and git(and I guess, some other SCMs) have ability to access repositories via ssh. We are using svn+ssh schema with passwordless ssh key to access repositories history and files.

Please, add 'openssh-client' to the list of installed packages in the Dockerfile.

can not auto install libxml-ruby

I need the plugin Redmine mylyn connector (http://danmunn.github.io/redmine_mylyn_connector/). The page said this plugin needs libxml-ruby Gem. I put this plugin in /opt/redmine/data/plugins and do docker run command, the libxml-ruby can not auto install

the error msg is

An error occurred while installing libxml-ruby (2.7.0), and Bundler cannot continue.
Make sure that gem install libxml-ruby -v '2.7.0' succeeds before bundling.

Plugin Installation fail when a Gem has to be build

Hi,
When I want to install the redmine_backlogs plugin, the installation need to build some Gem. But the container doesn't have the dev tools to do so.

How can I do the plugin installation?

here come the trace:

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /usr/bin/ruby2.1 extconf.rb
checking for main() in -lc... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/usr/bin/ruby2.1
        --with-gherkin_lexer_ar-dir
        --without-gherkin_lexer_ar-dir
        --with-gherkin_lexer_ar-include
        --without-gherkin_lexer_ar-include=${gherkin_lexer_ar-dir}/include
        --with-gherkin_lexer_ar-lib
        --without-gherkin_lexer_ar-lib=${gherkin_lexer_ar-dir}/lib
        --with-clib
        --without-clib
/usr/lib/ruby/2.1.0/mkmf.rb:456:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
        from /usr/lib/ruby/2.1.0/mkmf.rb:541:in `try_link0'
        from /usr/lib/ruby/2.1.0/mkmf.rb:556:in `try_link'
        from /usr/lib/ruby/2.1.0/mkmf.rb:742:in `try_func'
        from /usr/lib/ruby/2.1.0/mkmf.rb:973:in `block in have_library'
        from /usr/lib/ruby/2.1.0/mkmf.rb:918:in `block in checking_for'
        from /usr/lib/ruby/2.1.0/mkmf.rb:351:in `block (2 levels) in postpone'
        from /usr/lib/ruby/2.1.0/mkmf.rb:321:in `open'
        from /usr/lib/ruby/2.1.0/mkmf.rb:351:in `block in postpone'
        from /usr/lib/ruby/2.1.0/mkmf.rb:321:in `open'
        from /usr/lib/ruby/2.1.0/mkmf.rb:347:in `postpone'
        from /usr/lib/ruby/2.1.0/mkmf.rb:917:in `checking_for'
        from /usr/lib/ruby/2.1.0/mkmf.rb:968:in `have_library'
        from extconf.rb:5:in `<main>'

extconf failed, exit code 1

Gem files will remain installed in /home/redmine/redmine/vendor/bundle/ruby/2.1.0/gems/gherkin-2.12.2 for inspection.
Results logged to /home/redmine/redmine/vendor/bundle/ruby/2.1.0/extensions/x86_64-linux/2.1.0/gherkin-2.12.2/gem_make.out
An error occurred while installing gherkin (2.12.2), and Bundler cannot
continue.
Make sure that `gem install gherkin -v '2.12.2'` succeeds before bundling.

SMTP_ENABLED=false does not disable SMTP

Even if I set -e SMTP_ENABLED=false -e SMTP_USER=, I always end up with this config:

$ /bin/cat redmine/config/initializers/smtp_settings.rb
if Rails.env.production?
  ActionMailer::Base.delivery_method = :smtp
  ActionMailer::Base.perform_deliveries = true
  ActionMailer::Base.raise_delivery_errors = true
  ActionMailer::Base.smtp_settings = {
    :address              => "smtp.gmail.com",
    :port                 => 587,
    :domain               => "www.gmail.com",
    :authentication       => :login,
    :enable_starttls_auto => true
  }
end

Then, after doing things that send a notification mail (like creating an issue), I get an internal error because Redmine fails to send mail.

mysql database password

Hello,

This is a "Feature request"

Today i tried to place a dump from a production Redmine environment inside the Docker test mysql environment running on your created container, im working on a script with the redmine api and to quick test some aspects i want to load in the production database to see what happens if users already exists etc. I don't care about persistence for this database, its just a quick test run. But i can't seem to import the dataset because i do not have the mysql root password. I tried -u redmine -p password / -uroot -p etc etc and some of the password examples used in your advanced text, but with no result. I can off course start mysqladmin, or attach an external database... But maybe adding a default admin and password can get people up and running quick. Just a request to what i think is an improvement, let me know what you think.

Regards,

Rogier

Source image doesn't have ShellShock fix

Based on the date string, sameersbn/debian:jessie.20140918, the image this release is based on, wouldn't have the fixes that protect against the shellshock bash vulnerability and its variants. Please update your base docker image to include the recent bash updates and re-release any images that depend on it.

Cron doesn't seem to run anything

I set up redmine 2.6.0-1 using the init script to add the crontab for the recurring tasks plugin, but it's never actually getting run. I checked inside the container:

root@redmine:~# crontab -l -u redmine
15 */4 * * * cd /home/redmine/redmine && bundle exec rake redmine:recur_tasks RAILS_ENV=production >> log/cron_rake.log 2>&1

crond is running, but it doesn't seem to actually log anything anywhere, and there's no cron_rake.log created, nor are my tasks getting run. If I run the task manually, it works fine.

As a side note, the example cron for the recurring tasks plugin in your documentation is set to run at * */4 * * * which is once per minute for an hour, every 4 hours. I chose 15 */4 * * * for a more reasonable schedule.

unable to start container instance

When I attempt to start a container instance, the following error is returned:

anapsix@test:~$ docker run --name=redmine -it --rm -p 10080:80 -e DB_USER=redmine -e DB_PASS=password -e DB_HOST=172.17.0.4 --link mysql:mysql sameersbn/redmine:latest
sudo: unable to execute /bin/cp: Permission denied

"Permission denied" on /redmine

I'm facing a very strange issue running this container on Docker version 0.8.0, build cc3a8c8.

Docker logs gives me this

User: root Password: xohGahghio1A
sed: can't read config/database.yml: Permission denied
sed: can't read config/database.yml: Permission denied
sed: can't read config/database.yml: Permission denied
sed: can't read config/database.yml: Permission denied
sed: can't read config/database.yml: Permission denied
sed: can't read config/database.yml: Permission denied
memcached: stopped
memcached: updated process group
memcached: started
sed: can't read config/additional_environment.rb: Permission denied
mv: accessing `plugins-1': Permission denied
rake aborted!
Permission denied - /redmine

(See full trace by running task with --trace)
rake aborted!
Permission denied - /redmine

(See full trace by running task with --trace)
mv: accessing `plugins': Permission denied
rake aborted!
Permission denied - /redmine

(See full trace by running task with --trace)
rake aborted!
Permission denied - /redmine

(See full trace by running task with --trace)
rake aborted!
Permission denied - /redmine

(See full trace by running task with --trace)
rake aborted!
Permission denied - /redmine

(See full trace by running task with --trace)
touch: cannot touch `tmp/restart.txt': Permission denied
--2014-03-19 08:58:27--  http://localhost/
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:80... failed: Connection refused.
Connecting to localhost (localhost)|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
2014-03-19 08:58:27 ERROR 403: Forbidden.

redmine:80 127.0.0.1 - - [19/Mar/2014:08:58:27 +0000] "GET / HTTP/1.1" 403 517 "-" "Wget/1.13.4 (linux-gnu)"

When I ssh into the container and try to access the /redmine directory with root all is fine but not for its owner www-data.

[root@redmine ~]# cd /
[root@redmine /]# ls -l | grep redmine
drwxr-xr-x  34 www-data www-data  4096 Mar 19 08:58 redmine
[root@redmine /]# ls -l redmine/
total 92
-rw-rw-r--  1 www-data www-data  240 Mar  2 11:28 CONTRIBUTING.md
-rw-rw-r--  1 www-data www-data 3532 Mar 19 08:56 Gemfile
-rw-r--r--  1 www-data www-data 3856 Mar 19 08:57 Gemfile.lock
-rw-rw-r--  1 www-data www-data  205 Mar  2 11:28 README.rdoc
-rw-rw-r--  1 www-data www-data  275 Mar  2 11:28 Rakefile
drwxrwxr-x 12 www-data www-data 4096 Mar 19 08:58 app
drwxrwxr-x  8 www-data www-data 4096 Mar 19 08:58 config
-rw-rw-r--  1 www-data www-data  160 Mar  2 11:28 config.ru
drwxrwxr-x  4 www-data www-data 4096 Mar 19 08:58 db
drwxrwxr-x  2 www-data www-data 4096 Mar 19 08:58 doc
drwxrwxr-x  8 www-data www-data 4096 Mar 19 08:58 extra
drwxr-xr-x  2 www-data www-data 4096 Mar 19 08:07 files
drwxrwxr-x 14 www-data www-data 4096 Mar 19 08:58 lib
drwxr-xr-x  2 www-data www-data 4096 Mar 19 08:58 log
drwxrwxr-x 30 www-data www-data 4096 Mar 19 08:58 plugins
drwxrwxr-x 14 www-data www-data 4096 Mar 19 08:58 public
-rwxr-xr-x  1 www-data www-data 5141 Mar 19 08:53 redmine
drwxrwxr-x  2 www-data www-data 4096 Mar 19 08:58 script
drwxr-x---  9 www-data www-data 4096 Mar 19 08:58 setup
drwxrwxr-x 16 www-data www-data 4096 Mar 19 08:58 test
drwxrwxrwt 14 www-data www-data 4096 Mar 19 08:58 tmp
drwxrwxr-x  4 www-data www-data 4096 Mar 19 08:58 vendor
[root@redmine /]# sudo -u www-data -H ls redmine/
ls: cannot open directory redmine/: Permission denied
[root@redmine /]# su - www-data
$ cd /
$ ls -l | grep redmine
drwxr-xr-x  34 www-data www-data  4096 Mar 19 08:58 redmine
$ ls redmine/
ls: cannot open directory redmine/: Permission denied
$ cd redmine
-su: 3: cd: can't cd to redmine

The permissions on the directory look good, www-data should be able to read and cd into /redmine.

Comments much appreciated!

Add memcached into container

Memcached is recommended cachestore for redmine.
We can easy install memcached and memcache-client gem. Than run memcached by supervisor and put config/additional_environment.rb with this content:

config.gem 'memcache-client'
config.action_controller.perform_caching  = true
config.cache_classes = true
config.cache_store = :mem_cache_store, "127.0.0.1:1121"

If you like the idea, then I can do it myself later.

Missing the "Advanced section"

In the README, there is a reference to an "Advanced section" for running Redmine in production, but I can't find this section anywhere. Would be nice to know how to run the container in production

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.