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

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

原创
作者头像
您这种情况持续多久了
发布2023-11-12 15:34:16
3090
发布2023-11-12 15:34:16
举报
文章被收录于专栏:NginxUnit

0x001 简介

在上一期我们介绍了在腾讯云轻量服务器通过Nginx Unit来部署PHP应用的方式,同时Nginx Unit也是支持以docker方式部署运行的,本期我们将介绍通过docker镜像的方式来部署部署Nginx Unit的PHP应用。这里不在赘述Docker部署的优点和再次介绍Nginx Unit。读者可自行阅读上一篇文章和互联网上的介绍。

0x002 前置条件和环境要求

笔者假定读者已掌握基础的Linux使用知识、会使用基础的Docker命令掌握基本的概念呢,并且拥有良好的网络。以下操作步骤均在以下环境操作并得到验证。

软件名

版本

备注

Ubuntu Server

20.04 LTS

已通过apt-get 更新到最新,并重启过

Client: Docker Engine - Community

20.10.5

\

Server: Docker Engine - Community

24.0.5

\

请在创建Lighthouse时选择如下镜像,上一期文章就是选择此镜像。如果没有的话可以在此处购买 https://curl.qcloud.com/L10bHNiM

请在点击登录后,执行

代码语言:javascript
复制
sudo apt-get update
代码语言:javascript
复制
sudo apt-get upgrade

重启机器后,请执行后续步骤。

0x003 制作Docker 镜像

1. 创建Dockerfile,内容如下

代码语言:javascript
复制
FROM unit:php
RUN docker-php-ext-install -j$(nproc) pdo_mysql
COPY ./php.json /docker-entrypoint.d/
COPY ./bundle.pem /docker-entrypoint.d/
WORKDIR  /phpapp
COPY thinkphp /phpapp/
RUN chown -R unit:unit /phpapp
EXPOSE 443/tcp

2. 创建Nginx Unit配置文件,内容如下。如需要修改请配套修改上方Dockerfile中的目录

代码语言: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": "/phpapp/public$uri",
                "fallback": {
                    "pass": "applications/phpapp/index"
                }
            }
        }
    ],

    "applications": {
        "phpapp": {
            "type": "php",
            "targets": {
                "direct": {
                    "root": "/phpapp/public"
                },

                "index": {
                    "root": "/phpapp/public",
                    "script": "index.php"
                }
            }
        }
    }
}

3. 创建bundle.pem 文件,将域名证书合成到其中

代码语言:javascript
复制
-----BEGIN CERTIFICATE-----
nginx 证书.pem文件内容
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
nginx 证书.key文件内容
-----END RSA PRIVATE KEY-----

4. 创建thinkphp目录,将已有的thinkphp复制到其中。此时目录结构如下。可查看参考资料部分 4. thinkphp模板

代码语言:javascript
复制
├── bundle.pem
├── Dockerfile
├── php.json
└── thinkphp
    ├── app
    ├── composer.json
    ├── composer.lock
    ├── config
     ....

如果成功进行了以上步骤,下面我们开始构造一个镜像本地测试一下。

1. 在有以上目录的下执行

代码语言:javascript
复制
sudo docker build . -t thinkphp-unit #这个.是指在当前目录构建

稍等,这里需要拉取基础镜像和构建,没提示报错的情况下,镜像就构建成功了

2. 下面运行一下镜像

代码语言:javascript
复制
sudo docker run -d -P --name test thinkphp-unit # P是随机分配端口

看到如下提示即是镜像运行成功,红框部分是外部镜像访问的端口

代码语言:javascript
复制
curl -k -I -s https://127.0.0.1:32776 # 这里的端口要改成上面红框里的实际端口,不同的机器是不一样的

即可看到输出

0x004 发布到腾讯云容器镜像服务

前往容器镜像服务https://console.cloud.tencent.com/tcr/repository/创建一个镜像仓库。参考容器镜像服务快速入门https://cloud.tencent.com/document/product/1141/63910。对此服务的操作和通过Dcoker登录镜像服务再处就不再赘述。

现在我们把这个镜像推送到这个仓库里,

先修改标签

代码语言:javascript
复制
sudo docker tag 96d299fed394 ccr.ccs.tencentyun.com/tusdasa/thinkphp-unit:6.0 # 这里的96d299fed394 是IMAGE ID 

再进行推送

代码语言:javascript
复制
sudo docker push ccr.ccs.tencentyun.com/tusdasa/thinkphp-unit:6.0

如图即推送完毕

这里也节约看到这个镜像

0x005 通过命令行运行docker应用

通过上面的步骤,我们将构建的docker进行推送到腾讯云容器镜像服务,即可在其他的服务器上拉取镜像进行部署。下面我将演示在另外一台轻量服务器上拉取镜像并进行部署

代码语言:javascript
复制
sudo docker pull ccr.ccs.tencentyun.com/tusdasa/thinkphp-unit:6.0 # 这里要改成自己的

如下即拉取完毕

运行镜像

代码语言:javascript
复制
sudo docker run -d --name unit -P  ccr.ccs.tencentyun.com/tusdasa/thinkphp-unit:6.0
代码语言:javascript
复制
sudo docker ps -a

访问端口验证正常,此处可参考上运行本地镜像部分,此处不在赘述

0x007 总结

本文解释了如何在腾讯云轻量服务器上构建一个Nginx Unit的PHP堆栈镜像,并推送腾讯云镜像服务中,并在另外一台服务器上拉取镜像实现一次构建,到处部署。

0x008 参考资料

1. DockerHub https://hub.docker.com/

2. Install Docker Enginehttps://docs.docker.com/engine/install/

3. Nginx Unithttps://unit.nginx.org/installation/#docker-images

4. thinkphp模板https://github.com/tusdasa/nginx-unit-php-thinkphp-docker-template

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x001 简介
  • 0x002 前置条件和环境要求
  • 0x003 制作Docker 镜像
  • 0x004 发布到腾讯云容器镜像服务
  • 0x005 通过命令行运行docker应用
  • 0x007 总结
  • 0x008 参考资料
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档