自从debug博客开通以来,主站和debug两个博客一直是在两个服务器上工作的,这样很不方便,也没必要,因此现在我决定将它们都迁移到同一台机器上。虽然看起来非常简单,但其实里面有很多东西要处理,尤其是80和443端口以及@与www的转发问题。而前不久由于两个服务器都被Q,从而又出现了第三台服务器进行Nginx转发,这无疑又增加了迁移的复杂度。
但好在一切都顺利搞定了,下面是整个过程。
常用设置
在/etc/bash.bashrc中修改环境变量和一些常用设置。
alias virc='vi /etc/bash.bashrc'
alias sourc='. /etc/bash.bashrc'
alias wrk='cd /opt'
export PATH=/opt/lampp:/opt/node-v8.10.0-linux-x64/bin:$PATH
export PS1='[\u@\h: $PWD]\$ '
执行dpkg-reconfigure tzdata修改时区,这里要选一下,然后重启。(其他发行版类似,但不论怎么改,一定要在系统级上修改,而且最好重启。用tzselect的话好像还得手动加一下TZ='Asia/Shanghai'; export TZ)
安装配置xampp
mkdir /opt
cd /opt
wget https://www.apachefriends.org/xampp-files/7.2.3/xampp-linux-x64-7.2.3-0-installer.run
chmod 755 xampp-linux-x64-7.2.3-0-installer.run
./xampp-linux-x64-7.2.3-0-installer.run
执行xampp start,再执行/opt/lampp/bin/mysqladmin -u root -p password修改MySQL密码。
然后xampp stop。
旧密码为空,直接回车即可,然后再输入新密码。
修改/opt/lampp/etc/httpd.conf:
Listen端口为8080ServerName修改为localhost:8080DocumentRoot修改为/opt/htdocs- 注释掉
Options Indexes FollowSymLinks ExecCGI Includes,以禁止显示目录。 mkdir /opt/htdocs
修改/opt/lampp/etc/extra/httpd-ssl.conf:
Listen端口为8081<VirtualHost _default_:443>修改为<VirtualHost _default_:8081>DocumentRoot "/opt/xampp/htdocs"修改为DocumentRoot "/opt/htdocs"
下面这两个暂时就不太需要了,因为已经通过Nginx转发,密钥需要Nginx来读取,就跟Apache无关了。
SSLCertificateFile为SSLCertificateFile "/opt/ssl/chained.pem"SSLCertificateKeyFile为SSLCertificateKeyFile "/opt/ssl/domain.key"
修改/opt/lampp/etc/extra/httpd-multilang-errordoc.conf(修改404页面):
- 把
ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var改成ErrorDocument 404 /404.html
在stop或者start的经常会遇到一些错误,例如XAMPP: Starting Apache...fail.、XAMPP: Another web server is already running.、Stopping XAMPP for Linux 7.2.3-0... XAMPP: Stopping Apache...not running.等等,一般来说有下面两种可能,因此我们要:
修改/opt/lampp/xampp(防止启动监听了错误的端口,给出了错误的提示信息):
if testport 80修改为if testport 8080if testport 443修改为if testport 8081
而提示XAMPP: Starting Apache...already running.,一般是pid错误导致的,一般删除/opt/lampp/logs/httpd.pid即可。
修改执行/opt/lampp/xampp,默认不开启ProFTPD。不同版本的XAMPP的行数可能会有些差别。xampp stopftp即可永久禁用。
将501行startProFTPD || error=1随便改句话,或者把整个if都注释。将646行stopProFTPD || error=1随便改句话,或者把整个if都注释。
最后xampp start。
安装node
wrk
wget https://nodejs.org/dist/v8.10.0/node-v8.10.0-linux-x64.tar.xz
tar Jxvf node-v8.10.0-linux-x64.tar.xz
npm install -g pm2
迁移debug
为了方便,我用navicat连接数据库,新建firekylin数据库,由于第一次装的时候没改字符集,因此字符集就用之前默认的latin1 -- cp1252 West European,排序方式是latin1_swedish_ci。
之后导入sql文件。
上传firekylin.tar.gz备份文件并解压至/opt/firekylin。
写一下备份脚本到backupfirekylin.sh
cd /opt
mv firekylin.tar.gz firekylin.tar.gz.bak
tar -czvf ./firekylin.tar.gz ./firekylin
cd firekylin
旧备份里面多了个nginx.conf,所以删掉rm nginx.conf。
迁移主站
上传htdocs.tar.gz备份文件并解压至/opt/htdocs。
删除掉原有的:
.well-known目录.htaccess用来转发的文件
修改目录权限
由于Apache默认使用daemon账号,Nginx默认使用www-data账号,因此要修改两个目录的权限信息:
chown -R daemon:daemon htdocs
chown -R www-data:www-data firekylin
那个node的所有者是500看起来也很不爽,也搞一下:chown -R root:root node-v8.10.0-linux-x64。
安装配置Nginx
首先安装apt-get install nginx。
在/opt下新建nginx-fz.conf,并ln -s /opt/nginx-fz.conf /etc/nginx/conf.d/nginx-fz.conf
编写新的配置文件:
同时,新建nginx-sslverify.conf,用于SSL网站验证:
server {
listen 80;
server_name fanzheng.org www.fanzheng.org debug.fanzheng.org;
location ^~ /.well-known/acme-challenge/ {
alias /opt/ssl/challenges/;
try_files $uri = 404;
}
}
搞一个简单的转换脚本chgconf.sh:
mv nginx-fz.conf nginx-temp.conf
mv nginx-sslverify.conf nginx-fz.conf
mv nginx-temp.conf nginx-sslverify.conf
nginx -s reload
部署SSL支持
先用chgconf.sh切换。
mkdir -p /opt/ssl/challenges
cd /opt/ssl
openssl genrsa 4096 > account.key
openssl genrsa 4096 > domain.key
openssl req -new -sha256 -key domain.key -subj "/" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:fanzheng.org,DNS:www.fanzheng.org,DNS:debug.fanzheng.org")) > domain.csr
wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py
python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /opt/ssl/challenges/ > ./signed.crt
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
cat signed.crt intermediate.pem > chained.pem
openssl dhparam -out dhparams.pem 4096 #这一步时间很长
接着,将更新证书的脚本写入autossl.sh
cd /opt/ssl/
python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /opt/ssl/challenges/ > ./signed.crt
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
cat signed.crt intermediate.pem > chained.pem
nginx -s reload
启动程序
cd /opt/firekylin
pm2 start pm2.json
pm2 startup upstart
另外,如果想要取消pm2开机启动可以执行pm2 unstartup upstart。
最后将/opt/lampp/xampp start写入/etc/rc.local,开机启动。
这样,使用apt安装的Nginx会自动开机启动,node.js和xampp也都能开机启动了。
备份
将下面内容保存成脚本backupall.sh。
cd /opt
mv bak_all.tar.gz bak_all.tar.gz.bak
tar zcvf bak_all.tar.gz autossl.sh backupfirekylin.sh chgconf.sh firekylin htdocs nginx-fz.conf nginx-sslverify.conf ssl

Comments