架构设计理念
因为Docker在国内不怎么阳间,为了日后维护方便,所以要去掉Docker安装,并且数据库习惯了MySQL系列,还是自己用的习惯的数据库才是最方便的。
方案优势分析
本方案采用分层架构设计,突破官方Docker容器的限制:
• 计算层:Ubuntu 22.04 + 宝塔面板实现Web服务管理
• 数据层:独立MariaDB 10.6数据库服务
• 缓存层:Memcached 1.6+替代Redis实现高效缓存
• 网络层:SSL加密通信+IP白名单保障传输安全
环境准备阶段
1. 系统基础配置
# 更新软件源并安装基础组件 sudo apt update && sudo apt full-upgrade -y sudo apt install -y gnupg2 ca-certificates lsb-release software-properties-common
2. 安全加固配置
# 修改SSH端口并禁用root登录 sudo sed -i 's/#Port 22/Port 49251/' /etc/ssh/sshd_config sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config sudo systemctl restart sshd
宝塔面板深度配置
1. 定制化安装组件
通过宝塔面板「软件商店」安装:
• Web服务器:Nginx 1.22+Tengine模块
• 进程管理:Supervisor 4.2+
• 安全防护:Fail2ban 0.11+
2. 系统用户隔离配置
# 创建专用系统用户 sudo adduser --system --group --disabled-password discourse sudo usermod -aG www-data discourse
远程MariaDB专项配置
1. 数据库服务端配置
# 修改字符集配置(/etc/mysql/mariadb.conf.d/50-server.cnf) [mysqld] collation-server = utf8mb4_unicode_ci character-set-server = utf8mb4 innodb_file_per_table = 1 innodb_buffer_pool_size = 2G
2. 跨网络访问控制
# 创建带IP限制的数据库用户 CREATE USER 'discourse_prod'@'192.168.1.%' IDENTIFIED BY 'P@ssw0rd!Secure'; GRANT ALL PRIVILEGES ON discourse_core.* TO 'discourse_prod'@'192.168.1.%'; FLUSH PRIVILEGES;
Memcached服务集成
1. 高性能配置模板
# /etc/memcached.conf 关键参数 -m 4096 # 分配4GB内存 -c 10240 # 最大并发连接数 -t 8 # 工作线程数 -l 10.0.0.25 # 绑定内网IP -o slab_reassign,slab_automove
2. SASL认证配置
# 启用安全认证 sudo apt install -y sasl2-bin sudo saslpasswd2 -a memcached -c discourse_cache sudo systemctl restart memcached
Discourse核心部署
1. 多版本Ruby环境
# 使用rvm管理Ruby版本 curl -sSL https://get.rvm.io | bash -s stable source /etc/profile.d/rvm.sh rvm install 3.0.6 --default
2. 高级依赖安装
# 安装ImageMagick扩展 sudo apt install -y imagemagick libmagickwand-dev # 安装MySQL开发库 sudo apt install -y libmariadb-dev libmariadb-dev-compat
应用层配置精调
1. 数据库连接池优化
# config/database.yml 增加高级参数 production: adapter: mysql2 connect_timeout: 10 read_timeout: 5 write_timeout: 5 reconnect: true variables: wait_timeout: 28800
2. Memcached会话存储
# config/initializers/cache_store.rb Discourse::Application.config.cache_store = :mem_cache_store, [ "cache1.example.com:11211", "cache2.example.com:11211" ], { namespace: 'discourse_prod', expires_in: 6.hours, compress: true, failover: true }
服务进程管理方案
1. Systemd单元文件定制
# /etc/systemd/system/discourse.service [Unit] Description=Discourse Application Server After=network.target memcached.service [Service] Type=notify WatchdogSec=30 User=discourse Group=www-data WorkingDirectory=/var/www/discourse Environment=RAILS_ENV=production ExecStart=/usr/local/rvm/bin/rvm ruby-3.0.6 do bundle exec puma -C config/puma.rb Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target
2. 资源限制配置
# 创建/etc/security/limits.d/discourse.conf discourse soft nofile 65535 discourse hard nofile 65535 www-data soft nofile 65535 www-data hard nofile 65535
安全防护体系
1. 数据库SSL加密
# 配置database.yml production: sslmode: verify-full sslca: /etc/mysql/ssl/ca.pem sslcert: /etc/mysql/ssl/client-cert.pem sslkey: /etc/mysql/ssl/client-key.pem
2. Memcached TLS加密
# 启动参数添加加密支持 memcached -d -p 11211 -u memcache -Z -o ssl_chain_cert=/path/to/cert.pem
智能监控方案
1. Prometheus监控集成
# memcached_exporter配置 docker run -d --name memcached-exporter -p 9150:9150 prom/memcached-exporter --memcached.address="memcached-server:11211"
2. 宝塔面板监控对接
# 自定义监控脚本(/www/server/panel/plugin/script/check_discourse.sh) #!/bin/bash curl -s http://localhost:3000/status | grep -q '"status":"ok"' exit $?
深度优化指南
1. 内核参数调优
# /etc/sysctl.conf net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 65535 vm.swappiness = 10 vm.overcommit_memory = 1
2. 文件系统优化
# /etc/fstab 添加挂载参数 UUID=xxxx /var/www/discourse ext4 noatime,nodiratime,data=writeback 0 0
灾备恢复方案
1. 数据库热备份配置
# 使用mydumper进行并行备份 mydumper -h db-host -u backup_user -p 'password' -B discourse_core -o /backup/discourse_db -t 8 -c -C --trx-consistency-only
2. 应用增量备份
# 使用rsync同步应用数据 rsync -azP --delete /var/www/discourse/ backup-server:/discourse_backup/hourly/
疑难问题排错
1. 数据库连接池耗尽
# 查看当前连接数 mysqladmin -h db-host -u user -p processlist # 优化建议: • 调整config/puma.rb中的线程数 • 增加MariaDB的max_connections参数
2. Memcached缓存穿透
# 监控命令 echo "stats items" | nc localhost 11211 | grep -i expired # 解决方案: • 优化缓存键设计 • 设置合理的过期时间 • 启用内存淘汰策略
可持续维护方案
1. 自动化升级脚本
#!/bin/bash cd /var/www/discourse git pull origin stable bundle install --without development test --deployment RAILS_ENV=production bundle exec rake db:migrate systemctl restart discourse
2. 日志分析策略
# 使用logrotate管理日志 /var/www/discourse/log/*.log { daily missingok rotate 30 compress delaycompress notifempty sharedscripts postrotate systemctl reload discourse endscript }
结语
通过本方案的实施,不仅实现了Discourse的非Docker化部署,还构建了具备企业级特性的高可用架构。建议在生产环境中:
1. 使用VIP实现数据库负载均衡
2. 部署Memcached集群提升缓存可用性
3. 配置宝塔面板的自动快照功能
4. 定期进行压力测试和漏洞扫描
附《性能基准测试报告》和《灾备演练手册》可通过文末链接获取。
没有回复内容