云计算百科
云计算领域专业知识百科平台

树莓派 3B+ 部署 TR-069 ACS(自动配置服务器)GenieACS 实录

树莓派 3B+ 部署 TR-069 ACS(自动配置服务器)GenieACS 实录**

手头有一个吃灰的树莓派 3B+,部署GenieACS,作为测试服务器使用。

适用场景:低负载测试环境(≤30 台 CPE)。不适合生产环境(数百台以上)。

硬件关键限制:

  • RAM 仅 1GB:GenieACS + MongoDB 4.4 + Redis + Node.js 总占用易超 800MB → 极易 OOM。
  • CPU 单核性能一般,满载易过热。
  • microSD 卡磨损严重 → 必须使用外接 USB SSD。
  • MongoDB 5.0+ 需要 ARMv8.2-A 指令集,Pi 3B+ 不支持 → 唯一稳定方案:Docker + MongoDB 4.4.18。
  • 电源:必须官方 5V/3A+ 适配器 + 散热片 + 风扇(温度控制在 <80°C)。

系统信息验证示例:

cat /etc/os-release # Debian GNU/Linux 12 (bookworm)
uname -m # aarch64

1. 系统准备

1.1下载并刷写镜像:
  • 下载官方 Raspberry Pi OS (64-bit) Bookworm Lite(推荐 Lite 版,节省资源):

    https://www.raspberrypi.com/software/

    2025-11-24-raspios-bookworm-arm64-lite.img.xz

  • 使用 Raspberry Pi Imager 烧录:

    • 选择 OS → Raspberry Pi OS (64-bit) → Lite 版。
    • 高级设置(齿轮图标):
      • 设置主机名(如 pi-acs)。
      • 启用 SSH(使用密码认证)。
      • 设置用户名/密码(默认 pi/raspberry,建议修改)。
      • 配置 WiFi(SSID + 密码)。
      • 区域设置(语言/时区:zh_CN.UTF-8 / Asia/Shanghai)。
    • 烧录完成后插入 SD 卡,开机即可通过 WiFi SSH 访问(ssh pi@pi-acs.local 或 IP)。

写入:因为使用的系统是win7,故写入使用树莓派镜像烧录器V1.7.5
在这里插入图片描述

在这里插入图片描述

1.2 SSH连接

因为烧录前已经配置了连接wifi,ssh访问使能等。插入SD卡,启动树莓派连接显示器即可看到WIFI的ip,使用SSH连接。也可以使用ip扫描工具扫描获取。

扫描IP:

在这里插入图片描述

SSH连接,

在这里插入图片描述

1.3更新系统与基础工具

sudo apt update && sudo apt full-upgrade -y
sudo apt install -y curl htop iotop logrotate ufw nano vim git docker.io docker-compose
sudo usermod -aG docker $USER # 需重新登录生效
sudo reboot

2. 配置交换空间(强烈推荐 1GB)

sudo swapoff -a && sudo rm -f /swapfile
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
sudo swapon –show && free -h
#显示如下
NAME TYPE SIZE USED PRIO
/swapfile file 1024M 0B -2
total used free shared buff/cache available
Mem: 906Mi 167Mi 591Mi 3.3Mi 200Mi 739Mi
Swap: 1.0Gi 0B 1.0Gi

3. 存储优化(必须)

  • 优先使用 USB SSD 作为根分区(刷镜像时选择)。
  • 启用 TRIM:

sudo systemctl enable fstrim.timer

4. 安装 Node.js 18.x LTS(GenieACS 推荐)

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash
sudo apt install -y nodejs
node -v # 应显示 v18.x v18.20.8
npm -v # 应显示 ~10.x 10.8.2

5. 安装 MongoDB(Docker + 4.4.18,唯一稳定方案)

确保你的系统已安装(前面已经安装):

  • Docker
  • Docker Compose

检查安装:

docker –version
docker-compose –version

#输出如下:
Docker version 20.10.24+dfsg1, build 297e128
docker-compose version 1.29.2, build unknown

配置国内源:

# 配置国内 Docker 镜像加速(强烈推荐,加速拉取)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://mirror.ccs.tencentyun.com",
"https://registry.docker-cn.com"
]
}
EOF

重启 Docker 服务(必须操作,否则 daemon.json 不生效):

sudo systemctl restart docker

检查镜像加速是否生效:

docker info | grep -A 10 "Registry Mirrors"
#输出
WARNING: No memory limit support
WARNING: No swap limit support
Registry Mirrors:
https://docker.m.daocloud.io/
https://mirror.ccs.tencentyun.com/
https://registry.docker-cn.com/
Live Restore Enabled: false

推荐使用 docker-compose(便于管理、健康检查、数据持久化):

创建 docker-compose.yml:

# 创建 docker-compose.yml 文件
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
mongodb:
image: mongo:4.4.18
container_name: mongodb
restart: unless-stopped
ports:
– "27017:27017"
volumes:
– ./mongodb_data:/data/db
command: mongod –wiredTigerCacheSizeGB 0.25 # 限制内存使用
healthcheck:
test: ["CMD", "mongo", "–eval", "db.adminCommand({ping:1})"]
interval: 10s
timeout: 5s
retries: 5
EOF

启动:

mkdir -p ~/mongodb_data
docker-compose up -d
docker ps | grep mongodb
docker exec -it mongodb mongo –eval "db.adminCommand({ping:1})" # 应返回 { "ok" : 1 }
#返回信息
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("ea92330d-4093-4268-b4d0-ef82e80a8463") }
MongoDB server version: 4.4.18
{ "ok" : 1 }

6. 安装并优化 Redis(128MB 内存限制)

sudo apt install -y redis-server
sudo systemctl enable –now redis-server

sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.backup

sudo tee /etc/redis/redis.conf <<EOF
bind 127.0.0.1
port 6379
daemonize yes
supervised systemd
maxmemory 128mb
maxmemory-policy allkeys-lru
save ""
appendonly no
tcp-keepalive 60
timeout 0
maxclients 100
loglevel notice
logfile /var/log/redis/redis.log
EOF

sudo mkdir -p /var/log/redis && sudo chown redis:redis /var/log/redis
sudo systemctl restart redis-server
redis-cli ping # 应返回 PONG
redis-cli info memory | grep used_memory_human

7. 安装 GenieACS(固定版本 1.2.13,避免最新版不稳定)

sudo npm install -g genieacs@1.2.13
npm list -g | grep genieacs
which genieacs-cwmp genieacs-fs genieacs-nbi genieacs-ui
#输出
/usr/bin/genieacs-cwmp
/usr/bin/genieacs-fs
/usr/bin/genieacs-nbi
/usr/bin/genieacs-ui

8. 创建专用用户与目录

sudo useradd -r -s /bin/false genieacs
sudo mkdir -p /opt/genieacs/{config,logs,uploads,backups}
sudo chown -R genieacs:genieacs /opt/genieacs
sudo chmod 750 /opt/genieacs/config
sudo chmod 755 /opt/genieacs/{logs,uploads,backups}
# 验证目录结构
ls -la /opt/genieacs/
#输出
total 24
drwxr-xr-x 6 genieacs genieacs 4096 Jan 28 12:14 .
drwxr-xr-x 4 root root 4096 Jan 28 12:14 ..
drwxr-xr-x 2 genieacs genieacs 4096 Jan 28 12:14 backups
drwxr-x— 2 genieacs genieacs 4096 Jan 28 12:14 config
drwxr-xr-x 2 genieacs genieacs 4096 Jan 28 12:14 logs
drwxr-xr-x 2 genieacs genieacs 4096 Jan 28 12:14 uploads

9. 环境变量文件(/opt/genieacs/genieacs.env)

GENIEACS_UI_JWT_SECRET=$(openssl rand -hex 32)
sudo tee /opt/genieacs/genieacs.env <<EOF
MONGODB_CONNECTION_URL=mongodb://127.0.0.1:27017/genieacs
REDIS_URL=redis://127.0.0.1:6379/0
CWMP_PORT=7547
FS_PORT=7567
NBI_PORT=7557
UI_PORT=3000
GENIEACS_UI_JWT_SECRET=$GENIEACS_UI_JWT_SECRET
DEBUG=genieacs:*
CWMP_WORKER_PROCESSES=1 # 限制并发,适合 Pi 3B+
EOF

sudo chown genieacs:genieacs /opt/genieacs/genieacs.env
sudo chmod 600 /opt/genieacs/genieacs.env

10. Systemd 服务文件

10.1 genieacs-cwmp.service (核心 CWMP 服务)

sudo tee /etc/systemd/system/genieacs-cwmp.service << 'EOF'
[Unit]
Description=GenieACS CWMP Server
After=network.target docker.service redis-server.service
Requires=docker.service redis-server.service

[Service]
Type=simple
User=genieacs
Group=genieacs
EnvironmentFile=/opt/genieacs/genieacs.env
WorkingDirectory=/opt/genieacs
ExecStart=/usr/bin/genieacs-cwmp
Restart=on-failure
RestartSec=10
MemoryMax=300M
MemorySwapMax=500M
CPUQuota=80%

[Install]
WantedBy=multi-user.target
EOF

10.2 genieacs-fs.service (文件服务)

sudo tee /etc/systemd/system/genieacs-fs.service << 'EOF'
[Unit]
Description=GenieACS FS Server
After=network.target docker.service redis-server.service
Requires=docker.service redis-server.service

