<?php
1 Godaddy VDS设置https (ssl),并设定强制http访问重定向到为https
——你懂的,有效防止某些无法无天人的关键字过滤。
——使用山寨的ssl证书,浏览器会弹出警告说证书错误。如果想解决这个问题,又不想花钱,你可以上SmartSSL来整一个免费的SSL证书。不复杂,如果晚上整,一会就搞定了。(他们需要人工审核)
1.1 先把PHP升级到5.2.*再说:
参考:http://www.search-friendly-web-design.com/blog/update-godaddy-vds-and-ds-to-run-php-52xx
同理,也可以升级Apache/phpMyAdmin什么的。如果你愿意,因为我们的repository已经更改了。
升级完成后,要修改php.ini的内存占用等,推荐:
max_execution_time = 60 ; Maximum execution time of each script, in secondsmax_input_time = 120 ; Maximum amount of time each script may spend parsing request data;max_input_nesting_level = 64 ; Maximum input variable nesting levelmemory_limit = 512M ; Maximum amount of memory a script may consume (16MB)upload_max_filesize = 10Mpost_max_size = 10M
1.2 VDS默认启用SSL,我们只需要一点设置就行
新建一个配置文件在conf.d下面,假设为:shwforum.conf,输入以下内容:(凡是路径和域名的,自己改啊)
NameVirtualHost *:80 <VirtualHost *:80> Redirect permanent / https://s.shwforum.net/ </VirtualHost> NameVirtualHost *:443 <VirtualHost *:443> ServerName shwforum3.co.cc DocumentRoot /path-to-forum ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM SSLCertificateFile /path-to-ssl/smartssl.crt SSLCertificateKeyFile /path-to-ssl/myserver.key SSLCertificateChainFile /path-to-ssl/smartssl/sub.class1.server.ca.pem SSLCACertificateFile /path-to-ssl/smartssl/ca.pem <Files ~ "/.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </Files> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory> SetEnvIf User-Agent ".*MSIE.*" / nokeepalive ssl-unclean-shutdown / downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log / "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x /"%r/" %b" <Directory "/path-to-forum"> # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
然后重启httpd服务/etc/init.d/httpd restart
1.3 Godaddy VDS 布置 Git服务器及本地建立Git版本库和LAMP测试服务器:
1.3.1 建议:待下面的Discuz全新安装完结束,修改完$_G['siteurl']之后再把整个站点添加到Git版本库中。要不会产生不少临时的不必要的文件影响,增加版块控制负担。
1.3.2 参考:http://ivarptr.blogspot.com/2010/12/centos-55gitgit.html
注意事项:在远程主机git init初始化之后,只有添加了文件并提交之后,本地才能clone,否则你一定会clone失败的(Fetal Error)。这与SVN不一样。
听说这个版本控制不错,比SVN的传输数据量小,我们公司已经考虑要使用了。到Godaddy的SSH服务器速度还是很慢的,最好整一个。
1.3.3 同时在本地Git上搭建LAMP测试环境(RedHat为例,yum安装)
LAMP搭建参考:http://www.sdlunzhong.cn/itres/showitnews.aspx?ID=709
上面的参考中,长长的页面最后有个: rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka 别忘了加哦
你最好在本地完全模拟远程的HTTPS环境,以RedHat为例,如果要搭建HTTPS测试环境(Godaddy的VDS是CentOS,可以理解为RedHat的升级版),参考:http://www.linuxidc.com/Linux/2010-08/27591.htm
搭建好本地Apache上的SSL之后,在conf.d里面加一个shwforum.conf, 按照ssl.conf的一些参数,添加虚拟主机。(除了复制ssl.conf里面的东西外,还需要添加DocumentRoot和Directory还有一些虚拟主机必须添加的东东)
1.3.4 如果你本地的"https:// "仍然无法访问,请尝试关闭iptable (/etc/init.d/iptables stop)或者开通443端口
1.3.5 安装Gitplugin和Trac (以下只是参考,我没试验成功)
1.3.5.0 先yum更新python为2.4并安装相关的工具
yum install python
安装python-setuptools: yum install python-setuptools
安装genshi:
http://packages.sw.be/python-genshi/
e.g:
wet http://packages.sw.be/python-genshi/python-genshi-0.6-1.el5.rf.noarch.rpm
rpm -ivh python-genshi-0.6-1.el5.rf.noarch.rpm --force --nodeps
1.3.5.1 安装Trac 1.2 (以python运行setup.py方式): http://trac.edgewall.org/
wget http://ftp.edgewall.com/pub/trac/Trac-0.12.2.tar.gz
tar zxf Trac-0.12.2.tar.gz
cd Trac-0.12.2
python setup.py install
1.3.5.2 easy_install http://github.com/hvr/trac-git-plugin/tarball/master
2 Discuz X1.5迁移及转换(域名改变,并有https支持,数据库字符集从gbk转化为utf8)
2.1 全新安装utf8版的Discuz
2.2 初步修改
2.2.1 修改超全局变量:$_G
文件位置./source/class/class_core.php (X1.5和X2.0均是在112行开始)
在$_G声明的下一行添加:
$swHttp = empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == 'off' ? 'http' :'https';
添加和修改键值:
$_G['http'] => $swHttp; //这是添加
$_G['siteurl'] => $swHttp . ''; //这是修改(在165-168行左右, 把 'http: 换成 $swHttp . ':)
2.2.2 解决请求端口自动转成443的Bug:
文件位置:source/function/function_core.php
X1.5 (行1038)
修改为:$port=''
x2.0(行182)
修改为:$_G['siteport'] = '';
2.3 如果你在远程和本地都搭建了Git版本管理,在本地搭建了LAMP测试服务器
2.3.1 远程添加文件,本地Clone文件:参考 上面的 1.3.2。 Clone下来之后,别忘了修改相关的目录为可写——因为只是本地测试,建议全整成777吧,反正不会提交上去。
2.3.2 远程导出数据库:mysqldump -uroot -p dbname > dbname.sql,(dbname是你DZ全新安装所在的数据库)然后用tar压缩一下,再用sftp下载下来
2.3.3 本地导入数据库:解压之后,使用:mysql -uroot -p dbname < dbname.sql (其中dbname你得自己先建了,如何建数据库?用phpMyAdmin或者mysql 命令行,这里不多说了,自己Google去。另外,不要用source命令导入,这个命令太慢了)
2.3.4 然后在本地git项目下面的.git/info/exclude里添加
forum/data/attachment/album/*/forum/data/attachment/forum/*/forum/data/attachment/swfupload/*/forum/uc_server/data/avatar/000/*/forum/uc_server/data/config.inc.phpforum/config/config_global.phpforum/config/config_ucenter.php
以排除对他们的版本管理,这个很重要 (路径搞正确了,我的例子是我的服务器的)
2.3.5 别忘了修改本地的DZ下面的
./config/config_global.php
./config/config_ucenter.php
./uc_server/data/config.inc.php
里面的数据库链接字符串及UC_API地址
如果的论坛创始人的ID不为1,请修./config/config_global.php里面修改$_config['admincp']['founder'] = '***';//你的创始人ID
2.4 在模板和PHP文件中改http为https
2.4.1 替换所有的htm模板中的http: https:
(假设当前目录为论坛的根目录,这时使用sed来批量替换,后面的第一个grep是查找文件)
sed -ir "s/http:/https:/g" `grep -rl "http:" ./ | grep \.htm$`
sed -ir "s/http:/https:/g" `grep -rl "http:" ./ | grep \.php$`
sed -ir "s/http:/https:/g" `grep -rl "http:" ./ | grep \.css$`
sed -ir "s/http:/https:/g" `grep -rl "http:" ./ | grep \.xml$`
sed -ir "s/http:/https:/g" `grep -rl "http:" ./ | grep \.js$`
sed -ir "s/http:/https:/g" `grep -rl "http:" ./ | grep \.sql$`
2.4.2 命令运行后,会产生一堆以.*r 结尾的备份文件, 如果有错,还可以修改还原。 如果你觉得烦,要删除备份文件,可以使用:
rm -rf `grep -rl "http:" ./ | grep -i \.htmr`
rm -rf `grep -rl "http:" ./ | grep -i \.phpr`
rm -rf `grep -rl "http:" ./ | grep -i \.jsr`
rm -rf `grep -rl "http:" ./ | grep -i \.cssr`
rm -rf `grep -rl "http:" ./ | grep -i \.xmlr`
rm -rf `grep -rl "http:" ./ | grep -i /.sqlr`
2.4.3 个别Bug修复
* 修改./uc_client/client.php 第479行,将.urlencode(str_replace('https://', '', UC_API)). 修改为:.urlencode(UC_API). // 这是修复上传头像出现“I/O错误”
* 修改:forum/source/language/lang_email.php,解决找回密码的邮箱链接无法点击的Bug,以下是diff结果:
-<a href="{siteurl}member.php?mod=getpasswd&uid={uid}&id={idstring}" target="_blank">{siteurl}member.php?mod=getpasswd&uid
+<a href="member.php?mod=getpasswd&uid={uid}&id={idstring}" target="_blank">{siteurl}member.php?mod=getpasswd&uid={uid}&am
2.5 数据库迁移
2.5.1 用mysql命令行导出旧论坛数据库为.sql文件, 参考 2.3.2
2.5.2 对旧论坛sql文件进行修改,使用VIM,命令:
2.5.2.1 修改域名
(有多少改多少,取决于曾经都为论坛使用过啥域名了。如果是从5d6d搬过来的,当然也要修改5d6d的东东):
%s#www.shwforum.net#www.shwforum.info#g
%s#www.shwforum.com#www.shwforum.info#g
%s#swjh.5d6d.com#www.shwforum.info#g
%s#http://www.shwforum.info#https://www.shwforum.info#g
2.5.2.2 修改Ucenter数据库表名(如果你原来的uc_server是升级过来的话,可以考虑此步骤):
(旧论坛的ucenter的数据表前缀为uc_,现在要改为DZX1.5默认的pre_ucenter_)
%s/`uc_/`pre_ucenter_/g
2.5.2.3 修改数据库字符集为utf8(如果原来不是utf8的话)
%s/DEFAULT CHARSET=gbk/DEFAULT CHARSET=utf8/g
%s/charset=gbk/charset=utf-8/g
%s/gbk/utf8/g
2.5.3 将数据库sql文件导入到新论坛安装的地方。参考 2.3.3
2.6 附件和头像迁移
使用FTP或者sftp命令把原论坛 ./data/attachment, ./data/avatar, ./uc_server/data/avatar/里面的文件复制过来覆盖到新论坛程序中
2.7 表情及表态等图片迁移
如果你安装了自定义表情或者添加了自定义表态,则也要迁移。参考2.6 路径是./static/image/
2.8 清空缓存
2.8.1 访问后台并清空缓存
如果因为文件夹权限而无法访问,请参考:http://www.zzbaike.com/wiki/Discuz%21_X1.5/%E5%AE%89%E8%A3%85%E8%AF%B4%E6%98%8E
如果访问不了,可以上UCenter(用新安装的论坛上的创始人密码登录)重置管理员密码。
然后确保几个config里面的UC_KEY是一致的 然后如果成功登录Discuz后台,别忘了把自动产生的ucenter地址修改一下(系统自己识别成http://hostname:443/uc_server了,无语)
差不多了,今天是耶稣受难日,愿耶稣基督的救恩临到你和你的全家。
需要帮助可以联系:lanshunfang###gmail.com,但不保证有时间回复哦