mirror of
https://github.com/cool-team-official/cool-admin-java-docs.git
synced 2026-10-07 16:28:25 +08:00
117 lines
57 KiB
HTML
117 lines
57 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en-US" dir="ltr">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>项目部署 | Cool Admin</title>
|
||
<meta name="description" content="一个很酷的后台管理系统开发框架">
|
||
<meta name="generator" content="VitePress v1.6.3">
|
||
<link rel="preload stylesheet" href="/assets/style.BaGxxT1-.css" as="style">
|
||
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
|
||
|
||
<script type="module" src="/assets/app.BeNJ_eOC.js"></script>
|
||
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
||
<link rel="modulepreload" href="/assets/chunks/theme.BjsOw0kB.js">
|
||
<link rel="modulepreload" href="/assets/chunks/framework.BjhQB2K5.js">
|
||
<link rel="modulepreload" href="/assets/src_guide_deploy.md.CVc1dXEU.lean.js">
|
||
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
||
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
||
</head>
|
||
<body>
|
||
<div id="app"><div class="Layout" data-v-96d1ba1f data-v-fbfa64bf><!--[--><!--]--><!--[--><span tabindex="-1" data-v-5d3e946a></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-5d3e946a>Skip to content</a><!--]--><!----><header class="VPNav" data-v-fbfa64bf data-v-1f7b0f5c><div class="VPNavBar has-sidebar top" data-v-1f7b0f5c data-v-511c2cc9><div class="wrapper" data-v-511c2cc9><div class="container" data-v-511c2cc9><div class="title" data-v-511c2cc9><div class="VPNavBarTitle has-sidebar" data-v-511c2cc9 data-v-211643ab><a class="title" href="/" data-v-211643ab><!--[--><!--]--><!--[--><img class="VPImage logo" src="/logo.png" alt data-v-4d0b3a1f><!--]--><span data-v-211643ab>Cool Admin</span><!--[--><!--]--></a></div></div><div class="content" data-v-511c2cc9><div class="content-body" data-v-511c2cc9><!--[--><!--]--><div class="VPNavBarSearch search" data-v-511c2cc9><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-511c2cc9 data-v-d53bf4df><span id="main-nav-aria-label" class="visually-hidden" data-v-d53bf4df> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/src/introduce/index.html" tabindex="0" data-v-d53bf4df data-v-bbf7f74d><!--[--><span data-v-bbf7f74d>介绍</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/src/guide/quick.html" tabindex="0" data-v-d53bf4df data-v-bbf7f74d><!--[--><span data-v-bbf7f74d>教程</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://cool-js.com/plugin" target="_blank" rel="noreferrer" tabindex="0" data-v-d53bf4df data-v-bbf7f74d><!--[--><span data-v-bbf7f74d>🔥插件市场</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/src/about/index.html" tabindex="0" data-v-d53bf4df data-v-bbf7f74d><!--[--><span data-v-bbf7f74d>交流合作</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-d53bf4df data-v-95325d79><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-95325d79><span class="text" data-v-95325d79><!----><span data-v-95325d79>v7.1.0</span><span class="vpi-chevron-down text-icon" data-v-95325d79></span></span></button><div class="menu" data-v-95325d79><div class="VPMenu" data-v-95325d79 data-v-3e022afb><div class="items" data-v-3e022afb><!--[--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link" href="/src/todo/update.html" data-v-acee1e57><!--[--><span data-v-acee1e57>更新日志</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link" href="/src/todo/plan.html" data-v-acee1e57><!--[--><span data-v-acee1e57>版本计划</span><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-d53bf4df data-v-95325d79><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-95325d79><span class="text" data-v-95325d79><!----><span data-v-95325d79>更多</span><span class="vpi-chevron-down text-icon" data-v-95325d79></span></span></button><div class="menu" data-v-95325d79><div class="VPMenu" data-v-95325d79 data-v-3e022afb><div class="items" data-v-3e022afb><!--[--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link vp-external-link-icon" href="https://cool-js.com" target="_blank" rel="noreferrer" data-v-acee1e57><!--[--><span data-v-acee1e57>Cool 官网</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link vp-external-link-icon" href="https://node.cool-admin.com" target="_blank" rel="noreferrer" data-v-acee1e57><!--[--><span data-v-acee1e57>Cool Admin(Nodejs版)</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link vp-external-link-icon" href="https://node.cool-js.com" target="_blank" rel="noreferrer" data-v-acee1e57><!--[--><span data-v-acee1e57>Cool Admin Vue(前端)</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-3e022afb data-v-acee1e57><a class="VPLink link vp-external-link-icon" href="https://uni-docs.cool-js.com" target="_blank" rel="noreferrer" data-v-acee1e57><!--[--><span data-v-acee1e57>Uni(基于uni-app跨端移动端开发)</span><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-511c2cc9 data-v-764c0058><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="切换到深色模式" aria-checked="false" data-v-764c0058 data-v-ae950ac5 data-v-4ec3b2fe><span class="check" data-v-4ec3b2fe><span class="icon" data-v-4ec3b2fe><!--[--><span class="vpi-sun sun" data-v-ae950ac5></span><span class="vpi-moon moon" data-v-ae950ac5></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-511c2cc9 data-v-d6e28fe5 data-v-c9b9e435><!--[--><a class="VPSocialLink no-icon" href="https://github.com/cool-team-official/cool-admin-java" aria-label="github" target="_blank" rel="noopener" data-v-c9b9e435 data-v-71029e87><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-511c2cc9 data-v-cc85dc96 data-v-95325d79><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-95325d79><span class="vpi-more-horizontal icon" data-v-95325d79></span></button><div class="menu" data-v-95325d79><div class="VPMenu" data-v-95325d79 data-v-3e022afb><!----><!--[--><!--[--><!----><div class="group" data-v-cc85dc96><div class="item appearance" data-v-cc85dc96><p class="label" data-v-cc85dc96>主题</p><div class="appearance-action" data-v-cc85dc96><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="切换到深色模式" aria-checked="false" data-v-cc85dc96 data-v-ae950ac5 data-v-4ec3b2fe><span class="check" data-v-4ec3b2fe><span class="icon" data-v-4ec3b2fe><!--[--><span class="vpi-sun sun" data-v-ae950ac5></span><span class="vpi-moon moon" data-v-ae950ac5></span><!--]--></span></span></button></div></div></div><div class="group" data-v-cc85dc96><div class="item social-links" data-v-cc85dc96><div class="VPSocialLinks social-links-list" data-v-cc85dc96 data-v-c9b9e435><!--[--><a class="VPSocialLink no-icon" href="https://github.com/cool-team-official/cool-admin-java" aria-label="github" target="_blank" rel="noopener" data-v-c9b9e435 data-v-71029e87><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-511c2cc9 data-v-e08ccaba><span class="container" data-v-e08ccaba><span class="top" data-v-e08ccaba></span><span class="middle" data-v-e08ccaba></span><span class="bottom" data-v-e08ccaba></span></span></button></div></div></div></div><div class="divider" data-v-511c2cc9><div class="divider-line" data-v-511c2cc9></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-fbfa64bf data-v-3eeb2970><div class="container" data-v-3eeb2970><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-3eeb2970><span class="vpi-align-left menu-icon" data-v-3eeb2970></span><span class="menu-text" data-v-3eeb2970>菜单</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-3eeb2970 data-v-bd1fb31f><button data-v-bd1fb31f>回到顶部</button><!----></div></div></div><aside class="VPSidebar" data-v-fbfa64bf data-v-130e406e><div class="curtain" data-v-130e406e></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-130e406e><span class="visually-hidden" id="sidebar-aria-label" data-v-130e406e> Sidebar Navigation </span><!--[--><!--[--><div class="ad" data-v-96d1ba1f><!--[--><!--]--></div><!--]--><!--]--><!--[--><div class="no-transition group" data-v-7eb7a422><section class="VPSidebarItem level-0" data-v-7eb7a422 data-v-6092ddf2><div class="item" role="button" tabindex="0" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><h2 class="text" data-v-6092ddf2>介绍</h2><!----></div><div class="items" data-v-6092ddf2><!--[--><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/introduce/index.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>简介</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/introduce/show.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>演示</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/introduce/src.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>源码</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-7eb7a422><section class="VPSidebarItem level-0 has-active" data-v-7eb7a422 data-v-6092ddf2><div class="item" role="button" tabindex="0" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><h2 class="text" data-v-6092ddf2>教程</h2><!----></div><div class="items" data-v-6092ddf2><!--[--><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/quick.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>快速开始</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/dir.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>目录结构</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/ai.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>Ai编码</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/flow.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>Ai流程编排</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/plugin.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>扩展插件</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/dev.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>开发方式</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1" data-v-6092ddf2 data-v-6092ddf2><div class="item" role="button" tabindex="0" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><h3 class="text" data-v-6092ddf2>核心</h3><!----></div><div class="items" data-v-6092ddf2><!--[--><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/controller.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>控制器(controller)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/service.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>服务(service)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/db.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>数据库(db)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/cache.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>缓存(cache)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/upload.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>文件上传(file)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/exception.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>统一异常(exception)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/security.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>权限校验(security)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/initData.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>数据初始化(init)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/uniqueIDGen.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>分布式ID(id)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/lock.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>锁(lock)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/noRepeatSubmit.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>防重提交(submit)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/recordLog.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>请求日志(log)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/swagger.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>接口文档(swagger)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/tenant.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>多租户(tenant)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/i18n.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>国际化多语言(i18n)</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/guide/deploy.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>部署项目</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-7eb7a422><section class="VPSidebarItem level-0" data-v-7eb7a422 data-v-6092ddf2><div class="item" role="button" tabindex="0" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><h2 class="text" data-v-6092ddf2>计划&更新</h2><!----></div><div class="items" data-v-6092ddf2><!--[--><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/todo/update.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>更新</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/todo/plan.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>计划</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-7eb7a422><section class="VPSidebarItem level-0" data-v-7eb7a422 data-v-6092ddf2><!----><div class="items" data-v-6092ddf2><!--[--><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/question/common.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>常见问题</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6092ddf2 data-v-6092ddf2><div class="item" data-v-6092ddf2><div class="indicator" data-v-6092ddf2></div><a class="VPLink link link" href="/src/about/index.html" data-v-6092ddf2><!--[--><p class="text" data-v-6092ddf2>交流合作</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-fbfa64bf data-v-8d143afd><div class="VPDoc has-sidebar has-aside" data-v-8d143afd data-v-4d316cbc><!--[--><!--]--><div class="container" data-v-4d316cbc><div class="aside" data-v-4d316cbc><div class="aside-curtain" data-v-4d316cbc></div><div class="aside-container" data-v-4d316cbc><div class="aside-content" data-v-4d316cbc><div class="VPDocAside" data-v-4d316cbc data-v-c4200bf2><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-c4200bf2 data-v-beb6bc9f><div class="content" data-v-beb6bc9f><div class="outline-marker" data-v-beb6bc9f></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-beb6bc9f>页面导航</div><ul class="VPDocOutlineItem root" data-v-beb6bc9f data-v-c8fd7940><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-c4200bf2></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-4d316cbc><div class="content-container" data-v-4d316cbc><!--[--><!--]--><main class="main" data-v-4d316cbc><div style="position:relative;" class="vp-doc _src_guide_deploy" data-v-4d316cbc><div><h1 id="项目部署" tabindex="-1">项目部署 <a class="header-anchor" href="#项目部署" aria-label="Permalink to "项目部署""></a></h1><p><a href="https://cool-js.com/service/cloud" target="_blank" rel="noreferrer">🔥 低价云服务器推荐</a></p><div class="tip custom-block"><p class="custom-block-title">注意</p><p>以下教程以 Nodejs 版本为例,Java 版本的也可以参考</p></div><h2 id="普通方式" tabindex="-1">普通方式 <a class="header-anchor" href="#普通方式" aria-label="Permalink to "普通方式""></a></h2><p>本部署教程以 node 版本+宝塔为例,其他部署方式也可以参考这个流程。</p><p><a href="https://www.bilibili.com/video/BV1m1421S7tm/" target="_blank" rel="noreferrer">cool-admin 部署视频教程</a></p><h4 id="_1、部署流程-以宝塔为例" tabindex="-1">1、部署流程(以宝塔为例): <a class="header-anchor" href="#_1、部署流程-以宝塔为例" aria-label="Permalink to "1、部署流程(以宝塔为例):""></a></h4><ol><li>拉取前后端代码;</li><li>本地配置完数据库运行,等待数据库初始化完成;</li><li>打包前后端代码,打包之前注意配置生产环境的数据库配置<code>config/config.prod.ts</code>,<a href="http://www.midwayjs.org/docs/env_config" target="_blank" rel="noreferrer">查看 midway 官方多环境配置文档</a>;</li><li>服务器环境准备,安装宝塔、mysql、nodejs、nginx、pnpm 等;</li><li>上传前后端代码到服务器;</li><li>安装依赖,编译打包后端服务,启动服务;</li><li>配置 nginx 反向代理;</li><li>访问域名,如果一切正常,恭喜你,部署成功!</li></ol><div class="warning custom-block"><p class="custom-block-title">注意</p><ul><li>线上的数据库是需要本地传上去的,安全考虑生产环境不会自动初始化数据库;</li><li>前端访问后端的接口地址默认是前端根地址+/api,所以需要配置 nginx 反向代理/api 到后端服务;</li></ul></div><h4 id="_2、推荐使用-pnpm-安装依赖" tabindex="-1">2、推荐使用 pnpm 安装依赖 <a class="header-anchor" href="#_2、推荐使用-pnpm-安装依赖" aria-label="Permalink to "2、推荐使用 pnpm 安装依赖""></a></h4><p><a href="https://pnpm.io/" target="_blank" rel="noreferrer">pnpm 官网</a></p><p>安装</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -g</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pnpm</span></span></code></pre></div><p>配置淘宝镜像</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> config</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> set</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> registry</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://registry.npmmirror.com</span></span></code></pre></div><h4 id="_3、pm2-运行后端服务" tabindex="-1">3、PM2 运行后端服务 <a class="header-anchor" href="#_3、pm2-运行后端服务" aria-label="Permalink to "3、PM2 运行后端服务""></a></h4><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">//</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 命令行安装</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pm2</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pm2</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -g</span></span></code></pre></div><p>常用命令</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">//</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 启动一个服务</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pm2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> start</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">//</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 列出当前的服务</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pm2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> list</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">//</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 停止某个服务</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pm2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> stop</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">//</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 重启某个服务</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pm2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> restart</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">//</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 删除某个服务</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pm2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> delete</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">//</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 查看服务的输出日志</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pm2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> logs</span></span></code></pre></div><p>cluster 方式启动</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">//</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -i</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 表示</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> number-instances</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 实例数量</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">//</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> max</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 表示</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> PM2将自动检测可用CPU的数量</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 可以自己指定数量</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pm2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> start</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./bootstrap.js</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -i</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> max</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cool-admin</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">改成自己的应用名称</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">//</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 重启</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pm2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> restart</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cool-admin</span></span></code></pre></div><p>日志</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">pm2</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> logs</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cool-admin</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">//</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 默认的日志位置</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">/root/.pm2/logs</span></span></code></pre></div><h4 id="_4、nginx-配置示例" tabindex="-1">4、nginx 配置示例 <a class="header-anchor" href="#_4、nginx-配置示例" aria-label="Permalink to "4、nginx 配置示例""></a></h4><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">upstream cool {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> server </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">127.0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0.1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">8001</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">server</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ...</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> # 前端打包完放这边</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> root </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">home</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">test</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">front;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> # 防止刷新404</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> location </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> try_files $uri $uri</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">/</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> /</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">index.html;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> # 代理服务端地址 访问</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">api 表示访问服务端接口而不是静态资源</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> location </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">api</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">/</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_pass </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">http</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//cool/;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_set_header Host $host;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_set_header </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">X</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">Real</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">IP</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> $remote_addr;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_set_header </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">X</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">Forwarded</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">For $proxy_add_x_forwarded_for;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_set_header </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">REMOTE</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">HOST</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> $remote_addr;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_cache_bypass no_cache;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> #缓存相关配置</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> #proxy_cache cache_one;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> #proxy_cache_key $host$request_uri$is_args$args;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> #proxy_cache_valid </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">200</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 304</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 301</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 302</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> 1h;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> #持久化连接相关配置</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_connect_timeout 3000s;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_read_timeout 86400s;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_send_timeout 3000s;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> #proxy_http_version </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1.1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> #proxy_set_header Upgrade $http_upgrade;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> #proxy_set_header Connection </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"upgrade"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> add_header </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">X</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">Cache $upstream_cache_status;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> #expires 12h;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> # socket需额外配置</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> location </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">socket {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_pass </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">http</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//cool/socket;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_connect_timeout 3600s; #配置点1</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_read_timeout 3600s; #配置点2,如果没效,可以考虑这个时间配置长一点</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_send_timeout 3600s; #配置点3</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_set_header Host $host;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_set_header </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">X</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">Real</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">IP</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> $remote_addr;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_set_header </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">X</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">Forwarded</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">For $proxy_add_x_forwarded_for;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_set_header </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">REMOTE</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">HOST</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> $remote_addr;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> #proxy_bind $remote_addr transparent;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_http_version </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1.1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_set_header Upgrade $http_upgrade;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_set_header Connection </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"upgrade"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> rewrite </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">socket</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(.</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$1 </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">break</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> proxy_redirect off;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="docker-方式" tabindex="-1">Docker 方式 <a class="header-anchor" href="#docker-方式" aria-label="Permalink to "Docker 方式""></a></h2><p>docker 部署的配置方式可以参考普通的部署方式,以下是 docker 部署的简单流程;</p><p><a href="https://www.bilibili.com/video/BV14z421f7S9/" target="_blank" rel="noreferrer">cool-admin 部署视频教程(Docker 方式)</a></p><h4 id="_1、部署流程-以宝塔为例-1" tabindex="-1">1、部署流程(以宝塔为例): <a class="header-anchor" href="#_1、部署流程-以宝塔为例-1" aria-label="Permalink to "1、部署流程(以宝塔为例):""></a></h4><ol><li>拉取前后端代码;</li><li>本地配置完数据库运行,等待数据库初始化完成;</li><li>打包后端和前端镜像;</li><li>创建 docker network;</li><li>docker 运行后端和前端;</li><li>访问如果登录页正常出现验证码,恭喜你,部署成功!</li></ol><h4 id="_2、打包镜像" tabindex="-1">2、打包镜像 <a class="header-anchor" href="#_2、打包镜像" aria-label="Permalink to "2、打包镜像""></a></h4><div class="warning custom-block"><p class="custom-block-title">注意</p><p>打包镜像之前,需要确保前端和后端在本地运行过一次,让前端能够自动生成<code>eps.json</code>文件,该文件是前端自动扫描后端接口生成的,有了该文件,前端不需要特意写调用接口的 service。</p><p>如果你是自动化部署,你需要把生成的<code>eps.json</code>也提交到代码仓库,否则你将无法正常访问你的 api 接口。</p></div><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">//</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 创建docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> network</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> network</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> create</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cool</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">//</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 打包后端镜像</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -t</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cool-admin-midway:1.0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">//</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 打包前端镜像</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> build</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -t</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cool-admin-vue:1.0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .</span></span></code></pre></div><h4 id="_3、运行" tabindex="-1">3、运行 <a class="header-anchor" href="#_3、运行" aria-label="Permalink to "3、运行""></a></h4><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">//</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 运行后端</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --network</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cool</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 8001:8001</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> midway</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cool-admin-midway:1.0</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">//</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 运行后端</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --network</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cool</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 80:80</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> vue</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cool-admin-vue:1.0</span></span></code></pre></div><h4 id="注意事项" tabindex="-1">注意事项 <a class="header-anchor" href="#注意事项" aria-label="Permalink to "注意事项""></a></h4><p>docker 部署,建议将缓存换成 redis,文件上传换成云存储,如:oss,防止操作不当导致的数据丢失。</p></div></div></main><footer class="VPDocFooter" data-v-4d316cbc data-v-35768638><!--[--><!--]--><div class="edit-info" data-v-35768638><div class="edit-link" data-v-35768638><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/cool-team-official/cool-admin-java-docs/blob/main/src/guide/deploy.md" target="_blank" rel="noreferrer" data-v-35768638><!--[--><span class="vpi-square-pen edit-link-icon" data-v-35768638></span> 在GitHub上编辑<!--]--></a></div><div class="last-updated" data-v-35768638><p class="VPLastUpdated" data-v-35768638 data-v-32a58613>最后更新于: <time datetime="2024-07-17T09:08:04.000Z" data-v-32a58613></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-35768638><span class="visually-hidden" id="doc-footer-aria-label" data-v-35768638>Pager</span><div class="pager" data-v-35768638><a class="VPLink link pager-link prev" href="/src/guide/i18n.html" data-v-35768638><!--[--><span class="desc" data-v-35768638>上一页</span><span class="title" data-v-35768638>国际化多语言(i18n)</span><!--]--></a></div><div class="pager" data-v-35768638><a class="VPLink link pager-link next" href="/src/todo/update.html" data-v-35768638><!--[--><span class="desc" data-v-35768638>下一页</span><span class="title" data-v-35768638>更新</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-fbfa64bf data-v-45624e61><div class="container" data-v-45624e61><p class="message" data-v-45624e61>COOL为开发者而生</p><p class="copyright" data-v-45624e61><a href="https://beian.miit.gov.cn">Copyright © COOL | 闽ICP备2024042701号</a></p></div></footer><!--[--><!--]--></div></div>
|
||
<script>window.__VP_HASH_MAP__=JSON.parse("{\"index.md\":\"Dsd7aigo\",\"readme.md\":\"Rd2D_BZq\",\"src_about_index.md\":\"-unb0L2u\",\"src_guide_ai.md\":\"aIl2n3N7\",\"src_guide_cache.md\":\"DYexoE7d\",\"src_guide_controller.md\":\"ChJ_NED0\",\"src_guide_db.md\":\"CH-r16iF\",\"src_guide_deploy.md\":\"CVc1dXEU\",\"src_guide_dev.md\":\"DM1UjwvK\",\"src_guide_dir.md\":\"Bywk12Mo\",\"src_guide_exception.md\":\"1HCd76m1\",\"src_guide_flow.md\":\"DMDsOCkF\",\"src_guide_i18n.md\":\"CMvzuL3k\",\"src_guide_initdata.md\":\"BhdPvNop\",\"src_guide_lock.md\":\"C8JTDlsP\",\"src_guide_norepeatsubmit.md\":\"CvFjLc1r\",\"src_guide_plugin.md\":\"DSQp6REO\",\"src_guide_quick.md\":\"g_DIbvkh\",\"src_guide_recordlog.md\":\"B0w4IZH7\",\"src_guide_security.md\":\"BFmZQZP9\",\"src_guide_service.md\":\"CokY9neI\",\"src_guide_swagger.md\":\"CCfA6TBH\",\"src_guide_tenant.md\":\"CP_z92JB\",\"src_guide_uniqueidgen.md\":\"BNiKKfQz\",\"src_guide_upload.md\":\"D-dQqFKU\",\"src_introduce_index.md\":\"BaUz4Xtw\",\"src_introduce_show.md\":\"Ck0DuCIX\",\"src_introduce_src.md\":\"UlNmfnNt\",\"src_question_common.md\":\"Caojqqth\",\"src_todo_plan.md\":\"pGnBM6_r\",\"src_todo_update.md\":\"DUbMUQW8\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Cool Admin\",\"description\":\"一个很酷的后台管理系统开发框架\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/logo.png\",\"search\":{\"provider\":\"local\"},\"footer\":{\"message\":\"COOL为开发者而生\",\"copyright\":\"<a href=\\\"https://beian.miit.gov.cn\\\">Copyright © COOL | 闽ICP备2024042701号</a>\"},\"docFooter\":{\"prev\":\"上一页\",\"next\":\"下一页\"},\"outline\":{\"label\":\"页面导航\",\"level\":[2,3]},\"lastUpdated\":{\"text\":\"最后更新于\",\"formatOptions\":{\"dateStyle\":\"short\",\"timeStyle\":\"medium\"}},\"langMenuLabel\":\"多语言\",\"returnToTopLabel\":\"回到顶部\",\"sidebarMenuLabel\":\"菜单\",\"darkModeSwitchLabel\":\"主题\",\"lightModeSwitchTitle\":\"切换到浅色模式\",\"darkModeSwitchTitle\":\"切换到深色模式\",\"editLink\":{\"text\":\"在GitHub上编辑\",\"pattern\":\"https://github.com/cool-team-official/cool-admin-java-docs/blob/main/:path\"},\"nav\":[{\"text\":\"介绍\",\"link\":\"/src/introduce/index.md\",\"noIcon\":false},{\"text\":\"教程\",\"link\":\"/src/guide/quick.md\"},{\"text\":\"🔥插件市场\",\"link\":\"https://cool-js.com/plugin\"},{\"text\":\"交流合作\",\"link\":\"/src/about/index.md\"},{\"text\":\"v7.1.0\",\"items\":[{\"text\":\"更新日志\",\"link\":\"/src/todo/update.md\"},{\"text\":\"版本计划\",\"link\":\"/src/todo/plan.md\"}]},{\"text\":\"更多\",\"items\":[{\"text\":\"Cool 官网\",\"link\":\"https://cool-js.com\"},{\"text\":\"Cool Admin(Nodejs版)\",\"link\":\"https://node.cool-admin.com\"},{\"text\":\"Cool Admin Vue(前端)\",\"link\":\"https://node.cool-js.com\"},{\"text\":\"Uni(基于uni-app跨端移动端开发)\",\"link\":\"https://uni-docs.cool-js.com\"}]}],\"sidebar\":[{\"text\":\"介绍\",\"items\":[{\"text\":\"简介\",\"link\":\"/src/introduce/index.md\"},{\"text\":\"演示\",\"link\":\"/src/introduce/show.md\"},{\"text\":\"源码\",\"link\":\"/src/introduce/src.md\"}]},{\"text\":\"教程\",\"items\":[{\"text\":\"快速开始\",\"link\":\"/src/guide/quick.md\"},{\"text\":\"目录结构\",\"link\":\"/src/guide/dir.md\"},{\"text\":\"Ai编码\",\"link\":\"/src/guide/ai.md\"},{\"text\":\"Ai流程编排\",\"link\":\"/src/guide/flow.md\"},{\"text\":\"扩展插件\",\"link\":\"/src/guide/plugin.md\"},{\"text\":\"开发方式\",\"link\":\"/src/guide/dev.md\"},{\"text\":\"核心\",\"items\":[{\"text\":\"控制器(controller)\",\"link\":\"/src/guide/controller.md\"},{\"text\":\"服务(service)\",\"link\":\"/src/guide/service.md\"},{\"text\":\"数据库(db)\",\"link\":\"/src/guide/db.md\"},{\"text\":\"缓存(cache)\",\"link\":\"/src/guide/cache.md\"},{\"text\":\"文件上传(file)\",\"link\":\"/src/guide/upload.md\"},{\"text\":\"统一异常(exception)\",\"link\":\"/src/guide/exception.md\"},{\"text\":\"权限校验(security)\",\"link\":\"/src/guide/security.md\"},{\"text\":\"数据初始化(init)\",\"link\":\"/src/guide/initData.md\"},{\"text\":\"分布式ID(id)\",\"link\":\"/src/guide/uniqueIDGen.md\"},{\"text\":\"锁(lock)\",\"link\":\"/src/guide/lock.md\"},{\"text\":\"防重提交(submit)\",\"link\":\"/src/guide/noRepeatSubmit.md\"},{\"text\":\"请求日志(log)\",\"link\":\"/src/guide/recordLog.md\"},{\"text\":\"接口文档(swagger)\",\"link\":\"/src/guide/swagger.md\"},{\"text\":\"多租户(tenant)\",\"link\":\"/src/guide/tenant.md\"},{\"text\":\"国际化多语言(i18n)\",\"link\":\"/src/guide/i18n.md\"}]},{\"text\":\"部署项目\",\"link\":\"/src/guide/deploy.md\"}]},{\"text\":\"计划&更新\",\"items\":[{\"text\":\"更新\",\"link\":\"/src/todo/update.md\"},{\"text\":\"计划\",\"link\":\"/src/todo/plan.md\"}]},{\"text\":\"常见问题\",\"link\":\"/src/question/common.md\"},{\"text\":\"交流合作\",\"link\":\"/src/about/index.md\"}],\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/cool-team-official/cool-admin-java\"}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
||
|
||
</body>
|
||
</html> |