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

2023-11-12 15:34:16 浏览数 (2)

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

0 人点赞