Ubuntu Server 22.04 非Docker模式安装Discourse并配置远程MariaDB 10.6全攻略 - 技术宅银魂 - 科技改变生活 - 万事屋 | 生活·动漫·娱乐综合社区-银魂同好聚集地

Ubuntu Server 22.04 非Docker模式安装Discourse并配置远程MariaDB 10.6全攻略

前言

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官方更新,及时同步安全补丁和功能改进。

请登录后发表评论

    没有回复内容

万事屋新帖