GitHub: https://github.com/Qihoo360/wayne
文件: 由於wayne 官方文件連結已經失效了,我們可以通過這裡檢視 wayne 文件, 除了這個地方,我們詢問之前開發者是還有一個地方存有官方文件的。 https://github.com/Qihoo360/cloud-website 這個地方存有歷史官網文件。
一、wayne 構建原因
wayne 自己構建的原因: 由於1.8.5 和 1.8.6 是不支援 k8s 高一點的版本(1.16+)。 由於我們近期新專案使用了的k8s 版本是 1.20 我們在我們老的wayne
版本上是不支援的.
1.1 、老版本報錯內容
具體現象就是: 點選發布提示沒有找到對應的資源,後端報錯。
E1220 17:35:19.031666 1 reflector.go:126] pkg/mod/k8s.io/client-go@v11.0.0+incompatible/tools/cache/reflector.go:94: Failed to list *v1beta1.DaemonSet: the server could not find the requested resource
E1220 17:35:19.031758 1 reflector.go:126] pkg/mod/k8s.io/client-go@v11.0.0+incompatible/tools/cache/reflector.go:94: Failed to list *v1beta1.StatefulSet: the server could not find the requested resource
E1220 17:35:19.035617 1 reflector.go:126] pkg/mod/k8s.io/client-go@v11.0.0+incompatible/tools/cache/reflector.go:94: Failed to list *v1beta1.Deployment: the server could not find the requested resource
E1220 17:35:19.073638 1 reflector.go:126] pkg/mod/k8s.io/client-go@v11.0.0+incompatible/tools/cache/reflector.go:94: Failed to list *v1beta1.ReplicaSet: the server could not find the requested resource
E1220 17:35:19.073648 1 reflector.go:126] pkg/mod/k8s.io/client-go@v11.0.0+incompatible/tools/cache/reflector.go:94: Failed to list *v1beta1.ReplicaSet: the server could not find the requested resource
1.2 、wayne 官方
支援1.16+ 程式碼 issue: https://github.com/Qihoo360/wayne/pull/565, 也合併到master了,前後端都有更新, 但是目前看wayne-frontend前端映象是沒有更新的。 後端映象是有更新的,
二、構建步驟
目前我們的策略是, 前端映象自己構建,後端映象使用 dockerhub
上面的 latest。
2.1 、前端映象
構建需要環境:
-
docker 需要安裝
yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 # 阿里的源,國內使用較快 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 生成快取 yum makecache # 安裝最新穩定版本 Docker CE yum install docker-ce docker-ce-cli containerd.io systemctl start docker
-
git 需要安裝
yum install git -y
-
拉取程式碼
-
拉取
cd /opt && git clone https://github.com/Qihoo360/wayne.git cd wayne git submodule update --init --recursive # 這個必須執行,首次執行會有輸出,如果沒有輸出的話,那麼從新拉取下,然後執行。
-
使用down zip 方式不要使用這個,這個存在一些問題。
-
-
我們看下 Makefile
.PHONY: run-backend run-worker run-frontend syncdb release MAKEFLAGS += --warn-undefined-variables # Build variables REGISTRY_URI :=360cloud RELEASE_VERSION :=$(shell git describe --always --tags) UI_BUILD_VERSION :=v1.0.2 SERVER_BUILD_VERSION :=v1.0.2 update-version: ./hack/updateversion.sh # run module run-backend: cd src/backend/ && go run main.go run-frontend: cd src/frontend/ && npm start # dev syncdb: go run src/backend/database/syncdb.go orm syncdb sqlall: go run src/backend/database/syncdb.go orm sqlall > _dev/wayne.sql initdata: go run src/backend/database/generatedata/main.go > _dev/wayne-data.sql swagger-openapi: cd src/backend && swagger generate spec -o ./swagger/openapi.swagger.json ## server builder image build-server-image: docker build --no-cache -t $(REGISTRY_URI)/wayne-server-builder:$(SERVER_BUILD_VERSION) -f hack/build/server/Dockerfile . ## ui builder image build-ui-image: docker build --no-cache -t $(REGISTRY_URI)/wayne-ui-builder:$(UI_BUILD_VERSION) -f hack/build/ui/Dockerfile . # release, requiring Docker 17.05 or higher on the daemon and client build-backend-image: @echo "version: $(RELEASE_VERSION)" docker build --no-cache -t $(REGISTRY_URI)/wayne-backend:$(RELEASE_VERSION) . build-frontend-image: @echo "version: $(RELEASE_VERSION)" docker build --no-cache -t $(REGISTRY_URI)/wayne-frontend:$(RELEASE_VERSION) -f hack/build/frontend/Dockerfile . push-image: docker tag $(REGISTRY_URI)/wayne-backend:$(RELEASE_VERSION) $(REGISTRY_URI)/wayne-backend:latest docker push $(REGISTRY_URI)/wayne-backend:$(RELEASE_VERSION) docker push $(REGISTRY_URI)/wayne-backend:latest docker tag $(REGISTRY_URI)/wayne-frontend:$(RELEASE_VERSION) $(REGISTRY_URI)/wayne-frontend:latest docker push $(REGISTRY_URI)/wayne-frontend:$(RELEASE_VERSION) docker push $(REGISTRY_URI)/wayne-frontend:latest
我們找到
build-frontend-image
, 我們可以看到是使用了./hack/build/frontend/Dockerfile
# requiring Docker 17.05 or higher on the daemon and client # see https://docs.docker.com/develop/develop-images/multistage-build/ # BUILD COMMAND : # docker --build-arg RELEASE_VERSION=v1.0.0 -t infra/wayne:v1.0.0 . # build ui FROM 360cloud/wayne-ui-builder:v1.0.2 as frontend COPY src/frontend /workspace RUN cd /workspace && \ npm run build:aot # build server FROM openresty/openresty:1.15.8.1-1-centos COPY --from=frontend /workspace/dist/ /usr/local/openresty/nginx/html/ RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ sed -i '/index index.html index.htm;/a\ try_files $uri $uri/ /index.html;' /etc/nginx/conf.d/default.conf CMD ["/usr/local/openresty/bin/openresty", "-g", "daemon off;"]
看這個dockerfile ,我們會發現,這個映象的構建是通過將src 的原始碼,然後 npm run build 進行構建,然後將構建好了包,然後拷貝到openresty 映象了。
如果拉取映象慢的話,網上找下教程。
配置 163 映象源
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["http://hub-mirror.c.163.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
-
構建前端映象
make build-frontend-image
如果遇到一些問題,可以看末尾。
-
給映象增加tag,上傳至 dockerhub
docker pull djxslp/wayne-frontend:latest # 這個是我已經構建好了的映象。是自己基於github 程式碼的master 分支編譯的(2021.12.21 15:00)
2.1 、後端映象
使用dockerhub 上面最新的
360cloud/wayne-backend:latest
自己構建
Dockerfile 的內容
# requiring Docker 17.05 or higher on the daemon and client
# see https://docs.docker.com/develop/develop-images/multistage-build/
# BUILD COMMAND :
# docker --build-arg RELEASE_VERSION=v1.0.0 -t infra/wayne:v1.0.0 .
# build server
FROM 360cloud/wayne-server-builder:v1.0.2 as backend
COPY go.mod /go/src/github.com/Qihoo360/wayne
COPY go.sum /go/src/github.com/Qihoo360/wayne
COPY src/backend /go/src/github.com/Qihoo360/wayne/src/backend
RUN export GO111MODULE=on && \
export GOPROXY=https://goproxy.io && \
cd /go/src/github.com/Qihoo360/wayne/src/backend && \
bee generate docs && \
bee pack -o /_build
# build release image
FROM 360cloud/centos:7
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY --from=backend /_build/backend.tar.gz /opt/wayne/
WORKDIR /opt/wayne/
RUN tar -xzvf backend.tar.gz
CMD ["./backend"
構建命令
make build-backend-image
自己構建的
docker pull djxslp/wayne-backend:latest # 是自己基於github 程式碼的master 分支編譯的(2021.12.21 15:00),最終容器內的監聽埠是 8081, 需要注意下。
三、配置和資料庫匯入
基於 docker-compose 部署, cd hack/docker-compose/
3.1 、前端配置
./conf/config.js
window.CONFIG = {
URL: 'http://yourip:8080',
RAVEN: false,
RAVEN_DSN: 'RAVEN_DSN'
};
需要改的引數 URL
: 值為需要為後端後面繫結的域名,示例: https://backend-wayne.baidu.com
3.2、後端配置
./conf/app.conf
必須需要修改的:資料庫配置,其他的可以根據情況進行配置。
## mysql
DBName = "wayne"
DBTns = "tcp(127.0.0.1:3306)"
DBUser = "wayne"
DBPasswd = "123456"
DBLoc = "Asia%2FShanghai"
DBConnTTL = 30
3.3 、資料庫匯入
- 後端資料庫
- 手動匯入, 我把一個剛安裝的資料庫匯出了。 連結: https://djxblog.oss-cn-shenzhen.aliyuncs.com/picture/typora/wayne.sql
- 程式自動建立, 這個需要給到一個較高的許可權,且
wayne
庫原本不存在,如果庫存在,則不會進行自動建立。
3.4、 啟動服務
-
安裝docker-compose
curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
-
啟動服務
cd hack/docker-compose docker-compose up -d
四、中途遇到的問題和一些思考
登入無效引數 Invalid Param
問題原因:
https://github.com/Qihoo360/wayne/pull/578
之前版本(1.8.5/1.8.6), 使用者名稱和密碼都是在 URL 中的,也就是如圖所示,現在新的版本是改為JSON 了。
版本未找到, 也就是tag 未指定。
[root@ops-pinpoint-185 wayne]# make build-frontend-image
fatal: Not a valid object name HEAD
version:
docker build --no-cache -t 360cloud/wayne-frontend: -f hack/build/frontend/Dockerfile .
invalid argument "360cloud/wayne-frontend:" for "-t, --tag" flag: invalid reference format
See 'docker build --help'.
我們直接在 Makefile 裡面寫死版本。
RELEASE_VERSION :=v1.8.7.1