news 2026/5/2 16:54:44

用于管理和协调多个进程:用于Docker容器的Supervisor配置文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用于管理和协调多个进程:用于Docker容器的Supervisor配置文件

用于管理和协调多个进程:用于Docker容器的Supervisor配置文件

文章目录

  • 用于管理和协调多个进程:用于Docker容器的Supervisor配置文件
    • 一、Supervisor基础配置
      • 1. **UNIX Socket服务器配置**
      • 2. **Supervisor主进程配置**
    • 二、服务进程配置(按启动顺序)
      • 1. **Xvfb - 虚拟显示服务器**
      • 2. **D-Bus - 系统消息总线**
      • 3. **Chrome浏览器**
      • 4. **socat - 端口转发**
      • 5. **x11vnc - VNC服务器**
      • 6. **websockify - WebSocket代理**
      • 7. **FastAPI应用**
      • 8. **服务组**
    • 三、配置特点分析
      • 1. **Docker优化**
      • 2. **进程依赖关系**
      • 3. **安全考虑**
      • 4. **适用场景**
    • 四、使用建议
      • 1. **生产环境优化**
      • 2. **安全增强**

这是一个用于Docker容器的Supervisor配置文件,用于管理和协调多个进程。我来详细解析每个部分:

一、Supervisor基础配置

1.UNIX Socket服务器配置

[unix_http_server] file=/tmp/supervisor.sock ; UNIX套接字文件路径 chmod=0777 ; 权限设置(777确保所有进程可访问) chown=root:root ; 文件所有者
  • 作用:Supervisor的IPC通信接口
  • 特点:使用Unix Socket比TCP更高效安全

2.Supervisor主进程配置

[supervisord] logfile=/dev/stdout ; 日志输出到标准输出(便于Docker日志收集) logfile_maxbytes=0 ; 日志文件大小无限制 loglevel=info ; 日志级别 pidfile=/tmp/supervisord.pid ; PID文件位置 nodaemon=true ; 前台运行(Docker必需) autoshutdown=true ; 所有服务停止后自动退出
  • 关键点nodaemon=true使Supervisor在前台运行,符合Docker容器的最佳实践

二、服务进程配置(按启动顺序)

1.Xvfb - 虚拟显示服务器

[program:xvfb] command=bash -c "rm -f /tmp/.X1-lock && Xvfb :1 -screen 0 1280x1029x24" priority=10
  • 功能:创建虚拟X11显示服务器,为无头环境提供图形显示支持
  • 参数解析
    • :1- 使用显示编号1(DISPLAY=:1)
    • 1280x1029x24- 分辨率1280x1029,24位色深
    • 先删除可能存在的锁文件

2.D-Bus - 系统消息总线

[program:dbus] command=bash -c "mkdir -p /run/dbus && dbus-daemon --system --nofork --address=unix:path=/run/dbus/system_bus_socket" priority=15
  • 功能:为Chrome等应用提供进程间通信服务
  • --nofork:保持前台运行,符合Supervisor管理要求

3.Chrome浏览器

[program:chrome] command=chromium \ --display=:1 \ # 使用Xvfb创建的显示 --no-sandbox \ # 禁用沙箱(容器环境必需) --remote-debugging-address=0.0.0.0 \ # 远程调试监听所有IP --remote-debugging-port=8222 \ # 远程调试端口 %(ENV_CHROME_ARGS)s # 环境变量传入额外参数 priority=20 startretries=3 startsecs=5
  • 重要标志说明
    • --no-sandbox:在Docker容器中必需,否则Chrome无法启动
    • --disable-dev-shm-usage:避免使用/dev/shm,解决容器内存问题
    • --remote-debugging-address:启用Chrome DevTools Protocol
    • %(ENV_CHROME_ARGS)s:支持从环境变量传递额外参数

4.socat - 端口转发

[program:socat] command=socat TCP-LISTEN:9222,bind=0.0.0.0,fork,reuseaddr TCP:127.0.0.1:8222 priority=30
  • 功能:将外部对9222端口的访问转发到Chrome的8222调试端口
  • 用途:允许外部通过DevTools Protocol控制浏览器

5.x11vnc - VNC服务器

