前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在腾讯云轻量服务器通过Nginx Unit部署PHP应用

在腾讯云轻量服务器通过Nginx Unit部署PHP应用

原创
作者头像
您这种情况持续多久了
修改2023-11-12 12:03:50
6232
修改2023-11-12 12:03:50
举报
文章被收录于专栏:NginxUnit

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.qcloud.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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x001 简介
  • 0x002 前置条件和环境要求
  • 0x003 安装部署Nginx Unit
  • 0x004 编写PHP应用配置文件
  • 0x005 部署ThinkPHP 6应用
  • 0x006 测试验证
  • 0x007 总结
  • 0x008 参考资源
相关产品与服务
轻量应用服务器
轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门软件打包实现一键构建应用,提供极简上云体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档