引言
本文将指导您在运行 Plesk 面板的 Ubuntu Server 22.04 上,以非 Docker 模式手动安装 Discourse,并配置其使用远程 MariaDB 10.6 数据库,同时用 Memcached 替换 Redis 用于缓存。由于 Discourse 默认依赖 PostgreSQL 和 Redis,我们需要额外的配置来实现这些需求。以下是详细的安装和配置步骤。
安装 Plesk
系统准备
首先,确保您的 Ubuntu Server 22.04 系统是最新的,以避免兼容性问题。运行以下命令更新系统软件包:
sudo apt update
sudo apt upgrade -y
下载并安装 Plesk
下载 Plesk 安装程序并执行安装。获取安装脚本并运行:
sudo chmod +x plesk-installer.run
sudo ./plesk-installer.run
按照屏幕提示完成安装过程,包括选择所需的组件并设置管理员密码。安装完成后,您可以通过浏览器访问 Plesk 面板进行后续配置。
手动安装 Discourse
安装依赖项
Discourse 需要一系列依赖包,首先安装以下软件:
sudo apt install -y git ruby-full libpq-dev libcurl4-openssl-dev libxml2-dev libxslt1-dev libicu-dev
gem install bundler
获取 Discourse 源码
从 GitHub 克隆 Discourse 仓库并进入目录:
git clone https://github.com/discourse/discourse
cd discourse
配置临时数据库
在安装初期,暂时使用本地 PostgreSQL 数据库(后续会连接远程 MariaDB)。编辑 config/database.yml
,添加以下配置:
development:
adapter: postgresql
encoding: unicode
database: discourse_dev
host: localhost
port: 5432
pool: 5
username: your_username
password: your_password
将 your_username
和 your_password
替换为实际的 PostgreSQL 用户凭据。
初始化并启动 Discourse
安装 Ruby 依赖并运行数据库迁移:
bundle install --without development test
bundle exec rake db:migrate
启动 Discourse 服务器:
bundle exec rails s -b 0.0.0.0 -p 3000
此时,您可以通过访问 http://your_server_ip:3000
检查 Discourse 是否运行正常。
配置 PostgreSQL 和 mysql_fdw 以连接远程 MariaDB
安装 PostgreSQL
由于 Discourse 默认使用 PostgreSQL,我们需要安装它并确保其运行:
sudo apt install -y postgresql-14
sudo systemctl start postgresql
sudo systemctl enable postgresql
安装 MySQL 客户端库
为支持 mysql_fdw 扩展,安装 MySQL 客户端库:
sudo apt install -y libmysqlclient-dev
安装 mysql_fdw 扩展
克隆并编译 mysql_fdw 扩展:
git clone https://github.com/EnterpriseDB/mysql_fdw
cd mysql_fdw
make
sudo make install
配置 PostgreSQL 连接 MariaDB
在 PostgreSQL 中启用 mysql_fdw 扩展并创建远程服务器连接:
CREATE EXTENSION mysql_fdw;
CREATE SERVER my_mariadb_server FOREIGN DATA WRAPPER mysql_fdw
OPTIONS (host 'remote_host', port '3306', user 'username', password 'password');
CREATE USER MAPPING FOR CURRENT_USER SERVER my_mariadb_server;
将 remote_host
、username
和 password
替换为远程 MariaDB 的实际值。
映射远程表
导入远程 MariaDB 的表结构,或手动创建外键表。例如,创建 users
表的外键表:
CREATE FOREIGN TABLE public.users (
id SERIAL,
username VARCHAR(255),
email VARCHAR(255)
) SERVER my_mariadb_server OPTIONS (table_name 'users');
确保所有 Discourse 需要的表都被正确映射到远程 MariaDB。
在 Plesk 中集成 Discourse
创建网站
在 Plesk 面板中创建一个新网站,将其文档根目录设置为 Discourse 的安装路径(例如 /var/discourse
)。
配置 NGINX 代理
在 Plesk 的 NGINX 配置中添加以下内容,将请求代理到 Discourse 的端口 3000:
location / {
proxy_pass http://localhost: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;
}
保存配置后,Plesk 会自动重载 NGINX,使 Discourse 通过域名可访问。
用 Memcached 替换 Redis 用于缓存
安装 Memcached
安装并启动 Memcached 服务:
sudo apt install -y memcached
sudo systemctl start memcached
sudo systemctl enable memcached
配置 Discourse 使用 Memcached
安装 Dalli gem 以支持 Memcached:
gem install dalli
编辑 config/environments/production.rb
,将缓存存储设置为 Memcached:
config.cache_store = :dalli_store, { url: "memcached://localhost:11211", namespace: 'discourse-' + Rails.env }
此配置将 Discourse 的缓存从 Redis 切换到 Memcached。
注意事项与挑战
数据库兼容性
Discourse 不原生支持 MariaDB,通过 mysql_fdw 访问可能存在兼容性问题,建议测试所有读写操作以确保功能正常。
性能问题
远程数据库访问可能导致延迟,需优化网络和查询性能,以确保 Discourse 的响应速度。
Redis 依赖
某些 Discourse 功能可能仍需 Redis 支持,建议检查代码并根据需要调整配置,确保缓存替换后功能不受影响。
结论
通过以上步骤,您可以在 Ubuntu Server 22.04 上通过 Plesk 面板以非 Docker 模式安装 Discourse,并配置其使用远程 MariaDB 10.6 数据库,同时用 Memcached 替换 Redis。此方案需要额外的 PostgreSQL 和 mysql_fdw 配置,但提供了一种可行的解决方案。建议在部署前进行充分测试,确保性能和稳定性。
没有回复内容