轻松部署 Laravel 应用 | 《06. 手动部署 - 安装 PHP-FPM》

:clap: 本系列持续更新中,欢迎关注:https://github.com/wi1dcard/laravel-deploy...

由于课程上下文关联比较紧密,在开始前请先阅读 本文

你的支持是我写作的动力;关注我的客官们,请在右上角点个赞,将会让文章在首页展示,帮助更多人。

感谢 :clap: !

PHP 环境是运行 Laravel 应用必不可少的组件之一,本节将带领大家安装 PHP 7.2。

配置第三方软件源

由于 Ubuntu 的官方软件源通常不包含最新版本的 PHP,因此需要添加一个包含最新 PHP 的第三方软件源。

在添加之前,我们首先安装名为 software-properties-common 的软件包,它提供了快速管理软件源的实用脚本:

$ apt install -y software-properties-common

相比之前执行的 apt install 命令,这次我添加了 -y 选项,表示当 APT 遇到询问时默认确认,避免再次输入 Y 并回车。

随后,执行以下脚本添加第三方 PHP 软件源:

$ add-apt-repository -y ppa:ondrej/php

成功后别忘记刷新:

$ apt-get update

安装 PHP

PHP 的安装实际上分为三个软件包:

  • PHP - PHP 自身。
  • PHP-CLI - PHP 的命令行接口,通俗地说,在命令行内执行 php 便依赖于此包。
  • PHP-FPM - 全称为 PHP FastCGI Process Manager,用于管理 PHP 进程,并提供 FastCGI 接口与 Nginx 交互;浏览网页时的请求便是由 Nginx 交由 PHP-FPM 处理的。

apt install 支持多参数,所以我们不必执行多次安装,只需在单条命令内写明多个软件包即可:

$ apt install -y php7.2 php7.2-cli php7.2-fpm

按照 Laravel 5.8 安装文档 的说明,接着安装几个必备的 PHP 扩展:

$ apt install -y php7.2-mbstring php7.2-xml php7.2-bcmath

注意:由于 PDO 等扩展已经内置在 PHP 中,故无需额外安装。

对于不同项目的不同依赖,可能有必要安装以下扩展,根据实际情况选择即可:

$ apt install php7.2-curl php7.2-gd php7.2-mysql php7.2-opcache php7.2-zip php7.2-sqlite3

有个小技巧是,你可以通过 apt-cache 命令来搜索当前软件源内的包:

$ apt-cache search php7.2

例如以上命令,将会得到所有名称、描述等信息内包含 php7.2 字样的软件包:

php-amqp - AMQP extension for PHP
php-apcu - APC User Cache for PHP
php-geoip - GeoIP module for PHP
...

管理 PHP-FPM 服务

与管理 Nginx 服务类似,你同样可以通过 servicesystemctl 命令管理 PHP-FPM 服务:

$ service php7.2-fpm restart # 重启 PHP-FPM
$ service php7.2-fpm start # 启动 PHP-FPM
$ service php7.2-fpm stop # 停止 PHP-FPM
$ systemctl enable php7.2-fpm # 启用 PHP-FPM 开机启动
$ systemctl disable php7.2-fpm # 禁用 PHP-FPM 开机启动

注意:不同版本的 PHP-FPM 服务名是不一致的。例如 7.2 为 php7.2-fpm,7.3 为 php7.3-fpm,以此类推……

确认 PHP-FPM 正常运行

通过以下命令可确认 PHP-FPM 进程正在运行:

$ ps aux | grep php

其中:

  • ps aux 用于列出系统当前正在运行的所有进程的所有信息。
  • | 名为管道操作符,将前一条命令的标准输出连接到下一条命令的标准输入。
  • grep 是一款文本搜索工具,常用来过滤命令行输出;php 是搜索的关键词。

ps 将进程信息输出到 grep 进行过滤,后者筛选出包含 php 字样的行,再将它们输出。于是,它们相结合,产生的效果便是这样:

root      6546  0.0  3.8 315484 19340 ?        Ss   14:13   0:00 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
www-data  6550  0.0  1.0 315484  5260 ?        S    14:13   0:00 php-fpm: pool www
www-data  6551  0.0  1.0 315484  5260 ?        S    14:13   0:00 php-fpm: pool www
root      6566  0.0  0.1  15964   920 pts/0    S+   14:13   0:00 grep --color=auto php

忽略最后一行(这是我们正在执行的 grep 命令),可观察到有 php-fpm 进程正在运行中。

若 PHP-FPM 进程不存在,那么输出将只有孤零零的 grep

root      6722  0.0  0.1  15964   920 pts/0    S+   14:24   0:00 grep --color=auto php

提示:你可以结合上文提到的 service 命令,将服务进程手动停止试试看;测试完毕不要忘记再次启动。

本作品采用《CC 协议》,转载必须注明作者和本文链接
Former WinForm and PHP engineer. Now prefer Golang and Rust, and mainly working on DevSecOps and Kubernetes.
本帖由 Summer 于 5年前 加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 9
wanghan

看了这篇文章,才知道原来php是安装3个东西,感谢作者

5年前 评论
wanghan

@Wi1dcard 一定继续关注~~

5年前 评论

文章讲解的非常细致. 如果能将NPM yarn redis elasticserch Memcached 弄一个扩展篇幅讲解就好了,毕竟开发中这些都是常用的软件.虽然说不难安装,对于文档来说,便于初学者学习

5年前 评论

@Flourishing 好的,列入后期计划。

5年前 评论

ps aux | grep php|grep -v grep

多版本PHP用apt直接安装怎么分开来

4年前 评论

@lovecn 嗯,是的,可以再连接一个管道,使用 grep -v 来排除不需要的行。不过由于增加了复杂度,并且没有带来非常显而易见的好处,鉴于面向的阅读群体,暂时不考虑修改此处的命令行。不过还是感谢提出建议。

另外,不建议在一台服务器上安装多版本 PHP,容易造成混淆。我也暂时想不出什么场景需要多版本 PHP 的支持。

4年前 评论

自己买的学习服务器是centos, 早知道买乌班图了。。。

4年前 评论

@Wi1dcard 期待新的课程,centOS改成了乌班图果断跟着课程敲一遍,收货丰富

4年前 评论

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