配置应用服务器
序言
如果在开发过程或者部署代码用的不是 PaaS ,那么就必须先配置 VPS 服务器或其他服务器资源,使其支持运行 PHP 应用。文章采用旧电脑安装 Ubuntu-16.04.4-desktop.amd64,并使用另外一台电脑远程登录,模拟实际场景,配置 Nginx + PHP-FPM.
约定
- 装有 ubuntu 环境的电脑,下文称为服务器。另外一台电脑称为本机。
- 服务器 环境下的命令行提示为
$
,在本机的 命令行提示使用>
题外话
在这里之所以采用 desktop
版本而不是 server
版本,原因是安装失败。在这里留一个快速通道,以便我后续
解决时,可以从这里传送。
ubuntu 的硬件参数
- 型号:联想 z480 i5
- 内存:8GB
- 硬盘:ATA 128G SSD
- 安装方法:U盘启动盘安装
安装语言需要选择英语,否则在后续
安装系统
这个步骤会出现一个 busybox 的安装失败错误。
amd64
amd64 版本问题主要出现在无法读取光盘的数据,根据提示与资料查阅,目前还不能解决问题。
- 尝试一 : 使用 Win32 Disk Image 等烧录工具代替 软碟通,并换新的U盘。
- 尝试二 : 尝试手动挂载镜像文件到
/cdrom
,并使用 md5 校验镜像完整性。 - 尝试三 :使用
grubinst
,并从官网手动下载引导。 - 尝试四 :使用脚本文件,修改镜像。
i386 安装成功但是其中出了问题,安装应用的时候找不到驱动器,虽然这个好修复,但强迫症的我,还是抛弃了32 位,如果有好的安装 64 位方法,请一定要告诉我,我会非常感谢你的。
相关资源:
登录
如果使用 VPS 服务器的读者,可以跳过此步骤,购买空间时,就已经安装好 SSH 服务。此步骤是为了创建登录用户,配置使其支持远程登录。
安装 Openssh
$ apt-get update
$ apt-get upgrade
$ apt-get install openssh-server
创建非根用户
根用户拥有最高的权限,能够执行任何可以执行的命令。我们应该尽量避免别人使用根用户账号进行远程登录。
$ adduser deploy // 创建账号
$ usermod -a -G sudo deploy // 加入sudo 用户组
$ passwd deploy // 设置用户密码
配置SSH
修改配置文件,禁用根用户登录,允许指定用户,并指定端口。
$ vim /etc/ssh/sshd_config
# 在文件末尾添加以下几行
Port 22
PermitRootLogin no
AllowUsers deploy
$ service sshd restart
如果对安全性有更高的要求,可以使用 ssh 密钥对认证,通过验证客户端证书,免密登录,防止密码的暴力破解。
登录
查看服务器地址 ip ,就可以远程登录,当然在这之前确保防火墙是否有拦掉该端口,这是一个好习惯。
···
ssh deploy@192.168.1.150
···
安装PHP-FPM
php-fpm 是进程管理软件,用于接收和处理来自 web 服务器的请求。每个进程存在的时间比单个 HTTP 请求,可以处理更多的请求。关于为什么使用 php-fpm ,请点击 [传送门]()
安装
> sudo apt-get install python-software-properties // 安装软件扩展包的工具
> sudo add-apt-repository ppa:ondrej/php // 安装PHP 7.2 的源,ppa 是ubuntu 系统里的个人软件源
> sudo apt-get update
> sudo apt install php7.2-fpm php7.2-mysql php7.2-curl php7.2-gd php7.2-mbstring php7.2-xml php7.2-xmlrpc php7.2-zip php7.2-opcache -y
> sudo sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php/7.2/fpm/php.ini
在 ubuntu 16 中,建议可以用 apt 代替 apt-get,apt 比起 apt-get 有高亮 和进度条的功能,其他基本一致,最后一条命令行是为了支持 php-fpm 在调用时可支持 pathinfo 路由特性。
配置
如果你想让失效的子进程超过 一定的数量 就重启 php-fpm 你可以这样设置
> sudo vi sudo vi /etc/php/7.2/fpm/php-fpm.conf
// 修改以下选项
emergency_restart_threhold = 100 // 100个子进程失效
emergency_restart_ubterval = 5m // 指定五分钟
根据我们的业务配置进程池
> sudo vi sudo vi /etc/php/7.2/fpm/pool.d/www.conf
// 这里的配置主要是
user = deploy
group = deploy
listen = 127.0.0.1:8000
pm.max_children = 20
更多详细配置,就不在再描述,需要根据我们的应用设计来配置
$ sudo service php7.2-fpm restart
Nginx
在性能调优这块, Nginx
+ php-fpm
常常被用来优化 php 。
安装
> sudo apt install nginx
虚拟主机
- 创建 web 可访问的目录,切记前面我们用了deploy 进行设置 php-fpm,所以目录的所有者应该是 deploy
-
添加虚拟主机的配置文件
server { listen 80; server_name example.com; index index.php; client_max_body_size 50M; error_log /home/liaobw/apps/logs/example.error.log; access_log /home/liaobw/apps/logs/example.access.log; root /home/liaobw/apps/example.com/current/public; location / { try_files $uri $uri /index.php$is_args$args; } location ~ \.php { try_files $uri = 404; fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_index index.php; fastcgi_pass 127.0.0.1:8000; } }
重启服务
> sudo service nginx restart
结束语
由此,nginx 结合 php-fpm 的运行模式就大功告成啦
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: