跳转至

环境部署1: Open5GS

在网络上找到的有关 Dockerized Open5GS 的部署经验帖:

名称 地位 链接
herlesupreeth/docker_open5gs 最完整的Docker部署方案,官方推荐 https://github.com/herlesupreeth/docker_open5gs
Open5GS官方VoLTE Docker教程 官方文档中引用的Docker方案 https://open5gs.org/open5gs/docs/tutorial/03-VoLTE-dockerized/
Nick vs Networking博客 经典的Open5GS+UERANSIM入门教程 https://nickvsnetworking.com/my-first-5g-core-open5gs-and-ueransim/
Medium: 5G Core Network Setup eranga的详细部署经验 https://medium.com/rahasak/5g-core-network-setup-with-open5gs-and-ueransim-cd0e77025fd7
Gradiant 5G Charts Kubernetes/Helm部署参考 https://gradiant.github.io/5g-charts/open5gs-ueransim-gnb.html

下面给出笔者自己的步骤:

环境: Ubuntu 24.04, 采用本机部署 Open5GS Docker, 不考虑虚拟机

系统环境准备

系统版本确认:

Bash
1
2
# 确认Ubuntu版本 (22.04/24.04...)
lsb_release -a

Docker 和 Docker Compose 安装:

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 安装Docker
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 验证安装
docker --version    # 需要 >= 22.0.5
docker compose version  # 需要 >= 2.14

配置docker权限: [懒人族. 不想每次都显式输入 sudo]

Bash
1
2
sudo usermod -aG docker $USER
newgrp docker

拉取/构建/配置

本地仓库:

Bash
1
2
git clone https://github.com/herlesupreeth/docker_open5gs d2c-open5gs
cd d2c-open5gs

拉取预构建镜像: [推荐. 节省时间]

Bash
1
2
3
4
# 拉取基础镜像
docker pull ghcr.io/herlesupreeth/docker_open5gs:master
# 含义是: alias (用 docker images 检查, 发现二者UUID相同)
docker tag ghcr.io/herlesupreeth/docker_open5gs:master docker_open5gs

编辑 .env 文件并修改:

Bash
1
2
cd ~/d2c-open5gs
vim .env
YAML
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# PLMN配置(测试用001/01即可)
MCC=001
MNC=01

# 重要: 改为你的主机IP地址
DOCKER_HOST_IP=192.168.1.100   # ← 改成你的实际IP

# UE IP地址池(确保不与现有网络冲突)
UE_IPV4_INTERNET=10.45.0.0/16
UE_IPV4_IMS=10.46.0.0/16

# 5G SA部署需要的参数
UPF_ADVERTISE_IP=192.168.1.100  # ← 通常与DOCKER_HOST_IP相同

系统设置

网络:

Bash
1
2
3
4
5
6
7
8
9
# 关闭防火墙
sudo ufw disable

# 启用IP转发
sudo sysctl -w net.ipv4.ip_forward=1

# 持久化IP转发配置
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

环境变量:

Bash
1
2
3
4
cd ~/d2c-open5gs
set -a
source .env
set +a

启动 5GC

Bash
1
2
3
4
# 启动所有5GC网络功能
docker compose -f sa-deploy.yaml up -d
# 查看运行状态
docker compose -f sa-deploy.yaml ps

alt text

alt text

alt text

Bash
1
2
3
4
5
6
7
# 全盘检查
# - mongodb
# - webui
# - nrf, scp, ausf, udm, udr, pcf, bsf, nssf
# - amf, smf, upf

docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

alt text

检查: 访问WebUI

打开浏览器访问: http://<DOCKER_HOST_IP>:9999, 其实也就是 localhost:9999

登录凭据:

  • 用户名: admin
  • 密码: 1423

alt text

后续

现在我们已经完成了初始化配置+第一次启动:

  1. 该怎么关闭呢?
  2. 下一次如何再启动呢?

关闭

Bash
1
2
3
4
5
6
7
cd ~/d2c-open5gs
# 方式A: 停止但保留容器 [推荐日常使用]
docker compose -f sa-deploy.yaml stop
# 方式B: 停止并删除容器
docker compose -f sa-deploy.yaml down
# 方式C: 停止并删除容器+数据卷 [完全重置. 慎用]
docker compose -f sa-deploy.yaml down -v

开启

Bash
1
2
3
4
5
cd ~/d2c-open5gs
# 如果之前用 stop 关闭的
docker compose -f sa-deploy.yaml start
# 如果之前用 down 关闭的 [or 首次启动, 正如上面我们配置环境时]
docker compose -f sa-deploy.yaml up -d

推荐工作流

鉴于我们现在已经配置完所有环节, 后面就是日常的"开启/关闭"即可, 因此笔者推荐的工作流是:

Bash
1
2
3
4
# 上班:
docker compose -f sa-deploy.yaml start
# 下班:
docker compose -f sa-deploy.yaml stop
指令说明

指令说明 [暂时用不上, 担心后面有需要, 先整理着]

  • 修改配置文件: restart
    • 小型yaml配置
  • 修改 docker-compose.yaml / .env: down + up -d
    • 端口/网络/环境变量
  • 修改 Dockerfile: down + build + up -d
    • 构建脚本
  • 修改 Open5GS 源码: down + build --no-cache + up -d
    • C 代码

用 AI 总结了一下, 感觉整理的比笔者好:

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
docker_open5gs/
├── .env                    # 环境变量 → down + up
├── sa-deploy.yaml          # 部署定义 → down + up
├── base/
│   └── Dockerfile          # 基础镜像构建 → build --no-cache
├── amf/
│   └── amf.yaml            # AMF配置 → restart amf
├── smf/
│   └── smf.yaml            # SMF配置 → restart smf
├── upf/
│   └── upf.yaml            # UPF配置 → restart upf
└── ...