前言
在Docker部署盛行的今天,原生安装Discourse能够突破容器限制,实现更灵活的配置管理。本教程将演示在Ubuntu 22.04系统中,通过宝塔面板搭建Discourse论坛系统,连接远程MariaDB 10.6数据库,并使用Memcached替代Redis作为缓存服务的完整方案。
架构拓扑
系统架构图
应用服务器(Ubuntu 22.04):
• 宝塔面板 + Nginx
• Discourse应用
• Memcached 1.6+
数据库服务器(独立):
• MariaDB 10.6
• 专用数据库账户
基础环境搭建
1. 系统初始化
sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential libssl-dev libreadline-dev zlib1g-dev libmemcached-dev
2. 安装宝塔国际版
wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh sudo bash install.sh
3. 通过宝塔安装组件
• Nginx 1.22+
• Memcached 1.6+
• PHP 8.1(可选)
• 进程管理工具(Supervisor)
远程数据库配置
1. 创建专用账户
CREATE DATABASE discourse_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'discourse_user'@'应用服务器IP' IDENTIFIED BY 'SecurePassw0rd!'; GRANT ALL PRIVILEGES ON discourse_db.* TO 'discourse_user'@'应用服务器IP'; FLUSH PRIVILEGES;
2. 安全策略配置
# 修改监听地址 sudo sed -i 's/bind-address.*/bind-address = 0.0.0.0/' /etc/mysql/mariadb.conf.d/50-server.cnf # 配置防火墙 sudo ufw allow from 应用服务器IP to any port 3306
Memcached服务配置
1. 安装Memcached
sudo apt install -y memcached libmemcached-tools sudo systemctl enable memcached
2. 优化配置
# /etc/memcached.conf -m 1024 # 分配1GB内存 -p 11211 -l 127.0.0.1 # 生产环境建议绑定内网IP
Discourse环境部署
1. Ruby环境安装
# 使用rbenv管理 git clone https://github.com/rbenv/rbenv.git ~/.rbenv echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(rbenv init -)"' >> ~/.bashrc source ~/.bashrc # 安装Ruby 3.0.4 rbenv install 3.0.4 rbenv global 3.0.4
2. Node.js环境
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - sudo apt-get install -y nodejs
Discourse安装与集成
1. 源码获取
git clone https://github.com/discourse/discourse.git /var/www/discourse cd /var/www/discourse git checkout stable
2. 数据库连接配置
# config/database.yml production: adapter: mysql2 host: 数据库服务器IP port: 3306 database: discourse_db username: discourse_user password: "SecurePassw0rd!" encoding: utf8mb4
3. Memcached集成配置
# config/environments/production.rb config.cache_store = :mem_cache_store, "localhost:11211", { namespace: 'discourse', compress: true, expires_in: 1.day }
4. 依赖安装
bundle config set --local without 'development test' bundle install --deployment
系统初始化
1. 数据库迁移
RAILS_ENV=production bundle exec rake db:migrate
2. 静态资源编译
RAILS_ENV=production bundle exec rake assets:precompile
3. 进程管理配置
# /etc/supervisor/conf.d/discourse.conf [program:discourse] directory=/var/www/discourse command=/usr/local/bin/puma -C config/puma.rb autostart=true autorestart=true user=www environment=RAILS_ENV="production"
宝塔面板整合
1. Nginx反向代理
location / { proxy_pass http://127.0.0.1:3000; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; }
2. 安全加固
# 在宝塔面板中配置: • SSL证书强制HTTPS • 防火墙限制访问IP • 定期自动备份
性能调优
1. Memcached优化
# 监控命中率 memcached-tool localhost:11211 stats # 调整内存分配 sudo systemctl edit memcached [Service] Environment="MEMCACHED_MEMUSAGE=2048" # 分配2GB内存
2. 数据库连接池优化
# config/puma.rb workers 2 threads 5,5 # database.yml pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
故障排查
常见问题解决
Q: Memcached连接失败
• 检查11211端口状态:telnet localhost 11211
• 验证memcached服务状态:systemctl status memcached
Q: 数据库字符集错误
• 确认数据库创建语句包含:CHARACTER SET utf8mb4
• 检查my.cnf配置:collation-server = utf8mb4_unicode_ci
维护方案
1. 升级策略
cd /var/www/discourse git fetch origin git checkout stable bundle install --deployment RAILS_ENV=production bundle exec rake db:migrate
2. 监控方案
推荐配置:
• Prometheus监控Memcached指标
• 宝塔面板资源监控
• Discourse内置性能分析工具
结语
通过本方案成功实现了Discourse的非Docker部署,结合远程MariaDB数据库和Memcached缓存服务,在保证性能的同时提升了系统架构的灵活性。建议定期检查日志文件(/var/log/memcached.log
和log/production.log
),根据实际业务负载动态调整资源配置。
没有回复内容