Files
cool-admin-java-docs/.vitepress/dist/src/guide/deploy.html
T
2024-08-15 10:07:14 +08:00

116 lines
54 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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.3.0">
<link rel="preload stylesheet" href="/assets/style.C_XMi3Tx.css" as="style">
<script type="module" src="/assets/app.CQmzLN4Q.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/framework.C_oE5szm.js">
<link rel="modulepreload" href="/assets/chunks/theme.BBNsCf3G.js">
<link rel="modulepreload" href="/assets/src_guide_deploy.md.D3Yfqu-Q.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-0dd53a6c><!--[--><!--]--><!--[--><span tabindex="-1" data-v-497b75be></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-497b75be> Skip to content </a><!--]--><!----><header class="VPNav" data-v-0dd53a6c data-v-a6f969fc><div class="VPNavBar has-sidebar top" data-v-a6f969fc data-v-3fed1b83><div class="wrapper" data-v-3fed1b83><div class="container" data-v-3fed1b83><div class="title" data-v-3fed1b83><div class="VPNavBarTitle has-sidebar" data-v-3fed1b83 data-v-ff17a4ae><a class="title" href="/" data-v-ff17a4ae><!--[--><!--]--><!--[--><img class="VPImage logo" src="/logo.png" alt data-v-13e6cd18><!--]--><span data-v-ff17a4ae>Cool Admin</span><!--[--><!--]--></a></div></div><div class="content" data-v-3fed1b83><div class="content-body" data-v-3fed1b83><!--[--><!--]--><div class="VPNavBarSearch search" data-v-3fed1b83><!--[--><!----><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-3fed1b83 data-v-46876648><span id="main-nav-aria-label" class="visually-hidden" data-v-46876648> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/src/introduce/index.html" tabindex="0" data-v-46876648 data-v-6589ed1c><!--[--><span data-v-6589ed1c>介绍</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/src/guide/quick.html" tabindex="0" data-v-46876648 data-v-6589ed1c><!--[--><span data-v-6589ed1c>教程</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-46876648 data-v-6589ed1c><!--[--><span data-v-6589ed1c>🔥插件市场</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/src/about/index.html" tabindex="0" data-v-46876648 data-v-6589ed1c><!--[--><span data-v-6589ed1c>交流合作</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-46876648 data-v-11ef3b07><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-11ef3b07><span class="text" data-v-11ef3b07><!----><span data-v-11ef3b07>v7.1.0</span><span class="vpi-chevron-down text-icon" data-v-11ef3b07></span></span></button><div class="menu" data-v-11ef3b07><div class="VPMenu" data-v-11ef3b07 data-v-0007c525><div class="items" data-v-0007c525><!--[--><!--[--><div class="VPMenuLink" data-v-0007c525 data-v-47efe451><a class="VPLink link" href="/src/todo/update.html" data-v-47efe451><!--[-->更新日志<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-0007c525 data-v-47efe451><a class="VPLink link" href="/src/todo/plan.html" data-v-47efe451><!--[-->版本计划<!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-46876648 data-v-11ef3b07><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-11ef3b07><span class="text" data-v-11ef3b07><!----><span data-v-11ef3b07>更多</span><span class="vpi-chevron-down text-icon" data-v-11ef3b07></span></span></button><div class="menu" data-v-11ef3b07><div class="VPMenu" data-v-11ef3b07 data-v-0007c525><div class="items" data-v-0007c525><!--[--><!--[--><div class="VPMenuLink" data-v-0007c525 data-v-47efe451><a class="VPLink link vp-external-link-icon" href="https://cool-js.com" target="_blank" rel="noreferrer" data-v-47efe451><!--[-->Cool 官网<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-0007c525 data-v-47efe451><a class="VPLink link vp-external-link-icon" href="https://node.cool-admin.com" target="_blank" rel="noreferrer" data-v-47efe451><!--[-->Cool Admin(Nodejs版)<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-0007c525 data-v-47efe451><a class="VPLink link vp-external-link-icon" href="https://node.cool-js.com" target="_blank" rel="noreferrer" data-v-47efe451><!--[-->Cool Admin Vue(前端)<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-0007c525 data-v-47efe451><a class="VPLink link vp-external-link-icon" href="https://uni-docs.cool-js.com" target="_blank" rel="noreferrer" data-v-47efe451><!--[-->Uni(基于uni-app跨端移动端开发)<!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-3fed1b83 data-v-830f4e0c><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="切换到深色模式" aria-checked="false" data-v-830f4e0c data-v-5e81030c data-v-c5a026db><span class="check" data-v-c5a026db><span class="icon" data-v-c5a026db><!--[--><span class="vpi-sun sun" data-v-5e81030c></span><span class="vpi-moon moon" data-v-5e81030c></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-3fed1b83 data-v-6a13576c data-v-e883f8d0><!--[--><a class="VPSocialLink no-icon" href="https://github.com/cool-team-official/cool-admin-java" aria-label="github" target="_blank" rel="noopener" data-v-e883f8d0 data-v-116c6058><span class="vpi-social-github" /></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-3fed1b83 data-v-f78a1889 data-v-11ef3b07><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-11ef3b07><span class="vpi-more-horizontal icon" data-v-11ef3b07></span></button><div class="menu" data-v-11ef3b07><div class="VPMenu" data-v-11ef3b07 data-v-0007c525><!----><!--[--><!--[--><!----><div class="group" data-v-f78a1889><div class="item appearance" data-v-f78a1889><p class="label" data-v-f78a1889>主题</p><div class="appearance-action" data-v-f78a1889><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="切换到深色模式" aria-checked="false" data-v-f78a1889 data-v-5e81030c data-v-c5a026db><span class="check" data-v-c5a026db><span class="icon" data-v-c5a026db><!--[--><span class="vpi-sun sun" data-v-5e81030c></span><span class="vpi-moon moon" data-v-5e81030c></span><!--]--></span></span></button></div></div></div><div class="group" data-v-f78a1889><div class="item social-links" data-v-f78a1889><div class="VPSocialLinks social-links-list" data-v-f78a1889 data-v-e883f8d0><!--[--><a class="VPSocialLink no-icon" href="https://github.com/cool-team-official/cool-admin-java" aria-label="github" target="_blank" rel="noopener" data-v-e883f8d0 data-v-116c6058><span class="vpi-social-github" /></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-3fed1b83 data-v-7ec5116e><span class="container" data-v-7ec5116e><span class="top" data-v-7ec5116e></span><span class="middle" data-v-7ec5116e></span><span class="bottom" data-v-7ec5116e></span></span></button></div></div></div></div><div class="divider" data-v-3fed1b83><div class="divider-line" data-v-3fed1b83></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-0dd53a6c data-v-4b826de3><div class="container" data-v-4b826de3><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-4b826de3><span class="vpi-align-left menu-icon" data-v-4b826de3></span><span class="menu-text" data-v-4b826de3>菜单</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-4b826de3 data-v-f9d4ca59><button data-v-f9d4ca59>回到顶部</button><!----></div></div></div><aside class="VPSidebar" data-v-0dd53a6c data-v-e024fac9><div class="curtain" data-v-e024fac9></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-e024fac9><span class="visually-hidden" id="sidebar-aria-label" data-v-e024fac9> Sidebar Navigation </span><!--[--><!--[--><div class="ad" data-v-96d1ba1f><!--[--><!--]--></div><!--]--><!--]--><!--[--><div class="no-transition group" data-v-9c4bd70d><section class="VPSidebarItem level-0" data-v-9c4bd70d data-v-a9de9e44><div class="item" role="button" tabindex="0" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><h2 class="text" data-v-a9de9e44>介绍</h2><!----></div><div class="items" data-v-a9de9e44><!--[--><div class="VPSidebarItem level-1 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/introduce/index.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>简介</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/introduce/show.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>演示</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/introduce/src.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>源码</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-9c4bd70d><section class="VPSidebarItem level-0 has-active" data-v-9c4bd70d data-v-a9de9e44><div class="item" role="button" tabindex="0" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><h2 class="text" data-v-a9de9e44>教程</h2><!----></div><div class="items" data-v-a9de9e44><!--[--><div class="VPSidebarItem level-1 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/guide/quick.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>快速开始</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/guide/dir.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>目录结构</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/guide/ai.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>Ai编码</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/guide/flow.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>Ai流程编排</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/guide/plugin.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>扩展插件</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/guide/dev.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>开发方式</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1" data-v-a9de9e44 data-v-a9de9e44><div class="item" role="button" tabindex="0" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><h3 class="text" data-v-a9de9e44>核心</h3><!----></div><div class="items" data-v-a9de9e44><!--[--><div class="VPSidebarItem level-2 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/guide/controller.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>控制器(controller)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/guide/service.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>服务(service)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/guide/db.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>数据库(db)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/guide/cache.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>缓存(cache)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/guide/upload.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>文件上传(file)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/guide/exception.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>统一异常(exception)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/guide/security.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>权限校验(security)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/guide/initData.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>数据初始化(init)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/guide/recordLog.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>请求日志(log)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/guide/swagger.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>接口文档(swagger)</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-1 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/guide/deploy.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>部署项目</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-9c4bd70d><section class="VPSidebarItem level-0" data-v-9c4bd70d data-v-a9de9e44><div class="item" role="button" tabindex="0" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><h2 class="text" data-v-a9de9e44>计划&更新</h2><!----></div><div class="items" data-v-a9de9e44><!--[--><div class="VPSidebarItem level-1 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/todo/update.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>更新</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/todo/plan.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>计划</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-9c4bd70d><section class="VPSidebarItem level-0" data-v-9c4bd70d data-v-a9de9e44><!----><div class="items" data-v-a9de9e44><!--[--><div class="VPSidebarItem level-1 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/question/common.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>常见问题</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-a9de9e44 data-v-a9de9e44><div class="item" data-v-a9de9e44><div class="indicator" data-v-a9de9e44></div><a class="VPLink link link" href="/src/about/index.html" data-v-a9de9e44><!--[--><p class="text" data-v-a9de9e44>交流合作</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-0dd53a6c data-v-cb0805a1><div class="VPDoc has-sidebar has-aside" data-v-cb0805a1 data-v-b521a168><!--[--><!--]--><div class="container" data-v-b521a168><div class="aside" data-v-b521a168><div class="aside-curtain" data-v-b521a168></div><div class="aside-container" data-v-b521a168><div class="aside-content" data-v-b521a168><div class="VPDocAside" data-v-b521a168 data-v-4ef74901><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-4ef74901 data-v-e9242aa7><div class="content" data-v-e9242aa7><div class="outline-marker" data-v-e9242aa7></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-e9242aa7>页面导航</div><ul class="VPDocOutlineItem root" data-v-e9242aa7 data-v-a53304d2><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-4ef74901></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-b521a168><div class="content-container" data-v-b521a168><!--[--><!--]--><main class="main" data-v-b521a168><div style="position:relative;" class="vp-doc _src_guide_deploy" data-v-b521a168><div><h1 id="项目部署" tabindex="-1">项目部署 <a class="header-anchor" href="#项目部署" aria-label="Permalink to &quot;项目部署&quot;">​</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 &quot;普通方式&quot;">​</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 &quot;1、部署流程(以宝塔为例):&quot;">​</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 &quot;2、推荐使用 pnpm 安装依赖&quot;">​</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 &quot;3、PM2 运行后端服务&quot;">​</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 &quot;4、nginx 配置示例&quot;">​</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;">&quot;upgrade&quot;</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;">&quot;upgrade&quot;</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 &quot;Docker 方式&quot;">​</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 &quot;1、部署流程(以宝塔为例):&quot;">​</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 &quot;2、打包镜像&quot;">​</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 &quot;3、运行&quot;">​</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 &quot;注意事项&quot;">​</a></h4><p>docker 部署,建议将缓存换成 redis,文件上传换成云存储,如:oss,防止操作不当导致的数据丢失。</p></div></div></main><footer class="VPDocFooter" data-v-b521a168 data-v-34368ad2><!--[--><!--]--><div class="edit-info" data-v-34368ad2><div class="edit-link" data-v-34368ad2><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-34368ad2><!--[--><span class="vpi-square-pen edit-link-icon" data-v-34368ad2></span> 在GitHub上编辑<!--]--></a></div><div class="last-updated" data-v-34368ad2><p class="VPLastUpdated" data-v-34368ad2 data-v-4e3c18a4>最后更新于: <time datetime="2024-07-17T09:08:04.000Z" data-v-4e3c18a4></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-34368ad2><span class="visually-hidden" id="doc-footer-aria-label" data-v-34368ad2>Pager</span><div class="pager" data-v-34368ad2><a class="VPLink link pager-link prev" href="/src/guide/swagger.html" data-v-34368ad2><!--[--><span class="desc" data-v-34368ad2>上一页</span><span class="title" data-v-34368ad2>接口文档(swagger)</span><!--]--></a></div><div class="pager" data-v-34368ad2><a class="VPLink link pager-link next" href="/src/todo/update.html" data-v-34368ad2><!--[--><span class="desc" data-v-34368ad2>下一页</span><span class="title" data-v-34368ad2>更新</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-0dd53a6c data-v-c01e8608><div class="container" data-v-c01e8608><p class="message" data-v-c01e8608>COOL为开发者而生</p><p class="copyright" data-v-c01e8608><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\":\"IDM-wWfu\",\"readme.md\":\"21sdoxr8\",\"src_about_index.md\":\"u0DlwXFy\",\"src_guide_ai.md\":\"BONNk2Tk\",\"src_guide_cache.md\":\"TbXSwkcj\",\"src_guide_controller.md\":\"DCo4_59t\",\"src_guide_db.md\":\"Duwyo5Xx\",\"src_guide_deploy.md\":\"D3Yfqu-Q\",\"src_guide_dev.md\":\"Dkd1jFPN\",\"src_guide_dir.md\":\"RpZMF5oN\",\"src_guide_exception.md\":\"B8TYnOY4\",\"src_guide_flow.md\":\"B5L__6Os\",\"src_guide_initdata.md\":\"BVn22GWI\",\"src_guide_plugin.md\":\"CkiuwUnt\",\"src_guide_quick.md\":\"Bto1F7au\",\"src_guide_recordlog.md\":\"Dmgx8D5v\",\"src_guide_security.md\":\"Bjjal5Gj\",\"src_guide_service.md\":\"DFVHuVBZ\",\"src_guide_swagger.md\":\"Cb0cwFc8\",\"src_guide_upload.md\":\"CxcWqhw1\",\"src_introduce_index.md\":\"DA1PheMx\",\"src_introduce_show.md\":\"D0p_OwAi\",\"src_introduce_src.md\":\"Cg4D7UK8\",\"src_question_common.md\":\"DOoSuwHd\",\"src_todo_plan.md\":\"OECDxoZt\",\"src_todo_update.md\":\"CbTC6nhk\"}");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\":\"请求日志(log)\",\"link\":\"/src/guide/recordLog.md\"},{\"text\":\"接口文档(swagger)\",\"link\":\"/src/guide/swagger.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>