This is a personal (pdai) original article, please indicate the source for reprinting and refer to the effect of blog building: [Java Full Stack Knowledge System] ( https://www.pdai.tech)
Article Content Directory
- Article Content Directory
-
Part I - Building Blog/Document System
-
Document Setup Plug-ins and Configuration
- Add Document Additional Style Configuration: Theme
- Add Back to Top Plugin
- Add Picture Zoom Plugin
- Add Comment Plugin
- Add export of Vuepress document
- Add svg label tag
- Add Baidu Statistics
- Add Copy Automatically Add Copyright Information
- Add SEO optimization
- Add Baidu Site Auto Push
- Add Sitemap Information
- Add Code Copy
- More Plugin Configurations
- Blog/Document slightly complete configuration list
- Other reference resources for vuepress
- Final results
Part I - Building Blog/Document System
There are many choices to build a blog, such as a well-known CSDN, a blog park, knowledge, short books, etc. and self-build such as Hexo, Gitbook, Docisify, etc.I had a feeling of insecurity, and I used each one (...) but in the end I chose to move my blog one by one to the vuepress I built.@pdai
Blog/Document Preface
What are the options
There are many choices to build a blog, such as a well-known CSDN, a blog park, knowledge, short books, etc. and self-build such as Hexo, Gitbook, Docisify, etc.
What attempts have I made
- Write it yourself: I wrote a system in java
- Tools such as Docisify
- Platforms like Blog Garden
Write it yourself: I wrote a system in java
The following systems were designed, developed, and maintained by me independently (over 40,000 lines of code in total). Only the blog documentation section is shown here.Here's a screenshot of an article I wrote in a previous blog park:
- markdown editing
- List of Articles
- Supports exporting in various forms
- Supports sharing to other virtual organizations
Wait.
Tools such as Docisify
Previously, I wrote a series of articles summary with the complete platform based on K8S.The tools used are Docisify.
The results are as follows:
Platforms like Blog Garden
Custom Styles are supported and js permissions are customized, which indicates a high degree of freedom control (CSDN is a bit conservative in this respect); however, the site has not been updated for a long time, and the home page style feels like it stayed a decade ago; the client program feels a little low;
The results are as follows:
You can see exactly what I wrote: [Blog Park Configuration] What sausage actions are included in the custom configuration of the blog Park
Why use vuepress now
Similar blog/document tools have advantages over vuepress: The following are extracts from: Vuepress website
- Nuxt
What VuePress can do, Nuxt is theoretically competent, but Nuxt is designed to build applications, while VuePress focuses on content-centric static websites and offers some out-of-the-box features tailored to technical documentation.
- Docsify / Docute
Both projects are also Vue-based, but they are fully run-time drivers and are therefore not friendly to SEO.If you don't focus on SEO and don't want to install a lot of dependencies, they're still a great choice!
- Hexo
Hexo drives Vue's documentation all the time - in fact, we may have a long way to go before we move our main site from Hexo to VuePress.Hexo's biggest problem is that his theme system is too static and relies too heavily on plain strings, and we'd love to make the best use of Vue to handle our layout and interaction, while Hexo's Markdown rendering configuration is not the most flexible.
- GitBook
Our subproject documentation has always been using GitBook.The biggest problem with GitBook is that when there are many files, the reload time after each edit is unbearably long.Its default theme navigation structure is also more restrictive, and the theme system is not Vue-driven.The team behind GitBook is now more focused on making it a commercial product than an open source tool.
Introduction to the blog/documentation tool vuepress
VuePress consists of two parts: the first part is a Minimalist Static Site Generator It contains Vue-driven thematic systems and plug-in API s, and the other part is the default theme optimized for writing technical documents, which was originally created to support the documentation needs of Vue and its subprojects.
Every page generated by VuePress has pre-rendered HTML and therefore has very good load performance and search engine optimization (SEO).At the same time, once the page is loaded, Vue takes over the static content and converts it into a full single-page application (SPA), while the other pages are only loaded on demand when the user browses.
How does vuepress work?
In fact, a VuePress website is created by Vue,Vue Router and webpack Driven single page application.If you've used Vue before, when you're developing a custom theme, you'll feel very familiar with the development experience, and you can even use Vue DevTools to debug your custom theme.
At build time, we create a version of the server-side rendering (SSR) for the application and render the corresponding HTML by virtually accessing each path.This was inspired by Nuxt The nuxt generate command for, along with some other items such as Gatsby.
Some features of vuepress
- Built-in Markdown Extensions Optimized for Technical Documentation
- Ability to use Vue components in Markdown files
- Vue-driven custom theme system
- Automatically generate Service Worker (supports PWA)
- Google Analytics Integration
- Git-based Last Update Time
- Multilingual support
- Responsive Layout
- Natural SEO capabilities, much better than Docsify, a front-end rendering HTML
vuepress plug-in architecture
Its overall plug-in architecture case: Vuepress Plug-in Architecture Case
Blog/Document Infrastructure
Documentation is easy to set up, it mainly records the process, and some steps you can skip if you don't need them when reading.
brew installation or update
Uninstall the installed homebrew first with the following commands:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
Then reinstall:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
The latest homebrew is obtained directly by this method, and the expected results are obtained.Note: The above can fix the problem of chown: /usr/local: Operation not permitted.
If you feel slow and need to change the Brew mirror source, please refer to: Replace Brew Mirror Source
Update node and npm
Vuepress requires Node version: Node.js version >= 8.6.
- Method 1: Manually delete the node and npm files below / usr/local/bin
- Method 2: Overwrite the existing brew link --overwrite node
Refer to these two articles if necessary:
Configure vuepress working directory
- Global Installation vuepress
yarn global add vuepress
- Create project and initialize directory structure
# Catalog mkdir tech-arch-doc cd tech-arch-doc # Initialization yarn init -y # Or NPM init-y # Folder to place markdown mkdir md # package.json, see the following touch package.json # Play vuepress correlation mkdir .vuepress cd .vuepress # Create config.js, where you will find it later touch config.js # Play pictures and CNAME mkdir public # Styled mkdir styles # Create a picture inside cd public mkdir _images
The final structure is probably this: (Other gray folders are compiled)
Add Configuration and Content
- Add Home Page
--- home: true heroImage: /_images/index-read.gif actionText: Quick Start → actionLink: /md/java/basic/java-basic-oop.md features: - title: Tamping foundation details: Do not stumble to thousands of miles, Looking up at the stars needs to be down-to-earth - title: Building System details: Say goodbye to fragmentation learning and help you build your own knowledge system - title: Full stack development details: with Java Development as background, full stack development, DevOps footer: © 2017-present pdai ---
- config.js configuration
module.exports = { port: "3000", dest: "docs", ga: "UA-xxxxx-1", base: "/", markdown: { lineNumbers: true, externalLinks: { target: '_blank', rel: 'noopener noreferrer' } }, locales: { "/": { lang: "zh-CN", title: "Java Full stack knowledge system", description: "Contain: Java Basics, Java Partial Source, JVM, Spring, Spring Boot, Spring Cloud, Database Principles, MySQL, ElasticSearch, MongoDB, Docker, k8s, CI&CD, Linux, DevOps, Distributed, middleware, development tool, Git, IDE, Source reading, reading notes, Open Source Project..." } }, head: [ // ico ["link", {rel: "icon", href: `/favicon.ico`}], // meta ["meta", {name: "robots", content: "all"}], ["meta", {name: "author", content: "pdai"}], ["meta", {name: "keywords", content: "Java Full stack knowledge system, java system, java Knowledge System, java frame,java Detailed,java Learning Route,java spring, java Interview, Knowledge System, java Technical System, java programming, java Programming Guide,java Development System, java Development,java Course,java,java data structure, algorithm, Development Foundation"}], ["meta", {name: "apple-mobile-web-app-capable", content: "yes"}] ], plugins: [ ], themeConfig: { // repo: "realpdai/tech-arch-doc", docsRepo: "realpdai/tech-arch-doc", // logo: "/logo.png", editLinks: true, sidebarDepth:0, locales: { "/": { label: "Simplified Chinese", selectText: "Languages", editLinkText: "stay GitHub Edit this page on", lastUpdated: "Last Update", nav: [ ], sidebar: { } } } } };
- package.json configuration
Enter Project Directory
{ "name": "tech-arch-doc", "version": "0.0.1", "private": true, "scripts": { "dev": "vuepress dev", "build": "vuepress build" }, "devDependencies": { "vuepress": "^1.0.2" } }
- Local Test
vuepress dev
Preliminary results:
- To generate a static HTML file, run:
By default, the file will be generated in.vuepress/dist, and of course, you can also modify it through the dest field in.vuepress/config.js, which can be deployed on any static file server
Please refer to the official website https://vuepress.vuejs.org/zh...
vuepress build
Document Setup Plug-ins and Configuration
This section focuses on documentation for new plug-ins and configurations, in addition to the default loaded configurations and plug-ins.
Add Document Additional Style Configuration: Theme
Note that many online examples are based on older versions, even when I used vuepress, the official website was not updated.
For the best configuration, see: Here (Configuration of other official websites has not been updated)
- index.styl - Override style
.custom-page-class{ /* Custom Styles */ } // markdown blockquote blockquote font-size 1rem color #2c3e50; border-left .5rem solid #42b983 background-color #f3f5f7 margin 1rem 0 padding 1rem 0 1rem 1rem & > p margin 0 // markdown h2 h2 font-size 1.65rem padding-bottom 1rem border-bottom 1px solid $borderColor
- palette.styl - Style configuration override
// Width of content $contentWidth = 100% // colour $accentColor = #3eaf7c $textColor = #2c3e50 $borderColor = #eaecef $codeBgColor = #282c34
Add Back to Top Plugin
The article is very long. Add a button at the bottom right to return to the top button. The back-to-top plugin is available on the official website.
install
yarn add -D @vuepress/plugin-back-to-top@next # OR npm install -D @vuepress/plugin-back-to-top@next
Use
module.exports = { plugins: ['@vuepress/back-to-top'] }
You can also refer to the plug-in for use: Plugin Offline
Add Picture Zoom Plugin
Picture zooming can use the @vuepress/plugin-medium-zoom plug-in, which is based on the medium-zoom plug-in.
yarn add -D @vuepress/plugin-medium-zoom@next # OR npm install -D @vuepress/plugin-medium-zoom@next
Simple use:
module.exports = { plugins: ['@vuepress/medium-zoom'] }
Custom options:
module.exports = { plugins: { '@vuepress/medium-zoom': { selector: 'img.zoom-custom-imgs', // medium-zoom options here // See: https://github.com/francoischalifour/medium-zoom#options options: { margin: 16 } } } }
The effect can be viewed by clicking on the pictures in this article. For specific use, you can refer to: Plugin Offline.
Add Comment Plugin
Code Managed Platform Compliance OAuth 2 spec The OAuth API is available.Vssue leverages the platform's OAuth API to allow users to sign in and post comments.So what comment plugins are available?This uses Vssue, which is relatively new and may not know many people.@pdai
Vssue , Gitalk and Gitment Why choose Vssue:
- Vssue supports Github, Gitlab, and Bitbucket and is easy to extend to other platforms.Github is only supported for u Gitment_ and Gitalk.
- Vssue can publish, edit, and delete comments._u Gitment_u and Gitalk can only comment.
- Vssue is based on Vue.js Developed, can be integrated into a Vue project, and provides a VuePress Plugin .Gitment is based on native JS, and Gitalk is based on Preact.
Here is a brief process for Vssue:
When users allow Vssue access on the platform's authorization page, the platform will redirect back to the Vssue page with code or token (if code, Vssue will request token from the platform based on code).
When Vssue acquires a token, it stores it in the local store, and the user successfully "logs in" to Vssue using the platform's account number.
Next, Vssue can get basic information about the user, get comments on the current page, and the user can also post comments.
Add the following configuration: Vssue Official Tutorial
plugins: { '@vssue/vuepress-plugin-vssue': { // Set `platform` instead of `api` platform: 'github', // Other Vssue configurations owner: 'OWNER_OF_REPO', repo: 'NAME_OF_REPO', clientId: 'YOUR_CLIENT_ID', clientSecret: 'YOUR_CLIENT_SECRET', }, },
The results are as follows:
Add export of Vuepress document
:: warning Note:
Export pages are only available locally, and online functionality is temporarily turned off.
:::
I wrote my own document PDF export function (Page, Group, Current is the code number in my export function): Page = Group1+...GroupN, Group = Current1+...CurrentN
- Current Page Export
- Group Page Export: Used primarily to export all articles below one or more groups of chapters.
- Page Page Export
Taking the export of SpringBoot as an example, the results are as follows:
Add svg label tag
Do you often see <img src= added to other people's projects? https://img.shields.io/badge/... ;>This label?This tag is mainly based on svg, there are two main types:
- For example, Travis CI offers: Build results for this site
- This website can also be customized: Customize icon svg
Effect after adding (status acquired automatically):
<img src="https://travis-ci.com/realpdai/tech-arch-doc.svg?branch=master">
<img src="https://img.shields.io/github/license/realpdai/tech-arch-doc">
<img src="https://img.shields.io/badge/...;>
Add Baidu Statistics
- Baidu Statistics mainly helps me to analyze page visits, go directly to: Baidu Statistics website
Note the addition of Baidu Statistics, consider recording each page click and intercepting router in enhanceApp.js:
export default ({router}) => { router.beforeEach((to, from, next) => { // @pdai: Click on each page to add Baidu statistics if(typeof _hmt!='undefined'){ if (to.path) { _hmt.push(['_trackPageview', to.fullPath]); } } // continue next(); }) };
A page in Baidu Statistics has the following effect:
Add Copy Automatically Add Copyright Information
When copying your website, disable copying or adding copyright information, etc.
install
npm install vuepress-plugin-copyright
To configure
// .vuepress/config.js module.exports = { plugins: [ [ 'copyright', { noCopy: true, // Selected text will not be copied minLength: 100, // If the length exceeds 100 characters }, ], ], }
Effect, the copy page will be added automatically:
Copyright is owned by xxxx. Link: https://www.pdai.tech/md/about/blog/blog-build-vuepress.html
See Plugins for more information: vuepress-plugin-sitemap
Add SEO optimization
This is a link for reference, but the meta information I added here does not use it.
Add Baidu Site Auto Push
Mainly used for automatic push to Baidu site, to help SEO.
install
npm install -D vuepress-plugin-baidu-autopush
Add Configuration
module.exports = { plugins: [ 'vuepress-plugin-baidu-autopush' ] };
See Plugins for more information: vuepress-plugin-baidu-autopush
Add Sitemap Information
A Sitemap that is primarily used to generate sites and helps with SEO.
install
npm install vuepress-plugin-sitemap
To configure
// .vuepress/config.js module.exports = { plugins: { 'sitemap': { hostname: 'https://www.pdai.tech' }, } }
See Plugins for more information: vuepress-plugin-sitemap
Add Code Copy
In the code area, add a copy button to copy the code.
install
npm install vuepress-plugin-code-copy
To configure
module.exports = { plugins: [['vuepress-plugin-code-copy', true]] }
See Plugins for more information: vuepress-plugin-code-copy
More Plugin Configurations
Please refer to awesome-vuepress
Blog/Document slightly complete configuration list
- Cong.js section
module.exports = { port: "3000", dest: "docs", ga: "UA-xxxxxxxxxxx-1", base: "/", markdown: { lineNumbers: true, externalLinks: { target: '_blank', rel: 'noopener noreferrer' } }, locales: { "/": { lang: "zh-CN", title: "Java Full stack knowledge system", description: "Contain: Java Basics, Java Partial Source, JVM, Spring, Spring Boot, Spring Cloud, Database Principles, MySQL, ElasticSearch, MongoDB, Docker, k8s, CI&CD, Linux, DevOps, Distributed, middleware, development tool, Git, IDE, Source reading, reading notes, Open Source Project..." } }, head: [ // ico ["link", {rel: "icon", href: `/favicon.ico`}], // meta ["meta", {name: "robots", content: "all"}], ["meta", {name: "author", content: "pdai"}], ["meta", {name: "keywords", content: "Java Full stack knowledge system, java system, java Knowledge System, java frame,java Detailed,java Learning Route,java spring, java Interview, Knowledge System, java Technical System, java programming, java Programming Guide,java Development System, java Development,java Course,java,java data structure, algorithm, Development Foundation"}], ["meta", {name: "apple-mobile-web-app-capable", content: "yes"}], // baidu statstic ["script", {src: "https://hm.baidu.com/hm.js?xxxxxxxxxxx"}] ], plugins: [ ['@vuepress/back-to-top', true], ['@vuepress/medium-zoom', { selector: 'img', // See: https://github.com/francoischalifour/medium-zoom#options options: { margin: 16 } }], // see: https://vssue.js.org/guide/vuepress.html#usage ['@vssue/vuepress-plugin-vssue', { // set `platform` rather than `api` platform: 'github', // all other options of Vssue are allowed owner: 'realpdai', repo: 'tech-arch-doc-comments', clientId: 'xxxxxxxxxxx', clientSecret: 'xxxxxxxxxxxxxxxxxxxxxx', }], // see: https://vuepress.github.io/zh/plugins/copyright/#%E5%AE%89%E8%A3%85 ['copyright', { noCopy: false, // Allow copying content minLength: 100, // If the length exceeds 100 characters authorName: "https://www.pdai.tech", // clipboardComponent: "[Java Full Stack Knowledge System] (https://www.pdai.tech)" }], // see: https://github.com/ekoeryanto/vuepress-plugin-sitemap ['sitemap', { hostname: 'https://www.pdai.tech' }], // see: https://github.com/IOriens/vuepress-plugin-baidu-autopush ['vuepress-plugin-baidu-autopush', { }], // see: https://github.com/znicholasbrown/vuepress-plugin-code-copy [['vuepress-plugin-code-copy', true]] // ... ], themeConfig: { //repo: "realpdai/tech-arch-doc", docsRepo: "realpdai/tech-arch-doc", //logo: "/logo.png", editLinks: true, sidebarDepth:0, locales: { "/": { label: "Simplified Chinese", selectText: "Languages", editLinkText: "stay GitHub Edit this page on", lastUpdated: "Last Update", nav: [ { text: 'about', link: '/md/about/me/about-me.md' } ], sidebar: { "/md/about/": genSidebar4About() } } } } }; // About page function genSidebar4About(){ return [ { title: "about", collapsable: false, sidebarDepth: 0, children: [ "me/about-me.md", "me/about-content.md", "me/about-content-style.md", "me/about-arch.md", "me/about-motivation.md" ] }, { title: "about - Setup of this document", collapsable: false, sidebarDepth: 0, children: [ "blog/blog-build-vuepress.md", "blog/blog-build-ci.md", "blog/blog-build-cd.md", "blog/blog-build-ssl.md" ] } ]; }
- package.json
{ "name": "tech-arch-doc", "version": "2.0.1", "private": true, "scripts": { "dev": "vuepress dev", "build": "vuepress build" }, "devDependencies": { "@vuepress/plugin-back-to-top": "^1.0.3", "@vuepress/plugin-medium-zoom": "^1.0.4", "vuepress": "^1.0.2" }, "dependencies": { "@vssue/api-github-v3": "^1.1.2", "@vssue/vuepress-plugin-vssue": "^1.2.0", "vuepress-plugin-baidu-autopush": "^1.0.1", "vuepress-plugin-code-copy": "^1.0.4-alpha", "vuepress-plugin-copyright": "^1.0.2", "vuepress-plugin-sitemap": "^2.3.0" } }
- enhanceApp.js
export default ({router}) => { router.beforeEach((to, from, next) => { // @pdai: Click on each page to add Baidu statistics if(typeof _hmt!='undefined'){ if (to.path) { _hmt.push(['_trackPageview', to.fullPath]); } } // continue next(); }) };
- index.styl
.custom-page-class{ /* Custom Styles */ } // markdown blockquote blockquote font-size 1rem color #2c3e50; border-left .5rem solid #42b983 background-color #f3f5f7 margin 1rem 0 padding 1rem 0 1rem 1rem & > p margin 0 // markdown h1 h1 font-size 2rem padding-bottom 1rem border-bottom 1px solid $borderColor // markdown h2 h2 font-size 1.65rem border-bottom 0px solid $borderColor // custom block for tip .custom-block .custom-block-title font-weight 600 margin-bottom -0.4rem &.tip, &.warning, &.danger padding .1rem 1.5rem border-left-width .5rem border-left-style solid margin 1rem 0 &.tip background-color #dfefff border-color #428eb9 // logo .navbar .logo height $navbarHeight - 1.6rem min-width $navbarHeight - 1.6rem margin-right 0rem vertical-align top
- palette.styl
// Width of content $contentWidth = 100% // colour $accentColor = #3eaf7c $textColor = #2c3e50 $borderColor = #eaecef $codeBgColor = #282c34
Other reference resources for vuepress
- VuePress website
- VuePress Github
- VuePress Community Ecosystems maintained by the VuePress community
- awesome-vuepress //NOTE: The vuepress plug-in can be found in both official (including the official community) and community maintenance.
Part Two - Auto-compilation of Blogs/Documents
Documents are hosted in Github and there are several options: Github Actions that come with Github, or the plug-in Travis CI, or the plug-in Circle CI.@pdai
Travis CI
Note: Travis CI has a big dad. Note: Travis CI has two websites, travis.com and travis.org, one for public and one for private projects. Then github can be switched between public and private projects, so some configurations may not be set correctly after switching.
Github Enable Plugin
Get into https://github.com/marketplac...
Configure Plugins
Add.travis.yml
Note: This is a simple compilation operation where you can force the results of the compilation (static html files) to the branch of the current repository where the compiled files are placed; or you can install travis-cli on your own server and generate certificate information (automatically generate relevant environment variables) at travis.com (note not travis.org) for automated deployment.
Neither of these options is used here because:
- 1) travis-cli does not support adding certificate information automatically for private projects;
- 2) At the same time, there are more static resources in this document and the results of pull compilation are larger.
- 3) Githubla's larger resource speed is not guaranteed to be stable for reasons you know; webhook is comparatively enough.
language: node_js sudo: false node_js: - "12" cache: yarn: true directories: - node_modules branches: only: - master env: global: - GITHUB_REPO: github.com/realpdai/tech-arch-doc.git before_install: - export TZ=Asia/Shanghai script: - vuepress build
Trigger compilation
View final submission compilation status
Generate build state svg
Part 3 - Auto-deployment of Blogs/Documents
This article describes how the current document is automatically compiled and deployed on my own server.@pdai
Document Compilation and Deployment Process
build
Previously, I purchased a low-allocation Aliyun virtual machine, the system is CentOS 7.x.
Install NodeJS
- Add yum source
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
- yum install
yum install -y nodejs
Other ways to refer to this article https://blog.csdn.net/bbwangj...
Clean up some of the old services
gitlab-ee, jenkins, httpd, etc. were previously built on the server and need to be cleaned up now because my own code hosting has switched to github's private repository; those that do not need to be cleaned up are skipped.
- Clean up gitlab-ee
https://blog.csdn.net/huhuhue...
- Clean up httpd
https://www.cnblogs.com/richa...
Install Nginx and configure
- install
https://www.centos.bz/2018/01...
- Configure Start-Up Self-Starting
https://www.cnblogs.com/jepso...
- Configure nginx.conf
https://www.cnblogs.com/alvin...
- Configure firewalld
https://blog.csdn.net/benchem...
Deployment Project
Trigger compilation and reload nginx via webhook
Part 4 - Domain name of blog/document, HTTPS, filing
This article mainly records the domain name, HTTPS, for the record of this document.@pdai
The three steps of Document Domain Name, HTTPS, and Filing are irreversible because of dependencies.
Request a domain name
- Application: Wanwan
- Request a domain name
https
- On Ali Cloud: SSL Certificate
- Request Certificate
- Certificate Audit
Review completed in 30 minutes
- Certificate details
This details page needs to be uploaded when filing.
- Certificate Download
Keep on record
Direct access through the domain name on port 80/443 is a filing requirement, and personal websites I built 18 years ago are not filed.
- Visit www.pdai.tech before filing
- Enter the record
During this period, you need your mobile phone to pass Aliyun face authentication, and upload your identity card, domain name and certificate to take photos.
- Filing Audit
Note that Ali Yun acts as the agent for the first instance of filing. Requirements: The personal website must be named as the personal blog of xxxx or the personal home page of xxx, otherwise the filing will not pass.The application period is about 20 days. After the application is completed, the Ministry of Industry and Communications will send a text message to the registered mobile phone number, and then it can be used in 8 hours.
Server Resource Selection
So how much server resources do you need to build such a website? The place of Ali Yunkeng is that new users are cheaper in the first year, and subsequent renewals are expensive.
- See how much resources are needed to build
- Look at the cost
1 CPU, 1-2G memory is recommended; 1Core-1GB is more than 287 a year and 642 for five years; later, if you need it, you can add configuration Online
- Regarding renewal, I previously chose 2 CPU, 4 GB memory; the original year was 780, and the renewal price was 2363;
:::tip
Subsequently: I downgraded Ali to 1U 1GB on the server, but it required 700MB of memory to compile static pages using Vuepress build, which would result in insufficient memory.I'm thinking about swap as a way to put some memory resources on swap disks.
:::
- Swap Space
Reference articles are as follows: https://blog.csdn.net/u010457...
Pre-compile
Compiling (not enough memory to swap zone)