Blog顺利完成搬家之Bandwagonhost VPS

搬家之前的一些感受

在Hostgator上顺利用了6年了,我是3年一续费,每次续费都贵一大截,这是欺负老客户么?!太蛋疼了,而且动态ip,什么功能都没有,真是心灰意冷:
痛定思痛,弃用Hostgator!经同事推荐,Bandwagonhost 速度不错,便宜,稳定,而且还是VPS,自由度很大,最好的是每年续费不涨钱:-) 所以我买了他们比较便宜的那款,年费在29美金/year(CN2),比 Hostgator便宜,速度还快!

Basic VPS - Self-managed - SPECIAL 10G KVM PROMO V3 - LOS ANGELES - CN2
SSD: 10 GB RAID-10
RAM: 512 MB
CPU: 1x Intel Xeon
Transfer: 500 GB/mo
Link speed: 1 Gigabit

Location: Los Angeles
Direct route via CN2 and China Unicom

VPS technology: KVM/KiwiVM
OS: 32 or 64 bit Centos, Debian, Ubuntu
Instant OS reload
IPv4: 1 dedicated address
IPv6 support: **No**
Full root access
Instant RDNS update from control panel
No contract, anytime cancellation
Strictly self-managed, no support
99.9% uptime guarantee

这是我第一次用VPS,整体感觉很酷,跟我自己搭建Server没什么区别,想装什么装什么!为了方便日后查阅,在这片文章里总结下整个搬家过程以及注意事项

备份WP和数据库

两种方法:

1. 直接把整个html的文件夹压缩donwload下来,这是Wordpess的备份;然后把Mysql的数据库通过Phpmyadmin导出备份

2. 通过Wordpress的插件来备份,BackUpWordPress,这个备份会包含Wordpress和Mysql,它只能备份,不会恢复,需要手动恢复

2017-11-22 更新:迁移成功后的docker环境的备份

迁移成成功后,环境是由两个docker构成,一个是mysql,另一个是wp。在这种环境下,原有的“BackUpWordPress”无法检查到mysql,所以就没法完成备份,这点很不爽。。。也许有特殊配置吧,anyway了,还是自己写一个脚本来备份吧,也不是很难,如下shell脚本:

[root@frank-vps opt]# more wpbackup.sh
#!/bin/bash
#variable
Now=$(date +"%Y-%m-%d-%H%M")
File="zhaocs.info.$Now.zip"
Backup_DIR="/opt/wp-backup"
WWW_DIR="/opt/my_wordpress/wordpress_data/*"

#backup mysql database in docker
docker exec [container] sh -c 'exec mysqldump --all-databases -u [user]  -p"[pass]"' > $Backup_DIR/zhaocs.info.database.$Now.sql

#backup wordpress in docker
zip -rq $Backup_DIR/$File $WWW_DIR

#remove older file and only remain 5 backup
ReservedNum=5
cd $Backup_DIR
FileNum=$(ls -l |grep database | grep ^- | wc -l)
while(($FileNum>$ReservedNum))
do
    OldFile_mysql=$(ls -rt *.sql | head -1)
    OldFile_wordpress=$(ls -rt *.zip | head -1)
    rm -f $Backup_DIR/$OldFile_mysql
    rm -f $Backup_DIR/$OldFile_wordpress
    let "FileNum--"
done

设置crontab自动执行脚本:

[root@frank-vps opt]# crontab -l
0 0 * * * /opt/wpbackup.sh

crontab 范例:

*/5 * * * *   每五分钟执行 
  0 * * * *   每小时执行 
  0 0 * * *   每天执行 
  0 0 * * 0   每周执行 
  0 0 1 * *   每月执行 
  0 0 1 1 *   每年执行

迁移Domain

这个VPS可以提供独立IP,我需要把原来的域名从Hostgator指向这个地址,进入我的域名 -> 管理DNS -> 在域名服务器中移除原来的配置并使用默认配置 -> 在记录里,设置A记录,指向IP就可以了。完成这样的设置后,你在用nslookup查看域名时,对应的地址就会是这个了

Server的基本配置

1. 为了SSH管理方便,可以把私钥导出来,然后在MacOS上安装,这样以后登录可以免认证,可以参考这篇文章:为VPS设置SSH Key并修改SSH端口

