Docker 中部署 Openresty(nginx)如何支持日志切割?

阅读时长 4 分钟读完

在使用 Docker 部署 Openresty(一种基于 Nginx 的 Web 服务器)时,我们常常需要考虑日志文件的处理。由于 Openresty 本身并没有提供日志切割的功能,我们需要自行配置实现。

本文将介绍如何在 Docker 中部署 Openresty,并实现日志切割。

准备工作

在开始配置之前,请确保已经安装 Docker 及 docker-compose 工具。

此外,我们需要准备如下文件:

  • nginx.conf:Openresty 配置文件。
  • logrotate.conf:日志切割配置文件。

Docker 部署 Openresty

首先,我们需要编写一个 Dockerfile 文件,用于构建 Openresty 镜像。以下为 Dockerfile 文件内容:

-- -------------------- ---- -------
---- ------------------------------

- -----------
---- ---------- ------------------------------------------

- -- --------- --
--- --- --- ---------- ---------

- -- --------- --------
---- -------------- ----------------------

- ------------
--- ----- ------------------------------- -- -
    ----- -- --- -------------------------------

以上内容主要实现了以下几个功能:

  1. openresty/openresty:alpine-fat 为基础镜像。
  2. nginx.conf 文件复制到镜像中 /usr/local/openresty/nginx/conf/nginx.conf 路径处。
  3. 安装 logrotate 工具。
  4. logrotate.conf 文件复制到镜像中 /etc/logrotate.d/nginx 路径处。
  5. 创建日志目录,并指定权限。

在 Dockerfile 所在目录下执行以下命令,即可构建镜像:

构建完成后,我们可以使用以下命令启动容器:

这里我们将容器的 80 端口映射到宿主机的 80 端口,方便访问。

日志切割配置

接下来,我们需要配置日志切割功能。

使用 logrotate 工具进行日志切割是一个常用且简单的方式。我们需要在 logrotate.conf 文件中指定需要切割的日志文件、切割周期等详细信息。

以下为示例 logrotate.conf 文件内容:

-- -------------------- ---- -------
------------------------------------------ -
  -----
  ------ -
  --------
  -------------
  ---------
  ----------
  ------ --- ----- -----
-

以上内容主要实现以下几个功能:

  1. 指定需要切割的日志文件为 /usr/local/openresty/nginx/logs/access.log
  2. 指定日志切割周期为每天。
  3. 指定保留日志文件的数量为 7 个。
  4. 启用 Gzip 压缩。
  5. 延迟压缩,需要等到下一个轮换周期才压缩。
  6. 如果指定日志文件不存在,不要报错。
  7. 如果指定日志文件为空,不需要轮换。
  8. 指定切割之后创建的新文件的权限为 644,并且用户、用户组为 nginx。

配置 Openresty

nginx.conf 配置文件中,我们需要进行以下配置:

以上配置表示将 Openresty 的访问日志输出到 /usr/local/openresty/nginx/logs/access.log 文件中。

测试

现在,我们启动 Docker 容器并访问 Openresty 服务,即可生成日志文件。日志文件每天会按照设置进行切割。

我们可以使用以下命令查看容器中的日志文件:

我们可以使用以下命令查看日志文件中的内容:

总结

通过以上步骤,我们在 Docker 中部署 Openresty 并实现了日志切割功能。这为我们在使用 Docker 部署应用时处理日志文件带来了灵活的解决方案。

除了使用 logrotate 工具进行日志切割,我们还可以使用其他方法实现,如:日志切割 Lua 脚本(需要对 Nginx 的 Lua 模块有深入了解)。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f5a6abf6b2d6eab3e76f01

纠错
反馈