mirror of
https://github.com/icodex/docker-goedge.git
synced 2026-03-13 21:41:37 -05:00
init
This commit is contained in:
20
.env
Normal file
20
.env
Normal 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
21
LICENSE
Normal 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
123
README.md
Normal 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端口号,进入安装界面:
|
||||
|
||||

|
||||
|
||||
注意⚠️!因为这里的网络类型是容器内共享的,因此在数据库信息填写这里,数据库的地址只需要填写mysql的容器名即可,比如这里的:mysqld。数据库名、数据库账号、数据库密码均为edges。一直下一步就好了。
|
||||
|
||||

|
||||
|
||||
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三个值记录下来。
|
||||
|
||||

|
||||
|
||||
然后准备一个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
47
docker-compose.yaml
Normal 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
17
docker/Dockerfile.admin
Normal 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
17
docker/Dockerfile.node
Normal 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
17
docker/build.sh
Executable 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
5
docker/build/base.sh
Executable 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
57
docker/build/install.sh
Executable 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
4
docker/build/run_admin.sh
Executable 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
20
docker/build/run_node.sh
Executable 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
|
||||
Reference in New Issue
Block a user