CentOS 7安装配置LEMP+WordPress


现在VPS不像以前了,Vultr 这种2.5美元1个月的都不能算最便宜,不过性价比不错,弄个来用其实用处挺多的,就是要注意新用户要到网站可下角找 Coupons 那个链接进去注册,送50美元用2个月,如果第一次充值用优惠码SSDVPS送20美元,默认送5美元有点亏

在Vultr上配置Linux + Nginx + PHP + MariaDB + StartSSL + WordPress

如果是 root 用户 ssh 登录的 CentOS 7 先配置下服务器
创建一个新用户、设置密码、分配到 wheel 组以便可以使用 sudo 命令,密码复杂点,反正基本上只用一次

adduser admin
passwd admin
gpasswd -a admin wheel

复制本地ssh key到新用户,这样就可以把现在的putty改个用户名直接登录,然后配置sudo时不用密码

cp /root/.ssh/authorized_keys /root/.ssh/authorized_keys.pub
ssh-copy-id -i /root/.ssh/authorized_keys.pub admin@localhost
rm -f /root/.ssh/authorized_keys.pub
echo "admin ALL=(ALL) NOPASSWD: ALL" | tee /etc/sudoers.d/user

修改一下时区

ln -sf /usr/share/zoneinfo/Asia/Chongqing /etc/localtime

禁止root用户登录,自己确定用不用
nano vi 都是文本编辑器,所以如果不是修改参数可以用 tee 命令更方便

sudo nano /etc/ssh/sshd_config

在打开的文件中修改这两行,禁止 root 用户登录可根据需要配置,但是禁用密码登录强烈建议开启

PermitRootLogin no
PasswordAuthentication no
UsePAM no

Ctrl + o 保存,Ctrl + x 退出,然后重新载入

sudo systemctl reload sshd

配置 Swap 交换分区,小内存非常有必要,否则 mariadb 数据库会经常无法连接
首先检查有没有交换分区,第一条看内存,第二条看交换分区信息的,没有输出表示没有,第三条查看硬盘信息

free -m
swapon -s
df -h

创建交换分区使用的文件,配置权限,创建交换分区,查看交换分区信息,修改配置等等,听说交换分区2倍内存大小比较合适

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
ls -lh /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
swapon -s
echo "vm.vfs_cache_pressure = 50" | sudo tee /etc/sysctl.d/00-wordpress.conf
cat /proc/sys/vm/vfs_cache_pressure

最后配置一下让系统一开机就知道你配置了交换分区

echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab

然后用新用户登录,接下来安装 yum 源

sudo yum -y install epel-release
sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

因为 EPEL 源 nginx 版本太低,有可能不支持 http2,所以启用 nginx 官方源,参考http://nginx.org/en/linux_packages.html#mainline

sudo vi /etc/yum.repos.d/nginx.repo

写入以下内容,然后!wq保存

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

安装 nginx,开启服务,运行服务,第一句是查看包信息,最后一句是查询运行状态的

yum info nginx
sudo yum -y install nginx
sudo systemctl enable nginx
sudo systemctl start nginx
systemctl status nginx -l

安装数据库 mariadb 数据库,并设置密码之类的

sudo yum -y install mariadb-server
sudo systemctl enable mariadb
sudo systemctl start mariadb
sudo mysql_secure_installation
systemctl status mariadb -l

安装php,如果有需要,再安装一些模块

sudo yum install -y php70w-fpm php70w-mysql php70w-xml
sudo systemctl enable php-fpm
sudo systemctl start php-fpm
sudo yum install -y php70w-soap php70w-xmlrpc
sudo yum install -y php70w-mbstring php70w-json php70w-gd php70w-mcrypt

打开 php-fpm 配置文件

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

修改程序运行的用户,监听的端口的相关的用户、权限,听说用 unix socket 好点

user = nginx
group = nginx
listen = /dev/shm/php-cgi.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

修改一下 php 配置,通过命令写一个配置文件到/etc/php.d

echo ";自定义php配置" | sudo tee /etc/php.d/wordpress.ini
echo "cgi.fix_pathinfo=0" | sudo tee -a /etc/php.d/wordpress.ini
echo "date.timezone = Asia/Shanghai" | sudo tee -a /etc/php.d/wordpress.ini
echo "upload_max_filesize = 256M" | sudo tee -a /etc/php.d/wordpress.ini
echo "post_max_size = 256M" | sudo tee -a /etc/php.d/wordpress.ini
echo "expose_php = Off" | sudo tee -a /etc/php.d/wordpress.ini
vi /etc/php.d/wordpress.ini

写一个查看php信息的文件,这个用不着,要用也需要改下位置

echo "<!--?php phpinfo(); ?-->" | sudo tee -a /usr/share/nginx/html/phpinfo.php

StartSSL上申请一个免费的证书,申请时可以直接输个密码生成csr,然后在后台工具解密就得到私钥key了
上传到服务器,放 /etc/ssl 或者其它位置都可以,禁用 root 登录后 sftp 无法上传的话可以先传到其它目录,然后复制过去

sudo mv ssl.crt /etc/ssl/ssl.crt
sudo mv ssl.key /etc/ssl/ssl.key
sudo chmod 400 ssl.crt
sudo chmod 400 ssl.key

配置nginx,新建一个配置文件

sudo vi /etc/nginx/conf.d/wordpress.conf

写入以下信息,不知道内容的去nginx官方文档

