dmli的博客小屋

专注IT运维

redmine迁移升级简记

刚给公司运行的redmine做了升级,并迁移到性能更强的服务器,花了不少精力,也有很多收获,在这里记录一下。

一、目标

redmine当前版本为3.2.2,计划升级到最新版本3.4.6,并迁移到另外一台服新服务器。

二、升级路线

按一般思路,升级顺序应该是:

1、在新服务器安装redmine-3.2.2;

2、在原服务器对redmine进行数据备份,并在新服务器还原备份;

3、在新服务器将redmine升级到3.4.6。

但经过实测,第2步其实可以省略,直接在新服务对redmine进行升级和迁移。

三、环境准备

redmine使用ruby语言编写,需要运行在ruby on rails环境,所以第一步先安装ruby环境。

image.png

第一次接触ruby,装环境就蒙了半天,各种缩写都不知道啥意思,装完一遍后就清晰很多了:

1、rails是用ruby语言写的一个框架。

2、使用RVM(Ruby Version Manager)安装ruby,因为yum安装的版本太旧了。

3、gem是ruby的包管理工具,类似于centos的yum。

4、bundler是gem的包管理工具,可以维护多个gem版本及依赖。

5、redmine默认使用webrick作为web server,效率不高,可以替换为nginx + passenger。

6、按官网文档,数据库选用mysql-5.5版本,不支持更高版本以及mariadb。

四、安装过程

安装rvm

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
\curl -sSL https://get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh

安装ruby

rvm list
rvm install 2.4.4
rvm use 2.4.4 --default
ruby -v
gem -v

安装rails

首先要替换gem源为ruby-china,因为默认源被墙了……

gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
gem sources -l
gem install rails -v 4.2.5
rails -v

安装bundler

gem install bundler
bundle config mirror.https://rubygems.org https://gems.ruby-china.com

安装数据库及依赖

因为Centos7安装mysql后,不能再使用yum安装一些lib库,会提示mariadb和mysql冲突,所以我们需在把mysql的一些依赖库也装上,官网都有下载:

rpm -ivh MySQL-client-5.5.61-1.el7.x86_64.rpm
rpm -ivh MySQL-server-5.5.61-1.el7.x86_64.rpm
rpm -ivh MySQL-devel-5.5.61-1.el7.x86_64.rpm
rpm -ivh MySQL-shared-5.5.61-1.el7.x86_64.rpm
systemctl start mysql
chkconfig mysql on
mysql_secure_installation

安装redmine-3.4.6

wget https://www.redmine.org/projects/redmine/wiki/Download
tar -zxf redmine-3.4.6.tar.gz -C /usr/local 
cd /usr/local/redmine-3.4.6/config && copy database.yml.example database.yml
vim database.yml

在production下填上数据的连接信息,

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "xxxxxx"
  encoding: utf8

安装依赖,并导入redmine-3.2.2的数据库备份

yum install ImageMagick-devel libcurl-devel zlib-devel pcre-devel -y
mysql -uroot -p redmine < redmine-3.2.2_dump.sql

安装插件

如果之前有安装插件的话,需要将原来的plugins目录下的插件全部拷贝到新服务器,但很多插件会有版本兼容性问题,最好能重新下载跟当前redmine匹配的插件版本。

拷贝文件附件

将原redmine根目录下的files文件夹拷贝至新redmine的根目录下,下面的操作全部是在redmine程序根目录执行:

安装redmine-3.4.6工程依赖包

cd /usr/local/redmine-3.4.6
bundle install --without development test

生成初始化数据,会提示选择语言,选择“zh”即可。

RAILS_ENV=production bundle exec rake redmine:load_default_data

数据库表结构升级,经过测试需要先删除一条索引,如果其他版本升级报其他错误,则按报错提示解决:

mysql> DROP INDEX index_issues_on_parent_id ON issues;
bundle exec rake db:migrate RAILS_ENV=production
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
bundle exec rake tmp:cache:clear RAILS_ENV=production
bundle exec rake generate_secret_token

安装nginx + passenager

这里直接使用gem进行安装,比自行编译passenager模块安装方便很多,我按提示选择安装到/usr/local/nginx目录

gem install passenger
passenger-install-nginx-module

修改nginx.conf配置文件

user  nginx;
worker_processes  auto;

events {
    worker_connections  65535;
    use epoll;
}


http {
    passenger_root /usr/local/rvm/gems/ruby-2.4.4/gems/passenger-5.3.5;
    passenger_ruby /usr/local/rvm/gems/ruby-2.4.4/wrappers/ruby;

    include       mime.types;
    default_type  application/octet-stream;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    server_tokens off;
    gzip on;
    gzip_comp_level 2;
    gzip_types text/css text/xml application/javascript;
    client_max_body_size 20m;

    server {
        listen 80 default_server;
        server_name _;

        root /usr/local/redmine-3.4.6/plublic;
        passenger_enabled on;
        access_log off;
    }
}

添加nginx开机启动:

vim /lib/systemd/system/nginx.service

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
$MAINPID=`cat /usr/local/nginx/logs/nginx.pid`
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
systemctl start nginx
systemctl enable nginx

修改redmine文件夹属主属组

chown -R nginx:nginx /usr/local/redmine-3.4.6

五、一些优化

1、ruby、rails和mysql选用redmine支持的最高版本;

2、配置ruby环境变量

vim /etc/profile
RUBY_GC_HEAP_INIT_SLOTS=1800000
RUBY_HEAP_FREE_MIN=18000
RUBY_GC_MALLOC_LIMIT=120000000
RUBY_HEAP_SLOTS_INCREMENT=144000
RUBY_HEAP_SLOTS_GROWTH_FACTOR=1
export RUBY_GC_HEAP_INIT_SLOTS RUBY_HEAP_FREE_MIN RUBY_GC_MALLOC_LIMIT RUBY_HEAP_SLOTS_INCREMENT RUBY_HEAP_SLOTS_GROWTH_FACTOR

3、优化mysql配置参数

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
innodb_buffer_pool_size = 20G
max_connections = 1000
wait_timeout = 1800
thread_cache_size = 64
query_cache_size = 8M
join_buffer_size = 128K
tmp_table_size = 16M
max_heap_table_size = 16M
thread_cache_size = 4
table_open_cache = 800
innodb_buffer_pool_size = 371M
bulk_insert_buffer_size = 64M

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

4、配置redmine邮件异步发送

vim /usr/local/redmine-3.4.6/config/configuration.yml
delivery_method: :async_smtp
async_smtp_settings:

5、修改redmine日志等级,默认为debug,修改为warn,添加一行配置:

/usr/local/redmine-3.4.6/config/environments/production.rb
config.log_level = :warn

6、使用nginx + passenager替代原生的webrick服务器,原启动脚本为

cd /usr/local/redmine-3.4.6 && nohup bundle exec rails server webrick -e production -b 0.0.0.0 > /dev/null 2>&1 &

那么使用nginx后,只需要启动nginx即可访问到redmine了。

六、一些坑

1、.yml和.rb配置文件严格使用空格进行缩进,很多时候改配置文件不生效就是缩进的问题。

2、运行时页面报错“translation missing”,这时可以先查主程序和插件有没有语言配置文件:

/usr/local/redmine-3.4.6/config/locales/zh.yml
/usr/local/redmine-3.4.6/plugins/xxx_plugins/config/locales/zh.yml

再看配置文件里有没有特定单词的翻译。如果插件缺少zh.yml,一个便捷的处理方式是直接复制en.yml为zh.yml,保证程序正常运行。


发表评论:

Copyright© dmli 2015-2019