第四章 环境准备:Linux服务器基础配置、Docker与Docker Compose安装、防火墙与端口规划、域名与SSL证书准备

好,咱们进入实战前的最后一道工序——环境准备。说实话,很多新手在这块栽跟头,不是服务器配置不对,就是端口没开,折腾半天连不上服务器。我刚开始搭LoRaWAN网络服务器时,就吃过这个亏,后来总结了一套标准流程,照着做基本不会出问题。

4.1 Linux服务器基础配置

我个人习惯用Ubuntu 20.04 LTS或22.04 LTS,稳定、社区活跃、遇到问题好搜解决方案。CentOS也行,但这两年转向Stream版本后,我建议还是用Ubuntu省心。

第一步:更新系统

拿到一台新服务器,第一件事就是更新包管理器。别偷懒,很多安全漏洞就是通过旧版本进来的。

sudo apt update && sudo apt upgrade -y

第二步:创建专用用户

我从来不用root直接操作。创建一个叫lorawan的用户,权限够用就行。

sudo useradd -m -s /bin/bash lorawan
sudo usermod -aG sudo lorawan
passwd lorawan

第三步:配置SSH密钥登录

密码登录?嗯,我建议你关掉。我在项目中遇到过暴力破解,一天几万次尝试,看着都吓人。

# 在本地生成密钥对
ssh-keygen -t ed25519 -C "lorawan-server"

# 将公钥复制到服务器
ssh-copy-id lorawan@你的服务器IP

# 修改SSH配置
sudo vim /etc/ssh/sshd_config
# 设置 PasswordAuthentication no
# 设置 PermitRootLogin no

sudo systemctl restart sshd
⚠️ 重要提醒: 修改SSH配置前,务必保持另一个终端连接开着。我曾经手滑把配置改错了,结果把自己锁在外面,最后只能去机房重启服务器。那滋味,别提了。

4.2 Docker与Docker Compose安装

LoRaWAN网络服务器用Docker部署是最省心的方式。说白了,就是把所有依赖打包好,你只管拉镜像、跑容器就行。

安装Docker

官方推荐用脚本安装,简单粗暴:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 将用户加入docker组,避免每次sudo
sudo usermod -aG docker lorawan

# 验证安装
docker --version

安装Docker Compose

现在Docker Compose已经集成到Docker CLI里了,但老版本还是得单独装。我建议直接用插件版:

# 安装docker-compose-plugin
sudo apt install docker-compose-plugin

# 验证
docker compose version
💡 小技巧: 如果你用的是国内云服务器,记得配置Docker镜像加速器。不然拉取ChirpStack等国外镜像时,慢得你想砸键盘。

4.3 防火墙与端口规划

LoRaWAN网络服务器需要开放哪些端口?我整理了一张表,你照着配就行。

端口 协议 用途 说明
1700 UDP LoRaWAN网关上行数据 必须开放,否则网关连不上
8080 TCP Web管理界面 建议绑定域名后用HTTPS
443 TCP HTTPS访问 生产环境必开
22 TCP SSH管理 建议修改默认端口

配置UFW防火墙

Ubuntu自带的UFW挺好用,我一般这么配:

sudo ufw default deny incoming
sudo ufw default allow outgoing

# 开放必要端口
sudo ufw allow 1700/udp
sudo ufw allow 8080/tcp
sudo ufw allow 443/tcp
sudo ufw allow 2222/tcp  # 假设SSH改成了2222端口

sudo ufw enable
sudo ufw status verbose

🔑 关键点: 1700端口是UDP协议,别写成TCP了。我见过有人配错,网关数据死活发不过来,排查了半天才发现是协议搞错了。

4.4 域名与SSL证书准备

生产环境一定要配HTTPS。为什么?因为LoRaWAN网络服务器涉及设备密钥和用户数据,明文传输等于裸奔。

域名解析

假设你买了example.com这个域名,需要添加一条A记录指向服务器IP:

# 在DNS管理后台添加
类型: A
主机记录: lorawan
记录值: 你的服务器公网IP

这样,你的Web管理界面就能通过https://lorawan.example.com访问了。

申请SSL证书

我推荐用Let's Encrypt的免费证书,配合Certbot自动续期,省心又安全。

# 安装Certbot
sudo apt install certbot python3-certbot-nginx

# 申请证书(需要先安装Nginx)
sudo certbot --nginx -d lorawan.example.com

# 测试自动续期
sudo certbot renew --dry-run
💡 经验之谈: 证书有效期只有90天,但Certbot会自动续期。不过,我建议你每个月手动检查一次续期状态,防止cron任务出问题导致证书过期。我在项目中遇到过两次,都是因为服务器重启后cron没启动,证书过期了才发现。

配置Nginx反向代理

有了证书,还得让Nginx把HTTPS请求转发到LoRaWAN网络服务器的Web端口。下面是一个典型的配置:

server {
    listen 443 ssl;
    server_name lorawan.example.com;

    ssl_certificate /etc/letsencrypt/live/lorawan.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/lorawan.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        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;
    }
}

# HTTP自动跳转HTTPS
server {
    listen 80;
    server_name lorawan.example.com;
    return 301 https://$server_name$request_uri;
}

配置完记得重载Nginx:

sudo nginx -t  # 测试配置是否正确
sudo systemctl reload nginx
⚠️ 注意: 如果你用Docker部署LoRaWAN网络服务器,Nginx和Web服务可能不在同一台机器上。这时候proxy_pass要写Docker宿主机的IP,或者用Docker网络互通的方式。具体怎么配,咱们后面章节会细讲。

好了,环境准备这块就这些。你想想看,服务器配好了、Docker装上了、防火墙开了、域名证书也搞定了,接下来就可以正式部署LoRaWAN网络服务器了。下一章,咱们开始动手搭建ChirpStack,那才是真正的重头戏。