入职新浪的第二天老大就让写一个自动搭建redmine的dockerfile,之前是在windows上搭建的redmine,不知道linux里有多少坑。搞了两天写出来了,记下,备忘。
参考:
https://www.cnblogs.com/colder219/p/7158294.html
http://www.jyguagua.com/?p=2026
#设置rails production secret_key
https://www.cnblogs.com/mahong-shaojiu-ruby/p/5707771.html
版本说明:
系统版本 centos7.2
ruby 版本 2.3.3
gem 版本 2.6.12
rails 版本 4.2.6
Dockerfile
FROM hub.weibo.cn/mapi/mapi-base:c73
MAINTAINER zhaoliang3 <zhaoliang3@staff.weibo.com>
LABEL description="redmine based on centos 7 x86_64"
#安装ruby环境需要的依赖,这些依赖很重要
RUN yum install -y *epel*
RUN yum -y install zip unzip libyaml-devel zlib-devel curl-devel openssl-devel httpd-devel apr-devel apr-util-devel gcc ruby-devel gcc-c++ make postgresql-devel ImageMagick-devel sqlite-devel perl-LDAP md_perl perl-Digest-SHA mysql-devel
RUN yum -y update curl libcurl gnupg
#使用gpg获取秘钥
RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
#获取ruby版本管理工具rvm
RUN curl -L https://get.rvm.io | bash -s stable
#添加rvm可执行路径到环境变量PATH
ENV PATH "$PATH:/usr/local/rvm/bin"
#使用rvm安装ruby 2.3.3.
RUN source /etc/profile.d/rvm.sh && /usr/local/rvm/bin/rvm reload && /usr/local/rvm/bin/rvm install 2.3.3
#添加ruby可执行路径到环境变量PATH
RUN rm -rf /usr/bin/ruby && ln -s /usr/local/rvm/rubies/ruby-2.3.3/bin/ruby /usr/bin/ruby
ENV PATH="$PATH:/usr/bin"
#gem是ruby软件包管理工具,类似linux的rpm,移除官方地址添加阿里云的地址
RUN gem source -r https://rubygems.org/ && gem source -a http://mirrors.aliyun.com/rubygems/
# sync redmine code
#bundler会安装gem需要的依赖包,它通过读取目录下含有Gemfile文件里指定的https://rubygems.org来找gem。
RUN gem install bundler
ADD redmine /usr/local/redmine
ENV PATH="$PATH:/usr/local/rvm/rubies/ruby-2.3.3/bin"
#注意 一定要进入到此路径(路径下含有Gemfile)再执行bundle
RUN cd /usr/local/redmine/config && cp database.yml.example database.yml && bundle install
RUN gem install rake -v 12.0.0
RUN gem install rails -v 4.2.6
#进入到此路径执行rake相关命令(路径下含有Rakefile),初始化数据库,并设置为中文。
RUN cd /usr/local/redmine/config && rake db:migrate RAILS_ENV="production" && rake redmine:load_default_data REDMINE_LANG=zh RAILS_ENV="production"
#configuration.yml文件里声明路数据库的连接地址,secrets.yml文件设置了秘钥。
RUN cd /usr/local/redmine/config && cp configuration.yml.example configuration.yml
ADD secrets.yml /usr/local/redmine/config/secrets.yml
ADD entrypoint.sh /sbin/entrypoint.sh
RUN chmod a+x /sbin/entrypoint.sh
#使用supervisord来管理redmine程序
ADD supervisord.conf /etc/supervisord.conf
EXPOSE 3000
#容器启动的时候通过entrypoint.sh文件创建文件夹,新建文件,执行命令。
ENTRYPOINT ["/sbin/entrypoint.sh"]
entrypoint.sh
#!/bin/sh
mkdir -p /data1/redmine.weibo.cn/logs/supervisord/
/usr/bin/supervisord -c /etc/supervisord.conf
supervisord.conf
[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
chmod=0700 ; socket file mode (default 0700)
[supervisord]
logfile=/data1/redmine.weibo.cn/logs/supervisord/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB
logfile_backup=10
loglevel=info
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=true ; (Start in foreground if true; default false)
minfds=1024 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200)
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
[program:redmine]
priority=88
directory=/tmp
command=/usr/local/rvm/rubies/ruby-2.3.3/bin/ruby /usr/local/redmine/bin/rails server webrick -b 0.0.0.0 -p 3000 -e production
user=root
autostart=true
autorestart=true
startsecs=2
stdout_logfile=/data1/redmine.weibo.cn/logs/supervisord/%(program_name)s.log
stderr_logfile=/data1/redmine.weibo.cn/logs/supervisord/%(program_name)s.log
secrets.yml (redmine/config/下)
production:
secret_key_base: 8250cc770ddbbac5f172f2148fe6b377a1a477c0b8236ba07255deda90b2c7ebaa694d0bde9ea637dae0c1b4c4945fe7d4dcaf41bd64f4567c266c103e0f2987
key生成方式:
rake secret RAILS_ENV=production
database.yml
production:
adapter: mysql2
database: redmine
host: 10.13.3.175
username: root
port: 53306
password: "redmine"
encoding: utf8
镜像构建命令:
docker build -t redmine:v1 .
容器启动命令:
docker run -itd -p 53000:3000 --name redmine redmine:v1
网友评论