From 056cab6c1967b08f7e6bdc42bf6e2d44ca5afac6 Mon Sep 17 00:00:00 2001 From: ReaJason Date: Tue, 25 Feb 2025 00:31:08 +0800 Subject: [PATCH] docs: add Dockerfile build steps (resolved #44) --- README.md | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 61 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5ba3db64..941fcafc 100644 --- a/README.md +++ b/README.md @@ -19,10 +19,14 @@ MemShellParty 是一款可本地部署的一键生成常见中间件框架内存 MemShellParty 出现的原因有以下几个: -1. 工作中有时候客户会有个别中间件的内存马测试需求,这个时候临时写一个太慢又太烦,在不忙的时候做一个工具,有需求就生成一个多好(之前用 [Java Memshell Generator](https://github.com/pen4uin/java-memshell-generator) +1. + +工作中有时候客户会有个别中间件的内存马测试需求,这个时候临时写一个太慢又太烦,在不忙的时候做一个工具,有需求就生成一个多好(之前用 [Java Memshell Generator](https://github.com/pen4uin/java-memshell-generator) 生成一个 WAS 的内存马不能用,调了半天修好了)。 + 2. 写 [Javassist](https://www.javassist.org/) 实在是太多了,字符串拼接的方式去弄方法 code - 实在是看得眼睛疼,又不好维护,代码组织合理的话其实都可以,不过做项目我还是推荐 [Byte Buddy](https://bytebuddy.net/),高封装提供的 + 实在是看得眼睛疼,又不好维护,代码组织合理的话其实都可以,不过做项目我还是推荐 [Byte Buddy](https://bytebuddy.net/) + ,高封装提供的 API 很好用的。单个利用脚本的话确实 [Javassist](https://www.javassist.org/) 来得快,而且很多中间件也自带依赖直接能打。 3. [Java Memshell Generator](https://github.com/pen4uin/java-memshell-generator) 的出现确实帮大忙了,但是其极少的交互逻辑对于一个应用来说是难以接受的,刚好学习了前端对 UX 也感兴趣(对 Desktop @@ -82,13 +86,13 @@ docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party ghcr.nju # 移除之前部署的 docker rm -f memshell-party -# 使用之前的部署命令,重新部署(会自动拉取最新的镜像部署) +# 使用之前的部署命令重新部署(会自动拉取最新的镜像部署) docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party reajason/memshell-party:latest ``` -### 本地构建部署 +### 本地构建 -> 适合想编写代码的小伙伴,使用 Git Clone 下载到本地,并构建前后端项目以使用 +> 适合想编写代码的小伙伴,使用 Git Clone 下载到本地,并构建前后端项目以供使用 首先需要下载 [bun](https://bun.sh/),这是一款用于构建前端服务工具。 @@ -133,6 +137,58 @@ docker buildx build -t memshell-party:latest . --load docker run -it -d --name memshell-party -p 8080:8080 memshell-party:latest ``` +### Dockerfile 一键构建 + +> 适合于希望构建自定义访问路径的小伙伴,例如 NGINX 反代的场景([#44](https://github.com/ReaJason/MemShellParty/issues/44)) + +下载项目根目录的 [Dockerfile](./Dockerfile) + +- VERSION: 版本信息,随意,建议用最新的 tag 号,仅作前端展示 +- ROUTE_ROOT_PATH: 前端根路由配置 +- CONTEXT_PATH: 后端访问前缀 + +```bash +# 基础构建 +docker buildx build \ + --build-arg VERSION=1.3.1 \ + -t memshell-party:latest . --load + +# 基础镜像启动,访问 127.0.0.1:8080 +docker run -it -d -p 8080:8080 memshell-party:latest + +# 自定义访问路径构建 +docker buildx build \ + --build-arg VERSION=1.3.1 \ + --build-arg ROUTE_ROOT_PATH=/memshell-party \ + --build-arg CONTEXT_PATH=/memshell-party \ + -t memshell-party:latest . --load + +# 自定义路径构建镜像启动,访问 127.0.0.1:8080/memshell-party +docker run -it -p 8080:8080 \ + -e BOOT_OPTS=--server.servlet.context-path=/memshell-party \ + memshell-party:latest +``` + +如果需要使用 NGINX 反代,请先使用自定义访问路径构建容器,并配置 NGINX 如下: + +其中 `location /memshell-party`、`ROUTE_ROOT_PATH=/memshell-party`、`CONTEXT_PATH=/memshell-party` 和 `BOOT_OPTS=--server.servlet.context-path=/memshell-party` 都要一致才行。 + +```text +location /memshell-party { + proxy_pass http://127.0.0.1:8080; + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-By $server_addr:$server_port; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_http_version 1.1; + proxy_connect_timeout 3s; + proxy_read_timeout 300s; + proxy_send_timeout 300s; + proxy_buffer_size 16k; + proxy_buffers 8 64k; + proxy_busy_buffers_size 128k; +} +``` + ## 适配情况 已兼容 Java6 ~ Java8、Java9、Java11、Java17、Java21