diff --git a/build/images/openim-tools/openim-web/Dockerfile b/build/images/openim-tools/openim-web/Dockerfile new file mode 100644 index 000000000..133d3c792 --- /dev/null +++ b/build/images/openim-tools/openim-web/Dockerfile @@ -0,0 +1,59 @@ +# Copyright © 2023 OpenIM. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# OpenIM base image: https://github.com/openim-sigs/openim-base-image + +# Set go mod installation source and proxy + +FROM golang:1.20 AS builder + +ARG GO111MODULE=on +ARG GOPROXY=https://goproxy.cn,direct + +WORKDIR /openim/openim-server + +ENV GO111MODULE=$GO111MODULE +ENV GOPROXY=$GOPROXY + +RUN apt-get update && apt-get install -y curl unzip + +RUN curl -LO https://app-1302656840.cos.ap-nanjing.myqcloud.com/dist.zip \ + && unzip dist.zip -d ./ \ + && rm dist.zip + +COPY go.mod go.sum ./ +RUN go mod download + +COPY . . + +RUN make clean +RUN make build BINS=openim-web + +FROM ghcr.io/openim-sigs/openim-ubuntu-image:latest + +WORKDIR /openim/openim-server + +COPY --from=builder /openim/openim-server/_output/bin/platforms /openim/openim-server/_output/bin/platforms/ +COPY --from=builder /app/dist /app/dist + +ENV PORT 11001 +ENV DISTPATH /app/dist + +EXPOSE $PORT + +RUN cp -r ${OPENIM_SERVER_BINDIR}/platforms/$(get_os)/$(get_arch)/openim-web /usr/bin/openim-web + +ENTRYPOINT ["bash", "-c", "openim-web -port $PORT"] + +CMD ["-distPath","/app/dist"] \ No newline at end of file diff --git a/go.mod b/go.mod index e3891297b..4b4392f16 100644 --- a/go.mod +++ b/go.mod @@ -54,6 +54,7 @@ require ( cloud.google.com/go/iam v1.1.1 // indirect cloud.google.com/go/longrunning v0.5.1 // indirect cloud.google.com/go/storage v1.30.1 // indirect + github.com/NYTimes/gziphandler v1.1.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bytedance/sonic v1.9.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect diff --git a/go.work b/go.work index a2772ddfe..4bc5b345f 100644 --- a/go.work +++ b/go.work @@ -8,6 +8,6 @@ use ( ./tools/infra ./tools/ncpu ./tools/versionchecker - ./tools/web + ./tools/openim-web ./tools/yamlfmt ) diff --git a/tools/openim-web/Dockerfile b/tools/openim-web/Dockerfile new file mode 100644 index 000000000..aad95b8bc --- /dev/null +++ b/tools/openim-web/Dockerfile @@ -0,0 +1,33 @@ +# 使用官方Go镜像作为基础镜像 +FROM golang:1.21 AS build-env +ENV CGO_ENABLED=0 +# 设置工作目录 +WORKDIR /app + +# 安装curl和unzip工具 +#RUN apt-get update && apt-get install -y curl unzip + +# 从GitHub下载并解压dist.zip +#RUN curl -LO https://github.com/OpenIMSDK/dist.zip \ + # && unzip dist.zip -d ./ \ + # && rm dist.zip + +# 复制Go代码到容器 +COPY . . + +# 编译Go代码 +RUN go build -o openim-web + +# 使用轻量级的基础镜像 +FROM debian:buster-slim + +# 将编译好的二进制文件和dist资源复制到新的容器 +WORKDIR /app +COPY --from=build-env /app/openim-web /app/openim-web +COPY --from=build-env /app/dist /app/dist + +# 开放容器的20001端口 +EXPOSE 20001 + +# 指定容器启动命令 +ENTRYPOINT ["/app/openim-web"] \ No newline at end of file diff --git a/tools/web/README.md b/tools/openim-web/README.md similarity index 79% rename from tools/web/README.md rename to tools/openim-web/README.md index 532375b63..afd5e9a96 100644 --- a/tools/web/README.md +++ b/tools/openim-web/README.md @@ -24,14 +24,29 @@ OpenIM Web Service is a lightweight containerized service built with Go. The ser example: ```bash -# ./web -h -Usage of ./web: +$ ./openim-web -h +Usage of ./openim-web: -distPath string Path to the distribution (default "/app/dist") -port string Port to run the server on (default "20001") ``` +Variables can be set as above, Environment variables can also be set + +example: + +```bash +$ export OPENIM_WEB_DIST_PATH="/app/dist" +$ export OPENIM_WEB_PPRT="11001" +``` + +Initialize the env configuration file: + +```bash +$ make init +``` + ## Docker Deployment ### Build the Docker Image @@ -40,16 +55,16 @@ Even though we've implemented automation, it's to make the developer experience To build the Docker image for OpenIM Web Service: -``` -docker build -t openim-web . +```bash +$ docker build -t openim-web . ``` ### Run the Docker Container To run the service: -``` -docker run -e DIST_PATH=/app/dist -e PORT=20001 -p 20001:20001 openim-web +```bash +$ docker run -e DIST_PATH=/app/dist -e PORT=20001 -p 20001:20001 openim-web ``` ## Configuration diff --git a/tools/openim-web/go.mod b/tools/openim-web/go.mod new file mode 100644 index 000000000..27d658d3b --- /dev/null +++ b/tools/openim-web/go.mod @@ -0,0 +1,7 @@ +module github.com/OpenIMSDK/Open-IM-Server/tools/openim-web + +go 1.18 + +require gopkg.in/yaml.v2 v2.4.0 + +require github.com/NYTimes/gziphandler v1.1.1 // indirect diff --git a/tools/openim-web/go.sum b/tools/openim-web/go.sum new file mode 100644 index 000000000..54ca3deb1 --- /dev/null +++ b/tools/openim-web/go.sum @@ -0,0 +1,10 @@ +github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= +github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= diff --git a/tools/web/web.go b/tools/openim-web/openim-web.go similarity index 88% rename from tools/web/web.go rename to tools/openim-web/openim-web.go index 08f2ec297..6b7b3a360 100644 --- a/tools/web/web.go +++ b/tools/openim-web/openim-web.go @@ -5,6 +5,8 @@ import ( "log" "net/http" "os" + + "github.com/NYTimes/gziphandler" ) var ( @@ -22,7 +24,10 @@ func main() { distPath := getConfigValue("DIST_PATH", distPathFlag, "/app/dist") fs := http.FileServer(http.Dir(distPath)) - http.Handle("/", fs) + + withGzip := gziphandler.GzipHandler(fs) + + http.Handle("/", withGzip) port := getConfigValue("PORT", portFlag, "11001") log.Printf("Server listening on port %s in %s...", port, distPath) diff --git a/tools/web/web_test.go b/tools/openim-web/openim-web_test.go similarity index 100% rename from tools/web/web_test.go rename to tools/openim-web/openim-web_test.go diff --git a/tools/web/go.mod b/tools/web/go.mod deleted file mode 100644 index 2a6790a6f..000000000 --- a/tools/web/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/OpenIMSDK/Open-IM-Server/tools/web - -go 1.18 - -require gopkg.in/yaml.v2 v2.4.0 diff --git a/tools/web/go.sum b/tools/web/go.sum deleted file mode 100644 index dd0bc19f1..000000000 --- a/tools/web/go.sum +++ /dev/null @@ -1,4 +0,0 @@ -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=