[Service]
Type=simple
User=genieacs
Group=genieacs
EnvironmentFile=/opt/genieacs/genieacs.env
WorkingDirectory=/opt/genieacs
ExecStart=/usr/bin/genieacs-fs
Restart=on-failure
RestartSec=10
MemoryMax=250M
MemorySwapMax=400M
CPUQuota=60%

[Install]
WantedBy=multi-user.target
EOF

10.3 genieacs-nbi.service (北向接口服务)

sudo tee /etc/systemd/system/genieacs-nbi.service << 'EOF'
[Unit]
Description=GenieACS NBI Server
After=network.target docker.service redis-server.service
Requires=docker.service redis-server.service

[Service]
Type=simple
User=genieacs
Group=genieacs
EnvironmentFile=/opt/genieacs/genieacs.env
WorkingDirectory=/opt/genieacs
ExecStart=/usr/bin/genieacs-nbi
Restart=on-failure
RestartSec=10
MemoryMax=300M
MemorySwapMax=500M
CPUQuota=70%

[Install]
WantedBy=multi-user.target
EOF

10.4 genieacs-ui.service (Web UI 服务)

sudo tee /etc/systemd/system/genieacs-ui.service << 'EOF'
[Unit]
Description=GenieACS UI Server
After=network.target docker.service redis-server.service
Requires=docker.service redis-server.service

[Service]
Type=simple
User=genieacs
Group=genieacs
EnvironmentFile=/opt/genieacs/genieacs.env
WorkingDirectory=/opt/genieacs
ExecStart=/usr/bin/genieacs-ui
Restart=on-failure
RestartSec=10
MemoryMax=200M
MemorySwapMax=300M
CPUQuota=50%

[Install]
WantedBy=multi-user.target
EOF

10.5 加载并启动所有服务(推荐顺序)

加载并启动:

# 重新加载 systemd
sudo systemctl daemon-reload
# 启用开机自启
sudo systemctl enable genieacs-cwmp.service genieacs-fs.service genieacs-nbi.service genieacs-ui.service
# 启动服务
sudo systemctl start genieacs-cwmp.service genieacs-fs.service genieacs-nbi.service genieacs-ui.service

10.6 检查状态(推荐执行)

sudo systemctl status genieacs-cwmp genieacs-fs genieacs-nbi genieacs-ui
#或者一次性查看
sudo systemctl status genieacs-*.service

11. 防火墙与安全

sudo ufw allow 7547/tcp # CWMP
sudo ufw allow 7567/tcp # FS
sudo ufw allow 7557/tcp # NBI
sudo ufw allow 3000/tcp # UI(生产环境建议关闭或加 HTTPS)
sudo ufw allow 22/tcp # SSH
sudo ufw enable

安全建议:

  • 立即修改 UI 默认密码(admin/admin)。
  • 生产环境启用 HTTPS(Nginx 反向代理 + Let’s Encrypt)。
  • 限制 JWT 密钥有效期,定期轮换。
  • 监控:安装 vnstat、prometheus-node-exporter 或使用 htop + vcgencmd measure_temp。

12. 测试与监控

  • UI 访问:http://<Pi-IP>:3000(初始化向导全部勾选 → ABRACADABRA!)

    在这里插入图片描述

    初始化向导说明

    这个向导会帮您设置初始配置,各个选项的含义:

  • Users, roles and permissions – 创建默认用户、角色和权限
  • Presets and provisions – 创建设备预设和配置模板
  • Devices predefined search filters – 创建设备搜索过滤器
  • Device details page – 创建设备详情页视图
  • Devices listing page – 创建设备列表页视图
  • Overview page – 创建仪表盘概览页
  • 完整配置

    • 全部勾选,点击 “ABRACADABRA!”

    使用默认admin/admin登录
    在这里插入图片描述

  • CPE Connection Request URL:http://<Pi-IP>:7547/

  • 监控命令:

    htop
    docker stats mongodb
    sudo journalctl -u genieacs-* -f
    watch -n 5 vcgencmd measure_temp # 监控温度
    free -h && docker exec mongodb mongo –eval "db.stats()"

性能提示:

  • 内存紧张时可临时停止 UI 服务:sudo systemctl stop genieacs-ui。
  • 定期重启:sudo reboot(避免内存泄漏)。
  • 监控日志:/opt/genieacs/logs、/var/log/redis、/var/log/syslog。

已验证:该方案在 Pi 3B+ 上低负载稳定运行。如遇问题,请提供具体错误日志(journalctl / docker logs)。

额外推荐:

  • 使用 Docker Compose 统一管理服务(GenieACS 也可容器化)。
  • 添加温度报警脚本(超过 80°C 发送通知)。
赞(0)
未经允许不得转载:网硕互联帮助中心 » 树莓派 3B+ 部署 TR-069 ACS(自动配置服务器)GenieACS 实录
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!