[root@host ~]# ssh-keygen -t rsa
......
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
[root@host:~root@host ~]# mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
[root@host:~root@host ~]# chmod 600 /root/.ssh/authorized_keys

-----copy id_rsa to macos and install-----
xxxx-M-Q4TL:xxxx$ ssh-add id_rsa

2. 安装必要的软件和配置,可以参考这篇文章:Add Existing SSH Key To OSX

[root@host ~]# hostnamectl set-hostname xxxxxxx
[root@host ~]# yum install net-tools #-> include ifconfig cmd
[root@host ~]# yum install bind-utils #-> include nslookup cmd

通过Docker部署Wordpress

由于这个VPS是全新的,什么也没有,所以我需要自己安装Wordpress和Mysql。那么采用什么方法比较方便?按常规来说可以通过安装LAMP,但要安装一堆东西,既然VPS比较自由,又加上我之前用Docker安装过OpenBMP,所以索性就选择了Docker,下面是总结,另外你也可以参考我在 stackoverflowdocker forums

1. 安装docker和docker-compose

不推荐独立用docker run xxx来部署了,由于我们需要多个docker,如wordpress,mysql和phpmyadmin,因此用docker-compose,这个工具可以方便的对多个docker进行管理,可以参考这边官方文档 Install Docker Compose

[root@xxxxxxx ~]# yum install docker-engine
[root@xxxxxxx ~]# curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
[root@xxxxxxx ~]# chmod +x /usr/local/bin/docker-compose
[root@xxxxxxx ~]# systemctl start docker && systemctl enable docker <<< auto enable after reboot
[root@xxxxxxx ~]# docker-compose up -d

2. 注意关于docker里的“-p”参数

如果不配置端口映射,那么意思是不向外暴露端口,那么只能container自己用,即使你的宿主主机也不能用,这点一定要注意。另外如“-p 8080:80”,前面的8080是container的,也就是宿主主机要想访问container的80端口,要用8080来替代

3. 安装Wordpress,Mysql和Phpmyadmin

这些都可以在Compose的配置文件里列出,详细可以参考官方文档 Quickstart: Compose and WordPressDocker Hub Phpmyadmin,你可以看到我把mysql的数据库文件和wordpress的根目录都mapping到了宿主主机上,这样方便我后期维护

[root@xxxxxxx my_wordpress]# more docker-compose.yml
version: '3'

services:
   db:
     image: mysql:5.7
     volumes:
       - ./mysql_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: xxxx
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - ./wordpress_data:/var/www/html
     ports:
       - "80:80"
     restart: always
     environment:
       WORDPRESS_DB_NAME: wordpress
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress

#   phpmyadmin:
#     depends_on:
#       - db
#     image: phpmyadmin/phpmyadmin
#     ports:
#       - "8080:80"
#     restart: always
#     environment:
#       PMA_HOST: db
#       PMA_USER: wordpress
#       PMA_PASSWORD: wordpress
volumes:
    db_data:

4. 注意Wordpress的配置

官方install guide中是没有“WORDPRESS_DB_NAME”的,为什么我要加一个这个参数,那是应为wordpress默认会找叫“wordpress”的数据库,如果你的数据库名字不是“wordpress”,那么一定要在这里指定

5. 在wordpress的container中装软件

不同container安装方法不同(因为不同的container可能用不同的linux),官方出的wordpress docker可以通过下面方法安装软件,zip(安装插件用)和mail(恢复密码用)功能

