mirror of
https://github.com/cool-team-official/cool-admin-java-docs.git
synced 2026-10-07 16:47:58 +08:00
116 lines
54 KiB
HTML
116 lines
54 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.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 "项目部署""></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-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> |