refactor: 为翻译做准备
11
.github/workflows/deploy.yml
vendored
@@ -1,12 +1,8 @@
|
||||
name: Deploy site to Pages
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 * * * *"
|
||||
|
||||
push:
|
||||
branches: [ main ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
# 设置 GITHUB_TOKEN 的权限,以允许部署到 GitHub Pages
|
||||
@@ -15,11 +11,9 @@ permissions:
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
# 只允许同时进行一次部署,跳过正在运行和最新队列之间的运行队列
|
||||
# 但是,不要取消正在进行的运行,因为我们希望允许这些生产部署完成
|
||||
# 只允许同时进行一次部署
|
||||
concurrency:
|
||||
group: pages
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -30,12 +24,11 @@ jobs:
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: latest
|
||||
run_install: true
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 22
|
||||
node-version: lts/*
|
||||
cache: pnpm
|
||||
- name: Setup Pages
|
||||
uses: actions/configure-pages@v4
|
||||
|
||||
@@ -1,176 +0,0 @@
|
||||
import {defineConfig} from 'vitepress'
|
||||
|
||||
const resp = await (await fetch('https://panel.haozi.net/api/versions')).json()
|
||||
const versions = resp.data.slice(0, 10).map((item: any) => {
|
||||
return item.version
|
||||
})
|
||||
|
||||
// https://vitepress.dev/reference/site-config
|
||||
export default defineConfig({
|
||||
title: "耗子面板",
|
||||
description: "简单轻量 • 高效运维",
|
||||
lang: "zh",
|
||||
locales: {
|
||||
root: {
|
||||
label: '简体中文',
|
||||
lang: 'zh-Hans',
|
||||
},
|
||||
/*en: {
|
||||
label: 'English',
|
||||
lang: 'en',
|
||||
title: 'Rat Panel',
|
||||
themeConfig: {
|
||||
nav: [
|
||||
{text: 'Home', link: '/en/'},
|
||||
{text: 'Examples', link: '/en/markdown-examples'}
|
||||
],
|
||||
footer: {
|
||||
message: 'This website is powered by Rat Panel',
|
||||
copyright: '© 2022-2024 Tianjin Rat Technology Co., Ltd All Rights Reserved'
|
||||
},
|
||||
editLink: {
|
||||
pattern: "https://github.com/ratpanel/ratpanel.github.io/edit/main/:path",
|
||||
text: "Edit this page on GitHub"
|
||||
},
|
||||
},
|
||||
},*/
|
||||
},
|
||||
themeConfig: {
|
||||
// https://vitepress.dev/reference/default-theme-config
|
||||
logo: '/.github/assets/logo.png',
|
||||
nav: [
|
||||
{text: '首页', link: '/'},
|
||||
{text: '文档', link: '/quickstart/install'},
|
||||
{text: '支持', link: '/support'},
|
||||
{text: '🔥证书', link: '/cert'},
|
||||
{text: '关于', link: '/about'},
|
||||
],
|
||||
sidebar: [
|
||||
{
|
||||
text: '快速上手',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: '安装面板',
|
||||
link: '/quickstart/install'
|
||||
},
|
||||
{
|
||||
text: '挂载分区',
|
||||
link: '/quickstart/disk'
|
||||
},
|
||||
{
|
||||
text: '管理面板',
|
||||
link: '/quickstart/panel'
|
||||
},
|
||||
{
|
||||
text: '管理容器',
|
||||
link: '/quickstart/container'
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: '进阶指南',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: '面板 API',
|
||||
link: '/advanced/api'
|
||||
},
|
||||
{
|
||||
text: '配置容器镜像加速',
|
||||
link: '/advanced/hub-mirror'
|
||||
},
|
||||
{
|
||||
text: '配置反向代理',
|
||||
link: '/advanced/proxy'
|
||||
},
|
||||
{
|
||||
text: '配置进程守护',
|
||||
link: '/advanced/supervisor'
|
||||
},
|
||||
{
|
||||
text: '配置 QUIC(HTTP3)',
|
||||
link: '/advanced/quic'
|
||||
},
|
||||
{
|
||||
text: '配置 TLSv1.1 TLSv1',
|
||||
link: '/advanced/tls'
|
||||
},
|
||||
{
|
||||
text: '安全性建议',
|
||||
link: '/advanced/safe'
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: '版本日志',
|
||||
collapsed: true,
|
||||
items: [
|
||||
...versions.map(version => {
|
||||
return {
|
||||
text: version,
|
||||
link: `/version-${version}`
|
||||
}
|
||||
})
|
||||
]
|
||||
}
|
||||
],
|
||||
socialLinks: [
|
||||
{icon: 'github', link: 'https://github.com/tnb-labs/panel'},
|
||||
{icon: 'tencentqq', link: 'https://jq.qq.com/?_wv=1027&k=I1oJKSTH'},
|
||||
{icon: 'wechat', link: 'https://work.weixin.qq.com/gm/d8ebf618553398d454e3378695c858b6'},
|
||||
],
|
||||
editLink: {
|
||||
pattern: "https://github.com/ratpanel/ratpanel.github.io/edit/main/:path",
|
||||
text: "在 GitHub 上编辑此页面"
|
||||
},
|
||||
footer: {
|
||||
message: '<b style="font-size: larger; padding-bottom: 20px">严禁使用耗子面板从事违法活动,我司不对违规用户提供任何服务</b>',
|
||||
copyright: '© 2022-2024 天津耗子科技有限公司 版权所有丨<a target="_blank" href="https://beian.miit.gov.cn/" rel="noreferrer">津ICP备2022009678号-1</a>丨<a target="_blank" href="https://beian.mps.gov.cn/#/query/webSearch?code=12011502000848" rel="noreferrer">津公网安备12011502000848号</a>'
|
||||
},
|
||||
docFooter: {
|
||||
prev: '上一页',
|
||||
next: '下一页'
|
||||
},
|
||||
outline: {
|
||||
label: '页面导航'
|
||||
},
|
||||
langMenuLabel: '多语言',
|
||||
returnToTopLabel: '回到顶部',
|
||||
sidebarMenuLabel: '菜单',
|
||||
darkModeSwitchLabel: '主题',
|
||||
lightModeSwitchTitle: '切换到浅色模式',
|
||||
darkModeSwitchTitle: '切换到深色模式',
|
||||
skipToContentLabel: '跳转到内容',
|
||||
search: {
|
||||
provider: 'local',
|
||||
options: {
|
||||
locales: {
|
||||
root: {
|
||||
translations: {
|
||||
button: {
|
||||
buttonText: '搜索文档',
|
||||
buttonAriaLabel: '搜索文档'
|
||||
},
|
||||
modal: {
|
||||
noResultsText: '无法找到相关结果',
|
||||
resetButtonTitle: '清除查询条件',
|
||||
footer: {
|
||||
selectText: '选择',
|
||||
navigateText: '切换'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
transformPageData: (pageData) => {
|
||||
// 为版本页单独设置标题
|
||||
// https://github.com/vuejs/vitepress/discussions/2516
|
||||
if (pageData.params?.version) {
|
||||
pageData.title = `v${pageData.params.version}`
|
||||
}
|
||||
}
|
||||
})
|
||||
134
.vitepress/config/en.ts
Normal file
@@ -0,0 +1,134 @@
|
||||
import {defineConfig, type DefaultTheme} from 'vitepress'
|
||||
|
||||
const resp = await (await fetch('https://panel.haozi.net/api/versions')).json()
|
||||
const versions = resp.data.slice(0, 10).map((item: any) => {
|
||||
return item.version
|
||||
})
|
||||
|
||||
export const config = defineConfig({
|
||||
lang: 'en-US',
|
||||
description: "Goravel is a web application framework with complete functions and excellent scalability. As a starting scaffolding to help Gopher quickly build their own applications.",
|
||||
|
||||
themeConfig: {
|
||||
nav: nav(),
|
||||
|
||||
sidebar: [
|
||||
{
|
||||
text: "Quickstart",
|
||||
base: '/quickstart/',
|
||||
items: sidebarQuickstart()
|
||||
},
|
||||
{
|
||||
text: "Advanced",
|
||||
base: '/advanced/',
|
||||
items: sidebarAdvanced()
|
||||
},
|
||||
{
|
||||
text: "Versions",
|
||||
collapsed: true,
|
||||
items: [
|
||||
...versions.map((version: string) => {
|
||||
return {
|
||||
text: version,
|
||||
link: `/version-${version}`
|
||||
}
|
||||
})
|
||||
]
|
||||
},
|
||||
],
|
||||
|
||||
editLink: {
|
||||
pattern: 'https://github.com/ratpanel/ratpanel.github.io/edit/main/:path',
|
||||
text: 'Edit this page on GitHub'
|
||||
},
|
||||
footer: {
|
||||
message: 'Released under the MIT License',
|
||||
copyright: `Copyright © 2022-${new Date().getFullYear()} Tianjin Rat Technology Co., Ltd All Rights Reserved`
|
||||
},
|
||||
docFooter: {
|
||||
prev: 'Previous page',
|
||||
next: 'Next page'
|
||||
},
|
||||
outline: {
|
||||
label: 'On this page'
|
||||
},
|
||||
lastUpdated: {
|
||||
text: 'Last updated',
|
||||
formatOptions: {
|
||||
dateStyle: 'short',
|
||||
timeStyle: 'medium'
|
||||
}
|
||||
},
|
||||
langMenuLabel: 'Change language',
|
||||
returnToTopLabel: 'Return to top',
|
||||
sidebarMenuLabel: 'Menu',
|
||||
darkModeSwitchLabel: 'Appearance',
|
||||
lightModeSwitchTitle: 'Switch to light theme',
|
||||
darkModeSwitchTitle: 'Switch to dark theme',
|
||||
skipToContentLabel: 'Skip to content'
|
||||
}
|
||||
})
|
||||
|
||||
function nav(): DefaultTheme.NavItem[] {
|
||||
return [
|
||||
{text: '首页', link: '/'},
|
||||
{text: '文档', link: '/quickstart/install'},
|
||||
{text: '支持', link: '/support'},
|
||||
{text: '🔥证书', link: '/cert'},
|
||||
{text: '关于', link: '/about'},
|
||||
]
|
||||
}
|
||||
|
||||
function sidebarQuickstart(): DefaultTheme.SidebarItem[] {
|
||||
return [
|
||||
{
|
||||
text: '安装面板',
|
||||
link: '/install'
|
||||
},
|
||||
{
|
||||
text: '挂载分区',
|
||||
link: '/disk'
|
||||
},
|
||||
{
|
||||
text: '管理面板',
|
||||
link: '/panel'
|
||||
},
|
||||
{
|
||||
text: '管理容器',
|
||||
link: '/container'
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
function sidebarAdvanced(): DefaultTheme.SidebarItem[] {
|
||||
return [
|
||||
{
|
||||
text: '面板 API',
|
||||
link: '/api'
|
||||
},
|
||||
{
|
||||
text: '配置容器镜像加速',
|
||||
link: '/hub-mirror'
|
||||
},
|
||||
{
|
||||
text: '配置反向代理',
|
||||
link: '/proxy'
|
||||
},
|
||||
{
|
||||
text: '配置进程守护',
|
||||
link: '/supervisor'
|
||||
},
|
||||
{
|
||||
text: '配置 QUIC(HTTP3)',
|
||||
link: '/quic'
|
||||
},
|
||||
{
|
||||
text: '配置 TLSv1.1 TLSv1',
|
||||
link: '/tls'
|
||||
},
|
||||
{
|
||||
text: '安全性建议',
|
||||
link: '/safe'
|
||||
},
|
||||
]
|
||||
}
|
||||
12
.vitepress/config/index.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
import { defineConfig } from 'vitepress'
|
||||
import { shared } from './shared'
|
||||
import { config as en } from './en'
|
||||
|
||||
|
||||
// https://vitepress.dev/reference/site-config
|
||||
export default defineConfig({
|
||||
...shared,
|
||||
locales: {
|
||||
root: { label: 'English', ...en },
|
||||
},
|
||||
})
|
||||
58
.vitepress/config/search.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
import type {DefaultTheme} from "vitepress";
|
||||
|
||||
export const enSearch: DefaultTheme.LocalSearchOptions['locales'] = {
|
||||
root: {
|
||||
translations: {
|
||||
button: {
|
||||
buttonText: 'Search',
|
||||
buttonAriaLabel: 'Search'
|
||||
},
|
||||
modal: {
|
||||
noResultsText: 'No results for',
|
||||
resetButtonTitle: 'Clear the search query',
|
||||
footer: {
|
||||
selectText: 'Select',
|
||||
navigateText: 'Navigate',
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const zh_CNSearch: DefaultTheme.LocalSearchOptions['locales'] = {
|
||||
zh_CN: {
|
||||
translations: {
|
||||
button: {
|
||||
buttonText: '搜索',
|
||||
buttonAriaLabel: '搜索'
|
||||
},
|
||||
modal: {
|
||||
noResultsText: '没有找到相关结果:',
|
||||
resetButtonTitle: '清除搜索条件',
|
||||
footer: {
|
||||
selectText: '选择',
|
||||
navigateText: '切换',
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const zh_TWSearch: DefaultTheme.LocalSearchOptions['locales'] = {
|
||||
zh_TW: {
|
||||
translations: {
|
||||
button: {
|
||||
buttonText: '搜尋',
|
||||
buttonAriaLabel: '搜尋'
|
||||
},
|
||||
modal: {
|
||||
noResultsText: '沒有找到相關結果:',
|
||||
resetButtonTitle: '清除搜尋條件',
|
||||
footer: {
|
||||
selectText: '選擇',
|
||||
navigateText: '切換',
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
65
.vitepress/config/shared.ts
Normal file
@@ -0,0 +1,65 @@
|
||||
import {groupIconMdPlugin, groupIconVitePlugin} from 'vitepress-plugin-group-icons'
|
||||
import {createFileSystemTypesCache} from '@shikijs/vitepress-twoslash/cache-fs'
|
||||
import {transformerTwoslash} from '@shikijs/vitepress-twoslash'
|
||||
import timeline from "vitepress-markdown-timeline";
|
||||
import {defineConfig} from "vitepress";
|
||||
|
||||
import {enSearch, zh_CNSearch, zh_TWSearch} from './search'
|
||||
|
||||
export const shared = defineConfig({
|
||||
title: 'RatPanel',
|
||||
|
||||
rewrites: {
|
||||
'en/:rest*': ':rest*'
|
||||
},
|
||||
|
||||
lastUpdated: true,
|
||||
cleanUrls: true,
|
||||
metaChunk: true,
|
||||
|
||||
markdown: {
|
||||
codeTransformers: [
|
||||
transformerTwoslash({
|
||||
typesCache: createFileSystemTypesCache()
|
||||
})
|
||||
],
|
||||
config(md) {
|
||||
md.use(groupIconMdPlugin);
|
||||
md.use(timeline);
|
||||
},
|
||||
languages: ['go', 'bash', 'shell']
|
||||
},
|
||||
|
||||
themeConfig: {
|
||||
logo: '/logo.png',
|
||||
socialLinks: [
|
||||
{icon: 'github', link: 'https://github.com/tnb-labs/panel'},
|
||||
{icon: 'tencentqq', link: 'https://jq.qq.com/?_wv=1027&k=I1oJKSTH'},
|
||||
{icon: 'wechat', link: 'https://work.weixin.qq.com/gm/d8ebf618553398d454e3378695c858b6'},
|
||||
],
|
||||
search: {
|
||||
provider: 'local',
|
||||
options: {
|
||||
locales: {
|
||||
...enSearch,
|
||||
...zh_CNSearch,
|
||||
...zh_TWSearch
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
transformPageData: (pageData) => {
|
||||
// 为版本页单独设置标题
|
||||
// https://github.com/vuejs/vitepress/discussions/2516
|
||||
if (pageData.params?.version) {
|
||||
pageData.title = `v${pageData.params.version}`
|
||||
}
|
||||
},
|
||||
|
||||
vite: {
|
||||
plugins: [
|
||||
groupIconVitePlugin()
|
||||
],
|
||||
},
|
||||
})
|
||||
@@ -1,17 +1,14 @@
|
||||
// https://vitepress.dev/guide/custom-theme
|
||||
import { h } from 'vue'
|
||||
import type { Theme } from 'vitepress'
|
||||
import DefaultTheme from 'vitepress/theme'
|
||||
import './style.css'
|
||||
import TwoslashFloatingVue from '@shikijs/vitepress-twoslash/client'
|
||||
import Theme from 'vitepress/theme'
|
||||
import '@shikijs/vitepress-twoslash/style.css'
|
||||
import 'virtual:group-icons.css'
|
||||
import "vitepress-markdown-timeline/dist/theme/index.css";
|
||||
import type {EnhanceAppContext} from 'vitepress'
|
||||
import './styles.css'
|
||||
|
||||
export default {
|
||||
extends: DefaultTheme,
|
||||
Layout: () => {
|
||||
return h(DefaultTheme.Layout, null, {
|
||||
// https://vitepress.dev/guide/extending-default-theme#layout-slots
|
||||
})
|
||||
},
|
||||
enhanceApp({ app, router, siteData }) {
|
||||
// ...
|
||||
extends: Theme,
|
||||
enhanceApp({app}: EnhanceAppContext) {
|
||||
app.use(TwoslashFloatingVue)
|
||||
}
|
||||
} satisfies Theme
|
||||
}
|
||||
@@ -1,139 +0,0 @@
|
||||
/**
|
||||
* Customize default theme styling by overriding CSS variables:
|
||||
* https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css
|
||||
*/
|
||||
|
||||
/**
|
||||
* Colors
|
||||
*
|
||||
* Each colors have exact same color scale system with 3 levels of solid
|
||||
* colors with different brightness, and 1 soft color.
|
||||
*
|
||||
* - `XXX-1`: The most solid color used mainly for colored text. It must
|
||||
* satisfy the contrast ratio against when used on top of `XXX-soft`.
|
||||
*
|
||||
* - `XXX-2`: The color used mainly for hover state of the button.
|
||||
*
|
||||
* - `XXX-3`: The color for solid background, such as bg color of the button.
|
||||
* It must satisfy the contrast ratio with pure white (#ffffff) text on
|
||||
* top of it.
|
||||
*
|
||||
* - `XXX-soft`: The color used for subtle background such as custom container
|
||||
* or badges. It must satisfy the contrast ratio when putting `XXX-1` colors
|
||||
* on top of it.
|
||||
*
|
||||
* The soft color must be semi transparent alpha channel. This is crucial
|
||||
* because it allows adding multiple "soft" colors on top of each other
|
||||
* to create a accent, such as when having inline code block inside
|
||||
* custom containers.
|
||||
*
|
||||
* - `default`: The color used purely for subtle indication without any
|
||||
* special meanings attached to it such as bg color for menu hover state.
|
||||
*
|
||||
* - `brand`: Used for primary brand colors, such as link text, button with
|
||||
* brand theme, etc.
|
||||
*
|
||||
* - `tip`: Used to indicate useful information. The default theme uses the
|
||||
* brand color for this by default.
|
||||
*
|
||||
* - `warning`: Used to indicate warning to the users. Used in custom
|
||||
* container, badges, etc.
|
||||
*
|
||||
* - `danger`: Used to show error, or dangerous message to the users. Used
|
||||
* in custom container, badges, etc.
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-c-default-1: var(--vp-c-gray-1);
|
||||
--vp-c-default-2: var(--vp-c-gray-2);
|
||||
--vp-c-default-3: var(--vp-c-gray-3);
|
||||
--vp-c-default-soft: var(--vp-c-gray-soft);
|
||||
|
||||
--vp-c-brand-1: var(--vp-c-indigo-1);
|
||||
--vp-c-brand-2: var(--vp-c-indigo-2);
|
||||
--vp-c-brand-3: var(--vp-c-indigo-3);
|
||||
--vp-c-brand-soft: var(--vp-c-indigo-soft);
|
||||
|
||||
--vp-c-tip-1: var(--vp-c-brand-1);
|
||||
--vp-c-tip-2: var(--vp-c-brand-2);
|
||||
--vp-c-tip-3: var(--vp-c-brand-3);
|
||||
--vp-c-tip-soft: var(--vp-c-brand-soft);
|
||||
|
||||
--vp-c-warning-1: var(--vp-c-yellow-1);
|
||||
--vp-c-warning-2: var(--vp-c-yellow-2);
|
||||
--vp-c-warning-3: var(--vp-c-yellow-3);
|
||||
--vp-c-warning-soft: var(--vp-c-yellow-soft);
|
||||
|
||||
--vp-c-danger-1: var(--vp-c-red-1);
|
||||
--vp-c-danger-2: var(--vp-c-red-2);
|
||||
--vp-c-danger-3: var(--vp-c-red-3);
|
||||
--vp-c-danger-soft: var(--vp-c-red-soft);
|
||||
}
|
||||
|
||||
/**
|
||||
* Component: Button
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-button-brand-border: transparent;
|
||||
--vp-button-brand-text: var(--vp-c-white);
|
||||
--vp-button-brand-bg: var(--vp-c-brand-3);
|
||||
--vp-button-brand-hover-border: transparent;
|
||||
--vp-button-brand-hover-text: var(--vp-c-white);
|
||||
--vp-button-brand-hover-bg: var(--vp-c-brand-2);
|
||||
--vp-button-brand-active-border: transparent;
|
||||
--vp-button-brand-active-text: var(--vp-c-white);
|
||||
--vp-button-brand-active-bg: var(--vp-c-brand-1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Component: Home
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-home-hero-name-color: transparent;
|
||||
--vp-home-hero-name-background: -webkit-linear-gradient(
|
||||
120deg,
|
||||
#bd34fe 30%,
|
||||
#41d1ff
|
||||
);
|
||||
|
||||
--vp-home-hero-image-background-image: linear-gradient(
|
||||
-45deg,
|
||||
#bd34fe 50%,
|
||||
#47caff 50%
|
||||
);
|
||||
--vp-home-hero-image-filter: blur(44px);
|
||||
}
|
||||
|
||||
@media (min-width: 640px) {
|
||||
:root {
|
||||
--vp-home-hero-image-filter: blur(56px);
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 960px) {
|
||||
:root {
|
||||
--vp-home-hero-image-filter: blur(68px);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Component: Custom Block
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-custom-block-tip-border: transparent;
|
||||
--vp-custom-block-tip-text: var(--vp-c-text-1);
|
||||
--vp-custom-block-tip-bg: var(--vp-c-brand-soft);
|
||||
--vp-custom-block-tip-code-bg: var(--vp-c-brand-soft);
|
||||
}
|
||||
|
||||
/**
|
||||
* Component: Algolia
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
.DocSearch {
|
||||
--docsearch-primary-color: var(--vp-c-brand-1) !important;
|
||||
}
|
||||
|
||||
20
.vitepress/theme/styles.css
Normal file
@@ -0,0 +1,20 @@
|
||||
@import url('https://googlefonts.admincdn.com/css2?family=Noto+Color+Emoji&display=swap');
|
||||
|
||||
:root {
|
||||
--vp-nav-logo-height: 36px;
|
||||
--vp-home-hero-name-color: transparent;
|
||||
--vp-home-hero-name-background: -webkit-linear-gradient(
|
||||
120deg,
|
||||
#bd34fe 30%,
|
||||
#41d1ff
|
||||
);
|
||||
}
|
||||
|
||||
.VPHero .VPImage {
|
||||
filter: drop-shadow(-2px 4px 6px rgba(0, 0, 0, 0.2));
|
||||
padding: 18px;
|
||||
}
|
||||
|
||||
.icon {
|
||||
font-family: 'Noto Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Apple Color Emoji', emoji;
|
||||
}
|
||||
7
crowdin.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
commit_message: '[skip ci] Update translations (%language%) %original_file_name%'
|
||||
pull_request_title: 'l10n: update translations'
|
||||
files:
|
||||
- source: /en/**/*.md
|
||||
translation: /%locale_with_underscore%/**/%file_name%.md
|
||||
- source: /.vitepress/config/en.ts
|
||||
translation: /.vitepress/config/%locale_with_underscore%.ts
|
||||
@@ -1,5 +1,5 @@
|
||||
# 配置进程守护
|
||||
|
||||
1. 安装 Supervisor 管理器并打开。
|
||||
2. Supervisor 管理器中创建需要守护的进程(运行用户不建议使用 root)。
|
||||
3. 常见问题:[https://tom.moe/t/supervisor/3112](https://tom.moe/t/supervisor/3112)
|
||||
# 配置进程守护
|
||||
|
||||
1. 安装 Supervisor 管理器并打开。
|
||||
2. Supervisor 管理器中创建需要守护的进程(运行用户不建议使用 root)。
|
||||
3. 常见问题:[https://tom.moe/t/supervisor/3112](https://tom.moe/t/supervisor/3112)
|
||||
10
en/index.md
@@ -49,18 +49,18 @@ features:
|
||||
|
||||
<div style="display: flex; justify-content: space-around; align-items: center; flex-wrap: wrap;">
|
||||
<a href="https://www.weixiaoduo.com/" style="padding: 1rem;">
|
||||
<img width="160" src="/.github/assets/wxd.png" alt="微晓朵">
|
||||
<img width="160" src="/wxd.png" alt="微晓朵">
|
||||
</a>
|
||||
<a href="https://www.dkdun.cn/aff/MQZZNVHQ" style="padding: 1rem;">
|
||||
<img width="160" src="/.github/assets/dk.png" alt="林枫云">
|
||||
<img width="160" src="/dk.png" alt="林枫云">
|
||||
</a>
|
||||
<a href="https://waf.pro/">
|
||||
<img width="160" src="/.github/assets/wafpro.png" alt="WAFPRO" style="padding: 1rem;">
|
||||
<img width="160" src="/wafpro.png" alt="WAFPRO" style="padding: 1rem;">
|
||||
</a>
|
||||
<a href="https://scdn.ddunyun.com/">
|
||||
<img width="160" src="/.github/assets/ddunyun.png" alt="盾云SCDN" style="padding: 1rem;">
|
||||
<img width="160" src="/ddunyun.png" alt="盾云SCDN" style="padding: 1rem;">
|
||||
</a>
|
||||
<a href="https://1ms.run/" style="padding: 1rem;">
|
||||
<img width="160" src="/.github/assets/1ms.svg" alt="毫秒镜像">
|
||||
<img width="160" src="/1ms.svg" alt="毫秒镜像">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
63
index.md
@@ -1,63 +0,0 @@
|
||||
---
|
||||
# https://vitepress.dev/reference/default-theme-home-page
|
||||
layout: home
|
||||
|
||||
hero:
|
||||
name: "耗子面板"
|
||||
text: "简单轻量 • 高效运维"
|
||||
tagline: 全能服务器运维管理面板
|
||||
actions:
|
||||
- theme: brand
|
||||
text: 🌟 点亮 Star
|
||||
link: https://github.com/tnb-labs/panel
|
||||
target: _blank
|
||||
- theme: alt
|
||||
text: 快速安装
|
||||
link: /quickstart/install
|
||||
|
||||
features:
|
||||
- icon: ✨
|
||||
title: 极低占用
|
||||
details: Go 语言开发,安装包小,占用低,单文件运行,不会对系统性能造成影响
|
||||
- icon: 🛠
|
||||
title: 低破坏性
|
||||
details: 设计为尽可能减少对系统的额外修改,在同类产品中,我们对系统的修改最少
|
||||
- icon: 📅
|
||||
title: 追随时代
|
||||
details: 整体设计走在时代前沿,对新系统兼容性好,在同类产品中处于领先地位
|
||||
- icon: 🚀
|
||||
title: 高效运维
|
||||
details: 功能完善,自定义能力强,既可快速部署小型网站,也可基于定制化需求部署复杂应用
|
||||
- icon: ⛓️💥
|
||||
title: 离线运行
|
||||
details: 支持离线模式,甚至可以在部署完成后停止面板进程,不会对已有服务造成任何影响
|
||||
- icon: 🛡
|
||||
title: 安全稳定
|
||||
details: 面板采用业界多种技术保障本体安全性,已在我们的多个生产环境中长期稳定运行
|
||||
- icon: 💽
|
||||
title: 全面开源
|
||||
details: 少有的全开源面板,您可以在遵守开源协议的前提下对面板自由修改、二次开发
|
||||
- icon: 🆓
|
||||
title: 永久免费
|
||||
details: 承诺面板本体未来不会引入任何收费/授权功能,永久免费使用
|
||||
---
|
||||
|
||||
## 合作伙伴
|
||||
|
||||
<div style="display: flex; justify-content: space-around; align-items: center; flex-wrap: wrap;">
|
||||
<a href="https://www.weixiaoduo.com/" style="padding: 1rem;">
|
||||
<img width="160" src="/.github/assets/wxd.png" alt="微晓朵">
|
||||
</a>
|
||||
<a href="https://www.dkdun.cn/aff/MQZZNVHQ" style="padding: 1rem;">
|
||||
<img width="160" src="/.github/assets/dk.png" alt="林枫云">
|
||||
</a>
|
||||
<a href="https://waf.pro/">
|
||||
<img width="160" src="/.github/assets/wafpro.png" alt="WAFPRO" style="padding: 1rem;">
|
||||
</a>
|
||||
<a href="https://scdn.ddunyun.com/">
|
||||
<img width="160" src="/.github/assets/ddunyun.png" alt="盾云SCDN" style="padding: 1rem;">
|
||||
</a>
|
||||
<a href="https://1ms.run/" style="padding: 1rem;">
|
||||
<img width="160" src="/.github/assets/1ms.svg" alt="毫秒镜像">
|
||||
</a>
|
||||
</div>
|
||||
22
package.json
@@ -1,11 +1,25 @@
|
||||
{
|
||||
"devDependencies": {
|
||||
"vitepress": "^1.5.0",
|
||||
"vue": "^3.5.13"
|
||||
},
|
||||
"type": "module",
|
||||
"name": "ratpanel-docs",
|
||||
"version": "1.0.0",
|
||||
"description": "RatPanel Documentation",
|
||||
"author": "TNB",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"docs:dev": "vitepress dev",
|
||||
"docs:build": "vitepress build",
|
||||
"docs:preview": "vitepress preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"vitepress-markdown-timeline": "^1.2.2",
|
||||
"vitepress-plugin-group-icons": "^1.3.8",
|
||||
"vue": "^3.5.13"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nolebase/vitepress-plugin-enhanced-mark": "^2.15.1",
|
||||
"@nolebase/vitepress-plugin-enhanced-readabilities": "^2.15.1",
|
||||
"@shikijs/vitepress-twoslash": "^3.2.1",
|
||||
"@types/node": "^22.14.0",
|
||||
"vitepress": "2.0.0-alpha.4"
|
||||
}
|
||||
}
|
||||
2140
pnpm-lock.yaml
generated
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 819 KiB After Width: | Height: | Size: 819 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
33
tsconfig.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"jsx": "preserve",
|
||||
"lib": [
|
||||
"DOM",
|
||||
"ESNext"
|
||||
],
|
||||
"module": "ESNext",
|
||||
"moduleResolution": "Bundler",
|
||||
"resolveJsonModule": true,
|
||||
"strict": true,
|
||||
"strictNullChecks": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noImplicitAny": true,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"noEmit": true,
|
||||
"removeComments": false,
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"isolatedModules": true,
|
||||
"verbatimModuleSyntax": true,
|
||||
"skipLibCheck": true
|
||||
},
|
||||
"include": [
|
||||
"**/.vitepress/**/*.ts",
|
||||
"**/.vitepress/**/*.mts",
|
||||
"**/.vitepress/**/*.vue"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules"
|
||||
]
|
||||
}
|
||||