This commit is contained in:
iCodex
2024-02-24 23:33:41 +08:00
commit 54755602e4
11 changed files with 348 additions and 0 deletions

20
.env Normal file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env sh
# See https://docs.docker.com/compose/environment-variables/#the-env-file
# edge-admin
VERSION=1.3.3
# edge-node
VERSION=1.3.3
ENDPOINTS=http://xxx.com:8001
CLUSTERID=xxx
SECRET=xxx
# MySQL
MYSQL_VERSION=8
MYSQL_HOST=mysqld
MYSQL_ROOT_USER=root
MYSQL_ROOT_PASSWORD=root
MYSQL_USER=edges
MYSQL_PASSWORD=edges
MYSQL_DATABASE=edges

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 Shing Lau
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

123
README.md Normal file
View File

@@ -0,0 +1,123 @@
# 使用Docker快速部署GoEdge管理平台包含API节点和边缘节点
## 部署前的准备工作
### 安装Docker
管理平台和边缘节点都需要先安装Docker新版本的Docker已包含compose插件因此我们只需要执行官方推荐的命令安装即可
```
curl -sSL https://get.docker.com | sh
```
### 部署管理平台
首先编写docker-compose.yaml因为将管理平台所依赖的mysql加进来所以这里使用docker compose的方式进行也是方便后期迁移等管理工作。
mysql的版本要求官方建议使用mysql 8最低不低于mysql 5.7.8系统内存建议4GB以上。
首先进入你想存放docker-compose.yaml的路径比如/opt/goedge然后进入该路径后创建docker-compose.yaml输入以下内容
```
version: "3"
networks:
goedge:
external: false
services:
mysqld:
image: mysql:8
container_name: mysqld
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_USER=edges
- MYSQL_PASSWORD=edges
- MYSQL_DATABASE=edges
networks:
- goedge
volumes:
- ./data/db/mysql:/var/lib/mysql:rw
restart: always
edge-admin:
image: icodex/edge-admin:1.3.3
container_name: edge-admin
ports:
- 7788:7788/tcp
- 8001:8001/tcp
networks:
- goedge
volumes:
- ./data/edge-admin/configs:/usr/local/goedge/edge-admin/configs
- ./data/edge-api/configs:/usr/local/goedge/edge-admin/edge-api/configs
restart: always
```
以上使用了mysql 8的镜像接着edge-admin是管理平台的镜像。确定没有端口冲突之后执行命令启动
```
docker compose up -d
```
运行后打开浏览器输入服务器IP地址和7788端口号进入安装界面
![](https://icodex.org/wp-content/uploads/2024/02/WX20240224-231039@2x-1354x800.png)
注意⚠因为这里的网络类型是容器内共享的因此在数据库信息填写这里数据库的地址只需要填写mysql的容器名即可比如这里的mysqld。数据库名、数据库账号、数据库密码均为edges。一直下一步就好了。
![](https://icodex.org/wp-content/uploads/2024/02/WX20240224-231233@2x-953x800.png)
ps如果你现在的宿主机系统里面已经有mysql不想再多运行一个浪费资源则需要考虑删掉docker-compose.yaml里的mysql服务并将网络类型更改为Host网络类型以方便与宿主机上的mysql通信如下
```
version: "3"
services:
edge-admin:
image: icodex/edge-admin:1.3.3
container_name: edge-admin
network_mode: host
volumes:
- ./data/edge-admin/configs:/usr/local/goedge/edge-admin/configs
- ./data/edge-api/configs:/usr/local/goedge/edge-admin/edge-api/configs
restart: always
```
docker-compose.yaml编辑好之后确定端口没有冲突就可以执行以下命令启动整个系统了
### 部署边缘节点
在上面的部署中已经完成了管理平台的部署这时可以按照官方教程添加边缘节点的方式进行添加。也可以按以下步骤部署一个Docker容器形态的边缘节点。
这里使用GoEdge的自动注册功能因此需要先在GoEdge管理界面 边缘节点 找到你所在集群 集群节点 安装升级 自动注册把endpoints、clusterId、secret三个值记录下来。
![](https://icodex.org/wp-content/uploads/2024/02/WX20240224-230019@2x-1353x800.png)
然后准备一个docker-compose.yaml输入以下内容注意替换环境变量里相应的值
```
version: "3"
services:
edge-node:
image: icodex/edge-node:1.3.3
container_name: edge-node
environment:
- ENDPOINTS=http://xxx.com:8001
- CLUSTERID=xxx
- SECRET=xxx
network_mode: host
volumes:
- ./data/edge-node/cache:/opt/cache
- ./data/edge-node/configs:/usr/local/goedge/edge-node/configs
restart: always
```
接着使用docker compose命令启动它很快就可以在管理平台看到这台上线的主机了。
以上是完整部署GoEdge的全部步骤非常简单吧
## 最后
这个项目应该不算造轮子只是我个人习惯使用docker进行服务的管理docker运行毕竟套了多一层虚拟化因此在边缘节点的容器的网络选择上建议使用host类型与宿主机共享会比较好。

47
docker-compose.yaml Normal file
View File

@@ -0,0 +1,47 @@
version: "3"
networks:
goedge:
external: false
services:
mysqld:
image: mysql:${MYSQL_VERSION}
container_name: mysqld
env_file:
- .env
networks:
- goedge
volumes:
- ./data/db/mysql:/var/lib/mysql:rw
restart: always
edge-admin:
image: icodex/edge-admin:${VERSION}
container_name: edge-admin
ports:
- 7788:7788/tcp
- 8001:8001/tcp
env_file:
- .env
networks:
- goedge
volumes:
- ./data/edge-admin/configs:/usr/local/goedge/edge-admin/configs
- ./data/edge-api/configs:/usr/local/goedge/edge-admin/edge-api/configs
restart: always
edge-node:
image: icodex/edge-node:${VERSION}
container_name: edge-node
ports:
- 80:80/tcp
- 443:443/tcp
env_file:
- .env
networks:
- goedge
volumes:
- ./data/edge-node/cache:/opt/cache
- ./data/edge-node/configs:/usr/local/goedge/edge-node/configs
restart: always

17
docker/Dockerfile.admin Normal file
View File

@@ -0,0 +1,17 @@
FROM alpine:latest
LABEL maintainer="icodex@msn.com"
ENV TZ "Asia/Shanghai"
ENV ROOT_DIR /usr/local/goedge
ARG VERSION
ENV VERSION=${VERSION}
COPY build /build/
RUN /build/base.sh \
&& /build/install.sh admin
EXPOSE 7788 8001
WORKDIR /usr/local/goedge
ENTRYPOINT [ "/usr/local/goedge/run.sh" ]

17
docker/Dockerfile.node Normal file
View File

@@ -0,0 +1,17 @@
FROM alpine:latest
LABEL maintainer="icodex@msn.com"
ENV TZ "Asia/Shanghai"
ENV ROOT_DIR /usr/local/goedge
ARG VERSION
ENV VERSION=${VERSION}
COPY build /build/
RUN /build/base.sh \
&& /build/install.sh node
EXPOSE 80 443
WORKDIR /usr/local/goedge
ENTRYPOINT [ "/usr/local/goedge/run.sh" ]

17
docker/build.sh Executable file
View File

@@ -0,0 +1,17 @@
#!/usr/bin/env bash
VERSION="1.3.3"
case "$1" in
"admin"|"node")
RUN_TYPE=${1}
;;
*)
echo "unknown type: ${1}"
exit
;;
esac
docker buildx create --use --platform=linux/arm64,linux/amd64 --name multi-platform-builder
docker buildx inspect --bootstrap
docker buildx build -f Dockerfile.${RUN_TYPE} -t icodex/edge-${RUN_TYPE}:${VERSION} --build-arg VERSION=${VERSION} --platform=linux/arm64,linux/amd64 . --push

5
docker/build/base.sh Executable file
View File

@@ -0,0 +1,5 @@
#!/usr/bin/env sh
echo "**** Install based packages ****"
apk add --no-cache tzdata wget curl unzip
cp /usr/share/zoneinfo/${TZ} /etc/localtime

57
docker/build/install.sh Executable file
View File

@@ -0,0 +1,57 @@
#!/usr/bin/env sh
echo "**** Install goedge ****"
function get_arch() {
ARCH=`uname -m`
case "$ARCH" in
"x86_64")
GOARCH="amd64"
;;
"aarch64_be"|"aarch64"|"armv8b"|"armv8l"|"armv8"|"arm64")
GOARCH="arm64"
;;
*)
echo "arch '${ARCH}' is not supported yet"
exit
;;
esac
}
function install_edges() {
mkdir -p ${ROOT_DIR}
cd ${ROOT_DIR}
case "$1" in
"admin")
TAR_URL="https://dl.goedge.cn/edge/v${VERSION}/edge-admin-linux-${GOARCH}-plus-v${VERSION}.zip"
TAR_FILE="edge-admin-linux-${GOARCH}-plus-v${VERSION}.zip"
mv /build/run_admin.sh ${ROOT_DIR}/run.sh
;;
"node")
apk add --no-cache nftables
TAR_URL="https://dl.goedge.cn/edge-node/v${VERSION}/edge-node-linux-${GOARCH}-plus-v${VERSION}.zip"
TAR_FILE="edge-node-linux-${GOARCH}-plus-v${VERSION}.zip"
mv /build/run_node.sh ${ROOT_DIR}/run.sh
;;
*)
echo "unknown type: ${1}"
exit
;;
esac
chmod u+x ${ROOT_DIR}/run.sh
wget ${TAR_URL} -O ${TAR_FILE}
unzip ${TAR_FILE}
rm -f ${TAR_FILE}
}
function clean_apk() {
apk del wget curl unzip
}
get_arch
install_edges ${1}
clean_apk

4
docker/build/run_admin.sh Executable file
View File

@@ -0,0 +1,4 @@
#!/usr/bin/env sh
ROOT_DIR='/usr/local/goedge'
${ROOT_DIR}/edge-admin/bin/edge-admin

20
docker/build/run_node.sh Executable file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env sh
ROOT_DIR='/usr/local/goedge'
function pre_config() {
if [ ! -e ${ROOT_DIR}/edge-node/configs/api_cluster.yaml ]; then
touch ${ROOT_DIR}/edge-node/configs/api_cluster.yaml
cat >> ${ROOT_DIR}/edge-node/configs/api_cluster.yaml << EOF
rpc.endpoints: [ "${ENDPOINTS}" ]
clusterId: "${CLUSTERID}"
secret: "${SECRET}"
EOF
fi
}
mkdir -p /opt/cache
chmod 777 /opt/cache
pre_config
${ROOT_DIR}/edge-node/bin/edge-node