升级PHP 7.1并启用PHP-FPM

一个多月前把系统升级到了Debian Buster,同时Apache也升级到了2.4.27,然后就发现HTTP/2没法用了,因为那时忙别的事情,也就没去管它。

今天闲着无事,就翻了翻文档,才发现在Apache 2.4.27中,Apache MPM (Multi-Processing Module) prefork取消了对HTTP/2的支持。因此,准备随即切换到Apache MPM event。

但随之而来的一个新问题就是,Apache服务器下,PHP所使用的mod_php模块只能支持prefork,因此,同时要将PHP切换到php-fpm以在FastCGI模式下运行PHP。然后想想,不如同时把PHP升级到7.1版本算了。

首先要做的,就是卸载PHP 7.0,虽然直接安装也行,但我还是选择了卸载,反正留着也没用。如果有安装phpMyAdmin,因为依赖被卸载,所以也会连带被卸载,这里直接选择卸载重装。

apt-get purge phpmyadmin php7.0-gd php7.0-xml php7.0 php-pear php7.0-mysql php7.0-common
apt-get autoremove

然后重新安装PHP 7.1,可以一步安装完所有包,也可以分开安装。这里为了写得清楚一点,分开写。但需要注意的是,如果一步安装PHP 7.1基本包的同时安装php7.1-fpm,默认就不会安装包含了mod_php模块的libapache2-mod-php7.1,如果你要用mod_php,要么分开两步装,要么别装php7.1-fpm。

首先安装LAMP需求的包。

apt-get install php7.1 php-pear php7.1-mysql

然后是WordPress需求的包。

apt-get install php7.1-gd php7.1-xml

然后是php-fpm。

apt-get install php7.1-fpm

最后装回phpMyAdmin,需要注意的是,phpMyAdmin默认安装的需求包是php7.0-mbstring,在PHP 7.1下会提示缺少mbstring,这个问题困扰了好久!最后发现,直接选择安装php7.1-mbstring就解决了!

apt-get install phpmyadmin php7.1-mbstring

安装完成之后重新配置以下phpMyAdmin就行。可以参考这里:写给像我这样的新手的phpMyAdmin教程 (Apache)

之后就是启用PHP-FPM了。

首先关闭Apache服务器。

service apache2 stop

再执行以下命令。

a2enmod proxy_fcgi setenvif
a2enconf php7.1-fpm
a2dismod php7.1
a2dismod mpm_prefork
a2enmod mpm_event

最后重新启动Apache,这样就大功告成了,很简单。然后测试一下,我遇到了些问题,最后发现是自己写的.htaccess里面有一些PHP语句需要更新,这方面注意一下。

使用iptables-persistent自动加载iptables规则 (Debian)

以前写过一个将脚本写入/etc/network/ifpreup.d目录下来加载iptables规则的方法:开机自动加载iptables规则 (Debian)

但是有些主机商的系统并不能很好地支持这种方式,所以这次再写一篇用iptables-persistent来实现的方法。

值得注意的是,iptables-persistent不仅支持IPv4规则,也支持IPv6规则,功能非常全面,而且使用非常方便。下面重点讲讲如何进行配置,适用于Debian和Ubuntu。

首先配置好iptables规则,如有需要,同时配置好ip6tables规则。

然后安装iptables-persistent。

apt-get update
apt-get install iptables-persistent

安装过程中,交互安装程序会问你是否要导入已经配置的IPv4和IPv6规则,选是就直接导入生效了,非常方便。

那么以后如果要修改iptables或ip6tables的配置怎么办呢?其实也很简单,iptables-persistent的配置文件有两个,分别是/etc/iptables/rules.v4和/etc/iptables/rules.v6。

重新配置完iptables或ip6tables规则后执行以下命令就可以。

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

通过这种方法配置iptables更为简便和直观,更加推荐。

Debian开启BBR算法

Linux Kernel 4.9中,增加了一种全新的TCP拥堵控制算法——BBR,拥有着非常优秀的性能,同时也保证了和其他TCP拥堵控制算法的相容性。BBR的目的是要尽量跑满带宽,并且尽量不要有排队的情况。

由于Linux Kernel 4.9还未正式发布,现阶段Debian要使用BBR,比较简单的方法只有通过experimental源来安装。

