Ubuntu Server 22.04非Docker部署Discourse全指南(宝塔+远程MariaDB+Memcached) - 技术宅银魂 - 科技改变生活 - 万事屋 | 生活·动漫·娱乐综合社区-银魂同好聚集地

Ubuntu Server 22.04非Docker部署Discourse全指南(宝塔+远程MariaDB+Memcached)

前言

在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.loglog/production.log),根据实际业务负载动态调整资源配置。

请登录后发表评论

    没有回复内容

万事屋新帖