本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或从新修改使用,但须要注明来源。 署名 4.0 国际 (CC BY 4.0)html
本文做者: 苏洋nginx
建立时间: 2019年04月27日 统计字数: 2001字 阅读时间: 4分钟阅读 本文连接: soulteary.com/2019/04/27/…git
去年的时候,曾经写过一篇使用 Docker 、Traefik 以及 Nginx 建立自动索引站点的文章,本篇内容将聊聊如何进行优化。github
包含内容:剥离容器配置中的变量、如何对容器进行健康检查、如何限制容器日志尺寸等。docker
更新的项目代码保存在: GitHub 上,能够自取。编程
前文的 docker-compose.yml
中,许多内容是直接写死在文件中的,随着配置文件愈来愈“复杂”、同类的服务启动愈来愈多,咱们须要将一些基础的配置剥离出来,以方便后续的维护。json
nginx:
image: nginx:1.15.7-alpine
labels:
- "traefik.frontend.rule=Host:demo.soulteary.com"
extra_hosts:
- "demo.soulteary.com:127.0.0.1"
复制代码
好比“域名”、“镜像名称”等信息,咱们能够从上面配置文件中进行剥离,剥离后的配置以下:浏览器
nginx:
image: ${NGX_IMAGE}
labels:
- "traefik.frontend.rule=Host:${NGX_DOMAIN}"
extra_hosts:
- "${NGX_DOMAIN}:127.0.0.1"
复制代码
为了让 docker-compose.yml
可以像以前同样正常工做,咱们须要建立一个 。env
文件,存放刚刚剥离的信息。bash
NGX_IMAGE=nginx:1.15.8-alpine
NGX_DOMAIN=demo.soulteary.com
复制代码
后续这类信息多起来以后,能够经过配置系统接口获取,或者让CD系统自动生成。app
Nginx 默认配置中,HTML
类型文件将会被渲染成咱们熟悉的网页,这显然不符合 auto index
的需求,若是可以像 TEXT
纯文本同样直接在浏览器中进行预览或许会更好。
修改 Nginx 使用的 mime.types
文件,将 HTML
类型文件进行修改,原始文件如:
text/html html htm shtml;
复制代码
须要修改成:
text/plain html htm shtml;
复制代码
若是你须要用户在访问页面时,可以直接下载文件,那么能够将 text/plain
修改成 application/octet-stream
。
为了容器中的应用运行结果更加可靠,咱们须要让容器进行健康检查。
由于本例中的内容是动态生成的,虽然程序效率很高,可是仍是建议让检查工具请求的内容尽量更简单一些,为此咱们定义一个新的路径 /health-check
,并将它添加到 nginx.conf
配置中:
location = /health-check {
access_log off;
default_type text/html;
return 200 'alive';
}
复制代码
当健康检查器或者用户访问这个地址时,将会获得“alive”的结果。
接着,在 docker-compose.yml
中定义检查器:
healthcheck:
test: ["CMD-SHELL", "wget -q --spider --proxy off localhost/health-check || exit 1"]
复制代码
当你执行 docker ps
时,终端输出的文本将会有一些不一样。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d9903d19aae7 nginx:1.15.8-alpine "nginx -g 'daemon of…" 5 seconds ago Up 4 seconds (health: starting) 80/tcp
复制代码
当程序彻底运行以后,Up 4 seconds (health: starting)
将会变动为 Up 10 seconds (healthy)
。
将来在调试/查看容器服务情况时,辨别服务运行状态就又有了一个新的依据啦。
搭建的应用,除了会被用户访问以外,还可能遭到扫描器问候、恶意的海量请求。
这时,若是不约束日志文件尺寸,很容易将磁盘占满,形成其余麻烦。
除了使用 logrotate 处理日志外,更简单的方案是在 docker-compose.yml
中对日志尺寸进行限制,将下面的内容添加到配置文件中。
logging:
driver: "json-file"
options:
max-size: "10m"
复制代码
我如今有一个小小的折腾群,里面汇集了一些喜欢折腾的小伙伴。
在不发广告的状况下,咱们在里面会一块儿聊聊软件、HomeLab、编程上的一些问题,也会在群里不按期的分享一些技术沙龙的资料。
喜欢折腾的小伙伴欢迎扫码添加好友。(请注明来源和目的,不然不会经过审核)