之前用了很多年的redmine,虽然自己完全不懂Ruby,Rails,Gems,Bundle但挂一个网站只有指令细致就应该没啥大问题,挂的Redmine有的是给工作上架设用的、有的是自己试着玩的。最近有段时间没有碰它了,前两天偶尔上官网看了一下居然发现已经有5.0.x的版本了,不觉又开始手痒觉得应该尝试一下,手头还有一个很久以前的挂过的网站的备份,所以看看是不是还能用一下。现在已经不愿意从代码级别直接安装了,因为有很多Docker和VM的镜像能减少很多麻烦,Bitnami就有Redmine的Dockers,K8s和VMware/Virtualbox的OVA镜像,可以直接用镜像来安装会简单很多,我家里有5105的ESXI的环境所以说直接上虚拟机会更快捷,好吧,这就开干!
下载了ova镜像之后,直接在我的N5105的小主机上打开ESXi的界面,然后建立虚拟机,导入镜像,设置参数,一切都非常简单哈,然后虚机就挂起来了,之后发现SSH没有开所以只能从这个虚机的本地console登进去,看了一下登陆的页面上有SSH和网站的用户名和密码,先上网站看了一下,只有一个叫user的管理员账号,一切看起来很正常,OK,那回到console的登录界面登入改密码,改完密码之后发现local console的这个界面用起来很不爽,所以直接启用SSH:
sudo rm -f /etc/ssh/sshd_not_to_be_run
sudo systemctl enable ssh
sudo systemctl start ssh
这里我犯了一个错误,因为我习惯使用root账号挂证书登录的方式,所以直接用证书以root账号登录,这个习惯让我吃了很大的苦头,后面会详细叙述。
用WindTerm登陆SSH之后,然后开始升级,艾玛!非常慢,必须换到国内的源。虚机用的Debian 11所以挂上了阿里云的这个国内源之后升级就非常快了。升级Debian之后就是导入把老网站的内容,虽然导进来老网站是基于4.0.x的跟现在的5.0.x只差一个大版本,但是其实两个版本的的开发时间差了三年多,加上Bitnami在打包的时候加了很多自己的料,包括换了很多默认的Web服务器(Nginx换成Apache)和数据库服务器(Mysql换成MariaDB),这两个新换的我也算是用过,但是手还是比较生,所以不怎么习惯,只是没有办法,唉,用别人的东西就得去忍啊。
老的网站我就备份了这个数据库和这个附件目录,没有备份plugin目录是因为我想如果是大版本升级plugin经常会有兼容性问题,如果备份了plugin再导入会发现安装的过程估计会有痛苦的过程,这点后面的这些大坑也验证了我这个想法,所以我完全没有备份plugin,但是这也带来一个问题就是之前网站上用的那些plugin和皮肤就必须重新去找了,下次我会备份plugin的目录但是不备份plugin的内容,这样就能知道之前的网站的plugin和皮肤来帮助保持这个网站的外观和功能的一致性。
导入的过程很顺利,数据库导入一次性完成不报错:
mysql -u root -p -D bitnami_redmine < bitnami_redmine.sql
嘿嘿,运气不错,文件的拷贝也很简单,导入之后就重新启动了一下Apache,登录页面正常,但登陆后有一部分功能已经不能用了,直接报错,这个其实很正常从4.0到5.0数据库肯定有很多改动,直接导入肯定不行,这个时候就需要升级,Redmine的升级的还是很简单,直接啊运行了几条升级命令
bundle update
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
sudo /opt/bitnami/ctlscript.sh restart apache
然后就搞定了,再进去一看,嗯,以前熟悉的网站又回来了,虽然还没有安装皮肤但是所有的功能都已经工作了,没想到这么顺利,很高兴,但其实大坑在后面。
虽然是主要的功能都OK,但是还是要把之前用过的皮肤还有plugin重新倒腾回来,因为之前没有备份所以只能去plugin的目录里面去找一些觉得不错的安装配置一下,但是这个想法让我在之后的三天里面吃尽了苦头,这里来慢慢来说到底都干了些什么吧。
首先是找了一个叫additionals的plugin,看着说的挺好的,就用Git拉代码到了plugin目录里,然后按照文档开始安装:
cd /bitnami
git clone -b stable https://github.com/AlphaNodes/additionals.git plugins/additionals
bundle config set --local without 'development test'
bundle install
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
前三步都没问题,第四步噩梦开始后给我报了警,说如果使用root来跑bundle那么会把所有的之前用用户跑的安装的gems的权限都给破坏掉,我吓了一跳,赶紧cancel,然后切回bitnami账号登录,然后跑了第四步,但是报了一大堆的错,我看屏幕的信息先是说这个软件要求的是bundler 2.4.13,但目前系统里的是bundler 2.4.19,所以要去拉这个bundler 2.4.13,但是对某个目录的权限不够,所以只能用2.4.19跑,跑的结果就是所有新加的gems都安装不上去,说这个目录没有写权限删不掉,我就纳闷了,没写权限?那就加写权限吧,但突然转念一想,不如用root先安装过去,然后再回来就发现所有的gems都有了,开始安装是虽然不会有任何权限的问题,但是带来的问题是root安装和bitnami用户安装的权限不一致性可能会有问题,唉,不想那么多,狠心装吧。
root安装了之后使用bitnami账号试图去重跑第四步,还是不行,给了所有需要权限的目录的权限
sudo chmod o+w -R /opt/bitnami/ruby/lib/ruby/gems/3.0.0/plugins
sudo chmod o+wx -R /opt/bitnami/ruby/lib/ruby/gems/3.0.0/gems/
但是依然报错,说目录权限太大,什么world wide writable 的权限也不行,在网上找了一大圈,貌似都不行,来回折腾了很久,发现这个包括目录权限有各种各样的问题,就跟个套娃一样,你试图解决了一个问题时候第二个问题就冒出来了,第二个问题你还没搞定,第三个问题又跳了出来,总而言之是没完没了,唉,时间已经晚了,只能删掉虚拟机,明天重新来过。
第二天晚上回家,继续干,前面的步骤跟第一天的一样,搞定了redmine的正常运行之后,拉入plugin,开始bundle install,但这次严格不用root来捣乱了,一直用bitnami往下跑,而且这次也不用那么粗暴的目录权限了,直接把文件和目录的owner设成bitnami组,然后给组权限:
sudo chown :bitnami log/production.log
sudo chmod g+w log/production.log
通过一顿摸索,发现也许这个bundler 2.4.13是个关键,但怎么都装不上,后来看网上一个大哥说用本地安装的方式:
gem install bundler -v 2.4.13 --user-install
哎,这次居然成功了,然后用bundle install开始跑起来,貌似所有的gems组件安装都正常了,看见安装成功我长出了一口气,终于装上了,好吧,去网站看看效果吧,到网站一看,傻眼了,直接报错,跑去apache的log里一看,说Fusion Passenger的服务器找不到一大堆的gems组件,所以没办法启动,我靠,看来这个--user-install不怎么靠谱啊,好吧,既然是apache拉不起来application server,那肯定是application server的问题,那就钉死这个passenger server吧,不过天色已晚,只能明天再战。
第三天晚上要集中解决这个passenger的问题,passenge 是Apache的一个模块,那么配置文件肯定在Apache的conf里,跑去一找,果真有个passenge.conf的文件:
nano /opt/bitnami/apache/conf/bitnami/passenger.conf
里面有三行貌似是关键:
LoadModule passenger_module /opt/bitnami/ruby/lib/ruby/gems/3.0.0/gems/passenger-6.0.18/buildout/apache2/mod_passenger.so
PassengerRoot /opt/bitnami/ruby/lib/ruby/gems/3.0.0/gems/passenger-6.0.18
PassengerRuby /opt/bitnami/ruby/bin/ruby
之前用bundle install安装gems的时候这个passenger总报错,所以版本我记得很清楚,是6.0.17,而这个配置文件里的版本是一个预装的6.0.18,这会不会是问题所在呢,其实用--user-install的选项的时候在/home/bitnami/.local/share/gem/ruby/3.0.0/gems/才是bundle install真正安装的gems所在,是不是应该用这个呢,但这个目录里的gems不全,老的已经存在的还在/opt/bitnami/ruby/lib/ruby/gems/3.0.0/gems/里,没办法只能先试试了。
仔细看了一下/home/bitnami/.local/share/gem/ruby/3.0.0/gems/里的passenger,发现这个6.0.17的版本没有buildout目录,没有目录就没有so文件,Apache也用不了啊,找到目录下的config文件,居然有编译指令,谢天谢地:
#!/bin/sh
echo "This is not how you install Phusion Passenger! Please run one of:"
echo
echo " ./bin/passenger-install-apache2-module"
echo " ./bin/passenger-install-nginx-module"
echo
echo "When unsure, please consult the manual (see 'doc' directory)."
echo
echo "*** ABORTED"
exit 1
直接使用这个Apache的编译安装指令:
./bin/passenger-install-apache2-module
然后告诉我缺这个缺哪个的,没问题,都给我装上:
sudo apt install ruby-dev
然后编译成功了,看到buildout里的so文件,好吧这次指过来吧,改了passenger.conf文件之后重启Apache,但是发现这样依然不行,难道是这种混合的模式不行吗?
在网上漫无边际的找Apache调用passenger失败的原因的时候,发现很多人说解决ruby的gems问题可以用一下RVM这个工具,这个工具里面有很多功能能够保证多版本的ruby,rails,gems的工作,没有头绪之下只能抱着试试的想法开始安装RVM:
sudo curl -L https://get.rvm.io | bash -s stable --ruby
RVM的安装还缺很多组件,包括GPG的key之类的,唉,继续安装吧,缺啥装啥呗:
sudo apt install dirmngr
sudo apt install -y gpg-agent
gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
最后终于把RVM给装上了,不过最后完成的界面让我干一堆事,我也没理,重启系统后就继续装bundle 2.4.13,然后用bundle install重新跑,跑完之后我用下面这个命令看看我的passenger的配置对不对:
passenger-config validate-install
这时候我才发现这个RVM很霸道啊,它也不用之前的那些安装过的ruby,直接在~/.rvm下面重新整了一套ruby,gems,而且修改配置让Apache直接指向它的那套东西里的passenger的so,问题是那个目录下面依然没有buildout目录和so文件,不过这次已经很熟悉了,轻车熟路的编译好so文件,然后把Apache的passenger.conf改成如下的配置:
LoadModule passenger_module /home/bitnami/.rvm/gems/ruby-3.0.0/gems/passenger-6.0.17/buildout/apache2/mod_passenger.so
PassengerRoot /home/bitnami/.rvm/gems/ruby-3.0.0/gems/passenger-6.0.17
PassengerRuby /home/bitnami/.rvm/gems/ruby-3.0.0/wrappers/ruby
保存,重启Apache,嘿嘿,没报错,上网站一看,终于成功了!!!搞了三天啊,真不容易,虽然上面的那个命令说系统里有N个passenger会将来产生问题,但不是现在没问题吗,就这样吧,累死我也。。
这次折腾redmine是真正的对Ruby这个语言,Rails这个框架,Gems和Bundler这些工具以及passenger这个应用服务器有了个了解,用了这么多年的redmine第一次了解这些是不是有点逊,嘿嘿,这就对了,精力有限只能关注有用的。。
我觉得如果再不学习GPT之类的AI是不是就掉档次了,怎么也应该攒个机器学习一下吧,如果真能攒到机器,那么后面的博客估计都要紧盯各种炼丹推理LLM啊极度烧的topics了。。
文章评论