[program:x11vnc] command=x11vnc -display :1 -nopw -shared -listen 0.0.0.0 -xkb -forever -rfbport 5900 priority=40
  • 功能:将Xvfb的显示通过VNC协议共享
  • 参数
    • -nopw:无密码访问(生产环境应设置密码)
    • -shared:允许多个客户端连接
    • -forever:持续运行
    • 监听5900端口

6.websockify - WebSocket代理

[program:websockify] command=websockify 0.0.0.0:5901 localhost:5900 priority=45
  • 功能:将VNC协议转换为WebSocket
  • 用途:通过浏览器(如noVNC)访问VNC显示

7.FastAPI应用

[program:app] command=uvicorn app.main:app --host 0.0.0.0 --port 7080 %(ENV_UVI_ARGS)s directory=/app user=ubuntu priority=50
  • 功能:运行Python FastAPI Web应用
  • 特点
    • 以ubuntu用户运行,提升安全性
    • 工作目录设为/app
    • 支持环境变量传递额外参数

8.服务组

[group:services] programs=xvfb,chrome,socat,x11vnc,websockify,app
  • 功能:将相关程序分组,便于统一管理

三、配置特点分析

1.Docker优化

  • 所有日志输出到stdout/stderr,便于Docker日志收集
  • nodaemon=true保持前台进程
  • 环境变量支持灵活配置

2.进程依赖关系

优先级10: xvfb (显示服务) 优先级15: dbus (系统总线) 优先级20: chrome (主要应用) 优先级30: socat (端口转发) 优先级40: x11vnc (远程桌面) 优先级45: websockify (Web适配) 优先级50: app (Web应用)

3.安全考虑

  • Chrome以无沙箱模式运行(容器必需)
  • 各服务以适当的权限运行
  • 支持通过环境变量传递敏感参数

4.适用场景

这是一个典型的浏览器自动化/网页截图/爬虫环境配置,包含:

  • 无头浏览器(通过Xvfb+Chrome)
  • 远程调试支持
  • VNC远程访问
  • Web应用后端

四、使用建议

1.生产环境优化

; 建议添加以下配置 stopwaitsecs = 10 ; 停止等待时间 stopasgroup = true ; 停止整个进程组 killasgroup = true ; 杀死整个进程组

2.安全增强

  • 为VNC设置密码:x11vnc ... -passwd YOUR_PASSWORD
  • 限制VNC访问IP
  • 使用非root用户运行服务

这个配置文件展示了一个复杂的多进程容器管理方案,通过Supervisor有效协调各个组件,适合需要浏览器自动化的Web应用场景。


