ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Rabel 生产环境部署实战:Nginx + Unicorn + Memcached 完整教程

Rabel 生产环境部署实战:Nginx + Unicorn + Memcached 完整教程 Rabel 生产环境部署实战Nginx Unicorn Memcached 完整教程【免费下载链接】rabelAn open-source web forum built on the Ruby on Rails framework.项目地址: https://gitcode.com/gh_mirrors/ra/rabelRabel 是一个基于 Ruby on Rails 框架的开源 Web 论坛程序界面简洁、功能完整包含节点分区、主题讨论、评论回复、签到奖励等社区常用能力。本文是一份面向新手的Rabel 生产环境部署教程带你从零开始用Nginx Unicorn Memcached三件套完成一套可稳定运行的生产架构并给出配置文件详解与常见问题排查思路。全程零代码改造按步骤操作即可上线。一、部署架构总览三条链路各司其职生产环境的 Rabel 采用「反向代理 应用服务器 缓存」的经典组合分工如下组件职责端口/通信方式Nginx接收用户请求、托管静态资源、反向代理80 端口转发给 UnicornUnicorn运行 Rails 应用、处理动态请求Unix Sockettmp/sockets/unicorn.sockMemcached页面与数据缓存降低数据库压力127.0.0.1:11211PostgreSQL持久化存储论坛数据数据库默认端口整个请求链路是浏览器 → Nginx → Unicorn(Rails) → PostgreSQL/Memcached。Nginx 直接托管public目录下的静态文件动态请求才转发给 Unicorn这样既快又稳。二、环境准备安装基础依赖先安装 Ruby、数据库与图片处理组件。Rabel 的部署脚本里给出了两个主流发行版的安装清单可作参考CentOS 系deploy/centos_6.4_install.sh内含 nginx、memcached、ImageMagick 安装Ubuntu 系deploy/ubuntu_12.04_install.sh核心依赖清单如下Ruby 与 Bundler运行 Rails 的基础PostgreSQL 或 MySQLconfig/database.yml.pg / config/database.yml.mysql 二选一Memcached缓存服务ImageMagick头像裁剪等图片处理三、获取代码与安装依赖将项目克隆到服务器并进入目录git clone https://gitcode.com/gh_mirrors/ra/rabel cd rabel生产环境安装依赖时跳过开发与测试组可参考 deploy/install_bundle.shbundle install --without development test四、数据库配置与初始化先根据你选择的数据库把示例配置复制为正式配置cp config/database.yml.pg config/database.yml然后创建数据库并执行迁移与种子数据。仓库里提供了两个现成脚本deploy/setup_database_once.sh首次建库deploy/migrate_database.sh执行RAILS_ENVproduction bundle exec rake db:migrate建议按顺序执行先建库 → 迁移 → 写入种子数据论坛即可拥有初始的分区与默认设置。五、站点配置application.yml 是关键Rabel 用 figaro 管理环境变量示例文件是 config/application.yml.example复制后逐项填写cp config/application.yml.example config/application.yml重点配置项RABEL_HOST_NAME站点域名如forum.example.comRABEL_SECRET_KEY与RABEL_DEVISE_SECRET_KEY用rake secret生成保证会话安全RABEL_MEMCACHED_SERVER默认127.0.0.1:11211一般无需改动 配置文件中的注释非常清晰每个变量都有说明照着填即可。六、Unicorn 配置详解一份能直接用的配置文件Unicorn 的配置文件是 config/unicorn.rb要点拆解worker_processes 2Worker 数量单核服务器建议至少 1 个多核可适当增加listen .../tmp/sockets/unicorn.sock监听 Unix Socket比 TCP 端口更高效timeout 3030 秒超时自动杀掉卡死的 workerpreload_app true预加载应用代码配合after_fork重连数据库显著省内存before_fork断开数据库连接、after_fork重建连接这是 Rails Unicorn 的标准姿势务必保留worker_processes 2 listen #{APP_HOME}/tmp/sockets/unicorn.sock, :backlog 64 timeout 30 pid #{APP_HOME}/tmp/pids/unicorn.pid preload_app true七、启动、停止与平滑重载 Unicorn项目在 deploy/ 目录下提供了一整套进程管理脚本脚本作用start_unicorn_manually.sh手动启动stop_unicorn_manually.sh手动停止reload_unicorn.sh向主进程发送USR2信号平滑升级kill_old_unicorn.sh清理旧进程auto_start_unicorn.sh生成 upstart 自启动脚本开机拉起平滑重载的核心原理是给主进程发USR2信号新 worker 起来后再清理旧进程全程请求不断。若想开机自启运行 deploy/auto_start_unicorn.sh 并传入站点名与应用路径即可。八、Nginx 反向代理配置关键三步参考 deploy/nginx-example.conf 这份示例配置包含三个关键设计1. upstream 指向 Unicorn Socketupstream EXAMPLE_app_server { server unix:RABEL_HOME/tmp/sockets/unicorn.sock; }2. 静态资源缓存 1 年location ~ ^/(assets|uploads|avatar|favicon) { expires 1y; add_header Cache-Control public; }图片、CSS、JS 全部由 Nginx 直接返回不走 Rails性能立竿见影。3. 动态请求透传代理头location EXAMPLE_backend { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://EXAMPLE_app_server; }记得把配置里的EXAMPLE、RABEL_HOME、HOST_NAME替换为真实值并把client_max_body_size调大以支持图片上传示例为 4M。九、资源预编译上线前的最后一步生产环境不编译源码必须预先打包静态资源执行 deploy/precompile_assets.shRAILS_ENVproduction bundle exec rake assets:precompile同时确认 config/environments/production.rb 中的关键开关config.assets.compile false关闭运行时编译、config.eager_load true启动即加载全部代码。十、Memcached 缓存配置让站点更快Rabel 通过 dalli 客户端接入 Memcached见 Gemfile 中的gem dalli缓存参数集中在 config/application.yml.example 中RABEL_MEMCACHED_SERVER: 127.0.0.1:11211 RABEL_MEMCACHED_USERNAME: RABEL_MEMCACHED_PASSWORD: RABEL_MEMCACHED_NAMESPACE: example生产环境建议在 config/environments/production.rb 中启用缓存存储取消config.cache_store :mem_cache_store注释并确认config.action_controller.perform_caching true已开启。论坛的站点设置等高频数据会走缓存响应速度明显提升。十一、常见问题排查清单 ️部署中遇到问题先对照这张表502 Bad Gateway多为 Unicorn 未启动或 Socket 路径不一致检查tmp/sockets/unicorn.sock是否存在、Nginx upstream 路径是否匹配静态资源 404确认已执行assets:precompile且public/assets目录有内容页面能开但报数据库错误检查config/database.yml连接信息以及迁移是否完整执行上传图片失败检查client_max_body_size和存储服务的开关配置upyun/qiniuMemcached 连不上用telnet 127.0.0.1 11211验证服务是否监听十二、总结至此一套完整的Rabel 生产环境就搭建完成了Nginx 负责静态托管与反向代理Unicorn 稳定运行 Rails 应用Memcached 提供高速缓存配合 PostgreSQL 持久化数据。整个过程用到的配置文件都集中在config/与deploy/目录脚本齐全、注释清晰新手也能快速上手。部署完成后别忘了设置域名解析、配置 HTTPS并定期查看log/unicorn.stdout.log与log/unicorn.stderr.log掌握站点运行状况。祝你的论坛顺利上线【免费下载链接】rabelAn open-source web forum built on the Ruby on Rails framework.项目地址: https://gitcode.com/gh_mirrors/ra/rabel创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表