diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..a5feac5 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,39 @@ +# 版本控制系统 +.git +.gitignore + +# 依赖目录 +node_modules +dist + +# 环境文件 +.env +.env.local +.env.*.local + +# 日志文件 +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# 编辑器目录和文件 +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# 操作系统文件 +.DS_Store +Thumbs.db + +# 测试覆盖率目录 +coverage + +# 其他不需要的文件 +README.md +LICENSE +docker-compose.yml \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b57f55b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +# 构建阶段 +FROM node:20-alpine as build-stage + +# 设置工作目录 +WORKDIR /app + +# 设置 npm 淘宝镜像源 +RUN npm config set registry http://mirrors.cloud.tencent.com/npm/ + +# 复制package.json和package-lock.json +COPY package*.json ./ + +# 安装依赖 +RUN npm install + +# 复制所有源代码 +COPY . . + +# 构建应用 +RUN npm run build + +# 生产阶段 +FROM nginx:stable-alpine as production-stage + +# 从构建阶段复制构建好的文件到nginx目录 +COPY --from=build-stage /app/dist /usr/share/nginx/html + +# 暴露80端口 +EXPOSE 80 + +# 启动nginx +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/README.md b/README.md index 441f340..f9e21f1 100644 --- a/README.md +++ b/README.md @@ -1,64 +1,101 @@ -# . +# icrypto.work -This template should help get you started developing with Vue 3 in Vite. +这是一个加密货币AI服务平台,基于Vue 3和Vite开发。 -## Recommended IDE Setup +## 推荐的IDE设置 -[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (并禁用Vetur)。 -## Type Support for `.vue` Imports in TS +## `.vue`导入的TypeScript支持 -TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types. +TypeScript默认无法处理`.vue`导入的类型信息,因此我们用`vue-tsc`替换`tsc` CLI进行类型检查。在编辑器中,我们需要[Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar)使TypeScript语言服务识别`.vue`类型。 -## Customize configuration +## 自定义配置 -See [Vite Configuration Reference](https://vite.dev/config/). +参见[Vite配置参考](https://vite.dev/config/)。 -## Project Setup +## 项目设置 ```sh npm install ``` -### Compile and Hot-Reload for Development +### 开发环境编译和热重载 ```sh npm run dev ``` -### Type-Check, Compile and Minify for Production +### 类型检查、编译和生产环境构建 ```sh npm run build ``` -### Run Unit Tests with [Vitest](https://vitest.dev/) +### 使用[Vitest](https://vitest.dev/)运行单元测试 ```sh npm run test:unit ``` -### Run End-to-End Tests with [Playwright](https://playwright.dev) +### 使用[Playwright](https://playwright.dev)运行端到端测试 ```sh -# Install browsers for the first run +# 首次运行安装浏览器 npx playwright install -# When testing on CI, must build the project first +# 在CI上测试时,必须先构建项目 npm run build -# Runs the end-to-end tests +# 运行端到端测试 npm run test:e2e -# Runs the tests only on Chromium +# 仅在Chromium上运行测试 npm run test:e2e -- --project=chromium -# Runs the tests of a specific file +# 运行特定文件的测试 npm run test:e2e -- tests/example.spec.ts -# Runs the tests in debug mode +# 在调试模式下运行测试 npm run test:e2e -- --debug ``` -### Lint with [ESLint](https://eslint.org/) +### 使用[ESLint](https://eslint.org/)进行代码检查 ```sh npm run lint ``` + +## Docker部署 + +本项目支持Docker部署,包含以下文件: + +- `Dockerfile` - 多阶段构建配置 +- `.dockerignore` - 排除不需要的文件 +- `docker-compose.yml` - 简化部署配置 +- `nginx.conf` - Nginx优化配置 + +### 使用Docker构建和运行 + +构建Docker镜像: + +```sh +docker build -t icrypto-web . +``` + +运行容器: + +```sh +docker run -p 80:80 icrypto-web +``` + +### 使用Docker Compose部署 + +一键构建和部署: + +```sh +docker-compose up -d +``` + +停止服务: + +```sh +docker-compose down +``` diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..339290e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,14 @@ +version: '3' + +services: + app: + build: + context: . + dockerfile: Dockerfile + ports: + - '80:80' + restart: unless-stopped + volumes: + - ./nginx.conf:/etc/nginx/conf.d/default.conf + environment: + - NODE_ENV=production diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..466eddc --- /dev/null +++ b/nginx.conf @@ -0,0 +1,32 @@ +server { + listen 80; + server_name localhost; + + #access_log /var/log/nginx/host.access.log main; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } + + # 缓存静态资源 + location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg)$ { + root /usr/share/nginx/html; + expires 30d; + } + + # 压缩文本文件提高性能 + gzip on; + gzip_vary on; + gzip_min_length 10240; + gzip_proxied expired no-cache no-store private auth; + gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml application/javascript; + gzip_disable "MSIE [1-6]\."; + + # 处理错误页面 + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} \ No newline at end of file