配置应用服务器

序言

如果在开发过程或者部署代码用的不是 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

虚拟主机

  1. 创建 web 可访问的目录,切记前面我们用了deploy 进行设置 php-fpm,所以目录的所有者应该是 deploy
  2. 添加虚拟主机的配置文件

    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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
1
粉丝
0
喜欢
2
收藏
0
排名:1579
访问:1907
私信
所有博文
社区赞助商