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