上周实验室装修,窝在办公室里,于是一冲动,搞了个vps,搭了个wordpress,把原来blogspot上的给迁了过来。必须感叹一下,冲动是魔鬼啊。
提问,要把blog放到wordpress上,总共要几步?回答,很多步。
第一步,先是买vps。考虑了很久,最终还是选了linode。因为内存大。本来想搞个ramhost的kvm的vps,因为kvm和真机最接近,内核神马的都能安装,升级。但是ramhost一直处于sold out状态,所以还是不等了。linode的是xen的,除了内核,什么都能折腾,其实内核也行,但是要安装另外的grub。但是linode提供的内核也挺新的,而且进行了一些针对vps的优化,也很好用,所以直接在archlinux里ignore linux这个包就行。linode有很多机房,东京的大概会快一点,时间=路程/速度嘛。不过还是选了fremont的,因为可以有米国ip,目的,你懂的。但是速度貌似不怎么样,访问网页还行,但诡异的是ssh居然有延时,大概是上传速度不行吧。不管怎样,linode买vps很简单,付钱,一分钟后就可以用了。我的linode邀请链接,http://www.linode.com/?r=e7fcf8d153339d3866bfc8293fb51e40f807c611
第二步,在vps上安装系统。顺便提一句,linode提供的lish不是很好用,因为屏幕不能滚动,也就是说如果output超过一页,又没有用more或者less的话,就没法看了,还是用ssh比较方便。需要先到linode网页安装系统。我选了archlinux,用惯了,而且折腾起来方便,自己本子也是这个,出什么问题也容易解决,甚至可以本子折腾了确定没问题再去vps弄。而且不知道是rp问题还是什么,我用ubuntu那时候就没顺利升级过,所以那时候我是半年装一次系统,还是archlinux的滚动升级省心。安装很快,选好disk size,swap size,安装不到5分钟就好了。然后用lish登上去,pacman -Syu,安装ssh。然后退出lish,用ssh就能登录了。但是用arch有个问题,就是网上的资料比较少,只能参考centos,ubuntu和debian的,而且linode本身提供的资料也比较旧了,好在archwiki上还有不少内容。
第三步,安装iptables。毕竟网上有些人挺无聊的,天天想着怎么弄别人的服务器,搞个防火墙放心点。但是要把ssh和http端口打开。
# SSH
-A INPUT -p tcp --dport 22 -j ACCEPT
# HTTP
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
但是ssh的端口是可以改的,在 /etc/ssh/sshd_config 里面改,还可以禁root登录什么的。
最重要的是DDoS的问题,用DDoS Deflate可以稍微防着点,但是大的ddos还是无能为力。直接
wget http://www.inetbase.com/scripts/ddos/install.sh
chmod 0700 install.sh
./install.sh
然后进行一些设置就行。但是这个程序本身是针对debian系的,要修改一下,比如调用cron,需要用 /etc/rc.d/crond ,而不是debian系的service。修改 /usr/local/ddos/ddos.sh 就行。
第四步,安装Nginx,PHP和MySQL。主要参考的是这篇文章。先安装nginx,php-fpm,然后修改 /etc/nginx/conf/nginx.conf ,在http这一块里找到server,修改成
server {
listen 80;
server_name localhost example.com;
root /srv/http/wordpress/;
location / {
root html;
index index.html index.htm index.php;
try_files $uri $uri/ /index.php;
}
需要把server_name那里改成自己的。然后找到第二段 location ~ \.php$ {} ,修改成下面这样,
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
原文说这一段要加root,但是我加了以后就404了,所以把root那一句删掉才解决。然后安装MySQL。pacman安装完以后以root账户或者sudo执行
/etc/rc.d/mysqld start && mysql_secure_installation
这时候就能删除原有的guest账户和database,而且可以设置MySQL的root密码。重启mysqld以后修改 /etc/php/php.ini ,找到
;extension=mysqli.so
;extension=mysql.so
uncomment之。呃,要提醒一下,是 mysql 而不是 msql 。重启php-fpm和mysqld。
然后安装phpmyadmin,没这个还真不好管理mysql的数据库。先安装phpmyadmin和php-mcrypt这两个包。然后在 /etc/php/php.ini 里找到
;extension=mcrypt.so
uncomment掉。然后继续找
open_basedir
在后面添加
:/usr/share/webapps/phpMyAdmin/
然后在 /etc/nginx/conf/nginx.conf 里刚才添加的php那段下面添加
location /phpmyadmin/libraries {
root html;
deny all;
}
location /phpmyadmin/setup/lib {
root html;
deny all;
}
重启php-fpm和nginx。修改 /etc/webapps/phpmyadmin/config.inc.php ,找到 blowfish_secret ,在两个单引号里添加secret码,可以用这个网页生成。这是个随机的密码,不用记住,也不用登录的时候输的,越复杂越诡异越好。
把 /usr/share/webapps/phpMyAdmin 链接到 /srv/http/wordpress/phpmyadmin ,就能通过http://url/phpmyadmin登录管理mysql数据库了。
第五步,安装wordpress。arch的源里有wordpress,安装以后文件在 /srv/http/wordpress 里。而且如果移除了wordpress这个包以后会自动把这个文件夹改名为wordpress_bak并保留,不会删除,所以推荐用源安装,方便。
安装以后修改 /etc/php/php.ini ,找到
cgi.fix_pathinfo=0
uncomment掉。重启php-fpm。搞定了。
第六步, 把wordpress目录整个chown成http,因为wordpress是以http这个用户执行的,而wordpress目录本身是root的,这样就不能直接安装插件主题什么的,要输入ftp密码什么的,所以干脆chown了。用phpmyadmin新建一个mysql数据库,然后修改下 /srv/http/wordpress/wp-config.php ,把DB_NAME DB_USER DB_PASSWORD输进去,再去wordpress提供的网站生成几个随机的key和salt,填进去就好。现在就可以开始安装插件主题写blog了。如果是从blogspot转过来,推荐用这个服务先把blogspot导出的数据转成wordpress的导入文件,如果直接用wordpress导入blogspot的话,标题会有">",标点也会有些问题。不过即使是这样,在blockquote里的代码,如果复杂的话也还是会有些问题,需要再手动调整下。
第七步,优化。vps的内存不多,不能和笔记本8g的内存比,优化很重要。首先是mysql。因为不愿折腾sqlite,还是选了mysql,但是就比较臃肿了。参考这篇文章,修改 /etc/mysql/my.cnf
skip-networking
server-id = 1
key_buffer = 256K
max_allowed_packet=1M
thread_stack = 64K
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K
query_cache_limit=256K
query_cache_size = 2M
根据自己的情况修改。至于原文的 skip-innodb 会导致mysqld无法启动就没加了。
然后优化php-fpm。这是个会产生n个进程,并且每个进程吃掉n兆内存的东西。根据这篇文章,修改 /etc/php/php-fpm.conf ,主要是修改下面这些
pm = static|dynamic
pm.max_children
pm.start_servers
pm.min_spare_servers
pm.max_spare_servers
pm.max_requests
pm=dynamic 得改成 static ,不然会动态的占掉尽可能多的内存。其他的就看着改好了,像我这种没人访问的就可以往小了调,调完看看内存,差不多就行了。
接下来是nginx,主要是改 /etc/nginx/conf/nginx.conf 里的 worker_processes ,比如linode是4个cpu,就改成4,然后加上
worker_cpu_affinity 0001 0010 0100 1000;
再就是开启gzip压缩,在http这一段里添加
gzip on;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
最后是wordpress的优化了。安装几个插件解决。一个wp-super-cache,一个DB cache reloaded fix,嗯,fix是因为3.2.1版的wordpress。
第八步,备份。有钱的话可以买linode的备份服务,不然还是像我这样找个免费的,Dropbox。
先安装Dropbox,aur里有,就是依赖有点多,但是还好,不运行的话不会占内存,只是占点硬盘空间,而linode给的硬盘倒还够。先用自己的电脑去dropbox网站申请一个帐号,然后在vps上安装dropbox,运行dropboxd,然后会有提示要关联这个机子,给出了一个网址。用links打开这个网址,字符界面,凑合一下,然后输入用户名,密码,然后再输入密码,找密码框的时候仔细点,我因为没看见这个框,折腾了好久没关联上。关联上以后就能把需要备份的目录 ln -s 到 ~/Dropbox 里,就会自动上传到dropbox里了。这比windows强多了,windows这么链接的话就只能是上传一个快捷方式而已。除了备份的设置文件外,最主要的是备份wordpress的数据库,需要先用root登录phpmyadmin,然后给wordpress的数据库的用户grant针对这个数据库的 lock tables 权限,然后用cron定一个任务
mysqldump -q -u username -ppassword databasename | gzip > ~/Dropbox/dbbackup.sql.gz
-u 和用户名之间是有空格的,而 -p 和密码之间是没有空格的。dropbox还是挺耗内存的,可以考虑每天开一个小时,同步完了就关了。
嗯,好吧,把blog放到wordpress上总共八步。