ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Postmon 生产环境部署指南:WSGI + Supervisord + Celery 高可用方案

Postmon 生产环境部署指南:WSGI + Supervisord + Celery 高可用方案 Postmon 生产环境部署指南WSGI Supervisord Celery 高可用方案【免费下载链接】postmonUma API para consulta de informações relacionadas a endereçamento e entrega no Brasil.项目地址: https://gitcode.com/gh_mirrors/po/postmonPostmon 是一款基于 Python 与 Bottle 框架的巴西地址信息查询 API可返回 CEP巴西邮政编码对应的街道、街区、城市与州信息还支持包裹物流追踪以及 IBGE 行政区划数据。本文是一份完整的Postmon 生产环境部署指南将手把手带你用WSGI 服务器 Supervisord 进程守护 Celery 定时任务 MongoDB搭建一套高可用方案适合新手运维与普通开发者参考全程无需大量代码即可上手。什么是 Postmon核心功能速览 Postmon 本质上是一个邮编 API核心能力包括CEP 查询通过/v1/cep/{cep}返回街道logradouro、街区bairro、城市cidade、州estado等完整地址信息。州 / 城市信息通过/v1/uf/{sigla}和/v1/cidade/{sigla_uf}/{nome}获取 IBGE 城市代码、面积等数据。包裹追踪通过/v1/rastreio/{provider}/{track}查询巴西邮政等物流商的历史轨迹并支持回调注册。多格式输出原生支持 JSON并可切换 JSONP / XML 格式方便跨域前端直接调用。关键模块一览文件作用PostmonServer.py应用主入口定义全部 API 路由默认端口 9876run.wsgiWSGI 入口供 gunicorn / uWSGI 加载PostmonTaskScheduler.pyCelery 任务与定时调度定义database.pyMongoDB 数据访问层CEP 缓存、UF、城市、包裹requirements.txtPython 依赖清单log.yaml日志轮转配置生产环境高可用架构一览一套稳定运行的生产架构通常由 4 个角色组成组件职责说明WSGI 服务器gunicorn对外提供 HTTP 服务加载run.wsgi中的applicationSupervisord进程守护与自动重启同时托管 Web 与 Celery 进程Celery Worker Beat后台任务与定时调度每日同步 IBGE 数据、每小时检查包裹MongoDB数据存储与缓存同时作为 Celery 的 Broker浏览器 / 客户端 │ ▼ Nginx可选──► gunicornWSGI──► run.wsgi ──► PostmonServer.py │ │ │ ▼ │ MongoDB数据 Broker │ ▼ Supervisord 守护 │ ┌───────────┴───────────┐ ▼ ▼ gunicorn 主进程 celery worker -B这样的好处是Web 服务与后台任务互不干扰任何一个进程崩溃Supervisord 都会自动拉起实现真正的高可用。部署第一步准备环境与安装依赖Postmon 项目基于Python 2.7与MongoDB开发依赖版本有严格约束如pymongo3、celery[mongodb]4.0建议严格按照requirements.txt安装避免版本升级带来的兼容性问题。先获取项目源码git clone https://gitcode.com/gh_mirrors/po/postmon cd postmon然后安装依赖pip install -r requirements.txt本机验证一下能否启动默认端口 9876python PostmonServer.py如果本地能正常访问说明依赖环境没有问题可以进入生产部署环节。第二步配置 MongoDB 与认证环境变量Postmon 使用 MongoDB 存储 CEP 缓存、UF / 城市数据以及包裹追踪信息同一个 MongoDB 实例还充当 Celery 的 Broker所以它是整个系统的心脏。如果你的 MongoDB 开启了认证需要先创建专用账号mongo use postmon db.addUser(admin, 123456)然后通过环境变量把连接信息传给应用database.py和PostmonTaskScheduler.py都会读取这些变量export POSTMON_DB_NAMEpostmon export POSTMON_DB_HOST127.0.0.1 export POSTMON_DB_PORT27017 export POSTMON_DB_USERadmin export POSTMON_DB_PASSWORD123456提示如果只是本地开发且未开启认证前两项可以省略默认即localhost:27017。生产环境建议务必开启 MongoDB 认证并限制只监听内网地址。第三步WSGI 启动应用run.wsgi是项目自带的 WSGI 入口它做了三件关键事情加载log.yaml日志配置可通过环境变量POSTMON_LOGGING指定其他配置文件可选集成 New Relic 性能监控未安装则自动跳过导入PostmonServer并导出application bottle.default_app()。因此我们可以用 gunicorn 直接托管gunicorn -w 4 -b 0.0.0.0:9876 run:application参数说明-w 4启动 4 个 worker 进程按 CPU 核数调整-b 0.0.0.0:9876监听端口与项目默认端口一致。启动后先本地验证一下健康检查接口。项目内置了/__health__健康检查路由来自 bottle-healthcheck 插件非常适合接入负载均衡或监控告警curl http://127.0.0.1:9876/__health__再验证核心的 CEP 查询接口curl http://127.0.0.1:9876/v1/cep/01311940返回 JSON 地址信息即代表 WSGI 部署成功。生产环境建议在前面再加一层 Nginx 做反向代理、SSL 终止与限流这里不再展开。第四步用 Supervisord 守护进程Web 进程直接跑在终端里一旦 SSH 断开或进程崩溃就会挂掉因此要用 Supervisord 把它托管起来。Supervisord 的核心优势是进程崩溃自动重启、开机自启、日志统一管理。创建一个配置文件如/etc/supervisor/conf.d/postmon.conf内容如下[program:postmon_web] commandgunicorn -w 4 -b 0.0.0.0:9876 run:application directory/srv/postmon stdout_logfile/var/log/postmon/web.log stderr_logfile/var/log/postmon/web_err.log autostarttrue autorestarttrue startsecs10 stopwaitsecs600同样地为 Celery 也配置一个守护程序。注意这里使用celery worker -B表示同时启动 Worker 与 Beat定时调度一条命令即可[program:celeryd] commandcelery worker -B -A PostmonTaskScheduler -l info directory/srv/postmon stdout_logfile/var/log/postmon/celeryd.log stderr_logfile/var/log/postmon/celeryd_err.log autostarttrue autorestarttrue startsecs10 stopwaitsecs600加载配置并启动supervisorctl reread supervisorctl update supervisorctl status看到postmon_web与celeryd均为RUNNING状态说明守护配置成功。之后即使进程异常退出Supervisord 也会在几秒内自动拉起来。第五步理解 Celery 定时任务与调度细节PostmonTaskScheduler.py中定义了两个定时任务CELERYBEAT_SCHEDULE任务周期说明track_ibge每天一次从 IBGE 官网同步城市 / 州代码与面积数据track_packs每小时一次批量检查所有已注册的包裹物流状态并触发回调Celery 的调度数据celerybeat schedule默认存放在执行目录下的celerybeat_schedule文件。为了让生产环境更规范建议用-s参数指定绝对路径celery worker -B -A PostmonTaskScheduler -l info -s /var/lib/postmon/celerybeat_schedule同样把这条命令替换到上面的celeryd配置中即可。小贴士如果希望 Celery Worker 与 Beat 分别独立运行便于单独重启可以拆成两条命令一条celery worker -A PostmonTaskScheduler -l info另一条celery beat -A PostmonTaskScheduler -l info并分别为它们配置独立的 Supervisord program。健康检查、日志与监控高可用方案离不开可观测性Postmon 自带不少现成能力健康检查/__health__路由由bottle-healthcheck提供可接入 Nginx 健康检查或云监控告警。日志轮转log.yaml已配置 RotatingFileHandler错误日志写入/tmp/postmon-errors.log单文件 10MB、保留 20 个备份避免日志无限膨胀。错误追踪设置环境变量SENTRY_DSN即可接入 Sentry异常自动上报。性能监控run.wsgi已预留 New Relic Agent 支持安装newrelic依赖并初始化后即可采集指标。日志文件路径也可通过环境变量POSTMON_LOGGING指定自定义 YAML 配置方便把日志统一收敛到指定目录。高可用与性能优化要点让服务扛得住生产流量可以从以下几点入手合理设置 worker 数量gunicorn 的-w参数一般取2 × CPU 核数 1避免过多进程争抢资源。善用 HTTP 缓存Postmon 对 CEP、UF、城市查询已返回Cache-Control: public, max-age259200030 天配合 Nginx 层缓存可大幅降低后端压力。保持数据新鲜度CEP 记录有有效期机制未命中缓存 1 周、命中缓存 26 周过期Celery 的每日 IBGE 同步任务保证了行政区划数据始终较新请确保celeryd稳定运行。独立 Broker 实例流量较大时可为 Celery 单独部署一套 MongoDB 作为 Broker与业务数据隔离。进程守护兜底所有服务进程都纳入 Supervisordautorestarttrue是最后一道保险。验证部署是否成功全部配置完成后按顺序做一次端到端验证# 1. 进程状态 supervisorctl status # 2. 健康检查 curl http://127.0.0.1:9876/__health__ # 3. CEP 查询 curl http://127.0.0.1:9876/v1/cep/01311940 # 4. 州信息查询 curl http://127.0.0.1:9876/v1/uf/SP # 5. 城市信息查询 curl http://127.0.0.1:9876/v1/cidade/SP/Sao%20Paulo若以上均正常返回并且supervisorctl status显示两个程序持续RUNNING恭喜你一套WSGI Supervisord Celery 高可用的 Postmon 生产环境就部署完成了常见问题与排查Q1gunicorn 启动报ModuleNotFoundError多半是依赖版本不对。请严格按requirements.txt安装特别注意pymongo与celery[mongodb]的版本上限。Q2Celery 启动后一直连不上 Broker检查 MongoDB 是否运行、认证账号密码是否正确以及POSTMON_DB_HOST等环境变量是否已正确导出到运行 Celery 的进程中。Q3Supervisord 配置后进程频繁重启先看stderr_logfile指定的错误日志通常是依赖缺失、目录权限或端口被占用导致startsecs10的含义是进程需持续运行 10 秒才判定为启动成功。Q4如何单独重启 Celery 而不影响 Web 服务执行supervisorctl restart celeryd即可这正是把两者拆分为独立 program 的收益。Q5想用 Docker 快速部署项目提供了现成的Dockerfile执行docker build -t postmon .与docker run -d -p 80:9876 postmon即可适合测试环境快速体验。通过本文的Postmon 生产环境部署指南你已经掌握了 WSGI 托管、Supervisord 守护、Celery 定时调度与 MongoDB 配置的完整流程。这套方案既保证了进程级的自动恢复能力又让定时数据同步稳定运行是 Postmon 上生产环境最稳妥的实践路径。动手部署一次你会发现它比想象中更简单【免费下载链接】postmonUma API para consulta de informações relacionadas a endereçamento e entrega no Brasil.项目地址: https://gitcode.com/gh_mirrors/po/postmon创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表