[unix_http_server]file=/tmp/supervisor.sock;Path of UNIX socket file,supervisor uses it to listen chmod=0777;Socket filepermissions(ensure all processes can access)chown=root:root;Socket file owner and group[supervisord]logfile=/dev/stdout;Main log file output to standard output logfile_maxbytes=0;No limit on log size loglevel=info;Log level pidfile=/tmp/supervisord.pid;Path of pidfile nodaemon=true;Need to run in foreground in Docker minfds=1024;Minimum value of open file descriptors minprocs=200;Minimum number of processes autoshutdown=true;Auto exit after all services stop[rpcinterface:supervisor]supervisor.rpcinterface_factory=supervisor.rpcinterface:make_main_rpcinterface[supervisorctl]serverurl=unix:///tmp/supervisor.sock ; Socket connection to supervisord;Xvfb virtual display configuration[program:xvfb]command=bash-c"rm -f /tmp/.X1-lock && Xvfb :1 -screen 0 1280x1029x24"autostart=true autorestart=true stdout_logfile=/dev/stdoutstdout_logfile_maxbytes=0stderr_logfile=/dev/stderrstderr_logfile_maxbytes=0environment=DISPLAY=:1priority=10;D-Bus systembus(provide/run/dbus/system_bus_socketforChrome)[program:dbus]command=bash-c"mkdir -p /run/dbus && dbus-daemon --system --nofork --address=unix:path=/run/dbus/system_bus_socket"autostart=true autorestart=true stdout_logfile=/dev/stdoutstdout_logfile_maxbytes=0stderr_logfile=/dev/stderrstderr_logfile_maxbytes=0priority=15;Google Chrome configuration[program:chrome]command=chromium \--display=:1\--window-size=1280,1029\--start-maximized \--no-sandbox \--disable-dev-shm-usage \--disable-setuid-sandbox \--disable-accelerated-2d-canvas \--disable-gpu \--disable-gpu-process \--disable-gpu-compositing \--disable-features=WelcomeExperience,SigninPromo,Vulkan,IsolatedSandbox \--no-first-run \--no-default-browser-check \--disable-infobars \--disable-popup-blocking \--disable-gpu-sandbox \--no-xshm \--new-window=false \--disable-notifications \--disable-extensions \--disable-component-extensions-with-background-pages \--disable-prompt-on-repost \--disable-web-security \--disable-background-networking \--disable-breakpad \--disable-client-side-phishing-detection \--disable-default-apps \--disable-sync \--disable-dbus \--remote-debugging-address=0.0.0.0\--remote-debugging-port=8222%(ENV_CHROME_ARGS)s autostart=true autorestart=true stdout_logfile=/dev/stdoutstdout_logfile_maxbytes=0stderr_logfile=/dev/stderrstderr_logfile_maxbytes=0environment=DISPLAY=:1,CHROME_LOG_FILE=-priority=20startretries=3startsecs=5;socat port forwarding configuration[program:socat]command=socat TCP-LISTEN:9222,bind=0.0.0.0,fork,reuseaddr TCP:127.0.0.1:8222autostart=true autorestart=true stdout_logfile=/dev/stdoutstdout_logfile_maxbytes=0stderr_logfile=/dev/stderrstderr_logfile_maxbytes=0priority=30startsecs=2;VNC service configuration[program:x11vnc]command=x11vnc-display:1-nopw-shared-listen0.0.0.0-xkb-forever-rfbport5900autostart=true autorestart=true stdout_logfile=/dev/stdoutstdout_logfile_maxbytes=0stderr_logfile=/dev/stderrstderr_logfile_maxbytes=0environment=DISPLAY=:1priority=40startsecs=3;Websockify configuration-Convert VNC to WebSocket[program:websockify]command=websockify0.0.0.0:5901localhost:5900autostart=true autorestart=true stdout_logfile=/dev/stdoutstdout_logfile_maxbytes=0stderr_logfile=/dev/stderrstderr_logfile_maxbytes=0priority=45startsecs=3;FastAPI application configuration[program:app]command=uvicorn app.main:app--host0.0.0.0--port7080%(ENV_UVI_ARGS)s directory=/app user=ubuntu autostart=true autorestart=true stdout_logfile=/dev/stdoutstdout_logfile_maxbytes=0stderr_logfile=/dev/stderrstderr_logfile_maxbytes=0environment=HOME=/home/ubuntu priority=50;Group configuration,can start or stop multiple programs at once[group:services]programs=xvfb,chrome,socat,x11vnc,websockify,app
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 18:42:13

基于JavaWeb的网上书城网站的设计与实现 开题报告(2)

目录 研究背景与意义系统功能模块技术选型数据库设计示例系统特色预期成果 项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 研究背景与意义 随着电子商务的快速发展,网上书城成为用户购书的重…

作者头像 李华
网站建设 2026/5/1 9:27:09

【读书笔记】《演讲的本质》

MIT传奇教授Patrick Winston的演讲课:如何在关键时刻让人真正听你说话 一个残酷的事实 90%的人不是不会说话,而是一开口就让人走神。他们逻辑完整,内容正确,PPT精美,但台下的人却在想:中午吃什么?手机有没有消息?这人什么时候讲完? Patric…

作者头像 李华
网站建设 2026/5/1 18:49:49

基于Simulink的根轨迹法控制器设计与仿真建模示例

目录 手把手教你学Simulink 一、引言:为什么工程师仍要学“根轨迹法”? 二、理论基础:根轨迹法核心思想 1. 闭环特征方程 2. 根轨迹绘制法则(简要) 三、示例系统:位置伺服系统 1. 被控对象传递函数 四、MATLAB 中绘制根轨迹 步骤1:定义系统并绘图 步骤2:分析根…

作者头像 李华
网站建设 2026/5/1 9:23:19

day73(2.1)——leetcode面试经典150

127. 单词接龙 127. 单词接龙 这个跟昨天的题还是有点不一样的,这个如果按照昨天的方法,会超时,因为时间已经到了50000 题目: 题解: class Solution {public int ladderLength(String beginWord, String endWord, …

作者头像 李华