[root@xxxxxxx my_wordpress]# docker exec -it xxxxxxx bash
[root@xxxxxxx:/var/www/html# apt-get update
[root@xxxxxxx:/var/www/html# apt-get install zip
[root@xxxxxxx:/var/www/html# apt-get install mailutils

6. 关于Container的操作

由于我对container的文件做了映射,所以通过“docker-compose down” 是不能删除这些映射文件的,可以通过“docker-compose down –volumes”来移除这些信息。如果你用down来关闭container,那么除了映射文件不会丢失外,你对container进行的所有变更都会重置,所有你可以用stop

7. 对Container进行troubleshooting

这个很简单,启动如上所说,用“docker-compose up -d”,去掉“-d”,你就会看到所有container的启动过程及服务状态

恢复Wordpress

通过docker部署,环境已经就绪,那么接下来就是要恢复wordpress和mysql了。这个过程很简单,根据“./wordpress_data:/var/www/html”,直接删掉wordpress_data中的所有文件,然后把原有的wordpress系统文件解压到这个目录下,就可以了。对于mysql,可以用phpmyadmin来管理并导入恢复数据库,这个操作就不在这里阐述了。但有一点需要在这里强调下,当你恢复完后,游览没有任何问题,但更新插件和升级主题时遇到了下面的问题:

1. 升级插件需要zip和ftp,zip前面我们装过了,那么把ftp装上并设置下就可以了,下面是主要vsftp的配置信息

anonymous_enable=NO # 匿名和ftp账号都不能用,本地账号默认允许
local_root=/opt/my_wordpress/wordpress_data/ #根目录

2. 按照ftp后,需要告诉wp,他要找的目录在哪里,可以把下面这段配置放到“wp-config.php”的末尾,具体也可以参考这篇文章

define('FTP_BASE', '.');
define('FTP_CONTENT_DIR', './wp-content');
define('FTP_PLUGIN_DIR', './wp-content/plugins/');
define('FTP_THEMES_DIR', './wp-content/themes/');
define('FS_METHOD', 'direct');

3. 文件夹的权限和用户组的问题,Wordpress的权限不是随便设置的,文件和文件夹的权限是不同的,具体可以参考 WordPress 安装,文件夹权限设置,用docker安装后,我们可以看到docker里的用户和组是33:

root@xxxxxx:/var/www/html# ls -l
total 157864
drwxr-xr-x  2 www-data www-data      4096 Oct 10  2011 cgi-bin
-rw-r--r--  1 www-data www-data  27640326 Oct 17 10:19 database-zhaocs-info-1508235393.sql
-rw-r--r--  1 www-data www-data   1449522 Dec  8  2016 error_log
......

root@xxxxxx:/var/www/html# cat /etc/passwd |grep www-data
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

所以在mapping后的文件和文件夹中,最好也是这个,通过下面命令来改变所有者

chown -R 33:33 wordpress_data

所有者改后,我们需要纠正文件和文件夹的权限

chmod 755 wordpress_data
find wordpress_data -type d -exec chmod 755 {} \;
find wordpress_data -iname “*.php” -exec chmod 644 {} \;

在VPS上搭建SSR

等待更新。。。

改变VPS默认的SWAP分区

我买的VPS默认是512M的内存,大小还可以,但是开了SSR后,就发现SWAP经常满,然后我的blog就废了,只能重启才能恢复。默认SWAP是128m,非常小,经过google,发现这个是可以调整的,非常赞,所以经过下面操作,我把SWAP调整到了1G的大小,默认是两倍的memory:

调整前的memory信息:

调整后的memory信息:

调整步骤:

[root@xxxxxx ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            503         309          11          30         182         122
Swap:           131         131           0
[root@xxxxxx ~]# dd if=/dev/zero of=/home/swap bs=1024 count=1024000
1024000+0 records in
1024000+0 records out
1048576000 bytes (1.0 GB) copied, 4.72083 s, 222 MB/s
[root@xxxxxx ~]# du -ah /home/ |grep swap
1001M	/home/swap
[root@xxxxxx ~]# mkswap -f /home/swap
Setting up swapspace version 1, size = 1023996 KiB
no label, UUID=0a2a6b18-e441-442c-9cab-a765537bb1a5
[root@xxxxxx ~]#
[root@xxxxxx ~]# swapon -f /home/swap
swapon: /home/swap: insecure permissions 0644, 0600 suggested.
[root@xxxxxxx ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            503         309           9          30         184         123
Swap:          1131         132         999
[root@xxxxxx ~]# echo "/home/swap swap swap defaults 0 0" >> /etc/fstab
[root@xxxxxx ~]# more /etc/fstab |grep swap
/swap none swap sw 0 0
/home/swap swap swap defaults 0 0

VPS 安全策略

等待更新。。。

0
你可以留言,或者trackback 从你的网站

评论关闭