Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

优化 docker 构建的镜像文件大小,添加自动化构建 #42

Merged
merged 8 commits into from
Feb 16, 2023
Merged

Conversation

0x-jerry
Copy link
Contributor

新增一些优化和功能:

  1. 自动构建 docker
  2. 优化构建后的大小 image 的大小

自动化构建,需要自行修改一些配置项:

  1. 需要修改 build_docker.yml 中的推送仓库
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v4
        with:
          images: 0xjerry/chatgpt-web # 需要修改,格式 `name/repo`
  1. 需要在仓库的 secrets 里面添加 docker hub 的 name 和 token

image

@marlkiller
Copy link
Contributor

Nice ~

@Chanzhaoyu
Copy link
Owner

@0x-jerry @marlkiller

我是小白,不太了解 Docker ,因为上一个 PR@marlkiller 提的,所以我现在需要做的是注册一个 dockerhub 帐号并生成密钥添加到 GitHub Action 里面,还需要操作什么吗?

@Chanzhaoyu
Copy link
Owner

@0x-jerry @marlkiller 或者我开个权限?

@Chanzhaoyu
Copy link
Owner

@0x-jerry @marlkiller 或者我开个权限?

还有一个问题是,理论上后端和前端先各自运行 pnpm build 得到 dist build 两个文件夹

@Chanzhaoyu
Copy link
Owner

@wangdashuaihenshuai @0x-jerry @marlkiller

三位大佬有何建议

@marlkiller
Copy link
Contributor

@wangdashuaihenshuai @0x-jerry @marlkiller

三位大佬有何建议

build_docker.yml 的 images 配置成自己的账户下就可以

这个 Dockerfile 构建出来的 image 要小很多, node_modules 是放一块的. 用这个 pr 就行

@0x-jerry
Copy link
Contributor Author

0x-jerry commented Feb 16, 2023

@Chanzhaoyu, marlkiller 说的对的,就是创建一个 dockerhub 账号,然后把用户名和生成的 token 放到 github 的 secrets 里面。还需要改一下推送到 dockerhub 的仓库名,也就是下面这里列举的

      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v4
        with:
          images: 0xjerry/chatgpt-web # 需要修改,格式 `name/repo`

附带 dockerhub 生成 token 的入口:
image

另外解释一下这个 Dockerfile,这个 Dockerfile 只打包了前端,也就是这部分内容

# build front-end
FROM node:lts-alpine AS builder

COPY ./ /app
WORKDIR /app

RUN npm install pnpm -g && pnpm install && pnpm run build

后面这部分内容,只是安装了服务端依赖,并从上面👆构建的结果拷贝 distpublic 里面。这样最终的镜像文件就只有后端的相关依赖项。

# service
FROM node:lts-alpine

COPY /service /app
# 从 builder 构建结果中,拷贝 dist 到当前的 public 里面
COPY --from=builder /app/dist /app/public

WORKDIR /app
RUN npm install pnpm -g && pnpm install

EXPOSE 3002

CMD ["pnpm", "run", "start"]

@Chanzhaoyu
Copy link
Owner

@0x-jerry @marlkiller @wangdashuaihenshuai @nisiyong

非常感谢 4 位,本机跑起来了

@Chanzhaoyu Chanzhaoyu merged commit 4a06b39 into Chanzhaoyu:main Feb 16, 2023
@lhlxx2010
Copy link

@0x-jerry @marlkiller @wangdashuaihenshuai @nisiyong

非常感谢 4 位,本机跑起来了

docker: Error response from daemon: manifest for 0xjerry/chatgpt-web:latest not found: manifest unknown: manifest unknown好像没找到这个镜像

@Chanzhaoyu
Copy link
Owner

稍等下,刚刚本地测试,还没发布完

@0x-jerry
Copy link
Contributor Author

@Chanzhaoyu 文档可能需要改一下,readme 里面写的我测试的 docker 仓库, @lhlxx2010 目前可用的 tag 是 main,也就是 0xjerry/chatgpt-web:main

version: '3'

service:
  app:
    image: 0xjerry/chatgpt-web #需要改一下
    ports:
      - 3002:3002
    environment:
      OPENAI_API_KEY: xxxxxx

@lhlxx2010
Copy link

OPENAI_API_KEY

可以,开始拉了,但是不是1002也要放出来呀?否则没有web ui端口了吧

@lhlxx2010
Copy link

@Chanzhaoyu 文档可能需要改一下,readme 里面写的我测试的 docker 仓库, @lhlxx2010 目前可用的 tag 是 main,也就是 0xjerry/chatgpt-web:main

version: '3'

service:
  app:
    image: 0xjerry/chatgpt-web #需要改一下
    ports:
      - 3002:3002
    environment:
      OPENAI_API_KEY: xxxxxx

跑起来了,没问题。

suikodev referenced this pull request in AstraSurge/gpteams Mar 27, 2023
* perf: optimize docker image

* perf: shrink image size

* fix: build docker image

* fix: docker image namespace

* docs: add docker compose example

* docs: fix docker compose example

* docs: fix again :)

* docs: and again.....
@IMYR666
Copy link

IMYR666 commented Feb 27, 2024

OPENAI_API_KEY

可以,开始拉了,但是不是1002也要放出来呀?否则没有web ui端口了吧

我也有同样的疑惑,能帮忙解释下吗

@0x-jerry
Copy link
Contributor Author

@IMYR666 Docker 镜像里面,已经是经过构建后的资源文件。所以是不需要启动 vite 的,也就不需要 1002 端口。

具体的 compose 配置,可以参考项目中的 docker-compose.yaml

@IMYR666
Copy link

IMYR666 commented Feb 27, 2024

@IMYR666 Docker 镜像里面,已经是经过构建后的资源文件。所以是不需要启动 vite 的,也就不需要 1002 端口。

具体的 compose 配置,可以参考项目中的 docker-compose.yaml

那我启动容器后,需要看页面是在浏览器中输入http://localhost:3002吗

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants