0x001 简介
本文简单介绍在腾讯轻量服务器Ubuntu上安装Nginx Unit。并通过Nginx Unit部署运行了ThinkPHP框架。并进行简单的可用性测试。NGINX Unit 是Nginx团队的又一开源力作。一个通用的应用服务器。目前已支持Go、JavaScript (Node.js)、Java、Perl、PHP、Python、Ruby语言的应用。以可作为反向代理服务器进行工作。完全通过可以通过配置API已JSON配置文件的方式进行更新。请参考中文官网的配置和英文官网的安装指引。
0x002 前置条件和环境要求
笔者假定读者已掌握基础的Linux使用知识,并且拥有良好的网络。以下操作步骤均在以下环境操作并得到验证。
软件名 | 版本 | 备注 |
---|---|---|
Ubuntu Server | 20.04 LTS | 已通过apt-get 更新到最新,并重启过 |
Nginx Unit | 1.30 | 截止发文时为最新版本,支持其他系统版本和发行版。可自行参考文档安装 |
PHP | 7.4x | 可自行选择其他版本(此版本操作系统nginx unit 只支持7.4x版本PHP) |
为明确本文的阅读,特做以下约定
1. 单独一个代码块的为一行命令,特别说明的除外
0x003 安装部署Nginx Unit
1. 登录腾讯云,选购一台轻量服务器。可以在这里选双十一优惠(https://curl.zijiebao.com/8beyH8BM)
2. 选择系统镜像为Ubuntu 20.04 LTS
3. 付款购买
4. 在你购买的实例上点击登录,进入ssh。输入
代码语言:javascript复制sudo apt-get update
代码语言:javascript复制sudo apt-get upgrade
重启服务器,并通过腾讯云OrcaTerm 安装增强插件。
5. 添加Nginx Unit密钥,注意以代码是一行
代码语言:javascript复制sudo curl --output /usr/share/keyrings/nginx-keyring.gpg
https://unit.nginx.org/keys/nginx-keyring.gpg
执行完是这样
6. 添加Nginx Unit软件源
代码语言:javascript复制sudo nano /etc/apt/sources.list.d/unit.list
粘贴以下内容
代码语言:javascript复制deb [signed-by=/usr/share/keyrings/nginx-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ focal unit
deb-src [signed-by=/usr/share/keyrings/nginx-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ focal unit
执行完是这样
按下Ctrl O,这时nano会让你确认文件名。回车即可。提示写入成功后。按下Ctrl X退出nano
7. 更新软件源并安装Nginx Unit和PHP模块
代码语言:javascript复制sudo apt-get update
代码语言:javascript复制sudo apt-get install unit
代码语言:javascript复制sudo apt-get install unit-dev unit-php
代码语言:javascript复制sudo systemctl restart unit
这里需要输入y
安装PHP拓展(可自行选择)
代码语言:javascript复制sudo apt-get install php-mysql php-curl php-gd php-mbstring php-pdo php-bcmath
到这一步再通过systemctl重启unit服务即可。通过以上步骤即可完成安装。
0x004 编写PHP应用配置文件
在上一步中,我们已经成功安装好了Nginx Unit和PHP模块,下面我们将使用提供的Nginx Unit默认示例,测试一下PHPINFO页面。在我们安装时页面曾经有如下的提示信息。可查看0x003 安装部署Nginx Unit章节中的第七步的截图。这里再次提供一下此截图强调一下应该看到的部分。
这里我们通过这个examples来理解和运行一个最简单的应用。
examples结构如下,unit.config为配置文件。phpinfo-app/index.php为具体应用
代码语言:javascript复制{
"applications": {
"example_php": {
"type": "php",
"processes": 2,
"root": "/usr/share/doc/unit-php/examples/phpinfo-app",
"index": "index.php"
}
},
"listeners": {
"*:8300": {
"pass": "applications/example_php"
}
}
}
listeners配置为监听的端口,pass配置此端口会转向哪个应用。
运行
代码语言:javascript复制sudo curl -X PUT --data-binary @unit.config --unix-socket /var/run/control.unit.sock http://localhost/config
当看到如下回显时,即配置成功
代码语言:javascript复制{
"success": "Reconfiguration done."
}
通过curl http://localhost:8300 查看是否有获取到数据。如果需要也可以通过公网IP访问(需要放通对应防火墙)
0x005 部署ThinkPHP 6应用
安装composer(这里会可能弹出警告,提示提示composer版本太老,可忽略)
代码语言:javascript复制apt-get install composer
代码语言:javascript复制composer create-project topthink/think=v6.1.0 mytpapp
输出以下信息即安装成功
对项目进行调整一下,进入mytpapp目录(这部分代码每一行为一个代码块)
代码语言:javascript复制cd mytpapp # 进入目录
chmod -R 777 runtime/ #调整部分目录权限
sudo mv mytpapp/ /var/opt/ # 移动到/var/opt/
cd /var/opt #切换目录
sudo chown -R unit:unit mytpapp/ # 修改权限
创建php.config
代码语言:javascript复制{
"listeners":{
"*:443":{
"pass":"routes",
"tls":{
"certificate":"bundle",
"conf_commands":{
"ciphersuites":"TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256",
"minprotocol":"TLSv1.2"
},
"session":{
"cache_size":1024,
"timeout":60,
"tickets":[
"qpV1KjTOqEisH2nnY76zUciSNlfrdu2 BWCwtgwAr6EB uk2rK3PVXYAlAdz8DKl",
"D596nU2DS8i hG3S4Q2bzoMRUjBRkMug1Llrn42lVMaqaa/s9C/6obYOSOGrTpvF"
]
}
}
}
},
"routes":[
{
"match":{
"uri":[
"!/static/*",
"*.php",
"*.php/*"
]
},
"action":{
"pass":"applications/phpapp/direct"
}
},
{
"action":{
"share":"/var/opt/mytpapp/public$uri",
"fallback":{
"pass":"applications/phpapp/index"
}
}
}
],
"applications":{
"phpapp":{
"type":"php",
"processes":2,
"targets":{
"direct":{
"root":"/var/opt/mytpapp/public"
},
"index":{
"root":"/var/opt/mytpapp/public",
"script":"index.php"
}
}
}
}
}
如果有不一样的路径,请自行调整/var/opt/mytpapp 部分对应目录,其他位置请参考文档再进行修改。
上面的配置文件中我配置看ssl证书,这里需要将nginx的证书的key和pem合成到一个文件中(就是对key文件的内容复制到pem中合成为一个文件)合成出来的命名为bundle.pem
长这个样子。上面是证书下面是key
操作完以上步骤后确保目录结构如下
现在我们就可以开始部署了
1. 上传SSL证书,需要在上面bundle.pem文件所在目录内执行,
代码语言:javascript复制sudo curl -X PUT --data-binary @bundle.pem --unix-socket /var/run/control.unit.sock http://localhost/certificates/bundle
如果删除SSL证书,只需要将PUT修改为DELETE即可
2. 开始运行
代码语言:javascript复制sudo curl -X PUT --data-binary @php.config --unix-socket /var/run/control.unit.sock http://localhost/config
如果提示
代码语言:javascript复制{
"success": "Reconfiguration done."
}
恭喜你部署成功
如果需要删除这个部署的应用,只需要将PUT修改为DELETE即可,即
代码语言:javascript复制sudo curl -X DELETE --data-binary @php.config --unix-socket /var/run/control.unit.sock http://localhost/config
0x006 测试验证
那就已部署成功了,访问你的https。即可看到如下页面
0x007 总结
以上我们按步骤介绍了安装和应用的部署方案,可参考此参考资源中3. 的Gitub仓库,提供了一个最简单的配置模板。
0x008 参考资源
1. Unit中文官网. url: https://www.nginx-cn.net/products/nginx-unit/.
2. Unit英文官网. url: https://unit.nginx.org/installation/.
3. https://github.com/tusdasa/nginx-unit-php-template