JOO 2020-04-26
Redmine是基于ruby语言的开源版的 jira +?Confluence,主要适用于中小团队。目前因内部需要做问题跟踪,新装了一套,这里记录下安装步骤。安装环境要求:
Redmine version | Supported Ruby versions | Rails version used |
---|---|---|
4.1 (upcoming) | Ruby 2.3, 2.4, 2.5, 2.6 | Rails 5.2 |
4.0 | Ruby 2.2 (2.2.2 and later), 2.3, 2.4, 2.5, 2.6 | Rails 5.2 |
3.4 | Ruby 1.9.3, 2.0.0, 2.1, 2.2, 2.3, 2.4 | Rails 4.2 |
附一下我的安装环境:
Redmine version | Ruby versions | Rails version | OS version |
---|---|---|---|
4.0.4 | 2.6.3 | 5.2 | CentOS7.4 |
关于是否使用官方推荐的第三方一键部署:个人不建议使用,一键部署无法自定义目录规划,且一键安装的程序目录十分混乱不利于管理,也不利于学习。部署前,建议参考官方文档先安装一次
# ruby下载安装 wget https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.3.tar.gz -P /usr/local/src/ tar xzvf ruby-2.6.3.tar.gz cd ruby-2.6.3 ./configure --prefix=/usr/local/ruby make && make install # 修改环境变量 vim /etc/profile.d/ruby.sh export export PATH=/usr/local/ruby/bin:$PATH source /etc/profile # gem安装 wget https://rubygems.org/rubygems/rubygems-3.0.4.zip -P /usr/local/src/ unzip rubygems-3.0.4.zip cd rubygems-* ruby setup.rb
修改ruby源为国内阿里源:<https://gems.ruby-china.com/>
替换新源 gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ 检查源 gem sources -l https://gems.ruby-china.com # 确保只有 gems.ruby-china.com 关于Bundler替换国内原: bundle config mirror.https://rubygems.org https://gems.ruby-china.com
rails框架可以使用gem install rails -v=5.2.3 进行安装,也可以通过bundle自已查找依赖进行安装 。先说安装 bundle,如下:
gem install rake gem install bundle
这里使用的mysql,条件允许建议使用RDS,先使用如下命令安装:
CREATE DATABASE redmine CHARACTER SET utf8; CREATE USER ‘redmine‘@‘localhost‘ IDENTIFIED BY ‘mypassword‘; GRANT ALL PRIVILEGES ON redmine.* TO ‘redmine‘@‘localhost‘; ## RDS记得开启白名单以及涉及到不同专有网络需要放行安全组
wget http://www.redmine.org/releases/redmine-4.0.4.tar.gz -P /data1/ tar zxvf redmine-4.0.4.tar.gz mv redmine-4.0.4 redmine ## 安装后的结构参考,该结构更易于扩展 [ data1]# tree -L 3 redmine/ redmine/ ├── current -> release/20200413190500 └── release └── 20200413190500 ├── app ├── appveyor.yml ├── bin ...
修改数据库配置,Copy config/database.yml.example to config/database.yml ,修改database.yml的内容如下:
production: adapter: mysql2 database: redmine host: xxx/rds地址 username: redmine password: "my_password"
我这里使用的mysql 数据库,如果使用其他数据库操作类似。
依赖包有两种,一种是OS系统依赖包,另一个是ruby需要依赖的包。先说前者,主要是ImageMagick相关包,一条命令搞定:
yum install ImageMagick ImageMagick-devel
后者依赖包,会比较多,安装方式有两种,一种是出现个使用gem指定包名称和版本号装一个,另一种是使用bundle一键搞定。先说前者如何知道依赖什么:
[ config]# rake db:migrate RAILS_ENV="production" (in /opt/redmine) Could not find gem ‘rails (= 5.2.3)‘ in any of the gem sources listed in your Gemfile. Run `bundle install` to install missing gems.
进行数据库表结构创建操作的时候,如果缺少相关依赖会报错缺少的包名称和版本号。按图索骥就可以了:
gem install rails -v=5.2.3 gem install rouge -v=3.3.0 gem install request_store -v=1.0.5 gem install mysql2 -v ‘0.5.2‘
依赖会有几十外,我这里只写了几个,我是没这个耐心,这里介绍下如何使用bundle进行安装。bundle默认不让使用root安装,需要创建一个普通用户,就是启动redmine进程的用户www吧。对该用户需要配置sudo权限,因为其中一些操作是需要使用root身份的。
需要注意,切换用户后,默认使用的源还是官方源,这个是在用户系统目前下配置的,所以切换为www用户后,重复上面切换源的步骤。
进入config目录,执行如下操作
bundle install --without development test //只能用普通用户执行,需要给该用户sudo权限
不一会儿所有的依赖就安装好了,如果有系统依赖包不存在时,会有错误提示。
使用以下命令可生成新的 session 密钥:
bundle exec rake generate_secret_token
使用如下指令进行表结构操作:
RAILS_ENV=production bundle exec rake db:migrate
该操作和上面rake db检查包依赖的指令是一样的。
使用以下命令导入初始数据,包括默认的问题类型、工作流程等:
RAILS_ENV=production REDMINE_LANG=zh bundle exec rake redmine:load_default_data
期间遇到如下报错:
Expected to find a manifest file in `app/assets/config/manifest.js
解决方法:
vim /app/assets/config/manifest.js ##若目录不存在则创建 //= link_tree ../images //= link_directory ../javascripts .js //= link_directory ../stylesheets .css
默认使用如下指令启服务,默认监听端口3000:
bundle exec rails server webrick -e production -b 0.0.0.0 ## 通过nginx启动就无需这么启动,推荐使用nginx启动
默认的登录名和密码都是 admin 。登陆第一次会要求修改用户名和密码。
参考: <https://www.phusionpassenger.com/library/install/nginx/install/oss/el7/>
请先配置好阿里源的Base及Epel源
yum install -y pygpgme curl curl --fail -sSLo /etc/yum.repos.d/passenger.repo https://oss-binaries.phusionpassenger.com/yum/definitions/el-passenger.repo yum clean all && yum makecache yum install -y nginx passenger || sudo yum-config-manager --enable cr && sudo yum install -y nginx passenger
执行完毕后,会自动安装一个nginx,配置通过passenger启动访问redmine
vim redmine.mgt.tarscorp.com.conf passenger_root /usr/share/ruby/vendor_ruby/phusion_passenger/locations.ini; passenger_ruby /usr/local/ruby/bin/ruby; passenger_instance_registry_dir /var/run/passenger-instreg; server { listen 80; server_name redmine.mgt.tarscorp.com; # redmine.com; root /data1/redmine/current/public; passenger_enabled on; client_max_body_size 20m; # Max attachemnt size } ## 做一个简单的安全优化, server_tokens off; ##隐藏nginx具体版本 allow 10.254.0.0/16; ##限定访问来源为办公室网络或open***访问 deny all;
结合memberOf实现openLDAP认证
名称:自定义 主机/端口:按实际填写 账号密码:通常公司会创建一个专门用于查询认证的用户 账号:uid=usr_proxy,ou=Service,dc=tars,dc=com 密码:xxx Base DN: dc=tars,dc=com 过滤器: memberOf=cn=Users,ou=Redmine,ou=Groups,dc=tars,dc=com 超时选填,用户即时生成打钩 属性栏根据实际情况填写,必填的是登录名属性. 登录名属性:uid 名字属性:gecos 姓氏属性:givenName 邮件属性:mail
邮件通知是最基本的方式,也可以实现钉钉及企业微信告警
邮件报警:
vim configuration.yml production: email_delivery: delivery_method: :smtp smtp_settings: enable_starttls_auto: false address: ‘smtp.tarsplus.com‘ port: 25 authentication: :login user_name: ‘‘ password: ‘wdMgKPuCZ8vcvyNd‘ vim settings.yml host_name: default: redmine.mgt.tarscorp.com #解决收到邮件内嵌链接直达为localhost问题 ## 这里按实际情况填写,redmine web页面也配置一下 管理--> 配置 --> 邮件通知 发件人地址要和user_name对应 ## 云主机记得申请主机的25发邮件权限,也建议在集群中配置SMTP的网关来实现,只需要nginx做个四层代理转发给外网的smtp服务器即可,后续集群任何项目使用smtp只需要走nginx就好了,也只需要解封一台ECS即可,易于管理。
钉钉通知:基于webhook,推荐我实践过的两个项目吧
项目一:https://gitee.com/DexterPoker/redmine2dingding ## 只适用于钉钉,但是实践需要懂一点java包。但是钉钉截至目前认证方式改版了所以corpSecret,agentId这块有变化,需要你们Java同事帮你改一下,还有原作者说的可以在群上@同事的效果,依然需要你同事帮你看下,因为可能会有坑,时间原因也没继续往下走了,不过可以通过singlePush: 1 企业通知的形式发送给指定人 项目二:https://www.redmineplugins.cn/projects/1/plugin_blocks/70 ## 支持钉钉和企业微信,最下方有案例参考我简单记录分享的,兴许能帮你解惑。最终钉钉是通过企业通知的形式发送给指定人
这里安装上参考了运维之路 ,在此感谢原作者,点击直达。另外本文做了一些自己的心得分享以及部署问题解决
Redmine 适合中小团队, 在选型上个人不推荐使用该项目, 虽然开源,但运维难度较高, 单说安装都会难道一批人。redmine 强大的一方面是插件非常丰富,但探索的路上,你会发现插件的质量参差不齐,希望你在看到这篇文章能使你少走弯路。这里推荐个插件网站:
插件网站:
<https://www.redmineplugins.cn/projects/redmineplugins/plugin_blocks> ##国人收集维护,相对友好
https://www.redmineup.com/ ## 增值服务插件