虽然Linux Kernel 4.9已经正式发布,但还在Debian的sid源,现阶段Debian要使用BBR,比较简单的方法只有通过sid源来安装。

首先在/etc/apt/sources.list中添加experimental源,用文本编辑器在文件最后添加以下内容。

首先在/etc/apt/sources.list中添加sid源,用文本编辑器在文件最后添加以下内容。

deb http://httpredir.debian.org/debian experimental main
deb http://httpredir.debian.org/debian sid main

需要注意的是,apt-get默认不会安装experimental源的包,所以,用以下命令安装。

apt-get update
apt-get -t experimental install linux-image-4.9.0-rc8-amd64-unsigned
apt-get install linux-image-4.9.0-1-amd64-unsigned

然后重启,默认就是使用新的内核,你也可以选择将老的内核删除。默认的TCP拥堵控制算法不是BBR,还要通过配置文件开启。

创建一个/etc/sysctl.d/local.conf文件,写入以下内容。

net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

然后输入以下命令使配置生效。

sysctl --system

再执行以下命令看下,如果结果里面有bbr说明已经成功开启。

sysctl net.ipv4.tcp_available_congestion_control

最后再输入以下命令,看到tcp_bbr模块就说明BBR已经启动。

lsmod | grep bbr

这样就搞定了,等Linux Kernel 4.9正式发布之后,开启就更简单了,Debian 9 (Stretch)正式版发布时应该会直接使用4.9或更新的内核,到时候直接开启就行。

Supervisor新手教程 (Debian)

虽然Supervisor其实很简单,想想还是写个教程吧,方便像我这样的新手。

首先是安装,Debian下直接apt-get就行,Ubuntu也一样。

apt-get update
apt-get install supervisor

其实Debian下安装完就已经在运行了,Ubuntu下似乎要手动执行或者重启一下。

接下来就是写要托管进程的配置文件了,放在/etc/supervisor/conf.d文件夹下命名为*.conf的话supervisor会自动读取运行。

创建一个example.conf

vi /etc/supervisor/conf.d/example.conf

然后写配置文件。完整的配置参数还是去官网找吧,这里就写点简单的。

[program:example]
command=/usr/local/bin/example -config
autorestart=true
user=nobody

第一行是托管的程序名称,可以自己定义,不用和运行的程序文件同名,只要不和托管的其他程序名称重名就行,第二行是运行命令,要写可执行文件的完整路径并且可以在后面加运行参数,第三行是设置进程被杀后自动重启托管的程序,第四行是执行托管的用户,应以能正常运行的最低权限用户运行程序以提高安全性。

保存退出,之后重启一下supervisor服务,example就已经在运行了。可以输入以下命令来查看运行状态。

supervisorctl status

就写这么多,高级的用途还是翻官方文档吧。

开机自动加载iptables规则 (Debian)

Linux下的iptables非常强大,但配置了iptables规则之后每次重启规则就没了,其实,有个很简单的方法可以让iptables规则开机自动加载。本文的方法适用于Debian和Ubuntu,其他Linux应该也类似。

首先,配置好所有的iptables规则。

然后保存到一个文件中。

iptables-save > /etc/iptables

然后创建一个自启动文件,我习惯用vi,其实所有文本编辑器都行。

vi /etc/network/if-pre-up.d/iptables

在里面写如下内容。

#!/bin/sh
/sbin/iptables-restore < /etc/iptables

之后,赋予该自启动文件运行权限。

chmod +x /etc/network/if-pre-up.d/iptables

大功告成,非常简单!赶紧重启服务器验证一下吧,iptables策略应该已经可以开机自动加载了。

写给像我这样的新手的FTPS (FTP over SSL)教程 (Debian)

虽然WordPress已经可以不依赖FTP,但FTP作为一个简单而常用的基本服务,还是有必要写一个教程。但是呢,FTP不安全!FTP不安全!FTP不安全!重要的事情说三遍。WordPress是支持FTPS的,其他也有很多支持FTPS的客户端,其实FTP over SSL的名称有很多,FTPS (FTPES, FTP-SSL, S-FTP, FTP Secure),各种叫法,都是指的这东西,知道是一回事儿就行。

FTPS的服务器端似乎有不少,不过还是推荐大名鼎鼎的vsftpd,首先是安装。

