news 2026/5/10 23:07:57

用于管理和协调多个进程:用于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/10 8:03:14

VisionPro视觉检测软件之打包成安装包

VisionPro视觉检测软件之打包成安装包 WinForm之打包项目为安装包 https://www.zamzar.com/ 第一步:右击解决方案,建立新项目(setup) 第二步:右击Application Folder选择Add,之后选择选择项目输出 第三步&…

作者头像 李华
网站建设 2026/5/10 23:07:57

【AI大模型舆情分析】微博舆情分析可视化系统(pytorch2+基于BERT大模型训练微调+flask+pandas+echarts) 实战(上)

大家好,我是锋哥。最近发布一条【AI大模型舆情分析】微博舆情分析可视化系统(pytorch2基于BERT大模型训练微调flaskpandasecharts)高级实战。分上下节。 实战简介: 前面的2026版【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpanda…

作者头像 李华
网站建设 2026/5/9 3:36:53

如何搜集图片?超实用功能必看!

🙋相册开启了多人上传,不知道图片是谁上传的,能否在上传前让上传人填个表单,好让管理员知道是谁上传的图片?👉支持的上传前表单填写:访客上传相册内容前,需要填写表单信息「可用于收…

作者头像 李华
网站建设 2026/5/6 17:18:41

安卓开发工程师核心能力体系深度解析与面试指南

华东计算技术研究所(中国电子科技集团公司第三十二研究所)安卓开发工程师 职位信息 岗位职责: 1.参与项目需求分析,进行APP相关的设计、开发、调试等; 2.按需求完成界面、逻辑功能、网络通信等设计; 3.配合其他开发人员、测试人员,完成产品设计和发布; 4.编写相关开发文…

作者头像 李华
网站建设 2026/5/4 23:22:17

自己平台接入国家网络身份认证公共服务接入

一、接入主体要求(谁能申请)必须是合法登记的企业 / 事业单位 / 政府机构,个人不能申请企业级接入。准入主体类型:企业法人(含国企、民企、外企)政府部门、事业单位金融机构、持牌支付机构、运营商互联网平…

作者头像 李华
网站建设 2026/5/10 19:44:06

花小钱取悦自己,才是最聪明的养生

别等花大钱看病才懂:花小钱取悦自己,是最划算的养生 目录 别等花大钱看病才懂:花小钱取悦自己,是最划算的养生一、先理清:观点的核心逻辑是什么?二、靠谱依据:情绪影响健康,有实打实…

作者头像 李华