03月18, 2018

博客大迁移历险记

自从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端口为8080
  • ServerName修改为localhost:8080
  • DocumentRoot修改为/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无关了。

  • SSLCertificateFileSSLCertificateFile "/opt/ssl/chained.pem"
  • SSLCertificateKeyFileSSLCertificateKeyFile "/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 8080
  • if 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

本文链接:https://debug.fanzheng.org/post/adventure-of-blog-migration.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。