自从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: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无关了。
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 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
Comments
注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。