核心内容摘要
Nano-Banana实测:10分钟生成专业级鞋包结构图
用于管理和协调多个进程用于Docker容器的Supervisor配置文件文章目录用于管理和协调多个进程用于Docker容器的Supervisor配置文件
Supervisor基础配置
**UNIX Socket服务器配置**
**Supervisor主进程配置**
服务进程配置按启动顺序
**Xvfb - 虚拟显示服务器**
**D-Bus - 系统消息总线**
**Chrome浏览器**
**socat - 端口转发**
**x11vnc - VNC服务器**
**websockify - WebSocket代理**
**FastAPI应用**
**服务组**
配置特点分析
**Docker优化**
**进程依赖关系**
**安全考虑**
**适用场景**
使用建议
**生产环境优化**
**安全增强**这是一个用于Docker容器的Supervisor配置文件用于管理和协调多个进程。
我来详细解析每个部分
Supervisor基础配置
UNIX Socket服务器配置[unix_http_server] file/tmp/supervisor.sock ; UNIX套接字文件路径 chmod0777 ; 权限设置777确保所有进程可访问 chownroot:root ; 文件所有者作用Supervisor的IPC通信接口特点使用Unix Socket比TCP更高效安全
Supervisor主进程配置[supervisord] logfile/dev/stdout ; 日志输出到标准输出便于Docker日志收集 logfile_maxbytes0 ; 日志文件大小无限制 loglevelinfo ; 日志级别 pidfile/tmp/supervisord.pid ; PID文件位置 nodaemontrue ; 前台运行Docker必需 autoshutdowntrue ; 所有服务停止后自动退出关键点nodaemontrue使Supervisor在前台运行符合Docker容器的最佳实践
服务进程配置按启动顺序
Xvfb - 虚拟显示服务器[program:xvfb] commandbash -c rm -f /tmp/.X1-lock Xvfb :1 -screen 0 1280x1029x24 priority10功能创建虚拟X11显示服务器为无头环境提供图形显示支持参数解析:1- 使用显示编号1DISPLAY:11280x1029x24- 分辨率1280x102924位色深先删除可能存在的锁文件
D-Bus - 系统消息总线[program:dbus] commandbash -c mkdir -p /run/dbus dbus-daemon --system --nofork --addressunix:path/run/dbus/system_bus_socket priority15功能为Chrome等应用提供进程间通信服务--nofork保持前台运行符合Supervisor管理要求
Chrome浏览器[program:chrome] commandchromium \ --display:1 \ # 使用Xvfb创建的显示 --no-sandbox \ # 禁用沙箱容器环境必需 --remote-debugging-address
0.
0.
0 \ # 远程调试监听所有IP --remote-debugging-port8222 \ # 远程调试端口 %(ENV_CHROME_ARGS)s # 环境变量传入额外参数 priority20 startretries3 startsecs5重要标志说明--no-sandbox在Docker容器中必需否则Chrome无法启动--disable-dev-shm-usage避免使用/dev/shm解决容器内存问题--remote-debugging-address启用Chrome DevTools Protocol%(ENV_CHROME_ARGS)s支持从环境变量传递额外参数
socat - 端口转发[program:socat] commandsocat TCP-LISTEN:9222,bind
0.
0.
0,fork,reuseaddr TCP:
127.
0.
1:8222 priority30功能将外部对9222端口的访问转发到Chrome的8222调试端口用途允许外部通过DevTools Protocol控制浏览器
x11vnc - VNC服务器[program:x11vnc] commandx11vnc -display :1 -nopw -shared -listen
0.
0.
0 -xkb -forever -rfbport 5900 priority40功能将Xvfb的显示通过VNC协议共享参数-nopw无密码访问生产环境应设置密码-shared允许多个客户端连接-forever持续运行监听5900端口
websockify - WebSocket代理[program:websockify] commandwebsockify
0.
0.
0:5901 localhost:5900 priority45功能将VNC协议转换为WebSocket用途通过浏览器如noVNC访问VNC显示
FastAPI应用[program:app] commanduvicorn app.main:app --host
0.
0.
0 --port 7080 %(ENV_UVI_ARGS)s directory/app userubuntu priority50功能运行Python FastAPI Web应用特点以ubuntu用户运行提升安全性工作目录设为/app支持环境变量传递额外参数
服务组[group:services] programsxvfb,chrome,socat,x11vnc,websockify,app功能将相关程序分组便于统一管理
配置特点分析
Docker优化所有日志输出到stdout/stderr便于Docker日志收集nodaemontrue保持前台进程环境变量支持灵活配置
进程依赖关系优先级10: xvfb (显示服务) 优先级15: dbus (系统总线) 优先级20: chrome (主要应用) 优先级30: socat (端口转发) 优先级40: x11vnc (远程桌面) 优先级45: websockify (Web适配) 优先级50: app (Web应用)
安全考虑Chrome以无沙箱模式运行容器必需各服务以适当的权限运行支持通过环境变量传递敏感参数
适用场景这是一个典型的浏览器自动化/网页截图/爬虫环境配置包含无头浏览器通过XvfbChrome远程调试支持VNC远程访问Web应用后端
使用建议
生产环境优化; 建议添加以下配置 stopwaitsecs 10 ; 停止等待时间 stopasgroup true ; 停止整个进程组 killasgroup true ; 杀死整个进程组
安全增强为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 chmod0777;Socket filepermissions(ensure all processes can access)chownroot:root;Socket file owner and group[supervisord]logfile/dev/stdout;Main log file output to standard output logfile_maxbytes0;No limit on log size loglevelinfo;Log level pidfile/tmp/supervisord.pid;Path of pidfile nodaemontrue;Need to run in foreground in Docker minfds1024;Minimum value of open file descriptors minprocs200;Minimum number of processes autoshutdowntrue;Auto exit after all services stop[rpcinterface:supervisor]supervisor.rpcinterface_factorysupervisor.rpcinterface:make_main_rpcinterface[supervisorctl]serverurlunix:///tmp/supervisor.sock ; Socket connection to supervisord;Xvfb virtual display configuration[program:xvfb]commandbash-crm -f /tmp/.X1-lock Xvfb :1 -screen 0 1280x1029x24autostarttrue autorestarttrue stdout_logfile/dev/stdoutstdout_logfile_maxbytes0stderr_logfile/dev/stderrstderr_logfile_maxbytes0environmentDISPLAY:1priority10;D-Bus systembus(provide/run/dbus/system_bus_socketforChrome)[program:dbus]commandbash-cmkdir -p /run/dbus dbus-daemon --system --nofork --addressunix:path/run/dbus/system_bus_socketautostarttrue autorestarttrue stdout_logfile/dev/stdoutstdout_logfile_maxbytes0stderr_logfile/dev/stderrstderr_logfile_maxbytes0priority15;Google Chrome configuration[program:chrome]commandchromium \--display:1\--window-size1280,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-featuresWelcomeExperience,SigninPromo,Vulkan,IsolatedSandbox \--no-first-run \--no-default-browser-check \--disable-infobars \--disable-popup-blocking \--disable-gpu-sandbox \--no-xshm \--new-windowfalse \--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\--remote-debugging-port8222%(ENV_CHROME_ARGS)s autostarttrue autorestarttrue stdout_logfile/dev/stdoutstdout_logfile_maxbytes0stderr_logfile/dev/stderrstderr_logfile_maxbytes0environmentDISPLAY:1,CHROME_LOG_FILE-priority20startretries3startsecs5;socat port forwarding configuration[program:socat]commandsocat TCP-LISTEN:9222,bind
0.
0.
0,fork,reuseaddr TCP:
127.
0.
1:8222autostarttrue autorestarttrue stdout_logfile/dev/stdoutstdout_logfile_maxbytes0stderr_logfile/dev/stderrstderr_logfile_maxbytes0priority30startsecs2;VNC service configuration[program:x11vnc]commandx11vnc-display:1-nopw-shared-listen
0.
0.
0-xkb-forever-rfbport5900autostarttrue autorestarttrue stdout_logfile/dev/stdoutstdout_logfile_maxbytes0stderr_logfile/dev/stderrstderr_logfile_maxbytes0environmentDISPLAY:1priority40startsecs3;Websockify configuration-Convert VNC to WebSocket[program:websockify]commandwebsockify
0.
0.
0:5901localhost:5900autostarttrue autorestarttrue stdout_logfile/dev/stdoutstdout_logfile_maxbytes0stderr_logfile/dev/stderrstderr_logfile_maxbytes0priority45startsecs3;FastAPI application configuration[program:app]commanduvicorn app.main:app--host
0.
0.