前言:为什么选择非Docker化部署?
Docker虽能简化部署流程,但在资源受限的2核2G服务器上,原生安装可节省约30%内存开销,且更便于深度定制。本方案结合宝塔面板可视化操作,实现运维效率与性能的平衡。
一、基础环境准备
1.1 宝塔面板与Nginx配置
- 已安装宝塔面板
- Nginx版本选择Tengine 2.3.3以上,启用HTTP/2与Brotli压缩
- 防火墙放行SSH(22)、HTTP(80)、HTTPS(443)及后续所需端口
1.2 系统级依赖安装
sudo apt update
sudo apt install -y git-core curl zlib1g-dev build-essential libssl-dev
libreadline-dev libyaml-dev libxml2-dev libxslt1-dev libcurl4-openssl-dev
libffi-dev libpq-dev memcached libmemcached-dev
二、Memcached替代Redis方案
2.1 Memcached服务安装与配置
sudo apt install memcached
sudo systemctl enable memcached
sudo nano /etc/memcached.conf
修改关键参数:
-l 127.0.0.1
→-l 0.0.0.0
(允许远程连接)-m 256
(根据内存调整,建议分配512MB)
重启服务:sudo systemctl restart memcached
2.2 Discourse适配Memcached
修改Gemfile添加依赖:
gem 'dalli' # Memcached客户端
在config/environments/production.rb
中配置:
config.cache_store = :mem_cache_store, "服务器IP:11211"
三、远程PostgreSQL 12连接配置
3.1 数据库服务器设置
- 修改
postgresql.conf
:listen_addresses = '*'
- 在
pg_hba.conf
添加:host discourse discourse 192.168.1.100/32 md5
- 创建专用用户与数据库:
CREATE USER discourse WITH PASSWORD 'strongpassword'; CREATE DATABASE discourse_prod OWNER discourse;
:cite[5]:cite[7]
3.2 Discourse数据库配置
# config/database.yml
production:
adapter: postgresql
encoding: unicode
host: 192.168.1.100
port: 5432
database: discourse_prod
username: discourse
password: strongpassword
四、Discourse非Docker化安装
4.1 源码部署与依赖安装
git clone https://github.com/discourse/discourse.git
cd discourse
bundle install --deployment --without test --without development
4.2 编译优化与启动
RAILS_ENV=production bundle exec rake assets:precompile
RAILS_ENV=production bundle exec rails server -b 0.0.0.0
建议使用Systemd托管进程(示例单元文件略)
五、Nginx反向代理配置
# 宝塔面板创建的站点配置中增加:
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
SSL证书建议使用Let’s Encrypt自动签发:cite[6]:cite[8]
六、系统维护与更新策略
6.1 日常更新流程
cd /path/to/discourse
git fetch origin
git checkout main
bundle install
RAILS_ENV=production bundle exec rake assets:precompile
sudo systemctl restart discourse
6.2 数据库迁移处理
RAILS_ENV=production bundle exec rake db:migrate
常见问题解答
Q1: Memcached与Redis性能对比如何?
在2GB内存环境下,Memcached的LRU淘汰机制更高效,实测QPS提升约15%:cite[4]:cite[6]
Q2: 如何验证远程PostgreSQL连通性?
psql -h 192.168.1.100 -U discourse -d discourse_prod
没有回复内容