1. 安装docker
# sudo yum install docker -y
2.设置docker服务自启动,并启动服务
# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
# systemctl start docker
3. 下载官方redmine镜像
# docker pull redmine
注意:如果下载过慢,可以采用阿里云的仓库地址:
# docker pull r6w9c7qa.mirror.aliyuncs.com/library/redmine
参考:http://blog.csdn.net/hknaruto/article/details/52943835
4. 查看docker网桥地址
# ifconfig docker0
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::42:87ff:fe4f:a3e3 prefixlen 64 scopeid 0x20<link>
ether 02:42:87:4f:a3:e3 txqueuelen 0 (Ethernet)
RX packets 8 bytes 544 (544.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 29 bytes 3891 (3.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
5. 创建mysql数据库redmine,并建立redmine账号
# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.13 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database redmine;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on redmine.* to redmine@'172.17.%' identified by 'Redmine.1' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
6. 服务方式启动一个redmine docker 容器
docker run -d --name=redmine --restart=always -p 3000:3000 -e REDMINE_DB_MYSQL=172.17.0.1 -e REDMINE_DB_PORT=3306 -e REDMINE_DB_USERNAME=redmine -e REDMINE_DB_PASSWORD=Redmine.1 -e REDMINE_DB_DATABASE=redmine -e REDMINE_DB_ENCODING=utf8 redmine
7. 登陆到redmine:浏览器输入http://localhost:3000/login
账号:admin
密码:admin
搭建完成。
说明:
1. 本方法采用环境变量方式传递了数据库密码,可以通过docker inspect方式看到。存在一定安全隐患。
2. 环境变量名词来源参考redmine容器中的/docker-entrypoint.sh, 内容如下:
root@9fa60647c613:/# cat /docker-entrypoint.sh
#!/bin/bash
set -e
# usage: file_env VAR [DEFAULT]
# ie: file_env 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
file_env() {
local var="$1"
local fileVar="${var}_FILE"
local def="${2:-}"
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
exit 1
fi
local val="$def"
if [ "${!var:-}" ]; then
val="${!var}"
elif [ "${!fileVar:-}" ]; then
val="$(< "${!fileVar}")"
fi
export "$var"="$val"
unset "$fileVar"
}
case "$1" in
rails|rake|passenger)
if [ ! -f './config/database.yml' ]; then
file_env 'REDMINE_DB_MYSQL'
file_env 'REDMINE_DB_POSTGRES'
file_env 'REDMINE_DB_SQLSERVER'
if [ "$MYSQL_PORT_3306_TCP" ] && [ -z "$REDMINE_DB_MYSQL" ]; then
export REDMINE_DB_MYSQL='mysql'
elif [ "$POSTGRES_PORT_5432_TCP" ] && [ -z "$REDMINE_DB_POSTGRES" ]; then
export REDMINE_DB_POSTGRES='postgres'
fi
if [ "$REDMINE_DB_MYSQL" ]; then
adapter='mysql2'
host="$REDMINE_DB_MYSQL"
file_env 'REDMINE_DB_PORT' '3306'
file_env 'REDMINE_DB_USERNAME' "${MYSQL_ENV_MYSQL_USER:-root}"
file_env 'REDMINE_DB_PASSWORD' "${MYSQL_ENV_MYSQL_PASSWORD:-${MYSQL_ENV_MYSQL_ROOT_PASSWORD:-}}"
file_env 'REDMINE_DB_DATABASE' "${MYSQL_ENV_MYSQL_DATABASE:-${MYSQL_ENV_MYSQL_USER:-redmine}}"
file_env 'REDMINE_DB_ENCODING' ''
elif [ "$REDMINE_DB_POSTGRES" ]; then
adapter='postgresql'
host="$REDMINE_DB_POSTGRES"
file_env 'REDMINE_DB_PORT' '5432'
file_env 'REDMINE_DB_USERNAME' "${POSTGRES_ENV_POSTGRES_USER:-postgres}"
file_env 'REDMINE_DB_PASSWORD' "${POSTGRES_ENV_POSTGRES_PASSWORD}"
file_env 'REDMINE_DB_DATABASE' "${POSTGRES_ENV_POSTGRES_DB:-${REDMINE_DB_USERNAME:-}}"
file_env 'REDMINE_DB_ENCODING' 'utf8'
elif [ "$REDMINE_DB_SQLSERVER" ]; then
adapter='sqlserver'
host="$REDMINE_DB_SQLSERVER"
file_env 'REDMINE_DB_PORT' '1433'
file_env 'REDMINE_DB_USERNAME' ''
file_env 'REDMINE_DB_PASSWORD' ''
file_env 'REDMINE_DB_DATABASE' ''
file_env 'REDMINE_DB_ENCODING' ''
else
echo >&2
echo >&2 'warning: missing REDMINE_DB_MYSQL, REDMINE_DB_POSTGRES, or REDMINE_DB_SQLSERVER environment variables'
echo >&2
echo >&2 '*** Using sqlite3 as fallback. ***'
echo >&2
adapter='sqlite3'
host='localhost'
file_env 'REDMINE_DB_PORT' ''
file_env 'REDMINE_DB_USERNAME' 'redmine'
file_env 'REDMINE_DB_PASSWORD' ''
file_env 'REDMINE_DB_DATABASE' 'sqlite/redmine.db'
file_env 'REDMINE_DB_ENCODING' 'utf8'
mkdir -p "$(dirname "$REDMINE_DB_DATABASE")"
chown -R redmine:redmine "$(dirname "$REDMINE_DB_DATABASE")"
fi
REDMINE_DB_ADAPTER="$adapter"
REDMINE_DB_HOST="$host"
echo "$RAILS_ENV:" > config/database.yml
for var in \
adapter \
host \
port \
username \
password \
database \
encoding \
; do
env="REDMINE_DB_${var^^}"
val="${!env}"
[ -n "$val" ] || continue
echo " $var: \"$val\"" >> config/database.yml
done
else
# parse the database config to get the database adapter name
# so we can use the right Gemfile.lock
adapter="$(
ruby -e "
require 'yaml'
conf = YAML.load_file('./config/database.yml')
puts conf['$RAILS_ENV']['adapter']
"
)"
fi
# ensure the right database adapter is active in the Gemfile.lock
cp "Gemfile.lock.${adapter}" Gemfile.lock
# install additional gems for Gemfile.local and plugins
bundle check || bundle install --without development test
if [ ! -s config/secrets.yml ]; then
file_env 'REDMINE_SECRET_KEY_BASE'
if [ "$REDMINE_SECRET_KEY_BASE" ]; then
cat > 'config/secrets.yml' <<-YML
$RAILS_ENV:
secret_key_base: "$REDMINE_SECRET_KEY_BASE"
YML
elif [ ! -f /usr/src/redmine/config/initializers/secret_token.rb ]; then
rake generate_secret_token
fi
fi
if [ "$1" != 'rake' -a -z "$REDMINE_NO_DB_MIGRATE" ]; then
gosu redmine rake db:migrate
fi
# https://www.redmine.org/projects/redmine/wiki/RedmineInstall#Step-8-File-system-permissions
chown -R redmine:redmine files log public/plugin_assets
# directories 755, files 644:
chmod -R ugo-x,u+rwX,go+rX,go-w files log tmp public/plugin_assets
if [ "$1" != 'rake' -a -n "$REDMINE_PLUGINS_MIGRATE" ]; then
gosu redmine rake redmine:plugins:migrate
fi
# remove PID file to enable restarting the container
rm -f /usr/src/redmine/tmp/pids/server.pid
if [ "$1" = 'passenger' ]; then
# Don't fear the reaper.
set -- tini -- "$@"
fi
set -- gosu redmine "$@"
;;
esac
exec "$@"