随着项目的更新迭代,项目复杂度越来越高,项目已从单一的 PHP 开发演变成 多语言 多运行时 的大型项目,进而更新部署也变得繁琐,所有需要一个 统一 自动化 的更新部署方案。至此 Docker容器化 部署则成为一个好的选择,一、方便各种私有化部署,二、也可以根据各模块压力灵活调整配置。

Dockerfile 简单示例

经过选型,最终选择 webdevops.io https://github.com/webdevops/Dockerfile 的镜像打包,包含的目前流行的 PHP 版本,同时也提供了 Apache Nginx 的选择。

公司项目使用 Nginx PHP8 开发部署的,故选择 webdevops/php-nginx:8.1-alpine 镜像打包。

FROM webdevops/php-nginx:8.1-alpine

# 国内环境 build 建议替换 软件源
# RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g" /etc/apk/repositories
# RUN sed -i "s/dl-4.alpinelinux.org/mirrors.ustc.edu.cn/g" /etc/apk/repositories

# 项目依赖的软件 如 ffmpeg
#RUN apk add ffmpeg

# 项目依赖的PHP扩展
#RUN docker-php-ext-install \
#        bcmath \
#        ctype \
#        fileinfo \
#        json \
#        mbstring \
#        pdo_mysql \
#        tokenizer \
#        xml

# 项目代码目录
WORKDIR /app
COPY . .

# 项目nginx网站 root目录, 此示例设置为代码的 public 目录
ENV WEB_DOCUMENT_ROOT /app/public
# ENV WEB_DOCUMENT_INDEX index.php # 默认访问文件, 一般不用设置
# ENV SERVICE_NGINX_CLIENT_MAX_BODY_SIZE 50m # Nginx的 client_max_body_size
ENV APP_ENV production

RUN composer install --no-interaction --optimize-autoloader --no-dev

# 镜像模式使用 application:application 该用户组运行 一定要记得
RUN chown -R application:application .

之后 build 镜像运行部署,外置服务访问此容器 80 就可以

配置反对

配置主Web服务器,如 Nginx Kong Traefik 等配置反代规则,至此容器化部署改造就完成了。

点击这里查看: 文档链接