apt-get install vsftpd

然后进行配置,我还是用vi,你们文本编辑器随意,自己习惯就好。

vi /etc/vsftpd.conf

找到以下几行,改成如下所示,有几行去掉备注就好。

anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES

保存并退出。然后创建FTP用户,用户名随意,这里用的ftpuser1,改成自己设定的

adduser ftpuser1

按照要求输入用户的密码,不要留空。

这个时候要设置FTP的主目录。首先更改FTP主目录所有者为root。

chown root:root /home/ftpuser

在主目录下为ftpuser1创建一个文件目录,并将该目录的所有者设置为ftpuser1

mkdir /home/ftpuser/files
chown ftpuser1:ftpuser /home/ftpuser/ftpuser1

虽然不是必须,但有些人可能会为WordPress创建一个FTP用于更新、下载插件和主题等,我以前也是这样做的。如果你是为WordPress配置FTP,需要在wp-config.php里面加如下代码,但不推荐

if( is_admin() ) {

 add_filter( 'filesystem_method', create_function( '$a', 'return "direct";' ) );

 define( 'FS_CHMOD_DIR', 0751 );

}

这时,实际上已经可以用FTP了,但是,FTP不安全!FTP不安全!FTP不安全!重要的事情再说三遍。下面为FTP设置SSL。这里默认你已经申请到了可以用的证书,具体如何申请证书改天再写一篇吧。为了方便管理证书,先创建一个放置证书的文件夹。

mkdir /etc/ssl/private/

可能有些系统上已经有这个文件夹了,那就直接下一步。创建一个证书文件,这里还是用vi。

vi /etc/ssl/private/vsftpd.pem

把申请到的证书连同CA的中间证书先后贴进去做成证书链,有些CA会给你做好打包证书,那就直接贴就行了。

然后创建私钥文件ssl.key,把申请证书用的私钥贴进去。

vi /etc/ssl/private/ssl.key

注意如果私钥是被加密过的,这里要解密,解密后命名为vsftpd.key,当然,这两个文件名都可以任意,只要后面配置的路径和文件名对就行。

openssl rsa -in /etc/ssl/private/ssl.key -out /etc/ssl/private/vsftpd.key

接下来编辑vsftpd的配置文件。

vi /etc/vsftpd.conf

在文件的最后那里找到下面这行,改成如下所示。

rsa_cert_file=/etc/ssl/private/vsftpd.pem

然后再在文件最后添加这些内容。

rsa_private_key_file=/etc/ssl/private/vsftpd.key
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

最后重启一下vsftpd服务。

service vsftpd restart

到这里FTPS就可以用了,你可以用支持SSL的FTP客户端连接你的FTP。

而对于WordPress,如果你选择使用FTP来管理文件,接下来要做的就是去网站后台把刚才设置的FTP的地址、用户名和密码维护进去,然后就可以直接在页面上进行更新,安装插件、主题等操作了。

写给像我这样的新手的LAMP教程 (Debian) ——开站纪念

开站前原本想用LNMP方案的,因为以前尝试过的一键部署就是LNMP (CentOS),相对来讲对Nginx也比较熟悉一点,但这次换了Debian又想尝试一把Apache,就用了LAMP,本新手教程同样适用于Ubuntu。废话不多说,写正题,sudo不加了,不是root登录的自己加吧。

首先更新一下。

apt-get update
apt-get upgrade

然后安装Apache。

apt-get install apache2

测试一下,http://IP,看到It works!就行了。

然后安装MySQL。

apt-get install mysql-server

会让你设置root密码,强度高一点,随便设置就行。

运行这个命令进行安装之后的配置。

mysql_secure_installation

看到这个。

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

嗯,输入刚才的密码。一长串问题跟着选y就行了。

接下来安装PHP,一般用PHP5,较新的系统可以考虑PHP7.0,安装PHP5的命令如下。

apt-get install php5 php-pear php5-mysql

如果选择PHP7.0,安装命令如下,很简单的把5换成7.0就行。

apt-get install php7.0 php-pear php7.0-mysql

重启一下Apache。

service apache2 restart

就这么简单,大功告成。啥,你说我等于啥也没说?是的,后续的等下一篇再写吧。