# upstream主要是是作负载均衡的,这里没用
upstream php {
        server unix:/dev/shm/php-cgi.sock;
        #server 127.0.0.1:9000;
}
# 将80端口重定向到443端口,确保网站全部加密访问
server {
        listen 80;
        return 301 https://me94.me$request_uri;
}
server {
        # 监听端口,开户http2
        listen 443 ssl http2;
        #配置网站加密证书
        ssl_certificate /etc/ssl/ssl.crt;
        ssl_certificate_key /etc/ssl/ssl.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!LOW:!aNULL:!eNULL;
        # 启用HSTS,强制客户端使用HTTPS与服务器创建连接,includeSubDomains 非必需。
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
        # 网站根目录和首页
        root /usr/share/nginx/html/wordpress;
        index index.php index.html index.htm;
        # 有些东西不需要写到日志里面去
        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }
        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }
        # 配置错误页面位置,404错误wordpress会自己处理
        #error_page  404  /404.html;
        #location = /40x.html {
        #        root /usr/share/nginx/html;
        #}
        error_page  500 502 503 504  /50x.html;
        location = /50x.html {
                root /usr/share/nginx/html;
        }
        # 让wordpress的固定链接更好看
        # https://codex.wordpress.org/Using_Permalinks#Using_.22Pretty.22_permalinks
        location / {
                try_files $uri $uri/ /index.php?$args;
        }
        # 将php文件交给php-fpm来处理
        location ~ \.php$ {
                include fastcgi.conf;
                fastcgi_intercept_errors on;
                fastcgi_pass php;
        }
        # 一些图片文件之类的设置长期缓存,也不用压缩,减小服务器压力
        location ~* \.(png|jpg|jpeg|gif|ico|bmp)$ {
                access_log off;
                expires max;
                log_not_found off;
                gzip off;
        }
        # 禁止访问.ht开头的文件
        location ~ /\.ht {
                deny all;
        }
}

听说location处理优先级是这样的,匹配到高优先级的就不继续往下匹配了

(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)

重启几个服务

sudo systemctl restart nginx mariadb php-fpm

如果提示这类的错误表示少了/etc/nginx/fastcgi.conf这个配置文件

Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
nginx[2840]: nginx: [emerg] open() "/etc/nginx/fastcgi.conf" failed (2: No such file or directory) in /etc/nginx/conf.d/wordpress.conf:39

去官方源码下载

cd /etc/nginx/
sudo wget https://trac.nginx.org/nginx/export/HEAD/nginx/conf/fastcgi.conf

开启防火墙,如果不会网上搜 firewalld
参考https://fedoraproject.org/wiki/FirewallD/zh-cn
https://access.redhat.com/documentation/

sudo firewall-cmd --get-service --permanent
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --zone=public --permanent --add-service=https
sudo firewall-cmd --zone=public --list-all
sudo firewall-cmd --reload

还可以这样直接开特定端口

sudo firewall-cmd --zone=public --add-port=17500/tcp --permanent
sudo firewall-cmd --zone=public --add-port=17500/udp --permanent

如果你某次登录时有提示There were 108 failed login attempts since the last successful login.就可以把这个段的地址屏蔽掉

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="58.218.204.0/24" reject' --permanent
sudo firewall-cmd --zone=public --list-all

如果需要删除这条防火墙记录就用这个

sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="58.218.204.0/24" drop' --permanent
sudo firewall-cmd --zone=public --list-all

下载WordPress

cd /usr/share/nginx/html
sudo wget https://cn.wordpress.org/wordpress-4.4.2-zh_CN.tar.gz
sudo tar -xzf wordpress-4.4.2-zh_CN.tar.gz

备份还原数据库,在以前服务器备份,上传到新服务器导入

sudo mysqldump --add-drop-database -B wordpress --add-drop-table -u root -p wordpress | gzip > wordpress.sql.gz
sudo gunzip < wordpress.sql.gz | mysql -u root -p

更改文件权限,当然光这样设置安全性是不够的,自己去网上搜

sudo chown -R admin:nginx /usr/share/nginx/html/wordpress
sudo chmod -R 760 /usr/share/nginx/html/wordpress

打开网站安装WordPress,然后简单配置一下

sudo vi /usr/share/nginx/html/wordpress/wp-config.php

/* 好了!请不要再继续编辑。请保存本文件。使用愉快! */前面添加这几行

define('FORCE_SSL_ADMIN', true);
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
       $_SERVER['HTTPS']='on';
define( 'WP_POST_REVISIONS', 0);

基本的东西就搞定了,不过这顶多就算可以用了,如果要更安全的话,还是好好配置一下权限和服务器

最后还可以根据需要开启 Google BBR(Bottleneck Bandwidth and RTT),提速效果非常明显,一般十几倍是没啥问题
参考https://www.vultr.com/docs/how-to-deploy-google-bbr-on-centos-7

首先升级 Linux 内核

uname -r
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
sudo yum --enablerepo=elrepo-kernel install kernel-ml -y
rpm -qa | grep kernel

先查询再切换下引导,注意选版本号最大的,从上往下从0开始,

sudo egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
sudo grub2-set-default 0
sudo reboot

重启后看下版本对不对,对的话开启 BBR

uname -r
echo 'net.core.default_qdisc=fq' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv4.tcp_congestion_control=bbr' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

核实下是否开启了

sudo sysctl net.ipv4.tcp_available_congestion_control
sudo sysctl -n net.ipv4.tcp_congestion_control
lsmod | grep bbr

然后随便下载一个文件,体验一下下载速度飙升的感觉

如果还想想要清理一下系统,但是清理内核时不要把在用的给删了

sudo yum autoremove
uname -r
rpm -qa | grep kernel
sudo yum remove kernel-3.xx.0-693.17.1.el7.x86_64

评论

说两句

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据