终于将博客迁移到云主机了,本文记录简要笔记,方便日后使用。

1. 迁移原因

刚建站的时候,选择了一家香港虚拟主机:主机91,因为看到了我爱水煮鱼的推荐。用了之后,才发现简直是个坑,最严重的一次是因商家升级,导致我网站数据全部丢失(wordpress+mysql),那会刚建站,也没做备份,只能全部手动重建(对了,最后主机91给我6个月补偿,但我已经决定放弃使用主机91,6个月又有啥用)。总之,主机91经常维护升级,多半会导致访问不稳定,比如最近的这一次升级,一会是“建立数据库连接时出错”,一会是“Internal Server Error”,一会是“The requested URL / was not found on this server”,到最后的WLW报错:

wlw_invalid_server_response

用主机91,玩的是心跳,一波未平,一波未起。经过这次,下定决心,无论多忙,都要抽时间迁移。说句公道话,主机91客服还是可以,有咨询必回,态度也比较好。

其实一直都有换主机商的想法,之前已开始关注,虚拟主机商基本不再考虑了,重点考虑云服务器,如阿里云、新浪云、亚马逊云。看了知乎一些回答,最后决定选择亚马逊AWS。真正迁移起来,比自已想象的要简单。

2. 迁移WordPress

曾经纠结了下是该选择amazonaws.cn还是aws.amazon.com,考虑到人在境外,备份甚是麻烦,最后选择了后者。创建实例时,region建议选择Tokyo,因为海底电缆的原因,这样国内用户访问起来会快一些。

2.1 SSH登录

有多种SSH登录方式,如SecureCRT、Putty。关于SecureCRT设置,可参考博文《How-to : Connect to Amazon EC2 Linux AMI using SecureCRT》。在Ubuntu,可以直接用终端登录,相关命令如下:

chmod 400 wp_sparkandshine.pem  # 修改权限,别忘了

ssh -i wp_sparkandshine.pem ubuntu@xx.xx.xx.xx

尝试了3种SSH登录方式,都存在一个问题,键盘延迟很严重。不晓得为什么以及怎么解决。

2.2 安装软件

安装相关软件,我主要参考这篇博文《在Amazon EC2搭建WordPress博客》(链接已失效)。简单整理成一个shell脚本,如下:

#!/usr/bin/env bash  

# step 1: update
sudo apt-get update
sudo apt-get upgrade

# step 2: LAMP
sudo apt-get install apache2 php5-mysql libapache2-mod-php5 mysql-server php5

# step 3: curl
sudo apt-get install curl libcurl3 libcurl3-dev php5-curl php5-imap php5-xmlrpc

# step 4: phpmyadmin
sudo apt-get install phpmyadmin

# step 5: start service
sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod expire

# step 6: modify php.ini
#...
sudo /etc/init.d/apache2 restart

# step 7: download wordpress
#cd /var/www/
#wget http://wordpress.org/latest.tar.gz

#  step 8:  create database,见2.3

修改/etc/php5/apache2/php.ini

date.timezone= PRC
enable_dl = On
display_errors = On
upload_max_filesize = 2M

#在disable_functions选项中增加要禁用的函数,
shell_exec, system, exec, passthru, show_source, proc_open, proc_close, dl

2.3 创建数据库

创建数据库,相关命令如下,红色部分根据自已情况修改:

mysql -u root -p

create database wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
FLUSH PRIVILEGES;

这样就可以访问phpmyadmin管理面板了,url形如:ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com/phpmyadmin。登录之前主机机的phpmyadmin,将数据库导出,再导入新建的数据库。

2.4 上传数据

代码文件,网上建议是将备份的主题和uploads替换掉wordpress目录下的相关文件夹。我是直接将整个代码文件public_html上传。用过很多工具上传(如FileZilla, SecureFX, lrzsz),速度只有几K,而且还老出错。看了网上一些方法,最好的建议是利用AWS S3辅助上传,我是闲太麻烦。

我最后用的方法是:先压缩,同步到Dropbox,获取该压缩包的share link,再SSH登录用wget下载,速度特别快。

100%[=======>] 219,742,208 **7.75MB/s**  in 37s 
2015-04-27 09:21:08 (5.71 MB/s) - 'public_html.tar' saved [219742208/219742208]

2.5 域名解析

我个人的理解是,直接将@定向到Elastic IPs就可以,详情见博文《AWS EC2绑定域名:Elastic IPs, A记录, CNAME》。

3. 其他问题

(1)修改DocumentRoot

提示“The requested URL /manual was not found on this server.”错误,可能是因为DocumentRoot没设置对。值得注意的是,用Ubuntu,DocumentRoot被包含在/etc/apache2/sites-available/000-default.conf,相关命令如下:

sudo vim /etc/apache2/sites-available/000-default.conf 

# 修改DocumentRoot
# DocumentRoot /var/www/html  modify by jelline
DocumentRoot /var/www/

sudo /etc/init.d/apache2 restart

(2)修改AllowOverride

用Ubuntu,AllowOverride并不在httpd.conf,而是在/etc/apache2/apache2.conf,相关命令如下:

sudo vim /etc/apache2/apache2.conf # not httpd.conf

<Directory />
        Options FollowSymLinks
        #AllowOverride None modify by jelline
        AllowOverride All
        Require all denied
</Directory>

sudo /etc/init.d/apache2 restart
本文系Spark & Shine原创,转载需注明出处本文最近一次修改时间 2022-04-17 11:35

results matching ""

    No results matching ""