Discourse升级记录

上一周把我们的论坛从Discourse从0.9.6.3升级到了最新的0.9.9.16版本,中间跨越的版本比较多,而且官方现在宣布只支持以Docker方式,由于之前没接触过Docker,弄了好一阵子,在国外的论坛操着不太熟练的英语发了好多无知的帖子(国外的技术论坛氛围普遍较好,如果你不先研究下自己的问题就上来一通乱问是会被强烈BS的,所以基本上我发帖都会先写上My apologies云云),好在老外都非常喜爱菜鸟,也基本是有问必答,几经折腾,终于算弄好了。现记录如下,给有用的乡亲们,大家少走点弯路,留点时间休闲休息,便是我这篇文章的意义了。

先开个头吧,太晚了,先睡觉去了。博主还有一份不怎么体面的工作用以维持生计,太晚睡没精神。

<—————-华丽的分割线———————>
以下按步骤叙述:
1.原有论坛的数据备份
按照官方给出的方案,需要将非docker方式安装的Discourse先升级到最新版本,进入/admin/backup进行备份。但博主在实践中发现原有的程序在升级之后,死活不能用原先的脚本运行起来了。怎么办呢?其实并不需要运行也是可以备份的。方法如下:
升级后论坛的配置文件也发生了变化,需要拷贝config/discourse_quickstart.conf至config/discourse.conf,将其中的相应字段修改为你的环境中的值才能正常访问数据库。
使用如下命令进行备份:

bbs@bbs::~/discourse$ RAILS_ENV=production script/discourse backup

然后用SCP命令拷贝到本地设备。
PS:这种备份方式有一个小毛病,不能备份原先帖子中的图片,如果谁知道怎么解决也请通知博主一下,谢谢!

2.使用Docker安装全新的Discourse
docker是一个容器,现在很多网上的APP都用它来部署,Discourse官方也宣布以后将把它作为唯一支持的官方安装方式。用docker部署discourse非常方便,详见官方的指南:Docker官方安装指南。但是官方指南中没有说明的一点是docker的安装。本以为是简单的apt-get一条命令的事儿,事实上却麻烦多多。博主用的是Linode的VPS,Ubuntu13.04。Docker的官方安装指南中声明是支持Ubuntu13.04的,并且有该版本的安装步骤说明。但是博主按照此方法安装了108遍也还是没能装上。联系了Linode的客服说是不支持,尼玛我明明看到你们的博客上从今年1月份开始表示各个ubuntu版本都已经支持了,难道是我老眼昏花?当时博主的气就不打一处来,回复的邮件里态度比较angry,就差爆出经典F了,客服明显心虚,一个劲抱歉说刚才态度不好,但是说支持不了,让我自己去ubuntu的论坛上看看。事后证明这是条活路啊。。。
命令如下:

1.sudo sed -i -e ‘s/archive.ubuntu.com\|security.ubuntu.com/old-releases.ubuntu.com/g’ /etc/apt/sources.list
2.sudo apt-get update && sudo apt-get dist-upgrade

实际上是因为13.04不再被支持了,于是原有的安装源都找不到了,被归档到归档源中去了,所以我们只要添加一下归档源就可以了。BS一下我自己ubuntu这么不熟练,哈哈。
详见链接:ubuntu添加旧的安装源

安装好docker后,就可以按照官方的指南很快装好discourse啦,然后又碰到一个问题,是配置nginx代理的。服务器上80端口没有被占用的同学自行跳过。博主的/var/docker/containers/app.yml中的片段如下:

## which TCP/IP ports should this container expose?
expose:
– “8080:80” # fwd host port 80 to container port 80 (http)
– “2222:22” # fwd host port 2222 to container port 22 (ssh)

于是在未设置nginx代理的情况下,博主只能用http://URL:8080来访问了,这显得非常业余不是,一不做,二不休,只需要在/etc/nginx/sites-available/目录下添加discourse.conf文件,内容如下便可:

upstream discourse {
server 127.0.0.1:8080 fail_timeout=5; #8080替换为你分配的端口号
}

server {

server_name URL; # URL替换为你的域名

location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;

proxy_pass http://discourse;}

}

详见:Using nginx alongside the Docker install
好了,现在我们可以用http://URL来直接访问啦,等等,还差最后一步,别忘记恢复数据库,把第1步中的备份恢复一下,大功即可告成!

发表评论

您的电子邮箱地址不会被公开。