前言
Discourse作为现代化的开源论坛系统,官方推荐使用Docker部署。但对于需要深度定制或希望直接管理环境的用户,原生安装具有独特优势。本文将详解在Ubuntu Server 22.04系统下,通过宝塔面板实现非Docker部署,并连接远程MariaDB 10.6数据库的全流程。
环境准备
系统要求
• Ubuntu Server 22.04 LTS (全新安装)
• 最小化配置:2核CPU/4GB内存/50GB存储
• 已开放端口:80/443(Web服务)、22(SSH)、3306(数据库)
软件依赖
sudo apt update && sudo apt upgrade -y sudo apt install -y curl wget git build-essential libssl-dev libreadline-dev zlib1g-dev
宝塔面板安装与配置
1. 安装宝塔国际版
wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && sudo bash install.sh
2. 环境组件安装
通过宝塔面板安装:
• Nginx 1.22+
• MariaDB 10.6(仅本地安装用于面板管理)
• PHP 8.1(可选)
• Redis 6.2+
远程MariaDB配置
1. 数据库服务器准备
# 修改MariaDB监听地址 sudo sed -i 's/bind-address.*/bind-address = 0.0.0.0/' /etc/mysql/mariadb.conf.d/50-server.cnf # 创建专用数据库用户 CREATE DATABASE discourse_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'discourse_user'@'%' IDENTIFIED BY 'StrongPassword123!'; GRANT ALL PRIVILEGES ON discourse_db.* TO 'discourse_user'@'%'; FLUSH PRIVILEGES;
2. 防火墙配置
sudo ufw allow from 192.168.1.0/24 to any port 3306 # 建议限制访问IP段 sudo systemctl restart mariadb
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 cd discourse git checkout stable
2. 数据库配置
创建config/database.yml:
production: adapter: mysql2 encoding: utf8mb4 collation: utf8mb4_unicode_ci database: discourse_db username: discourse_user password: "StrongPassword123!" host: 192.168.1.100 # 数据库服务器IP port: 3306 pool: 5 socket: /var/run/mysqld/mysqld.sock
3. 依赖安装
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. Puma服务配置
创建/etc/systemd/system/discourse.service:
[Unit] Description=Discourse Application Server After=network.target [Service] User=www Group=www WorkingDirectory=/var/www/discourse Environment=RAILS_ENV=production ExecStart=/usr/local/bin/puma -C config/puma.rb Restart=always RestartSec=3 [Install] WantedBy=multi-user.target
宝塔面板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; proxy_set_header X-Forwarded-Proto $scheme; }
安全加固建议
1. 数据库连接加密
在database.yml增加SSL配置:
ssl: true sslca: /path/to/ca.pem
2. 定期备份策略
# 数据库备份 mysqldump -h [host] -u [user] -p[pass] discourse_db | gzip > /backup/db_$(date +%F).sql.gz # 应用备份 tar czvf /backup/discourse_$(date +%F).tar.gz /var/www/discourse
故障排查指南
常见问题处理
Q: 数据库连接超时
• 检查3306端口连通性:telnet db_host 3306
• 验证GRANT权限设置
• 检查SELinux/防火墙设置
Q: Assets预编译失败
• 确保Node.js版本≥14.x
• 检查Yarn依赖:yarn install --frozen-lockfile
结语
通过本文的详细步骤,您已成功在Ubuntu Server 22.04上实现了Discourse的非Docker部署,并整合了远程MariaDB数据库。这种部署方式虽然复杂度较高,但为深度定制和性能优化提供了更大空间。建议定期关注Discourse官方更新,及时同步安全补丁和功能改进。
没有回复内容