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