云主机折腾记录

我早就想搭一个自己的云主机来玩了,毕竟生命在于折腾。digitalocean 可以用 paypal 付款,所以就买了个乞丐版。
在这里记录下折腾过程,作为blog第一篇。

创建主机并调整

点击Create Droplet,选择$5/mo,San Francisco,CENTOS7.0x64,开始创建。
Singapore节点据说经过了DigitalOcean的线路优化,但我试了之后掉包依然严重,还是选择sf1节点。
创建好之后就可以用ssh登陆了,windows下就用putty好了。

更改ssh端口

vi /etc/ssh/sshd_config

找到#Prot 22,去掉#号,将22改成别的值(比如233),然后

systemctl restart sshd

更新

yum update

设置swap

对于512M内存的主机,swap还是有必要的。
创建swap文件,大小1G(或者512M,随意吧)

fallocate -l 1G /swapfile

或者

dd if=/dev/zero of=/swapfile bs=256M count=4

修改权限

chmod 600 /swapfile

确认文件信息

ls -lh /swapfile

设置swap

mkswap /swapfile

开始使用

swapon /swapfile

确认

swapon -s

查看内存

free -m

永久保存swap:
编辑fatab文件
vi /etc/fstab

在最后加上一行

/swapfile swap swap sw 0 0

调整swap设置
将swappiness调低一点,降低swap的使用频率:

sysctl vm.swappiness=10

就是内存剩余10%的时候使用swap。
打开sysctl.conf

vi /etc/sysctl.conf

在最后加上:

vm.swappiness = 10

查看下:

cat /proc/sys/vm/swappiness

调整Cache Pressure:

sysctl vm.vfs_cache_pressure=50

再次打开sysctl.conf

vi /etc/sysctl.conf

在最后加上:

vm.vfs_cache_pressure = 50

查看下:

cat /proc/sys/vm/vfs_cache_pressure

安装配置shadowsocks

我使用的是shadowsocks-libev:

cd /etc/yum.repos.d/
wget https://copr.fedoraproject.org/coprs/librehat/shadowsocks/repo/epel-7/librehat-shadowsocks-epel-7.repo
yum update 
yum install shadowsocks-libev

安装好了修改配置:

vi /etc/shadowsocks-libev/config.json

将server改成"0.0.0.0"或者自己主机的ip地址,加密方法("method")改成"aes-256-cfb"
然后启动:

systemctl start shadowsocks-libev

开机启动:

systemctl enable shadowsocks-libev

windows下的客户端:http://sourceforge.net/projects/shadowsocksgui/

配置lemp环境

nginx

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx
systemctl start nginx
systemctl enable nginx

mysql

改用 mariadb 了。

yum install mariadb-server mariadb
systemctl start mariadb
systemctl enable mariadb

运行安全脚本

mysql_secure_installation

按提示设置root密码(初始密码为空,直接enter),其余一路enter,完事。

PHP

选择php-fpm的方式运行。

yum install php php-mysql php-fpm

修改配置

vi /etc/php.ini
找到#cgi.fix_pathinfo=1,去掉#,将值改成0,即为:

cgi.fix_pathinfo=0

打开php-fpm配置

vi /etc/php-fpm.d/www.conf

修改listen值为:

listen = /var/run/php-fpm/php-fpm.sock
systemctl start php-fpm
systemctl enable php-fpm

修改nginx配置以支持php:
备份初始配置

cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.old

新建default.conf

vi /etc/nginx/conf.d/default.conf

内容:

server {
    listen       80;
    server_name  server_domain_name_or_IP;

    root   /var/www/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /var/www/html;
    }

    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;
    }
}

将 server_domain_name_or_IP 改为自己的域名,root /var/www/html; 改成根目录路径。

安装wordpress

首先增加MySQL数据库:

mysql -uroot -p

CREATE USER lowbi@'localhost' IDENTIFIED BY 'xxxxxx';
create database wordpress;
GRANT ALL PRIVILEGES ON lowbi.* TO 'wordpress'@'localhost' IDENTIFIED BY 'xxxxxx' WITH GRANT OPTION; 
flush privileges;

其中lowbi、wordpress、xxxxxx改为自己的数据库用户名、数据库名和密码。
进入网站根目录:

cd /var/www/html

下载解压wordpress:

wget https://cn.wordpress.org/wordpress-4.1-zh_CN.tar.gz
tar -zxvf wordpress-4.1-zh_CN.tar.gz
cp -r wordpress/* .
rm -rf wordpress
rm -f wordpress-4.1-zh_CN.tar.gz

设置好域名的dns后,浏览器访问,就可以启动wordpress安装了。
后来我发现wordpress没法自动安装插件和主题,是因为nginx与php-fpm运行的用户不同,以及目录权限的问题,改了它:

vi /etc/php-fpm.d/www.conf

找到user和group字段,改成:

user = nginx
group = nginx

再改下网站目录的拥有人:

chown -R nginx:nginx /var/www/html

搞定!
如果需要更改wordpress固定链接为文章名的格式,需要设置nginx的rewrite:

vi /etc/nginx/conf.d/default.conf

location / {
    try_files $uri $uri/ =404;
}

改为:

location / {
    try_files $uri $uri/ /index.php?q=$uri&$args;
}

nginx反向代理gravatar和google fonts

gravatar 和 google fonts 服务经常不可用,导致wordpress网站加载超慢,有许多方法可以解决这个问题,比如用多说的gravatar服务器,禁止google fonts或者使用360的google fonts镜像等。我选择自己设置nginx反向代理:
用Nginx反向代理并缓存Gravatar来解决头像被墙:
http://www.lingchenzi.com/2014/11/nginx-reverse-proxy-gravatar.html
用 Nginx 反向代理 Google Fonts:
http://wangxianyuan.com/post/nginx-reverse-proxy-with-google-fonts
注意:
需要为你用来做反向代理的子域名添加dns解析;
设置好反向代理之后,还需要修改wordpress中的链接地址,推荐用wordpress插件的方式,比如修改gravatar的:

<?php /* Plugin Name: Gravatar Reverse Agent Plugin URI: Author: */
function my_avatar($avatar) { 
    $avatar = str_replace(array("www.gravatar.com","0.gravatar.com","1.gravatar.com","2.gravatar.com"),"gravatar.low.bi",$avatar); 
    return $avatar;
}
add_filter( 'get_avatar', 'my_avatar'); ?>

将上面的代码保存为php文件,压缩为zip文件,再从wordpress后台上传安装该插件。
google fonts 的话可以用这个插件:
Replace Google Fonts,默认有个可用的镜像。

标准结尾

我的digitalocean推荐链接:https://www.digitalocean.com/?refcode=bdfd93364147
使用digitalocean前,别忘了搜个promo code用用。

参考资料