2、环境准备:操作系统选型、硬件要求、网络规划、依赖软件安装
部署任何服务,环境准备都是地基活。地基没打好,后面再怎么折腾也白搭。Join Server 虽然不算特别吃资源,但该有的规划一步都不能省。我见过太多人上来就装,结果网络不通、磁盘撑爆、证书配不上,最后全得重来。
这一章,咱们把环境准备拆成四个块:操作系统选什么、硬件要多少、网络怎么划、依赖装哪些。每个点我都会结合自己的踩坑经历来讲。
核心原则:Join Server 对底层依赖不多,但版本敏感。操作系统和依赖库的版本一旦选错,后面编译或运行时会报一些莫名其妙的错。所以,选型阶段多花 10 分钟,后面省 10 小时。
2.1 操作系统选型
我个人习惯,生产环境首选 Ubuntu 20.04 LTS 或 Debian 11。为什么?
- 包管理成熟:apt 源里的 Erlang、PostgreSQL、Nginx 版本都比较新,不用自己编译。
- 社区支持好:遇到问题,Google 一下基本都有现成答案。
- 长期维护:LTS 版本有 5 年安全更新,省心。
如果你公司强制用 CentOS,那建议选 Rocky Linux 8 或 AlmaLinux 8。CentOS 7 已经 EOL 了,别再用。我记得有一次帮客户排查问题,他们还在用 CentOS 6,连 Erlang 23 都装不上,最后只能手动编译,折腾了两天。
| 操作系统 | 推荐版本 | 我的评价 |
|---|---|---|
| Ubuntu | 20.04 LTS / 22.04 LTS | 首选,省心,包全 |
| Debian | 11 (Bullseye) | 稳定,适合高要求场景 |
| Rocky Linux | 8.x | CentOS 替代品,兼容性好 |
| AlmaLinux | 8.x | 和 Rocky 差不多,看个人喜好 |
小建议:别用最小化安装。虽然看起来干净,但缺了常用工具(比如 curl、vim、net-tools),后面排查问题会很难受。我一般选「Server with GUI」或至少把开发工具包装上。
2.2 硬件要求
Join Server 本身不重,但它的后端依赖(PostgreSQL、MQTT 代理、可能的 Redis)会吃资源。说白了,你给多少资源,它就能扛多少并发。
我列一个最低配置和一个推荐配置,供你参考:
| 资源 | 最低配置 | 推荐配置 | 说明 |
|---|---|---|---|
| CPU | 2 核 | 4 核 | Erlang 虚拟机对多核利用不错 |
| 内存 | 4 GB | 8 GB | PostgreSQL 和 Erlang 都是内存大户 |
| 磁盘 | 40 GB (SSD) | 100 GB (SSD) | 日志和数据库会慢慢涨 |
| 网络 | 千兆 | 千兆 | 内网延迟要低,尤其 MQTT 场景 |
注意:磁盘一定要用 SSD。我曾经在 HDD 上跑过 Join Server,数据库写入稍微一多,延迟直接飙到几百毫秒。SSD 不是可选项,是必需品。
2.3 网络规划
网络规划这块,很多人容易忽略。你想想看,Join Server 要跟设备通信、要跟应用服务器通信、还要跟数据库通信。端口不开通,服务跑起来也是白搭。
我一般会画一张网络拓扑图,把每个服务的端口列清楚。下面这张 SVG 图是我常用的规划思路:
端口规划上,我建议遵循最小权限原则:
- 对外端口:只开 443(HTTPS)和 1883/8883(MQTT)。其他端口一律关掉。
- 对内端口:Join Server 的管理端口(8080、8081)只绑定内网 IP,别暴露到公网。
- 数据库端口:PostgreSQL 的 5432 只允许 Join Server 所在服务器访问,别开给整个网段。
避坑指南:我曾经把 PostgreSQL 端口开到了 0.0.0.0,结果被扫描工具扫出来,差点被攻击。后来我改成只监听 127.0.0.1,再用 Unix Socket 连接,安全多了。
2.4 依赖软件安装
Join Server 的依赖其实不多,但版本要卡死。我列一个清单:
| 软件 | 版本要求 | 用途 |
|---|---|---|
| Erlang/OTP | 24.x 或 25.x | Join Server 运行环境 |
| PostgreSQL | 13.x 或 14.x | 设备信息、会话数据存储 |
| Nginx | 1.18+ | 反向代理、TLS 终结 |
| Mosquitto (可选) | 2.x | MQTT 代理(如果不用内置) |
| Redis (可选) | 6.x | 会话缓存、速率限制 |
安装步骤其实很简单。以 Ubuntu 20.04 为例,我一般这么干:
# 更新包索引
sudo apt update
# 安装 Erlang(从官方源)
wget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb
sudo dpkg -i erlang-solutions_2.0_all.deb
sudo apt update
sudo apt install esl-erlang
# 安装 PostgreSQL
sudo apt install postgresql postgresql-contrib
# 安装 Nginx
sudo apt install nginx
# 验证版本
erl -version
psql --version
nginx -v
注意:别用系统自带的 Erlang 包(比如 apt 里的 erlang 包),版本太老。一定要从 Erlang Solutions 官方源装。我见过有人用 apt 默认源装 Erlang,结果编译 Join Server 时一堆函数找不到,折腾了一下午。
安装完成后,建议做一次简单的健康检查:
- Erlang 能启动 shell,输入
halt()正常退出。 - PostgreSQL 能通过
sudo -u postgres psql -c "SELECT version();"返回版本信息。 - Nginx 能通过
curl http://localhost返回默认页面。
嗯,环境准备这块就这些。说白了,操作系统选 LTS,硬件给足 SSD,网络端口最小化,依赖版本卡死。做到这四点,后面部署 Join Server 基本不会卡在环境问题上。