diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..1139cfe2 --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +ImageTag ?=v0.9.6 +SoybeanImg ?= soybean/soybean:$(ImageTag) + +VERSION=$(shell git rev-parse --short HEAD) + +soybean: soybean-build soybean-push + +soybean-build: + docker build --build-arg version=$(VERSION) -t ${SoybeanImg} -f build/docker/Dockerfile . + +soybean-push: + docker push ${SoybeanImg} diff --git a/README.md b/README.md index b24458e8..0dbe1cac 100644 --- a/README.md +++ b/README.md @@ -115,6 +115,18 @@ pnpm dev pnpm build ``` +## Docker 部署 + +- Docker 部署 Soybean + +```bash +docker run --name soybean -p 80:80 -d soybean/soybean:v0.9.6 +``` + +- 访问 Soybean + +打开本地浏览器访问`http://localhost` + ## 如何贡献 非常欢迎您的加入![提一个 Issue](https://github.com/honghuangdc/soybean-admin/issues/new) 或者提交一个 Pull Request。 diff --git a/build/docker/.dockerignore b/build/docker/.dockerignore new file mode 100644 index 00000000..540fccb0 --- /dev/null +++ b/build/docker/.dockerignore @@ -0,0 +1,32 @@ +node_modules +.DS_Store +dist +.npmrc +.cache + +tests/server/static +tests/server/static/upload + +.local +# local env files +.env.local +.env.*.local +.eslintcache + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +# .vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +yarn.lock +pnpm-lock.yaml +/vite-profile.cpuprofile diff --git a/build/docker/Dockerfile b/build/docker/Dockerfile new file mode 100644 index 00000000..891ba892 --- /dev/null +++ b/build/docker/Dockerfile @@ -0,0 +1,24 @@ +FROM node:16.17.0 as builder + +ENV WORKDIR=/soybean + +WORKDIR $WORKDIR + +COPY ./ $WORKDIR/ + +ARG version +ENV COMMITID=$version + +RUN npm i -g pnpm + +RUN pnpm install +RUN pnpm build + +FROM nginx:alpine as prod + +RUN mkdir /soybean + +COPY --from=builder /soybean/dist /soybean +COPY --from=builder /soybean/build/docker/nginx.conf /etc/nginx/nginx.conf + +EXPOSE 80 diff --git a/build/docker/nginx.conf b/build/docker/nginx.conf new file mode 100644 index 00000000..23f7d79c --- /dev/null +++ b/build/docker/nginx.conf @@ -0,0 +1,54 @@ +user nginx; +worker_processes 1; +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; + +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + access_log /var/log/nginx/access.log main; + sendfile on; + keepalive_timeout 65; + + server { + listen 80; + server_name localhost; + + location / { + # 不缓存html,防止程序更新后缓存继续生效 + if ($request_filename ~* .*\.(?:htm|html)$) { + add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate"; + access_log on; + } + root /soybean/; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } + + # location /soybean/soybean-webserver/v1 { + # proxy_set_header Host $host; + # proxy_set_header X-Real-IP $remote_addr; + # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + # proxy_set_header REMOTE-HOST $remote_addr; + + # # 后台接口地址 + # proxy_pass http://192.168.1.99:30597/v1; + # proxy_redirect default; + # add_header Access-Control-Allow-Origin *; + # add_header Access-Control-Allow-Headers X-Requested-With; + # add_header Access-Control-Allow-Methods GET,POST,OPTIONS; + # } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + } +}