From 0eba612eaa67d0da51c4fecef82cf32afec8d821 Mon Sep 17 00:00:00 2001 From: Binwen Wu <2020302131043@whu.edu.cn> Date: Wed, 25 Oct 2023 23:07:10 +0800 Subject: [PATCH] WebGPT --- .DS_Store | Bin 10244 -> 10244 bytes .deploy_git | 2 +- _config.acryple.yml | 5 +- db.json | 2 +- public/about/index.html | 16 +- public/archives/2023/03/index.html | 16 +- public/archives/2023/04/index.html | 16 +- public/archives/2023/05/index.html | 16 +- public/archives/2023/07/index.html | 16 +- public/archives/2023/08/index.html | 16 +- public/archives/2023/10/index.html | 16 +- public/archives/2023/index.html | 16 +- public/archives/2023/page/2/index.html | 16 +- public/archives/index.html | 16 +- public/archives/page/2/index.html | 16 +- public/atom.xml | 27 + public/baidusitemap.xml | 4 + public/bangumis/index.html | 24 +- public/calendar.json | 2 +- public/categories/GIS/index.html | 18 +- public/categories/Linux/index.html | 18 +- public/categories/index.html | 4 +- .../index.html" | 18 +- .../index.html" | 18 +- .../index.html" | 18 +- .../index.html" | 18 +- .../index.html" | 18 +- .../\347\256\227\346\263\225/index.html" | 926 +++++++++++++++ public/chatgpt/index.html | 627 ++++++++++ public/content.json | 2 +- public/eat_cats/index.html | 628 ++++++++++ public/fcircle/index.html | 6 +- public/fontawesome/index.html | 6 +- public/index.html | 20 +- public/js/random.js | 2 +- public/js/tianli_gpt.js | 2 +- public/kongtiao/index.html | 4 +- public/license/index.html | 6 +- public/links/index.html | 6 +- public/messageboard/index.html | 6 +- public/music/index.html | 4 +- public/muyu/index.html | 6 +- public/othersite/index.html | 6 +- public/posts/16380ff0/index.html | 16 +- public/posts/2de821dc/index.html | 16 +- public/posts/33834cc9/index.html | 16 +- public/posts/438a2103/index.html | 16 +- public/posts/499a3852/index.html | 16 +- public/posts/4e1214ce/index.html | 16 +- public/posts/557acb69/index.html | 16 +- public/posts/55978286/index.html | 1025 +++++++++++++++++ public/posts/620cff7f/index.html | 16 +- public/posts/7ddf46fc/index.html | 16 +- public/posts/9c5d9ac5/index.html | 16 +- public/posts/9d39de82/index.html | 16 +- public/posts/add5de83/index.html | 16 +- public/posts/aec1e412/index.html | 16 +- public/posts/b035bcd6/index.html | 16 +- public/posts/d154fd87/index.html | 16 +- public/posts/d862c611/index.html | 16 +- public/posts/e232bc22/index.html | 16 +- public/posts/f5fad029/index.html | 16 +- public/random.html | 3 + public/search.xml | 27 + public/sitemap.txt | 10 +- public/sitemap.xml | 58 +- public/speaks/index.html | 6 +- public/stars/index.html | 6 +- public/submit_urls.txt | 4 +- public/subscribe/index.html | 4 +- public/tags/CentOS/index.html | 18 +- public/tags/Clash/index.html | 18 +- public/tags/Containerd/index.html | 18 +- public/tags/Docker/index.html | 18 +- public/tags/GIS/index.html | 18 +- public/tags/IP/index.html | 18 +- public/tags/K8S/index.html | 18 +- public/tags/Linux/index.html | 18 +- public/tags/Office/index.html | 18 +- public/tags/Pandoc/index.html | 18 +- public/tags/PostGIS/index.html | 18 +- public/tags/PostgreSQL/index.html | 18 +- public/tags/VMware/index.html | 18 +- public/tags/VPN/index.html | 18 +- public/tags/Vue/index.html | 18 +- public/tags/Windows/index.html | 18 +- public/tags/index.html | 4 +- .../tags/\345\211\215\347\253\257/index.html" | 18 +- .../tags/\345\220\216\347\253\257/index.html" | 18 +- .../tags/\345\255\230\345\202\250/index.html" | 18 +- .../tags/\345\256\211\350\243\205/index.html" | 18 +- .../tags/\345\256\271\345\231\250/index.html" | 18 +- .../index.html" | 927 +++++++++++++++ .../index.html" | 18 +- .../tags/\346\211\223\345\214\205/index.html" | 18 +- .../index.html" | 18 +- .../tags/\347\256\227\346\263\225/index.html" | 927 +++++++++++++++ .../tags/\347\273\204\344\273\266/index.html" | 18 +- .../index.html" | 18 +- .../index.html" | 18 +- .../tags/\351\201\245\346\204\237/index.html" | 18 +- public/tomato_clock/index.html | 4 +- public/tools/index.html | 6 +- public/update/index.html | 6 +- public/zaobao/index.html | 6 +- source/.DS_Store | Bin 12292 -> 12292 bytes source/_data/bangumis.json | 2 +- ...23\346\236\234\345\210\206\346\236\220.md" | 106 ++ source/chatgpt/index.md | 5 + source/eat_cats/index.md | 7 + source/img/.DS_Store | Bin 10244 -> 10244 bytes themes/acryple/layout/includes/page/about.pug | 1 + themes/acryple/source/js/tianli_gpt.js | 2 +- 113 files changed, 5932 insertions(+), 635 deletions(-) create mode 100644 "public/categories/\347\256\227\346\263\225/index.html" create mode 100644 public/chatgpt/index.html create mode 100644 public/eat_cats/index.html create mode 100644 public/posts/55978286/index.html create mode 100644 "public/tags/\345\271\266\350\241\214\350\256\241\347\256\227/index.html" create mode 100644 "public/tags/\347\256\227\346\263\225/index.html" create mode 100644 "source/_posts/\345\237\272\344\272\216 MPI \347\232\204\345\237\203\346\213\211\346\211\230\346\226\257\347\211\271\345\260\274\347\255\233\346\263\225\347\232\204\345\271\266\350\241\214\345\214\226\350\256\276\350\256\241\343\200\201\345\256\236\347\216\260\344\270\216\347\273\223\346\236\234\345\210\206\346\236\220.md" create mode 100644 source/chatgpt/index.md create mode 100644 source/eat_cats/index.md diff --git a/.DS_Store b/.DS_Store index e692ab78772d329214f786f01f12194bbdc2a3e5..977672a11afec905337e279a13344e6b01bb9b1d 100644 GIT binary patch delta 276 zcmZn(XbIRLAk1NIY_6kVY-uuCLO7i9(BuMPWe!m>aZw3LDT&Fmg^Oh41^A1Ti}G`F z0`iM9OEUBGBBRrbGE@B1(uz|{CTofKN=IZS=jR1yR;7ZJX5^Q90=WT2sb!g|<&!6g zs7*d7B9Wx*5WoNioD3Wc+6;~iz6@au*$h<-6B*_*tY_HGaDw43!+VCmjO>g8j7p5! zj3$h>jP{HkjGl~9jM0n@&dVn~kmOH2Sb Cp*mUs delta 316 zcmZn(XbIRLAk1N5V4$O5Vq`X1LO7i9?BoJrWezcM2~kNYNtwyBg^OgP(~B}w{L|8k zQ%fS_1^A1Ti}G`F0`iM9OEUBGCTofKN`pi*^2FuhLj*#@Nk-0)y!^aWPGyGxs2B%>HiILBFGCnZHbWJ|M25KxD;ah(oM5=i z@Sfo>BRiucqY|SwqY0xeqdlVsV<2M?V=`k3V\n
\n

🎣 钓鱼

\n
\n\n
\n\n\n\n
\n
与主机通讯中……
\n
\n\n\n\n\n\n \n\n\n","source":"fcircle/index.md","raw":"---\ntitle: 朋友圈\ndate: 2023-01-29 15:23:17\n---\n
\n
\n

🎣 钓鱼

\n
\n
\n
\n\n\n\n
\n
与主机通讯中……
\n
\n\n\n\n\n\n \n\n\n","updated":"2023-10-23T10:28:19.350Z","path":"fcircle/index.html","comments":1,"layout":"page","_id":"clo56i5vc000efc3u47oxgroj","content":"
\n
\n

🎣 钓鱼

\n
\n
\n
\n\n\n
\n
与主机通讯中……
\n
\n\n\n\n\n\n \n\n\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":88,"excerpt":"","more":"
\n
\n

🎣 钓鱼

\n
\n
\n
\n\n\n
\n
与主机通讯中……
\n
\n\n\n\n\n\n \n\n\n"},{"title":"分类","date":"2022-07-03T12:48:08.000Z","type":"categories","_content":"","source":"categories/index.md","raw":"---\ntitle: 分类\ndate: 2022-07-03 20:48:08\ntype: \"categories\"\n---\n","updated":"2023-10-21T01:08:55.929Z","path":"categories/index.html","comments":1,"layout":"page","_id":"clo56i5vd000gfc3ucbb8c3z6","content":"","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":0,"excerpt":"","more":""},{"title":"fontawesome对照","date":"2022-11-25T00:16:09.000Z","_content":"\n\n","source":"fontawesome/index.md","raw":"---\ntitle: fontawesome对照\ndate: 2022-11-25 08:16:09\n---\n\n\n","updated":"2023-10-21T01:08:55.930Z","path":"fontawesome/index.html","comments":1,"layout":"page","_id":"clo56i5ve000lfc3u0wo59wm1","content":"\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":137,"excerpt":"","more":"\n"},{"title":"声明","date":"2023-07-10T03:13:49.000Z","seo_title":"声明","layout":"docs","bottom_meta":false,"_content":"Copyright(C) TANKENQI 2023\n\n# 声明 | 版权协议\n\n为了保持文章质量,并保持互联网的开放共享精神,保持页面流量的稳定,综合考虑下本站的所有原创文章均采用cc协议中比较严格的创作共用-非商业性-禁止演绎 4.0 国际标准。这篇文章主要想能够更加清楚明白的介绍本站的协议标准和要求。方便您合理的使用本站的文章。\n\n本站无广告嵌入和商业行为。违反协议的行为不仅会损害原作者的创作热情,而且会影响整个版权环境。强烈呼吁您能够在转载时遵守协议。遵守协议的行为几乎不会对您的目标产生负面影响,鼓励创作环境是每个创作者的期望。\n\n#### 博客的分类介绍\n\n经验分享包含原创内容,原创内容的非商用转载必须为完整转载且标注出处的带有超链接功能的完整url链接(需能点击)或访问原文之类字样的超链接。\n\n转载内容为转载内容,均标注了出处。建议使用原链接打开,尊重原作者。所有转载内容尽可能为完整转载(如果有部分内容有问题可能会由部分删减和补充)并进行样式调整以适合本博客。如果转载该部分内容需要联系原作者。\n\n#### 你可以做什么?\n\n只要您遵守本页的许可,您可以自由地共享文章的内容 — 在任何媒介以任何形式复制、发行本作品。并且无需通知作者。\n\n## 你需要遵守什么样的许可?\n\n#### 署名\n\n您必须标注内容的来源,您需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接提升阅读体验)。\n\n#### 禁止商用\n\n本站内容免费向互联网所有用户提供,分享本站文章时禁止商业性使用、禁止在转载页面中插入广告(例如谷歌广告、百度广告)、禁止阅读的拦截行为(例如关注公众号、下载App后观看文章)。\n\n#### 禁止演绎\n\n* 分享全部内容(无修改)\n 您需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接)\n* 分享部分截取内容或者衍生创作\n 目前本站全部原创文章的衍生品禁止公开分享和分发。如有更好的修改建议,可以在对应文章下留言。如有衍生创作需求,可以在评论中联系。\n\n## 什么内容会被版权保护\n\n#### 包括但不限于:\n\n* 文章封面图片\n* 文章标题和正文\n* 站点图片素材(不含主题自带素材)\n\n#### 例外情况\n\n本着友好互相进步的原则,被本站友链收录的博客允许博客文章内容的衍生品的分享和分发,但仍需标注出处。\n\n本着互联网开放精神,您可以在博客文章下方留言要求授权博文的衍生品的分享和分发,标注您的网站地址。\n\n## 作者原创代码及网站源代码协议\n\n网站所有代码采用MIT协议,如有不同,作者会进行标注\n\n随便扒站吧!\n\n## 网站本身有关\n\n本站已开启存储桶全站加速,接入了灵天盾CDN,请刷流量的耗子尾汁!!!","source":"license/index.md","raw":"---\ntitle: 声明\ndate: 2023-07-10 11:13:49\nseo_title: 声明\nlayout: docs\nbottom_meta: false\n---\nCopyright(C) TANKENQI 2023\n\n# 声明 | 版权协议\n\n为了保持文章质量,并保持互联网的开放共享精神,保持页面流量的稳定,综合考虑下本站的所有原创文章均采用cc协议中比较严格的创作共用-非商业性-禁止演绎 4.0 国际标准。这篇文章主要想能够更加清楚明白的介绍本站的协议标准和要求。方便您合理的使用本站的文章。\n\n本站无广告嵌入和商业行为。违反协议的行为不仅会损害原作者的创作热情,而且会影响整个版权环境。强烈呼吁您能够在转载时遵守协议。遵守协议的行为几乎不会对您的目标产生负面影响,鼓励创作环境是每个创作者的期望。\n\n#### 博客的分类介绍\n\n经验分享包含原创内容,原创内容的非商用转载必须为完整转载且标注出处的带有超链接功能的完整url链接(需能点击)或访问原文之类字样的超链接。\n\n转载内容为转载内容,均标注了出处。建议使用原链接打开,尊重原作者。所有转载内容尽可能为完整转载(如果有部分内容有问题可能会由部分删减和补充)并进行样式调整以适合本博客。如果转载该部分内容需要联系原作者。\n\n#### 你可以做什么?\n\n只要您遵守本页的许可,您可以自由地共享文章的内容 — 在任何媒介以任何形式复制、发行本作品。并且无需通知作者。\n\n## 你需要遵守什么样的许可?\n\n#### 署名\n\n您必须标注内容的来源,您需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接提升阅读体验)。\n\n#### 禁止商用\n\n本站内容免费向互联网所有用户提供,分享本站文章时禁止商业性使用、禁止在转载页面中插入广告(例如谷歌广告、百度广告)、禁止阅读的拦截行为(例如关注公众号、下载App后观看文章)。\n\n#### 禁止演绎\n\n* 分享全部内容(无修改)\n 您需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接)\n* 分享部分截取内容或者衍生创作\n 目前本站全部原创文章的衍生品禁止公开分享和分发。如有更好的修改建议,可以在对应文章下留言。如有衍生创作需求,可以在评论中联系。\n\n## 什么内容会被版权保护\n\n#### 包括但不限于:\n\n* 文章封面图片\n* 文章标题和正文\n* 站点图片素材(不含主题自带素材)\n\n#### 例外情况\n\n本着友好互相进步的原则,被本站友链收录的博客允许博客文章内容的衍生品的分享和分发,但仍需标注出处。\n\n本着互联网开放精神,您可以在博客文章下方留言要求授权博文的衍生品的分享和分发,标注您的网站地址。\n\n## 作者原创代码及网站源代码协议\n\n网站所有代码采用MIT协议,如有不同,作者会进行标注\n\n随便扒站吧!\n\n## 网站本身有关\n\n本站已开启存储桶全站加速,接入了灵天盾CDN,请刷流量的耗子尾汁!!!","updated":"2023-10-21T13:47:39.286Z","path":"license/index.html","comments":1,"_id":"clo56i5vf000nfc3ugyvlhwca","content":"

Copyright© TANKENQI 2023

\n

声明 | 版权协议

\n

为了保持文章质量,并保持互联网的开放共享精神,保持页面流量的稳定,综合考虑下本站的所有原创文章均采用cc协议中比较严格的创作共用-非商业性-禁止演绎 4.0 国际标准。这篇文章主要想能够更加清楚明白的介绍本站的协议标准和要求。方便您合理的使用本站的文章。

\n

本站无广告嵌入和商业行为。违反协议的行为不仅会损害原作者的创作热情,而且会影响整个版权环境。强烈呼吁您能够在转载时遵守协议。遵守协议的行为几乎不会对您的目标产生负面影响,鼓励创作环境是每个创作者的期望。

\n

博客的分类介绍

\n

经验分享包含原创内容,原创内容的非商用转载必须为完整转载且标注出处的带有超链接功能的完整url链接(需能点击)或访问原文之类字样的超链接。

\n

转载内容为转载内容,均标注了出处。建议使用原链接打开,尊重原作者。所有转载内容尽可能为完整转载(如果有部分内容有问题可能会由部分删减和补充)并进行样式调整以适合本博客。如果转载该部分内容需要联系原作者。

\n

你可以做什么?

\n

只要您遵守本页的许可,您可以自由地共享文章的内容 — 在任何媒介以任何形式复制、发行本作品。并且无需通知作者。

\n

你需要遵守什么样的许可?

\n

署名

\n

您必须标注内容的来源,您需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接提升阅读体验)。

\n

禁止商用

\n

本站内容免费向互联网所有用户提供,分享本站文章时禁止商业性使用、禁止在转载页面中插入广告(例如谷歌广告、百度广告)、禁止阅读的拦截行为(例如关注公众号、下载App后观看文章)。

\n

禁止演绎

\n
    \n
  • 分享全部内容(无修改)
    \n您需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接)
  • \n
  • 分享部分截取内容或者衍生创作
    \n目前本站全部原创文章的衍生品禁止公开分享和分发。如有更好的修改建议,可以在对应文章下留言。如有衍生创作需求,可以在评论中联系。
  • \n
\n

什么内容会被版权保护

\n

包括但不限于:

\n
    \n
  • 文章封面图片
  • \n
  • 文章标题和正文
  • \n
  • 站点图片素材(不含主题自带素材)
  • \n
\n

例外情况

\n

本着友好互相进步的原则,被本站友链收录的博客允许博客文章内容的衍生品的分享和分发,但仍需标注出处。

\n

本着互联网开放精神,您可以在博客文章下方留言要求授权博文的衍生品的分享和分发,标注您的网站地址。

\n

作者原创代码及网站源代码协议

\n

网站所有代码采用MIT协议,如有不同,作者会进行标注

\n

随便扒站吧!

\n

网站本身有关

\n

本站已开启存储桶全站加速,接入了灵天盾CDN,请刷流量的耗子尾汁!!!

\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":1010,"excerpt":"","more":"

Copyright© TANKENQI 2023

\n

声明 | 版权协议

\n

为了保持文章质量,并保持互联网的开放共享精神,保持页面流量的稳定,综合考虑下本站的所有原创文章均采用cc协议中比较严格的创作共用-非商业性-禁止演绎 4.0 国际标准。这篇文章主要想能够更加清楚明白的介绍本站的协议标准和要求。方便您合理的使用本站的文章。

\n

本站无广告嵌入和商业行为。违反协议的行为不仅会损害原作者的创作热情,而且会影响整个版权环境。强烈呼吁您能够在转载时遵守协议。遵守协议的行为几乎不会对您的目标产生负面影响,鼓励创作环境是每个创作者的期望。

\n

博客的分类介绍

\n

经验分享包含原创内容,原创内容的非商用转载必须为完整转载且标注出处的带有超链接功能的完整url链接(需能点击)或访问原文之类字样的超链接。

\n

转载内容为转载内容,均标注了出处。建议使用原链接打开,尊重原作者。所有转载内容尽可能为完整转载(如果有部分内容有问题可能会由部分删减和补充)并进行样式调整以适合本博客。如果转载该部分内容需要联系原作者。

\n

你可以做什么?

\n

只要您遵守本页的许可,您可以自由地共享文章的内容 — 在任何媒介以任何形式复制、发行本作品。并且无需通知作者。

\n

你需要遵守什么样的许可?

\n

署名

\n

您必须标注内容的来源,您需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接提升阅读体验)。

\n

禁止商用

\n

本站内容免费向互联网所有用户提供,分享本站文章时禁止商业性使用、禁止在转载页面中插入广告(例如谷歌广告、百度广告)、禁止阅读的拦截行为(例如关注公众号、下载App后观看文章)。

\n

禁止演绎

\n
    \n
  • 分享全部内容(无修改)
    \n您需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接)
  • \n
  • 分享部分截取内容或者衍生创作
    \n目前本站全部原创文章的衍生品禁止公开分享和分发。如有更好的修改建议,可以在对应文章下留言。如有衍生创作需求,可以在评论中联系。
  • \n
\n

什么内容会被版权保护

\n

包括但不限于:

\n
    \n
  • 文章封面图片
  • \n
  • 文章标题和正文
  • \n
  • 站点图片素材(不含主题自带素材)
  • \n
\n

例外情况

\n

本着友好互相进步的原则,被本站友链收录的博客允许博客文章内容的衍生品的分享和分发,但仍需标注出处。

\n

本着互联网开放精神,您可以在博客文章下方留言要求授权博文的衍生品的分享和分发,标注您的网站地址。

\n

作者原创代码及网站源代码协议

\n

网站所有代码采用MIT协议,如有不同,作者会进行标注

\n

随便扒站吧!

\n

网站本身有关

\n

本站已开启存储桶全站加速,接入了灵天盾CDN,请刷流量的耗子尾汁!!!

\n"},{"title":"友链","date":"2023-07-03T12:40:57.000Z","type":"links","_content":"
\n
\n

🎣 钓鱼

\n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n{% flink %}\n- class_name:

冰糖红茶

\n class_desc: “冰糖红茶”博客魔改组织的大佬们\n link_list:\n - name: 小冰【冰】\n link: https://zfe.space/\n avatar: /img/20200904222157.png\n theme_color: \"#687584\"\n descr: 做个有梦想的人!\n - name: Akilar【糖】\n link: https://akilar.top/\n avatar: /img/20200924153652.png\n descr: 期待您的光临!\n - name: 张洪Heo【红】\n link: https://blog.zhheo.com/\n avatar: /img/8DSTSS20990281646044689944.PNG\n theme_color: \"#4759e6\"\n descr: 分享设计与科技生活\n - name: 贰猹【茶】\n link: https://noionion.top/\n avatar: /img/72645310.jpg\n descr: 用这生命中的每一秒,给自己一个不后悔的未来\n theme_color: \"#ebd3bb\"\n\n- class_name:

开发基础

\n class_desc: 没有这些框架,哪来这博客呢?\n link_list:\n - name: Hexo\n link: https://hexo.io/zh-cn/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/logo.svg\n theme_color: \"#2c5fb6\"\n descr: 快速、简单且强大的网站框架\n - name: Butterfly\n link: https://butterfly.js.org/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/asdasdasca.png\n theme_color: \"#66afef\"\n descr: 美观、方便的Hexo主题\n\n\n- class_name:

推荐博客

\n class_desc: 一些作者推荐的友链\n link_list:\n - name: 小冰【冰】\n link: https://zfe.space/\n avatar: /img/20200904222157.png\n theme_color: \"#687584\"\n descr: 做个有梦想的人!\n - name: Akilar【糖】\n link: https://akilar.top/\n avatar: /img/20200924153652.png\n descr: 期待您的光临!\n - name: 张洪Heo【红】\n link: https://blog.zhheo.com/\n avatar: /img/8DSTSS20990281646044689944.PNG\n theme_color: \"#4759e6\"\n descr: 分享设计与科技生活\n - name: 贰猹【茶】\n link: https://noionion.top/\n avatar: /img/72645310.jpg\n descr: 用这生命中的每一秒,给自己一个不后悔的未来\n theme_color: \"#ebd3bb\"\n - name: Tianli\n link: https://tianli-blog.club/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/randomAvatar\n descr: 惟其不可能,所以才相信\n theme_color: \"#77717f\"\n - name: 小N同学\n link: https://www.imcharon.com/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/buYgVO22990681624844309044.jpg\n descr: 青石落晚巷 故人未还乡\n theme_color: \"#5497bb\"\n - name: 轻笑Chuckle\n link: https://www.qcqx.cn/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/randomAvatar\n descr: 宁静致远,倾尘轻笑\n theme_color: \"#80a9b7\"\n - name: Leonus\n link: https://blog.leonus.cn/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/g\n descr: 进一寸有进一寸的欢喜\n theme_color: \"#949f98\"\n\n\n- class_name:

朋友

\n class_desc: 那些人,那些事\n link_list:\n - name: forDece\n link: https://www.fordece.cn/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg\n theme_color: \"#e2f0fe\"\n descr: 一枚优秀的学弟\n - name: Zly\n link: http://www.zly7.top/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png\n theme_color: \"#80a9b7\"\n descr: 记录,让你的人生不后悔\n\n\n{% endflink %}\n\n\n{% folding cyan open, 我的信息 %}\n\n{% tabs %}\n\n```yaml\n- name: Tankenqiの小窝\n link: https://www.tankenqi.cn\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp\n descr: 人有悲欢离合 月有阴晴圆缺\n siteshot: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/blog.png\n```\n\n\n\n```yaml\n- {\n title: 'Tankenqiの小窝',\n intro: '人有悲欢离合 月有阴晴圆缺',\n link: 'https://www.tankenqi.cn',\n image: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp'\n}\n```\n\n\n\n```yaml\n- title: Tankenqiの小窝\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp\n url: https://www.tankenqi.cn\n screenshot: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/blog.png\n keywords: 个人博客\n description: 人有悲欢离合 月有阴晴圆缺\n```\n\n\n\n```html\n\"avatar\"Tankenqiの小窝\n```\n\n\n{% endtabs %}\n\n{% endfolding %}\n\n{% folding cyan open, 推荐标签衡量标准 %}\n\n1.网站没有不良内容\n\n2.文章质量较高\n\n3.文章较多/或者质量过硬\n\n{% endfolding %}\n\n

如何申请友链?

\n\n点下面的按钮!\n\n\n\n快速添加友链\n","source":"links/index.md","raw":"---\ntitle: 友链\ndate: 2023-07-03 20:40:57\ntype: \"links\"\n---\n
\n
\n

🎣 钓鱼

\n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n{% flink %}\n- class_name:

冰糖红茶

\n class_desc: “冰糖红茶”博客魔改组织的大佬们\n link_list:\n - name: 小冰【冰】\n link: https://zfe.space/\n avatar: /img/20200904222157.png\n theme_color: \"#687584\"\n descr: 做个有梦想的人!\n - name: Akilar【糖】\n link: https://akilar.top/\n avatar: /img/20200924153652.png\n descr: 期待您的光临!\n - name: 张洪Heo【红】\n link: https://blog.zhheo.com/\n avatar: /img/8DSTSS20990281646044689944.PNG\n theme_color: \"#4759e6\"\n descr: 分享设计与科技生活\n - name: 贰猹【茶】\n link: https://noionion.top/\n avatar: /img/72645310.jpg\n descr: 用这生命中的每一秒,给自己一个不后悔的未来\n theme_color: \"#ebd3bb\"\n\n- class_name:

开发基础

\n class_desc: 没有这些框架,哪来这博客呢?\n link_list:\n - name: Hexo\n link: https://hexo.io/zh-cn/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/logo.svg\n theme_color: \"#2c5fb6\"\n descr: 快速、简单且强大的网站框架\n - name: Butterfly\n link: https://butterfly.js.org/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/asdasdasca.png\n theme_color: \"#66afef\"\n descr: 美观、方便的Hexo主题\n\n\n- class_name:

推荐博客

\n class_desc: 一些作者推荐的友链\n link_list:\n - name: 小冰【冰】\n link: https://zfe.space/\n avatar: /img/20200904222157.png\n theme_color: \"#687584\"\n descr: 做个有梦想的人!\n - name: Akilar【糖】\n link: https://akilar.top/\n avatar: /img/20200924153652.png\n descr: 期待您的光临!\n - name: 张洪Heo【红】\n link: https://blog.zhheo.com/\n avatar: /img/8DSTSS20990281646044689944.PNG\n theme_color: \"#4759e6\"\n descr: 分享设计与科技生活\n - name: 贰猹【茶】\n link: https://noionion.top/\n avatar: /img/72645310.jpg\n descr: 用这生命中的每一秒,给自己一个不后悔的未来\n theme_color: \"#ebd3bb\"\n - name: Tianli\n link: https://tianli-blog.club/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/randomAvatar\n descr: 惟其不可能,所以才相信\n theme_color: \"#77717f\"\n - name: 小N同学\n link: https://www.imcharon.com/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/buYgVO22990681624844309044.jpg\n descr: 青石落晚巷 故人未还乡\n theme_color: \"#5497bb\"\n - name: 轻笑Chuckle\n link: https://www.qcqx.cn/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/randomAvatar\n descr: 宁静致远,倾尘轻笑\n theme_color: \"#80a9b7\"\n - name: Leonus\n link: https://blog.leonus.cn/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/g\n descr: 进一寸有进一寸的欢喜\n theme_color: \"#949f98\"\n\n\n- class_name:

朋友

\n class_desc: 那些人,那些事\n link_list:\n - name: forDece\n link: https://www.fordece.cn/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg\n theme_color: \"#e2f0fe\"\n descr: 一枚优秀的学弟\n - name: Zly\n link: http://www.zly7.top/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png\n theme_color: \"#80a9b7\"\n descr: 记录,让你的人生不后悔\n\n\n{% endflink %}\n\n\n{% folding cyan open, 我的信息 %}\n\n{% tabs %}\n\n```yaml\n- name: Tankenqiの小窝\n link: https://www.tankenqi.cn\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp\n descr: 人有悲欢离合 月有阴晴圆缺\n siteshot: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/blog.png\n```\n\n\n\n```yaml\n- {\n title: 'Tankenqiの小窝',\n intro: '人有悲欢离合 月有阴晴圆缺',\n link: 'https://www.tankenqi.cn',\n image: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp'\n}\n```\n\n\n\n```yaml\n- title: Tankenqiの小窝\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp\n url: https://www.tankenqi.cn\n screenshot: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/blog.png\n keywords: 个人博客\n description: 人有悲欢离合 月有阴晴圆缺\n```\n\n\n\n```html\n\"avatar\"Tankenqiの小窝\n```\n\n\n{% endtabs %}\n\n{% endfolding %}\n\n{% folding cyan open, 推荐标签衡量标准 %}\n\n1.网站没有不良内容\n\n2.文章质量较高\n\n3.文章较多/或者质量过硬\n\n{% endfolding %}\n\n

如何申请友链?

\n\n点下面的按钮!\n\n\n\n快速添加友链\n","updated":"2023-10-24T13:47:18.528Z","path":"links/index.html","comments":1,"layout":"page","_id":"clo56i5vg000sfc3ug4ta6b2j","content":"
\n
\n

🎣 钓鱼

\n
\n
\n
\n\n\n\n\n
我的信息 \n
\n
1
2
3
4
5
- name: Tankenqiの小窝
link: https://www.tankenqi.cn
avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp
descr: 人有悲欢离合 月有阴晴圆缺
siteshot: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/blog.png
1
2
3
4
5
6
- {
title: 'Tankenqiの小窝',
intro: '人有悲欢离合 月有阴晴圆缺',
link: 'https://www.tankenqi.cn',
image: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp'
}
1
2
3
4
5
6
- title: Tankenqiの小窝
avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp
url: https://www.tankenqi.cn
screenshot: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/blog.png
keywords: 个人博客
description: 人有悲欢离合 月有阴晴圆缺
1
<a href="https://www.tankenqi.cn"><img src="https://bu.dusays.com/2022/12/15/639a9ebbbc1ad.jpg" alt="avatar">Tankenqiの小窝</a>
\n
\n
\n
推荐标签衡量标准 \n
\n

1.网站没有不良内容

2.文章质量较高

3.文章较多/或者质量过硬

\n
\n
\n

如何申请友链?

\n

点下面的按钮!

\n\n\n

快速添加友链

\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":1263,"excerpt":"","more":"
\n
\n

🎣 钓鱼

\n
\n
\n
\n\n\n\n\n
我的信息 \n
\n
1
2
3
4
5
- name: Tankenqiの小窝
link: https://www.tankenqi.cn
avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp
descr: 人有悲欢离合 月有阴晴圆缺
siteshot: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/blog.png
1
2
3
4
5
6
- {
title: 'Tankenqiの小窝',
intro: '人有悲欢离合 月有阴晴圆缺',
link: 'https://www.tankenqi.cn',
image: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp'
}
1
2
3
4
5
6
- title: Tankenqiの小窝
avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp
url: https://www.tankenqi.cn
screenshot: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/blog.png
keywords: 个人博客
description: 人有悲欢离合 月有阴晴圆缺
1
<a href="https://www.tankenqi.cn"><img src="https://bu.dusays.com/2022/12/15/639a9ebbbc1ad.jpg" alt="avatar">Tankenqiの小窝</a>
\n
\n
\n
推荐标签衡量标准 \n
\n

1.网站没有不良内容

2.文章质量较高

3.文章较多/或者质量过硬

\n
\n
\n

如何申请友链?

\n

点下面的按钮!

\n\n\n

快速添加友链

\n"},{"title":"音乐","comments":0,"aside":false,"_content":"\n\n\n\n\n","source":"music/index.md","raw":"---\ntitle: 音乐\ncomments: false\naside: false\n---\n\n\n\n\n\n","date":"2023-10-25T01:12:21.674Z","updated":"2023-10-25T01:12:21.674Z","path":"music/index.html","layout":"page","_id":"clo56i5vg000wfc3uf2o0a13l","content":"\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":0,"excerpt":"","more":"\n"},{"title":"小空调","date":"2022-11-24T23:37:35.000Z","_content":"","source":"kongtiao/index.md","raw":"---\ntitle: 小空调\ndate: 2022-11-25 07:37:35\n---\n","updated":"2023-10-24T15:32:59.853Z","path":"kongtiao/index.html","comments":1,"layout":"page","_id":"clo56i5vh0012fc3uhlm0ebci","content":"","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":0,"excerpt":"","more":""},{"_content":"说说你的建议吧...\n
你也可以私发我的邮件2390726421@qq.com寻求帮助或者提供建议。\n隐藏/显示弹幕(缓解卡顿)\n\n\n\n\n
\n\t
\n
\n\n\n\n\n","source":"messageboard/index.html","raw":"说说你的建议吧...\n
你也可以私发我的邮件2390726421@qq.com寻求帮助或者提供建议。\n隐藏/显示弹幕(缓解卡顿)\n\n\n\n\n
\n\t
\n
\n\n\n\n\n","date":"2023-10-22T06:16:08.629Z","updated":"2023-10-22T06:16:08.629Z","path":"messageboard/index.html","title":"","comments":1,"layout":"page","_id":"clo56i5vh0016fc3u5gqg1riw","content":"说说你的建议吧...\n
你也可以私发我的邮件2390726421@qq.com寻求帮助或者提供建议。\n隐藏/显示弹幕(缓解卡顿)\n\n\n\n\n
\n\t
\n
\n\n\n\n\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":94,"excerpt":"","more":"说说你的建议吧...\n
你也可以私发我的邮件2390726421@qq.com寻求帮助或者提供建议。\n隐藏/显示弹幕(缓解卡顿)\n\n\n\n\n
\n\t
\n
\n\n\n\n\n"},{"title":"敲木鱼","date":"2022-11-25T00:16:09.000Z","_content":"{% raw %}\n
\n
\n

功德:0

\n
\n
\n

功德+100

\n \n
\n
\n\n \n\n{% endraw %}\n\n","source":"muyu/index.md","raw":"---\ntitle: 敲木鱼\ndate: 2022-11-25 08:16:09\n---\n{% raw %}\n
\n
\n

功德:0

\n
\n
\n

功德+100

\n \n
\n
\n\n \n\n{% endraw %}\n\n","updated":"2023-10-21T01:08:55.967Z","path":"muyu/index.html","comments":1,"layout":"page","_id":"clo56i5vh001afc3uhw141lu2","content":"\n
\n
\n

功德:0

\n
\n
\n

功德+100

\n \n
\n
\n\n \n\n\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":985,"excerpt":"","more":"\n
\n
\n

功德:0

\n
\n
\n

功德+100

\n \n
\n
\n\n \n\n\n"},{"title":"分站","date":"2023-08-04T03:38:05.000Z","_content":"## 一些博主搭建的其它的站点(其实还没怎么开始搭):\n\n*PS:划掉的表示已挂*\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
域名用处搭建原因
tankenqi.cn博客,也是主站分享一些东西
\n\n## 博主的一些域名\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
域名用处
tankenqi.cn主要使用的域名
\n\n注意:本博客强制HTTPS,旧电脑可能会出现问题。\n\n\n","source":"othersite/index.md","raw":"---\ntitle: 分站\ndate: 2023-08-04 11:38:05\n---\n## 一些博主搭建的其它的站点(其实还没怎么开始搭):\n\n*PS:划掉的表示已挂*\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
域名用处搭建原因
tankenqi.cn博客,也是主站分享一些东西
\n\n## 博主的一些域名\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
域名用处
tankenqi.cn主要使用的域名
\n\n注意:本博客强制HTTPS,旧电脑可能会出现问题。\n\n\n","updated":"2023-10-21T15:01:19.754Z","path":"othersite/index.html","comments":1,"layout":"page","_id":"clo56i5vj001efc3u317i791j","content":"

一些博主搭建的其它的站点(其实还没怎么开始搭):

\n

PS:划掉的表示已挂

\n\n\n\n\n\n\n\n\n\n\n\n\n
域名用处搭建原因
tankenqi.cn博客,也是主站分享一些东西
\n

博主的一些域名

\n\n\n\n\n\n\n\n\n\n\n
域名用处
tankenqi.cn主要使用的域名
\n

注意:本博客强制HTTPS,旧电脑可能会出现问题。

\n\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":564,"excerpt":"","more":"

一些博主搭建的其它的站点(其实还没怎么开始搭):

\n

PS:划掉的表示已挂

\n\n\n\n\n\n\n\n\n\n\n\n\n
域名用处搭建原因
tankenqi.cn博客,也是主站分享一些东西
\n

博主的一些域名

\n\n\n\n\n\n\n\n\n\n\n
域名用处
tankenqi.cn主要使用的域名
\n

注意:本博客强制HTTPS,旧电脑可能会出现问题。

\n\n"},{"title":"说说","_content":"\n\n\n\n
\n\n\n","source":"speaks/index.md","raw":"---\ntitle: 说说\n---\n\n\n\n\n
\n\n\n","date":"2023-10-23T01:30:39.447Z","updated":"2023-10-23T01:30:39.447Z","path":"speaks/index.html","comments":1,"layout":"page","_id":"clo56i5vj001jfc3u6dxq5ldp","content":"\n\n
\n\n\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":333,"excerpt":"","more":"\n\n
\n\n\n"},{"_content":"{\n \".mine\":[\n {\n \"nickname\": \"又拍云控制台\",\n \"site\": \"https://console.upyun.com/dashboard/\",\n \"content\": \"CDN管理,刷新CDN缓存\"\n },\n {\n \"nickname\": \"LeanCloud控制台\",\n \"site\": \"https://leancloud.cn/dashboard/applist.html#/apps\",\n \"content\": \"应用管理,数据控制\"\n },\n {\n \"nickname\": \"开课吧\",\n \"site\": \"https://appaadih2af2521.pc.xiaoe-tech.com/bought\",\n \"content\": \"学习网站\"\n },\n {\n \"nickname\": \"网易云课堂\",\n \"site\": \"https://study.163.com/my\",\n \"content\": \"学习网站\"\n },\n {\n \"nickname\": \"NexT\",\n \"site\": \"https://theme-next.org/docs/\",\n \"content\": \"NexT主题官方文档\"\n }\n ],\n \".docs\":[\n {\n \"nickname\": \"JavaScript\",\n \"site\": \"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference\",\n \"content\": \"JavaScript API 文档\"\n },\n {\n \"nickname\": \"HTML\",\n \"site\": \"https://developer.mozilla.org/en-US/docs/Web/HTML/Element\",\n \"content\": \"HTML API 文档\"\n },\n {\n \"nickname\": \"CSS\",\n \"site\": \"https://developer.mozilla.org/en-US/docs/Web/CSS/Reference\",\n \"content\": \"CSS API 文档\"\n },\n {\n \"nickname\": \"Python\",\n \"site\": \"https://docs.python.org/\",\n \"content\": \"Python API 文档\"\n },\n {\n \"nickname\": \"PHP\",\n \"site\": \"https://www.php.net/manual/zh/index.php\",\n \"content\": \"PHP API 文档\"\n },\n {\n \"nickname\": \"SQL\",\n \"site\": \"https://docs.microsoft.com/zh-cn/sql/\",\n \"content\": \"SQL API 文档\"\n },\n {\n \"nickname\": \"Node.js\",\n \"site\": \"http://nodejs.cn/\",\n \"content\": \"Node.js API 文档\"\n },\n {\n \"nickname\": \"MongoDB\",\n \"site\": \"https://docs.mongodb.com/manual/\",\n \"content\": \"MongoDB API 文档\"\n },\n {\n \"nickname\": \"Vue.js\",\n \"site\": \"https://cn.vuejs.org/v2/guide/\",\n \"content\": \"一套用于构建用户界面的渐进式框架。\"\n },\n {\n \"nickname\": \"Vuex\",\n \"site\": \"https://vuex.vuejs.org/zh/\",\n \"content\": \"一个专为Vue.js应用程序开发的状态管理模式\"\n },\n {\n \"nickname\": \"Vue Router\",\n \"site\": \"https://router.vuejs.org/zh/\",\n \"content\": \"Vue.js官方路由管理器\"\n },\n {\n \"nickname\": \"Puppeteer中文文档\",\n \"site\": \"https://zhaoqize.github.io/puppeteer-api-zh_CN/\",\n \"content\": \"一个Node库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行,但是可以通过修改配置文件运行“有头”模式。\"\n },\n {\n \"nickname\": \"axios中文文档\",\n \"site\": \"http://www.axios-js.com/\",\n \"content\": \"易用、简洁且高效的http库\"\n },\n {\n \"nickname\": \"Express中文文档\",\n \"site\": \"https://www.expressjs.com.cn/\",\n \"content\": \"基于Node.js平台,快速、开放、极简的Web开发框架\"\n },\n {\n \"nickname\": \"Layui\",\n \"site\": \"https://www.layui.com/\",\n \"content\": \"经典模块化前端UI框架\"\n }\n ],\n \".code\":[\n {\n \"nickname\": \"Github\",\n \"site\": \"https://github.com/\",\n \"content\": \"全球最大的面向开源及私有软件项目的托管平台\"\n },\n {\n \"nickname\": \"Gitlab\",\n \"site\": \"https://gitlab.com/\",\n \"content\": \"支持无限的公有项目和私有项目的代码托管平台\"\n },\n {\n \"nickname\": \"Coding\",\n \"site\": \"https://coding.net/\",\n \"content\": \"国内首个一站式云端软件服务平台\"\n },\n {\n \"nickname\": \"Gitee\",\n \"site\": \"https://gitee.com/\",\n \"content\": \"国内最大的开源社区 OSChina 的代码托管平台\"\n },\n {\n \"nickname\": \"阿里云代码托管\",\n \"site\": \"https://code.aliyun.com/\",\n \"content\": \"阿里云旗下代码托管平台\"\n },\n {\n \"nickname\": \"百度效率云\",\n \"site\": \"http://xiaolvyun.baidu.com/\",\n \"content\": \"百度云旗下的 Git 代码托管平台\"\n },\n {\n \"nickname\": \"SourceForge\",\n \"site\": \"https://sourceforge.net/\",\n \"content\": \"又称 SF.net,是开源软件开发者进行开发管理的集中式场所\"\n },\n {\n \"nickname\": \"Bitbucket\",\n \"site\": \"https://bitbucket.org/\",\n \"content\": \"同时支持 Git 和 Mercurial 这两个版本控制软件,免费的私有仓库,支持5人以内的合作开发\"\n },\n {\n \"nickname\": \"npm\",\n \"site\": \"https://www.npmjs.com/\",\n \"content\": \"JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具。通过 npm 可以安装、共享、分发代码,管理项目依赖关系\"\n }\n ],\n \".skill\":[\n {\n \"nickname\": \"LeetCode\",\n \"site\": \"https://leetcode-cn.com/\",\n \"content\": \"全球极客挚爱的技术成长平台\"\n },\n {\n \"nickname\": \"Topcoder\",\n \"site\": \"https://www.topcoder.com/\",\n \"content\": \"全世界规模最大的程序竞赛网站,也会有一些算法竞赛,适合一些高端的或者搞ACM的,也会举办一些比赛\"\n },\n {\n \"nickname\": \"Codeforces\",\n \"site\": \"http://codeforces.com/\",\n \"content\": \"罗斯最大的算法比赛网站\"\n },\n {\n \"nickname\": \"Hihocoder\",\n \"site\": \"http://www.hihocoder.com/\",\n \"content\": \"技术团队来自原北京大学POJ (PKU Online Judge)开发团队,收集了全球范围内很多地区、高校举办的比赛试题, 提供365天*24小时的在线提交、评判程序的服务\"\n },\n {\n \"nickname\": \"LintCode\",\n \"site\": \"https://www.lintcode.com/\",\n \"content\": \"被称作中文版的leetcode,也是可以做为编程能力提升的一个中转站\"\n },\n {\n \"nickname\": \"SPOJ\",\n \"site\": \"https://www.spoj.com/\",\n \"content\": \"波兰的算法刷题网站\"\n },\n {\n \"nickname\": \"NEUQ OJ\",\n \"site\": \"http://acmclub.cn/\",\n \"content\": \"一个在线的判题平台\"\n },\n {\n \"nickname\": \"洛谷\",\n \"site\": \"https://www.luogu.com.cn/\",\n \"content\": \"创办于2013年,致力于为参加noip、noi、acm的选手提供清爽、快捷的编程体验\"\n },\n {\n \"nickname\": \"牛客网\",\n \"site\": \"https://www.nowcoder.com/contestRoom\",\n \"content\": \"中国最大的IT题库\"\n },\n {\n \"nickname\": \"计蒜客\",\n \"site\": \"https://nanti.jisuanke.com/oi\",\n \"content\": \"计蒜客OI题库致力于为参加noi、noip、信息学竞赛的选手提供优秀的Online Judge系统\"\n },\n {\n \"nickname\": \"C语言网\",\n \"site\": \"https://www.dotcpp.com/oj/contest.html\",\n \"content\": \"在这里可以参加包括ACM、NOI在内的各种C/C++/java程序比赛,也可以DIY举办各类程序比赛活动!\"\n }\n ],\n \".school\":[\n {\n \"nickname\": \"菜鸟教程\",\n \"site\": \"https://www.runoob.com/\",\n \"content\": \"提供了编程的基础技术教程, 介绍了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP , MySQL等各种编程语言的基础知识\"\n },\n {\n \"nickname\": \"W3school\",\n \"site\": \"https://www.w3school.com.cn/\",\n \"content\": \"领先的 Web 技术教程\"\n },\n {\n \"nickname\": \"前端网\",\n \"site\": \"http://www.qianduandaxue.com/\",\n \"content\": \"最好的自学web前端网站\"\n }\n ],\n \".community\":[\n {\n \"nickname\": \"Stack Overflow\",\n \"site\": \"https://stackoverflow.com/\",\n \"content\": \"全球最受程序员欢迎的开发社区\"\n },\n {\n \"nickname\": \"CSDN\",\n \"site\": \"https://www.csdn.net/\",\n \"content\": \"全球最大中文IT社区,为IT专业技术人员提供最全面的信息传播和服务平台\"\n },\n {\n \"nickname\": \"博客园\",\n \"site\": \"https://www.cnblogs.com\",\n \"content\": \"代码改变世界\"\n },\n {\n \"nickname\": \"V2EX\",\n \"site\": \"https://www.v2ex.com/\",\n \"content\": \"V2EX = way to explore\"\n },\n {\n \"nickname\": \"掘金\",\n \"site\": \"https://juejin.im/\",\n \"content\": \"一个帮助开发者成长的社区\"\n },\n {\n \"nickname\": \"SegmentFault\",\n \"site\": \"https://segmentfault.com/\",\n \"content\": \"改变并提升人们获取知识的方式和效率,帮助更多的开发者获得成长与成功\"\n },\n {\n \"nickname\": \"开源中国\",\n \"site\": \"https://www.oschina.net/\",\n \"content\": \"国内最大的开源技术社区\"\n },\n {\n \"nickname\": \"ITeye\",\n \"site\": \"https://www.iteye.com/\",\n \"content\": \"ITeye软件开发交流社区 - Java编程 Spring框架 Ajax技术 agile敏捷软件开发 ruby on rails实践\"\n },\n {\n \"nickname\": \"51CTO\",\n \"site\": \"https://www.51cto.com/\",\n \"content\": \"技术成就梦想\"\n },\n {\n \"nickname\": \"ITPUB\",\n \"site\": \"http://www.itpub.net/\",\n \"content\": \"全球最大的学习分享平台\"\n },\n {\n \"nickname\": \"知乎\",\n \"site\": \"https://www.zhihu.com/\",\n \"content\": \"国内最受欢迎的知识性问答社区\"\n },\n {\n \"nickname\": \"简书\",\n \"site\": \"https://www.jianshu.com/\",\n \"content\": \"创作你的创作\"\n },\n {\n \"nickname\": \"云+社区\",\n \"site\": \"https://cloud.tencent.com/developer\",\n \"content\": \"来自腾讯的开发者技术分享社区\"\n },\n {\n \"nickname\": \"云栖社区\",\n \"site\": \"https://yq.aliyun.com/\",\n \"content\": \"阿里云面向开发者的开放型技术平台\"\n },\n {\n \"nickname\": \"极术社区\",\n \"site\": \"https://aijishu.com/\",\n \"content\": \"全球软硬件资源信息,只要你有问题,我们就能解答。\"\n }\n ],\n \".serve\":[\n {\n \"nickname\": \"阿里云\",\n \"site\": \"https://www.aliyun.com/\",\n \"content\": \"为了无法计算的价值\"\n },\n {\n \"nickname\": \"腾讯云\",\n \"site\": \"https://cloud.tencent.com/\",\n \"content\": \"产业智变 云启未来\"\n },\n {\n \"nickname\": \"百度云\",\n \"site\": \"https://cloud.baidu.com/\",\n \"content\": \"计算无限可能\"\n },\n {\n \"nickname\": \"七牛云\",\n \"site\": \"https://www.qiniu.com/\",\n \"content\": \"国内领先的企业级云服务商\"\n }, \n {\n \"nickname\": \"又拍云\",\n \"site\": \"https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral\",\n \"content\": \"专注 CDN、云存储、小程序开发方案、 短视频开发方案、DDoS高防等产品的国内知名企业级云服务商\"\n },\n {\n \"nickname\": \"Cloudflare\",\n \"site\": \"https://www.cloudflare.com/\",\n \"content\": \"网络性能和安全公司\"\n },\n {\n \"nickname\": \"jsDelivr\",\n \"site\": \"https://www.jsdelivr.com/\",\n \"content\": \"A free, fast, and reliable Open Source CDN for npm and GitHub\"\n }\n ],\n \".sitetool\":[\n {\n \"nickname\": \"百度站长平台\",\n \"site\": \"https://ziyuan.baidu.com/\",\n \"content\": \"百度搜索资源平台 - 让网站更具价值\"\n },\n {\n \"nickname\": \"Google 站长平台\",\n \"site\": \"http://www.google.cn/webmasters/\",\n \"content\": \"支持、学习、互动交流和 Search Console – Google\"\n },\n {\n \"nickname\": \"Bing 网站管理员工具\",\n \"site\": \"https://www.bing.com/toolbox/webmaster/\",\n \"content\": \"Bing 网站管理员工具\"\n },\n {\n \"nickname\": \"站长工具 - 站长之家\",\n \"site\": \"http://tool.chinaz.com/\",\n \"content\": \"SEO工具,权重查询,收录查询,PR查询,ICP备案查询,whois查询,友情链接查询,反向链接查询,网站测试,IP查询,Alexa查询\"\n },\n {\n \"nickname\": \"搜狗站长平台\",\n \"site\": \"http://zhanzhang.sogou.com/\",\n \"content\": \"全面掌握在搜狗搜索中的数据表现\"\n },\n {\n \"nickname\": \"360 站长平台\",\n \"site\": \"http://zhanzhang.so.com/\",\n \"content\": \"给网站带来更多流量和展现\"\n },\n {\n \"nickname\": \"超级 SEO 外链工具\",\n \"site\": \"https://tool.lusongsong.com/seo/\",\n \"content\": \"网站自动化宣传机器/免费的超级外链工具可批量增加外链\"\n },\n {\n \"nickname\": \"域名备案管理系统\",\n \"site\": \"http://www.beian.miit.gov.cn/\",\n \"content\": \"工业和信息化部ICP/IP地址/域名信息备案管理系统\"\n },\n {\n \"nickname\": \"公安备案网\",\n \"site\": \"http://beian.gov.cn/\",\n \"content\": \"全国互联网安全管理服务平台\"\n }\n ],\n \".design\":[\n {\n \"nickname\": \"Iconfont\",\n \"site\": \"https://www.iconfont.cn/\",\n \"content\": \"阿里巴巴矢量图标库,提供矢量图标下载、在线存储、格式转换等功能\"\n },\n {\n \"nickname\": \"Font Awesome\",\n \"site\": \"https://fa5.dashgame.com/#/%E5%9B%BE%E6%A0%87\",\n \"content\": \"一个基于CSS 和 LESS 的字体和图标工具包\"\n },\n {\n \"nickname\": \"Flaticon\",\n \"site\": \"https://www.flaticon.com/\",\n \"content\": \"海量扁平化免费的图标库\"\n },\n {\n \"nickname\": \"icons8\",\n \"site\": \"https://icons8.com/\",\n \"content\": \"独特系统平台风格和web图标库,下载免费图标,音乐\"\n },\n {\n \"nickname\": \"Unsplash\",\n \"site\": \"https://unsplash.com/\",\n \"content\": \"质量超高的免费图片素材库,无需注册,直接下载\"\n },\n {\n \"nickname\": \"Mixkit\",\n \"site\": \"https://mixkit.co/\",\n \"content\": \"免费、高质量、可商用的视频素材分享网站\"\n },\n {\n \"nickname\": \"WebGradients\",\n \"site\": \"https://webgradients.com/\",\n \"content\": \"渐变色搭配方案\"\n },\n {\n \"nickname\": \"CoolHue2.0\",\n \"site\": \"https://webkul.github.io/coolhue/\",\n \"content\": \"渐变色搭配方案\"\n },\n {\n \"nickname\": \"Gradient\",\n \"site\": \"https://gradient.shapefactory.co/?a=540A43&b=629EA1&d=25\",\n \"content\": \"渐变色搭配方案\"\n },\n {\n \"nickname\": \"UiGradients\",\n \"site\": \"https://uigradients.com/#JShine\",\n \"content\": \"渐变色搭配方案\"\n }\n ],\n \".tools\":[\n {\n \"nickname\": \"智图\",\n \"site\": \"https://zhitu.isux.us/\",\n \"content\": \"腾讯ISUX前端团队开发的一个专门用于图片压缩和图片格式转换的平台\"\n },\n {\n \"nickname\": \"程序员的工具箱\",\n \"site\": \"https://tool.lu/\",\n \"content\": \"站长工具、代码格式化、压缩、加密、解密、下载链接转换等\"\n },\n {\n \"nickname\": \"OSCHINA.NET社区\",\n \"site\": \"https://tool.oschina.net/\",\n \"content\": \"常用文档、常用对照表、代码处理、Html/Js/Css工具、加密/转码工具等\"\n },\n {\n \"nickname\": \"记磊工具箱\",\n \"site\": \"https://tools.ly522.com/\",\n \"content\": \"Dns检测、CSS格式化、超级Ping、端口扫描等\"\n },\n {\n \"nickname\": \"孟坤工具箱\",\n \"site\": \"http://tool.mkblog.cn/\",\n \"content\": \"css一键美化、文本差异比较、代码高亮等\"\n },\n {\n \"nickname\": \"Text to ASCII\",\n \"site\": \"http://patorjk.com/software/taag/\",\n \"content\": \"Text to ASCII Art Generator,字符串转成 ASCII 码图案\"\n },\n {\n \"nickname\": \"临时邮箱\",\n \"site\": \"https://linshiyouxiang.net/\",\n \"content\": \"匿名注册不常用的网站/论坛,保护隐私免骚扰\"\n },\n {\n \"nickname\": \"TinyPNG\",\n \"site\": \"https://tinypng.com/\",\n \"content\": \"PNG/JPG图片在线压缩利器\"\n },\n {\n \"nickname\": \"图片格式在线转换\",\n \"site\": \"https://ezgif.com/png-to-webp\",\n \"content\": \"webp图片格式在线转换\"\n },\n {\n \"nickname\": \"SVGOMG\",\n \"site\": \"https://jakearchibald.github.io/svgomg/\",\n \"content\": \"SVG在线压缩平台\"\n },\n {\n \"nickname\": \"Loading\",\n \"site\": \"https://loading.io/\",\n \"content\": \"制作GIF、SVG、CSS加载动画图标\"\n },\n {\n \"nickname\": \"Preloaders\",\n \"site\": \"https://www.logaster.cn/\",\n \"content\": \"Loading 懒加载动画在线制作\"\n },\n {\n \"nickname\": \"移除图片背景\",\n \"site\": \"https://www.remove.bg/\",\n \"content\": \"一键智能抠图\"\n },\n {\n \"nickname\": \"KMS服务\",\n \"site\": \"https://kms.avg.cx/\",\n \"content\": \"KMS激活Windows一键脚本\"\n }\n ]\n}\n","source":"stars/allStars.json","raw":"{\n \".mine\":[\n {\n \"nickname\": \"又拍云控制台\",\n \"site\": \"https://console.upyun.com/dashboard/\",\n \"content\": \"CDN管理,刷新CDN缓存\"\n },\n {\n \"nickname\": \"LeanCloud控制台\",\n \"site\": \"https://leancloud.cn/dashboard/applist.html#/apps\",\n \"content\": \"应用管理,数据控制\"\n },\n {\n \"nickname\": \"开课吧\",\n \"site\": \"https://appaadih2af2521.pc.xiaoe-tech.com/bought\",\n \"content\": \"学习网站\"\n },\n {\n \"nickname\": \"网易云课堂\",\n \"site\": \"https://study.163.com/my\",\n \"content\": \"学习网站\"\n },\n {\n \"nickname\": \"NexT\",\n \"site\": \"https://theme-next.org/docs/\",\n \"content\": \"NexT主题官方文档\"\n }\n ],\n \".docs\":[\n {\n \"nickname\": \"JavaScript\",\n \"site\": \"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference\",\n \"content\": \"JavaScript API 文档\"\n },\n {\n \"nickname\": \"HTML\",\n \"site\": \"https://developer.mozilla.org/en-US/docs/Web/HTML/Element\",\n \"content\": \"HTML API 文档\"\n },\n {\n \"nickname\": \"CSS\",\n \"site\": \"https://developer.mozilla.org/en-US/docs/Web/CSS/Reference\",\n \"content\": \"CSS API 文档\"\n },\n {\n \"nickname\": \"Python\",\n \"site\": \"https://docs.python.org/\",\n \"content\": \"Python API 文档\"\n },\n {\n \"nickname\": \"PHP\",\n \"site\": \"https://www.php.net/manual/zh/index.php\",\n \"content\": \"PHP API 文档\"\n },\n {\n \"nickname\": \"SQL\",\n \"site\": \"https://docs.microsoft.com/zh-cn/sql/\",\n \"content\": \"SQL API 文档\"\n },\n {\n \"nickname\": \"Node.js\",\n \"site\": \"http://nodejs.cn/\",\n \"content\": \"Node.js API 文档\"\n },\n {\n \"nickname\": \"MongoDB\",\n \"site\": \"https://docs.mongodb.com/manual/\",\n \"content\": \"MongoDB API 文档\"\n },\n {\n \"nickname\": \"Vue.js\",\n \"site\": \"https://cn.vuejs.org/v2/guide/\",\n \"content\": \"一套用于构建用户界面的渐进式框架。\"\n },\n {\n \"nickname\": \"Vuex\",\n \"site\": \"https://vuex.vuejs.org/zh/\",\n \"content\": \"一个专为Vue.js应用程序开发的状态管理模式\"\n },\n {\n \"nickname\": \"Vue Router\",\n \"site\": \"https://router.vuejs.org/zh/\",\n \"content\": \"Vue.js官方路由管理器\"\n },\n {\n \"nickname\": \"Puppeteer中文文档\",\n \"site\": \"https://zhaoqize.github.io/puppeteer-api-zh_CN/\",\n \"content\": \"一个Node库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行,但是可以通过修改配置文件运行“有头”模式。\"\n },\n {\n \"nickname\": \"axios中文文档\",\n \"site\": \"http://www.axios-js.com/\",\n \"content\": \"易用、简洁且高效的http库\"\n },\n {\n \"nickname\": \"Express中文文档\",\n \"site\": \"https://www.expressjs.com.cn/\",\n \"content\": \"基于Node.js平台,快速、开放、极简的Web开发框架\"\n },\n {\n \"nickname\": \"Layui\",\n \"site\": \"https://www.layui.com/\",\n \"content\": \"经典模块化前端UI框架\"\n }\n ],\n \".code\":[\n {\n \"nickname\": \"Github\",\n \"site\": \"https://github.com/\",\n \"content\": \"全球最大的面向开源及私有软件项目的托管平台\"\n },\n {\n \"nickname\": \"Gitlab\",\n \"site\": \"https://gitlab.com/\",\n \"content\": \"支持无限的公有项目和私有项目的代码托管平台\"\n },\n {\n \"nickname\": \"Coding\",\n \"site\": \"https://coding.net/\",\n \"content\": \"国内首个一站式云端软件服务平台\"\n },\n {\n \"nickname\": \"Gitee\",\n \"site\": \"https://gitee.com/\",\n \"content\": \"国内最大的开源社区 OSChina 的代码托管平台\"\n },\n {\n \"nickname\": \"阿里云代码托管\",\n \"site\": \"https://code.aliyun.com/\",\n \"content\": \"阿里云旗下代码托管平台\"\n },\n {\n \"nickname\": \"百度效率云\",\n \"site\": \"http://xiaolvyun.baidu.com/\",\n \"content\": \"百度云旗下的 Git 代码托管平台\"\n },\n {\n \"nickname\": \"SourceForge\",\n \"site\": \"https://sourceforge.net/\",\n \"content\": \"又称 SF.net,是开源软件开发者进行开发管理的集中式场所\"\n },\n {\n \"nickname\": \"Bitbucket\",\n \"site\": \"https://bitbucket.org/\",\n \"content\": \"同时支持 Git 和 Mercurial 这两个版本控制软件,免费的私有仓库,支持5人以内的合作开发\"\n },\n {\n \"nickname\": \"npm\",\n \"site\": \"https://www.npmjs.com/\",\n \"content\": \"JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具。通过 npm 可以安装、共享、分发代码,管理项目依赖关系\"\n }\n ],\n \".skill\":[\n {\n \"nickname\": \"LeetCode\",\n \"site\": \"https://leetcode-cn.com/\",\n \"content\": \"全球极客挚爱的技术成长平台\"\n },\n {\n \"nickname\": \"Topcoder\",\n \"site\": \"https://www.topcoder.com/\",\n \"content\": \"全世界规模最大的程序竞赛网站,也会有一些算法竞赛,适合一些高端的或者搞ACM的,也会举办一些比赛\"\n },\n {\n \"nickname\": \"Codeforces\",\n \"site\": \"http://codeforces.com/\",\n \"content\": \"罗斯最大的算法比赛网站\"\n },\n {\n \"nickname\": \"Hihocoder\",\n \"site\": \"http://www.hihocoder.com/\",\n \"content\": \"技术团队来自原北京大学POJ (PKU Online Judge)开发团队,收集了全球范围内很多地区、高校举办的比赛试题, 提供365天*24小时的在线提交、评判程序的服务\"\n },\n {\n \"nickname\": \"LintCode\",\n \"site\": \"https://www.lintcode.com/\",\n \"content\": \"被称作中文版的leetcode,也是可以做为编程能力提升的一个中转站\"\n },\n {\n \"nickname\": \"SPOJ\",\n \"site\": \"https://www.spoj.com/\",\n \"content\": \"波兰的算法刷题网站\"\n },\n {\n \"nickname\": \"NEUQ OJ\",\n \"site\": \"http://acmclub.cn/\",\n \"content\": \"一个在线的判题平台\"\n },\n {\n \"nickname\": \"洛谷\",\n \"site\": \"https://www.luogu.com.cn/\",\n \"content\": \"创办于2013年,致力于为参加noip、noi、acm的选手提供清爽、快捷的编程体验\"\n },\n {\n \"nickname\": \"牛客网\",\n \"site\": \"https://www.nowcoder.com/contestRoom\",\n \"content\": \"中国最大的IT题库\"\n },\n {\n \"nickname\": \"计蒜客\",\n \"site\": \"https://nanti.jisuanke.com/oi\",\n \"content\": \"计蒜客OI题库致力于为参加noi、noip、信息学竞赛的选手提供优秀的Online Judge系统\"\n },\n {\n \"nickname\": \"C语言网\",\n \"site\": \"https://www.dotcpp.com/oj/contest.html\",\n \"content\": \"在这里可以参加包括ACM、NOI在内的各种C/C++/java程序比赛,也可以DIY举办各类程序比赛活动!\"\n }\n ],\n \".school\":[\n {\n \"nickname\": \"菜鸟教程\",\n \"site\": \"https://www.runoob.com/\",\n \"content\": \"提供了编程的基础技术教程, 介绍了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP , MySQL等各种编程语言的基础知识\"\n },\n {\n \"nickname\": \"W3school\",\n \"site\": \"https://www.w3school.com.cn/\",\n \"content\": \"领先的 Web 技术教程\"\n },\n {\n \"nickname\": \"前端网\",\n \"site\": \"http://www.qianduandaxue.com/\",\n \"content\": \"最好的自学web前端网站\"\n }\n ],\n \".community\":[\n {\n \"nickname\": \"Stack Overflow\",\n \"site\": \"https://stackoverflow.com/\",\n \"content\": \"全球最受程序员欢迎的开发社区\"\n },\n {\n \"nickname\": \"CSDN\",\n \"site\": \"https://www.csdn.net/\",\n \"content\": \"全球最大中文IT社区,为IT专业技术人员提供最全面的信息传播和服务平台\"\n },\n {\n \"nickname\": \"博客园\",\n \"site\": \"https://www.cnblogs.com\",\n \"content\": \"代码改变世界\"\n },\n {\n \"nickname\": \"V2EX\",\n \"site\": \"https://www.v2ex.com/\",\n \"content\": \"V2EX = way to explore\"\n },\n {\n \"nickname\": \"掘金\",\n \"site\": \"https://juejin.im/\",\n \"content\": \"一个帮助开发者成长的社区\"\n },\n {\n \"nickname\": \"SegmentFault\",\n \"site\": \"https://segmentfault.com/\",\n \"content\": \"改变并提升人们获取知识的方式和效率,帮助更多的开发者获得成长与成功\"\n },\n {\n \"nickname\": \"开源中国\",\n \"site\": \"https://www.oschina.net/\",\n \"content\": \"国内最大的开源技术社区\"\n },\n {\n \"nickname\": \"ITeye\",\n \"site\": \"https://www.iteye.com/\",\n \"content\": \"ITeye软件开发交流社区 - Java编程 Spring框架 Ajax技术 agile敏捷软件开发 ruby on rails实践\"\n },\n {\n \"nickname\": \"51CTO\",\n \"site\": \"https://www.51cto.com/\",\n \"content\": \"技术成就梦想\"\n },\n {\n \"nickname\": \"ITPUB\",\n \"site\": \"http://www.itpub.net/\",\n \"content\": \"全球最大的学习分享平台\"\n },\n {\n \"nickname\": \"知乎\",\n \"site\": \"https://www.zhihu.com/\",\n \"content\": \"国内最受欢迎的知识性问答社区\"\n },\n {\n \"nickname\": \"简书\",\n \"site\": \"https://www.jianshu.com/\",\n \"content\": \"创作你的创作\"\n },\n {\n \"nickname\": \"云+社区\",\n \"site\": \"https://cloud.tencent.com/developer\",\n \"content\": \"来自腾讯的开发者技术分享社区\"\n },\n {\n \"nickname\": \"云栖社区\",\n \"site\": \"https://yq.aliyun.com/\",\n \"content\": \"阿里云面向开发者的开放型技术平台\"\n },\n {\n \"nickname\": \"极术社区\",\n \"site\": \"https://aijishu.com/\",\n \"content\": \"全球软硬件资源信息,只要你有问题,我们就能解答。\"\n }\n ],\n \".serve\":[\n {\n \"nickname\": \"阿里云\",\n \"site\": \"https://www.aliyun.com/\",\n \"content\": \"为了无法计算的价值\"\n },\n {\n \"nickname\": \"腾讯云\",\n \"site\": \"https://cloud.tencent.com/\",\n \"content\": \"产业智变 云启未来\"\n },\n {\n \"nickname\": \"百度云\",\n \"site\": \"https://cloud.baidu.com/\",\n \"content\": \"计算无限可能\"\n },\n {\n \"nickname\": \"七牛云\",\n \"site\": \"https://www.qiniu.com/\",\n \"content\": \"国内领先的企业级云服务商\"\n }, \n {\n \"nickname\": \"又拍云\",\n \"site\": \"https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral\",\n \"content\": \"专注 CDN、云存储、小程序开发方案、 短视频开发方案、DDoS高防等产品的国内知名企业级云服务商\"\n },\n {\n \"nickname\": \"Cloudflare\",\n \"site\": \"https://www.cloudflare.com/\",\n \"content\": \"网络性能和安全公司\"\n },\n {\n \"nickname\": \"jsDelivr\",\n \"site\": \"https://www.jsdelivr.com/\",\n \"content\": \"A free, fast, and reliable Open Source CDN for npm and GitHub\"\n }\n ],\n \".sitetool\":[\n {\n \"nickname\": \"百度站长平台\",\n \"site\": \"https://ziyuan.baidu.com/\",\n \"content\": \"百度搜索资源平台 - 让网站更具价值\"\n },\n {\n \"nickname\": \"Google 站长平台\",\n \"site\": \"http://www.google.cn/webmasters/\",\n \"content\": \"支持、学习、互动交流和 Search Console – Google\"\n },\n {\n \"nickname\": \"Bing 网站管理员工具\",\n \"site\": \"https://www.bing.com/toolbox/webmaster/\",\n \"content\": \"Bing 网站管理员工具\"\n },\n {\n \"nickname\": \"站长工具 - 站长之家\",\n \"site\": \"http://tool.chinaz.com/\",\n \"content\": \"SEO工具,权重查询,收录查询,PR查询,ICP备案查询,whois查询,友情链接查询,反向链接查询,网站测试,IP查询,Alexa查询\"\n },\n {\n \"nickname\": \"搜狗站长平台\",\n \"site\": \"http://zhanzhang.sogou.com/\",\n \"content\": \"全面掌握在搜狗搜索中的数据表现\"\n },\n {\n \"nickname\": \"360 站长平台\",\n \"site\": \"http://zhanzhang.so.com/\",\n \"content\": \"给网站带来更多流量和展现\"\n },\n {\n \"nickname\": \"超级 SEO 外链工具\",\n \"site\": \"https://tool.lusongsong.com/seo/\",\n \"content\": \"网站自动化宣传机器/免费的超级外链工具可批量增加外链\"\n },\n {\n \"nickname\": \"域名备案管理系统\",\n \"site\": \"http://www.beian.miit.gov.cn/\",\n \"content\": \"工业和信息化部ICP/IP地址/域名信息备案管理系统\"\n },\n {\n \"nickname\": \"公安备案网\",\n \"site\": \"http://beian.gov.cn/\",\n \"content\": \"全国互联网安全管理服务平台\"\n }\n ],\n \".design\":[\n {\n \"nickname\": \"Iconfont\",\n \"site\": \"https://www.iconfont.cn/\",\n \"content\": \"阿里巴巴矢量图标库,提供矢量图标下载、在线存储、格式转换等功能\"\n },\n {\n \"nickname\": \"Font Awesome\",\n \"site\": \"https://fa5.dashgame.com/#/%E5%9B%BE%E6%A0%87\",\n \"content\": \"一个基于CSS 和 LESS 的字体和图标工具包\"\n },\n {\n \"nickname\": \"Flaticon\",\n \"site\": \"https://www.flaticon.com/\",\n \"content\": \"海量扁平化免费的图标库\"\n },\n {\n \"nickname\": \"icons8\",\n \"site\": \"https://icons8.com/\",\n \"content\": \"独特系统平台风格和web图标库,下载免费图标,音乐\"\n },\n {\n \"nickname\": \"Unsplash\",\n \"site\": \"https://unsplash.com/\",\n \"content\": \"质量超高的免费图片素材库,无需注册,直接下载\"\n },\n {\n \"nickname\": \"Mixkit\",\n \"site\": \"https://mixkit.co/\",\n \"content\": \"免费、高质量、可商用的视频素材分享网站\"\n },\n {\n \"nickname\": \"WebGradients\",\n \"site\": \"https://webgradients.com/\",\n \"content\": \"渐变色搭配方案\"\n },\n {\n \"nickname\": \"CoolHue2.0\",\n \"site\": \"https://webkul.github.io/coolhue/\",\n \"content\": \"渐变色搭配方案\"\n },\n {\n \"nickname\": \"Gradient\",\n \"site\": \"https://gradient.shapefactory.co/?a=540A43&b=629EA1&d=25\",\n \"content\": \"渐变色搭配方案\"\n },\n {\n \"nickname\": \"UiGradients\",\n \"site\": \"https://uigradients.com/#JShine\",\n \"content\": \"渐变色搭配方案\"\n }\n ],\n \".tools\":[\n {\n \"nickname\": \"智图\",\n \"site\": \"https://zhitu.isux.us/\",\n \"content\": \"腾讯ISUX前端团队开发的一个专门用于图片压缩和图片格式转换的平台\"\n },\n {\n \"nickname\": \"程序员的工具箱\",\n \"site\": \"https://tool.lu/\",\n \"content\": \"站长工具、代码格式化、压缩、加密、解密、下载链接转换等\"\n },\n {\n \"nickname\": \"OSCHINA.NET社区\",\n \"site\": \"https://tool.oschina.net/\",\n \"content\": \"常用文档、常用对照表、代码处理、Html/Js/Css工具、加密/转码工具等\"\n },\n {\n \"nickname\": \"记磊工具箱\",\n \"site\": \"https://tools.ly522.com/\",\n \"content\": \"Dns检测、CSS格式化、超级Ping、端口扫描等\"\n },\n {\n \"nickname\": \"孟坤工具箱\",\n \"site\": \"http://tool.mkblog.cn/\",\n \"content\": \"css一键美化、文本差异比较、代码高亮等\"\n },\n {\n \"nickname\": \"Text to ASCII\",\n \"site\": \"http://patorjk.com/software/taag/\",\n \"content\": \"Text to ASCII Art Generator,字符串转成 ASCII 码图案\"\n },\n {\n \"nickname\": \"临时邮箱\",\n \"site\": \"https://linshiyouxiang.net/\",\n \"content\": \"匿名注册不常用的网站/论坛,保护隐私免骚扰\"\n },\n {\n \"nickname\": \"TinyPNG\",\n \"site\": \"https://tinypng.com/\",\n \"content\": \"PNG/JPG图片在线压缩利器\"\n },\n {\n \"nickname\": \"图片格式在线转换\",\n \"site\": \"https://ezgif.com/png-to-webp\",\n \"content\": \"webp图片格式在线转换\"\n },\n {\n \"nickname\": \"SVGOMG\",\n \"site\": \"https://jakearchibald.github.io/svgomg/\",\n \"content\": \"SVG在线压缩平台\"\n },\n {\n \"nickname\": \"Loading\",\n \"site\": \"https://loading.io/\",\n \"content\": \"制作GIF、SVG、CSS加载动画图标\"\n },\n {\n \"nickname\": \"Preloaders\",\n \"site\": \"https://www.logaster.cn/\",\n \"content\": \"Loading 懒加载动画在线制作\"\n },\n {\n \"nickname\": \"移除图片背景\",\n \"site\": \"https://www.remove.bg/\",\n \"content\": \"一键智能抠图\"\n },\n {\n \"nickname\": \"KMS服务\",\n \"site\": \"https://kms.avg.cx/\",\n \"content\": \"KMS激活Windows一键脚本\"\n }\n ]\n}\n","date":"2023-10-21T13:20:04.503Z","updated":"2023-10-21T13:20:04.502Z","path":"stars/allStars.json","layout":"false","title":"","comments":1,"_id":"clo56i5vj001mfc3u95jr3wjz","content":"{\".mine\":[{\"nickname\":\"又拍云控制台\",\"site\":\"https://console.upyun.com/dashboard/\",\"content\":\"CDN管理,刷新CDN缓存\"},{\"nickname\":\"LeanCloud控制台\",\"site\":\"https://leancloud.cn/dashboard/applist.html#/apps\",\"content\":\"应用管理,数据控制\"},{\"nickname\":\"开课吧\",\"site\":\"https://appaadih2af2521.pc.xiaoe-tech.com/bought\",\"content\":\"学习网站\"},{\"nickname\":\"网易云课堂\",\"site\":\"https://study.163.com/my\",\"content\":\"学习网站\"},{\"nickname\":\"NexT\",\"site\":\"https://theme-next.org/docs/\",\"content\":\"NexT主题官方文档\"}],\".docs\":[{\"nickname\":\"JavaScript\",\"site\":\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference\",\"content\":\"JavaScript API 文档\"},{\"nickname\":\"HTML\",\"site\":\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element\",\"content\":\"HTML API 文档\"},{\"nickname\":\"CSS\",\"site\":\"https://developer.mozilla.org/en-US/docs/Web/CSS/Reference\",\"content\":\"CSS API 文档\"},{\"nickname\":\"Python\",\"site\":\"https://docs.python.org/\",\"content\":\"Python API 文档\"},{\"nickname\":\"PHP\",\"site\":\"https://www.php.net/manual/zh/index.php\",\"content\":\"PHP API 文档\"},{\"nickname\":\"SQL\",\"site\":\"https://docs.microsoft.com/zh-cn/sql/\",\"content\":\"SQL API 文档\"},{\"nickname\":\"Node.js\",\"site\":\"http://nodejs.cn/\",\"content\":\"Node.js API 文档\"},{\"nickname\":\"MongoDB\",\"site\":\"https://docs.mongodb.com/manual/\",\"content\":\"MongoDB API 文档\"},{\"nickname\":\"Vue.js\",\"site\":\"https://cn.vuejs.org/v2/guide/\",\"content\":\"一套用于构建用户界面的渐进式框架。\"},{\"nickname\":\"Vuex\",\"site\":\"https://vuex.vuejs.org/zh/\",\"content\":\"一个专为Vue.js应用程序开发的状态管理模式\"},{\"nickname\":\"Vue Router\",\"site\":\"https://router.vuejs.org/zh/\",\"content\":\"Vue.js官方路由管理器\"},{\"nickname\":\"Puppeteer中文文档\",\"site\":\"https://zhaoqize.github.io/puppeteer-api-zh_CN/\",\"content\":\"一个Node库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行,但是可以通过修改配置文件运行“有头”模式。\"},{\"nickname\":\"axios中文文档\",\"site\":\"http://www.axios-js.com/\",\"content\":\"易用、简洁且高效的http库\"},{\"nickname\":\"Express中文文档\",\"site\":\"https://www.expressjs.com.cn/\",\"content\":\"基于Node.js平台,快速、开放、极简的Web开发框架\"},{\"nickname\":\"Layui\",\"site\":\"https://www.layui.com/\",\"content\":\"经典模块化前端UI框架\"}],\".code\":[{\"nickname\":\"Github\",\"site\":\"https://github.com/\",\"content\":\"全球最大的面向开源及私有软件项目的托管平台\"},{\"nickname\":\"Gitlab\",\"site\":\"https://gitlab.com/\",\"content\":\"支持无限的公有项目和私有项目的代码托管平台\"},{\"nickname\":\"Coding\",\"site\":\"https://coding.net/\",\"content\":\"国内首个一站式云端软件服务平台\"},{\"nickname\":\"Gitee\",\"site\":\"https://gitee.com/\",\"content\":\"国内最大的开源社区 OSChina 的代码托管平台\"},{\"nickname\":\"阿里云代码托管\",\"site\":\"https://code.aliyun.com/\",\"content\":\"阿里云旗下代码托管平台\"},{\"nickname\":\"百度效率云\",\"site\":\"http://xiaolvyun.baidu.com/\",\"content\":\"百度云旗下的 Git 代码托管平台\"},{\"nickname\":\"SourceForge\",\"site\":\"https://sourceforge.net/\",\"content\":\"又称 SF.net,是开源软件开发者进行开发管理的集中式场所\"},{\"nickname\":\"Bitbucket\",\"site\":\"https://bitbucket.org/\",\"content\":\"同时支持 Git 和 Mercurial 这两个版本控制软件,免费的私有仓库,支持5人以内的合作开发\"},{\"nickname\":\"npm\",\"site\":\"https://www.npmjs.com/\",\"content\":\"JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具。通过 npm 可以安装、共享、分发代码,管理项目依赖关系\"}],\".skill\":[{\"nickname\":\"LeetCode\",\"site\":\"https://leetcode-cn.com/\",\"content\":\"全球极客挚爱的技术成长平台\"},{\"nickname\":\"Topcoder\",\"site\":\"https://www.topcoder.com/\",\"content\":\"全世界规模最大的程序竞赛网站,也会有一些算法竞赛,适合一些高端的或者搞ACM的,也会举办一些比赛\"},{\"nickname\":\"Codeforces\",\"site\":\"http://codeforces.com/\",\"content\":\"罗斯最大的算法比赛网站\"},{\"nickname\":\"Hihocoder\",\"site\":\"http://www.hihocoder.com/\",\"content\":\"技术团队来自原北京大学POJ (PKU Online Judge)开发团队,收集了全球范围内很多地区、高校举办的比赛试题, 提供365天*24小时的在线提交、评判程序的服务\"},{\"nickname\":\"LintCode\",\"site\":\"https://www.lintcode.com/\",\"content\":\"被称作中文版的leetcode,也是可以做为编程能力提升的一个中转站\"},{\"nickname\":\"SPOJ\",\"site\":\"https://www.spoj.com/\",\"content\":\"波兰的算法刷题网站\"},{\"nickname\":\"NEUQ OJ\",\"site\":\"http://acmclub.cn/\",\"content\":\"一个在线的判题平台\"},{\"nickname\":\"洛谷\",\"site\":\"https://www.luogu.com.cn/\",\"content\":\"创办于2013年,致力于为参加noip、noi、acm的选手提供清爽、快捷的编程体验\"},{\"nickname\":\"牛客网\",\"site\":\"https://www.nowcoder.com/contestRoom\",\"content\":\"中国最大的IT题库\"},{\"nickname\":\"计蒜客\",\"site\":\"https://nanti.jisuanke.com/oi\",\"content\":\"计蒜客OI题库致力于为参加noi、noip、信息学竞赛的选手提供优秀的Online Judge系统\"},{\"nickname\":\"C语言网\",\"site\":\"https://www.dotcpp.com/oj/contest.html\",\"content\":\"在这里可以参加包括ACM、NOI在内的各种C/C++/java程序比赛,也可以DIY举办各类程序比赛活动!\"}],\".school\":[{\"nickname\":\"菜鸟教程\",\"site\":\"https://www.runoob.com/\",\"content\":\"提供了编程的基础技术教程, 介绍了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP , MySQL等各种编程语言的基础知识\"},{\"nickname\":\"W3school\",\"site\":\"https://www.w3school.com.cn/\",\"content\":\"领先的 Web 技术教程\"},{\"nickname\":\"前端网\",\"site\":\"http://www.qianduandaxue.com/\",\"content\":\"最好的自学web前端网站\"}],\".community\":[{\"nickname\":\"Stack Overflow\",\"site\":\"https://stackoverflow.com/\",\"content\":\"全球最受程序员欢迎的开发社区\"},{\"nickname\":\"CSDN\",\"site\":\"https://www.csdn.net/\",\"content\":\"全球最大中文IT社区,为IT专业技术人员提供最全面的信息传播和服务平台\"},{\"nickname\":\"博客园\",\"site\":\"https://www.cnblogs.com\",\"content\":\"代码改变世界\"},{\"nickname\":\"V2EX\",\"site\":\"https://www.v2ex.com/\",\"content\":\"V2EX = way to explore\"},{\"nickname\":\"掘金\",\"site\":\"https://juejin.im/\",\"content\":\"一个帮助开发者成长的社区\"},{\"nickname\":\"SegmentFault\",\"site\":\"https://segmentfault.com/\",\"content\":\"改变并提升人们获取知识的方式和效率,帮助更多的开发者获得成长与成功\"},{\"nickname\":\"开源中国\",\"site\":\"https://www.oschina.net/\",\"content\":\"国内最大的开源技术社区\"},{\"nickname\":\"ITeye\",\"site\":\"https://www.iteye.com/\",\"content\":\"ITeye软件开发交流社区 - Java编程 Spring框架 Ajax技术 agile敏捷软件开发 ruby on rails实践\"},{\"nickname\":\"51CTO\",\"site\":\"https://www.51cto.com/\",\"content\":\"技术成就梦想\"},{\"nickname\":\"ITPUB\",\"site\":\"http://www.itpub.net/\",\"content\":\"全球最大的学习分享平台\"},{\"nickname\":\"知乎\",\"site\":\"https://www.zhihu.com/\",\"content\":\"国内最受欢迎的知识性问答社区\"},{\"nickname\":\"简书\",\"site\":\"https://www.jianshu.com/\",\"content\":\"创作你的创作\"},{\"nickname\":\"云+社区\",\"site\":\"https://cloud.tencent.com/developer\",\"content\":\"来自腾讯的开发者技术分享社区\"},{\"nickname\":\"云栖社区\",\"site\":\"https://yq.aliyun.com/\",\"content\":\"阿里云面向开发者的开放型技术平台\"},{\"nickname\":\"极术社区\",\"site\":\"https://aijishu.com/\",\"content\":\"全球软硬件资源信息,只要你有问题,我们就能解答。\"}],\".serve\":[{\"nickname\":\"阿里云\",\"site\":\"https://www.aliyun.com/\",\"content\":\"为了无法计算的价值\"},{\"nickname\":\"腾讯云\",\"site\":\"https://cloud.tencent.com/\",\"content\":\"产业智变 云启未来\"},{\"nickname\":\"百度云\",\"site\":\"https://cloud.baidu.com/\",\"content\":\"计算无限可能\"},{\"nickname\":\"七牛云\",\"site\":\"https://www.qiniu.com/\",\"content\":\"国内领先的企业级云服务商\"},{\"nickname\":\"又拍云\",\"site\":\"https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral\",\"content\":\"专注 CDN、云存储、小程序开发方案、 短视频开发方案、DDoS高防等产品的国内知名企业级云服务商\"},{\"nickname\":\"Cloudflare\",\"site\":\"https://www.cloudflare.com/\",\"content\":\"网络性能和安全公司\"},{\"nickname\":\"jsDelivr\",\"site\":\"https://www.jsdelivr.com/\",\"content\":\"A free, fast, and reliable Open Source CDN for npm and GitHub\"}],\".sitetool\":[{\"nickname\":\"百度站长平台\",\"site\":\"https://ziyuan.baidu.com/\",\"content\":\"百度搜索资源平台 - 让网站更具价值\"},{\"nickname\":\"Google 站长平台\",\"site\":\"http://www.google.cn/webmasters/\",\"content\":\"支持、学习、互动交流和 Search Console – Google\"},{\"nickname\":\"Bing 网站管理员工具\",\"site\":\"https://www.bing.com/toolbox/webmaster/\",\"content\":\"Bing 网站管理员工具\"},{\"nickname\":\"站长工具 - 站长之家\",\"site\":\"http://tool.chinaz.com/\",\"content\":\"SEO工具,权重查询,收录查询,PR查询,ICP备案查询,whois查询,友情链接查询,反向链接查询,网站测试,IP查询,Alexa查询\"},{\"nickname\":\"搜狗站长平台\",\"site\":\"http://zhanzhang.sogou.com/\",\"content\":\"全面掌握在搜狗搜索中的数据表现\"},{\"nickname\":\"360 站长平台\",\"site\":\"http://zhanzhang.so.com/\",\"content\":\"给网站带来更多流量和展现\"},{\"nickname\":\"超级 SEO 外链工具\",\"site\":\"https://tool.lusongsong.com/seo/\",\"content\":\"网站自动化宣传机器/免费的超级外链工具可批量增加外链\"},{\"nickname\":\"域名备案管理系统\",\"site\":\"http://www.beian.miit.gov.cn/\",\"content\":\"工业和信息化部ICP/IP地址/域名信息备案管理系统\"},{\"nickname\":\"公安备案网\",\"site\":\"http://beian.gov.cn/\",\"content\":\"全国互联网安全管理服务平台\"}],\".design\":[{\"nickname\":\"Iconfont\",\"site\":\"https://www.iconfont.cn/\",\"content\":\"阿里巴巴矢量图标库,提供矢量图标下载、在线存储、格式转换等功能\"},{\"nickname\":\"Font Awesome\",\"site\":\"https://fa5.dashgame.com/#/%E5%9B%BE%E6%A0%87\",\"content\":\"一个基于CSS 和 LESS 的字体和图标工具包\"},{\"nickname\":\"Flaticon\",\"site\":\"https://www.flaticon.com/\",\"content\":\"海量扁平化免费的图标库\"},{\"nickname\":\"icons8\",\"site\":\"https://icons8.com/\",\"content\":\"独特系统平台风格和web图标库,下载免费图标,音乐\"},{\"nickname\":\"Unsplash\",\"site\":\"https://unsplash.com/\",\"content\":\"质量超高的免费图片素材库,无需注册,直接下载\"},{\"nickname\":\"Mixkit\",\"site\":\"https://mixkit.co/\",\"content\":\"免费、高质量、可商用的视频素材分享网站\"},{\"nickname\":\"WebGradients\",\"site\":\"https://webgradients.com/\",\"content\":\"渐变色搭配方案\"},{\"nickname\":\"CoolHue2.0\",\"site\":\"https://webkul.github.io/coolhue/\",\"content\":\"渐变色搭配方案\"},{\"nickname\":\"Gradient\",\"site\":\"https://gradient.shapefactory.co/?a=540A43&b=629EA1&d=25\",\"content\":\"渐变色搭配方案\"},{\"nickname\":\"UiGradients\",\"site\":\"https://uigradients.com/#JShine\",\"content\":\"渐变色搭配方案\"}],\".tools\":[{\"nickname\":\"智图\",\"site\":\"https://zhitu.isux.us/\",\"content\":\"腾讯ISUX前端团队开发的一个专门用于图片压缩和图片格式转换的平台\"},{\"nickname\":\"程序员的工具箱\",\"site\":\"https://tool.lu/\",\"content\":\"站长工具、代码格式化、压缩、加密、解密、下载链接转换等\"},{\"nickname\":\"OSCHINA.NET社区\",\"site\":\"https://tool.oschina.net/\",\"content\":\"常用文档、常用对照表、代码处理、Html/Js/Css工具、加密/转码工具等\"},{\"nickname\":\"记磊工具箱\",\"site\":\"https://tools.ly522.com/\",\"content\":\"Dns检测、CSS格式化、超级Ping、端口扫描等\"},{\"nickname\":\"孟坤工具箱\",\"site\":\"http://tool.mkblog.cn/\",\"content\":\"css一键美化、文本差异比较、代码高亮等\"},{\"nickname\":\"Text to ASCII\",\"site\":\"http://patorjk.com/software/taag/\",\"content\":\"Text to ASCII Art Generator,字符串转成 ASCII 码图案\"},{\"nickname\":\"临时邮箱\",\"site\":\"https://linshiyouxiang.net/\",\"content\":\"匿名注册不常用的网站/论坛,保护隐私免骚扰\"},{\"nickname\":\"TinyPNG\",\"site\":\"https://tinypng.com/\",\"content\":\"PNG/JPG图片在线压缩利器\"},{\"nickname\":\"图片格式在线转换\",\"site\":\"https://ezgif.com/png-to-webp\",\"content\":\"webp图片格式在线转换\"},{\"nickname\":\"SVGOMG\",\"site\":\"https://jakearchibald.github.io/svgomg/\",\"content\":\"SVG在线压缩平台\"},{\"nickname\":\"Loading\",\"site\":\"https://loading.io/\",\"content\":\"制作GIF、SVG、CSS加载动画图标\"},{\"nickname\":\"Preloaders\",\"site\":\"https://www.logaster.cn/\",\"content\":\"Loading 懒加载动画在线制作\"},{\"nickname\":\"移除图片背景\",\"site\":\"https://www.remove.bg/\",\"content\":\"一键智能抠图\"},{\"nickname\":\"KMS服务\",\"site\":\"https://kms.avg.cx/\",\"content\":\"KMS激活Windows一键脚本\"}]}","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":9409,"excerpt":"","more":"{\".mine\":[{\"nickname\":\"又拍云控制台\",\"site\":\"https://console.upyun.com/dashboard/\",\"content\":\"CDN管理,刷新CDN缓存\"},{\"nickname\":\"LeanCloud控制台\",\"site\":\"https://leancloud.cn/dashboard/applist.html#/apps\",\"content\":\"应用管理,数据控制\"},{\"nickname\":\"开课吧\",\"site\":\"https://appaadih2af2521.pc.xiaoe-tech.com/bought\",\"content\":\"学习网站\"},{\"nickname\":\"网易云课堂\",\"site\":\"https://study.163.com/my\",\"content\":\"学习网站\"},{\"nickname\":\"NexT\",\"site\":\"https://theme-next.org/docs/\",\"content\":\"NexT主题官方文档\"}],\".docs\":[{\"nickname\":\"JavaScript\",\"site\":\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference\",\"content\":\"JavaScript API 文档\"},{\"nickname\":\"HTML\",\"site\":\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element\",\"content\":\"HTML API 文档\"},{\"nickname\":\"CSS\",\"site\":\"https://developer.mozilla.org/en-US/docs/Web/CSS/Reference\",\"content\":\"CSS API 文档\"},{\"nickname\":\"Python\",\"site\":\"https://docs.python.org/\",\"content\":\"Python API 文档\"},{\"nickname\":\"PHP\",\"site\":\"https://www.php.net/manual/zh/index.php\",\"content\":\"PHP API 文档\"},{\"nickname\":\"SQL\",\"site\":\"https://docs.microsoft.com/zh-cn/sql/\",\"content\":\"SQL API 文档\"},{\"nickname\":\"Node.js\",\"site\":\"http://nodejs.cn/\",\"content\":\"Node.js API 文档\"},{\"nickname\":\"MongoDB\",\"site\":\"https://docs.mongodb.com/manual/\",\"content\":\"MongoDB API 文档\"},{\"nickname\":\"Vue.js\",\"site\":\"https://cn.vuejs.org/v2/guide/\",\"content\":\"一套用于构建用户界面的渐进式框架。\"},{\"nickname\":\"Vuex\",\"site\":\"https://vuex.vuejs.org/zh/\",\"content\":\"一个专为Vue.js应用程序开发的状态管理模式\"},{\"nickname\":\"Vue Router\",\"site\":\"https://router.vuejs.org/zh/\",\"content\":\"Vue.js官方路由管理器\"},{\"nickname\":\"Puppeteer中文文档\",\"site\":\"https://zhaoqize.github.io/puppeteer-api-zh_CN/\",\"content\":\"一个Node库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行,但是可以通过修改配置文件运行“有头”模式。\"},{\"nickname\":\"axios中文文档\",\"site\":\"http://www.axios-js.com/\",\"content\":\"易用、简洁且高效的http库\"},{\"nickname\":\"Express中文文档\",\"site\":\"https://www.expressjs.com.cn/\",\"content\":\"基于Node.js平台,快速、开放、极简的Web开发框架\"},{\"nickname\":\"Layui\",\"site\":\"https://www.layui.com/\",\"content\":\"经典模块化前端UI框架\"}],\".code\":[{\"nickname\":\"Github\",\"site\":\"https://github.com/\",\"content\":\"全球最大的面向开源及私有软件项目的托管平台\"},{\"nickname\":\"Gitlab\",\"site\":\"https://gitlab.com/\",\"content\":\"支持无限的公有项目和私有项目的代码托管平台\"},{\"nickname\":\"Coding\",\"site\":\"https://coding.net/\",\"content\":\"国内首个一站式云端软件服务平台\"},{\"nickname\":\"Gitee\",\"site\":\"https://gitee.com/\",\"content\":\"国内最大的开源社区 OSChina 的代码托管平台\"},{\"nickname\":\"阿里云代码托管\",\"site\":\"https://code.aliyun.com/\",\"content\":\"阿里云旗下代码托管平台\"},{\"nickname\":\"百度效率云\",\"site\":\"http://xiaolvyun.baidu.com/\",\"content\":\"百度云旗下的 Git 代码托管平台\"},{\"nickname\":\"SourceForge\",\"site\":\"https://sourceforge.net/\",\"content\":\"又称 SF.net,是开源软件开发者进行开发管理的集中式场所\"},{\"nickname\":\"Bitbucket\",\"site\":\"https://bitbucket.org/\",\"content\":\"同时支持 Git 和 Mercurial 这两个版本控制软件,免费的私有仓库,支持5人以内的合作开发\"},{\"nickname\":\"npm\",\"site\":\"https://www.npmjs.com/\",\"content\":\"JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具。通过 npm 可以安装、共享、分发代码,管理项目依赖关系\"}],\".skill\":[{\"nickname\":\"LeetCode\",\"site\":\"https://leetcode-cn.com/\",\"content\":\"全球极客挚爱的技术成长平台\"},{\"nickname\":\"Topcoder\",\"site\":\"https://www.topcoder.com/\",\"content\":\"全世界规模最大的程序竞赛网站,也会有一些算法竞赛,适合一些高端的或者搞ACM的,也会举办一些比赛\"},{\"nickname\":\"Codeforces\",\"site\":\"http://codeforces.com/\",\"content\":\"罗斯最大的算法比赛网站\"},{\"nickname\":\"Hihocoder\",\"site\":\"http://www.hihocoder.com/\",\"content\":\"技术团队来自原北京大学POJ (PKU Online Judge)开发团队,收集了全球范围内很多地区、高校举办的比赛试题, 提供365天*24小时的在线提交、评判程序的服务\"},{\"nickname\":\"LintCode\",\"site\":\"https://www.lintcode.com/\",\"content\":\"被称作中文版的leetcode,也是可以做为编程能力提升的一个中转站\"},{\"nickname\":\"SPOJ\",\"site\":\"https://www.spoj.com/\",\"content\":\"波兰的算法刷题网站\"},{\"nickname\":\"NEUQ OJ\",\"site\":\"http://acmclub.cn/\",\"content\":\"一个在线的判题平台\"},{\"nickname\":\"洛谷\",\"site\":\"https://www.luogu.com.cn/\",\"content\":\"创办于2013年,致力于为参加noip、noi、acm的选手提供清爽、快捷的编程体验\"},{\"nickname\":\"牛客网\",\"site\":\"https://www.nowcoder.com/contestRoom\",\"content\":\"中国最大的IT题库\"},{\"nickname\":\"计蒜客\",\"site\":\"https://nanti.jisuanke.com/oi\",\"content\":\"计蒜客OI题库致力于为参加noi、noip、信息学竞赛的选手提供优秀的Online Judge系统\"},{\"nickname\":\"C语言网\",\"site\":\"https://www.dotcpp.com/oj/contest.html\",\"content\":\"在这里可以参加包括ACM、NOI在内的各种C/C++/java程序比赛,也可以DIY举办各类程序比赛活动!\"}],\".school\":[{\"nickname\":\"菜鸟教程\",\"site\":\"https://www.runoob.com/\",\"content\":\"提供了编程的基础技术教程, 介绍了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP , MySQL等各种编程语言的基础知识\"},{\"nickname\":\"W3school\",\"site\":\"https://www.w3school.com.cn/\",\"content\":\"领先的 Web 技术教程\"},{\"nickname\":\"前端网\",\"site\":\"http://www.qianduandaxue.com/\",\"content\":\"最好的自学web前端网站\"}],\".community\":[{\"nickname\":\"Stack Overflow\",\"site\":\"https://stackoverflow.com/\",\"content\":\"全球最受程序员欢迎的开发社区\"},{\"nickname\":\"CSDN\",\"site\":\"https://www.csdn.net/\",\"content\":\"全球最大中文IT社区,为IT专业技术人员提供最全面的信息传播和服务平台\"},{\"nickname\":\"博客园\",\"site\":\"https://www.cnblogs.com\",\"content\":\"代码改变世界\"},{\"nickname\":\"V2EX\",\"site\":\"https://www.v2ex.com/\",\"content\":\"V2EX = way to explore\"},{\"nickname\":\"掘金\",\"site\":\"https://juejin.im/\",\"content\":\"一个帮助开发者成长的社区\"},{\"nickname\":\"SegmentFault\",\"site\":\"https://segmentfault.com/\",\"content\":\"改变并提升人们获取知识的方式和效率,帮助更多的开发者获得成长与成功\"},{\"nickname\":\"开源中国\",\"site\":\"https://www.oschina.net/\",\"content\":\"国内最大的开源技术社区\"},{\"nickname\":\"ITeye\",\"site\":\"https://www.iteye.com/\",\"content\":\"ITeye软件开发交流社区 - Java编程 Spring框架 Ajax技术 agile敏捷软件开发 ruby on rails实践\"},{\"nickname\":\"51CTO\",\"site\":\"https://www.51cto.com/\",\"content\":\"技术成就梦想\"},{\"nickname\":\"ITPUB\",\"site\":\"http://www.itpub.net/\",\"content\":\"全球最大的学习分享平台\"},{\"nickname\":\"知乎\",\"site\":\"https://www.zhihu.com/\",\"content\":\"国内最受欢迎的知识性问答社区\"},{\"nickname\":\"简书\",\"site\":\"https://www.jianshu.com/\",\"content\":\"创作你的创作\"},{\"nickname\":\"云+社区\",\"site\":\"https://cloud.tencent.com/developer\",\"content\":\"来自腾讯的开发者技术分享社区\"},{\"nickname\":\"云栖社区\",\"site\":\"https://yq.aliyun.com/\",\"content\":\"阿里云面向开发者的开放型技术平台\"},{\"nickname\":\"极术社区\",\"site\":\"https://aijishu.com/\",\"content\":\"全球软硬件资源信息,只要你有问题,我们就能解答。\"}],\".serve\":[{\"nickname\":\"阿里云\",\"site\":\"https://www.aliyun.com/\",\"content\":\"为了无法计算的价值\"},{\"nickname\":\"腾讯云\",\"site\":\"https://cloud.tencent.com/\",\"content\":\"产业智变 云启未来\"},{\"nickname\":\"百度云\",\"site\":\"https://cloud.baidu.com/\",\"content\":\"计算无限可能\"},{\"nickname\":\"七牛云\",\"site\":\"https://www.qiniu.com/\",\"content\":\"国内领先的企业级云服务商\"},{\"nickname\":\"又拍云\",\"site\":\"https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral\",\"content\":\"专注 CDN、云存储、小程序开发方案、 短视频开发方案、DDoS高防等产品的国内知名企业级云服务商\"},{\"nickname\":\"Cloudflare\",\"site\":\"https://www.cloudflare.com/\",\"content\":\"网络性能和安全公司\"},{\"nickname\":\"jsDelivr\",\"site\":\"https://www.jsdelivr.com/\",\"content\":\"A free, fast, and reliable Open Source CDN for npm and GitHub\"}],\".sitetool\":[{\"nickname\":\"百度站长平台\",\"site\":\"https://ziyuan.baidu.com/\",\"content\":\"百度搜索资源平台 - 让网站更具价值\"},{\"nickname\":\"Google 站长平台\",\"site\":\"http://www.google.cn/webmasters/\",\"content\":\"支持、学习、互动交流和 Search Console – Google\"},{\"nickname\":\"Bing 网站管理员工具\",\"site\":\"https://www.bing.com/toolbox/webmaster/\",\"content\":\"Bing 网站管理员工具\"},{\"nickname\":\"站长工具 - 站长之家\",\"site\":\"http://tool.chinaz.com/\",\"content\":\"SEO工具,权重查询,收录查询,PR查询,ICP备案查询,whois查询,友情链接查询,反向链接查询,网站测试,IP查询,Alexa查询\"},{\"nickname\":\"搜狗站长平台\",\"site\":\"http://zhanzhang.sogou.com/\",\"content\":\"全面掌握在搜狗搜索中的数据表现\"},{\"nickname\":\"360 站长平台\",\"site\":\"http://zhanzhang.so.com/\",\"content\":\"给网站带来更多流量和展现\"},{\"nickname\":\"超级 SEO 外链工具\",\"site\":\"https://tool.lusongsong.com/seo/\",\"content\":\"网站自动化宣传机器/免费的超级外链工具可批量增加外链\"},{\"nickname\":\"域名备案管理系统\",\"site\":\"http://www.beian.miit.gov.cn/\",\"content\":\"工业和信息化部ICP/IP地址/域名信息备案管理系统\"},{\"nickname\":\"公安备案网\",\"site\":\"http://beian.gov.cn/\",\"content\":\"全国互联网安全管理服务平台\"}],\".design\":[{\"nickname\":\"Iconfont\",\"site\":\"https://www.iconfont.cn/\",\"content\":\"阿里巴巴矢量图标库,提供矢量图标下载、在线存储、格式转换等功能\"},{\"nickname\":\"Font Awesome\",\"site\":\"https://fa5.dashgame.com/#/%E5%9B%BE%E6%A0%87\",\"content\":\"一个基于CSS 和 LESS 的字体和图标工具包\"},{\"nickname\":\"Flaticon\",\"site\":\"https://www.flaticon.com/\",\"content\":\"海量扁平化免费的图标库\"},{\"nickname\":\"icons8\",\"site\":\"https://icons8.com/\",\"content\":\"独特系统平台风格和web图标库,下载免费图标,音乐\"},{\"nickname\":\"Unsplash\",\"site\":\"https://unsplash.com/\",\"content\":\"质量超高的免费图片素材库,无需注册,直接下载\"},{\"nickname\":\"Mixkit\",\"site\":\"https://mixkit.co/\",\"content\":\"免费、高质量、可商用的视频素材分享网站\"},{\"nickname\":\"WebGradients\",\"site\":\"https://webgradients.com/\",\"content\":\"渐变色搭配方案\"},{\"nickname\":\"CoolHue2.0\",\"site\":\"https://webkul.github.io/coolhue/\",\"content\":\"渐变色搭配方案\"},{\"nickname\":\"Gradient\",\"site\":\"https://gradient.shapefactory.co/?a=540A43&b=629EA1&d=25\",\"content\":\"渐变色搭配方案\"},{\"nickname\":\"UiGradients\",\"site\":\"https://uigradients.com/#JShine\",\"content\":\"渐变色搭配方案\"}],\".tools\":[{\"nickname\":\"智图\",\"site\":\"https://zhitu.isux.us/\",\"content\":\"腾讯ISUX前端团队开发的一个专门用于图片压缩和图片格式转换的平台\"},{\"nickname\":\"程序员的工具箱\",\"site\":\"https://tool.lu/\",\"content\":\"站长工具、代码格式化、压缩、加密、解密、下载链接转换等\"},{\"nickname\":\"OSCHINA.NET社区\",\"site\":\"https://tool.oschina.net/\",\"content\":\"常用文档、常用对照表、代码处理、Html/Js/Css工具、加密/转码工具等\"},{\"nickname\":\"记磊工具箱\",\"site\":\"https://tools.ly522.com/\",\"content\":\"Dns检测、CSS格式化、超级Ping、端口扫描等\"},{\"nickname\":\"孟坤工具箱\",\"site\":\"http://tool.mkblog.cn/\",\"content\":\"css一键美化、文本差异比较、代码高亮等\"},{\"nickname\":\"Text to ASCII\",\"site\":\"http://patorjk.com/software/taag/\",\"content\":\"Text to ASCII Art Generator,字符串转成 ASCII 码图案\"},{\"nickname\":\"临时邮箱\",\"site\":\"https://linshiyouxiang.net/\",\"content\":\"匿名注册不常用的网站/论坛,保护隐私免骚扰\"},{\"nickname\":\"TinyPNG\",\"site\":\"https://tinypng.com/\",\"content\":\"PNG/JPG图片在线压缩利器\"},{\"nickname\":\"图片格式在线转换\",\"site\":\"https://ezgif.com/png-to-webp\",\"content\":\"webp图片格式在线转换\"},{\"nickname\":\"SVGOMG\",\"site\":\"https://jakearchibald.github.io/svgomg/\",\"content\":\"SVG在线压缩平台\"},{\"nickname\":\"Loading\",\"site\":\"https://loading.io/\",\"content\":\"制作GIF、SVG、CSS加载动画图标\"},{\"nickname\":\"Preloaders\",\"site\":\"https://www.logaster.cn/\",\"content\":\"Loading 懒加载动画在线制作\"},{\"nickname\":\"移除图片背景\",\"site\":\"https://www.remove.bg/\",\"content\":\"一键智能抠图\"},{\"nickname\":\"KMS服务\",\"site\":\"https://kms.avg.cx/\",\"content\":\"KMS激活Windows一键脚本\"}]}"},{"_content":"// 采用一个多对象JSON文件存储所有数据的方式\nstars = {\n init: function (url) {\n var that = this;\n $.getJSON(url,\n function (data) {\n for (var className in data) {\n var classData = data[className]\n that.render(classData, className)\n }\n }\n );\n },\n render: function (data, name) {\n var nickname, site, li = \"\";\n for (var i = 0; i < data.length; i++) {\n nickname = data[i].nickname;\n site = data[i].site;\n content = data[i].content;\n li += '
' + '
' + '
' + nickname + '
' + '
' + '
' + '
' + content + '
' + '
' + '
';\n }\n $(name).append(li);\n }\n}\n\n// 传入json文件的路径\nstars.init(\"./allStars.json\")\n\n\n\n\n\n","source":"stars/stars.js","raw":"// 采用一个多对象JSON文件存储所有数据的方式\nstars = {\n init: function (url) {\n var that = this;\n $.getJSON(url,\n function (data) {\n for (var className in data) {\n var classData = data[className]\n that.render(classData, className)\n }\n }\n );\n },\n render: function (data, name) {\n var nickname, site, li = \"\";\n for (var i = 0; i < data.length; i++) {\n nickname = data[i].nickname;\n site = data[i].site;\n content = data[i].content;\n li += '
' + '
' + '
' + nickname + '
' + '
' + '
' + '
' + content + '
' + '
' + '
';\n }\n $(name).append(li);\n }\n}\n\n// 传入json文件的路径\nstars.init(\"./allStars.json\")\n\n\n\n\n\n","date":"2023-10-21T13:20:04.503Z","updated":"2023-10-21T13:20:04.503Z","path":"stars/stars.js","layout":"false","title":"","comments":1,"_id":"clo56i5vk001qfc3uasry8xrl","content":"// 采用一个多对象JSON文件存储所有数据的方式\nstars = {\n init: function (url) {\n var that = this;\n $.getJSON(url,\n function (data) {\n for (var className in data) {\n var classData = data[className]\n that.render(classData, className)\n }\n }\n );\n },\n render: function (data, name) {\n var nickname, site, li = \"\";\n for (var i = 0; i < data.length; i++) {\n nickname = data[i].nickname;\n site = data[i].site;\n content = data[i].content;\n li += '
' + '
' + '
' + nickname + '
' + '
' + '
' + '
' + content + '
' + '
' + '
';\n }\n $(name).append(li);\n }\n}\n\n// 传入json文件的路径\nstars.init(\"./allStars.json\")\n\n\n\n\n\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":445,"excerpt":"","more":"// 采用一个多对象JSON文件存储所有数据的方式\nstars = {\n init: function (url) {\n var that = this;\n $.getJSON(url,\n function (data) {\n for (var className in data) {\n var classData = data[className]\n that.render(classData, className)\n }\n }\n );\n },\n render: function (data, name) {\n var nickname, site, li = \"\";\n for (var i = 0; i < data.length; i++) {\n nickname = data[i].nickname;\n site = data[i].site;\n content = data[i].content;\n li += '
' + '
' + '
' + nickname + '
' + '
' + '
' + '
' + content + '
' + '
' + '
';\n }\n $(name).append(li);\n }\n}\n\n// 传入json文件的路径\nstars.init(\"./allStars.json\")\n\n\n\n\n\n"},{"title":"我的收藏","comments":0,"type":"stars","_content":"\n\n\n\n\n\n\n\n\n## 我的常用\n
\n\n## 官方文档\n
\n\n## 代码托管\n
\n\n## 技能训练\n
\n\n## 学习平台\n
\n\n## 开发者社区\n
\n\n## 云服务\n
\n\n## 站长工具\n
\n\n## 设计素材\n
\n\n## 实用工具\n
\n","source":"stars/index.md","raw":"---\ntitle: 我的收藏\ncomments: false\ntype: \"stars\"\n---\n\n\n\n\n\n\n\n\n\n## 我的常用\n
\n\n## 官方文档\n
\n\n## 代码托管\n
\n\n## 技能训练\n
\n\n## 学习平台\n
\n\n## 开发者社区\n
\n\n## 云服务\n
\n\n## 站长工具\n
\n\n## 设计素材\n
\n\n## 实用工具\n
\n","date":"2023-10-21T15:01:17.081Z","updated":"2023-10-21T15:01:17.081Z","path":"stars/index.html","layout":"page","_id":"clo56i5vk001ufc3ubnrsahr8","content":"\n\n\n\n

我的常用

\n
\n

官方文档

\n
\n

代码托管

\n
\n

技能训练

\n
\n

学习平台

\n
\n

开发者社区

\n
\n

云服务

\n
\n

站长工具

\n
\n

设计素材

\n
\n

实用工具

\n
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":2082,"excerpt":"","more":"\n\n\n\n

我的常用

\n
\n

官方文档

\n
\n

代码托管

\n
\n

技能训练

\n
\n

学习平台

\n
\n

开发者社区

\n
\n

云服务

\n
\n

站长工具

\n
\n

设计素材

\n
\n

实用工具

\n
\n"},{"title":"订阅","date":"2023-07-28T05:01:46.000Z","type":"subscribe","top_img":false,"aside":false,"comments":0,"_content":"\n## 订阅本站\n\n首先,对每一位来到这里的iTank朋友们说声 \"有幸遇见,很高兴认识你\" 👋\n创立 Tankenqi 的初衷是想能够有一个让自己积累知识、积累兴趣的地方;是属于自己的温暖小窝;也是偌大的社会里的属于自己的内心避风港\n和他人分享,会让这些成为积累和沉淀。如果能够帮助到更多的人,帮助更多人解决问题,那一定是非常棒的事情\n\n与大多数垂直类的技术博客不同,这里的种类会非常的繁杂,有技能的教程干货、有生活上的吐槽和想法;所以一般我研究什么、发现了什么都会分享在这里\n这些就是创造 TANKENQI 的本意,也是我分享生活的方式。有幸能和你相遇在这里,相信我们能共同留下一段美好记忆\n\n\n## RSS订阅\n\n你可以使用第三方RSS客户端接收到博客的文章摘要通知\n\nhttps://tankenqi.cn/atom.xml\n\n","source":"subscribe/index.md","raw":"---\ntitle: 订阅\ndate: 2023-07-28 13:01:46\ntype: subscribe\ntop_img: false\naside: false\ncomments: false\n---\n\n## 订阅本站\n\n首先,对每一位来到这里的iTank朋友们说声 \"有幸遇见,很高兴认识你\" 👋\n创立 Tankenqi 的初衷是想能够有一个让自己积累知识、积累兴趣的地方;是属于自己的温暖小窝;也是偌大的社会里的属于自己的内心避风港\n和他人分享,会让这些成为积累和沉淀。如果能够帮助到更多的人,帮助更多人解决问题,那一定是非常棒的事情\n\n与大多数垂直类的技术博客不同,这里的种类会非常的繁杂,有技能的教程干货、有生活上的吐槽和想法;所以一般我研究什么、发现了什么都会分享在这里\n这些就是创造 TANKENQI 的本意,也是我分享生活的方式。有幸能和你相遇在这里,相信我们能共同留下一段美好记忆\n\n\n## RSS订阅\n\n你可以使用第三方RSS客户端接收到博客的文章摘要通知\n\nhttps://tankenqi.cn/atom.xml\n\n","updated":"2023-10-22T05:09:02.000Z","path":"subscribe/index.html","layout":"page","_id":"clo56i5vk001yfc3u5i450f1d","content":"

订阅本站

\n

首先,对每一位来到这里的iTank朋友们说声 “有幸遇见,很高兴认识你” 👋
\n创立 Tankenqi 的初衷是想能够有一个让自己积累知识、积累兴趣的地方;是属于自己的温暖小窝;也是偌大的社会里的属于自己的内心避风港
\n和他人分享,会让这些成为积累和沉淀。如果能够帮助到更多的人,帮助更多人解决问题,那一定是非常棒的事情

\n

与大多数垂直类的技术博客不同,这里的种类会非常的繁杂,有技能的教程干货、有生活上的吐槽和想法;所以一般我研究什么、发现了什么都会分享在这里
\n这些就是创造 TANKENQI 的本意,也是我分享生活的方式。有幸能和你相遇在这里,相信我们能共同留下一段美好记忆

\n

RSS订阅

\n

你可以使用第三方RSS客户端接收到博客的文章摘要通知

\n

https://tankenqi.cn/atom.xml

\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":340,"excerpt":"","more":"

订阅本站

\n

首先,对每一位来到这里的iTank朋友们说声 “有幸遇见,很高兴认识你” 👋
\n创立 Tankenqi 的初衷是想能够有一个让自己积累知识、积累兴趣的地方;是属于自己的温暖小窝;也是偌大的社会里的属于自己的内心避风港
\n和他人分享,会让这些成为积累和沉淀。如果能够帮助到更多的人,帮助更多人解决问题,那一定是非常棒的事情

\n

与大多数垂直类的技术博客不同,这里的种类会非常的繁杂,有技能的教程干货、有生活上的吐槽和想法;所以一般我研究什么、发现了什么都会分享在这里
\n这些就是创造 TANKENQI 的本意,也是我分享生活的方式。有幸能和你相遇在这里,相信我们能共同留下一段美好记忆

\n

RSS订阅

\n

你可以使用第三方RSS客户端接收到博客的文章摘要通知

\n

https://tankenqi.cn/atom.xml

\n"},{"title":"标签","date":"2022-07-03T12:51:29.000Z","type":"tags","_content":"","source":"tags/index.md","raw":"---\ntitle: 标签\ndate: 2022-07-03 20:51:29\ntype: \"tags\"\n---\n","updated":"2023-10-21T01:08:55.968Z","path":"tags/index.html","comments":1,"layout":"page","_id":"clo56i5vl0020fc3u9e0pa7jx","content":"","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":0,"excerpt":"","more":""},{"title":"番茄时钟","comments":0,"aside":false,"_content":"\n\n\n\n\n","source":"tomato_clock/index.md","raw":"---\ntitle: 番茄时钟\ncomments: false\naside: false\n---\n\n\n\n\n\n","date":"2023-10-25T01:41:51.782Z","updated":"2023-10-25T01:41:51.782Z","path":"tomato_clock/index.html","layout":"page","_id":"clo56i5vl0023fc3udtba3p5i","content":"\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":0,"excerpt":"","more":"\n"},{"title":"工具","date":"2022-07-13T07:23:02.000Z","_content":"{% flink %}\n- class_name: 镜像站\n class_desc: 常用的PyPi/npm/SDK镜像站\n link_list:\n - name: TUNA\n link: https://mirrors.tuna.tsinghua.edu.cn\n avatar: https://mirrors.tuna.tsinghua.edu.cn/static/img/logo-small.png\n descr: 清华大学开源镜像站\n - name: 豆瓣PYPI源\n link: https://pypi.douban.io/simple\n avatar: https://www.douban.com/favicon.ico\n descr: 豆瓣PYPI镜像站\n - name: jsDelivr\n link: https://https://github.com/jsdelivr/jsdelivr\n avatar: https://camo.githubusercontent.com/ef61c154fec4fa5b935957f63561fd15bbd7713c9ae381b955a4dadcdc5457a3/68747470733a2f2f7777772e6a7364656c6976722e636f6d2f696d672f69636f6e5f323536783235362e706e67\n descr: jsDelivr静态资源加速(GFW已墙)\n - name: unpkg\n link: https://cdn1.tianli0.top/npm\n avatar: https://cdn1.tianli0.top/npm/favicon.ico\n descr: 另一个静态资源加速CDN(没墙)\n- class_name: 资源下载类\n class_desc: 好用的资源下载/收录站\n link_list:\n - name: MSDN,我告诉你\n link: https://msdn.itellyou.cn\n avatar: https://msdn.itellyou.cn/favicon.ico\n descr: 微软MSDNED2K镜像收录站\n - name: 唧唧Down\n link: https://client.jijidown.com/\n avatar: https://client.jijidown.com/images/favicon.ico\n descr: 下载B站视频\n - name: 无损生活\n link: https://flac.life/\n avatar: https://flac.life/favicon.png\n descr: 免费下载全网绝大部分无损音乐\n - name: 百度网盘简易下载助手\n link: https://greasyfork.org/zh-CN/scripts/418182-%E7%99%BE%E5%BA%A6%E7%BD%91%E7%9B%98%E7%AE%80%E6%98%93%E4%B8%8B%E8%BD%BD%E5%8A%A9%E6%89%8B-%E7%9B%B4%E9%93%BE%E4%B8%8B%E8%BD%BD%E5%A4%8D%E6%B4%BB%E7%89%88\n avatar: /img/rjxm.jpg\n descr: 特别好用的bd网盘破解器(不知道为什么公众号分享很怕敏感词)\n- class_name: 日常工具\n class_desc: 常用日常工具\n link_list:\n - name: 计时器\n link: https://naozhong.net.cn/jishiqi/\n avatar: https://naozhong.net.cn/favicon.ico\n descr: 闹钟网计时器\n- class_name: 图片系列\n class_desc: 关于图片的工具\n link_list:\n - name: Bigjpg\n link: //bigjpg.com\n avatar: https://bigjpg.com/favicon.ico\n descr: 高清修复图片与降噪\n - name: waifu2x\n link: //waifu2x.io\n avatar: https://baidu.com\n descr: 高清修复图片与降噪,性能貌似好一点\n - name: jpgrm\n link: https://jpgrm.com/\n avatar: https://jpgrm.com/htdocs/favicon.ico\n descr: 高清修复图片与降噪\n - name: Sheilds\n link: https://shields.io/\n avatar: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAABE0lEQVR4AWJkAIKkpCQ7TU3NySIiIlosQMCABejbMWAFf//8YXj77vWn27duZWVGz1nKGBYWZiQkJHSIkZGRmwEPCMxiwAt+/fz3/86VL8EAbuiiAKEoiMLwGcHdCQMBiUAlurDErmJ75tmKP8A3oiJyuF6vAxglws+0C5pv81GJaJdzhlWMMJssaaXM3C0CpmSDLAQtgH3BiCIVB2NRMKWEIoXQMBiLgjHGP9nQ+6ZPLgqGgs9xriDovX8A6Jjgw8ZyIigzn5xz+yZ+6O/tsz7Hy8tb/PLlywPAHMOFT/G3LwRc95fxPyerQCojuKwLDLQAGjoJWIzpAw1mw6bB0guHSYyMDBysnO/5hUTTGvM3rQEAI8qCnLiY3O4AAAAASUVORK5CYII=\n descr: 制作Github项目徽章\n - name: 极简壁纸\n link: https://bz.zzzmh.cn/index\n avatar: https://bz.zzzmh.cn/favicon.ico\n descr: 海量高清壁纸美图&二次元图片\n- class_name: 常用测试网站\n class_desc: 测试一些基础功能\n link_list:\n - name: 还没做完呢\n link: https://114514.hentai/\n avatar: //1919810.xxx\n descr: 你瞅啥?还妹做完呢!\n\n{% endflink %}\n","source":"tools/index.md","raw":"---\ntitle: 工具\ndate: 2022-07-13 15:23:02\n---\n{% flink %}\n- class_name: 镜像站\n class_desc: 常用的PyPi/npm/SDK镜像站\n link_list:\n - name: TUNA\n link: https://mirrors.tuna.tsinghua.edu.cn\n avatar: https://mirrors.tuna.tsinghua.edu.cn/static/img/logo-small.png\n descr: 清华大学开源镜像站\n - name: 豆瓣PYPI源\n link: https://pypi.douban.io/simple\n avatar: https://www.douban.com/favicon.ico\n descr: 豆瓣PYPI镜像站\n - name: jsDelivr\n link: https://https://github.com/jsdelivr/jsdelivr\n avatar: https://camo.githubusercontent.com/ef61c154fec4fa5b935957f63561fd15bbd7713c9ae381b955a4dadcdc5457a3/68747470733a2f2f7777772e6a7364656c6976722e636f6d2f696d672f69636f6e5f323536783235362e706e67\n descr: jsDelivr静态资源加速(GFW已墙)\n - name: unpkg\n link: https://cdn1.tianli0.top/npm\n avatar: https://cdn1.tianli0.top/npm/favicon.ico\n descr: 另一个静态资源加速CDN(没墙)\n- class_name: 资源下载类\n class_desc: 好用的资源下载/收录站\n link_list:\n - name: MSDN,我告诉你\n link: https://msdn.itellyou.cn\n avatar: https://msdn.itellyou.cn/favicon.ico\n descr: 微软MSDNED2K镜像收录站\n - name: 唧唧Down\n link: https://client.jijidown.com/\n avatar: https://client.jijidown.com/images/favicon.ico\n descr: 下载B站视频\n - name: 无损生活\n link: https://flac.life/\n avatar: https://flac.life/favicon.png\n descr: 免费下载全网绝大部分无损音乐\n - name: 百度网盘简易下载助手\n link: https://greasyfork.org/zh-CN/scripts/418182-%E7%99%BE%E5%BA%A6%E7%BD%91%E7%9B%98%E7%AE%80%E6%98%93%E4%B8%8B%E8%BD%BD%E5%8A%A9%E6%89%8B-%E7%9B%B4%E9%93%BE%E4%B8%8B%E8%BD%BD%E5%A4%8D%E6%B4%BB%E7%89%88\n avatar: /img/rjxm.jpg\n descr: 特别好用的bd网盘破解器(不知道为什么公众号分享很怕敏感词)\n- class_name: 日常工具\n class_desc: 常用日常工具\n link_list:\n - name: 计时器\n link: https://naozhong.net.cn/jishiqi/\n avatar: https://naozhong.net.cn/favicon.ico\n descr: 闹钟网计时器\n- class_name: 图片系列\n class_desc: 关于图片的工具\n link_list:\n - name: Bigjpg\n link: //bigjpg.com\n avatar: https://bigjpg.com/favicon.ico\n descr: 高清修复图片与降噪\n - name: waifu2x\n link: //waifu2x.io\n avatar: https://baidu.com\n descr: 高清修复图片与降噪,性能貌似好一点\n - name: jpgrm\n link: https://jpgrm.com/\n avatar: https://jpgrm.com/htdocs/favicon.ico\n descr: 高清修复图片与降噪\n - name: Sheilds\n link: https://shields.io/\n avatar: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAABE0lEQVR4AWJkAIKkpCQ7TU3NySIiIlosQMCABejbMWAFf//8YXj77vWn27duZWVGz1nKGBYWZiQkJHSIkZGRmwEPCMxiwAt+/fz3/86VL8EAbuiiAKEoiMLwGcHdCQMBiUAlurDErmJ75tmKP8A3oiJyuF6vAxglws+0C5pv81GJaJdzhlWMMJssaaXM3C0CpmSDLAQtgH3BiCIVB2NRMKWEIoXQMBiLgjHGP9nQ+6ZPLgqGgs9xriDovX8A6Jjgw8ZyIigzn5xz+yZ+6O/tsz7Hy8tb/PLlywPAHMOFT/G3LwRc95fxPyerQCojuKwLDLQAGjoJWIzpAw1mw6bB0guHSYyMDBysnO/5hUTTGvM3rQEAI8qCnLiY3O4AAAAASUVORK5CYII=\n descr: 制作Github项目徽章\n - name: 极简壁纸\n link: https://bz.zzzmh.cn/index\n avatar: https://bz.zzzmh.cn/favicon.ico\n descr: 海量高清壁纸美图&二次元图片\n- class_name: 常用测试网站\n class_desc: 测试一些基础功能\n link_list:\n - name: 还没做完呢\n link: https://114514.hentai/\n avatar: //1919810.xxx\n descr: 你瞅啥?还妹做完呢!\n\n{% endflink %}\n","updated":"2023-10-21T01:08:55.968Z","path":"tools/index.html","comments":1,"layout":"page","_id":"clo56i5vl0025fc3udsrr9qqk","content":"\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":359,"excerpt":"","more":"\n"},{"title":"网站更新日志","date":"2023-10-01T11:56:00.000Z","_content":"\n\n\nCrypTek v1.0.0 2023-10-01\n\n经过了深思熟虑,博客主题独立啦!\n\n现在的主题叫做CrypTek,具体见:\n{% link2 博客正式独立主题啦!,Tankenqiの小窝,yisous.xyz/posts/a1078b2d %}\n\n目前博客有:\n\n1. 更好的右键菜单\n2. 留言弹幕\n3. 博客设置(功能贼多大家自己看)\n4. 不错的UI,至今为止主css(`style.css`)有3k行\n5. 一些小功能比如公祭日弹窗自动欢迎等\n\n大概就是这些了。\n\nAcryple v1.0.110 2022-12-13\n\n1. 加入pwa\n2. 全站采用存储桶加速,可惜并没有卵用\n3. 很多资源转为了白嫖eleme\n4. 抛弃metingjs,目前aplayer的歌曲托管在eleme npm镜像中\n5. 友链添加随机头像\n6. 博客设置画饼的三个功能仍未修复 qwq\n7. 修复一些bug\n8. 大改swiper,参考自[Leonus](https://leonus.cn)\n9. 完成Build101的大部分饼\n10. 修复了朋友圈爬取bug\n11. sw换回cyfan\n12. 套上了灵天盾亚太CDN\n13. 因为性能问题,移除了文章日历\n14. 给导航栏加上滚动动画(画饼)\n15. bb布局重构(画饼)\n16. 分类标签栏bug修复(画饼)\n17. 语雀云端写作(因bug已回滚)\n18. gulp(因bug已回滚)\n19. 文章进度显示(画饼)\n20. 修复pjax的bug\n21. 右键菜单功能完善\n\nAcryple v1.0.101 2022-12-06\n\n*(PS:部分画大饼*\n\n1. 壮举:适配pjax!!!\n2. 修复黑幕的bug\n3. 修复评论弹幕dom错误,溢出的bug\n4. 弹幕换用swiper方案,并且优化样式\n5. 首页bb增加天数显示,以及换用swiper(预计)\n6. 修复一些bug(e.g.aplayer、博客设置\n7. 优化部分动画/样式\n8. 完善博客控制面板,仍有部分未完工\n9. 修复部分文章页面溢出的bug\n10. 悼念某人,banner换图\n11. pace换用[xlenco](https://xlenco.eu.org/posts/769f.html)的胶囊方案\n12. 由于未知特性删除了pjax的加载动画,首次保留\n13. 部分资源换用缤纷云\n14. 换用空梦的sw\n15. 不断优化加载速度ing...\n16. 修复首页轮播bug(预计)\n17. 评论样式修改,预计添加用户tag功能\n18. 更换背景没有时效限制了\n19. 欢迎文本\n20. 左右栏切换\n21. 弹幕开关设置自动显隐\n22. 落樱特效\n23. aplayer显隐功能\n24. 明暗模式自动切换、固定导航栏功能(预计)\n25. 边栏样式修改\n26. 修复点赞第一赞没反应的bug\n27. 修复ghactions部署没有npm缓存的bug~~tnnd我等十几分钟安装依赖等几个月了,结果是顺序反了~~\n28. 目前朋友圈后端出现了bug,导致不更新,请静待修复\n\n![](https://bu.dusays.com/2022/12/06/638f29976b113.png)\n![](https://bu.dusays.com/2022/12/06/638f29976b113.png)\n![](https://bu.dusays.com/2022/12/06/638f29a959659.png)\n\nAcryple v1.0.100 2022-12-04\n\n1. 修复部分bug(不,特性\n2. 优化部分动画/样式\n3. 修改右键菜单\n4. 重写博客设置,并将 `rightside` 的部分功能移动到博客设置中,灵感来源于[ichika](https://ichika.cc)*(未完工*\n5. 支持隐藏 ASide 了\n6. 短暂变灰\n7. 修复公祭日js的bug\n8. 修复右键菜单在主页也能开启阅读模式的bug\n9. 优化手机端阅读体验,去卡片化\n10. 优化latex样式\n11. 修复部分分辨率下无导航栏的bug\n12. aplayer的体验更好了\n13. 优化部分样式,适配部分还未适配的黑暗模式\n14. 加了一个字体\n15. 重写分类和标签、归档页的样式,来源于[ichika](https://ichika.cc/Article/beautiful_MyBeautiful/)\n16. 优化页脚查看体验\n17. 优化网站性能\n18. 支持全屏\n19. css 5k+ qpzc\n20. 解封辣!!!\n21. 究极跳号?!~~CRT18:?!~~\n\n![](https://bu.dusays.com/2022/12/05/638d6b9b8a50f.png)\n\nAcryple v1.0.92\n\n1. 修复部分bug(不,特性\n2. 优化部分样式\n3. 更改了博客设置的部分主题色\n4. pages页面在Acrylic主题下的背景得到了改善\n5. 更改加载页面背景\n6. 重新进行部分断点\n7. 把博客api\\服务全部迁移到了[另一个github账号](https://github.com/cqxflyx)~~(垃圾桶)~~上\n8. 优化搜索UI\n9. 对butterfly4.5.1进行了选择性同步(优化繁体字库)\n10. 疫情退退退awa\n\nAcryple v1.0.91\n\n1. 修复部分bug(不,特性\n2. 为APlayer进行完善\n3. 添加早报、木鱼、空调页面,参考[Chuckle](https://chuckle.top)\n4. 更改关于页面,参考[安知鱼](https://anzhiy.cn)的[教程](https://anzhiy.cn/posts/e62b.html)\n5. 尝试npm全站静态化,最终失败放弃qwq\n6. 优化sw,加载速度略有提升\n7. 新增文章统计\n8. 优化部分样式\n\nAcryple v1.0.81 2022-11-23\n\n1. 修复部分bug(不,特性\n2. 优化性能问题,对弹幕进行了节流\n3. 添加APlayer,可惜没有pjax qwq\n4. 优化弹幕(更洪化了)\n5. 调整网站布局\n6. 修改一些样式\n7. PS:在1.0.51偷偷加了一号字号你们发现没有(doge)\n\n![](https://bu.dusays.com/2022/11/23/637dc9e31b83d.png)\n\n![](https://bu.dusays.com/2022/11/23/637dc909565a5.png)\n\n![](https://bu.dusays.com/2022/11/23/637dc958af6ef.png)\n\n![](https://bu.dusays.com/2022/11/23/637dca595e663.png)\n\nAcryple v1.0.51\n\n1. 修复部分bug(不,特性\n2. 优化性能问题(但是好像还是没毛提升\n3. 换用Twikoo-magic表情包\n4. 为了OI添加$\\textbf{ \\KaTeX}$\n5. 修复跳转链接因原有bug被迫使原页面刷新的bug\n\nAcryple v1.0.14 2022-11-10\n\n1. 修复部分bug(不,特性\n2. 优化性能问题(但是好像还是没毛提升\n3. 增加浏览器过期提醒以及banIE,参考[chuckle](https://chuckle.top/article/e61f6567.html)以及b站\n4. 增加fps显示\n5. 评论表情添加颜文字\n6. 修复手机端侧边栏bug\n\n![1668068215334.png](https://bu.dusays.com/2022/11/10/636cb378cb6f8.png)\n\n![1668068189449.png](https://bu.dusays.com/2022/11/10/636cb35f2f686.png)\n\n![1668068277934.png](https://bu.dusays.com/2022/11/10/636cb3ba2c1af.png)\n\n![1668069244663.png](https://bu.dusays.com/2022/11/10/636cb77e05a3f.png)\n\n![1668068328066.png](https://bu.dusays.com/2022/11/10/636cb3ea2923d.png)\n\nPS:作为一个萌新OIer依然没有考虑发oi文 ╮(╯▽╰)╭ \n\n{% hideToggle 以前的更新日志 %}\n哔哩哔哩 (゜-゜)つロ 干杯!\n\n{% timeline 2022 %}\n\n\n\n终于弄好网站了,庆祝一下🎉\n\nGitalk不知道为什么不显示出来...\n\n\n\n\n\n小更新,修改细节\n\n作者的Html实在太菜了,效果并不好\n\n\n\n\n\n大更新\n\n修改了很多ui\n\n\n\n\n\n大更新\n\n修改细节UI和友链部分,增加吐槽部分\n\n\n\n\n\n小更新,做好一些功能并且写了第一篇文章\n\n\n\n\n\n大更新,更改首页布局,增加首页分区\n\n\n\n\n\n小更新,修改细节,适配手机端,修复bug,说说由Artitalk换为BBtalk\n\n\n\n\n\n前面几天忘记写更新了,更新了很多UI和功能。。。\n\n\n\n\n\n~~前面几天又忘记写更新了~~小小修改了一些布局,把鸽了很久的博客写完了~~并且还加了萌百的黑幕,没有你知道的太多了差评~~\n\n\n\n\n\n~~前面几天又双忘记写更新了~~折腾了很多,加了自己的域名,把你知道的太多了弄出来了,并且修复了很多js的bug,把unpkg换成fastly.jsdelivr或者elemecdn,提升速度(竟然有人加了我友链,怎么知道这个网站的?)\n\n\n\n\n\n~~前面几天又双叒忘记写更新了~~还是折腾了很多,按照冰糖红茶大佬们的方法加了不少东西,比如那个人潮汹涌模拟器(主页的)、文章点赞、无缝跳转等等,换成jsdelivr加速,同时也在最大化利用GoormIDE,不过在险些没有数据之后就尽可能迁移到了其它没有风险的平台。\n\n\n\n最近在糖果屋群友们的建议和帮助下修改了很多功能,以后每隔一段时间都会写详细的日志而不是像前面简单概括了。\n\n1. 留言板的弹幕是真的像b站视频弹幕了,过一段时间修复了bug之后放教程\n2. 新增博客设置,做了一个极简风的主题,支持更换主题色,也可以换回之前的主题,可以禁用模糊效果和开启硬件加速提升性能\n3. 修复了部分排版bug,对safari进行了一些适应,感谢Apple Store和洪哥的帮助。\n4. 增加了hover的缩放效果,有层次感\n5. 优化动画\n6. 修复留言弹幕、右键菜单的bug并且把新版的代码更新到文章中\n7. 优化细节样式\n8. 新增最新文章标记\n9. 总算部署好朋友圈了!leancloud国内版垃圾!\n\n{% endtimeline %}\n{% endhideToggle %}","source":"update/index.md","raw":"---\ntitle: 网站更新日志\ndate: 2023-10-1 19:56:00\n---\n\n\n\nCrypTek v1.0.0 2023-10-01\n\n经过了深思熟虑,博客主题独立啦!\n\n现在的主题叫做CrypTek,具体见:\n{% link2 博客正式独立主题啦!,Tankenqiの小窝,yisous.xyz/posts/a1078b2d %}\n\n目前博客有:\n\n1. 更好的右键菜单\n2. 留言弹幕\n3. 博客设置(功能贼多大家自己看)\n4. 不错的UI,至今为止主css(`style.css`)有3k行\n5. 一些小功能比如公祭日弹窗自动欢迎等\n\n大概就是这些了。\n\nAcryple v1.0.110 2022-12-13\n\n1. 加入pwa\n2. 全站采用存储桶加速,可惜并没有卵用\n3. 很多资源转为了白嫖eleme\n4. 抛弃metingjs,目前aplayer的歌曲托管在eleme npm镜像中\n5. 友链添加随机头像\n6. 博客设置画饼的三个功能仍未修复 qwq\n7. 修复一些bug\n8. 大改swiper,参考自[Leonus](https://leonus.cn)\n9. 完成Build101的大部分饼\n10. 修复了朋友圈爬取bug\n11. sw换回cyfan\n12. 套上了灵天盾亚太CDN\n13. 因为性能问题,移除了文章日历\n14. 给导航栏加上滚动动画(画饼)\n15. bb布局重构(画饼)\n16. 分类标签栏bug修复(画饼)\n17. 语雀云端写作(因bug已回滚)\n18. gulp(因bug已回滚)\n19. 文章进度显示(画饼)\n20. 修复pjax的bug\n21. 右键菜单功能完善\n\nAcryple v1.0.101 2022-12-06\n\n*(PS:部分画大饼*\n\n1. 壮举:适配pjax!!!\n2. 修复黑幕的bug\n3. 修复评论弹幕dom错误,溢出的bug\n4. 弹幕换用swiper方案,并且优化样式\n5. 首页bb增加天数显示,以及换用swiper(预计)\n6. 修复一些bug(e.g.aplayer、博客设置\n7. 优化部分动画/样式\n8. 完善博客控制面板,仍有部分未完工\n9. 修复部分文章页面溢出的bug\n10. 悼念某人,banner换图\n11. pace换用[xlenco](https://xlenco.eu.org/posts/769f.html)的胶囊方案\n12. 由于未知特性删除了pjax的加载动画,首次保留\n13. 部分资源换用缤纷云\n14. 换用空梦的sw\n15. 不断优化加载速度ing...\n16. 修复首页轮播bug(预计)\n17. 评论样式修改,预计添加用户tag功能\n18. 更换背景没有时效限制了\n19. 欢迎文本\n20. 左右栏切换\n21. 弹幕开关设置自动显隐\n22. 落樱特效\n23. aplayer显隐功能\n24. 明暗模式自动切换、固定导航栏功能(预计)\n25. 边栏样式修改\n26. 修复点赞第一赞没反应的bug\n27. 修复ghactions部署没有npm缓存的bug~~tnnd我等十几分钟安装依赖等几个月了,结果是顺序反了~~\n28. 目前朋友圈后端出现了bug,导致不更新,请静待修复\n\n![](https://bu.dusays.com/2022/12/06/638f29976b113.png)\n![](https://bu.dusays.com/2022/12/06/638f29976b113.png)\n![](https://bu.dusays.com/2022/12/06/638f29a959659.png)\n\nAcryple v1.0.100 2022-12-04\n\n1. 修复部分bug(不,特性\n2. 优化部分动画/样式\n3. 修改右键菜单\n4. 重写博客设置,并将 `rightside` 的部分功能移动到博客设置中,灵感来源于[ichika](https://ichika.cc)*(未完工*\n5. 支持隐藏 ASide 了\n6. 短暂变灰\n7. 修复公祭日js的bug\n8. 修复右键菜单在主页也能开启阅读模式的bug\n9. 优化手机端阅读体验,去卡片化\n10. 优化latex样式\n11. 修复部分分辨率下无导航栏的bug\n12. aplayer的体验更好了\n13. 优化部分样式,适配部分还未适配的黑暗模式\n14. 加了一个字体\n15. 重写分类和标签、归档页的样式,来源于[ichika](https://ichika.cc/Article/beautiful_MyBeautiful/)\n16. 优化页脚查看体验\n17. 优化网站性能\n18. 支持全屏\n19. css 5k+ qpzc\n20. 解封辣!!!\n21. 究极跳号?!~~CRT18:?!~~\n\n![](https://bu.dusays.com/2022/12/05/638d6b9b8a50f.png)\n\nAcryple v1.0.92\n\n1. 修复部分bug(不,特性\n2. 优化部分样式\n3. 更改了博客设置的部分主题色\n4. pages页面在Acrylic主题下的背景得到了改善\n5. 更改加载页面背景\n6. 重新进行部分断点\n7. 把博客api\\服务全部迁移到了[另一个github账号](https://github.com/cqxflyx)~~(垃圾桶)~~上\n8. 优化搜索UI\n9. 对butterfly4.5.1进行了选择性同步(优化繁体字库)\n10. 疫情退退退awa\n\nAcryple v1.0.91\n\n1. 修复部分bug(不,特性\n2. 为APlayer进行完善\n3. 添加早报、木鱼、空调页面,参考[Chuckle](https://chuckle.top)\n4. 更改关于页面,参考[安知鱼](https://anzhiy.cn)的[教程](https://anzhiy.cn/posts/e62b.html)\n5. 尝试npm全站静态化,最终失败放弃qwq\n6. 优化sw,加载速度略有提升\n7. 新增文章统计\n8. 优化部分样式\n\nAcryple v1.0.81 2022-11-23\n\n1. 修复部分bug(不,特性\n2. 优化性能问题,对弹幕进行了节流\n3. 添加APlayer,可惜没有pjax qwq\n4. 优化弹幕(更洪化了)\n5. 调整网站布局\n6. 修改一些样式\n7. PS:在1.0.51偷偷加了一号字号你们发现没有(doge)\n\n![](https://bu.dusays.com/2022/11/23/637dc9e31b83d.png)\n\n![](https://bu.dusays.com/2022/11/23/637dc909565a5.png)\n\n![](https://bu.dusays.com/2022/11/23/637dc958af6ef.png)\n\n![](https://bu.dusays.com/2022/11/23/637dca595e663.png)\n\nAcryple v1.0.51\n\n1. 修复部分bug(不,特性\n2. 优化性能问题(但是好像还是没毛提升\n3. 换用Twikoo-magic表情包\n4. 为了OI添加$\\textbf{ \\KaTeX}$\n5. 修复跳转链接因原有bug被迫使原页面刷新的bug\n\nAcryple v1.0.14 2022-11-10\n\n1. 修复部分bug(不,特性\n2. 优化性能问题(但是好像还是没毛提升\n3. 增加浏览器过期提醒以及banIE,参考[chuckle](https://chuckle.top/article/e61f6567.html)以及b站\n4. 增加fps显示\n5. 评论表情添加颜文字\n6. 修复手机端侧边栏bug\n\n![1668068215334.png](https://bu.dusays.com/2022/11/10/636cb378cb6f8.png)\n\n![1668068189449.png](https://bu.dusays.com/2022/11/10/636cb35f2f686.png)\n\n![1668068277934.png](https://bu.dusays.com/2022/11/10/636cb3ba2c1af.png)\n\n![1668069244663.png](https://bu.dusays.com/2022/11/10/636cb77e05a3f.png)\n\n![1668068328066.png](https://bu.dusays.com/2022/11/10/636cb3ea2923d.png)\n\nPS:作为一个萌新OIer依然没有考虑发oi文 ╮(╯▽╰)╭ \n\n{% hideToggle 以前的更新日志 %}\n哔哩哔哩 (゜-゜)つロ 干杯!\n\n{% timeline 2022 %}\n\n\n\n终于弄好网站了,庆祝一下🎉\n\nGitalk不知道为什么不显示出来...\n\n\n\n\n\n小更新,修改细节\n\n作者的Html实在太菜了,效果并不好\n\n\n\n\n\n大更新\n\n修改了很多ui\n\n\n\n\n\n大更新\n\n修改细节UI和友链部分,增加吐槽部分\n\n\n\n\n\n小更新,做好一些功能并且写了第一篇文章\n\n\n\n\n\n大更新,更改首页布局,增加首页分区\n\n\n\n\n\n小更新,修改细节,适配手机端,修复bug,说说由Artitalk换为BBtalk\n\n\n\n\n\n前面几天忘记写更新了,更新了很多UI和功能。。。\n\n\n\n\n\n~~前面几天又忘记写更新了~~小小修改了一些布局,把鸽了很久的博客写完了~~并且还加了萌百的黑幕,没有你知道的太多了差评~~\n\n\n\n\n\n~~前面几天又双忘记写更新了~~折腾了很多,加了自己的域名,把你知道的太多了弄出来了,并且修复了很多js的bug,把unpkg换成fastly.jsdelivr或者elemecdn,提升速度(竟然有人加了我友链,怎么知道这个网站的?)\n\n\n\n\n\n~~前面几天又双叒忘记写更新了~~还是折腾了很多,按照冰糖红茶大佬们的方法加了不少东西,比如那个人潮汹涌模拟器(主页的)、文章点赞、无缝跳转等等,换成jsdelivr加速,同时也在最大化利用GoormIDE,不过在险些没有数据之后就尽可能迁移到了其它没有风险的平台。\n\n\n\n最近在糖果屋群友们的建议和帮助下修改了很多功能,以后每隔一段时间都会写详细的日志而不是像前面简单概括了。\n\n1. 留言板的弹幕是真的像b站视频弹幕了,过一段时间修复了bug之后放教程\n2. 新增博客设置,做了一个极简风的主题,支持更换主题色,也可以换回之前的主题,可以禁用模糊效果和开启硬件加速提升性能\n3. 修复了部分排版bug,对safari进行了一些适应,感谢Apple Store和洪哥的帮助。\n4. 增加了hover的缩放效果,有层次感\n5. 优化动画\n6. 修复留言弹幕、右键菜单的bug并且把新版的代码更新到文章中\n7. 优化细节样式\n8. 新增最新文章标记\n9. 总算部署好朋友圈了!leancloud国内版垃圾!\n\n{% endtimeline %}\n{% endhideToggle %}","updated":"2023-10-22T02:49:39.862Z","path":"update/index.html","comments":1,"layout":"page","_id":"clo56i5vl0028fc3ubksd540r","content":"\n

CrypTek v1.0.0 2023-10-01

\n

经过了深思熟虑,博客主题独立啦!

\n

现在的主题叫做CrypTek,具体见:

\n\n \n \n \n

目前博客有:

\n
    \n
  1. 更好的右键菜单
  2. \n
  3. 留言弹幕
  4. \n
  5. 博客设置(功能贼多大家自己看)
  6. \n
  7. 不错的UI,至今为止主css(style.css)有3k行
  8. \n
  9. 一些小功能比如公祭日弹窗自动欢迎等
  10. \n
\n

大概就是这些了。

\n

Acryple v1.0.110 2022-12-13

\n
    \n
  1. 加入pwa
  2. \n
  3. 全站采用存储桶加速,可惜并没有卵用
  4. \n
  5. 很多资源转为了白嫖eleme
  6. \n
  7. 抛弃metingjs,目前aplayer的歌曲托管在eleme npm镜像中
  8. \n
  9. 友链添加随机头像
  10. \n
  11. 博客设置画饼的三个功能仍未修复 qwq
  12. \n
  13. 修复一些bug
  14. \n
  15. 大改swiper,参考自Leonus
  16. \n
  17. 完成Build101的大部分饼
  18. \n
  19. 修复了朋友圈爬取bug
  20. \n
  21. sw换回cyfan
  22. \n
  23. 套上了灵天盾亚太CDN
  24. \n
  25. 因为性能问题,移除了文章日历
  26. \n
  27. 给导航栏加上滚动动画(画饼)
  28. \n
  29. bb布局重构(画饼)
  30. \n
  31. 分类标签栏bug修复(画饼)
  32. \n
  33. 语雀云端写作(因bug已回滚)
  34. \n
  35. gulp(因bug已回滚)
  36. \n
  37. 文章进度显示(画饼)
  38. \n
  39. 修复pjax的bug
  40. \n
  41. 右键菜单功能完善
  42. \n
\n

Acryple v1.0.101 2022-12-06

\n

(PS:部分画大饼

\n
    \n
  1. 壮举:适配pjax!!!
  2. \n
  3. 修复黑幕的bug
  4. \n
  5. 修复评论弹幕dom错误,溢出的bug
  6. \n
  7. 弹幕换用swiper方案,并且优化样式
  8. \n
  9. 首页bb增加天数显示,以及换用swiper(预计)
  10. \n
  11. 修复一些bug(e.g.aplayer、博客设置
  12. \n
  13. 优化部分动画/样式
  14. \n
  15. 完善博客控制面板,仍有部分未完工
  16. \n
  17. 修复部分文章页面溢出的bug
  18. \n
  19. 悼念某人,banner换图
  20. \n
  21. pace换用xlenco的胶囊方案
  22. \n
  23. 由于未知特性删除了pjax的加载动画,首次保留
  24. \n
  25. 部分资源换用缤纷云
  26. \n
  27. 换用空梦的sw
  28. \n
  29. 不断优化加载速度ing…
  30. \n
  31. 修复首页轮播bug(预计)
  32. \n
  33. 评论样式修改,预计添加用户tag功能
  34. \n
  35. 更换背景没有时效限制了
  36. \n
  37. 欢迎文本
  38. \n
  39. 左右栏切换
  40. \n
  41. 弹幕开关设置自动显隐
  42. \n
  43. 落樱特效
  44. \n
  45. aplayer显隐功能
  46. \n
  47. 明暗模式自动切换、固定导航栏功能(预计)
  48. \n
  49. 边栏样式修改
  50. \n
  51. 修复点赞第一赞没反应的bug
  52. \n
  53. 修复ghactions部署没有npm缓存的bugtnnd我等十几分钟安装依赖等几个月了,结果是顺序反了
  54. \n
  55. 目前朋友圈后端出现了bug,导致不更新,请静待修复
  56. \n
\n

\"\"
\n\"\"
\n\"\"

\n

Acryple v1.0.100 2022-12-04

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化部分动画/样式
  4. \n
  5. 修改右键菜单
  6. \n
  7. 重写博客设置,并将 rightside 的部分功能移动到博客设置中,灵感来源于ichika(未完工
  8. \n
  9. 支持隐藏 ASide 了
  10. \n
  11. 短暂变灰
  12. \n
  13. 修复公祭日js的bug
  14. \n
  15. 修复右键菜单在主页也能开启阅读模式的bug
  16. \n
  17. 优化手机端阅读体验,去卡片化
  18. \n
  19. 优化latex样式
  20. \n
  21. 修复部分分辨率下无导航栏的bug
  22. \n
  23. aplayer的体验更好了
  24. \n
  25. 优化部分样式,适配部分还未适配的黑暗模式
  26. \n
  27. 加了一个字体
  28. \n
  29. 重写分类和标签、归档页的样式,来源于ichika
  30. \n
  31. 优化页脚查看体验
  32. \n
  33. 优化网站性能
  34. \n
  35. 支持全屏
  36. \n
  37. css 5k+ qpzc
  38. \n
  39. 解封辣!!!
  40. \n
  41. 究极跳号?!CRT18:?!
  42. \n
\n

\"\"

\n

Acryple v1.0.92

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化部分样式
  4. \n
  5. 更改了博客设置的部分主题色
  6. \n
  7. pages页面在Acrylic主题下的背景得到了改善
  8. \n
  9. 更改加载页面背景
  10. \n
  11. 重新进行部分断点
  12. \n
  13. 把博客api\\服务全部迁移到了另一个github账号~~(垃圾桶)~~上
  14. \n
  15. 优化搜索UI
  16. \n
  17. 对butterfly4.5.1进行了选择性同步(优化繁体字库)
  18. \n
  19. 疫情退退退awa
  20. \n
\n

Acryple v1.0.91

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 为APlayer进行完善
  4. \n
  5. 添加早报、木鱼、空调页面,参考Chuckle
  6. \n
  7. 更改关于页面,参考安知鱼教程
  8. \n
  9. 尝试npm全站静态化,最终失败放弃qwq
  10. \n
  11. 优化sw,加载速度略有提升
  12. \n
  13. 新增文章统计
  14. \n
  15. 优化部分样式
  16. \n
\n

Acryple v1.0.81 2022-11-23

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化性能问题,对弹幕进行了节流
  4. \n
  5. 添加APlayer,可惜没有pjax qwq
  6. \n
  7. 优化弹幕(更洪化了)
  8. \n
  9. 调整网站布局
  10. \n
  11. 修改一些样式
  12. \n
  13. PS:在1.0.51偷偷加了一号字号你们发现没有(doge)
  14. \n
\n

\"\"

\n

\"\"

\n

\"\"

\n

\"\"

\n

Acryple v1.0.51

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化性能问题(但是好像还是没毛提升
  4. \n
  5. 换用Twikoo-magic表情包
  6. \n
  7. 为了OI添加 KaTeX\\textbf{ \\KaTeX} KATEX
  8. \n
  9. 修复跳转链接因原有bug被迫使原页面刷新的bug
  10. \n
\n

Acryple v1.0.14 2022-11-10

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化性能问题(但是好像还是没毛提升
  4. \n
  5. 增加浏览器过期提醒以及banIE,参考chuckle以及b站
  6. \n
  7. 增加fps显示
  8. \n
  9. 评论表情添加颜文字
  10. \n
  11. 修复手机端侧边栏bug
  12. \n
\n

\"1668068215334.png\"

\n

\"1668068189449.png\"

\n

\"1668068277934.png\"

\n

\"1668069244663.png\"

\n

\"1668068328066.png\"

\n

PS:作为一个萌新OIer依然没有考虑发oi文 ╮(╯▽╰)╭

\n
以前的更新日志

哔哩哔哩 (゜-゜)つロ 干杯!

\n

2022

\n

07-02

\n

终于弄好网站了,庆祝一下🎉

\n

Gitalk不知道为什么不显示出来…

\n

07-03

\n

小更新,修改细节

\n

作者的Html实在太菜了,效果并不好

\n

07-04

\n

大更新

\n

修改了很多ui

\n

07-05

\n

大更新

\n

修改细节UI和友链部分,增加吐槽部分

\n

07-06

\n

小更新,做好一些功能并且写了第一篇文章

\n

07-08

\n

大更新,更改首页布局,增加首页分区

\n

07-09

\n

小更新,修改细节,适配手机端,修复bug,说说由Artitalk换为BBtalk

\n

07-14

\n

前面几天忘记写更新了,更新了很多UI和功能。。。

\n

07-18

\n

前面几天又忘记写更新了小小修改了一些布局,把鸽了很久的博客写完了并且还加了萌百的黑幕,没有你知道的太多了差评

\n

07-22

\n

前面几天又双忘记写更新了折腾了很多,加了自己的域名,把你知道的太多了弄出来了,并且修复了很多js的bug,把unpkg换成fastly.jsdelivr或者elemecdn,提升速度(竟然有人加了我友链,怎么知道这个网站的?)

\n

08-12

\n

前面几天又双叒忘记写更新了还是折腾了很多,按照冰糖红茶大佬们的方法加了不少东西,比如那个人潮汹涌模拟器(主页的)、文章点赞、无缝跳转等等,换成jsdelivr加速,同时也在最大化利用GoormIDE,不过在险些没有数据之后就尽可能迁移到了其它没有风险的平台。

\n

08-25

\n

最近在糖果屋群友们的建议和帮助下修改了很多功能,以后每隔一段时间都会写详细的日志而不是像前面简单概括了。

\n
    \n
  1. 留言板的弹幕是真的像b站视频弹幕了,过一段时间修复了bug之后放教程
  2. \n
  3. 新增博客设置,做了一个极简风的主题,支持更换主题色,也可以换回之前的主题,可以禁用模糊效果和开启硬件加速提升性能
  4. \n
  5. 修复了部分排版bug,对safari进行了一些适应,感谢Apple Store和洪哥的帮助。
  6. \n
  7. 增加了hover的缩放效果,有层次感
  8. \n
  9. 优化动画
  10. \n
  11. 修复留言弹幕、右键菜单的bug并且把新版的代码更新到文章中
  12. \n
  13. 优化细节样式
  14. \n
  15. 新增最新文章标记
  16. \n
  17. 总算部署好朋友圈了!leancloud国内版垃圾!
  18. \n
\n
","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":2736,"excerpt":"","more":"\n

CrypTek v1.0.0 2023-10-01

\n

经过了深思熟虑,博客主题独立啦!

\n

现在的主题叫做CrypTek,具体见:

\n\n \n \n \n

目前博客有:

\n
    \n
  1. 更好的右键菜单
  2. \n
  3. 留言弹幕
  4. \n
  5. 博客设置(功能贼多大家自己看)
  6. \n
  7. 不错的UI,至今为止主css(style.css)有3k行
  8. \n
  9. 一些小功能比如公祭日弹窗自动欢迎等
  10. \n
\n

大概就是这些了。

\n

Acryple v1.0.110 2022-12-13

\n
    \n
  1. 加入pwa
  2. \n
  3. 全站采用存储桶加速,可惜并没有卵用
  4. \n
  5. 很多资源转为了白嫖eleme
  6. \n
  7. 抛弃metingjs,目前aplayer的歌曲托管在eleme npm镜像中
  8. \n
  9. 友链添加随机头像
  10. \n
  11. 博客设置画饼的三个功能仍未修复 qwq
  12. \n
  13. 修复一些bug
  14. \n
  15. 大改swiper,参考自Leonus
  16. \n
  17. 完成Build101的大部分饼
  18. \n
  19. 修复了朋友圈爬取bug
  20. \n
  21. sw换回cyfan
  22. \n
  23. 套上了灵天盾亚太CDN
  24. \n
  25. 因为性能问题,移除了文章日历
  26. \n
  27. 给导航栏加上滚动动画(画饼)
  28. \n
  29. bb布局重构(画饼)
  30. \n
  31. 分类标签栏bug修复(画饼)
  32. \n
  33. 语雀云端写作(因bug已回滚)
  34. \n
  35. gulp(因bug已回滚)
  36. \n
  37. 文章进度显示(画饼)
  38. \n
  39. 修复pjax的bug
  40. \n
  41. 右键菜单功能完善
  42. \n
\n

Acryple v1.0.101 2022-12-06

\n

(PS:部分画大饼

\n
    \n
  1. 壮举:适配pjax!!!
  2. \n
  3. 修复黑幕的bug
  4. \n
  5. 修复评论弹幕dom错误,溢出的bug
  6. \n
  7. 弹幕换用swiper方案,并且优化样式
  8. \n
  9. 首页bb增加天数显示,以及换用swiper(预计)
  10. \n
  11. 修复一些bug(e.g.aplayer、博客设置
  12. \n
  13. 优化部分动画/样式
  14. \n
  15. 完善博客控制面板,仍有部分未完工
  16. \n
  17. 修复部分文章页面溢出的bug
  18. \n
  19. 悼念某人,banner换图
  20. \n
  21. pace换用xlenco的胶囊方案
  22. \n
  23. 由于未知特性删除了pjax的加载动画,首次保留
  24. \n
  25. 部分资源换用缤纷云
  26. \n
  27. 换用空梦的sw
  28. \n
  29. 不断优化加载速度ing…
  30. \n
  31. 修复首页轮播bug(预计)
  32. \n
  33. 评论样式修改,预计添加用户tag功能
  34. \n
  35. 更换背景没有时效限制了
  36. \n
  37. 欢迎文本
  38. \n
  39. 左右栏切换
  40. \n
  41. 弹幕开关设置自动显隐
  42. \n
  43. 落樱特效
  44. \n
  45. aplayer显隐功能
  46. \n
  47. 明暗模式自动切换、固定导航栏功能(预计)
  48. \n
  49. 边栏样式修改
  50. \n
  51. 修复点赞第一赞没反应的bug
  52. \n
  53. 修复ghactions部署没有npm缓存的bugtnnd我等十几分钟安装依赖等几个月了,结果是顺序反了
  54. \n
  55. 目前朋友圈后端出现了bug,导致不更新,请静待修复
  56. \n
\n

\"\"
\n\"\"
\n\"\"

\n

Acryple v1.0.100 2022-12-04

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化部分动画/样式
  4. \n
  5. 修改右键菜单
  6. \n
  7. 重写博客设置,并将 rightside 的部分功能移动到博客设置中,灵感来源于ichika(未完工
  8. \n
  9. 支持隐藏 ASide 了
  10. \n
  11. 短暂变灰
  12. \n
  13. 修复公祭日js的bug
  14. \n
  15. 修复右键菜单在主页也能开启阅读模式的bug
  16. \n
  17. 优化手机端阅读体验,去卡片化
  18. \n
  19. 优化latex样式
  20. \n
  21. 修复部分分辨率下无导航栏的bug
  22. \n
  23. aplayer的体验更好了
  24. \n
  25. 优化部分样式,适配部分还未适配的黑暗模式
  26. \n
  27. 加了一个字体
  28. \n
  29. 重写分类和标签、归档页的样式,来源于ichika
  30. \n
  31. 优化页脚查看体验
  32. \n
  33. 优化网站性能
  34. \n
  35. 支持全屏
  36. \n
  37. css 5k+ qpzc
  38. \n
  39. 解封辣!!!
  40. \n
  41. 究极跳号?!CRT18:?!
  42. \n
\n

\"\"

\n

Acryple v1.0.92

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化部分样式
  4. \n
  5. 更改了博客设置的部分主题色
  6. \n
  7. pages页面在Acrylic主题下的背景得到了改善
  8. \n
  9. 更改加载页面背景
  10. \n
  11. 重新进行部分断点
  12. \n
  13. 把博客api\\服务全部迁移到了另一个github账号~~(垃圾桶)~~上
  14. \n
  15. 优化搜索UI
  16. \n
  17. 对butterfly4.5.1进行了选择性同步(优化繁体字库)
  18. \n
  19. 疫情退退退awa
  20. \n
\n

Acryple v1.0.91

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 为APlayer进行完善
  4. \n
  5. 添加早报、木鱼、空调页面,参考Chuckle
  6. \n
  7. 更改关于页面,参考安知鱼教程
  8. \n
  9. 尝试npm全站静态化,最终失败放弃qwq
  10. \n
  11. 优化sw,加载速度略有提升
  12. \n
  13. 新增文章统计
  14. \n
  15. 优化部分样式
  16. \n
\n

Acryple v1.0.81 2022-11-23

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化性能问题,对弹幕进行了节流
  4. \n
  5. 添加APlayer,可惜没有pjax qwq
  6. \n
  7. 优化弹幕(更洪化了)
  8. \n
  9. 调整网站布局
  10. \n
  11. 修改一些样式
  12. \n
  13. PS:在1.0.51偷偷加了一号字号你们发现没有(doge)
  14. \n
\n

\"\"

\n

\"\"

\n

\"\"

\n

\"\"

\n

Acryple v1.0.51

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化性能问题(但是好像还是没毛提升
  4. \n
  5. 换用Twikoo-magic表情包
  6. \n
  7. 为了OI添加 KaTeX\\textbf{ \\KaTeX} KATEX
  8. \n
  9. 修复跳转链接因原有bug被迫使原页面刷新的bug
  10. \n
\n

Acryple v1.0.14 2022-11-10

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化性能问题(但是好像还是没毛提升
  4. \n
  5. 增加浏览器过期提醒以及banIE,参考chuckle以及b站
  6. \n
  7. 增加fps显示
  8. \n
  9. 评论表情添加颜文字
  10. \n
  11. 修复手机端侧边栏bug
  12. \n
\n

\"1668068215334.png\"

\n

\"1668068189449.png\"

\n

\"1668068277934.png\"

\n

\"1668069244663.png\"

\n

\"1668068328066.png\"

\n

PS:作为一个萌新OIer依然没有考虑发oi文 ╮(╯▽╰)╭

\n
以前的更新日志

哔哩哔哩 (゜-゜)つロ 干杯!

\n

2022

\n

07-02

\n

终于弄好网站了,庆祝一下🎉

\n

Gitalk不知道为什么不显示出来…

\n

07-03

\n

小更新,修改细节

\n

作者的Html实在太菜了,效果并不好

\n

07-04

\n

大更新

\n

修改了很多ui

\n

07-05

\n

大更新

\n

修改细节UI和友链部分,增加吐槽部分

\n

07-06

\n

小更新,做好一些功能并且写了第一篇文章

\n

07-08

\n

大更新,更改首页布局,增加首页分区

\n

07-09

\n

小更新,修改细节,适配手机端,修复bug,说说由Artitalk换为BBtalk

\n

07-14

\n

前面几天忘记写更新了,更新了很多UI和功能。。。

\n

07-18

\n

前面几天又忘记写更新了小小修改了一些布局,把鸽了很久的博客写完了并且还加了萌百的黑幕,没有你知道的太多了差评

\n

07-22

\n

前面几天又双忘记写更新了折腾了很多,加了自己的域名,把你知道的太多了弄出来了,并且修复了很多js的bug,把unpkg换成fastly.jsdelivr或者elemecdn,提升速度(竟然有人加了我友链,怎么知道这个网站的?)

\n

08-12

\n

前面几天又双叒忘记写更新了还是折腾了很多,按照冰糖红茶大佬们的方法加了不少东西,比如那个人潮汹涌模拟器(主页的)、文章点赞、无缝跳转等等,换成jsdelivr加速,同时也在最大化利用GoormIDE,不过在险些没有数据之后就尽可能迁移到了其它没有风险的平台。

\n

08-25

\n

最近在糖果屋群友们的建议和帮助下修改了很多功能,以后每隔一段时间都会写详细的日志而不是像前面简单概括了。

\n
    \n
  1. 留言板的弹幕是真的像b站视频弹幕了,过一段时间修复了bug之后放教程
  2. \n
  3. 新增博客设置,做了一个极简风的主题,支持更换主题色,也可以换回之前的主题,可以禁用模糊效果和开启硬件加速提升性能
  4. \n
  5. 修复了部分排版bug,对safari进行了一些适应,感谢Apple Store和洪哥的帮助。
  6. \n
  7. 增加了hover的缩放效果,有层次感
  8. \n
  9. 优化动画
  10. \n
  11. 修复留言弹幕、右键菜单的bug并且把新版的代码更新到文章中
  12. \n
  13. 优化细节样式
  14. \n
  15. 新增最新文章标记
  16. \n
  17. 总算部署好朋友圈了!leancloud国内版垃圾!
  18. \n
\n
"},{"title":"早报","date":"2022-11-24T23:37:35.000Z","_content":"\n\n\n\n","source":"zaobao/index.md","raw":"---\ntitle: 早报\ndate: 2022-11-25 07:37:35\n---\n\n\n\n\n","updated":"2023-10-24T05:17:23.633Z","path":"zaobao/index.html","comments":1,"layout":"page","_id":"clo56i5vl002afc3ucr3dgbwi","content":"\n\n\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":0,"excerpt":"","more":"\n\n\n"}],"Post":[{"abbrlink":"4e1214ce","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3613172890%2C3047148242%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","date":"2023-08-03T14:04:51.000Z","keywords":"grass,安装,centos","swiper_index":3,"title":"Centos安装Grass","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","updated":"2023-10-21T04:51:41.195Z","_content":"## 1 方案一:通过 EPEL 源安装(Centos 8)\n\n### 1.1 安装 EPEL8 源\n\n链接:https://grass.osgeo.org/download/linux/#GRASS-GIS-current\n\n![image-20230507202148758](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507202148758.png)\n\n*安装 EPEL8 源步骤:参考链接:https://blog.csdn.net/Lcongming/article/details/115983236*\n\n- 首先切换到yum仓库源的目录\n\n```BASH\ncd /etc/yum.repos.d/\n```\n\n- 创建文件\n\n```BASH\ntouch epel8.repo\n# 文件内容如下:\n[EPEL]\nname=EPEL\nbaseurl=https://mirrors.cloud.tencent.com/epel/8/Everything/x86_64/ \ngpgcheck=0\n# 需要确保这个链接能打开\n# epel7用这个:https://mirrors.cloud.tencent.com/epel/7/x86_64/\n```\n\n- 执行 yum repolist 读取查看结果,已经都可以读取了\n\n```BASH\nyum repolist\n```\n\n![image-20230507202627273](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507202627273.png)\n\n### 1.2 查看软件库中是否包含 GRASS\n\n```BASH\nyum search grass\n```\n\n![image-20230507202759087](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507202759087.png)\n\n### 1.3 安装 GRASS\n\n```BASH\nyum install grass\n```\n\n```BASH\nError: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: hdf-4.2.14-5.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3(TIRPC_0.3.0)(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libpng16.so.16(PNG16_0)(64bit)\nError: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libc.so.6(GLIBC_2.28)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: wxGTK3-gl-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libreadline.so.7()(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: python3-wx-siplib-api(12)(x86-64) >= 12.7\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libpng16.so.16()(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libc.so.6(GLIBC_2.27)(64bit)\nError: Package: proj-6.3.2-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: PDAL-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: libbsd-0.11.7-2.el8.x86_64 (EPEL)\n Requires: libc.so.6(GLIBC_2.25)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libjson-c.so.4(JSONC_0.14)(64bit)\nError: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: hdf5-1.10.5-4.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpng16.so.16(PNG16_0)(64bit)\nError: Package: hdf5-1.10.5-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: PDAL-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.23)(64bit)\nError: Package: ogdi-4.1.0-1.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3()(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libpng16.so.16(PNG16_0)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libjson-c.so.4()(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.22)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpoppler.so.104()(64bit)\nError: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: python3-dateutil\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libcfitsio.so.7()(64bit)\n Available: cfitsio-3.47-1.el8.x86_64 (EPEL)\n libcfitsio.so.7()(64bit)\n Installed: cfitsio-3.370-10.el7.x86_64 (@epel)\n ~libcfitsio.so.2()(64bit)\nError: Package: hdf-4.2.14-5.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3()(64bit)\nError: Package: proj-6.3.2-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: netcdf-4.7.0-2.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3()(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libdap.so.25()(64bit)\nError: Package: ogdi-4.1.0-1.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3(TIRPC_0.3.0)(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpng16.so.16(PNG16_0)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libgif.so.7()(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libjasper.so.4()(64bit)\nError: Package: proj-epsg-4.8.0-4.el7.x86_64 (@epel)\n Requires: proj = 4.8.0-4.el7\n Removing: proj-4.8.0-4.el7.x86_64 (@epel)\n proj = 4.8.0-4.el7\n Updated By: proj-6.3.2-4.el8.x86_64 (EPEL)\n proj = 6.3.2-4.el8\nError: Package: proj-nad-4.8.0-4.el7.x86_64 (@epel)\n Requires: proj = 4.8.0-4.el7\n Removing: proj-4.8.0-4.el7.x86_64 (@epel)\n proj = 4.8.0-4.el7\n Updated By: proj-6.3.2-4.el8.x86_64 (EPEL)\n proj = 6.3.2-4.el8\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libhistory.so.7()(64bit)\nError: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpng16.so.16()(64bit)\nError: Package: arpack-3.7.0-1.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: proj-6.3.2-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: proj-6.3.2-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libpng16.so.16()(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpng16.so.16()(64bit)\n```\n\n直接 yum 安装 grass 会存在依赖错误的问题,先看报错缺的是什么包,然后通过rpm的方式先把缺的包装好,所有缺的包安装完毕后,就可以通过yum install grass完成grass的安装,缺的包可以在这个网站上找:https://pkgs.org/\n\n![image-20230507203155606](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507203155606.png)\n\n- 假设缺的包是下面这个:\n\n ![image-20230507203400626](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507203400626.png)\n- 点进去,查看这个包的下载地址:\n\n![image-20230507203411137](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507203411137.png)\n\n- 然后通过rpm命令安装这个包:rpm -Uvh 包的URL\n\n```BASH\n# rpm -Uvh 包的URL\nrpm -Uvh https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/glibc-2.28-164.el8.x86_64.rpm\n# 强制安装,忽略依赖错误\n# rpm -Uvh https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/glibc-2.28-164.el8.x86_64.rpm --force --nodeps\n```\n\n- 参考资料:https://blog.csdn.net/fancy_xunbei/article/details/6268441\n\n## 2 方案二:源码编译安装\n\n参考链接:https://www.zhihu.com/zvideo/1496911384683773952\n\n- 下载安装包\n- 解压并进入\n- 开始编译\n\n```BASH\n./configure --prefix=/home/oge/oge-grass\n```\n\n疑难杂症\n\n- GRASS需要针对 zstd 进行编译和链接。查看您尝试的命令(`yum install zstd-devel`),我假设您使用的是RHEL/CentOS7。在CentOS存储库中没有zstd的包-您需要从[EPEL](https://fedoraproject.org/wiki/EPEL)安装它。它应该看起来像这样\n\n![image-20230508084941624](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508084941624.png)\n\n```BASH\nyum install libzstd-devel\n```\n\n![image-20230508084900049](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508084900049.png)\n\n```BASH\nwhereis gdal-config\n# 然后再在编译时指定依赖的位置\n./configure --with-gdal=/usr/local/bin/gdal-config --prefix=/home/oge/oge-grass\n```\n\n![image-20230508090349691](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508090349691.png)\n\n```BASH\nyum install PNG-devel\n```\n\n![image-20230508090437991](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508090437991.png)\n\n```BASH\nyum install fftw-devel\n```\n\n![image-20230508090610207](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508090610207.png)\n\n```BASH\nyum install cairo-devel\n```\n\n![image-20230508091746038](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508091746038.png)\n\n```BASH\nyum install freetype-devel\n```\n\n- ......\n\n## 3 方案三: Docker镜像方式安装 (推荐)\n\n- grass docker 镜像:https://grass.osgeo.org/download/docker/\n\n![image-20230508194802552](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508194802552.png)\n\n- 创建容器\n","source":"_posts/Centos安装Grass.md","raw":"---\nabbrlink: 4e1214ce\ncategories:\n- GIS\ncover: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3613172890%2C3047148242%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG\ndate: '2023-08-03T22:04:51+08:00'\nkeywords: grass,安装,centos\nswiper_index: 3\ntags:\n- 遥感\n- GIS\n- 软件安装\ntitle: Centos安装Grass\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nupdated: 2023-9-3T14:59:29.426+8:0\n---\n## 1 方案一:通过 EPEL 源安装(Centos 8)\n\n### 1.1 安装 EPEL8 源\n\n链接:https://grass.osgeo.org/download/linux/#GRASS-GIS-current\n\n![image-20230507202148758](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507202148758.png)\n\n*安装 EPEL8 源步骤:参考链接:https://blog.csdn.net/Lcongming/article/details/115983236*\n\n- 首先切换到yum仓库源的目录\n\n```BASH\ncd /etc/yum.repos.d/\n```\n\n- 创建文件\n\n```BASH\ntouch epel8.repo\n# 文件内容如下:\n[EPEL]\nname=EPEL\nbaseurl=https://mirrors.cloud.tencent.com/epel/8/Everything/x86_64/ \ngpgcheck=0\n# 需要确保这个链接能打开\n# epel7用这个:https://mirrors.cloud.tencent.com/epel/7/x86_64/\n```\n\n- 执行 yum repolist 读取查看结果,已经都可以读取了\n\n```BASH\nyum repolist\n```\n\n![image-20230507202627273](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507202627273.png)\n\n### 1.2 查看软件库中是否包含 GRASS\n\n```BASH\nyum search grass\n```\n\n![image-20230507202759087](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507202759087.png)\n\n### 1.3 安装 GRASS\n\n```BASH\nyum install grass\n```\n\n```BASH\nError: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: hdf-4.2.14-5.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3(TIRPC_0.3.0)(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libpng16.so.16(PNG16_0)(64bit)\nError: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libc.so.6(GLIBC_2.28)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: wxGTK3-gl-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libreadline.so.7()(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: python3-wx-siplib-api(12)(x86-64) >= 12.7\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libpng16.so.16()(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libc.so.6(GLIBC_2.27)(64bit)\nError: Package: proj-6.3.2-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: PDAL-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: libbsd-0.11.7-2.el8.x86_64 (EPEL)\n Requires: libc.so.6(GLIBC_2.25)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libjson-c.so.4(JSONC_0.14)(64bit)\nError: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: hdf5-1.10.5-4.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpng16.so.16(PNG16_0)(64bit)\nError: Package: hdf5-1.10.5-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: PDAL-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.23)(64bit)\nError: Package: ogdi-4.1.0-1.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3()(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libpng16.so.16(PNG16_0)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libjson-c.so.4()(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.22)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpoppler.so.104()(64bit)\nError: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: python3-dateutil\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libcfitsio.so.7()(64bit)\n Available: cfitsio-3.47-1.el8.x86_64 (EPEL)\n libcfitsio.so.7()(64bit)\n Installed: cfitsio-3.370-10.el7.x86_64 (@epel)\n ~libcfitsio.so.2()(64bit)\nError: Package: hdf-4.2.14-5.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3()(64bit)\nError: Package: proj-6.3.2-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: netcdf-4.7.0-2.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3()(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libdap.so.25()(64bit)\nError: Package: ogdi-4.1.0-1.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3(TIRPC_0.3.0)(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpng16.so.16(PNG16_0)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libgif.so.7()(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libjasper.so.4()(64bit)\nError: Package: proj-epsg-4.8.0-4.el7.x86_64 (@epel)\n Requires: proj = 4.8.0-4.el7\n Removing: proj-4.8.0-4.el7.x86_64 (@epel)\n proj = 4.8.0-4.el7\n Updated By: proj-6.3.2-4.el8.x86_64 (EPEL)\n proj = 6.3.2-4.el8\nError: Package: proj-nad-4.8.0-4.el7.x86_64 (@epel)\n Requires: proj = 4.8.0-4.el7\n Removing: proj-4.8.0-4.el7.x86_64 (@epel)\n proj = 4.8.0-4.el7\n Updated By: proj-6.3.2-4.el8.x86_64 (EPEL)\n proj = 6.3.2-4.el8\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libhistory.so.7()(64bit)\nError: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpng16.so.16()(64bit)\nError: Package: arpack-3.7.0-1.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: proj-6.3.2-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: proj-6.3.2-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libpng16.so.16()(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpng16.so.16()(64bit)\n```\n\n直接 yum 安装 grass 会存在依赖错误的问题,先看报错缺的是什么包,然后通过rpm的方式先把缺的包装好,所有缺的包安装完毕后,就可以通过yum install grass完成grass的安装,缺的包可以在这个网站上找:https://pkgs.org/\n\n![image-20230507203155606](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507203155606.png)\n\n- 假设缺的包是下面这个:\n\n ![image-20230507203400626](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507203400626.png)\n- 点进去,查看这个包的下载地址:\n\n![image-20230507203411137](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507203411137.png)\n\n- 然后通过rpm命令安装这个包:rpm -Uvh 包的URL\n\n```BASH\n# rpm -Uvh 包的URL\nrpm -Uvh https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/glibc-2.28-164.el8.x86_64.rpm\n# 强制安装,忽略依赖错误\n# rpm -Uvh https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/glibc-2.28-164.el8.x86_64.rpm --force --nodeps\n```\n\n- 参考资料:https://blog.csdn.net/fancy_xunbei/article/details/6268441\n\n## 2 方案二:源码编译安装\n\n参考链接:https://www.zhihu.com/zvideo/1496911384683773952\n\n- 下载安装包\n- 解压并进入\n- 开始编译\n\n```BASH\n./configure --prefix=/home/oge/oge-grass\n```\n\n疑难杂症\n\n- GRASS需要针对 zstd 进行编译和链接。查看您尝试的命令(`yum install zstd-devel`),我假设您使用的是RHEL/CentOS7。在CentOS存储库中没有zstd的包-您需要从[EPEL](https://fedoraproject.org/wiki/EPEL)安装它。它应该看起来像这样\n\n![image-20230508084941624](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508084941624.png)\n\n```BASH\nyum install libzstd-devel\n```\n\n![image-20230508084900049](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508084900049.png)\n\n```BASH\nwhereis gdal-config\n# 然后再在编译时指定依赖的位置\n./configure --with-gdal=/usr/local/bin/gdal-config --prefix=/home/oge/oge-grass\n```\n\n![image-20230508090349691](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508090349691.png)\n\n```BASH\nyum install PNG-devel\n```\n\n![image-20230508090437991](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508090437991.png)\n\n```BASH\nyum install fftw-devel\n```\n\n![image-20230508090610207](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508090610207.png)\n\n```BASH\nyum install cairo-devel\n```\n\n![image-20230508091746038](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508091746038.png)\n\n```BASH\nyum install freetype-devel\n```\n\n- ......\n\n## 3 方案三: Docker镜像方式安装 (推荐)\n\n- grass docker 镜像:https://grass.osgeo.org/download/docker/\n\n![image-20230508194802552](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508194802552.png)\n\n- 创建容器\n","slug":"Centos安装Grass","published":1,"comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5v80001fc3u6j3f8gfe","content":"

1 方案一:通过 EPEL 源安装(Centos 8)

\n

1.1 安装 EPEL8 源

\n

链接:https://grass.osgeo.org/download/linux/#GRASS-GIS-current

\n

\"image-20230507202148758\"

\n

安装 EPEL8 源步骤:参考链接:https://blog.csdn.net/Lcongming/article/details/115983236

\n
    \n
  • 首先切换到yum仓库源的目录
  • \n
\n
1
cd /etc/yum.repos.d/
\n
    \n
  • 创建文件
  • \n
\n
1
2
3
4
5
6
7
8
touch epel8.repo
# 文件内容如下:
[EPEL]
name=EPEL
baseurl=https://mirrors.cloud.tencent.com/epel/8/Everything/x86_64/
gpgcheck=0
# 需要确保这个链接能打开
# epel7用这个:https://mirrors.cloud.tencent.com/epel/7/x86_64/
\n
    \n
  • 执行 yum repolist 读取查看结果,已经都可以读取了
  • \n
\n
1
yum repolist
\n

\"image-20230507202627273\"

\n

1.2 查看软件库中是否包含 GRASS

\n
1
yum search grass
\n

\"image-20230507202759087\"

\n

1.3 安装 GRASS

\n
1
yum install grass
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
Error: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: hdf-4.2.14-5.el8.x86_64 (EPEL)
Requires: libtirpc.so.3(TIRPC_0.3.0)(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)
Requires: libpng16.so.16(PNG16_0)(64bit)
Error: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libc.so.6(GLIBC_2.28)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: wxGTK3-gl-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libreadline.so.7()(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: python3-wx-siplib-api(12)(x86-64) >= 12.7
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)
Requires: libpng16.so.16()(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libc.so.6(GLIBC_2.27)(64bit)
Error: Package: proj-6.3.2-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: PDAL-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: libbsd-0.11.7-2.el8.x86_64 (EPEL)
Requires: libc.so.6(GLIBC_2.25)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libjson-c.so.4(JSONC_0.14)(64bit)
Error: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: hdf5-1.10.5-4.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpng16.so.16(PNG16_0)(64bit)
Error: Package: hdf5-1.10.5-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: PDAL-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.23)(64bit)
Error: Package: ogdi-4.1.0-1.el8.x86_64 (EPEL)
Requires: libtirpc.so.3()(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libpng16.so.16(PNG16_0)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libjson-c.so.4()(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.22)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpoppler.so.104()(64bit)
Error: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: python3-dateutil
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libcfitsio.so.7()(64bit)
Available: cfitsio-3.47-1.el8.x86_64 (EPEL)
libcfitsio.so.7()(64bit)
Installed: cfitsio-3.370-10.el7.x86_64 (@epel)
~libcfitsio.so.2()(64bit)
Error: Package: hdf-4.2.14-5.el8.x86_64 (EPEL)
Requires: libtirpc.so.3()(64bit)
Error: Package: proj-6.3.2-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: netcdf-4.7.0-2.el8.x86_64 (EPEL)
Requires: libtirpc.so.3()(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libdap.so.25()(64bit)
Error: Package: ogdi-4.1.0-1.el8.x86_64 (EPEL)
Requires: libtirpc.so.3(TIRPC_0.3.0)(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpng16.so.16(PNG16_0)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libgif.so.7()(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libjasper.so.4()(64bit)
Error: Package: proj-epsg-4.8.0-4.el7.x86_64 (@epel)
Requires: proj = 4.8.0-4.el7
Removing: proj-4.8.0-4.el7.x86_64 (@epel)
proj = 4.8.0-4.el7
Updated By: proj-6.3.2-4.el8.x86_64 (EPEL)
proj = 6.3.2-4.el8
Error: Package: proj-nad-4.8.0-4.el7.x86_64 (@epel)
Requires: proj = 4.8.0-4.el7
Removing: proj-4.8.0-4.el7.x86_64 (@epel)
proj = 4.8.0-4.el7
Updated By: proj-6.3.2-4.el8.x86_64 (EPEL)
proj = 6.3.2-4.el8
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libhistory.so.7()(64bit)
Error: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpng16.so.16()(64bit)
Error: Package: arpack-3.7.0-1.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: proj-6.3.2-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: proj-6.3.2-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libpng16.so.16()(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpng16.so.16()(64bit)
\n

直接 yum 安装 grass 会存在依赖错误的问题,先看报错缺的是什么包,然后通过rpm的方式先把缺的包装好,所有缺的包安装完毕后,就可以通过yum install grass完成grass的安装,缺的包可以在这个网站上找:https://pkgs.org/

\n

\"image-20230507203155606\"

\n
    \n
  • \n

    假设缺的包是下面这个:

    \n

    \"image-20230507203400626\"

    \n
  • \n
  • \n

    点进去,查看这个包的下载地址:

    \n
  • \n
\n

\"image-20230507203411137\"

\n
    \n
  • 然后通过rpm命令安装这个包:rpm -Uvh 包的URL
  • \n
\n
1
2
3
4
# rpm -Uvh 包的URL
rpm -Uvh https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/glibc-2.28-164.el8.x86_64.rpm
# 强制安装,忽略依赖错误
# rpm -Uvh https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/glibc-2.28-164.el8.x86_64.rpm --force --nodeps
\n\n

2 方案二:源码编译安装

\n

参考链接:https://www.zhihu.com/zvideo/1496911384683773952

\n
    \n
  • 下载安装包
  • \n
  • 解压并进入
  • \n
  • 开始编译
  • \n
\n
1
./configure --prefix=/home/oge/oge-grass
\n

疑难杂症

\n
    \n
  • GRASS需要针对 zstd 进行编译和链接。查看您尝试的命令(yum install zstd-devel),我假设您使用的是RHEL/CentOS7。在CentOS存储库中没有zstd的包-您需要从EPEL安装它。它应该看起来像这样
  • \n
\n

\"image-20230508084941624\"

\n
1
yum install libzstd-devel
\n

\"image-20230508084900049\"

\n
1
2
3
whereis gdal-config
# 然后再在编译时指定依赖的位置
./configure --with-gdal=/usr/local/bin/gdal-config --prefix=/home/oge/oge-grass
\n

\"image-20230508090349691\"

\n
1
yum install PNG-devel
\n

\"image-20230508090437991\"

\n
1
yum install fftw-devel
\n

\"image-20230508090610207\"

\n
1
yum install cairo-devel
\n

\"image-20230508091746038\"

\n
1
yum install freetype-devel
\n
    \n
  • \n
\n

3 方案三: Docker镜像方式安装 (推荐)

\n\n

\"image-20230508194802552\"

\n
    \n
  • 创建容器
  • \n
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":7730,"excerpt":"","more":"

1 方案一:通过 EPEL 源安装(Centos 8)

\n

1.1 安装 EPEL8 源

\n

链接:https://grass.osgeo.org/download/linux/#GRASS-GIS-current

\n

\"image-20230507202148758\"

\n

安装 EPEL8 源步骤:参考链接:https://blog.csdn.net/Lcongming/article/details/115983236

\n
    \n
  • 首先切换到yum仓库源的目录
  • \n
\n
1
cd /etc/yum.repos.d/
\n
    \n
  • 创建文件
  • \n
\n
1
2
3
4
5
6
7
8
touch epel8.repo
# 文件内容如下:
[EPEL]
name=EPEL
baseurl=https://mirrors.cloud.tencent.com/epel/8/Everything/x86_64/
gpgcheck=0
# 需要确保这个链接能打开
# epel7用这个:https://mirrors.cloud.tencent.com/epel/7/x86_64/
\n
    \n
  • 执行 yum repolist 读取查看结果,已经都可以读取了
  • \n
\n
1
yum repolist
\n

\"image-20230507202627273\"

\n

1.2 查看软件库中是否包含 GRASS

\n
1
yum search grass
\n

\"image-20230507202759087\"

\n

1.3 安装 GRASS

\n
1
yum install grass
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
Error: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: hdf-4.2.14-5.el8.x86_64 (EPEL)
Requires: libtirpc.so.3(TIRPC_0.3.0)(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)
Requires: libpng16.so.16(PNG16_0)(64bit)
Error: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libc.so.6(GLIBC_2.28)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: wxGTK3-gl-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libreadline.so.7()(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: python3-wx-siplib-api(12)(x86-64) >= 12.7
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)
Requires: libpng16.so.16()(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libc.so.6(GLIBC_2.27)(64bit)
Error: Package: proj-6.3.2-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: PDAL-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: libbsd-0.11.7-2.el8.x86_64 (EPEL)
Requires: libc.so.6(GLIBC_2.25)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libjson-c.so.4(JSONC_0.14)(64bit)
Error: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: hdf5-1.10.5-4.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpng16.so.16(PNG16_0)(64bit)
Error: Package: hdf5-1.10.5-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: PDAL-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.23)(64bit)
Error: Package: ogdi-4.1.0-1.el8.x86_64 (EPEL)
Requires: libtirpc.so.3()(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libpng16.so.16(PNG16_0)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libjson-c.so.4()(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.22)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpoppler.so.104()(64bit)
Error: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: python3-dateutil
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libcfitsio.so.7()(64bit)
Available: cfitsio-3.47-1.el8.x86_64 (EPEL)
libcfitsio.so.7()(64bit)
Installed: cfitsio-3.370-10.el7.x86_64 (@epel)
~libcfitsio.so.2()(64bit)
Error: Package: hdf-4.2.14-5.el8.x86_64 (EPEL)
Requires: libtirpc.so.3()(64bit)
Error: Package: proj-6.3.2-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: netcdf-4.7.0-2.el8.x86_64 (EPEL)
Requires: libtirpc.so.3()(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libdap.so.25()(64bit)
Error: Package: ogdi-4.1.0-1.el8.x86_64 (EPEL)
Requires: libtirpc.so.3(TIRPC_0.3.0)(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpng16.so.16(PNG16_0)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libgif.so.7()(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libjasper.so.4()(64bit)
Error: Package: proj-epsg-4.8.0-4.el7.x86_64 (@epel)
Requires: proj = 4.8.0-4.el7
Removing: proj-4.8.0-4.el7.x86_64 (@epel)
proj = 4.8.0-4.el7
Updated By: proj-6.3.2-4.el8.x86_64 (EPEL)
proj = 6.3.2-4.el8
Error: Package: proj-nad-4.8.0-4.el7.x86_64 (@epel)
Requires: proj = 4.8.0-4.el7
Removing: proj-4.8.0-4.el7.x86_64 (@epel)
proj = 4.8.0-4.el7
Updated By: proj-6.3.2-4.el8.x86_64 (EPEL)
proj = 6.3.2-4.el8
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libhistory.so.7()(64bit)
Error: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpng16.so.16()(64bit)
Error: Package: arpack-3.7.0-1.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: proj-6.3.2-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: proj-6.3.2-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libpng16.so.16()(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpng16.so.16()(64bit)
\n

直接 yum 安装 grass 会存在依赖错误的问题,先看报错缺的是什么包,然后通过rpm的方式先把缺的包装好,所有缺的包安装完毕后,就可以通过yum install grass完成grass的安装,缺的包可以在这个网站上找:https://pkgs.org/

\n

\"image-20230507203155606\"

\n
    \n
  • \n

    假设缺的包是下面这个:

    \n

    \"image-20230507203400626\"

    \n
  • \n
  • \n

    点进去,查看这个包的下载地址:

    \n
  • \n
\n

\"image-20230507203411137\"

\n
    \n
  • 然后通过rpm命令安装这个包:rpm -Uvh 包的URL
  • \n
\n
1
2
3
4
# rpm -Uvh 包的URL
rpm -Uvh https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/glibc-2.28-164.el8.x86_64.rpm
# 强制安装,忽略依赖错误
# rpm -Uvh https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/glibc-2.28-164.el8.x86_64.rpm --force --nodeps
\n\n

2 方案二:源码编译安装

\n

参考链接:https://www.zhihu.com/zvideo/1496911384683773952

\n
    \n
  • 下载安装包
  • \n
  • 解压并进入
  • \n
  • 开始编译
  • \n
\n
1
./configure --prefix=/home/oge/oge-grass
\n

疑难杂症

\n
    \n
  • GRASS需要针对 zstd 进行编译和链接。查看您尝试的命令(yum install zstd-devel),我假设您使用的是RHEL/CentOS7。在CentOS存储库中没有zstd的包-您需要从EPEL安装它。它应该看起来像这样
  • \n
\n

\"image-20230508084941624\"

\n
1
yum install libzstd-devel
\n

\"image-20230508084900049\"

\n
1
2
3
whereis gdal-config
# 然后再在编译时指定依赖的位置
./configure --with-gdal=/usr/local/bin/gdal-config --prefix=/home/oge/oge-grass
\n

\"image-20230508090349691\"

\n
1
yum install PNG-devel
\n

\"image-20230508090437991\"

\n
1
yum install fftw-devel
\n

\"image-20230508090610207\"

\n
1
yum install cairo-devel
\n

\"image-20230508091746038\"

\n
1
yum install freetype-devel
\n
    \n
  • \n
\n

3 方案三: Docker镜像方式安装 (推荐)

\n\n

\"image-20230508194802552\"

\n
    \n
  • 创建容器
  • \n
\n"},{"title":"Docker修改容器映射主机端口","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3767987760%2C254654213%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DPNG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","abbrlink":"9c5d9ac5","date":"2023-05-12T07:26:51.000Z","keywords":"docker,端口","_content":"\n### 1 对于已经存在的容器,更改端口\n\n- 停止容器\n\n- 将容器打包成镜像\n\n```bash\ndocker commit 4f4561192346 wbw-geoserver:0.1(自定义镜像名:自定版本号)\n```\n\n- 通过新镜像开启新容器\n\n```BASH\ndocker run -d --name wbw-geoserver -p 31520:8080 wbw-geoserver:0.1\n\n\n#-d ——>后台启动\n#-p ——>主机端口:容器端口\n```\n","source":"_posts/Docker修改容器映射主机端口.md","raw":"---\ntitle: Docker修改容器映射主机端口\ncover: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3767987760%2C254654213%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DPNG'\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nabbrlink: 9c5d9ac5\ndate: 2023-05-12 15:26:51\nkeywords: docker,端口\ncategories:\n - 云原生\ntags:\n - 容器\n - Docker\n---\n\n### 1 对于已经存在的容器,更改端口\n\n- 停止容器\n\n- 将容器打包成镜像\n\n```bash\ndocker commit 4f4561192346 wbw-geoserver:0.1(自定义镜像名:自定版本号)\n```\n\n- 通过新镜像开启新容器\n\n```BASH\ndocker run -d --name wbw-geoserver -p 31520:8080 wbw-geoserver:0.1\n\n\n#-d ——>后台启动\n#-p ——>主机端口:容器端口\n```\n","slug":"Docker修改容器映射主机端口","published":1,"updated":"2023-10-21T04:52:06.632Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5va0003fc3uarrxdxvm","content":"

1 对于已经存在的容器,更改端口

\n
    \n
  • \n

    停止容器

    \n
  • \n
  • \n

    将容器打包成镜像

    \n
  • \n
\n
1
docker commit 4f4561192346 wbw-geoserver:0.1(自定义镜像名:自定版本号)
\n
    \n
  • 通过新镜像开启新容器
  • \n
\n
1
2
3
4
5
docker run -d --name wbw-geoserver -p 31520:8080 wbw-geoserver:0.1


#-d ——>后台启动
#-p ——>主机端口:容器端口
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":188,"excerpt":"","more":"

1 对于已经存在的容器,更改端口

\n
    \n
  • \n

    停止容器

    \n
  • \n
  • \n

    将容器打包成镜像

    \n
  • \n
\n
1
docker commit 4f4561192346 wbw-geoserver:0.1(自定义镜像名:自定版本号)
\n
    \n
  • 通过新镜像开启新容器
  • \n
\n
1
2
3
4
5
docker run -d --name wbw-geoserver -p 31520:8080 wbw-geoserver:0.1


#-d ——>后台启动
#-p ——>主机端口:容器端口
\n"},{"title":"Docker安装配置","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3909901784%2C2254357094%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DPNG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","abbrlink":"b035bcd6","date":"2023-05-11T01:20:52.000Z","keywords":"docker,安装,配置","_content":"\n## 1 安装docker 20.10.7\n\n**注意 Docker 版本,要和 Kubernetes 版本 有对应关系**\n\n```shell\n# 安装/更新 yum-utils\nyum install -y yum-utils\n\n# 配置 yum源\nyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo\n\n# 安装 docker 20.10.7 版本\nyum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io\n\n# 查看 docker 版本\ndocker -v\n\n# 启动 docker\nsystemctl start docker\n\n# 查看 docker 是否成功, 有 Client 和 Server 即成功\ndocker version\n```\n\n## 2 配置加速镜像\n\n```shell\nsudo mkdir -p /etc/docker\nsudo tee /etc/docker/daemon.json <<-'EOF'\n{\n \"registry-mirrors\": [\"https://82m9ar63.mirror.aliyuncs.com\"],\n \"exec-opts\": [\"native.cgroupdriver=systemd\"],\n \"log-driver\": \"json-file\",\n \"log-opts\": {\n \"max-size\": \"100m\"\n },\n \"storage-driver\": \"overlay2\"\n}\nEOF\nsudo systemctl daemon-reload\nsudo systemctl restart docker\n\n# 查看是否配置成功\ndocker info\n```\n\n","source":"_posts/Docker安装配置.md","raw":"---\ntitle: Docker安装配置\ncover: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3909901784%2C2254357094%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DPNG'\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nabbrlink: b035bcd6\ndate: 2023-05-11 09:20:52\nkeywords: docker,安装,配置\ncategories:\n - 云原生\ntags:\n - 容器\n - Docker\n---\n\n## 1 安装docker 20.10.7\n\n**注意 Docker 版本,要和 Kubernetes 版本 有对应关系**\n\n```shell\n# 安装/更新 yum-utils\nyum install -y yum-utils\n\n# 配置 yum源\nyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo\n\n# 安装 docker 20.10.7 版本\nyum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io\n\n# 查看 docker 版本\ndocker -v\n\n# 启动 docker\nsystemctl start docker\n\n# 查看 docker 是否成功, 有 Client 和 Server 即成功\ndocker version\n```\n\n## 2 配置加速镜像\n\n```shell\nsudo mkdir -p /etc/docker\nsudo tee /etc/docker/daemon.json <<-'EOF'\n{\n \"registry-mirrors\": [\"https://82m9ar63.mirror.aliyuncs.com\"],\n \"exec-opts\": [\"native.cgroupdriver=systemd\"],\n \"log-driver\": \"json-file\",\n \"log-opts\": {\n \"max-size\": \"100m\"\n },\n \"storage-driver\": \"overlay2\"\n}\nEOF\nsudo systemctl daemon-reload\nsudo systemctl restart docker\n\n# 查看是否配置成功\ndocker info\n```\n\n","slug":"Docker安装配置","published":1,"updated":"2023-10-21T04:51:49.730Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5vb0007fc3uhaz76c7q","content":"

1 安装docker 20.10.7

\n

注意 Docker 版本,要和 Kubernetes 版本 有对应关系

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装/更新 yum-utils
yum install -y yum-utils

# 配置 yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 docker 20.10.7 版本
yum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io

# 查看 docker 版本
docker -v

# 启动 docker
systemctl start docker

# 查看 docker 是否成功, 有 Client 和 Server 即成功
docker version
\n

2 配置加速镜像

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

# 查看是否配置成功
docker info
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":871,"excerpt":"","more":"

1 安装docker 20.10.7

\n

注意 Docker 版本,要和 Kubernetes 版本 有对应关系

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装/更新 yum-utils
yum install -y yum-utils

# 配置 yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 docker 20.10.7 版本
yum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io

# 查看 docker 版本
docker -v

# 启动 docker
systemctl start docker

# 查看 docker 是否成功, 有 Client 和 Server 即成功
docker version
\n

2 配置加速镜像

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

# 查看是否配置成功
docker info
\n"},{"title":"Docker安装PostgreSQL并添加PostGIS拓展","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D1460018586%2C621419257%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"docker,postgres,postgis","abbrlink":"e232bc22","date":"2023-10-09T12:20:52.000Z","_content":"\n\n### 1 下载镜像\n\n- 访问dockerhub官网:https://registry.hub.docker.com/ 地址,下载指定版本的PostgreSQL数据库。\n\n![image-20231009173917562](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231009173917562.png)\n\n- 下载\n\n```bash\ndocker pull postgres:14\n```\n\n- 查看\n\n```BASH\ndocker images\n```\n\n![image-20231009200905029](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231009200905029.png)\n\n\n\n### 2 镜像转为容器\n\n```BASH\ndocker run -d --restart=always --name postgres -v /mnt/storage/postgresql/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:14\n```\n\n- `docker run`: 这是Docker命令的开头,用于运行一个容器。\n- `-d`: 这是一个标志,表示容器应以后台模式运行(detached mode),这意味着容器将在后台运行,不会占用终端。\n- `--restart=always`: 这是一个标志,指定容器在退出时应该始终自动重新启动。如果容器不期望停止运行,这可以确保容器总是在它退出时重新启动。\n- `--name postgres`: 这是一个标志,为容器指定了一个名称,即\"postgres\"。这使得容器可以通过这个名称来引用,而不必使用容器ID。\n- `-v /mnt/storage/postgresql/data:/var/lib/postgresql/data`: 这是一个标志,指定了主机文件系统路径`/mnt/storage/postgresql/data`和容器内部路径`/var/lib/postgresql/data`之间的卷映射。这个映射用于将PostgreSQL数据库数据存储在主机上,以便数据持久性。容器内的数据将被存储在主机的`/mnt/storage/postgresql/data`目录中。\n- `-e POSTGRES_PASSWORD=123456`: 这是一个标志,用于设置PostgreSQL数据库的密码。在这个例子中,密码被设置为\"123456\",这是一个示例密码。你可以根据需要更改它。\n- `-p 5432:5432`: 这是一个标志,用于将主机端口5432映射到容器内的端口5432。这是PostgreSQL数据库默认监听的端口。通过这个映射,你可以在主机上通过5432端口访问容器内运行的PostgreSQL数据库。\n- `postgres:14`: 这是要运行的Docker镜像的名称和标签。在这里,使用的是PostgreSQL 14版本的官方Docker镜像。Docker将下载并运行此镜像以创建容器。\n\n{% tip warning faa-horizontal animated %}一旦运行此命令,Docker将创建一个PostgreSQL容器,该容器以后台模式运行,具有指定的名称`postgres`,将数据存储在主机上的`/mnt/storage/postgresql/data`目录中,使用指定的密码,同时将主机端口5432映射到容器内的5432端口上。容器将在退出时自动重新启动,以确保持续可用性。{% endtip %}\n\n### 3 添加PostGIS拓展\n\n- 进入容器\n\n```BASH\ndocker exec -it ca24dbe6f3d7 bash\n```\n\n- 更新软件包列表\n\n```bash\napt update\n```\n\n- 使用apt在线安装PostGIS(注意版本要和PostgreSQL兼容)\n\n```bash\napt install postgresql-14-postgis-3 postgresql-14-postgis-3-dbgsym postgresql-14-postgis-3-scripts\n```\n\n- 使用Navicat等客户端软件连接到PostgreSQL,并新建查询,输入以下SQL语句,点击执行\n\n```SQL\nCREATE EXTENSION postgis;\nSELECT postgis_full_version();\n```\n\n- 出现类似如下查询结果即为成功\n\n```TEXT\nPOSTGIS=\"3.4.0 0874ea3\" [EXTENSION] PGSQL=\"140\" GEOS=\"3.11.1-CAPI-1.17.1\" PROJ=\"9.1.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/var/lib/postgresql/.local/share/proj DATABASE_PATH=/usr/share/proj/proj.db\" LIBXML=\"2.9.14\" LIBJSON=\"0.16\" LIBPROTOBUF=\"1.4.1\" WAGYU=\"0.5.0 (Internal)\"\n```\n","source":"_posts/Docker安装PostgreSQL并添加PostGIS拓展.md","raw":"---\ntitle: Docker安装PostgreSQL并添加PostGIS拓展\ncover: >-\n https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D1460018586%2C621419257%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'docker,postgres,postgis'\ncategories:\n - 云原生\ntags:\n - 容器\n - Docker\n - PostgreSQL\n - PostGIS\n - 数据库\nabbrlink: e232bc22\ndate: 2023-10-09 20:20:52\n---\n\n\n### 1 下载镜像\n\n- 访问dockerhub官网:https://registry.hub.docker.com/ 地址,下载指定版本的PostgreSQL数据库。\n\n![image-20231009173917562](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231009173917562.png)\n\n- 下载\n\n```bash\ndocker pull postgres:14\n```\n\n- 查看\n\n```BASH\ndocker images\n```\n\n![image-20231009200905029](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231009200905029.png)\n\n\n\n### 2 镜像转为容器\n\n```BASH\ndocker run -d --restart=always --name postgres -v /mnt/storage/postgresql/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:14\n```\n\n- `docker run`: 这是Docker命令的开头,用于运行一个容器。\n- `-d`: 这是一个标志,表示容器应以后台模式运行(detached mode),这意味着容器将在后台运行,不会占用终端。\n- `--restart=always`: 这是一个标志,指定容器在退出时应该始终自动重新启动。如果容器不期望停止运行,这可以确保容器总是在它退出时重新启动。\n- `--name postgres`: 这是一个标志,为容器指定了一个名称,即\"postgres\"。这使得容器可以通过这个名称来引用,而不必使用容器ID。\n- `-v /mnt/storage/postgresql/data:/var/lib/postgresql/data`: 这是一个标志,指定了主机文件系统路径`/mnt/storage/postgresql/data`和容器内部路径`/var/lib/postgresql/data`之间的卷映射。这个映射用于将PostgreSQL数据库数据存储在主机上,以便数据持久性。容器内的数据将被存储在主机的`/mnt/storage/postgresql/data`目录中。\n- `-e POSTGRES_PASSWORD=123456`: 这是一个标志,用于设置PostgreSQL数据库的密码。在这个例子中,密码被设置为\"123456\",这是一个示例密码。你可以根据需要更改它。\n- `-p 5432:5432`: 这是一个标志,用于将主机端口5432映射到容器内的端口5432。这是PostgreSQL数据库默认监听的端口。通过这个映射,你可以在主机上通过5432端口访问容器内运行的PostgreSQL数据库。\n- `postgres:14`: 这是要运行的Docker镜像的名称和标签。在这里,使用的是PostgreSQL 14版本的官方Docker镜像。Docker将下载并运行此镜像以创建容器。\n\n{% tip warning faa-horizontal animated %}一旦运行此命令,Docker将创建一个PostgreSQL容器,该容器以后台模式运行,具有指定的名称`postgres`,将数据存储在主机上的`/mnt/storage/postgresql/data`目录中,使用指定的密码,同时将主机端口5432映射到容器内的5432端口上。容器将在退出时自动重新启动,以确保持续可用性。{% endtip %}\n\n### 3 添加PostGIS拓展\n\n- 进入容器\n\n```BASH\ndocker exec -it ca24dbe6f3d7 bash\n```\n\n- 更新软件包列表\n\n```bash\napt update\n```\n\n- 使用apt在线安装PostGIS(注意版本要和PostgreSQL兼容)\n\n```bash\napt install postgresql-14-postgis-3 postgresql-14-postgis-3-dbgsym postgresql-14-postgis-3-scripts\n```\n\n- 使用Navicat等客户端软件连接到PostgreSQL,并新建查询,输入以下SQL语句,点击执行\n\n```SQL\nCREATE EXTENSION postgis;\nSELECT postgis_full_version();\n```\n\n- 出现类似如下查询结果即为成功\n\n```TEXT\nPOSTGIS=\"3.4.0 0874ea3\" [EXTENSION] PGSQL=\"140\" GEOS=\"3.11.1-CAPI-1.17.1\" PROJ=\"9.1.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/var/lib/postgresql/.local/share/proj DATABASE_PATH=/usr/share/proj/proj.db\" LIBXML=\"2.9.14\" LIBJSON=\"0.16\" LIBPROTOBUF=\"1.4.1\" WAGYU=\"0.5.0 (Internal)\"\n```\n","slug":"Docker安装PostgreSQL并添加PostGIS拓展","published":1,"updated":"2023-10-21T04:51:57.415Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5vc0009fc3u3paw3kn4","content":"

1 下载镜像

\n\n

\"image-20231009173917562\"

\n
    \n
  • 下载
  • \n
\n
1
docker pull postgres:14
\n
    \n
  • 查看
  • \n
\n
1
docker images
\n

\"image-20231009200905029\"

\n

2 镜像转为容器

\n
1
docker run -d --restart=always --name postgres -v /mnt/storage/postgresql/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:14
\n
    \n
  • docker run: 这是Docker命令的开头,用于运行一个容器。
  • \n
  • -d: 这是一个标志,表示容器应以后台模式运行(detached mode),这意味着容器将在后台运行,不会占用终端。
  • \n
  • --restart=always: 这是一个标志,指定容器在退出时应该始终自动重新启动。如果容器不期望停止运行,这可以确保容器总是在它退出时重新启动。
  • \n
  • --name postgres: 这是一个标志,为容器指定了一个名称,即"postgres"。这使得容器可以通过这个名称来引用,而不必使用容器ID。
  • \n
  • -v /mnt/storage/postgresql/data:/var/lib/postgresql/data: 这是一个标志,指定了主机文件系统路径/mnt/storage/postgresql/data和容器内部路径/var/lib/postgresql/data之间的卷映射。这个映射用于将PostgreSQL数据库数据存储在主机上,以便数据持久性。容器内的数据将被存储在主机的/mnt/storage/postgresql/data目录中。
  • \n
  • -e POSTGRES_PASSWORD=123456: 这是一个标志,用于设置PostgreSQL数据库的密码。在这个例子中,密码被设置为"123456",这是一个示例密码。你可以根据需要更改它。
  • \n
  • -p 5432:5432: 这是一个标志,用于将主机端口5432映射到容器内的端口5432。这是PostgreSQL数据库默认监听的端口。通过这个映射,你可以在主机上通过5432端口访问容器内运行的PostgreSQL数据库。
  • \n
  • postgres:14: 这是要运行的Docker镜像的名称和标签。在这里,使用的是PostgreSQL 14版本的官方Docker镜像。Docker将下载并运行此镜像以创建容器。
  • \n
\n

一旦运行此命令,Docker将创建一个PostgreSQL容器,该容器以后台模式运行,具有指定的名称postgres,将数据存储在主机上的/mnt/storage/postgresql/data目录中,使用指定的密码,同时将主机端口5432映射到容器内的5432端口上。容器将在退出时自动重新启动,以确保持续可用性。

\n
\n

3 添加PostGIS拓展

\n
    \n
  • 进入容器
  • \n
\n
1
docker exec -it ca24dbe6f3d7 bash
\n
    \n
  • 更新软件包列表
  • \n
\n
1
apt update
\n
    \n
  • 使用apt在线安装PostGIS(注意版本要和PostgreSQL兼容)
  • \n
\n
1
apt install postgresql-14-postgis-3 postgresql-14-postgis-3-dbgsym postgresql-14-postgis-3-scripts
\n
    \n
  • 使用Navicat等客户端软件连接到PostgreSQL,并新建查询,输入以下SQL语句,点击执行
  • \n
\n
1
2
CREATE EXTENSION postgis;
SELECT postgis_full_version();
\n
    \n
  • 出现类似如下查询结果即为成功
  • \n
\n
1
POSTGIS="3.4.0 0874ea3" [EXTENSION] PGSQL="140" GEOS="3.11.1-CAPI-1.17.1" PROJ="9.1.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/var/lib/postgresql/.local/share/proj DATABASE_PATH=/usr/share/proj/proj.db" LIBXML="2.9.14" LIBJSON="0.16" LIBPROTOBUF="1.4.1" WAGYU="0.5.0 (Internal)"
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":1893,"excerpt":"","more":"

1 下载镜像

\n\n

\"image-20231009173917562\"

\n
    \n
  • 下载
  • \n
\n
1
docker pull postgres:14
\n
    \n
  • 查看
  • \n
\n
1
docker images
\n

\"image-20231009200905029\"

\n

2 镜像转为容器

\n
1
docker run -d --restart=always --name postgres -v /mnt/storage/postgresql/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:14
\n
    \n
  • docker run: 这是Docker命令的开头,用于运行一个容器。
  • \n
  • -d: 这是一个标志,表示容器应以后台模式运行(detached mode),这意味着容器将在后台运行,不会占用终端。
  • \n
  • --restart=always: 这是一个标志,指定容器在退出时应该始终自动重新启动。如果容器不期望停止运行,这可以确保容器总是在它退出时重新启动。
  • \n
  • --name postgres: 这是一个标志,为容器指定了一个名称,即"postgres"。这使得容器可以通过这个名称来引用,而不必使用容器ID。
  • \n
  • -v /mnt/storage/postgresql/data:/var/lib/postgresql/data: 这是一个标志,指定了主机文件系统路径/mnt/storage/postgresql/data和容器内部路径/var/lib/postgresql/data之间的卷映射。这个映射用于将PostgreSQL数据库数据存储在主机上,以便数据持久性。容器内的数据将被存储在主机的/mnt/storage/postgresql/data目录中。
  • \n
  • -e POSTGRES_PASSWORD=123456: 这是一个标志,用于设置PostgreSQL数据库的密码。在这个例子中,密码被设置为"123456",这是一个示例密码。你可以根据需要更改它。
  • \n
  • -p 5432:5432: 这是一个标志,用于将主机端口5432映射到容器内的端口5432。这是PostgreSQL数据库默认监听的端口。通过这个映射,你可以在主机上通过5432端口访问容器内运行的PostgreSQL数据库。
  • \n
  • postgres:14: 这是要运行的Docker镜像的名称和标签。在这里,使用的是PostgreSQL 14版本的官方Docker镜像。Docker将下载并运行此镜像以创建容器。
  • \n
\n

一旦运行此命令,Docker将创建一个PostgreSQL容器,该容器以后台模式运行,具有指定的名称postgres,将数据存储在主机上的/mnt/storage/postgresql/data目录中,使用指定的密码,同时将主机端口5432映射到容器内的5432端口上。容器将在退出时自动重新启动,以确保持续可用性。

\n
\n

3 添加PostGIS拓展

\n
    \n
  • 进入容器
  • \n
\n
1
docker exec -it ca24dbe6f3d7 bash
\n
    \n
  • 更新软件包列表
  • \n
\n
1
apt update
\n
    \n
  • 使用apt在线安装PostGIS(注意版本要和PostgreSQL兼容)
  • \n
\n
1
apt install postgresql-14-postgis-3 postgresql-14-postgis-3-dbgsym postgresql-14-postgis-3-scripts
\n
    \n
  • 使用Navicat等客户端软件连接到PostgreSQL,并新建查询,输入以下SQL语句,点击执行
  • \n
\n
1
2
CREATE EXTENSION postgis;
SELECT postgis_full_version();
\n
    \n
  • 出现类似如下查询结果即为成功
  • \n
\n
1
POSTGIS="3.4.0 0874ea3" [EXTENSION] PGSQL="140" GEOS="3.11.1-CAPI-1.17.1" PROJ="9.1.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/var/lib/postgresql/.local/share/proj DATABASE_PATH=/usr/share/proj/proj.db" LIBXML="2.9.14" LIBJSON="0.16" LIBPROTOBUF="1.4.1" WAGYU="0.5.0 (Internal)"
\n"},{"title":"Docker镜像打包迁移","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3909901784%2C2254357094%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DPNG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"docker,配置,迁移","abbrlink":"620cff7f","date":"2023-10-09T01:20:52.000Z","_content":"\n{% note simple %} 要将 Docker 镜像从一台服务器传输到另一台服务器,您可以使用以下步骤:{% endnote %}\n\n### **1 导出 Docker 镜像**:\n\n- 首先,在源服务器上导出您要传输的 Docker 镜像。使用以下命令将镜像导出为一个文件:\n\n```bash\ndocker save -o image.tar image_name:tag\n```\n\n- 其中 `image_name:tag` 是您要导出的 Docker 镜像的名称和标签。此命令将创建一个名为 `image.tar` 的镜像文件。\n\n### **2 传输 Docker 镜像文件**\n\n- 将导出的 Docker 镜像文件 `image.tar` 从源服务器传输到目标服务器。您可以使用各种方法,如SCP、SFTP、rsync 或者将文件上传到云存储服务(如Amazon S3、Google Cloud Storage)等方式来传输文件。\n\n### **3 导入 Docker 镜像**\n\n- 在目标服务器上导入传输过来的 Docker 镜像文件。使用以下命令来导入镜像:\n\n```bash\ndocker load -i image.tar\n```\n\n- 这将从 `image.tar` 文件中加载镜像到目标服务器的 Docker 环境中。\n\n### **4 验证导入的 Docker 镜像**\n\n- 您可以使用以下命令来验证在目标服务器上成功导入了镜像:\n\n```BASH\ndocker images\n```\n\n- 这将列出在目标服务器上可用的 Docker 镜像,确保您的镜像已成功导入。\n\n- 现在,您已经成功将 Docker 镜像从一台服务器传输到另一台服务器。请注意,在进行这些操作时,确保您有足够的权限来执行 Docker 命令和文件传输操作,并且在网络连接方面没有限制。另外,确保目标服务器上的 Docker 环境与源服务器兼容,以便正常运行您的镜像。\n","source":"_posts/Docker镜像打包迁移.md","raw":"---\ntitle: Docker镜像打包迁移\ncover: >-\n https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3909901784%2C2254357094%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DPNG\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'docker,配置,迁移'\ncategories:\n - 云原生\ntags:\n - 容器\n - Docker\nabbrlink: 620cff7f\ndate: 2023-10-09 09:20:52\n---\n\n{% note simple %} 要将 Docker 镜像从一台服务器传输到另一台服务器,您可以使用以下步骤:{% endnote %}\n\n### **1 导出 Docker 镜像**:\n\n- 首先,在源服务器上导出您要传输的 Docker 镜像。使用以下命令将镜像导出为一个文件:\n\n```bash\ndocker save -o image.tar image_name:tag\n```\n\n- 其中 `image_name:tag` 是您要导出的 Docker 镜像的名称和标签。此命令将创建一个名为 `image.tar` 的镜像文件。\n\n### **2 传输 Docker 镜像文件**\n\n- 将导出的 Docker 镜像文件 `image.tar` 从源服务器传输到目标服务器。您可以使用各种方法,如SCP、SFTP、rsync 或者将文件上传到云存储服务(如Amazon S3、Google Cloud Storage)等方式来传输文件。\n\n### **3 导入 Docker 镜像**\n\n- 在目标服务器上导入传输过来的 Docker 镜像文件。使用以下命令来导入镜像:\n\n```bash\ndocker load -i image.tar\n```\n\n- 这将从 `image.tar` 文件中加载镜像到目标服务器的 Docker 环境中。\n\n### **4 验证导入的 Docker 镜像**\n\n- 您可以使用以下命令来验证在目标服务器上成功导入了镜像:\n\n```BASH\ndocker images\n```\n\n- 这将列出在目标服务器上可用的 Docker 镜像,确保您的镜像已成功导入。\n\n- 现在,您已经成功将 Docker 镜像从一台服务器传输到另一台服务器。请注意,在进行这些操作时,确保您有足够的权限来执行 Docker 命令和文件传输操作,并且在网络连接方面没有限制。另外,确保目标服务器上的 Docker 环境与源服务器兼容,以便正常运行您的镜像。\n","slug":"Docker镜像打包迁移","published":1,"updated":"2023-10-21T04:52:02.184Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5vc000bfc3u3b014yt7","content":"

要将 Docker 镜像从一台服务器传输到另一台服务器,您可以使用以下步骤:

\n
\n

1 导出 Docker 镜像

\n
    \n
  • 首先,在源服务器上导出您要传输的 Docker 镜像。使用以下命令将镜像导出为一个文件:
  • \n
\n
1
docker save -o image.tar image_name:tag
\n
    \n
  • 其中 image_name:tag 是您要导出的 Docker 镜像的名称和标签。此命令将创建一个名为 image.tar 的镜像文件。
  • \n
\n

2 传输 Docker 镜像文件

\n
    \n
  • 将导出的 Docker 镜像文件 image.tar 从源服务器传输到目标服务器。您可以使用各种方法,如SCP、SFTP、rsync 或者将文件上传到云存储服务(如Amazon S3、Google Cloud Storage)等方式来传输文件。
  • \n
\n

3 导入 Docker 镜像

\n
    \n
  • 在目标服务器上导入传输过来的 Docker 镜像文件。使用以下命令来导入镜像:
  • \n
\n
1
docker load -i image.tar
\n
    \n
  • 这将从 image.tar 文件中加载镜像到目标服务器的 Docker 环境中。
  • \n
\n

4 验证导入的 Docker 镜像

\n
    \n
  • 您可以使用以下命令来验证在目标服务器上成功导入了镜像:
  • \n
\n
1
docker images
\n
    \n
  • \n

    这将列出在目标服务器上可用的 Docker 镜像,确保您的镜像已成功导入。

    \n
  • \n
  • \n

    现在,您已经成功将 Docker 镜像从一台服务器传输到另一台服务器。请注意,在进行这些操作时,确保您有足够的权限来执行 Docker 命令和文件传输操作,并且在网络连接方面没有限制。另外,确保目标服务器上的 Docker 环境与源服务器兼容,以便正常运行您的镜像。

    \n
  • \n
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":637,"excerpt":"","more":"

要将 Docker 镜像从一台服务器传输到另一台服务器,您可以使用以下步骤:

\n
\n

1 导出 Docker 镜像

\n
    \n
  • 首先,在源服务器上导出您要传输的 Docker 镜像。使用以下命令将镜像导出为一个文件:
  • \n
\n
1
docker save -o image.tar image_name:tag
\n
    \n
  • 其中 image_name:tag 是您要导出的 Docker 镜像的名称和标签。此命令将创建一个名为 image.tar 的镜像文件。
  • \n
\n

2 传输 Docker 镜像文件

\n
    \n
  • 将导出的 Docker 镜像文件 image.tar 从源服务器传输到目标服务器。您可以使用各种方法,如SCP、SFTP、rsync 或者将文件上传到云存储服务(如Amazon S3、Google Cloud Storage)等方式来传输文件。
  • \n
\n

3 导入 Docker 镜像

\n
    \n
  • 在目标服务器上导入传输过来的 Docker 镜像文件。使用以下命令来导入镜像:
  • \n
\n
1
docker load -i image.tar
\n
    \n
  • 这将从 image.tar 文件中加载镜像到目标服务器的 Docker 环境中。
  • \n
\n

4 验证导入的 Docker 镜像

\n
    \n
  • 您可以使用以下命令来验证在目标服务器上成功导入了镜像:
  • \n
\n
1
docker images
\n
    \n
  • \n

    这将列出在目标服务器上可用的 Docker 镜像,确保您的镜像已成功导入。

    \n
  • \n
  • \n

    现在,您已经成功将 Docker 镜像从一台服务器传输到另一台服务器。请注意,在进行这些操作时,确保您有足够的权限来执行 Docker 命令和文件传输操作,并且在网络连接方面没有限制。另外,确保目标服务器上的 Docker 环境与源服务器兼容,以便正常运行您的镜像。

    \n
  • \n
\n"},{"title":"K8S集群环境搭建(Containerd作为容器)","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D2793533854%2C2733450472%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"K8S, Containerd","abbrlink":"9d39de82","date":"2023-08-06T07:08:12.000Z","swiper_index":1,"_content":"\n## 1 前述\n\n### 1.1 云原生定义\n\n- **Pivotal《传统应用和SOA向云原生转型指南》(2015)的云原生的特征:**\n - 符合 12 要素应用\n - 基准代码:一份基准代码,多份部署(类似于Git版本控制系统的main分支);\n - 显示声明所有依赖关系:通过依赖清单,确切地声明所有依赖项;\n - 把后端服务当作附加资源:各种后端服务(如数据库、消息队列、邮件服务、缓存系统),不区别对待本地或第三方服务;\n - 构建、发布、运行:严格区分构建、发布、运行这三个步骤;\n - 无状态进程:应用的进程必须无状态;\n - 端口绑定:互联网应用通过端口绑定来提供服务,并监听发送至该端口的请求。应用完全自我加载,不依赖于任何网络服务器;\n - 并发:通过进程模型进行扩展。进程是一等公民;\n - 易处理:进程可以瞬间开启或停止,有利于快速、弹性的伸缩应用。进程应追求最小启动时间;进程一旦接受终止信号就会优化的终止;进程在面对突然死亡时保持健壮;\n - 开发环境与线上环境等价:尽可能的保持开发,预发布,线上环境相同,以尽量做到持续部署;\n - 日志:应用本身从不存储自己的输出流,不应该试图去写或者管理日志文件,相反,每一个运行的进程都会直接的标准输出(stdout)事件流;\n - 管理进程:后台管理任务当作一次性进程运行;\n - 面向微服务架构\n - 微服务将单体系统分解为多个“仅做好一件事”的可独立部署的服务。这件事通常代表某项业务能力,或者最小可提供业务价值的“原子“服务单元。具备以下优点:\n - 变更周期解耦:只要变更限于单一有界的环境,并且服务继续履行其现有合约;实现了更频繁和快速的部署,从而实现了持续的价值流动;\n - 减少业务领域和现有代码的学习负担;\n - 可以加快采用新技术的步伐;\n - 提供独立、高效的服务扩展;\n - 自服务敏捷架构(可以认为是DevOps):\n - 一个能够持续部署和运行这些微服务的平台;如代码以Git形式“推送”。 然后,自服务敏捷平台构建应用程序工件,构建应用程序环境,部署应用程序,并启动必要的进程。 团队不必考虑他们的代码在哪里运行或如何到达那里,这些对用户都是透明得,因为平台会关注这些。\n - 基于 API 的协作\n - 抗脆弱性\n- **云原生计算基金会(2015)定义的特征**\n - 应用容器化\n - 面向微服务架构\n - 应用支持容器的编排制度\n- **云原生计算基金会(2018)定义**\n - 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API\n - 这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更\n\n\n\n### 1.2 容器、虚拟机、Docker、Openstack 和 K8S\n\n- **容器&虚拟机**:均为虚拟化技术,容器更为轻量化、效率更高、启动更快;虚拟机需数分钟启动,容器仅需数十毫秒;\n- **Docker**: 容器化虚拟技术事实上的标准;\n- **OpenStack**:分布式的虚拟机服务平台,相比于普通的虚拟机软件(如Vmare),多了分布式虚拟机调度管理的功能和节点的负载均衡; \n- **K8S**:分布式的容器调度管理平台,相比于Docker,多了分布式的容器调度管理和节点的负载均衡;\n- **注意**:常见的中文资料均言K8S是容器编排软件,这里的编排是指调度、管理的意思,而非工作流编排的意思,容易有误导性;\n- **注意**:无论是Openstack还是K8S,均不支持跨节点的容器或虚拟机的创建;所以将多台电脑合并成一台电脑的想法是不现实的;\n\n\n\n### 1.3 K8S 和 云原生\n\n在单机上运行容器,无法发挥它的最大效能,只有形成集群,才能最大程度发挥容器的良好隔离、资源分配与编排管理的优势,而对于容器的编排管理,Swarm、Mesos 和 Kubernetes 的大战已经基本宣告结束,Kubernetes 成为了无可争议的赢家。\n\n- Kubernetes 成为云原生应用的基石\n- 有机会成为跨云的真正的云原生应用的操作系统\n\n### 1.4 K8S 介绍\n\n- **官方**:**Kubernetes** 也称为 **K8S**,是用于自动部署、扩缩和管理容器化应用程序的开源系统。\n- **发展历史**:由**Google**设计并捐赠给**Cloud Native Computing Foundation**(今属**Linux**基金会)来使用。\n- **能力**:**Google** 每周运行数十亿个容器,能够在不扩张运维团队的情况下进行规模扩展。\n- **作用**: 相当于一个操作系统,可以快速提供**PaaS**服务:1)创建各种容器化测试化环境;2)发布各种容器化服务;3)快速安装各种容器化服务,如MongoDB、**Hbase**、**Postgresql**、**Redis**、**Spark**等;快速提供IaaS服务:通过安装**Openstack**或**KubeVirt**等软件;快速提供**FaaS**服务:通过安装**Kube** **Native**等软件;\n\n![image-20230414170948460](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230414170948460.png)\n\n![image-20230414171119324](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230414171119324.png)\n\n### 1.5 基本概念\n\n- **Container**:轻量级的系统虚拟化技术,使用namespace隔离环境。\n- **Pod**:\n- - **K8S** 的调度的基本单位,**Pod**是一组紧密关联的容器集合,内部的容器共享PID、IPC、Network和UTS namespace。可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。\n \n ![image-20230415141540422](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415141540422.png)\n\n​\t\t\t\tPod的设计理念基础是微服务,不同类型的业务组合由不同类型的Pod执行,一个Pod对应一个微服务\n\n- - K8S中,采用manifest(yaml或json)定义对象,比如nginx服务(包含了一个nginx 容器image)定义为:\n\n```YAML\n\tapiVersion: v1\n\tkind: Pod\n\tmetadata:\n\t name: nginx\n\t labels:\n\t app: nginx\n\tspec:\n\t containers:\n\t - name: nginx\n\t image: nginx\n\t ports:\n```\n\n- - **Node:** 是Pod运行的主机,可以为物理机,也可以为虚拟机。每个Node上要运行container runtime (docker或者rkt)、kubelet和kube-proxy服务\n - ![image-20230415142123300](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415142123300.png)\n\n- - **Service:** 一个Pod只是一个运行服务的实例,可能在一个节点上停止,在另一个节点以一个新的IP启动一个新的Pod。在K8S集群中,客户端需要访问的服务就是Service对象。每个Service会对应一个集群内部有效的虚拟IP,集群内部通过虚拟IP访问一个服务。\n- - **Kubelet:** 每个Node的任务和资源管理\n- - **Kube-proxy:** 负责每个节点的硬件负载均衡\n\n\n\n### 1.6 K8S 常见命令\n\n- **运行一个Nginix容器:** \n - `kubectl run --image=nginx:alpine nginx-app --port=80`\n- **Kubectl 命令:**\n - `kubectl get - 类似于 docker ps,查询资源列表`\n - `kubectl describe - 类似于 docker inspect,获取资源的详细信息`\n - `kubectl logs - 类似于 docker logs,获取容器的日志`\n - `kubectl exec - 类似于 docker exec,在容器内执行一个命令`\n - `kubectl create -f file.yaml – 根据yaml创建Deployment资源`\n - `kubectl delete 删除命令,可删除node、pod、svc、depolyment`\n- **yaml 定义 Pod:**\n\n```YAML\n\tapiVersion: v1\n\tkind: Pod\n\tmetadata:\n\t name: nginx\n\t labels:\n\t app: nginx\n\tspec:\n\t containers:\n\t - name: nginx\n\t image: nginx\n\t ports:\n\t - containerPort: 80\n```\n\n- **Volume:**\n - 一个**Pod**一旦发生异常,**Pod** 产生的数据会随着 **Pod** 消亡而自动消失。**Volume** 用于持久化容器数据。\n - 如:为 **redis** 容器指定一个 **hostPath** 来存储 **redis** 数据\n\n```YAML\n\tapiVersion: v1\n\tkind: Pod\n\tmetadata:\n\t name: redis\n\tspec:\n\t containers:\n\t - name: redis\n\t image: redis\n\t volumeMounts:\n\t - name: redis-persistent-storage\n\t mountPath: /data/redis\n\t volumes:\n\t - name: redis-persistent-storage\n\t hostPath:\n\t path: /data/\n```\n\n- **Service:**\n - kubectl创建Pod,Pob的IP地址会随着Pod的重启而变化\n - 为了访问Pod提供的服务,采用Service提供为一组Pod一个统一的入口,并提供负载均衡和**自动服务发现**。\n - `kubectl expose deployment nginx-app --port=80 --target-port=80 --type=NodePort`\n- **Replicas set:**\n - 在一个Service中,可为Pod设置数个副本,以确保服务永不掉线\n - `kubectl scale --replicas=3 deployment/nginx-app`\n\n![image-20230415143046325](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415143046325.png)\n\n- **滚动升级(Rolling Update):**\n - 滚动升级(Rolling Update)通过逐个副本容器替代升级的方式来实现无中断的服务升级:\n - `kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2`\n - 滚动升级中若发生错误,可随时回滚:\n - `kubectl rolling-update frontend-v1 frontend-v2 --rollback`\n- **资源限制:**\n - K8S通过 cgroups 提供容器资源管理的功能,可限制每个容器的 CPU 和内存使用,比如对于刚才创建的 deployment,可以通过下面的命令限制 nginx 容器最多只用 50% 的 CPU 和 128MB 的内存:\n - `kubectl set resources deployment nginx-app -c=nginx --limits=cpu=500m,memory=128Mi`\n - 或者在yaml中指定资源限制\n- **健康检查:**\n - K8S Kubernetes 提供了两种探针(Probe,支持 exec、tcpSocket 和 http 方式)来探测容器的状态:\n - LivenessProbe:探测应用是否处于健康状态,如果不健康则删除并重新创建容器\n - ReadinessProbe:探测应用是否启动完成并且处于正常服务状态,如果不正常则不会接收来自 Kubernetes Service 的流量\n\n\n\n### 1.7 K8S 常用运维命令\n\n- **查看pod,及所在的节点:**\n - `kubectl get pods -o wide`\n- **若有节点warn,回收垃圾失败:**\n\n```BASH\nkubectl drain --delete-local-data --ignore-daemonsets NODENAME\nkubectl uncordon NODENAME\n```\n\n\n\n## 2 K8S 集群基础环境部署\n\n{% p red, 若服务器之前搭建过 K8S 集群,需要彻底删除 %}\n\n参考:https://blog.csdn.net/qq_43159578/article/details/124131709 \n\n- 停止所有的Kubernetes服务\n\n```BASH\nsudo systemctl stop kubelet\nsudo systemctl stop containerd\n```\n\n- 删除Kubernetes软件包\n\n```BASH\nyum remove kubeadm kubectl kubelet kubernetes-cni -y\n```\n\n- 删除配置文件\n\n```BASH\n# 清除残留文件\nrm -rf /root/.kube\nrm -rf /etc/cni/net.d\nrm -rf /etc/kubernetes/*\n```\n\n- 删除etcd数据目录\n\n```BASH\nrm -rf /var/lib/etcd\n```\n\n- 清除iptables或者ipvs的配置\n\n```BASH\n# sudo ipvsadm -C\n# sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo # # iptables -Xkubec\n```\n\n- 如果只是想重新部署集群\n\n```BASH\nkubeadm reset\n```\n\n`kubeadm reset` 命令用于清除当前节点上所有与 `kubeadm init` 或 `kubeadm join` 命令创建的 Kubernetes 集群相关的状态。其主要作用如下:\n\n1. 移除 Kubernetes 集群相关的系统服务,如 kubelet 和 kube-proxy。\n\n2. 删除所有在当前节点上创建的 Kubernetes 对象,包括 Pod、Service、Deployment 等。\n\n3. 移除 etcd 中与当前节点相关的信息,如节点标识、配置信息等。\n\n4. 删除 Kubernetes 数据目录,包括证书、密钥、kubeconfig 文件等。\n\n使用 `kubeadm reset` 命令可以清除当前节点上的所有 Kubernetes 相关状态,以便重新创建新的 Kubernetes 集群或者将当前节点加入到另一个 Kubernetes 集群中。在进行 `kubeadm reset` 操作之前,应该先备份当前节点上的重要数据和配置信息,以便在需要时进行恢复。\n\n\n\n### 2.1 服务器\t\n\n- **网络资源:**各节点间通过**千兆交换机**互联(非光纤交换机)\n- **管理节点:**\n - Gisweb4,Gisweb3\n- **计算节点:**\n - Gisweb3,GISweb2,dellm640-01, Gisweb4, dellslot03, dellslot4\n- **持久化存储资源:**\n - 目前采用:\n - nfs-client: 23服务器的/mnt/storage/k8s/pv\n- **Node1(刀片3):**\n - 子网 IP:192.168.0.177\n - CPU:Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz;32核心,64线程。\n - 内存:64GB(32GB*2),每根DDR4,3000Mhz\n- **Node2(刀片4):**\n - 子网 IP:192.168.0.209\n - CPU:Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz;32核心64线程。\n - 内存:64GB(32GB*2),每根DDR43200Mhz\n\n\n\n### 2.2 安装过程\n\n#### 2.2.1 前提条件\n\na. 节点之中不可以有重复的主机名、`MAC` 地址或 `product_uuid`\n\n```BASH\ncat /sys/class/dmi/id/product_uuid\n```\n\nb. 检查网络适配器:若有多个网卡,确保每个node的子网通过默认路由可达\n\nc. 防火墙开放端口(所有节点):\n\n![image-20230415145138479](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415145138479.png)\n\n```BASH\nsystemctl restart firewalld\nfirewall-cmd --zone=public --add-port=443/tcp --permanent\nfirewall-cmd --zone=public --add-port=6443/tcp --permanent\nfirewall-cmd --zone=public --add-port=2379-2380/tcp --permanent\nfirewall-cmd --zone=public --add-port=10250/tcp --permanent\nfirewall-cmd --zone=public --add-port=10259/tcp --permanent\nfirewall-cmd --zone=public --add-port=10257/tcp --permanent\n```\n\nd. 关闭防火墙(所有节点):\n\n```BASH\nsystemctl stop firewalld NetworkManager\nsystemctl disable firewalld NetworkManager\n```\n\ne. 关闭交换分区并禁用 SELinux(所有节点):\n\n```bash\n# 查看 交换分区\nfree -m\n\n# 将 `SELinux` 设置为 `permissive` 模式(相当于将其禁用) 第一行是临时禁用,第二行是永久禁用\nsetenforce 0\nsed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config\n\n# 关闭swap;第一行是临时禁用,第二行是永久禁用\nswapoff -a \nsed -ri 's/.*swap.*/#&/' /etc/fstab\n\n# 允许 iptables 检查桥接流量 (K8s 官方要求)\ncat <(所有节点):\n\n```bash\nyum install chrony -y\nsystemctl start chronyd\nsystemctl enable chronyd\nchronyc sources\n```\n\ng. 设置主机名并添加 ip 映射(所有节点):\n\n```BASH\n# 以 gisweb4 为例\n# 查看主机名cat \nhostname\n# 设置主机名\nhostnamectl set-hostname gisweb4\n# 更新\nbash\n\n# 添加 ip 映射\necho \"125.250.153.23 gisweb4\" >> /etc/hosts\necho \"125.250.153.23 gisweb4\" >> /etc/hosts\n# 两台无外网ip的刀片添加内网ip\n\n# /etc/hosts 文件内容如下:\n192.168.0.203 gisweb1\n192.168.0.202 gisweb2\n192.168.0.204 gisweb4\n192.168.0.208 gisweb3\n192.168.0.176 dellm640-01\n192.168.0.177 dellm640-03\n192.168.0.209 dellslot04\n\n125.220.153.26 gisweb1\n125.220.153.25 gisweb2\n125.220.153.22 gisweb3\n125.220.153.23 gisweb4\n125.220.153.28 dellm640-01\n```\n\n#### 2.2.2 升级 Linux 内核到最新(所有节点):\n\n**清除缓存,重新构建缓存:**\n\n```BASH\n# 清除缓存\nyum makecache & yum -y update\n```\n\n**参考链接:*https://zhuanlan.zhihu.com/p/368879345***\n\n#### 2.2.3 转发 IPv4 并让 iptables 看到桥接流量(所有节点)\n\n``````SHELL\n# a.\t验证br_netfilter是否已经加载\nlsmod | grep br_netfilter\n# b.\t加载br_netfilter模块:\nmodprobe br_netfilter\n# c.\tiptabels桥接\ncat <(所有节点)\n\n``````BASH\nyum install ipvsadm ipset sysstat conntrack libseccomp -y\n\ncat <(所有节点,lb除外)\n\n```BASH\ncat <(选用containerd,弃用docker):\n\n- **Docker-engine+cir-dockerd方案(舍弃)**:从kubernetes 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,需要在kubelet和docker之间加上一个中间层cri-docker。cri-docker是一个支持CRI标准的shim。一头通过CRI跟kubelet交互,另一头跟docker api交互,从而间接的实现了kubernetes以docker作为容器运行时。但是这种架构缺点也很明显,**调用链更长,效率更低**。因此选用containerd作为容器runtime\n- **containerd**方案: **containerd**是一个**docker**的容器**runtime**,成为**CNCF**的官方项目\n\n官方安装教程:https://github.com/containerd/containerd/blob/main/docs/getting-started.md\n\n```BASH\n# 安装containerd.io\nyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo\nyum install containerd.io\n\n\n# 安装CNI插件\n# i.下载cni-plugins.tar 从https://github.com/containernetworking/plugins/releases\n# 在线下载:\n# wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz\n# ii.在/opt/cni/bin下解压:\n\n# 把22上的拷贝到没有公网ip的服务器上\n# scp -P22 /opt/cni/bin/cni-plugins-linux-amd64-v1.1.1.tgz root@192.168.0.203:/opt/cni/bin/\n\nmkdir -p /opt/cni/bin\ncd /opt/cni/bin\ntar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz\n\n\n# 重启服务:\nsystemctl restart containerd\n# 开机启动:\nsystemctl enable containerd\n\n\n# 配置systemd cgroup驱动\n# 修改配置文件,将 SystemdCgroup 改为 true 注意配置项是区分大小写的\ncontainerd config default | sudo tee /etc/containerd/config.toml\nvim /etc/containerd/config.toml\n\n[plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n ...\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n# 并将 sandbox_image 地址修改为国内的地址\n并且将 sandbox_image = \"registry.k8s.io/pause:3.6\"\n修改为 sandbox_image = \"registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6\"\n\n# 启动 containerd\nsystemctl restart containerd\n\n# 开机自启\nsystemctl enable containerd\n\n# 启动成功后可以查看到监听的端口\nnetstat -nlput | grep containerd\ntcp 0 0 127.0.0.1:36669 0.0.0.0:* LISTEN 8665/containerd off (0.00/0/0)\n```\n\n\n#### 2.2.7 在所有电脑上安装 kubeadm, kubelet and kubectl(所有节点)\n\n```BASH\n# a.\tkubeadm: the command to bootstrap the cluster.\n# b.\tkubelet: the component that runs on all of the machines in your cluster and does things like starting pods and containers.\n# c.\tkubectl: the command line util to talk to your cluster.\n```\n\n1. *配置阿里云的k8s源,加速安装*\n\n```BASH\ncat <若出现如下错误(上一次集群初始化的残留文件)\n\n```bash\n# 如果出现报错 \n[ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists\n```\n\n执行如下命令后再次初始化\n\n```BASH\nrm -rf /var/lib/etcd\nrm -rf /etc/kubernetes/manifests/* \n```\n\n#### 2.2.9 配置环境变量(初始化后)\n\n```BASH\nmkdir -p $HOME/.kube\ncp -i /etc/kubernetes/admin.conf $HOME/.kube/config\nchown $(id -u):$(id -g) $HOME/.kube/config\n```\n\n#### 2.2.10 将 master 作为node(管理节点上执行)\n\n- 检查 node 是否存在污点\n - 污点值有三种:\n - NoSchedule:一定不被调度\n - PreferNoSchedule:尽量不被调度【也有被调度的几率】\n - NoExecute:不会调度,并且还会驱逐Node已有Pod\n\n```BASH\nkubectl describe nodes gisweb4 |grep Taints\n```\n\n- 删除污点:\n\n```BASH\n# 本次删除的污点为:node-role.kubernetes.io/control-plane-\nkubectl taint nodes --all node-role.kubernetes.io/control-plane-\n```\n\n#### 2.2.11 安装 Pod 网络插件(CNI:Container Network Interface)(master)\n\n你必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信。\n\n确保kubeadm初始化时,pod_cidr 为10.244.0.0\n\n- 下载 **yml** 配置文件\n - 或自己下载到本地\n\n```BASH\ncurl https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml -O\n```\n\n- 编辑**kube-flannel.yml**\n - 找到如下位置,添加 **iface-regex**\n\n```BASH\nvim kube-flannel.yml\n# 添加\n- --iface-regex=^192.168..\n```\n\n![](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408114839608.png)\n\n- 构建\n\n```BASH\nkubectl apply -f kube-flannel.yml\n```\n\n#### 2.2.12 node 节点加入集群\n\n- 管理节点获取加入命令:\n\n```BASH\nkubeadm token create --print-join-command\n# 返回如下\nkubeadm join 125.220.153.23:6443 --token x0wdaj.d5wltdzdtos22fl6 --discovery-token-ca-cert-hash sha256:9245d363cdeb1757bacba21b9ccdc06a28e7490bcedfb0eeb404b56f769fa112\n```\n\n- 在 node 节点执行生成命令\n\n如果此步报如下错误\n\nThe connection to the server localhost:8080 was refused - did you specify the right host\n\n1. 出现这个问题的原因是kubectl命令需要使用`kubernetes-admin`的身份来运行,在`kubeadm int`启动集群的步骤中就生成了`/etc/kubernetes/admin.conf`。\n2. 因此,解决方法如下,将主节点中的`/etc/kubernetes/admin.conf`文件拷贝到工作节点相同目录下:\n3. 然后分别在工作节点上配置环境变量:\n\n\n{% p red, 解决方案 %}\n\n- 主节点执行\n\n```BASH\n# 将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到工作节点相同目录下:\nscp -P22 /etc/kubernetes/admin.conf oge@125.220.153.22:/etc/kubernetes/\n```\n\n- `node` 节点执行如下命令后,再次执行加入集群的命令\n\n```BASH\necho \"export KUBECONFIG=/etc/kubernetes/admin.conf\" >> ~/.bash_profile\nsource ~/.bash_profile\n```\n\n- 如果是重新加入集群,需要 `reset` 一下\n\n```BASH\nkubeadm reset\n```\n\n\n\n#### 2.2.13 添加新的 master 节点\n\n- 管理节点:\n\n```BASH\n# 管理节点查看\nkubeadm token create --print-join-command\n# 生成如下\nkubeadm join 125.220.153.23:6443 --token mc56rw.t9b3d1ql53yhom9y --discovery-token-ca-cert-hash sha256:753ccf865a9c590413043d469a9848300871afaef7221e3fdb97d981939a2b83\n\n# 管理节点\nkubeadm init phase upload-certs --upload-certs \n# 输出\nI0413 11:00:30.817038 10009 version.go:256] remote version is much newer: v1.27.0; falling back to: stable-1.25\n[upload-certs] Storing the certificates in Secret \"kubeadm-certs\" in the \"kube-system\" Namespace\n[upload-certs] Using certificate key:\n70d43cde7f6423b5c3e88c0fa9d08511cefbc53992dc63a13544cd548a912941\n\n# 管理节点,在networking前添加:controlPlaneEndpoint: 125.220.153.23:6443\nkubectl -n kube-system edit cm kubeadm-config\n```\n\n- 新的master节点\n\n```BASH\n# 新节点\n# 重新加入的话,检查是否需要kill掉6443端口(这是之前的api-service服务)\nkubeadm join 125.220.153.23:6443 --token mc56rw.t9b3d1ql53yhom9y --discovery-token-ca-cert-hash sha256:753ccf865a9c590413043d469a9848300871afaef7221e3fdb97d981939a2b83 --control-plane --certificate-key 70d43cde7f6423b5c3e88c0fa9d08511cefbc53992dc63a13544cd548a912941\n\n# 生成\nThis node has joined the cluster and a new control plane instance was created:\n\n* Certificate signing request was sent to apiserver and approval was received.\n* The Kubelet was informed of the new secure connection details.\n* Control plane label and taint were applied to the new node.\n* The Kubernetes control plane instances scaled up.\n* A new etcd member was added to the local/stacked etcd cluster.\n\nTo start administering your cluster from this node, you need to run the following as a regular user:\n\n mkdir -p $HOME/.kube\n sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\n sudo chown $(id -u):$(id -g) $HOME/.kube/config\n\nRun 'kubectl get nodes' to see this node join the cluster.\n```\n\n\n\n## 3 K8S 管理平台 dashboard 环境部署(管理节点)\n\n- 下载 **yaml** 配置文件并应用\n - 或下载到本地然后上传\n\n```bash\nkubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml\n```\n\n- 修改配置文件(以node)\n - 但是这个只能内部访问,所以要外部访问,要么部署 ingress,要么就是设置 service NodePort 类型。这里选择 service 暴露端口。\n\n```BASH\nkubectl edit svc kubernetes-dashboard -n kubernetes-dashboard\n\n# 将其中的,type: ClusterIP 修改成type: NodePort,保存退出即可。\n\n# 查看服务的暴露端口,需在安全组放行\nkubectl get svc -A |grep kubernetes-dashboard\n\n```\n\n![image-20230415154841715](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415154841715.png)\n\n- 权限认证\n\n```BASH\n# 创建访问用户\nkubectl apply -f https://kuboard.cn/install-script/k8s-dashboard/auth.yaml\n# 获取访问令牌\nkubectl -n kubernetes-dashboard create token admin-user \n# 生成的令牌\neyJhbGciOiJSUzI1NiIsImtpZCI6IkdVQTZzb3JEM1FHdkpxVDNsSEwtVEZWc2hyR08tbmFFWnFGX2Q2OGt5cEkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjgzNzM1MTQ1LCJpYXQiOjE2ODM3MzE1NDUsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiMzBlMWQzNDEtNDc0Yi00M2MyLWIyNzYtZGIxZTU4NzM5ZTgxIn19LCJuYmYiOjE2ODM3MzE1NDUsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.mg1IU29tBpH23nglJVbRmVa2A26WZjXxMCzckQyb-dnviLBRzBuvNebb8H4YH5CNJUPkB2GGC_r7dlm5zEbPpK8RqkbwXy-wqkOoMephs83gIQkJ3RgskpWqTgqqg87e6WXHRtuzYsQQZ4Rq3Y4uQy9jJS9o1lIoRTujpmpWORb9vu4JN0RqEfK2chQqNsYCe_TCtvtvkP2EyuU3QSeYdvWh5NNZ9CYwA8l8eqA6ijrmTqZjnI6Q9Ymo7trKSuGFmffotBpN9dTYZoyv6Io_VgEz6_1oHsA0pwG-3wc41Ly11sDAzwjZvoGN1yfw0vsVcwnAjH4LkRG2ImwYIcZbig\n```\n\n- 访问方式(每个节点 ip 均可访问):https://125.220.153.23:30151\n\n\n\n## 4 安装K8S的包管理工具Helm (管理节点)\n参考:https://helm.sh/docs/intro/install/ \n\n\n- 这里以下载压缩包安装为例:\n\n参考:https://www.cnblogs.com/zhanglianghhh/p/14165995.html\ngithub地址:https://github.com/helm/helm\n\n\n\n![image-20230413112634363](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230413112634363.png)\n\n```BASH\ncd ~/k8s/helm\nwget https://get.helm.sh/helm-v3.11.3-linux-amd64.tar.gz\ntar zxfv helm-v3.11.3-linux-amd64.tar.gz\nmv ./linux-amd64/helm /usr/bin/\n# 显示版本,安装完成\nhelm version\n```\n\n## 5 安装K8S的包管理工具 krew`(管理节点)`\n参考:https://krew.sigs.k8s.io/docs/user-guide/setup/install/ \n\n\n- 确保 git 已经安装\n\n```BASH\ngit version\n# 若未安装\nyum -y install git\n```\n\n- 安装krew\n\n```BASH\n(\n set -x; cd \"$(mktemp -d)\" &&\n OS=\"$(uname | tr '[:upper:]' '[:lower:]')\" &&\n ARCH=\"$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\\(arm\\)\\(64\\)\\?.*/\\1\\2/' -e 's/aarch64$/arm64/')\" &&\n KREW=\"krew-${OS}_${ARCH}\" &&\n curl -fsSLO \"https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz\" &&\n tar zxvf \"${KREW}.tar.gz\" &&\n ./\"${KREW}\" install krew\n)\n```\n\n- 添加 `$HOME/.krew/bin`目录到您的 PATH 环境变量。 更新你的 `.bashrc`或者 `.zshrc`文件\n\n```BASH\n# 永久写的用户的环境变量文件,避免登出后失效\nexport PATH=\"${KREW_ROOT:-$HOME/.krew}/bin:$PATH\"\nsource ~/.bashrc\n```\n\n- 若安装失败,采用压缩包安装\n\n```BASH\nwget https://github.com/kubernetes-sigs/krew/releases/latest/download/krew-linux_amd64.tar.gz\n\ntar -zxvf krew-linux_amd64.tar.gz\n# 添加$HOME/.krew/bin目录到PATH环境变量\nexport PATH=\"${KREW_ROOT:-$HOME/.krew}/bin:$PATH\"\n# 配置为 kubectl 插件\nmv ./krew-linux_amd64 ./kubectl-krew\nmv ./kubectl-krew /usr/local/bin/\n# 测试\nkubectl krew version\n```\n\n- 检查是否安装成功\n\n```BASH\nkubectl krew\nkubectl plugin list\n```\n\n\n\n## 6 为 K8S 创建 PV 持久卷\n\n### 6.1 PV和PVC\n\n- 持久卷(PersistentVolume,PV)是集群中由管理员配置的一段网络存储。它是集群中的资源,就像节点是集群资源一样。PV持久卷和普通的Volume一样,也是使用卷插件来实现的,只是它们拥有独立于任何使用PV的Pod的生命周期。此API对象捕获存储实现的详细信息,包括NFS,iSCSI或特定于云提供程序的存储系统。\n\n- 持久卷申领(PersistentVolumeClaim,PVC)表达的是用户对存储的请求。概念上与Pod类似。Pod会耗用节点资源,而PVC申领会耗用PV资源。\n\n### 6.2 用 storageClass 动态创建 PV \n\n- 对1PB的大量目录创建NFS服务,gisweb1-4,以gisweb4为例子\n\n```bash\n安装NFS: \nyum -y install nfs-utils rpcbind\n```\n\n- 设置持久卷权限\n\n```BASH\n# 执行权限\nchown -R nobody:nfsnobody /mnt/storage/k8s/pv\n#chmod -R 777 /mnt/storage/k8s/pv\n```\n\n- 配置 nfs\n\n```BASH\nvim /etc/exports\n# 添加:\n/mnt/storage/k8s/pv 192.168.0.0/24(rw,sync,no_root_squash)\n# 以上设置让所有的 IP 都有效\n```\n\n```BASH\nsystemctl start rpcbind\nsystemctl enable rpcbind\nsystemctl enable nfs\nsystemctl start nfs\nsystemctl start nfs-server\nsystemctl enable nfs-server\n\nsystemctl start firewalld\nfirewall-cmd --permanent --add-service=nfs\nfirewall-cmd --reload\nsystemctl stop firewalld && sudo systemctl disable firewalld\n```\n\n- 检查\n\n```BASH\nexportfs -rv\nshowmount -e 127.0.0.1\n```\n\n- 所有节点安装nfs客户端\n\n```BASH\nyum install -y nfs-utils\n# 每个节点挂载nfs客户端的存储目录,本次nfs客户端在gisweb4(192.168.0.204)上\nmount -t nfs 192.168.0.204:/mnt/storage/k8s/pv /mnt/storage/k8s/pv \n# 检查挂载情况\ndf -h\n```\n\n- 安装nfs-client-provisioner (需要翻墙)\n\n参考:[**https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner**](https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner)\n\n```bash\n# 更新helm repo\nhelm repo update\n# 搜索helm库中nfs版本\nhelm search repo nfs-subdir-external-provisioner\n\n# 添加 helm 仓库\nhelm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/\n\nhelm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \\\n--set nfs.server=192.168.0.204 \\\n--set nfs.path=/mnt/storage/k8s/pv\t \\\n--set image.repository=registry.cn-hangzhou.aliyuncs.com/xzjs/nfs-subdir-external-provisioner \\\n--set image.tag=v4.0.0\n```\n\n- 手动安装 nfs-client-provisioner\n\n参考:http://www.mydlq.club/article/109/#%E5%88%9B%E5%BB%BA-nfs-subdir-external-provisioner-%E9%83%A8%E7%BD%B2%E6%96%87%E4%BB%B6\n\n- 成功后,安装时添加持久化参数,其中 nfs-storage 为安装的 storageclass 的 provisioner 字段名字\n\n## 7 安装 kubeAPPS 可视化软件管理工具\n\n参考:[**https://kubeapps.dev/docs/latest/tutorials/getting-started/**](https://kubeapps.dev/docs/latest/tutorials/getting-started/)\n\n- 安装\n\n```BASH\n# 添加 kubeapps 仓库\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n# 创建 kubeapps 的命名空间\nkubectl create namespace kubeapps\n# 安装\nhelm install kubeapps --namespace kubeapps bitnami/kubeapps\n```\n\n- 创建证书\n\n```bash\n# 创建用于访问 Kubeapps 和 Kubernetes 的演示凭证\nkubectl create --namespace default serviceaccount kubeapps-operator\nkubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator\n\n\ncat <访问:http://125.220.153.23:31885/\n\n## 8 在 K8S 上部署虚拟机服务 Kubevirt\n\n- 设置 **K8S** **ApiServer** 允许特权容器\n\n```BASH\nvim /etc/kubernetes/manifests/kube-apiserver.yaml\n# 设置 \n--allow-privileged=true\n```\n\n- 检查每个节点是否支持虚拟化\n\n```BASH\nvirt-host-validate qemu\n# 如果显示没有这个命令,先安装 libvrt 和 qemu 软件包:\nyum install -y qemu-kvm libvirt virt-install bridge-utils\n```\n\n- 若有**warnning**,需要解决\n\n![image-20230408181653957](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408181653957.png)\n\n```BASH\n# 1\nvim /etc/default/grub\n# 2.添加\nGRUB_CMDLINE_LINUX=\"crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on\"\n# 3 \ngrub2-mkconfig -o /boot/grub2/grub.cfg\n# 4 \nreboot\n```\n\n- 安装 **Kubevirt**\n\n```BASH\n# K8S 1.25版本,Kubervirt必须0.57.2以上,才能适配\nkubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0-rc.0/kubevirt-operator.yaml\n\nkubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0-rc.0/kubevirt-cr.yaml\n```\n\n- 等待 **Kubevirt** 资源创建完毕\n\n```BASH\nkubectl -n kubevirt wait kv kubevirt --for condition=Available\n```\n\n- 安装 **CDI** \n\n参考:https://kubevirt.io/labs/kubernetes/lab2.html\n\n- 安装 **VNC**\n\n```BASH\nyum install -y tigervnc\n```\n\n- 查看 **Kubevirt** 资源\n\n```BASH\nkubectl get pods -n kubevirt\n```\n\n![image-20230408185646502](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408185646502.png)\n\n- 安装 **Kubevirt** 的 **cli** 管理工具\n\n```BASH\nkubectl krew install virt\nkubectl virt help\n```\n\n- Kubevirt创建/删除虚拟机服务\n\n```BASH\n# 1.\t创建yaml文件\nXxx\n# 2.\t运行一个虚拟机\nkubectl apply -f test.yaml\n# 3.\t查看虚拟机\nkubectl get vmis\n# 4.\t停止/删除虚拟机\nkubectl delete -f vmi.yaml\n# 或者\nkubectl delete vmis testvmi\n# 5.\t开始/停止/暂停虚拟机\nvirtctl start/stop/pause my-vm\n```\n\n## 9 在 K8S 上部署 PostgreSQL\n\n- 安装\n\n - 注意:数据库安装需要持久卷,需提前创建满足要求的**pv**,或者创建**nas**的**stroageclass**,以自动根据**mysql**的**pvc**创建**pv**。\n\n\n - 集群已经配置23服务器的`/mnt/storage/k8s/pv`为NAS,并已经配置名字为**nas-storage**的**sc**\n\n\n```BASH\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n# 首先检查是否有oge这个命名空间,否则执行如下进行创建\nkubectl create ns oge\n# postgresql 这个名字可以自己定义,但后面每一步都要注意对应更改\nhelm install -n oge bitnami/postgresql \\\n--set global.storageClass=nfs-client \\\n--set readReplicas.persistence.storageClass=nfs-client \\\n--set primary.persistence.storageClass=nfs-client \\\n--set primary.persistence.size=200Gi \\\n--set readReplicas.persistence.size=200Gi \\\n--set image.tag=14.5.0-debian-11-r6\n\n\nhelm install -n geoctap bitnami/postgresql \\\n--set global.storageClass=nfs-client \\\n--set readReplicas.persistence.storageClass=nfs-client \\\n--set primary.persistence.storageClass=nfs-client \\\n--set primary.persistence.size=200Gi \\\n--set readReplicas.persistence.size=200Gi \\\n--set image.tag=14.5.0-debian-11-r6\n# 指定版本,可在kubeapps里面查看\n# --set image.tag=14.5.0-debian-11-r6\n```\n\n- 查看 postgresql 密码\n\n```BASH\nkubectl get secret --namespace oge postgresql -o jsonpath=\"{.data.postgres-password}\" | base64 -d\n\n# 密码\n7jXf2gsmUX\n```\n\n- 更改服务端口\n\n```BASH\nkubectl edit svc --namespace oge postgresql\n# 将 type=ClusterIP 改为 NodePort\n# b8:85:84:71:64:28\necho \"SUBSYSTEM==\\\"net\\\", ACTION==\\\"add\\\", DRIVERS==\\\"?*\\\", ATTR{address}==\\\" b8:85:84:71:64:28\\\", ATTR{type}==\\\"1\\\", KERNEL==\\\"eno*\\\", NAME=\\\"eno1\\\"\" >> /etc/udev/rules.d/70-persistent-net.rules\n```\n\n- 缩放副本集\n\n```BASH\nkubectl get deployment \n# 发现并没有postgresql\nkubectl get all -n oge\n# 发现有statefulset.apps/postgresql\n# 设置副本集个数为1\nkubectl scale --replicas=1 statefulset.apps/postgresql -n oge\n```\n\n- 命令行进入pgsql\n\n```bash\n# 进入pgsql的pod\nkubectl exec -it -n oge postgresql-0 bash \n# 用户登录\npsql -U postgres \n# 输入密码\n7jXf2gsmUX\n```\n\n- 在pod外面执行sql\n\n```BASH\npsql -h 125.220.153.23 -p 30865 -U postgres -W -f ./public.sql\n```\n\n\n\n## 10 在 K8S 上部署 MySQL\n\n- 安装\n\n - 注意:数据库安装需要持久卷,需提前创建满足要求的`pv`,或者创建`nas`的 `stroageclass`,以自动根据postgresql的pvc创建pv。\n\n - 集群已经配置23服务器的`/mnt/storage/k8s/pv`为 `NAS`,并已经配置名字为 `nas-storage` 的 `sc`\n\n\n```BASH\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n\n# 安装\nhelm install -n oge mysql bitnami/mysql \\\n--set global.storageClass=nfs-client \\\n--set readReplicas.persistence.storageClass=nfs-client \\\n--set primary.persistence.storageClass=nfs-client \\\n--set primary.persistence.size=200Gi \\\n--set readReplicas.persistence.size=200Gi\n```\n\n- 查看 MySQL 密码\n\n```BASH\nkubectl get secret --namespace oge mysql -o jsonpath=\"{.data.mysql-root-password}\" | base64 -d\n\n# 密码\nVubCMiHvT1\n```\n\n- 更改服务端口\n\n```BASH\nkubectl edit svc --namespace oge mysql\n# 将type=ClusterIP改为NodePort\n# b8:85:84:71:64:28\necho \"SUBSYSTEM==\\\"net\\\", ACTION==\\\"add\\\", DRIVERS==\\\"?*\\\", ATTR{address}==\\\" b8:85:84:71:64:28\\\", ATTR{type}==\\\"1\\\", KERNEL==\\\"eno*\\\", NAME=\\\"eno1\\\"\" >> /etc/udev/rules.d/70-persistent-net.rules\n```\n\n2. 缩放副本集\n\n```BASH\nkubectl get deployment \n# 发现并没有mysql\nkubectl get all -n oge\n# 发现有statefulset.apps/mysql\nkubectl scale --replicas=1 statefulset.apps/mysql -n oge\n```\n\n3. 在K8S中进入数据库\n\n```BASH\nkubectl exec -it -n oge mysql-1 bash\n# 进入后登录用户\nmysql -u root -p\n# 输入密码\n```\n\n\n\n## 11 在K8S上部署 MongoDB \n\n- 安装\n\n - 注意:数据库安装需要持久卷,需提前创建满足要求的pv,或者创建nas的stroageclass,以自动根据postgresql的pvc创建pv。\n\n - 集群已经配置23服务器的`/mnt/storage/k8s/pv`为NAS,并已经配置名字为nas-storage的sc\n\n\n```BASH\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n\n# 安装\nhelm install -n ydy mongodb bitnami/mongodb \\\n--set global.storageClass=nfs-client \\\n--set readReplicas.persistence.storageClass=nfs-client \\\n--set primary.persistence.storageClass=nfs-client \\\n--set primary.persistence.size=100Gi \\\n--set readReplicas.persistence.size=100Gi\n```\n\n- 查看 MongoDB 密码\n\n```BASH\nkubectl get secret --namespace ydy mongodb -o jsonpath=\"{.data.mongodb-root-password}\" | base64 -d\n\n# 密码\nWUL9FPQ2V9\n```\n\n- 更改服务端口\n\n```BASH\nkubectl edit svc --namespace ydy mongodb\n# 将type=ClusterIP改为NodePort\n# b8:85:84:71:64:28\necho \"SUBSYSTEM==\\\"net\\\", ACTION==\\\"add\\\", DRIVERS==\\\"?*\\\", ATTR{address}==\\\" b8:85:84:71:64:28\\\", ATTR{type}==\\\"1\\\", KERNEL==\\\"eno*\\\", NAME=\\\"eno1\\\"\" >> /etc/udev/rules.d/70-persistent-net.rules\n```\n\n2. 缩放副本集\n\n```BASH\nkubectl get deployment \n# 发现并没有mongodb\nkubectl get all -n ydy\n# 发现有statefulset.apps/mongodb\nkubectl scale --replicas=1 statefulset.apps/mongodb -n ydy\n```\n\n3. 在K8S中进入数据库\n\n```BASH\nkubectl exec -it -n ydy mongodb-644c657c4f-x62cn bash\n```\n\n\n\n## 12 在 K8S 上部署 Apache Spark\n\n两个方式,第一种方式为Spark官方提出的;第二种为Google提出的,更符合K8S原生概念\n\n1. Spark On K8S\n2. spark-on-k8s-operator\n\n![image-20230408170401365](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408170401365.png)\n\n
Spark On K8S
\n\n![image-20230408170444023](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408170444023.png)\n\n\n\n
spark-on-k8s-operator
\n\n\n\n### 12.1 安装 spark-on-k8s-operator \n\n参考 :https://blog.csdn.net/w8998036/article/details/122217230\n\n- 安装\n\n```BASH\nhelm repo add spark-operator https://googlecloudplatform.github.io/spark-on-k8s-operator \n\n# 注意是否存在 spark-operator 命名空间,没有则创建\nkubectl create ns spark-operator\n\n# 安装\nhelm install spark-operator spark-operator/spark-operator --namespace spark-operator --set sparkJobNamespace=default --set webhook.enable=true\n```\n\n- 创建服务账户\n\n```bash\nvim spark-application-rbac.yaml\n# 内容如下\n```\n\n```yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: spark\n namespace: spark\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n namespace: spark\n name: spark-role\nrules:\n- apiGroups: [\"\"]\n resources: [\"pods\"]\n verbs: [\"*\"]\n- apiGroups: [\"\"]\n resources: [\"services\"]\n verbs: [\"*\"]\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: spark-role-binding\n namespace: spark\nsubjects:\n- kind: ServiceAccount\n name: spark\n namespace: spark\nroleRef:\n kind: Role\n name: spark-role\n apiGroup: rbac.authorization.k8s.io\n```\n\n```BASH\nkubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root\n```\n\n- 编写作业模板并提交作业\n\n_创建一个Spark作业的YAML配置文件,并进行部署。_\n\n1. 创建spark-pi.yaml文件\n\n```YAML\napiVersion: \"sparkoperator.k8s.io/v1beta2\"\nkind: SparkApplication\nmetadata:\n name: spark-pi\n namespace: spark\nspec:\n type: Scala\n mode: cluster\n image: \"registry.cn-hangzhou.aliyuncs.com/yudayu/spark:v3.1.1\" \n # 1gcr.io/spark-operator/spark:v3.1.1需要更换镜像,gcr.io目前国内无法访问。可以先对docker挂代理,pull到阿里云镜像后\n imagePullPolicy: IfNotPresent\n mainClass: org.apache.spark.examples.SparkPi\n mainApplicationFile: \"local:///opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar\" \n # 需要更换自己的jar包,local指该jar位于image内,可换成所有节点都能访问的web路径,或者通过指定nas挂载pv,将jar包放在nas的pv里\n sparkVersion: \"3.1.1\"\n restartPolicy:\n type: Never\n volumes:\n - name: \"test-volume\"\n hostPath:\n path: \"/tmp\"\n type: Directory\n driver:\n cores: 1\n coreLimit: \"1200m\"\n memory: \"512m\"\n labels:\n version: 3.1.1\n serviceAccount: spark\n volumeMounts:\n - name: \"test-volume\"\n mountPath: \"/tmp\"\n executor:\n cores: 1\n instances: 2\n memory: \"512m\"\n labels:\n version: 3.1.1\n volumeMounts:\n - name: \"test-volume\"\n mountPath: \"/tmp\"\n```\n\n2. 部署一个Spark计算任务\n\n```BASH\nkubectl apply -f spark-pi.yaml\n```\n\n运维\n\n```BASH\nkubectl get sparkapplications\nkubectl describe sparkapplications\nkubectl get svc # 查看该任务的spark ui\n```\n\n### 12.2 安装 Spark On K8S\n\n```BASH\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n# 注意是否存在 spark-operator 命名空间,没有则创建\nkubectl create ns spark-on-k8s\nhelm install -n spark-on-k8s spark bitnami/spark \\\n --set worker.coreLimit=28 \n```\n\n```BASH\n./bin/spark-submit \\\n --class org.apache.spark.examples.SparkPi \\\n --conf spark.kubernetes.container.image=bitnami/spark:3 \\\n --master k8s://https://125.220.153.23:6443 \\\n --conf spark.kubernetes.driverEnv.SPARK_MASTER_URL=spark://10.97.43.141:7077 \\\n--deploy-mode cluster \\\n --executor-memory 20G \\\n --num-executors 10 \\\n--conf spark.executor.instances=5 \\\nhttps:///data/spark-examples_2.12-3.3.0.jar 1000\n```\n\n```bash\nkubectl run --namespace spark-on-k8s spark-oge --rm --tty -i --restart='Never' \\\n--image bitnami/spark:3 \\\n-- spark-submit --master spark://10.97.43.141:7077 \\\n--class org.apache.spark.examples.SparkPi \\\n --deploy-mode cluster \\\n/data/spark-examples_2.12-3.3.0.jar 100000\n```\n\n\n\n## 13 在K8S上部署redis集群\n\n- 待更\n\n\n\n## 14 在K8S上部署nginx\n\n### 14.1 创建pv\n\n```BASH\nvim nginx-pv.yaml\n```\n\n```YAML\napiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: nginx-ydy-pv\n namespace: ydy\nspec:\n capacity:\n storage: 10Gi\n accessModes:\n - ReadWriteOnce\n persistentVolumeReclaimPolicy: Retain\n storageClassName: manual\n hostPath:\n path: /mnt/storage/k8s/pv/ydy-nginx-pvc\n```\n\n### 14.2 创建pvc\n\n```BASH\nvim nginx-pvc.yaml\n```\n\n```YAML\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n name: nginx-ydy-pvc\n namespace: ydy\nspec:\n accessModes:\n - ReadWriteOnce\n resources:\n requests:\n storage: 10Gi\n storageClassName: manual\n```\n\n### 14.3 安装nginx并设置静态资源挂载的pvc\n\n将nginx中的`/app`挂载到`/mnt/storage/k8s/pv/luluancheng-nginx-pvc`下\n\n```BASH\nhelm install -n ydy nginx bitnami/nginx \\\n--set staticSitePVC=nginx-ydy-pvc\n```\n\n\n\n\n\n## 附录:疑难问题解决:\n\n### 1 K8S强制删除 namespace(会删除该命名空间中的所有 pod )\n\n```bash\n#1、将该分区导出为json文件,以 oge namespace为例\nkubectl get ns oge -o json > oge.json\n#2、编辑该json文件,将spec内的内容全部删除,然后保存退出\n```\n\n![22f0a5cbf0424425b0d62681f79cb713](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/22f0a5cbf0424425b0d62681f79cb713.png)\n\n![ef949b8bb503410c918894ab20bad993](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/ef949b8bb503410c918894ab20bad993.png)\n\n```BASH\n# 3、另开一个终端,启动一个proxy\nkubectl proxy --port=8081\n```\n\n```BASH\n# 4、执行一个curl命令,更新oge namespace\ncurl -k -H \"Content-Type: application/json\" -X PUT --data-binary @oge.json http://127.0.0.1:8081/api/v1/namespaces/oge/finalize\n```\n\n\n\n### 2 CNI网络错误\n\n- 当迁移集群之后,拉取镜像报cni网络错误,如下:\n\n![8d5d49703c8ac59f24fde81b3982b616](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/8d5d49703c8ac59f24fde81b3982b616.png)\n\n- 从上面的截图中看到问题出现在给Pod分配IP上,意思是 cni0 的IP不同于``10.244.9.1/24`,下面我们使用 `ifconfig`命令查看IP信息\n\n![79e65e4f797200ad98feac6f8b2d4254](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/79e65e4f797200ad98feac6f8b2d4254.png)\n\n- 从上面的图中我们可以看到``flannel.1`的 **IP** 为`10.244.9.0`,然后我们又使用`cat /run/flannel/subnet.env`,该文件内容如下: \n\n![310efbdb614636a17aa48eaf4a8dc2c5](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/310efbdb614636a17aa48eaf4a8dc2c5.png)\n\n- 其实现在的问题就比较明确了,我们使用的Overlay network为Flannel,也就是说Pod的IP地址段应该在Flannel的subnet下,而现在我们看到cni0的IP地址段与flannel subnet地址段不同,所以就出现了问题。 \n\n- 解决方案\n - 方法1是将 cni0 的 IP 段修改为``10.244.9.1`\n - 方法2是将这个错误的网卡删除掉,之后会自动重建\n\n```bash\n# 下面我们删除错误的cni0,然后让它自己重建\nifconfig cni0 down\nip link delete cni0\n```\n\n\n\n### 3 28 服务器增加路由(为了让两台刀片上网)\n\n- 28上执行\n\n```BASH\niptables -t nat -A POSTROUTING -s 192.168.0.209/24 -o em1_2 -j MASQUERADE\niptables -t nat -A POSTROUTING -s 192.168.0.177/24 -o em1_2 -j MASQUERADE\n```\n\n\n\n### 4 异常断电等导致 etcd 心跳检测出现问题\n\n- [Kubernetes API Server cannot be started after improper reboot](https://github.com/kubernetes/kubernetes/issues/107491)\n\n- [K8S: etcd 集群备份灾难恢复操作手册](https://blog.51cto.com/liruilong/6060676)\n\n\n\n### 5 OpenStack服务器网络跳转镜像\n\n>作用: 保证OpenStack上服务器与实验室服务器可以 ping 通\n\n- **IP**\n - `115.156.91.250`\n- **网关**\n - `115.156.91.254`\n- **子网掩码**\n - `255.255.255.0`\n\n\n\n\n\n","source":"_posts/K8S集群环境搭建(Containerd作为容器).md","raw":"---\ntitle: K8S集群环境搭建(Containerd作为容器)\ncover: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D2793533854%2C2733450472%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'K8S, Containerd'\ncategories:\n - 云原生\ntags:\n - K8S\n - Containerd\nabbrlink: 9d39de82\ndate: 2023-08-06 15:08:12\nswiper_index: 1 #置顶轮播图顺序,非负整数,数字越大越靠前\n---\n\n## 1 前述\n\n### 1.1 云原生定义\n\n- **Pivotal《传统应用和SOA向云原生转型指南》(2015)的云原生的特征:**\n - 符合 12 要素应用\n - 基准代码:一份基准代码,多份部署(类似于Git版本控制系统的main分支);\n - 显示声明所有依赖关系:通过依赖清单,确切地声明所有依赖项;\n - 把后端服务当作附加资源:各种后端服务(如数据库、消息队列、邮件服务、缓存系统),不区别对待本地或第三方服务;\n - 构建、发布、运行:严格区分构建、发布、运行这三个步骤;\n - 无状态进程:应用的进程必须无状态;\n - 端口绑定:互联网应用通过端口绑定来提供服务,并监听发送至该端口的请求。应用完全自我加载,不依赖于任何网络服务器;\n - 并发:通过进程模型进行扩展。进程是一等公民;\n - 易处理:进程可以瞬间开启或停止,有利于快速、弹性的伸缩应用。进程应追求最小启动时间;进程一旦接受终止信号就会优化的终止;进程在面对突然死亡时保持健壮;\n - 开发环境与线上环境等价:尽可能的保持开发,预发布,线上环境相同,以尽量做到持续部署;\n - 日志:应用本身从不存储自己的输出流,不应该试图去写或者管理日志文件,相反,每一个运行的进程都会直接的标准输出(stdout)事件流;\n - 管理进程:后台管理任务当作一次性进程运行;\n - 面向微服务架构\n - 微服务将单体系统分解为多个“仅做好一件事”的可独立部署的服务。这件事通常代表某项业务能力,或者最小可提供业务价值的“原子“服务单元。具备以下优点:\n - 变更周期解耦:只要变更限于单一有界的环境,并且服务继续履行其现有合约;实现了更频繁和快速的部署,从而实现了持续的价值流动;\n - 减少业务领域和现有代码的学习负担;\n - 可以加快采用新技术的步伐;\n - 提供独立、高效的服务扩展;\n - 自服务敏捷架构(可以认为是DevOps):\n - 一个能够持续部署和运行这些微服务的平台;如代码以Git形式“推送”。 然后,自服务敏捷平台构建应用程序工件,构建应用程序环境,部署应用程序,并启动必要的进程。 团队不必考虑他们的代码在哪里运行或如何到达那里,这些对用户都是透明得,因为平台会关注这些。\n - 基于 API 的协作\n - 抗脆弱性\n- **云原生计算基金会(2015)定义的特征**\n - 应用容器化\n - 面向微服务架构\n - 应用支持容器的编排制度\n- **云原生计算基金会(2018)定义**\n - 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API\n - 这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更\n\n\n\n### 1.2 容器、虚拟机、Docker、Openstack 和 K8S\n\n- **容器&虚拟机**:均为虚拟化技术,容器更为轻量化、效率更高、启动更快;虚拟机需数分钟启动,容器仅需数十毫秒;\n- **Docker**: 容器化虚拟技术事实上的标准;\n- **OpenStack**:分布式的虚拟机服务平台,相比于普通的虚拟机软件(如Vmare),多了分布式虚拟机调度管理的功能和节点的负载均衡; \n- **K8S**:分布式的容器调度管理平台,相比于Docker,多了分布式的容器调度管理和节点的负载均衡;\n- **注意**:常见的中文资料均言K8S是容器编排软件,这里的编排是指调度、管理的意思,而非工作流编排的意思,容易有误导性;\n- **注意**:无论是Openstack还是K8S,均不支持跨节点的容器或虚拟机的创建;所以将多台电脑合并成一台电脑的想法是不现实的;\n\n\n\n### 1.3 K8S 和 云原生\n\n在单机上运行容器,无法发挥它的最大效能,只有形成集群,才能最大程度发挥容器的良好隔离、资源分配与编排管理的优势,而对于容器的编排管理,Swarm、Mesos 和 Kubernetes 的大战已经基本宣告结束,Kubernetes 成为了无可争议的赢家。\n\n- Kubernetes 成为云原生应用的基石\n- 有机会成为跨云的真正的云原生应用的操作系统\n\n### 1.4 K8S 介绍\n\n- **官方**:**Kubernetes** 也称为 **K8S**,是用于自动部署、扩缩和管理容器化应用程序的开源系统。\n- **发展历史**:由**Google**设计并捐赠给**Cloud Native Computing Foundation**(今属**Linux**基金会)来使用。\n- **能力**:**Google** 每周运行数十亿个容器,能够在不扩张运维团队的情况下进行规模扩展。\n- **作用**: 相当于一个操作系统,可以快速提供**PaaS**服务:1)创建各种容器化测试化环境;2)发布各种容器化服务;3)快速安装各种容器化服务,如MongoDB、**Hbase**、**Postgresql**、**Redis**、**Spark**等;快速提供IaaS服务:通过安装**Openstack**或**KubeVirt**等软件;快速提供**FaaS**服务:通过安装**Kube** **Native**等软件;\n\n![image-20230414170948460](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230414170948460.png)\n\n![image-20230414171119324](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230414171119324.png)\n\n### 1.5 基本概念\n\n- **Container**:轻量级的系统虚拟化技术,使用namespace隔离环境。\n- **Pod**:\n- - **K8S** 的调度的基本单位,**Pod**是一组紧密关联的容器集合,内部的容器共享PID、IPC、Network和UTS namespace。可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。\n \n ![image-20230415141540422](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415141540422.png)\n\n​\t\t\t\tPod的设计理念基础是微服务,不同类型的业务组合由不同类型的Pod执行,一个Pod对应一个微服务\n\n- - K8S中,采用manifest(yaml或json)定义对象,比如nginx服务(包含了一个nginx 容器image)定义为:\n\n```YAML\n\tapiVersion: v1\n\tkind: Pod\n\tmetadata:\n\t name: nginx\n\t labels:\n\t app: nginx\n\tspec:\n\t containers:\n\t - name: nginx\n\t image: nginx\n\t ports:\n```\n\n- - **Node:** 是Pod运行的主机,可以为物理机,也可以为虚拟机。每个Node上要运行container runtime (docker或者rkt)、kubelet和kube-proxy服务\n - ![image-20230415142123300](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415142123300.png)\n\n- - **Service:** 一个Pod只是一个运行服务的实例,可能在一个节点上停止,在另一个节点以一个新的IP启动一个新的Pod。在K8S集群中,客户端需要访问的服务就是Service对象。每个Service会对应一个集群内部有效的虚拟IP,集群内部通过虚拟IP访问一个服务。\n- - **Kubelet:** 每个Node的任务和资源管理\n- - **Kube-proxy:** 负责每个节点的硬件负载均衡\n\n\n\n### 1.6 K8S 常见命令\n\n- **运行一个Nginix容器:** \n - `kubectl run --image=nginx:alpine nginx-app --port=80`\n- **Kubectl 命令:**\n - `kubectl get - 类似于 docker ps,查询资源列表`\n - `kubectl describe - 类似于 docker inspect,获取资源的详细信息`\n - `kubectl logs - 类似于 docker logs,获取容器的日志`\n - `kubectl exec - 类似于 docker exec,在容器内执行一个命令`\n - `kubectl create -f file.yaml – 根据yaml创建Deployment资源`\n - `kubectl delete 删除命令,可删除node、pod、svc、depolyment`\n- **yaml 定义 Pod:**\n\n```YAML\n\tapiVersion: v1\n\tkind: Pod\n\tmetadata:\n\t name: nginx\n\t labels:\n\t app: nginx\n\tspec:\n\t containers:\n\t - name: nginx\n\t image: nginx\n\t ports:\n\t - containerPort: 80\n```\n\n- **Volume:**\n - 一个**Pod**一旦发生异常,**Pod** 产生的数据会随着 **Pod** 消亡而自动消失。**Volume** 用于持久化容器数据。\n - 如:为 **redis** 容器指定一个 **hostPath** 来存储 **redis** 数据\n\n```YAML\n\tapiVersion: v1\n\tkind: Pod\n\tmetadata:\n\t name: redis\n\tspec:\n\t containers:\n\t - name: redis\n\t image: redis\n\t volumeMounts:\n\t - name: redis-persistent-storage\n\t mountPath: /data/redis\n\t volumes:\n\t - name: redis-persistent-storage\n\t hostPath:\n\t path: /data/\n```\n\n- **Service:**\n - kubectl创建Pod,Pob的IP地址会随着Pod的重启而变化\n - 为了访问Pod提供的服务,采用Service提供为一组Pod一个统一的入口,并提供负载均衡和**自动服务发现**。\n - `kubectl expose deployment nginx-app --port=80 --target-port=80 --type=NodePort`\n- **Replicas set:**\n - 在一个Service中,可为Pod设置数个副本,以确保服务永不掉线\n - `kubectl scale --replicas=3 deployment/nginx-app`\n\n![image-20230415143046325](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415143046325.png)\n\n- **滚动升级(Rolling Update):**\n - 滚动升级(Rolling Update)通过逐个副本容器替代升级的方式来实现无中断的服务升级:\n - `kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2`\n - 滚动升级中若发生错误,可随时回滚:\n - `kubectl rolling-update frontend-v1 frontend-v2 --rollback`\n- **资源限制:**\n - K8S通过 cgroups 提供容器资源管理的功能,可限制每个容器的 CPU 和内存使用,比如对于刚才创建的 deployment,可以通过下面的命令限制 nginx 容器最多只用 50% 的 CPU 和 128MB 的内存:\n - `kubectl set resources deployment nginx-app -c=nginx --limits=cpu=500m,memory=128Mi`\n - 或者在yaml中指定资源限制\n- **健康检查:**\n - K8S Kubernetes 提供了两种探针(Probe,支持 exec、tcpSocket 和 http 方式)来探测容器的状态:\n - LivenessProbe:探测应用是否处于健康状态,如果不健康则删除并重新创建容器\n - ReadinessProbe:探测应用是否启动完成并且处于正常服务状态,如果不正常则不会接收来自 Kubernetes Service 的流量\n\n\n\n### 1.7 K8S 常用运维命令\n\n- **查看pod,及所在的节点:**\n - `kubectl get pods -o wide`\n- **若有节点warn,回收垃圾失败:**\n\n```BASH\nkubectl drain --delete-local-data --ignore-daemonsets NODENAME\nkubectl uncordon NODENAME\n```\n\n\n\n## 2 K8S 集群基础环境部署\n\n{% p red, 若服务器之前搭建过 K8S 集群,需要彻底删除 %}\n\n参考:https://blog.csdn.net/qq_43159578/article/details/124131709 \n\n- 停止所有的Kubernetes服务\n\n```BASH\nsudo systemctl stop kubelet\nsudo systemctl stop containerd\n```\n\n- 删除Kubernetes软件包\n\n```BASH\nyum remove kubeadm kubectl kubelet kubernetes-cni -y\n```\n\n- 删除配置文件\n\n```BASH\n# 清除残留文件\nrm -rf /root/.kube\nrm -rf /etc/cni/net.d\nrm -rf /etc/kubernetes/*\n```\n\n- 删除etcd数据目录\n\n```BASH\nrm -rf /var/lib/etcd\n```\n\n- 清除iptables或者ipvs的配置\n\n```BASH\n# sudo ipvsadm -C\n# sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo # # iptables -Xkubec\n```\n\n- 如果只是想重新部署集群\n\n```BASH\nkubeadm reset\n```\n\n`kubeadm reset` 命令用于清除当前节点上所有与 `kubeadm init` 或 `kubeadm join` 命令创建的 Kubernetes 集群相关的状态。其主要作用如下:\n\n1. 移除 Kubernetes 集群相关的系统服务,如 kubelet 和 kube-proxy。\n\n2. 删除所有在当前节点上创建的 Kubernetes 对象,包括 Pod、Service、Deployment 等。\n\n3. 移除 etcd 中与当前节点相关的信息,如节点标识、配置信息等。\n\n4. 删除 Kubernetes 数据目录,包括证书、密钥、kubeconfig 文件等。\n\n使用 `kubeadm reset` 命令可以清除当前节点上的所有 Kubernetes 相关状态,以便重新创建新的 Kubernetes 集群或者将当前节点加入到另一个 Kubernetes 集群中。在进行 `kubeadm reset` 操作之前,应该先备份当前节点上的重要数据和配置信息,以便在需要时进行恢复。\n\n\n\n### 2.1 服务器\t\n\n- **网络资源:**各节点间通过**千兆交换机**互联(非光纤交换机)\n- **管理节点:**\n - Gisweb4,Gisweb3\n- **计算节点:**\n - Gisweb3,GISweb2,dellm640-01, Gisweb4, dellslot03, dellslot4\n- **持久化存储资源:**\n - 目前采用:\n - nfs-client: 23服务器的/mnt/storage/k8s/pv\n- **Node1(刀片3):**\n - 子网 IP:192.168.0.177\n - CPU:Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz;32核心,64线程。\n - 内存:64GB(32GB*2),每根DDR4,3000Mhz\n- **Node2(刀片4):**\n - 子网 IP:192.168.0.209\n - CPU:Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz;32核心64线程。\n - 内存:64GB(32GB*2),每根DDR43200Mhz\n\n\n\n### 2.2 安装过程\n\n#### 2.2.1 前提条件\n\na. 节点之中不可以有重复的主机名、`MAC` 地址或 `product_uuid`\n\n```BASH\ncat /sys/class/dmi/id/product_uuid\n```\n\nb. 检查网络适配器:若有多个网卡,确保每个node的子网通过默认路由可达\n\nc. 防火墙开放端口(所有节点):\n\n![image-20230415145138479](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415145138479.png)\n\n```BASH\nsystemctl restart firewalld\nfirewall-cmd --zone=public --add-port=443/tcp --permanent\nfirewall-cmd --zone=public --add-port=6443/tcp --permanent\nfirewall-cmd --zone=public --add-port=2379-2380/tcp --permanent\nfirewall-cmd --zone=public --add-port=10250/tcp --permanent\nfirewall-cmd --zone=public --add-port=10259/tcp --permanent\nfirewall-cmd --zone=public --add-port=10257/tcp --permanent\n```\n\nd. 关闭防火墙(所有节点):\n\n```BASH\nsystemctl stop firewalld NetworkManager\nsystemctl disable firewalld NetworkManager\n```\n\ne. 关闭交换分区并禁用 SELinux(所有节点):\n\n```bash\n# 查看 交换分区\nfree -m\n\n# 将 `SELinux` 设置为 `permissive` 模式(相当于将其禁用) 第一行是临时禁用,第二行是永久禁用\nsetenforce 0\nsed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config\n\n# 关闭swap;第一行是临时禁用,第二行是永久禁用\nswapoff -a \nsed -ri 's/.*swap.*/#&/' /etc/fstab\n\n# 允许 iptables 检查桥接流量 (K8s 官方要求)\ncat <(所有节点):\n\n```bash\nyum install chrony -y\nsystemctl start chronyd\nsystemctl enable chronyd\nchronyc sources\n```\n\ng. 设置主机名并添加 ip 映射(所有节点):\n\n```BASH\n# 以 gisweb4 为例\n# 查看主机名cat \nhostname\n# 设置主机名\nhostnamectl set-hostname gisweb4\n# 更新\nbash\n\n# 添加 ip 映射\necho \"125.250.153.23 gisweb4\" >> /etc/hosts\necho \"125.250.153.23 gisweb4\" >> /etc/hosts\n# 两台无外网ip的刀片添加内网ip\n\n# /etc/hosts 文件内容如下:\n192.168.0.203 gisweb1\n192.168.0.202 gisweb2\n192.168.0.204 gisweb4\n192.168.0.208 gisweb3\n192.168.0.176 dellm640-01\n192.168.0.177 dellm640-03\n192.168.0.209 dellslot04\n\n125.220.153.26 gisweb1\n125.220.153.25 gisweb2\n125.220.153.22 gisweb3\n125.220.153.23 gisweb4\n125.220.153.28 dellm640-01\n```\n\n#### 2.2.2 升级 Linux 内核到最新(所有节点):\n\n**清除缓存,重新构建缓存:**\n\n```BASH\n# 清除缓存\nyum makecache & yum -y update\n```\n\n**参考链接:*https://zhuanlan.zhihu.com/p/368879345***\n\n#### 2.2.3 转发 IPv4 并让 iptables 看到桥接流量(所有节点)\n\n``````SHELL\n# a.\t验证br_netfilter是否已经加载\nlsmod | grep br_netfilter\n# b.\t加载br_netfilter模块:\nmodprobe br_netfilter\n# c.\tiptabels桥接\ncat <(所有节点)\n\n``````BASH\nyum install ipvsadm ipset sysstat conntrack libseccomp -y\n\ncat <(所有节点,lb除外)\n\n```BASH\ncat <(选用containerd,弃用docker):\n\n- **Docker-engine+cir-dockerd方案(舍弃)**:从kubernetes 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,需要在kubelet和docker之间加上一个中间层cri-docker。cri-docker是一个支持CRI标准的shim。一头通过CRI跟kubelet交互,另一头跟docker api交互,从而间接的实现了kubernetes以docker作为容器运行时。但是这种架构缺点也很明显,**调用链更长,效率更低**。因此选用containerd作为容器runtime\n- **containerd**方案: **containerd**是一个**docker**的容器**runtime**,成为**CNCF**的官方项目\n\n官方安装教程:https://github.com/containerd/containerd/blob/main/docs/getting-started.md\n\n```BASH\n# 安装containerd.io\nyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo\nyum install containerd.io\n\n\n# 安装CNI插件\n# i.下载cni-plugins.tar 从https://github.com/containernetworking/plugins/releases\n# 在线下载:\n# wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz\n# ii.在/opt/cni/bin下解压:\n\n# 把22上的拷贝到没有公网ip的服务器上\n# scp -P22 /opt/cni/bin/cni-plugins-linux-amd64-v1.1.1.tgz root@192.168.0.203:/opt/cni/bin/\n\nmkdir -p /opt/cni/bin\ncd /opt/cni/bin\ntar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz\n\n\n# 重启服务:\nsystemctl restart containerd\n# 开机启动:\nsystemctl enable containerd\n\n\n# 配置systemd cgroup驱动\n# 修改配置文件,将 SystemdCgroup 改为 true 注意配置项是区分大小写的\ncontainerd config default | sudo tee /etc/containerd/config.toml\nvim /etc/containerd/config.toml\n\n[plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n ...\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n# 并将 sandbox_image 地址修改为国内的地址\n并且将 sandbox_image = \"registry.k8s.io/pause:3.6\"\n修改为 sandbox_image = \"registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6\"\n\n# 启动 containerd\nsystemctl restart containerd\n\n# 开机自启\nsystemctl enable containerd\n\n# 启动成功后可以查看到监听的端口\nnetstat -nlput | grep containerd\ntcp 0 0 127.0.0.1:36669 0.0.0.0:* LISTEN 8665/containerd off (0.00/0/0)\n```\n\n\n#### 2.2.7 在所有电脑上安装 kubeadm, kubelet and kubectl(所有节点)\n\n```BASH\n# a.\tkubeadm: the command to bootstrap the cluster.\n# b.\tkubelet: the component that runs on all of the machines in your cluster and does things like starting pods and containers.\n# c.\tkubectl: the command line util to talk to your cluster.\n```\n\n1. *配置阿里云的k8s源,加速安装*\n\n```BASH\ncat <若出现如下错误(上一次集群初始化的残留文件)\n\n```bash\n# 如果出现报错 \n[ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists\n```\n\n执行如下命令后再次初始化\n\n```BASH\nrm -rf /var/lib/etcd\nrm -rf /etc/kubernetes/manifests/* \n```\n\n#### 2.2.9 配置环境变量(初始化后)\n\n```BASH\nmkdir -p $HOME/.kube\ncp -i /etc/kubernetes/admin.conf $HOME/.kube/config\nchown $(id -u):$(id -g) $HOME/.kube/config\n```\n\n#### 2.2.10 将 master 作为node(管理节点上执行)\n\n- 检查 node 是否存在污点\n - 污点值有三种:\n - NoSchedule:一定不被调度\n - PreferNoSchedule:尽量不被调度【也有被调度的几率】\n - NoExecute:不会调度,并且还会驱逐Node已有Pod\n\n```BASH\nkubectl describe nodes gisweb4 |grep Taints\n```\n\n- 删除污点:\n\n```BASH\n# 本次删除的污点为:node-role.kubernetes.io/control-plane-\nkubectl taint nodes --all node-role.kubernetes.io/control-plane-\n```\n\n#### 2.2.11 安装 Pod 网络插件(CNI:Container Network Interface)(master)\n\n你必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信。\n\n确保kubeadm初始化时,pod_cidr 为10.244.0.0\n\n- 下载 **yml** 配置文件\n - 或自己下载到本地\n\n```BASH\ncurl https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml -O\n```\n\n- 编辑**kube-flannel.yml**\n - 找到如下位置,添加 **iface-regex**\n\n```BASH\nvim kube-flannel.yml\n# 添加\n- --iface-regex=^192.168..\n```\n\n![](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408114839608.png)\n\n- 构建\n\n```BASH\nkubectl apply -f kube-flannel.yml\n```\n\n#### 2.2.12 node 节点加入集群\n\n- 管理节点获取加入命令:\n\n```BASH\nkubeadm token create --print-join-command\n# 返回如下\nkubeadm join 125.220.153.23:6443 --token x0wdaj.d5wltdzdtos22fl6 --discovery-token-ca-cert-hash sha256:9245d363cdeb1757bacba21b9ccdc06a28e7490bcedfb0eeb404b56f769fa112\n```\n\n- 在 node 节点执行生成命令\n\n如果此步报如下错误\n\nThe connection to the server localhost:8080 was refused - did you specify the right host\n\n1. 出现这个问题的原因是kubectl命令需要使用`kubernetes-admin`的身份来运行,在`kubeadm int`启动集群的步骤中就生成了`/etc/kubernetes/admin.conf`。\n2. 因此,解决方法如下,将主节点中的`/etc/kubernetes/admin.conf`文件拷贝到工作节点相同目录下:\n3. 然后分别在工作节点上配置环境变量:\n\n\n{% p red, 解决方案 %}\n\n- 主节点执行\n\n```BASH\n# 将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到工作节点相同目录下:\nscp -P22 /etc/kubernetes/admin.conf oge@125.220.153.22:/etc/kubernetes/\n```\n\n- `node` 节点执行如下命令后,再次执行加入集群的命令\n\n```BASH\necho \"export KUBECONFIG=/etc/kubernetes/admin.conf\" >> ~/.bash_profile\nsource ~/.bash_profile\n```\n\n- 如果是重新加入集群,需要 `reset` 一下\n\n```BASH\nkubeadm reset\n```\n\n\n\n#### 2.2.13 添加新的 master 节点\n\n- 管理节点:\n\n```BASH\n# 管理节点查看\nkubeadm token create --print-join-command\n# 生成如下\nkubeadm join 125.220.153.23:6443 --token mc56rw.t9b3d1ql53yhom9y --discovery-token-ca-cert-hash sha256:753ccf865a9c590413043d469a9848300871afaef7221e3fdb97d981939a2b83\n\n# 管理节点\nkubeadm init phase upload-certs --upload-certs \n# 输出\nI0413 11:00:30.817038 10009 version.go:256] remote version is much newer: v1.27.0; falling back to: stable-1.25\n[upload-certs] Storing the certificates in Secret \"kubeadm-certs\" in the \"kube-system\" Namespace\n[upload-certs] Using certificate key:\n70d43cde7f6423b5c3e88c0fa9d08511cefbc53992dc63a13544cd548a912941\n\n# 管理节点,在networking前添加:controlPlaneEndpoint: 125.220.153.23:6443\nkubectl -n kube-system edit cm kubeadm-config\n```\n\n- 新的master节点\n\n```BASH\n# 新节点\n# 重新加入的话,检查是否需要kill掉6443端口(这是之前的api-service服务)\nkubeadm join 125.220.153.23:6443 --token mc56rw.t9b3d1ql53yhom9y --discovery-token-ca-cert-hash sha256:753ccf865a9c590413043d469a9848300871afaef7221e3fdb97d981939a2b83 --control-plane --certificate-key 70d43cde7f6423b5c3e88c0fa9d08511cefbc53992dc63a13544cd548a912941\n\n# 生成\nThis node has joined the cluster and a new control plane instance was created:\n\n* Certificate signing request was sent to apiserver and approval was received.\n* The Kubelet was informed of the new secure connection details.\n* Control plane label and taint were applied to the new node.\n* The Kubernetes control plane instances scaled up.\n* A new etcd member was added to the local/stacked etcd cluster.\n\nTo start administering your cluster from this node, you need to run the following as a regular user:\n\n mkdir -p $HOME/.kube\n sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\n sudo chown $(id -u):$(id -g) $HOME/.kube/config\n\nRun 'kubectl get nodes' to see this node join the cluster.\n```\n\n\n\n## 3 K8S 管理平台 dashboard 环境部署(管理节点)\n\n- 下载 **yaml** 配置文件并应用\n - 或下载到本地然后上传\n\n```bash\nkubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml\n```\n\n- 修改配置文件(以node)\n - 但是这个只能内部访问,所以要外部访问,要么部署 ingress,要么就是设置 service NodePort 类型。这里选择 service 暴露端口。\n\n```BASH\nkubectl edit svc kubernetes-dashboard -n kubernetes-dashboard\n\n# 将其中的,type: ClusterIP 修改成type: NodePort,保存退出即可。\n\n# 查看服务的暴露端口,需在安全组放行\nkubectl get svc -A |grep kubernetes-dashboard\n\n```\n\n![image-20230415154841715](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415154841715.png)\n\n- 权限认证\n\n```BASH\n# 创建访问用户\nkubectl apply -f https://kuboard.cn/install-script/k8s-dashboard/auth.yaml\n# 获取访问令牌\nkubectl -n kubernetes-dashboard create token admin-user \n# 生成的令牌\neyJhbGciOiJSUzI1NiIsImtpZCI6IkdVQTZzb3JEM1FHdkpxVDNsSEwtVEZWc2hyR08tbmFFWnFGX2Q2OGt5cEkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjgzNzM1MTQ1LCJpYXQiOjE2ODM3MzE1NDUsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiMzBlMWQzNDEtNDc0Yi00M2MyLWIyNzYtZGIxZTU4NzM5ZTgxIn19LCJuYmYiOjE2ODM3MzE1NDUsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.mg1IU29tBpH23nglJVbRmVa2A26WZjXxMCzckQyb-dnviLBRzBuvNebb8H4YH5CNJUPkB2GGC_r7dlm5zEbPpK8RqkbwXy-wqkOoMephs83gIQkJ3RgskpWqTgqqg87e6WXHRtuzYsQQZ4Rq3Y4uQy9jJS9o1lIoRTujpmpWORb9vu4JN0RqEfK2chQqNsYCe_TCtvtvkP2EyuU3QSeYdvWh5NNZ9CYwA8l8eqA6ijrmTqZjnI6Q9Ymo7trKSuGFmffotBpN9dTYZoyv6Io_VgEz6_1oHsA0pwG-3wc41Ly11sDAzwjZvoGN1yfw0vsVcwnAjH4LkRG2ImwYIcZbig\n```\n\n- 访问方式(每个节点 ip 均可访问):https://125.220.153.23:30151\n\n\n\n## 4 安装K8S的包管理工具Helm (管理节点)\n参考:https://helm.sh/docs/intro/install/ \n\n\n- 这里以下载压缩包安装为例:\n\n参考:https://www.cnblogs.com/zhanglianghhh/p/14165995.html\ngithub地址:https://github.com/helm/helm\n\n\n\n![image-20230413112634363](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230413112634363.png)\n\n```BASH\ncd ~/k8s/helm\nwget https://get.helm.sh/helm-v3.11.3-linux-amd64.tar.gz\ntar zxfv helm-v3.11.3-linux-amd64.tar.gz\nmv ./linux-amd64/helm /usr/bin/\n# 显示版本,安装完成\nhelm version\n```\n\n## 5 安装K8S的包管理工具 krew`(管理节点)`\n参考:https://krew.sigs.k8s.io/docs/user-guide/setup/install/ \n\n\n- 确保 git 已经安装\n\n```BASH\ngit version\n# 若未安装\nyum -y install git\n```\n\n- 安装krew\n\n```BASH\n(\n set -x; cd \"$(mktemp -d)\" &&\n OS=\"$(uname | tr '[:upper:]' '[:lower:]')\" &&\n ARCH=\"$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\\(arm\\)\\(64\\)\\?.*/\\1\\2/' -e 's/aarch64$/arm64/')\" &&\n KREW=\"krew-${OS}_${ARCH}\" &&\n curl -fsSLO \"https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz\" &&\n tar zxvf \"${KREW}.tar.gz\" &&\n ./\"${KREW}\" install krew\n)\n```\n\n- 添加 `$HOME/.krew/bin`目录到您的 PATH 环境变量。 更新你的 `.bashrc`或者 `.zshrc`文件\n\n```BASH\n# 永久写的用户的环境变量文件,避免登出后失效\nexport PATH=\"${KREW_ROOT:-$HOME/.krew}/bin:$PATH\"\nsource ~/.bashrc\n```\n\n- 若安装失败,采用压缩包安装\n\n```BASH\nwget https://github.com/kubernetes-sigs/krew/releases/latest/download/krew-linux_amd64.tar.gz\n\ntar -zxvf krew-linux_amd64.tar.gz\n# 添加$HOME/.krew/bin目录到PATH环境变量\nexport PATH=\"${KREW_ROOT:-$HOME/.krew}/bin:$PATH\"\n# 配置为 kubectl 插件\nmv ./krew-linux_amd64 ./kubectl-krew\nmv ./kubectl-krew /usr/local/bin/\n# 测试\nkubectl krew version\n```\n\n- 检查是否安装成功\n\n```BASH\nkubectl krew\nkubectl plugin list\n```\n\n\n\n## 6 为 K8S 创建 PV 持久卷\n\n### 6.1 PV和PVC\n\n- 持久卷(PersistentVolume,PV)是集群中由管理员配置的一段网络存储。它是集群中的资源,就像节点是集群资源一样。PV持久卷和普通的Volume一样,也是使用卷插件来实现的,只是它们拥有独立于任何使用PV的Pod的生命周期。此API对象捕获存储实现的详细信息,包括NFS,iSCSI或特定于云提供程序的存储系统。\n\n- 持久卷申领(PersistentVolumeClaim,PVC)表达的是用户对存储的请求。概念上与Pod类似。Pod会耗用节点资源,而PVC申领会耗用PV资源。\n\n### 6.2 用 storageClass 动态创建 PV \n\n- 对1PB的大量目录创建NFS服务,gisweb1-4,以gisweb4为例子\n\n```bash\n安装NFS: \nyum -y install nfs-utils rpcbind\n```\n\n- 设置持久卷权限\n\n```BASH\n# 执行权限\nchown -R nobody:nfsnobody /mnt/storage/k8s/pv\n#chmod -R 777 /mnt/storage/k8s/pv\n```\n\n- 配置 nfs\n\n```BASH\nvim /etc/exports\n# 添加:\n/mnt/storage/k8s/pv 192.168.0.0/24(rw,sync,no_root_squash)\n# 以上设置让所有的 IP 都有效\n```\n\n```BASH\nsystemctl start rpcbind\nsystemctl enable rpcbind\nsystemctl enable nfs\nsystemctl start nfs\nsystemctl start nfs-server\nsystemctl enable nfs-server\n\nsystemctl start firewalld\nfirewall-cmd --permanent --add-service=nfs\nfirewall-cmd --reload\nsystemctl stop firewalld && sudo systemctl disable firewalld\n```\n\n- 检查\n\n```BASH\nexportfs -rv\nshowmount -e 127.0.0.1\n```\n\n- 所有节点安装nfs客户端\n\n```BASH\nyum install -y nfs-utils\n# 每个节点挂载nfs客户端的存储目录,本次nfs客户端在gisweb4(192.168.0.204)上\nmount -t nfs 192.168.0.204:/mnt/storage/k8s/pv /mnt/storage/k8s/pv \n# 检查挂载情况\ndf -h\n```\n\n- 安装nfs-client-provisioner (需要翻墙)\n\n参考:[**https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner**](https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner)\n\n```bash\n# 更新helm repo\nhelm repo update\n# 搜索helm库中nfs版本\nhelm search repo nfs-subdir-external-provisioner\n\n# 添加 helm 仓库\nhelm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/\n\nhelm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \\\n--set nfs.server=192.168.0.204 \\\n--set nfs.path=/mnt/storage/k8s/pv\t \\\n--set image.repository=registry.cn-hangzhou.aliyuncs.com/xzjs/nfs-subdir-external-provisioner \\\n--set image.tag=v4.0.0\n```\n\n- 手动安装 nfs-client-provisioner\n\n参考:http://www.mydlq.club/article/109/#%E5%88%9B%E5%BB%BA-nfs-subdir-external-provisioner-%E9%83%A8%E7%BD%B2%E6%96%87%E4%BB%B6\n\n- 成功后,安装时添加持久化参数,其中 nfs-storage 为安装的 storageclass 的 provisioner 字段名字\n\n## 7 安装 kubeAPPS 可视化软件管理工具\n\n参考:[**https://kubeapps.dev/docs/latest/tutorials/getting-started/**](https://kubeapps.dev/docs/latest/tutorials/getting-started/)\n\n- 安装\n\n```BASH\n# 添加 kubeapps 仓库\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n# 创建 kubeapps 的命名空间\nkubectl create namespace kubeapps\n# 安装\nhelm install kubeapps --namespace kubeapps bitnami/kubeapps\n```\n\n- 创建证书\n\n```bash\n# 创建用于访问 Kubeapps 和 Kubernetes 的演示凭证\nkubectl create --namespace default serviceaccount kubeapps-operator\nkubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator\n\n\ncat <访问:http://125.220.153.23:31885/\n\n## 8 在 K8S 上部署虚拟机服务 Kubevirt\n\n- 设置 **K8S** **ApiServer** 允许特权容器\n\n```BASH\nvim /etc/kubernetes/manifests/kube-apiserver.yaml\n# 设置 \n--allow-privileged=true\n```\n\n- 检查每个节点是否支持虚拟化\n\n```BASH\nvirt-host-validate qemu\n# 如果显示没有这个命令,先安装 libvrt 和 qemu 软件包:\nyum install -y qemu-kvm libvirt virt-install bridge-utils\n```\n\n- 若有**warnning**,需要解决\n\n![image-20230408181653957](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408181653957.png)\n\n```BASH\n# 1\nvim /etc/default/grub\n# 2.添加\nGRUB_CMDLINE_LINUX=\"crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on\"\n# 3 \ngrub2-mkconfig -o /boot/grub2/grub.cfg\n# 4 \nreboot\n```\n\n- 安装 **Kubevirt**\n\n```BASH\n# K8S 1.25版本,Kubervirt必须0.57.2以上,才能适配\nkubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0-rc.0/kubevirt-operator.yaml\n\nkubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0-rc.0/kubevirt-cr.yaml\n```\n\n- 等待 **Kubevirt** 资源创建完毕\n\n```BASH\nkubectl -n kubevirt wait kv kubevirt --for condition=Available\n```\n\n- 安装 **CDI** \n\n参考:https://kubevirt.io/labs/kubernetes/lab2.html\n\n- 安装 **VNC**\n\n```BASH\nyum install -y tigervnc\n```\n\n- 查看 **Kubevirt** 资源\n\n```BASH\nkubectl get pods -n kubevirt\n```\n\n![image-20230408185646502](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408185646502.png)\n\n- 安装 **Kubevirt** 的 **cli** 管理工具\n\n```BASH\nkubectl krew install virt\nkubectl virt help\n```\n\n- Kubevirt创建/删除虚拟机服务\n\n```BASH\n# 1.\t创建yaml文件\nXxx\n# 2.\t运行一个虚拟机\nkubectl apply -f test.yaml\n# 3.\t查看虚拟机\nkubectl get vmis\n# 4.\t停止/删除虚拟机\nkubectl delete -f vmi.yaml\n# 或者\nkubectl delete vmis testvmi\n# 5.\t开始/停止/暂停虚拟机\nvirtctl start/stop/pause my-vm\n```\n\n## 9 在 K8S 上部署 PostgreSQL\n\n- 安装\n\n - 注意:数据库安装需要持久卷,需提前创建满足要求的**pv**,或者创建**nas**的**stroageclass**,以自动根据**mysql**的**pvc**创建**pv**。\n\n\n - 集群已经配置23服务器的`/mnt/storage/k8s/pv`为NAS,并已经配置名字为**nas-storage**的**sc**\n\n\n```BASH\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n# 首先检查是否有oge这个命名空间,否则执行如下进行创建\nkubectl create ns oge\n# postgresql 这个名字可以自己定义,但后面每一步都要注意对应更改\nhelm install -n oge bitnami/postgresql \\\n--set global.storageClass=nfs-client \\\n--set readReplicas.persistence.storageClass=nfs-client \\\n--set primary.persistence.storageClass=nfs-client \\\n--set primary.persistence.size=200Gi \\\n--set readReplicas.persistence.size=200Gi \\\n--set image.tag=14.5.0-debian-11-r6\n\n\nhelm install -n geoctap bitnami/postgresql \\\n--set global.storageClass=nfs-client \\\n--set readReplicas.persistence.storageClass=nfs-client \\\n--set primary.persistence.storageClass=nfs-client \\\n--set primary.persistence.size=200Gi \\\n--set readReplicas.persistence.size=200Gi \\\n--set image.tag=14.5.0-debian-11-r6\n# 指定版本,可在kubeapps里面查看\n# --set image.tag=14.5.0-debian-11-r6\n```\n\n- 查看 postgresql 密码\n\n```BASH\nkubectl get secret --namespace oge postgresql -o jsonpath=\"{.data.postgres-password}\" | base64 -d\n\n# 密码\n7jXf2gsmUX\n```\n\n- 更改服务端口\n\n```BASH\nkubectl edit svc --namespace oge postgresql\n# 将 type=ClusterIP 改为 NodePort\n# b8:85:84:71:64:28\necho \"SUBSYSTEM==\\\"net\\\", ACTION==\\\"add\\\", DRIVERS==\\\"?*\\\", ATTR{address}==\\\" b8:85:84:71:64:28\\\", ATTR{type}==\\\"1\\\", KERNEL==\\\"eno*\\\", NAME=\\\"eno1\\\"\" >> /etc/udev/rules.d/70-persistent-net.rules\n```\n\n- 缩放副本集\n\n```BASH\nkubectl get deployment \n# 发现并没有postgresql\nkubectl get all -n oge\n# 发现有statefulset.apps/postgresql\n# 设置副本集个数为1\nkubectl scale --replicas=1 statefulset.apps/postgresql -n oge\n```\n\n- 命令行进入pgsql\n\n```bash\n# 进入pgsql的pod\nkubectl exec -it -n oge postgresql-0 bash \n# 用户登录\npsql -U postgres \n# 输入密码\n7jXf2gsmUX\n```\n\n- 在pod外面执行sql\n\n```BASH\npsql -h 125.220.153.23 -p 30865 -U postgres -W -f ./public.sql\n```\n\n\n\n## 10 在 K8S 上部署 MySQL\n\n- 安装\n\n - 注意:数据库安装需要持久卷,需提前创建满足要求的`pv`,或者创建`nas`的 `stroageclass`,以自动根据postgresql的pvc创建pv。\n\n - 集群已经配置23服务器的`/mnt/storage/k8s/pv`为 `NAS`,并已经配置名字为 `nas-storage` 的 `sc`\n\n\n```BASH\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n\n# 安装\nhelm install -n oge mysql bitnami/mysql \\\n--set global.storageClass=nfs-client \\\n--set readReplicas.persistence.storageClass=nfs-client \\\n--set primary.persistence.storageClass=nfs-client \\\n--set primary.persistence.size=200Gi \\\n--set readReplicas.persistence.size=200Gi\n```\n\n- 查看 MySQL 密码\n\n```BASH\nkubectl get secret --namespace oge mysql -o jsonpath=\"{.data.mysql-root-password}\" | base64 -d\n\n# 密码\nVubCMiHvT1\n```\n\n- 更改服务端口\n\n```BASH\nkubectl edit svc --namespace oge mysql\n# 将type=ClusterIP改为NodePort\n# b8:85:84:71:64:28\necho \"SUBSYSTEM==\\\"net\\\", ACTION==\\\"add\\\", DRIVERS==\\\"?*\\\", ATTR{address}==\\\" b8:85:84:71:64:28\\\", ATTR{type}==\\\"1\\\", KERNEL==\\\"eno*\\\", NAME=\\\"eno1\\\"\" >> /etc/udev/rules.d/70-persistent-net.rules\n```\n\n2. 缩放副本集\n\n```BASH\nkubectl get deployment \n# 发现并没有mysql\nkubectl get all -n oge\n# 发现有statefulset.apps/mysql\nkubectl scale --replicas=1 statefulset.apps/mysql -n oge\n```\n\n3. 在K8S中进入数据库\n\n```BASH\nkubectl exec -it -n oge mysql-1 bash\n# 进入后登录用户\nmysql -u root -p\n# 输入密码\n```\n\n\n\n## 11 在K8S上部署 MongoDB \n\n- 安装\n\n - 注意:数据库安装需要持久卷,需提前创建满足要求的pv,或者创建nas的stroageclass,以自动根据postgresql的pvc创建pv。\n\n - 集群已经配置23服务器的`/mnt/storage/k8s/pv`为NAS,并已经配置名字为nas-storage的sc\n\n\n```BASH\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n\n# 安装\nhelm install -n ydy mongodb bitnami/mongodb \\\n--set global.storageClass=nfs-client \\\n--set readReplicas.persistence.storageClass=nfs-client \\\n--set primary.persistence.storageClass=nfs-client \\\n--set primary.persistence.size=100Gi \\\n--set readReplicas.persistence.size=100Gi\n```\n\n- 查看 MongoDB 密码\n\n```BASH\nkubectl get secret --namespace ydy mongodb -o jsonpath=\"{.data.mongodb-root-password}\" | base64 -d\n\n# 密码\nWUL9FPQ2V9\n```\n\n- 更改服务端口\n\n```BASH\nkubectl edit svc --namespace ydy mongodb\n# 将type=ClusterIP改为NodePort\n# b8:85:84:71:64:28\necho \"SUBSYSTEM==\\\"net\\\", ACTION==\\\"add\\\", DRIVERS==\\\"?*\\\", ATTR{address}==\\\" b8:85:84:71:64:28\\\", ATTR{type}==\\\"1\\\", KERNEL==\\\"eno*\\\", NAME=\\\"eno1\\\"\" >> /etc/udev/rules.d/70-persistent-net.rules\n```\n\n2. 缩放副本集\n\n```BASH\nkubectl get deployment \n# 发现并没有mongodb\nkubectl get all -n ydy\n# 发现有statefulset.apps/mongodb\nkubectl scale --replicas=1 statefulset.apps/mongodb -n ydy\n```\n\n3. 在K8S中进入数据库\n\n```BASH\nkubectl exec -it -n ydy mongodb-644c657c4f-x62cn bash\n```\n\n\n\n## 12 在 K8S 上部署 Apache Spark\n\n两个方式,第一种方式为Spark官方提出的;第二种为Google提出的,更符合K8S原生概念\n\n1. Spark On K8S\n2. spark-on-k8s-operator\n\n![image-20230408170401365](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408170401365.png)\n\n
Spark On K8S
\n\n![image-20230408170444023](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408170444023.png)\n\n\n\n
spark-on-k8s-operator
\n\n\n\n### 12.1 安装 spark-on-k8s-operator \n\n参考 :https://blog.csdn.net/w8998036/article/details/122217230\n\n- 安装\n\n```BASH\nhelm repo add spark-operator https://googlecloudplatform.github.io/spark-on-k8s-operator \n\n# 注意是否存在 spark-operator 命名空间,没有则创建\nkubectl create ns spark-operator\n\n# 安装\nhelm install spark-operator spark-operator/spark-operator --namespace spark-operator --set sparkJobNamespace=default --set webhook.enable=true\n```\n\n- 创建服务账户\n\n```bash\nvim spark-application-rbac.yaml\n# 内容如下\n```\n\n```yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: spark\n namespace: spark\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n namespace: spark\n name: spark-role\nrules:\n- apiGroups: [\"\"]\n resources: [\"pods\"]\n verbs: [\"*\"]\n- apiGroups: [\"\"]\n resources: [\"services\"]\n verbs: [\"*\"]\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: spark-role-binding\n namespace: spark\nsubjects:\n- kind: ServiceAccount\n name: spark\n namespace: spark\nroleRef:\n kind: Role\n name: spark-role\n apiGroup: rbac.authorization.k8s.io\n```\n\n```BASH\nkubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root\n```\n\n- 编写作业模板并提交作业\n\n_创建一个Spark作业的YAML配置文件,并进行部署。_\n\n1. 创建spark-pi.yaml文件\n\n```YAML\napiVersion: \"sparkoperator.k8s.io/v1beta2\"\nkind: SparkApplication\nmetadata:\n name: spark-pi\n namespace: spark\nspec:\n type: Scala\n mode: cluster\n image: \"registry.cn-hangzhou.aliyuncs.com/yudayu/spark:v3.1.1\" \n # 1gcr.io/spark-operator/spark:v3.1.1需要更换镜像,gcr.io目前国内无法访问。可以先对docker挂代理,pull到阿里云镜像后\n imagePullPolicy: IfNotPresent\n mainClass: org.apache.spark.examples.SparkPi\n mainApplicationFile: \"local:///opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar\" \n # 需要更换自己的jar包,local指该jar位于image内,可换成所有节点都能访问的web路径,或者通过指定nas挂载pv,将jar包放在nas的pv里\n sparkVersion: \"3.1.1\"\n restartPolicy:\n type: Never\n volumes:\n - name: \"test-volume\"\n hostPath:\n path: \"/tmp\"\n type: Directory\n driver:\n cores: 1\n coreLimit: \"1200m\"\n memory: \"512m\"\n labels:\n version: 3.1.1\n serviceAccount: spark\n volumeMounts:\n - name: \"test-volume\"\n mountPath: \"/tmp\"\n executor:\n cores: 1\n instances: 2\n memory: \"512m\"\n labels:\n version: 3.1.1\n volumeMounts:\n - name: \"test-volume\"\n mountPath: \"/tmp\"\n```\n\n2. 部署一个Spark计算任务\n\n```BASH\nkubectl apply -f spark-pi.yaml\n```\n\n运维\n\n```BASH\nkubectl get sparkapplications\nkubectl describe sparkapplications\nkubectl get svc # 查看该任务的spark ui\n```\n\n### 12.2 安装 Spark On K8S\n\n```BASH\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n# 注意是否存在 spark-operator 命名空间,没有则创建\nkubectl create ns spark-on-k8s\nhelm install -n spark-on-k8s spark bitnami/spark \\\n --set worker.coreLimit=28 \n```\n\n```BASH\n./bin/spark-submit \\\n --class org.apache.spark.examples.SparkPi \\\n --conf spark.kubernetes.container.image=bitnami/spark:3 \\\n --master k8s://https://125.220.153.23:6443 \\\n --conf spark.kubernetes.driverEnv.SPARK_MASTER_URL=spark://10.97.43.141:7077 \\\n--deploy-mode cluster \\\n --executor-memory 20G \\\n --num-executors 10 \\\n--conf spark.executor.instances=5 \\\nhttps:///data/spark-examples_2.12-3.3.0.jar 1000\n```\n\n```bash\nkubectl run --namespace spark-on-k8s spark-oge --rm --tty -i --restart='Never' \\\n--image bitnami/spark:3 \\\n-- spark-submit --master spark://10.97.43.141:7077 \\\n--class org.apache.spark.examples.SparkPi \\\n --deploy-mode cluster \\\n/data/spark-examples_2.12-3.3.0.jar 100000\n```\n\n\n\n## 13 在K8S上部署redis集群\n\n- 待更\n\n\n\n## 14 在K8S上部署nginx\n\n### 14.1 创建pv\n\n```BASH\nvim nginx-pv.yaml\n```\n\n```YAML\napiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: nginx-ydy-pv\n namespace: ydy\nspec:\n capacity:\n storage: 10Gi\n accessModes:\n - ReadWriteOnce\n persistentVolumeReclaimPolicy: Retain\n storageClassName: manual\n hostPath:\n path: /mnt/storage/k8s/pv/ydy-nginx-pvc\n```\n\n### 14.2 创建pvc\n\n```BASH\nvim nginx-pvc.yaml\n```\n\n```YAML\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n name: nginx-ydy-pvc\n namespace: ydy\nspec:\n accessModes:\n - ReadWriteOnce\n resources:\n requests:\n storage: 10Gi\n storageClassName: manual\n```\n\n### 14.3 安装nginx并设置静态资源挂载的pvc\n\n将nginx中的`/app`挂载到`/mnt/storage/k8s/pv/luluancheng-nginx-pvc`下\n\n```BASH\nhelm install -n ydy nginx bitnami/nginx \\\n--set staticSitePVC=nginx-ydy-pvc\n```\n\n\n\n\n\n## 附录:疑难问题解决:\n\n### 1 K8S强制删除 namespace(会删除该命名空间中的所有 pod )\n\n```bash\n#1、将该分区导出为json文件,以 oge namespace为例\nkubectl get ns oge -o json > oge.json\n#2、编辑该json文件,将spec内的内容全部删除,然后保存退出\n```\n\n![22f0a5cbf0424425b0d62681f79cb713](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/22f0a5cbf0424425b0d62681f79cb713.png)\n\n![ef949b8bb503410c918894ab20bad993](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/ef949b8bb503410c918894ab20bad993.png)\n\n```BASH\n# 3、另开一个终端,启动一个proxy\nkubectl proxy --port=8081\n```\n\n```BASH\n# 4、执行一个curl命令,更新oge namespace\ncurl -k -H \"Content-Type: application/json\" -X PUT --data-binary @oge.json http://127.0.0.1:8081/api/v1/namespaces/oge/finalize\n```\n\n\n\n### 2 CNI网络错误\n\n- 当迁移集群之后,拉取镜像报cni网络错误,如下:\n\n![8d5d49703c8ac59f24fde81b3982b616](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/8d5d49703c8ac59f24fde81b3982b616.png)\n\n- 从上面的截图中看到问题出现在给Pod分配IP上,意思是 cni0 的IP不同于``10.244.9.1/24`,下面我们使用 `ifconfig`命令查看IP信息\n\n![79e65e4f797200ad98feac6f8b2d4254](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/79e65e4f797200ad98feac6f8b2d4254.png)\n\n- 从上面的图中我们可以看到``flannel.1`的 **IP** 为`10.244.9.0`,然后我们又使用`cat /run/flannel/subnet.env`,该文件内容如下: \n\n![310efbdb614636a17aa48eaf4a8dc2c5](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/310efbdb614636a17aa48eaf4a8dc2c5.png)\n\n- 其实现在的问题就比较明确了,我们使用的Overlay network为Flannel,也就是说Pod的IP地址段应该在Flannel的subnet下,而现在我们看到cni0的IP地址段与flannel subnet地址段不同,所以就出现了问题。 \n\n- 解决方案\n - 方法1是将 cni0 的 IP 段修改为``10.244.9.1`\n - 方法2是将这个错误的网卡删除掉,之后会自动重建\n\n```bash\n# 下面我们删除错误的cni0,然后让它自己重建\nifconfig cni0 down\nip link delete cni0\n```\n\n\n\n### 3 28 服务器增加路由(为了让两台刀片上网)\n\n- 28上执行\n\n```BASH\niptables -t nat -A POSTROUTING -s 192.168.0.209/24 -o em1_2 -j MASQUERADE\niptables -t nat -A POSTROUTING -s 192.168.0.177/24 -o em1_2 -j MASQUERADE\n```\n\n\n\n### 4 异常断电等导致 etcd 心跳检测出现问题\n\n- [Kubernetes API Server cannot be started after improper reboot](https://github.com/kubernetes/kubernetes/issues/107491)\n\n- [K8S: etcd 集群备份灾难恢复操作手册](https://blog.51cto.com/liruilong/6060676)\n\n\n\n### 5 OpenStack服务器网络跳转镜像\n\n>作用: 保证OpenStack上服务器与实验室服务器可以 ping 通\n\n- **IP**\n - `115.156.91.250`\n- **网关**\n - `115.156.91.254`\n- **子网掩码**\n - `255.255.255.0`\n\n\n\n\n\n","slug":"K8S集群环境搭建(Containerd作为容器)","published":1,"updated":"2023-10-21T04:52:13.442Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5vd000ffc3ua3m2feky","content":"

1 前述

\n

1.1 云原生定义

\n
    \n
  • Pivotal《传统应用和SOA向云原生转型指南》(2015)的云原生的特征:\n
      \n
    • 符合 12 要素应用\n
        \n
      • 基准代码:一份基准代码,多份部署(类似于Git版本控制系统的main分支);
      • \n
      • 显示声明所有依赖关系:通过依赖清单,确切地声明所有依赖项;
      • \n
      • 把后端服务当作附加资源:各种后端服务(如数据库、消息队列、邮件服务、缓存系统),不区别对待本地或第三方服务;
      • \n
      • 构建、发布、运行:严格区分构建、发布、运行这三个步骤;
      • \n
      • 无状态进程:应用的进程必须无状态;
      • \n
      • 端口绑定:互联网应用通过端口绑定来提供服务,并监听发送至该端口的请求。应用完全自我加载,不依赖于任何网络服务器;
      • \n
      • 并发:通过进程模型进行扩展。进程是一等公民;
      • \n
      • 易处理:进程可以瞬间开启或停止,有利于快速、弹性的伸缩应用。进程应追求最小启动时间;进程一旦接受终止信号就会优化的终止;进程在面对突然死亡时保持健壮;
      • \n
      • 开发环境与线上环境等价:尽可能的保持开发,预发布,线上环境相同,以尽量做到持续部署;
      • \n
      • 日志:应用本身从不存储自己的输出流,不应该试图去写或者管理日志文件,相反,每一个运行的进程都会直接的标准输出(stdout)事件流;
      • \n
      • 管理进程:后台管理任务当作一次性进程运行;
      • \n
      \n
    • \n
    • 面向微服务架构\n
        \n
      • 微服务将单体系统分解为多个“仅做好一件事”的可独立部署的服务。这件事通常代表某项业务能力,或者最小可提供业务价值的“原子“服务单元。具备以下优点:\n
          \n
        • 变更周期解耦:只要变更限于单一有界的环境,并且服务继续履行其现有合约;实现了更频繁和快速的部署,从而实现了持续的价值流动;
        • \n
        • 减少业务领域和现有代码的学习负担
        • \n
        • 可以加快采用新技术的步伐
        • \n
        • 提供独立、高效的服务扩展
        • \n
        \n
      • \n
      \n
    • \n
    • 自服务敏捷架构(可以认为是DevOps):\n
        \n
      • 一个能够持续部署和运行这些微服务的平台;如代码以Git形式“推送”。 然后,自服务敏捷平台构建应用程序工件,构建应用程序环境,部署应用程序,并启动必要的进程。 团队不必考虑他们的代码在哪里运行或如何到达那里,这些对用户都是透明得,因为平台会关注这些。
      • \n
      \n
    • \n
    • 基于 API 的协作
    • \n
    • 抗脆弱性
    • \n
    \n
  • \n
  • 云原生计算基金会(2015)定义的特征\n
      \n
    • 应用容器化
    • \n
    • 面向微服务架构
    • \n
    • 应用支持容器的编排制度
    • \n
    \n
  • \n
  • 云原生计算基金会(2018)定义\n
      \n
    • 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API
    • \n
    • 这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更
    • \n
    \n
  • \n
\n

1.2 容器、虚拟机、Docker、Openstack 和 K8S

\n
    \n
  • 容器&虚拟机:均为虚拟化技术,容器更为轻量化、效率更高、启动更快;虚拟机需数分钟启动,容器仅需数十毫秒;
  • \n
  • Docker: 容器化虚拟技术事实上的标准;
  • \n
  • OpenStack:分布式的虚拟机服务平台,相比于普通的虚拟机软件(如Vmare),多了分布式虚拟机调度管理的功能和节点的负载均衡;
  • \n
  • K8S:分布式的容器调度管理平台,相比于Docker,多了分布式的容器调度管理和节点的负载均衡;
  • \n
  • 注意:常见的中文资料均言K8S是容器编排软件,这里的编排是指调度、管理的意思,而非工作流编排的意思,容易有误导性;
  • \n
  • 注意:无论是Openstack还是K8S,均不支持跨节点的容器或虚拟机的创建;所以将多台电脑合并成一台电脑的想法是不现实的;
  • \n
\n

1.3 K8S 和 云原生

\n

在单机上运行容器,无法发挥它的最大效能,只有形成集群,才能最大程度发挥容器的良好隔离、资源分配与编排管理的优势,而对于容器的编排管理,Swarm、Mesos 和 Kubernetes 的大战已经基本宣告结束,Kubernetes 成为了无可争议的赢家。

\n
    \n
  • Kubernetes 成为云原生应用的基石
  • \n
  • 有机会成为跨云的真正的云原生应用的操作系统
  • \n
\n

1.4 K8S 介绍

\n
    \n
  • 官方Kubernetes 也称为 K8S,是用于自动部署、扩缩和管理容器化应用程序的开源系统。
  • \n
  • 发展历史:由Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用。
  • \n
  • 能力Google 每周运行数十亿个容器,能够在不扩张运维团队的情况下进行规模扩展。
  • \n
  • 作用: 相当于一个操作系统,可以快速提供PaaS服务:1)创建各种容器化测试化环境;2)发布各种容器化服务;3)快速安装各种容器化服务,如MongoDB、HbasePostgresqlRedisSpark等;快速提供IaaS服务:通过安装OpenstackKubeVirt等软件;快速提供FaaS服务:通过安装Kube Native等软件;
  • \n
\n

\"image-20230414170948460\"

\n

\"image-20230414171119324\"

\n

1.5 基本概念

\n
    \n
  • \n

    Container:轻量级的系统虚拟化技术,使用namespace隔离环境。

    \n
  • \n
  • \n

    Pod

    \n
  • \n
  • \n
      \n
    • K8S 的调度的基本单位,Pod是一组紧密关联的容器集合,内部的容器共享PID、IPC、Network和UTS namespace。可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。
    • \n
    \n

    \"image-20230415141540422\"

    \n
  • \n
\n

​\t\t\t\tPod的设计理念基础是微服务,不同类型的业务组合由不同类型的Pod执行,一个Pod对应一个微服务

\n
    \n
  • \n
      \n
    • K8S中,采用manifest(yaml或json)定义对象,比如nginx服务(包含了一个nginx 容器image)定义为:
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
\n
    \n
  • \n
      \n
    • Node: 是Pod运行的主机,可以为物理机,也可以为虚拟机。每个Node上要运行container runtime (docker或者rkt)、kubelet和kube-proxy服务
    • \n
    • \"image-20230415142123300\"
    • \n
    \n
  • \n
  • \n
      \n
    • Service: 一个Pod只是一个运行服务的实例,可能在一个节点上停止,在另一个节点以一个新的IP启动一个新的Pod。在K8S集群中,客户端需要访问的服务就是Service对象。每个Service会对应一个集群内部有效的虚拟IP,集群内部通过虚拟IP访问一个服务。
    • \n
    \n
  • \n
  • \n
      \n
    • Kubelet: 每个Node的任务和资源管理
    • \n
    \n
  • \n
  • \n
      \n
    • Kube-proxy: 负责每个节点的硬件负载均衡
    • \n
    \n
  • \n
\n

1.6 K8S 常见命令

\n
    \n
  • 运行一个Nginix容器:\n
      \n
    • kubectl run --image=nginx:alpine nginx-app --port=80
    • \n
    \n
  • \n
  • Kubectl 命令:\n
      \n
    • kubectl get - 类似于 docker ps,查询资源列表
    • \n
    • kubectl describe - 类似于 docker inspect,获取资源的详细信息
    • \n
    • kubectl logs - 类似于 docker logs,获取容器的日志
    • \n
    • kubectl exec - 类似于 docker exec,在容器内执行一个命令
    • \n
    • kubectl create -f file.yaml – 根据yaml创建Deployment资源
    • \n
    • kubectl delete 删除命令,可删除node、pod、svc、depolyment
    • \n
    \n
  • \n
  • yaml 定义 Pod:
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
\n
    \n
  • Volume:\n
      \n
    • 一个Pod一旦发生异常,Pod 产生的数据会随着 Pod 消亡而自动消失。Volume 用于持久化容器数据。
    • \n
    • 如:为 redis 容器指定一个 hostPath 来存储 redis 数据
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
volumeMounts:
- name: redis-persistent-storage
mountPath: /data/redis
volumes:
- name: redis-persistent-storage
hostPath:
path: /data/
\n
    \n
  • Service:\n
      \n
    • kubectl创建Pod,Pob的IP地址会随着Pod的重启而变化
    • \n
    • 为了访问Pod提供的服务,采用Service提供为一组Pod一个统一的入口,并提供负载均衡和自动服务发现。\n
        \n
      • kubectl expose deployment nginx-app --port=80 --target-port=80 --type=NodePort
      • \n
      \n
    • \n
    \n
  • \n
  • Replicas set:\n
      \n
    • 在一个Service中,可为Pod设置数个副本,以确保服务永不掉线\n
        \n
      • kubectl scale --replicas=3 deployment/nginx-app
      • \n
      \n
    • \n
    \n
  • \n
\n

\"image-20230415143046325\"

\n
    \n
  • 滚动升级(Rolling Update):\n
      \n
    • 滚动升级(Rolling Update)通过逐个副本容器替代升级的方式来实现无中断的服务升级:\n
        \n
      • kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2
      • \n
      \n
    • \n
    • 滚动升级中若发生错误,可随时回滚:\n
        \n
      • kubectl rolling-update frontend-v1 frontend-v2 --rollback
      • \n
      \n
    • \n
    \n
  • \n
  • 资源限制:\n
      \n
    • K8S通过 cgroups 提供容器资源管理的功能,可限制每个容器的 CPU 和内存使用,比如对于刚才创建的 deployment,可以通过下面的命令限制 nginx 容器最多只用 50% 的 CPU 和 128MB 的内存:\n
        \n
      • kubectl set resources deployment nginx-app -c=nginx --limits=cpu=500m,memory=128Mi
      • \n
      \n
    • \n
    • 或者在yaml中指定资源限制
    • \n
    \n
  • \n
  • 健康检查:\n
      \n
    • K8S Kubernetes 提供了两种探针(Probe,支持 exec、tcpSocket 和 http 方式)来探测容器的状态:\n
        \n
      • LivenessProbe:探测应用是否处于健康状态,如果不健康则删除并重新创建容器
      • \n
      • ReadinessProbe:探测应用是否启动完成并且处于正常服务状态,如果不正常则不会接收来自 Kubernetes Service 的流量
      • \n
      \n
    • \n
    \n
  • \n
\n

1.7 K8S 常用运维命令

\n
    \n
  • 查看pod,及所在的节点:\n
      \n
    • kubectl get pods -o wide
    • \n
    \n
  • \n
  • 若有节点warn,回收垃圾失败:
  • \n
\n
1
2
kubectl drain --delete-local-data --ignore-daemonsets NODENAME
kubectl uncordon NODENAME
\n

2 K8S 集群基础环境部署

\n

若服务器之前搭建过 K8S 集群,需要彻底删除

\n

参考https://blog.csdn.net/qq_43159578/article/details/124131709

\n
    \n
  • 停止所有的Kubernetes服务
  • \n
\n
1
2
sudo systemctl stop kubelet
sudo systemctl stop containerd
\n
    \n
  • 删除Kubernetes软件包
  • \n
\n
1
yum remove kubeadm kubectl kubelet kubernetes-cni -y
\n
    \n
  • 删除配置文件
  • \n
\n
1
2
3
4
# 清除残留文件
rm -rf /root/.kube
rm -rf /etc/cni/net.d
rm -rf /etc/kubernetes/*
\n
    \n
  • 删除etcd数据目录
  • \n
\n
1
rm -rf /var/lib/etcd
\n
    \n
  • 清除iptables或者ipvs的配置
  • \n
\n
1
2
# sudo ipvsadm -C
# sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo # # iptables -Xkubec
\n
    \n
  • 如果只是想重新部署集群
  • \n
\n
1
kubeadm reset
\n

kubeadm reset 命令用于清除当前节点上所有与 kubeadm initkubeadm join 命令创建的 Kubernetes 集群相关的状态。其主要作用如下:

\n
    \n
  1. \n

    移除 Kubernetes 集群相关的系统服务,如 kubelet 和 kube-proxy。

    \n
  2. \n
  3. \n

    删除所有在当前节点上创建的 Kubernetes 对象,包括 Pod、Service、Deployment 等。

    \n
  4. \n
  5. \n

    移除 etcd 中与当前节点相关的信息,如节点标识、配置信息等。

    \n
  6. \n
  7. \n

    删除 Kubernetes 数据目录,包括证书、密钥、kubeconfig 文件等。

    \n
  8. \n
\n

使用 kubeadm reset 命令可以清除当前节点上的所有 Kubernetes 相关状态,以便重新创建新的 Kubernetes 集群或者将当前节点加入到另一个 Kubernetes 集群中。在进行 kubeadm reset 操作之前,应该先备份当前节点上的重要数据和配置信息,以便在需要时进行恢复。

\n

2.1 服务器

\n
    \n
  • 网络资源:各节点间通过千兆交换机互联(非光纤交换机)
  • \n
  • 管理节点:\n
      \n
    • Gisweb4,Gisweb3
    • \n
    \n
  • \n
  • 计算节点:\n
      \n
    • Gisweb3,GISweb2,dellm640-01, Gisweb4, dellslot03, dellslot4
    • \n
    \n
  • \n
  • 持久化存储资源:\n
      \n
    • 目前采用:\n
        \n
      • nfs-client: 23服务器的/mnt/storage/k8s/pv
      • \n
      \n
    • \n
    \n
  • \n
  • Node1(刀片3):\n
      \n
    • 子网 IP:192.168.0.177
    • \n
    • CPU:Intel® Xeon® Silver 4216 CPU @ 2.10GHz;32核心,64线程。
    • \n
    • 内存:64GB(32GB*2),每根DDR4,3000Mhz
    • \n
    \n
  • \n
  • Node2(刀片4):\n
      \n
    • 子网 IP:192.168.0.209
    • \n
    • CPU:Intel® Xeon® Silver 4216 CPU @ 2.10GHz;32核心64线程。
    • \n
    • 内存:64GB(32GB*2),每根DDR43200Mhz
    • \n
    \n
  • \n
\n

2.2 安装过程

\n

2.2.1 前提条件

\n

a. 节点之中不可以有重复的主机名、MAC 地址或 product_uuid

\n
1
cat /sys/class/dmi/id/product_uuid
\n

b. 检查网络适配器:若有多个网卡,确保每个node的子网通过默认路由可达

\n

c. 防火墙开放端口(所有节点)

\n

\"image-20230415145138479\"

\n
1
2
3
4
5
6
7
systemctl restart firewalld
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=6443/tcp --permanent
firewall-cmd --zone=public --add-port=2379-2380/tcp --permanent
firewall-cmd --zone=public --add-port=10250/tcp --permanent
firewall-cmd --zone=public --add-port=10259/tcp --permanent
firewall-cmd --zone=public --add-port=10257/tcp --permanent
\n

d. 关闭防火墙(所有节点)

\n
1
2
systemctl stop firewalld NetworkManager
systemctl disable firewalld NetworkManager
\n

e. 关闭交换分区并禁用 SELinux(所有节点)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看 交换分区
free -m

# 将 `SELinux` 设置为 `permissive` 模式(相当于将其禁用) 第一行是临时禁用,第二行是永久禁用
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# 关闭swap;第一行是临时禁用,第二行是永久禁用
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 允许 iptables 检查桥接流量 (K8s 官方要求)
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 让配置生效
sysctl --system
\n

f. 时间同步(所有节点)

\n
1
2
3
4
yum install chrony -y
systemctl start chronyd
systemctl enable chronyd
chronyc sources
\n

g. 设置主机名并添加 ip 映射(所有节点)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 以 gisweb4 为例
# 查看主机名cat
hostname
# 设置主机名
hostnamectl set-hostname gisweb4
# 更新
bash

# 添加 ip 映射
echo "125.250.153.23 gisweb4" >> /etc/hosts
echo "125.250.153.23 gisweb4" >> /etc/hosts
# 两台无外网ip的刀片添加内网ip

# /etc/hosts 文件内容如下:
192.168.0.203 gisweb1
192.168.0.202 gisweb2
192.168.0.204 gisweb4
192.168.0.208 gisweb3
192.168.0.176 dellm640-01
192.168.0.177 dellm640-03
192.168.0.209 dellslot04

125.220.153.26 gisweb1
125.220.153.25 gisweb2
125.220.153.22 gisweb3
125.220.153.23 gisweb4
125.220.153.28 dellm640-01
\n

2.2.2 升级 Linux 内核到最新(所有节点)

\n

清除缓存,重新构建缓存:

\n
1
2
# 清除缓存
yum makecache & yum -y update
\n

参考链接https://zhuanlan.zhihu.com/p/368879345

\n

2.2.3 转发 IPv4 并让 iptables 看到桥接流量(所有节点)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# a.    验证br_netfilter是否已经加载
lsmod | grep br_netfilter
# b. 加载br_netfilter模块:
modprobe br_netfilter
# c. iptabels桥接
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

# 应用 sysctl 参数而不重新启动
sysctl --system
\n

2.2.4 安装 ipvsadm(所有节点)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
yum install ipvsadm ipset sysstat conntrack libseccomp -y

cat <<EOF | sudo tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF

systemctl restart systemd-modules-load.service

lsmod | grep -e ip_vs -e nf_conntrack
\n

2.2.5 修改内核参数(所有节点,lb除外)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.netfilter.nf_conntrack_max=2310720

net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384

net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.all.forwarding = 1
EOF

sysctl --systemS
\n

2.2.6 安装Container Runtime(选用containerd,弃用docker)

\n
    \n
  • Docker-engine+cir-dockerd方案(舍弃:从kubernetes 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,需要在kubelet和docker之间加上一个中间层cri-docker。cri-docker是一个支持CRI标准的shim。一头通过CRI跟kubelet交互,另一头跟docker api交互,从而间接的实现了kubernetes以docker作为容器运行时。但是这种架构缺点也很明显,调用链更长,效率更低。因此选用containerd作为容器runtime
  • \n
  • containerd方案: containerd是一个docker的容器runtime,成为CNCF的官方项目
  • \n
\n

官方安装教程:https://github.com/containerd/containerd/blob/main/docs/getting-started.md

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 安装containerd.io
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install containerd.io


# 安装CNI插件
# i.下载cni-plugins.tar 从https://github.com/containernetworking/plugins/releases
# 在线下载:
# wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
# ii.在/opt/cni/bin下解压:

# 把22上的拷贝到没有公网ip的服务器上
# scp -P22 /opt/cni/bin/cni-plugins-linux-amd64-v1.1.1.tgz root@192.168.0.203:/opt/cni/bin/

mkdir -p /opt/cni/bin
cd /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz


# 重启服务:
systemctl restart containerd
# 开机启动:
systemctl enable containerd


# 配置systemd cgroup驱动
# 修改配置文件,将 SystemdCgroup 改为 true 注意配置项是区分大小写的
containerd config default | sudo tee /etc/containerd/config.toml
vim /etc/containerd/config.toml

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
# 并将 sandbox_image 地址修改为国内的地址
并且将 sandbox_image = "registry.k8s.io/pause:3.6"
修改为 sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6"

# 启动 containerd
systemctl restart containerd

# 开机自启
systemctl enable containerd

# 启动成功后可以查看到监听的端口
netstat -nlput | grep containerd
tcp 0 0 127.0.0.1:36669 0.0.0.0:* LISTEN 8665/containerd off (0.00/0/0)
\n

2.2.7 在所有电脑上安装 kubeadm, kubelet and kubectl(所有节点)

\n
1
2
3
# a.    kubeadm: the command to bootstrap the cluster.
# b. kubelet: the component that runs on all of the machines in your cluster and does things like starting pods and containers.
# c. kubectl: the command line util to talk to your cluster.
\n
    \n
  1. 配置阿里云的k8s源,加速安装
  2. \n
\n
1
2
3
4
5
6
7
8
9
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
\n
    \n
  1. 将 SELinux 设置为 permissive 模式(相当于将其禁用)
  2. \n
\n
1
2
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
\n
    \n
  1. 安装
  2. \n
\n
1
2
3
4
yum install -y --nogpgcheck kubelet-1.25.2 kubeadm-1.25.2 kubectl-1.25.2  
# sudo yum install -y --nogpgcheck kubelet-1.26.3 kubeadm-1.26.3 kubectl-1.26.3
# 自启动
systemctl enable --now kubelet
\n

2.2.8 启动控制面节点

\n
1
2
3
kubeadm init --kubernetes-version=v1.25.2 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 

#kubeadm init --kubernetes-version=v1.26.3 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
\n

若出现如下错误(上一次集群初始化的残留文件)

\n
1
2
# 如果出现报错  
[ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
\n

执行如下命令后再次初始化

\n
1
2
rm -rf /var/lib/etcd
rm -rf /etc/kubernetes/manifests/*
\n

2.2.9 配置环境变量(初始化后)

\n
1
2
3
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
\n

2.2.10 将 master 作为node(管理节点上执行)

\n
    \n
  • 检查 node 是否存在污点\n
      \n
    • 污点值有三种:\n
        \n
      • NoSchedule:一定不被调度
      • \n
      • PreferNoSchedule:尽量不被调度【也有被调度的几率】
      • \n
      • NoExecute:不会调度,并且还会驱逐Node已有Pod
      • \n
      \n
    • \n
    \n
  • \n
\n
1
kubectl describe nodes gisweb4 |grep Taints
\n
    \n
  • 删除污点:
  • \n
\n
1
2
# 本次删除的污点为:node-role.kubernetes.io/control-plane-
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
\n

2.2.11 安装 Pod 网络插件(CNI:Container Network Interface)(master)

\n

你必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信。

\n

确保kubeadm初始化时,pod_cidr 为10.244.0.0

\n
    \n
  • 下载 yml 配置文件\n
      \n
    • 或自己下载到本地
    • \n
    \n
  • \n
\n
1
curl https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml -O
\n
    \n
  • 编辑kube-flannel.yml\n
      \n
    • 找到如下位置,添加 iface-regex
    • \n
    \n
  • \n
\n
1
2
3
vim kube-flannel.yml
# 添加
- --iface-regex=^192.168..
\n

\"\"

\n
    \n
  • 构建
  • \n
\n
1
kubectl apply -f kube-flannel.yml
\n

2.2.12 node 节点加入集群

\n
    \n
  • 管理节点获取加入命令:
  • \n
\n
1
2
3
kubeadm token create --print-join-command
# 返回如下
kubeadm join 125.220.153.23:6443 --token x0wdaj.d5wltdzdtos22fl6 --discovery-token-ca-cert-hash sha256:9245d363cdeb1757bacba21b9ccdc06a28e7490bcedfb0eeb404b56f769fa112
\n
    \n
  • 在 node 节点执行生成命令
  • \n
\n

如果此步报如下错误

\n

The connection to the server localhost:8080 was refused - did you specify the right host

\n
    \n
  1. 出现这个问题的原因是kubectl命令需要使用kubernetes-admin的身份来运行,在kubeadm int启动集群的步骤中就生成了/etc/kubernetes/admin.conf
  2. \n
  3. 因此,解决方法如下,将主节点中的/etc/kubernetes/admin.conf文件拷贝到工作节点相同目录下:
  4. \n
  5. 然后分别在工作节点上配置环境变量:
  6. \n
\n

解决方案

\n
    \n
  • 主节点执行
  • \n
\n
1
2
# 将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到工作节点相同目录下:
scp -P22 /etc/kubernetes/admin.conf oge@125.220.153.22:/etc/kubernetes/
\n
    \n
  • node 节点执行如下命令后,再次执行加入集群的命令
  • \n
\n
1
2
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
\n
    \n
  • 如果是重新加入集群,需要 reset 一下
  • \n
\n
1
kubeadm reset
\n

2.2.13 添加新的 master 节点

\n
    \n
  • 管理节点:
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 管理节点查看
kubeadm token create --print-join-command
# 生成如下
kubeadm join 125.220.153.23:6443 --token mc56rw.t9b3d1ql53yhom9y --discovery-token-ca-cert-hash sha256:753ccf865a9c590413043d469a9848300871afaef7221e3fdb97d981939a2b83

# 管理节点
kubeadm init phase upload-certs --upload-certs
# 输出
I0413 11:00:30.817038 10009 version.go:256] remote version is much newer: v1.27.0; falling back to: stable-1.25
[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
[upload-certs] Using certificate key:
70d43cde7f6423b5c3e88c0fa9d08511cefbc53992dc63a13544cd548a912941

# 管理节点,在networking前添加:controlPlaneEndpoint: 125.220.153.23:6443
kubectl -n kube-system edit cm kubeadm-config
\n
    \n
  • 新的master节点
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 新节点
# 重新加入的话,检查是否需要kill掉6443端口(这是之前的api-service服务)
kubeadm join 125.220.153.23:6443 --token mc56rw.t9b3d1ql53yhom9y --discovery-token-ca-cert-hash sha256:753ccf865a9c590413043d469a9848300871afaef7221e3fdb97d981939a2b83 --control-plane --certificate-key 70d43cde7f6423b5c3e88c0fa9d08511cefbc53992dc63a13544cd548a912941

# 生成
This node has joined the cluster and a new control plane instance was created:

* Certificate signing request was sent to apiserver and approval was received.
* The Kubelet was informed of the new secure connection details.
* Control plane label and taint were applied to the new node.
* The Kubernetes control plane instances scaled up.
* A new etcd member was added to the local/stacked etcd cluster.

To start administering your cluster from this node, you need to run the following as a regular user:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Run 'kubectl get nodes' to see this node join the cluster.
\n

3 K8S 管理平台 dashboard 环境部署(管理节点)

\n
    \n
  • 下载 yaml 配置文件并应用\n
      \n
    • 或下载到本地然后上传
    • \n
    \n
  • \n
\n
1
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml
\n
    \n
  • 修改配置文件(以node)\n
      \n
    • 但是这个只能内部访问,所以要外部访问,要么部署 ingress,要么就是设置 service NodePort 类型。这里选择 service 暴露端口。
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

# 将其中的,type: ClusterIP 修改成type: NodePort,保存退出即可。

# 查看服务的暴露端口,需在安全组放行
kubectl get svc -A |grep kubernetes-dashboard

\n

\"image-20230415154841715\"

\n
    \n
  • 权限认证
  • \n
\n
1
2
3
4
5
6
# 创建访问用户
kubectl apply -f https://kuboard.cn/install-script/k8s-dashboard/auth.yaml
# 获取访问令牌
kubectl -n kubernetes-dashboard create token admin-user
# 生成的令牌
eyJhbGciOiJSUzI1NiIsImtpZCI6IkdVQTZzb3JEM1FHdkpxVDNsSEwtVEZWc2hyR08tbmFFWnFGX2Q2OGt5cEkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjgzNzM1MTQ1LCJpYXQiOjE2ODM3MzE1NDUsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiMzBlMWQzNDEtNDc0Yi00M2MyLWIyNzYtZGIxZTU4NzM5ZTgxIn19LCJuYmYiOjE2ODM3MzE1NDUsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.mg1IU29tBpH23nglJVbRmVa2A26WZjXxMCzckQyb-dnviLBRzBuvNebb8H4YH5CNJUPkB2GGC_r7dlm5zEbPpK8RqkbwXy-wqkOoMephs83gIQkJ3RgskpWqTgqqg87e6WXHRtuzYsQQZ4Rq3Y4uQy9jJS9o1lIoRTujpmpWORb9vu4JN0RqEfK2chQqNsYCe_TCtvtvkP2EyuU3QSeYdvWh5NNZ9CYwA8l8eqA6ijrmTqZjnI6Q9Ymo7trKSuGFmffotBpN9dTYZoyv6Io_VgEz6_1oHsA0pwG-3wc41Ly11sDAzwjZvoGN1yfw0vsVcwnAjH4LkRG2ImwYIcZbig
\n\n

4 安装K8S的包管理工具Helm (管理节点)

\n

参考https://helm.sh/docs/intro/install/

\n
    \n
  • 这里以下载压缩包安装为例:
  • \n
\n

参考https://www.cnblogs.com/zhanglianghhh/p/14165995.html
\ngithub地址https://github.com/helm/helm

\n

\"image-20230413112634363\"

\n
1
2
3
4
5
6
cd  ~/k8s/helm
wget https://get.helm.sh/helm-v3.11.3-linux-amd64.tar.gz
tar zxfv helm-v3.11.3-linux-amd64.tar.gz
mv ./linux-amd64/helm /usr/bin/
# 显示版本,安装完成
helm version
\n

5 安装K8S的包管理工具 krew(管理节点)

\n

参考https://krew.sigs.k8s.io/docs/user-guide/setup/install/

\n
    \n
  • 确保 git 已经安装
  • \n
\n
1
2
3
git version
# 若未安装
yum -y install git
\n
    \n
  • 安装krew
  • \n
\n
1
2
3
4
5
6
7
8
9
(
set -x; cd "$(mktemp -d)" &&
OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\\(arm\\)\\(64\\)\\?.*/\\1\\2/' -e 's/aarch64$/arm64/')" &&
KREW="krew-${OS}_${ARCH}" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
tar zxvf "${KREW}.tar.gz" &&
./"${KREW}" install krew
)
\n
    \n
  • 添加 $HOME/.krew/bin目录到您的 PATH 环境变量。 更新你的 .bashrc或者 .zshrc文件
  • \n
\n
1
2
3
# 永久写的用户的环境变量文件,避免登出后失效
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
source ~/.bashrc
\n
    \n
  • 若安装失败,采用压缩包安装
  • \n
\n
1
2
3
4
5
6
7
8
9
10
wget https://github.com/kubernetes-sigs/krew/releases/latest/download/krew-linux_amd64.tar.gz

tar -zxvf krew-linux_amd64.tar.gz
# 添加$HOME/.krew/bin目录到PATH环境变量
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
# 配置为 kubectl 插件
mv ./krew-linux_amd64 ./kubectl-krew
mv ./kubectl-krew /usr/local/bin/
# 测试
kubectl krew version
\n
    \n
  • 检查是否安装成功
  • \n
\n
1
2
kubectl krew
kubectl plugin list
\n

6 为 K8S 创建 PV 持久卷

\n

6.1 PV和PVC

\n
    \n
  • \n

    持久卷(PersistentVolume,PV)是集群中由管理员配置的一段网络存储。它是集群中的资源,就像节点是集群资源一样。PV持久卷和普通的Volume一样,也是使用卷插件来实现的,只是它们拥有独立于任何使用PV的Pod的生命周期。此API对象捕获存储实现的详细信息,包括NFS,iSCSI或特定于云提供程序的存储系统。

    \n
  • \n
  • \n

    持久卷申领(PersistentVolumeClaim,PVC)表达的是用户对存储的请求。概念上与Pod类似。Pod会耗用节点资源,而PVC申领会耗用PV资源。

    \n
  • \n
\n

6.2 用 storageClass 动态创建 PV

\n
    \n
  • 对1PB的大量目录创建NFS服务,gisweb1-4,以gisweb4为例子
  • \n
\n
1
2
安装NFS: 
yum -y install nfs-utils rpcbind
\n
    \n
  • 设置持久卷权限
  • \n
\n
1
2
3
# 执行权限
chown -R nobody:nfsnobody /mnt/storage/k8s/pv
#chmod -R 777 /mnt/storage/k8s/pv
\n
    \n
  • 配置 nfs
  • \n
\n
1
2
3
4
vim /etc/exports
# 添加:
/mnt/storage/k8s/pv 192.168.0.0/24(rw,sync,no_root_squash)
# 以上设置让所有的 IP 都有效
\n
1
2
3
4
5
6
7
8
9
10
11
systemctl start rpcbind
systemctl enable rpcbind
systemctl enable nfs
systemctl start nfs
systemctl start nfs-server
systemctl enable nfs-server

systemctl start firewalld
firewall-cmd --permanent --add-service=nfs
firewall-cmd --reload
systemctl stop firewalld && sudo systemctl disable firewalld
\n
    \n
  • 检查
  • \n
\n
1
2
exportfs -rv
showmount -e 127.0.0.1
\n
    \n
  • 所有节点安装nfs客户端
  • \n
\n
1
2
3
4
5
yum install -y nfs-utils
# 每个节点挂载nfs客户端的存储目录,本次nfs客户端在gisweb4(192.168.0.204)上
mount -t nfs 192.168.0.204:/mnt/storage/k8s/pv /mnt/storage/k8s/pv
# 检查挂载情况
df -h
\n
    \n
  • 安装nfs-client-provisioner (需要翻墙)
  • \n
\n

参考:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
# 更新helm repo
helm repo update
# 搜索helm库中nfs版本
helm search repo nfs-subdir-external-provisioner

# 添加 helm 仓库
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \\
--set nfs.server=192.168.0.204 \\
--set nfs.path=/mnt/storage/k8s/pv \\
--set image.repository=registry.cn-hangzhou.aliyuncs.com/xzjs/nfs-subdir-external-provisioner \\
--set image.tag=v4.0.0
\n
    \n
  • 手动安装 nfs-client-provisioner
  • \n
\n

参考:http://www.mydlq.club/article/109/#创建-nfs-subdir-external-provisioner-部署文件

\n
    \n
  • 成功后,安装时添加持久化参数,其中 nfs-storage 为安装的 storageclass 的 provisioner 字段名字
  • \n
\n

7 安装 kubeAPPS 可视化软件管理工具

\n

参考:https://kubeapps.dev/docs/latest/tutorials/getting-started/

\n
    \n
  • 安装
  • \n
\n
1
2
3
4
5
6
# 添加 kubeapps 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
# 创建 kubeapps 的命名空间
kubectl create namespace kubeapps
# 安装
helm install kubeapps --namespace kubeapps bitnami/kubeapps
\n
    \n
  • 创建证书
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建用于访问 Kubeapps 和 Kubernetes 的演示凭证
kubectl create --namespace default serviceaccount kubeapps-operator
kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator


cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: kubeapps-operator-token
namespace: default
annotations:
kubernetes.io/service-account.name: kubeapps-operator
type: kubernetes.io/service-account-token
EOF
\n
    \n
  • 查看令牌 token
  • \n
\n
1
kubectl get --namespace default secret kubeapps-operator-token -o go-template='{{.data.token | base64decode}}'
\n
1
eyJhbGciOiJSUzI1NiIsImtpZCI6IkdVQTZzb3JEM1FHdkpxVDNsSEwtVEZWc2hyR08tbmFFWnFGX2Q2OGt5cEkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yLXRva2VuIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNTNjY2M0N2YtZWFmMS00NDY4LWJkN2ItYTVhMzliMzJjMzExIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6a3ViZWFwcHMtb3BlcmF0b3IifQ.qsTBQODZLD1EUP5WjF_ju0-_ZFoJa2pEGCGf2zoLK71TjZeytD0GUGp4Z5ACNFuJMtedtx8tRgWhioU2oimxGdCIL4f7Szt0dOQgXD15HmoiUjYEcDQNsfTdcmfZw-m3-zwtTqa3kTTG3Wio0wf_f_ayw8qZCDL2i3PK-7h0QeAb1rQhtCz_e8huNrcshjixGlyw8aKUvdi2hPe6yvpxKJqQeOalNhT22b-ax28oIyqmC-NXYUMyRbEsgOjyuJAv6XdjqsQKbOGMKsTtNyf7CvnHl88hfRZpF0W-GuKj1ggKGYClTHuXnsv9QP-AQN1UaEtcAbUp08bHN9isedJL6w
\n
    \n
  • 修改服务模式,将其改为 NodePort
  • \n
\n
1
2
# 因为是测试环境,因此直接采用 NodePort 方式暴露服务端口
kubectl edit svc kubeapps -n kubeapps
\n
    \n
  • 找到端口,在安全组放行
  • \n
\n
1
kubectl get svc -A |grep kubeapps
\n\n

8 在 K8S 上部署虚拟机服务 Kubevirt

\n
    \n
  • 设置 K8S ApiServer 允许特权容器
  • \n
\n
1
2
3
vim /etc/kubernetes/manifests/kube-apiserver.yaml
# 设置
--allow-privileged=true
\n
    \n
  • 检查每个节点是否支持虚拟化
  • \n
\n
1
2
3
virt-host-validate qemu
# 如果显示没有这个命令,先安装 libvrt 和 qemu 软件包:
yum install -y qemu-kvm libvirt virt-install bridge-utils
\n
    \n
  • 若有warnning,需要解决
  • \n
\n

\"image-20230408181653957\"

\n
1
2
3
4
5
6
7
8
# 1
vim /etc/default/grub
# 2.添加
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on"
# 3
grub2-mkconfig -o /boot/grub2/grub.cfg
# 4
reboot
\n
    \n
  • 安装 Kubevirt
  • \n
\n
1
2
3
4
# K8S 1.25版本,Kubervirt必须0.57.2以上,才能适配
kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0-rc.0/kubevirt-operator.yaml

kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0-rc.0/kubevirt-cr.yaml
\n
    \n
  • 等待 Kubevirt 资源创建完毕
  • \n
\n
1
kubectl -n kubevirt wait kv kubevirt --for condition=Available
\n
    \n
  • 安装 CDI
  • \n
\n

参考https://kubevirt.io/labs/kubernetes/lab2.html

\n
    \n
  • 安装 VNC
  • \n
\n
1
yum install -y tigervnc
\n
    \n
  • 查看 Kubevirt 资源
  • \n
\n
1
kubectl get pods -n kubevirt
\n

\"image-20230408185646502\"

\n
    \n
  • 安装 Kubevirtcli 管理工具
  • \n
\n
1
2
kubectl krew install virt
kubectl virt help
\n
    \n
  • Kubevirt创建/删除虚拟机服务
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
# 1.    创建yaml文件
Xxx
# 2. 运行一个虚拟机
kubectl apply -f test.yaml
# 3. 查看虚拟机
kubectl get vmis
# 4. 停止/删除虚拟机
kubectl delete -f vmi.yaml
# 或者
kubectl delete vmis testvmi
# 5. 开始/停止/暂停虚拟机
virtctl start/stop/pause my-vm
\n

9 在 K8S 上部署 PostgreSQL

\n
    \n
  • \n

    安装

    \n
      \n
    • \n

      注意:数据库安装需要持久卷,需提前创建满足要求的pv,或者创建nasstroageclass,以自动根据mysqlpvc创建pv

      \n
    • \n
    • \n

      集群已经配置23服务器的/mnt/storage/k8s/pv为NAS,并已经配置名字为nas-storagesc

      \n
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
helm repo add bitnami https://charts.bitnami.com/bitnami
# 首先检查是否有oge这个命名空间,否则执行如下进行创建
kubectl create ns oge
# postgresql 这个名字可以自己定义,但后面每一步都要注意对应更改
helm install -n oge bitnami/postgresql \\
--set global.storageClass=nfs-client \\
--set readReplicas.persistence.storageClass=nfs-client \\
--set primary.persistence.storageClass=nfs-client \\
--set primary.persistence.size=200Gi \\
--set readReplicas.persistence.size=200Gi \\
--set image.tag=14.5.0-debian-11-r6


helm install -n geoctap bitnami/postgresql \\
--set global.storageClass=nfs-client \\
--set readReplicas.persistence.storageClass=nfs-client \\
--set primary.persistence.storageClass=nfs-client \\
--set primary.persistence.size=200Gi \\
--set readReplicas.persistence.size=200Gi \\
--set image.tag=14.5.0-debian-11-r6
# 指定版本,可在kubeapps里面查看
# --set image.tag=14.5.0-debian-11-r6
\n
    \n
  • 查看 postgresql 密码
  • \n
\n
1
2
3
4
kubectl get secret --namespace oge postgresql -o jsonpath="{.data.postgres-password}" | base64 -d

# 密码
7jXf2gsmUX
\n
    \n
  • 更改服务端口
  • \n
\n
1
2
3
4
kubectl edit svc --namespace oge postgresql
# 将 type=ClusterIP 改为 NodePort
# b8:85:84:71:64:28
echo "SUBSYSTEM==\\"net\\", ACTION==\\"add\\", DRIVERS==\\"?*\\", ATTR{address}==\\" b8:85:84:71:64:28\\", ATTR{type}==\\"1\\", KERNEL==\\"eno*\\", NAME=\\"eno1\\"" >> /etc/udev/rules.d/70-persistent-net.rules
\n
    \n
  • 缩放副本集
  • \n
\n
1
2
3
4
5
6
kubectl get deployment 
# 发现并没有postgresql
kubectl get all -n oge
# 发现有statefulset.apps/postgresql
# 设置副本集个数为1
kubectl scale --replicas=1 statefulset.apps/postgresql -n oge
\n
    \n
  • 命令行进入pgsql
  • \n
\n
1
2
3
4
5
6
# 进入pgsql的pod
kubectl exec -it -n oge postgresql-0 bash
# 用户登录
psql -U postgres
# 输入密码
7jXf2gsmUX
\n
    \n
  • 在pod外面执行sql
  • \n
\n
1
psql -h 125.220.153.23 -p 30865 -U postgres -W -f ./public.sql
\n

10 在 K8S 上部署 MySQL

\n
    \n
  • \n

    安装

    \n
      \n
    • \n

      注意:数据库安装需要持久卷,需提前创建满足要求的pv,或者创建nasstroageclass,以自动根据postgresql的pvc创建pv。

      \n
    • \n
    • \n

      集群已经配置23服务器的/mnt/storage/k8s/pvNAS,并已经配置名字为 nas-storagesc

      \n
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
helm repo add bitnami https://charts.bitnami.com/bitnami

# 安装
helm install -n oge mysql bitnami/mysql \\
--set global.storageClass=nfs-client \\
--set readReplicas.persistence.storageClass=nfs-client \\
--set primary.persistence.storageClass=nfs-client \\
--set primary.persistence.size=200Gi \\
--set readReplicas.persistence.size=200Gi
\n
    \n
  • 查看 MySQL 密码
  • \n
\n
1
2
3
4
kubectl get secret --namespace oge mysql -o jsonpath="{.data.mysql-root-password}" | base64 -d

# 密码
VubCMiHvT1
\n
    \n
  • 更改服务端口
  • \n
\n
1
2
3
4
kubectl edit svc --namespace oge mysql
# 将type=ClusterIP改为NodePort
# b8:85:84:71:64:28
echo "SUBSYSTEM==\\"net\\", ACTION==\\"add\\", DRIVERS==\\"?*\\", ATTR{address}==\\" b8:85:84:71:64:28\\", ATTR{type}==\\"1\\", KERNEL==\\"eno*\\", NAME=\\"eno1\\"" >> /etc/udev/rules.d/70-persistent-net.rules
\n
    \n
  1. 缩放副本集
  2. \n
\n
1
2
3
4
5
kubectl get deployment 
# 发现并没有mysql
kubectl get all -n oge
# 发现有statefulset.apps/mysql
kubectl scale --replicas=1 statefulset.apps/mysql -n oge
\n
    \n
  1. 在K8S中进入数据库
  2. \n
\n
1
2
3
4
kubectl exec -it -n oge mysql-1  bash
# 进入后登录用户
mysql -u root -p
# 输入密码
\n

11 在K8S上部署 MongoDB

\n
    \n
  • \n

    安装

    \n
      \n
    • \n

      注意:数据库安装需要持久卷,需提前创建满足要求的pv,或者创建nas的stroageclass,以自动根据postgresql的pvc创建pv。

      \n
    • \n
    • \n

      集群已经配置23服务器的/mnt/storage/k8s/pv为NAS,并已经配置名字为nas-storage的sc

      \n
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
helm repo add bitnami https://charts.bitnami.com/bitnami

# 安装
helm install -n ydy mongodb bitnami/mongodb \\
--set global.storageClass=nfs-client \\
--set readReplicas.persistence.storageClass=nfs-client \\
--set primary.persistence.storageClass=nfs-client \\
--set primary.persistence.size=100Gi \\
--set readReplicas.persistence.size=100Gi
\n
    \n
  • 查看 MongoDB 密码
  • \n
\n
1
2
3
4
kubectl get secret --namespace ydy mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 -d

# 密码
WUL9FPQ2V9
\n
    \n
  • 更改服务端口
  • \n
\n
1
2
3
4
kubectl edit svc --namespace ydy mongodb
# 将type=ClusterIP改为NodePort
# b8:85:84:71:64:28
echo "SUBSYSTEM==\\"net\\", ACTION==\\"add\\", DRIVERS==\\"?*\\", ATTR{address}==\\" b8:85:84:71:64:28\\", ATTR{type}==\\"1\\", KERNEL==\\"eno*\\", NAME=\\"eno1\\"" >> /etc/udev/rules.d/70-persistent-net.rules
\n
    \n
  1. 缩放副本集
  2. \n
\n
1
2
3
4
5
kubectl get deployment 
# 发现并没有mongodb
kubectl get all -n ydy
# 发现有statefulset.apps/mongodb
kubectl scale --replicas=1 statefulset.apps/mongodb -n ydy
\n
    \n
  1. 在K8S中进入数据库
  2. \n
\n
1
kubectl exec -it -n ydy mongodb-644c657c4f-x62cn bash
\n

12 在 K8S 上部署 Apache Spark

\n

两个方式,第一种方式为Spark官方提出的;第二种为Google提出的,更符合K8S原生概念

\n
    \n
  1. Spark On K8S
  2. \n
  3. spark-on-k8s-operator
  4. \n
\n

\"image-20230408170401365\"

\n
Spark On K8S
\n

\"image-20230408170444023\"

\n
spark-on-k8s-operator
\n

12.1 安装 spark-on-k8s-operator

\n

参考 https://blog.csdn.net/w8998036/article/details/122217230

\n
    \n
  • 安装
  • \n
\n
1
2
3
4
5
6
7
helm repo add spark-operator https://googlecloudplatform.github.io/spark-on-k8s-operator 

# 注意是否存在 spark-operator 命名空间,没有则创建
kubectl create ns spark-operator

# 安装
helm install spark-operator spark-operator/spark-operator --namespace spark-operator --set sparkJobNamespace=default --set webhook.enable=true
\n
    \n
  • 创建服务账户
  • \n
\n
1
2
vim spark-application-rbac.yaml
# 内容如下
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
apiVersion: v1
kind: ServiceAccount
metadata:
name: spark
namespace: spark
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: spark
name: spark-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["*"]
- apiGroups: [""]
resources: ["services"]
verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: spark-role-binding
namespace: spark
subjects:
- kind: ServiceAccount
name: spark
namespace: spark
roleRef:
kind: Role
name: spark-role
apiGroup: rbac.authorization.k8s.io
\n
1
kubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root
\n
    \n
  • 编写作业模板并提交作业
  • \n
\n

创建一个Spark作业的YAML配置文件,并进行部署。

\n
    \n
  1. 创建spark-pi.yaml文件
  2. \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:
name: spark-pi
namespace: spark
spec:
type: Scala
mode: cluster
image: "registry.cn-hangzhou.aliyuncs.com/yudayu/spark:v3.1.1"
# 1gcr.io/spark-operator/spark:v3.1.1需要更换镜像,gcr.io目前国内无法访问。可以先对docker挂代理,pull到阿里云镜像后
imagePullPolicy: IfNotPresent
mainClass: org.apache.spark.examples.SparkPi
mainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar"
# 需要更换自己的jar包,local指该jar位于image内,可换成所有节点都能访问的web路径,或者通过指定nas挂载pv,将jar包放在nas的pv里
sparkVersion: "3.1.1"
restartPolicy:
type: Never
volumes:
- name: "test-volume"
hostPath:
path: "/tmp"
type: Directory
driver:
cores: 1
coreLimit: "1200m"
memory: "512m"
labels:
version: 3.1.1
serviceAccount: spark
volumeMounts:
- name: "test-volume"
mountPath: "/tmp"
executor:
cores: 1
instances: 2
memory: "512m"
labels:
version: 3.1.1
volumeMounts:
- name: "test-volume"
mountPath: "/tmp"
\n
    \n
  1. 部署一个Spark计算任务
  2. \n
\n
1
kubectl apply -f spark-pi.yaml
\n

运维

\n
1
2
3
kubectl get sparkapplications
kubectl describe sparkapplications
kubectl get svc # 查看该任务的spark ui
\n

12.2 安装 Spark On K8S

\n
1
2
3
4
5
helm repo add bitnami https://charts.bitnami.com/bitnami
# 注意是否存在 spark-operator 命名空间,没有则创建
kubectl create ns spark-on-k8s
helm install -n spark-on-k8s spark bitnami/spark \\
--set worker.coreLimit=28
\n
1
2
3
4
5
6
7
8
9
10
./bin/spark-submit    \\
--class org.apache.spark.examples.SparkPi \\
--conf spark.kubernetes.container.image=bitnami/spark:3 \\
--master k8s://https://125.220.153.23:6443 \\
--conf spark.kubernetes.driverEnv.SPARK_MASTER_URL=spark://10.97.43.141:7077 \\
--deploy-mode cluster \\
--executor-memory 20G \\
--num-executors 10 \\
--conf spark.executor.instances=5 \\
https:///data/spark-examples_2.12-3.3.0.jar 1000
\n
1
2
3
4
5
6
kubectl run --namespace spark-on-k8s spark-oge --rm --tty -i --restart='Never' \\
--image bitnami/spark:3 \\
-- spark-submit --master spark://10.97.43.141:7077 \\
--class org.apache.spark.examples.SparkPi \\
--deploy-mode cluster \\
/data/spark-examples_2.12-3.3.0.jar 100000
\n

13 在K8S上部署redis集群

\n
    \n
  • 待更
  • \n
\n

14 在K8S上部署nginx

\n

14.1 创建pv

\n
1
vim nginx-pv.yaml
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: v1
kind: PersistentVolume
metadata:
name: nginx-ydy-pv
namespace: ydy
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: manual
hostPath:
path: /mnt/storage/k8s/pv/ydy-nginx-pvc
\n

14.2 创建pvc

\n
1
vim nginx-pvc.yaml
\n
1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nginx-ydy-pvc
namespace: ydy
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: manual
\n

14.3 安装nginx并设置静态资源挂载的pvc

\n

将nginx中的/app挂载到/mnt/storage/k8s/pv/luluancheng-nginx-pvc

\n
1
2
helm install -n ydy nginx bitnami/nginx \\
--set staticSitePVC=nginx-ydy-pvc
\n

附录:疑难问题解决:

\n

1 K8S强制删除 namespace(会删除该命名空间中的所有 pod )

\n
1
2
3
#1、将该分区导出为json文件,以 oge namespace为例
kubectl get ns oge -o json > oge.json
#2、编辑该json文件,将spec内的内容全部删除,然后保存退出
\n

\"22f0a5cbf0424425b0d62681f79cb713\"

\n

\"ef949b8bb503410c918894ab20bad993\"

\n
1
2
# 3、另开一个终端,启动一个proxy
kubectl proxy --port=8081
\n
1
2
# 4、执行一个curl命令,更新oge namespace
curl -k -H "Content-Type: application/json" -X PUT --data-binary @oge.json http://127.0.0.1:8081/api/v1/namespaces/oge/finalize
\n

2 CNI网络错误

\n
    \n
  • 当迁移集群之后,拉取镜像报cni网络错误,如下:
  • \n
\n

\"8d5d49703c8ac59f24fde81b3982b616\"

\n
    \n
  • 从上面的截图中看到问题出现在给Pod分配IP上,意思是 cni0 的IP不同于``10.244.9.1/24,下面我们使用 ifconfig`命令查看IP信息
  • \n
\n

\"79e65e4f797200ad98feac6f8b2d4254\"

\n
    \n
  • 从上面的图中我们可以看到``flannel.1的 **IP** 为10.244.9.0,然后我们又使用cat /run/flannel/subnet.env`,该文件内容如下:
  • \n
\n

\"310efbdb614636a17aa48eaf4a8dc2c5\"

\n
    \n
  • \n

    其实现在的问题就比较明确了,我们使用的Overlay network为Flannel,也就是说Pod的IP地址段应该在Flannel的subnet下,而现在我们看到cni0的IP地址段与flannel subnet地址段不同,所以就出现了问题。

    \n
  • \n
  • \n

    解决方案

    \n
      \n
    • 方法1是将 cni0 的 IP 段修改为``10.244.9.1`
    • \n
    • 方法2是将这个错误的网卡删除掉,之后会自动重建
    • \n
    \n
  • \n
\n
1
2
3
# 下面我们删除错误的cni0,然后让它自己重建
ifconfig cni0 down
ip link delete cni0
\n

3 28 服务器增加路由(为了让两台刀片上网)

\n
    \n
  • 28上执行
  • \n
\n
1
2
iptables -t nat -A POSTROUTING -s 192.168.0.209/24 -o em1_2 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.177/24 -o em1_2 -j MASQUERADE
\n

4 异常断电等导致 etcd 心跳检测出现问题

\n\n

5 OpenStack服务器网络跳转镜像

\n
\n

作用: 保证OpenStack上服务器与实验室服务器可以 ping 通

\n
\n
    \n
  • IP\n
      \n
    • 115.156.91.250
    • \n
    \n
  • \n
  • 网关\n
      \n
    • 115.156.91.254
    • \n
    \n
  • \n
  • 子网掩码\n
      \n
    • 255.255.255.0
    • \n
    \n
  • \n
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":32655,"excerpt":"","more":"

1 前述

\n

1.1 云原生定义

\n
    \n
  • Pivotal《传统应用和SOA向云原生转型指南》(2015)的云原生的特征:\n
      \n
    • 符合 12 要素应用\n
        \n
      • 基准代码:一份基准代码,多份部署(类似于Git版本控制系统的main分支);
      • \n
      • 显示声明所有依赖关系:通过依赖清单,确切地声明所有依赖项;
      • \n
      • 把后端服务当作附加资源:各种后端服务(如数据库、消息队列、邮件服务、缓存系统),不区别对待本地或第三方服务;
      • \n
      • 构建、发布、运行:严格区分构建、发布、运行这三个步骤;
      • \n
      • 无状态进程:应用的进程必须无状态;
      • \n
      • 端口绑定:互联网应用通过端口绑定来提供服务,并监听发送至该端口的请求。应用完全自我加载,不依赖于任何网络服务器;
      • \n
      • 并发:通过进程模型进行扩展。进程是一等公民;
      • \n
      • 易处理:进程可以瞬间开启或停止,有利于快速、弹性的伸缩应用。进程应追求最小启动时间;进程一旦接受终止信号就会优化的终止;进程在面对突然死亡时保持健壮;
      • \n
      • 开发环境与线上环境等价:尽可能的保持开发,预发布,线上环境相同,以尽量做到持续部署;
      • \n
      • 日志:应用本身从不存储自己的输出流,不应该试图去写或者管理日志文件,相反,每一个运行的进程都会直接的标准输出(stdout)事件流;
      • \n
      • 管理进程:后台管理任务当作一次性进程运行;
      • \n
      \n
    • \n
    • 面向微服务架构\n
        \n
      • 微服务将单体系统分解为多个“仅做好一件事”的可独立部署的服务。这件事通常代表某项业务能力,或者最小可提供业务价值的“原子“服务单元。具备以下优点:\n
          \n
        • 变更周期解耦:只要变更限于单一有界的环境,并且服务继续履行其现有合约;实现了更频繁和快速的部署,从而实现了持续的价值流动;
        • \n
        • 减少业务领域和现有代码的学习负担
        • \n
        • 可以加快采用新技术的步伐
        • \n
        • 提供独立、高效的服务扩展
        • \n
        \n
      • \n
      \n
    • \n
    • 自服务敏捷架构(可以认为是DevOps):\n
        \n
      • 一个能够持续部署和运行这些微服务的平台;如代码以Git形式“推送”。 然后,自服务敏捷平台构建应用程序工件,构建应用程序环境,部署应用程序,并启动必要的进程。 团队不必考虑他们的代码在哪里运行或如何到达那里,这些对用户都是透明得,因为平台会关注这些。
      • \n
      \n
    • \n
    • 基于 API 的协作
    • \n
    • 抗脆弱性
    • \n
    \n
  • \n
  • 云原生计算基金会(2015)定义的特征\n
      \n
    • 应用容器化
    • \n
    • 面向微服务架构
    • \n
    • 应用支持容器的编排制度
    • \n
    \n
  • \n
  • 云原生计算基金会(2018)定义\n
      \n
    • 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API
    • \n
    • 这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更
    • \n
    \n
  • \n
\n

1.2 容器、虚拟机、Docker、Openstack 和 K8S

\n
    \n
  • 容器&虚拟机:均为虚拟化技术,容器更为轻量化、效率更高、启动更快;虚拟机需数分钟启动,容器仅需数十毫秒;
  • \n
  • Docker: 容器化虚拟技术事实上的标准;
  • \n
  • OpenStack:分布式的虚拟机服务平台,相比于普通的虚拟机软件(如Vmare),多了分布式虚拟机调度管理的功能和节点的负载均衡;
  • \n
  • K8S:分布式的容器调度管理平台,相比于Docker,多了分布式的容器调度管理和节点的负载均衡;
  • \n
  • 注意:常见的中文资料均言K8S是容器编排软件,这里的编排是指调度、管理的意思,而非工作流编排的意思,容易有误导性;
  • \n
  • 注意:无论是Openstack还是K8S,均不支持跨节点的容器或虚拟机的创建;所以将多台电脑合并成一台电脑的想法是不现实的;
  • \n
\n

1.3 K8S 和 云原生

\n

在单机上运行容器,无法发挥它的最大效能,只有形成集群,才能最大程度发挥容器的良好隔离、资源分配与编排管理的优势,而对于容器的编排管理,Swarm、Mesos 和 Kubernetes 的大战已经基本宣告结束,Kubernetes 成为了无可争议的赢家。

\n
    \n
  • Kubernetes 成为云原生应用的基石
  • \n
  • 有机会成为跨云的真正的云原生应用的操作系统
  • \n
\n

1.4 K8S 介绍

\n
    \n
  • 官方Kubernetes 也称为 K8S,是用于自动部署、扩缩和管理容器化应用程序的开源系统。
  • \n
  • 发展历史:由Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用。
  • \n
  • 能力Google 每周运行数十亿个容器,能够在不扩张运维团队的情况下进行规模扩展。
  • \n
  • 作用: 相当于一个操作系统,可以快速提供PaaS服务:1)创建各种容器化测试化环境;2)发布各种容器化服务;3)快速安装各种容器化服务,如MongoDB、HbasePostgresqlRedisSpark等;快速提供IaaS服务:通过安装OpenstackKubeVirt等软件;快速提供FaaS服务:通过安装Kube Native等软件;
  • \n
\n

\"image-20230414170948460\"

\n

\"image-20230414171119324\"

\n

1.5 基本概念

\n
    \n
  • \n

    Container:轻量级的系统虚拟化技术,使用namespace隔离环境。

    \n
  • \n
  • \n

    Pod

    \n
  • \n
  • \n
      \n
    • K8S 的调度的基本单位,Pod是一组紧密关联的容器集合,内部的容器共享PID、IPC、Network和UTS namespace。可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。
    • \n
    \n

    \"image-20230415141540422\"

    \n
  • \n
\n

​\t\t\t\tPod的设计理念基础是微服务,不同类型的业务组合由不同类型的Pod执行,一个Pod对应一个微服务

\n
    \n
  • \n
      \n
    • K8S中,采用manifest(yaml或json)定义对象,比如nginx服务(包含了一个nginx 容器image)定义为:
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
\n
    \n
  • \n
      \n
    • Node: 是Pod运行的主机,可以为物理机,也可以为虚拟机。每个Node上要运行container runtime (docker或者rkt)、kubelet和kube-proxy服务
    • \n
    • \"image-20230415142123300\"
    • \n
    \n
  • \n
  • \n
      \n
    • Service: 一个Pod只是一个运行服务的实例,可能在一个节点上停止,在另一个节点以一个新的IP启动一个新的Pod。在K8S集群中,客户端需要访问的服务就是Service对象。每个Service会对应一个集群内部有效的虚拟IP,集群内部通过虚拟IP访问一个服务。
    • \n
    \n
  • \n
  • \n
      \n
    • Kubelet: 每个Node的任务和资源管理
    • \n
    \n
  • \n
  • \n
      \n
    • Kube-proxy: 负责每个节点的硬件负载均衡
    • \n
    \n
  • \n
\n

1.6 K8S 常见命令

\n
    \n
  • 运行一个Nginix容器:\n
      \n
    • kubectl run --image=nginx:alpine nginx-app --port=80
    • \n
    \n
  • \n
  • Kubectl 命令:\n
      \n
    • kubectl get - 类似于 docker ps,查询资源列表
    • \n
    • kubectl describe - 类似于 docker inspect,获取资源的详细信息
    • \n
    • kubectl logs - 类似于 docker logs,获取容器的日志
    • \n
    • kubectl exec - 类似于 docker exec,在容器内执行一个命令
    • \n
    • kubectl create -f file.yaml – 根据yaml创建Deployment资源
    • \n
    • kubectl delete 删除命令,可删除node、pod、svc、depolyment
    • \n
    \n
  • \n
  • yaml 定义 Pod:
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
\n
    \n
  • Volume:\n
      \n
    • 一个Pod一旦发生异常,Pod 产生的数据会随着 Pod 消亡而自动消失。Volume 用于持久化容器数据。
    • \n
    • 如:为 redis 容器指定一个 hostPath 来存储 redis 数据
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
volumeMounts:
- name: redis-persistent-storage
mountPath: /data/redis
volumes:
- name: redis-persistent-storage
hostPath:
path: /data/
\n
    \n
  • Service:\n
      \n
    • kubectl创建Pod,Pob的IP地址会随着Pod的重启而变化
    • \n
    • 为了访问Pod提供的服务,采用Service提供为一组Pod一个统一的入口,并提供负载均衡和自动服务发现。\n
        \n
      • kubectl expose deployment nginx-app --port=80 --target-port=80 --type=NodePort
      • \n
      \n
    • \n
    \n
  • \n
  • Replicas set:\n
      \n
    • 在一个Service中,可为Pod设置数个副本,以确保服务永不掉线\n
        \n
      • kubectl scale --replicas=3 deployment/nginx-app
      • \n
      \n
    • \n
    \n
  • \n
\n

\"image-20230415143046325\"

\n
    \n
  • 滚动升级(Rolling Update):\n
      \n
    • 滚动升级(Rolling Update)通过逐个副本容器替代升级的方式来实现无中断的服务升级:\n
        \n
      • kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2
      • \n
      \n
    • \n
    • 滚动升级中若发生错误,可随时回滚:\n
        \n
      • kubectl rolling-update frontend-v1 frontend-v2 --rollback
      • \n
      \n
    • \n
    \n
  • \n
  • 资源限制:\n
      \n
    • K8S通过 cgroups 提供容器资源管理的功能,可限制每个容器的 CPU 和内存使用,比如对于刚才创建的 deployment,可以通过下面的命令限制 nginx 容器最多只用 50% 的 CPU 和 128MB 的内存:\n
        \n
      • kubectl set resources deployment nginx-app -c=nginx --limits=cpu=500m,memory=128Mi
      • \n
      \n
    • \n
    • 或者在yaml中指定资源限制
    • \n
    \n
  • \n
  • 健康检查:\n
      \n
    • K8S Kubernetes 提供了两种探针(Probe,支持 exec、tcpSocket 和 http 方式)来探测容器的状态:\n
        \n
      • LivenessProbe:探测应用是否处于健康状态,如果不健康则删除并重新创建容器
      • \n
      • ReadinessProbe:探测应用是否启动完成并且处于正常服务状态,如果不正常则不会接收来自 Kubernetes Service 的流量
      • \n
      \n
    • \n
    \n
  • \n
\n

1.7 K8S 常用运维命令

\n
    \n
  • 查看pod,及所在的节点:\n
      \n
    • kubectl get pods -o wide
    • \n
    \n
  • \n
  • 若有节点warn,回收垃圾失败:
  • \n
\n
1
2
kubectl drain --delete-local-data --ignore-daemonsets NODENAME
kubectl uncordon NODENAME
\n

2 K8S 集群基础环境部署

\n

若服务器之前搭建过 K8S 集群,需要彻底删除

\n

参考https://blog.csdn.net/qq_43159578/article/details/124131709

\n
    \n
  • 停止所有的Kubernetes服务
  • \n
\n
1
2
sudo systemctl stop kubelet
sudo systemctl stop containerd
\n
    \n
  • 删除Kubernetes软件包
  • \n
\n
1
yum remove kubeadm kubectl kubelet kubernetes-cni -y
\n
    \n
  • 删除配置文件
  • \n
\n
1
2
3
4
# 清除残留文件
rm -rf /root/.kube
rm -rf /etc/cni/net.d
rm -rf /etc/kubernetes/*
\n
    \n
  • 删除etcd数据目录
  • \n
\n
1
rm -rf /var/lib/etcd
\n
    \n
  • 清除iptables或者ipvs的配置
  • \n
\n
1
2
# sudo ipvsadm -C
# sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo # # iptables -Xkubec
\n
    \n
  • 如果只是想重新部署集群
  • \n
\n
1
kubeadm reset
\n

kubeadm reset 命令用于清除当前节点上所有与 kubeadm initkubeadm join 命令创建的 Kubernetes 集群相关的状态。其主要作用如下:

\n
    \n
  1. \n

    移除 Kubernetes 集群相关的系统服务,如 kubelet 和 kube-proxy。

    \n
  2. \n
  3. \n

    删除所有在当前节点上创建的 Kubernetes 对象,包括 Pod、Service、Deployment 等。

    \n
  4. \n
  5. \n

    移除 etcd 中与当前节点相关的信息,如节点标识、配置信息等。

    \n
  6. \n
  7. \n

    删除 Kubernetes 数据目录,包括证书、密钥、kubeconfig 文件等。

    \n
  8. \n
\n

使用 kubeadm reset 命令可以清除当前节点上的所有 Kubernetes 相关状态,以便重新创建新的 Kubernetes 集群或者将当前节点加入到另一个 Kubernetes 集群中。在进行 kubeadm reset 操作之前,应该先备份当前节点上的重要数据和配置信息,以便在需要时进行恢复。

\n

2.1 服务器

\n
    \n
  • 网络资源:各节点间通过千兆交换机互联(非光纤交换机)
  • \n
  • 管理节点:\n
      \n
    • Gisweb4,Gisweb3
    • \n
    \n
  • \n
  • 计算节点:\n
      \n
    • Gisweb3,GISweb2,dellm640-01, Gisweb4, dellslot03, dellslot4
    • \n
    \n
  • \n
  • 持久化存储资源:\n
      \n
    • 目前采用:\n
        \n
      • nfs-client: 23服务器的/mnt/storage/k8s/pv
      • \n
      \n
    • \n
    \n
  • \n
  • Node1(刀片3):\n
      \n
    • 子网 IP:192.168.0.177
    • \n
    • CPU:Intel® Xeon® Silver 4216 CPU @ 2.10GHz;32核心,64线程。
    • \n
    • 内存:64GB(32GB*2),每根DDR4,3000Mhz
    • \n
    \n
  • \n
  • Node2(刀片4):\n
      \n
    • 子网 IP:192.168.0.209
    • \n
    • CPU:Intel® Xeon® Silver 4216 CPU @ 2.10GHz;32核心64线程。
    • \n
    • 内存:64GB(32GB*2),每根DDR43200Mhz
    • \n
    \n
  • \n
\n

2.2 安装过程

\n

2.2.1 前提条件

\n

a. 节点之中不可以有重复的主机名、MAC 地址或 product_uuid

\n
1
cat /sys/class/dmi/id/product_uuid
\n

b. 检查网络适配器:若有多个网卡,确保每个node的子网通过默认路由可达

\n

c. 防火墙开放端口(所有节点)

\n

\"image-20230415145138479\"

\n
1
2
3
4
5
6
7
systemctl restart firewalld
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=6443/tcp --permanent
firewall-cmd --zone=public --add-port=2379-2380/tcp --permanent
firewall-cmd --zone=public --add-port=10250/tcp --permanent
firewall-cmd --zone=public --add-port=10259/tcp --permanent
firewall-cmd --zone=public --add-port=10257/tcp --permanent
\n

d. 关闭防火墙(所有节点)

\n
1
2
systemctl stop firewalld NetworkManager
systemctl disable firewalld NetworkManager
\n

e. 关闭交换分区并禁用 SELinux(所有节点)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看 交换分区
free -m

# 将 `SELinux` 设置为 `permissive` 模式(相当于将其禁用) 第一行是临时禁用,第二行是永久禁用
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# 关闭swap;第一行是临时禁用,第二行是永久禁用
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 允许 iptables 检查桥接流量 (K8s 官方要求)
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 让配置生效
sysctl --system
\n

f. 时间同步(所有节点)

\n
1
2
3
4
yum install chrony -y
systemctl start chronyd
systemctl enable chronyd
chronyc sources
\n

g. 设置主机名并添加 ip 映射(所有节点)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 以 gisweb4 为例
# 查看主机名cat
hostname
# 设置主机名
hostnamectl set-hostname gisweb4
# 更新
bash

# 添加 ip 映射
echo "125.250.153.23 gisweb4" >> /etc/hosts
echo "125.250.153.23 gisweb4" >> /etc/hosts
# 两台无外网ip的刀片添加内网ip

# /etc/hosts 文件内容如下:
192.168.0.203 gisweb1
192.168.0.202 gisweb2
192.168.0.204 gisweb4
192.168.0.208 gisweb3
192.168.0.176 dellm640-01
192.168.0.177 dellm640-03
192.168.0.209 dellslot04

125.220.153.26 gisweb1
125.220.153.25 gisweb2
125.220.153.22 gisweb3
125.220.153.23 gisweb4
125.220.153.28 dellm640-01
\n

2.2.2 升级 Linux 内核到最新(所有节点)

\n

清除缓存,重新构建缓存:

\n
1
2
# 清除缓存
yum makecache & yum -y update
\n

参考链接https://zhuanlan.zhihu.com/p/368879345

\n

2.2.3 转发 IPv4 并让 iptables 看到桥接流量(所有节点)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# a.    验证br_netfilter是否已经加载
lsmod | grep br_netfilter
# b. 加载br_netfilter模块:
modprobe br_netfilter
# c. iptabels桥接
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

# 应用 sysctl 参数而不重新启动
sysctl --system
\n

2.2.4 安装 ipvsadm(所有节点)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
yum install ipvsadm ipset sysstat conntrack libseccomp -y

cat <<EOF | sudo tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF

systemctl restart systemd-modules-load.service

lsmod | grep -e ip_vs -e nf_conntrack
\n

2.2.5 修改内核参数(所有节点,lb除外)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.netfilter.nf_conntrack_max=2310720

net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384

net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.all.forwarding = 1
EOF

sysctl --systemS
\n

2.2.6 安装Container Runtime(选用containerd,弃用docker)

\n
    \n
  • Docker-engine+cir-dockerd方案(舍弃:从kubernetes 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,需要在kubelet和docker之间加上一个中间层cri-docker。cri-docker是一个支持CRI标准的shim。一头通过CRI跟kubelet交互,另一头跟docker api交互,从而间接的实现了kubernetes以docker作为容器运行时。但是这种架构缺点也很明显,调用链更长,效率更低。因此选用containerd作为容器runtime
  • \n
  • containerd方案: containerd是一个docker的容器runtime,成为CNCF的官方项目
  • \n
\n

官方安装教程:https://github.com/containerd/containerd/blob/main/docs/getting-started.md

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 安装containerd.io
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install containerd.io


# 安装CNI插件
# i.下载cni-plugins.tar 从https://github.com/containernetworking/plugins/releases
# 在线下载:
# wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
# ii.在/opt/cni/bin下解压:

# 把22上的拷贝到没有公网ip的服务器上
# scp -P22 /opt/cni/bin/cni-plugins-linux-amd64-v1.1.1.tgz root@192.168.0.203:/opt/cni/bin/

mkdir -p /opt/cni/bin
cd /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz


# 重启服务:
systemctl restart containerd
# 开机启动:
systemctl enable containerd


# 配置systemd cgroup驱动
# 修改配置文件,将 SystemdCgroup 改为 true 注意配置项是区分大小写的
containerd config default | sudo tee /etc/containerd/config.toml
vim /etc/containerd/config.toml

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
# 并将 sandbox_image 地址修改为国内的地址
并且将 sandbox_image = "registry.k8s.io/pause:3.6"
修改为 sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6"

# 启动 containerd
systemctl restart containerd

# 开机自启
systemctl enable containerd

# 启动成功后可以查看到监听的端口
netstat -nlput | grep containerd
tcp 0 0 127.0.0.1:36669 0.0.0.0:* LISTEN 8665/containerd off (0.00/0/0)
\n

2.2.7 在所有电脑上安装 kubeadm, kubelet and kubectl(所有节点)

\n
1
2
3
# a.    kubeadm: the command to bootstrap the cluster.
# b. kubelet: the component that runs on all of the machines in your cluster and does things like starting pods and containers.
# c. kubectl: the command line util to talk to your cluster.
\n
    \n
  1. 配置阿里云的k8s源,加速安装
  2. \n
\n
1
2
3
4
5
6
7
8
9
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
\n
    \n
  1. 将 SELinux 设置为 permissive 模式(相当于将其禁用)
  2. \n
\n
1
2
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
\n
    \n
  1. 安装
  2. \n
\n
1
2
3
4
yum install -y --nogpgcheck kubelet-1.25.2 kubeadm-1.25.2 kubectl-1.25.2  
# sudo yum install -y --nogpgcheck kubelet-1.26.3 kubeadm-1.26.3 kubectl-1.26.3
# 自启动
systemctl enable --now kubelet
\n

2.2.8 启动控制面节点

\n
1
2
3
kubeadm init --kubernetes-version=v1.25.2 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 

#kubeadm init --kubernetes-version=v1.26.3 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
\n

若出现如下错误(上一次集群初始化的残留文件)

\n
1
2
# 如果出现报错  
[ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
\n

执行如下命令后再次初始化

\n
1
2
rm -rf /var/lib/etcd
rm -rf /etc/kubernetes/manifests/*
\n

2.2.9 配置环境变量(初始化后)

\n
1
2
3
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
\n

2.2.10 将 master 作为node(管理节点上执行)

\n
    \n
  • 检查 node 是否存在污点\n
      \n
    • 污点值有三种:\n
        \n
      • NoSchedule:一定不被调度
      • \n
      • PreferNoSchedule:尽量不被调度【也有被调度的几率】
      • \n
      • NoExecute:不会调度,并且还会驱逐Node已有Pod
      • \n
      \n
    • \n
    \n
  • \n
\n
1
kubectl describe nodes gisweb4 |grep Taints
\n
    \n
  • 删除污点:
  • \n
\n
1
2
# 本次删除的污点为:node-role.kubernetes.io/control-plane-
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
\n

2.2.11 安装 Pod 网络插件(CNI:Container Network Interface)(master)

\n

你必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信。

\n

确保kubeadm初始化时,pod_cidr 为10.244.0.0

\n
    \n
  • 下载 yml 配置文件\n
      \n
    • 或自己下载到本地
    • \n
    \n
  • \n
\n
1
curl https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml -O
\n
    \n
  • 编辑kube-flannel.yml\n
      \n
    • 找到如下位置,添加 iface-regex
    • \n
    \n
  • \n
\n
1
2
3
vim kube-flannel.yml
# 添加
- --iface-regex=^192.168..
\n

\"\"

\n
    \n
  • 构建
  • \n
\n
1
kubectl apply -f kube-flannel.yml
\n

2.2.12 node 节点加入集群

\n
    \n
  • 管理节点获取加入命令:
  • \n
\n
1
2
3
kubeadm token create --print-join-command
# 返回如下
kubeadm join 125.220.153.23:6443 --token x0wdaj.d5wltdzdtos22fl6 --discovery-token-ca-cert-hash sha256:9245d363cdeb1757bacba21b9ccdc06a28e7490bcedfb0eeb404b56f769fa112
\n
    \n
  • 在 node 节点执行生成命令
  • \n
\n

如果此步报如下错误

\n

The connection to the server localhost:8080 was refused - did you specify the right host

\n
    \n
  1. 出现这个问题的原因是kubectl命令需要使用kubernetes-admin的身份来运行,在kubeadm int启动集群的步骤中就生成了/etc/kubernetes/admin.conf
  2. \n
  3. 因此,解决方法如下,将主节点中的/etc/kubernetes/admin.conf文件拷贝到工作节点相同目录下:
  4. \n
  5. 然后分别在工作节点上配置环境变量:
  6. \n
\n

解决方案

\n
    \n
  • 主节点执行
  • \n
\n
1
2
# 将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到工作节点相同目录下:
scp -P22 /etc/kubernetes/admin.conf oge@125.220.153.22:/etc/kubernetes/
\n
    \n
  • node 节点执行如下命令后,再次执行加入集群的命令
  • \n
\n
1
2
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
\n
    \n
  • 如果是重新加入集群,需要 reset 一下
  • \n
\n
1
kubeadm reset
\n

2.2.13 添加新的 master 节点

\n
    \n
  • 管理节点:
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 管理节点查看
kubeadm token create --print-join-command
# 生成如下
kubeadm join 125.220.153.23:6443 --token mc56rw.t9b3d1ql53yhom9y --discovery-token-ca-cert-hash sha256:753ccf865a9c590413043d469a9848300871afaef7221e3fdb97d981939a2b83

# 管理节点
kubeadm init phase upload-certs --upload-certs
# 输出
I0413 11:00:30.817038 10009 version.go:256] remote version is much newer: v1.27.0; falling back to: stable-1.25
[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
[upload-certs] Using certificate key:
70d43cde7f6423b5c3e88c0fa9d08511cefbc53992dc63a13544cd548a912941

# 管理节点,在networking前添加:controlPlaneEndpoint: 125.220.153.23:6443
kubectl -n kube-system edit cm kubeadm-config
\n
    \n
  • 新的master节点
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 新节点
# 重新加入的话,检查是否需要kill掉6443端口(这是之前的api-service服务)
kubeadm join 125.220.153.23:6443 --token mc56rw.t9b3d1ql53yhom9y --discovery-token-ca-cert-hash sha256:753ccf865a9c590413043d469a9848300871afaef7221e3fdb97d981939a2b83 --control-plane --certificate-key 70d43cde7f6423b5c3e88c0fa9d08511cefbc53992dc63a13544cd548a912941

# 生成
This node has joined the cluster and a new control plane instance was created:

* Certificate signing request was sent to apiserver and approval was received.
* The Kubelet was informed of the new secure connection details.
* Control plane label and taint were applied to the new node.
* The Kubernetes control plane instances scaled up.
* A new etcd member was added to the local/stacked etcd cluster.

To start administering your cluster from this node, you need to run the following as a regular user:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Run 'kubectl get nodes' to see this node join the cluster.
\n

3 K8S 管理平台 dashboard 环境部署(管理节点)

\n
    \n
  • 下载 yaml 配置文件并应用\n
      \n
    • 或下载到本地然后上传
    • \n
    \n
  • \n
\n
1
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml
\n
    \n
  • 修改配置文件(以node)\n
      \n
    • 但是这个只能内部访问,所以要外部访问,要么部署 ingress,要么就是设置 service NodePort 类型。这里选择 service 暴露端口。
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

# 将其中的,type: ClusterIP 修改成type: NodePort,保存退出即可。

# 查看服务的暴露端口,需在安全组放行
kubectl get svc -A |grep kubernetes-dashboard

\n

\"image-20230415154841715\"

\n
    \n
  • 权限认证
  • \n
\n
1
2
3
4
5
6
# 创建访问用户
kubectl apply -f https://kuboard.cn/install-script/k8s-dashboard/auth.yaml
# 获取访问令牌
kubectl -n kubernetes-dashboard create token admin-user
# 生成的令牌
eyJhbGciOiJSUzI1NiIsImtpZCI6IkdVQTZzb3JEM1FHdkpxVDNsSEwtVEZWc2hyR08tbmFFWnFGX2Q2OGt5cEkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjgzNzM1MTQ1LCJpYXQiOjE2ODM3MzE1NDUsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiMzBlMWQzNDEtNDc0Yi00M2MyLWIyNzYtZGIxZTU4NzM5ZTgxIn19LCJuYmYiOjE2ODM3MzE1NDUsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.mg1IU29tBpH23nglJVbRmVa2A26WZjXxMCzckQyb-dnviLBRzBuvNebb8H4YH5CNJUPkB2GGC_r7dlm5zEbPpK8RqkbwXy-wqkOoMephs83gIQkJ3RgskpWqTgqqg87e6WXHRtuzYsQQZ4Rq3Y4uQy9jJS9o1lIoRTujpmpWORb9vu4JN0RqEfK2chQqNsYCe_TCtvtvkP2EyuU3QSeYdvWh5NNZ9CYwA8l8eqA6ijrmTqZjnI6Q9Ymo7trKSuGFmffotBpN9dTYZoyv6Io_VgEz6_1oHsA0pwG-3wc41Ly11sDAzwjZvoGN1yfw0vsVcwnAjH4LkRG2ImwYIcZbig
\n\n

4 安装K8S的包管理工具Helm (管理节点)

\n

参考https://helm.sh/docs/intro/install/

\n
    \n
  • 这里以下载压缩包安装为例:
  • \n
\n

参考https://www.cnblogs.com/zhanglianghhh/p/14165995.html
\ngithub地址https://github.com/helm/helm

\n

\"image-20230413112634363\"

\n
1
2
3
4
5
6
cd  ~/k8s/helm
wget https://get.helm.sh/helm-v3.11.3-linux-amd64.tar.gz
tar zxfv helm-v3.11.3-linux-amd64.tar.gz
mv ./linux-amd64/helm /usr/bin/
# 显示版本,安装完成
helm version
\n

5 安装K8S的包管理工具 krew(管理节点)

\n

参考https://krew.sigs.k8s.io/docs/user-guide/setup/install/

\n
    \n
  • 确保 git 已经安装
  • \n
\n
1
2
3
git version
# 若未安装
yum -y install git
\n
    \n
  • 安装krew
  • \n
\n
1
2
3
4
5
6
7
8
9
(
set -x; cd "$(mktemp -d)" &&
OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\\(arm\\)\\(64\\)\\?.*/\\1\\2/' -e 's/aarch64$/arm64/')" &&
KREW="krew-${OS}_${ARCH}" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
tar zxvf "${KREW}.tar.gz" &&
./"${KREW}" install krew
)
\n
    \n
  • 添加 $HOME/.krew/bin目录到您的 PATH 环境变量。 更新你的 .bashrc或者 .zshrc文件
  • \n
\n
1
2
3
# 永久写的用户的环境变量文件,避免登出后失效
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
source ~/.bashrc
\n
    \n
  • 若安装失败,采用压缩包安装
  • \n
\n
1
2
3
4
5
6
7
8
9
10
wget https://github.com/kubernetes-sigs/krew/releases/latest/download/krew-linux_amd64.tar.gz

tar -zxvf krew-linux_amd64.tar.gz
# 添加$HOME/.krew/bin目录到PATH环境变量
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
# 配置为 kubectl 插件
mv ./krew-linux_amd64 ./kubectl-krew
mv ./kubectl-krew /usr/local/bin/
# 测试
kubectl krew version
\n
    \n
  • 检查是否安装成功
  • \n
\n
1
2
kubectl krew
kubectl plugin list
\n

6 为 K8S 创建 PV 持久卷

\n

6.1 PV和PVC

\n
    \n
  • \n

    持久卷(PersistentVolume,PV)是集群中由管理员配置的一段网络存储。它是集群中的资源,就像节点是集群资源一样。PV持久卷和普通的Volume一样,也是使用卷插件来实现的,只是它们拥有独立于任何使用PV的Pod的生命周期。此API对象捕获存储实现的详细信息,包括NFS,iSCSI或特定于云提供程序的存储系统。

    \n
  • \n
  • \n

    持久卷申领(PersistentVolumeClaim,PVC)表达的是用户对存储的请求。概念上与Pod类似。Pod会耗用节点资源,而PVC申领会耗用PV资源。

    \n
  • \n
\n

6.2 用 storageClass 动态创建 PV

\n
    \n
  • 对1PB的大量目录创建NFS服务,gisweb1-4,以gisweb4为例子
  • \n
\n
1
2
安装NFS: 
yum -y install nfs-utils rpcbind
\n
    \n
  • 设置持久卷权限
  • \n
\n
1
2
3
# 执行权限
chown -R nobody:nfsnobody /mnt/storage/k8s/pv
#chmod -R 777 /mnt/storage/k8s/pv
\n
    \n
  • 配置 nfs
  • \n
\n
1
2
3
4
vim /etc/exports
# 添加:
/mnt/storage/k8s/pv 192.168.0.0/24(rw,sync,no_root_squash)
# 以上设置让所有的 IP 都有效
\n
1
2
3
4
5
6
7
8
9
10
11
systemctl start rpcbind
systemctl enable rpcbind
systemctl enable nfs
systemctl start nfs
systemctl start nfs-server
systemctl enable nfs-server

systemctl start firewalld
firewall-cmd --permanent --add-service=nfs
firewall-cmd --reload
systemctl stop firewalld && sudo systemctl disable firewalld
\n
    \n
  • 检查
  • \n
\n
1
2
exportfs -rv
showmount -e 127.0.0.1
\n
    \n
  • 所有节点安装nfs客户端
  • \n
\n
1
2
3
4
5
yum install -y nfs-utils
# 每个节点挂载nfs客户端的存储目录,本次nfs客户端在gisweb4(192.168.0.204)上
mount -t nfs 192.168.0.204:/mnt/storage/k8s/pv /mnt/storage/k8s/pv
# 检查挂载情况
df -h
\n
    \n
  • 安装nfs-client-provisioner (需要翻墙)
  • \n
\n

参考:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
# 更新helm repo
helm repo update
# 搜索helm库中nfs版本
helm search repo nfs-subdir-external-provisioner

# 添加 helm 仓库
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \\
--set nfs.server=192.168.0.204 \\
--set nfs.path=/mnt/storage/k8s/pv \\
--set image.repository=registry.cn-hangzhou.aliyuncs.com/xzjs/nfs-subdir-external-provisioner \\
--set image.tag=v4.0.0
\n
    \n
  • 手动安装 nfs-client-provisioner
  • \n
\n

参考:http://www.mydlq.club/article/109/#创建-nfs-subdir-external-provisioner-部署文件

\n
    \n
  • 成功后,安装时添加持久化参数,其中 nfs-storage 为安装的 storageclass 的 provisioner 字段名字
  • \n
\n

7 安装 kubeAPPS 可视化软件管理工具

\n

参考:https://kubeapps.dev/docs/latest/tutorials/getting-started/

\n
    \n
  • 安装
  • \n
\n
1
2
3
4
5
6
# 添加 kubeapps 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
# 创建 kubeapps 的命名空间
kubectl create namespace kubeapps
# 安装
helm install kubeapps --namespace kubeapps bitnami/kubeapps
\n
    \n
  • 创建证书
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建用于访问 Kubeapps 和 Kubernetes 的演示凭证
kubectl create --namespace default serviceaccount kubeapps-operator
kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator


cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: kubeapps-operator-token
namespace: default
annotations:
kubernetes.io/service-account.name: kubeapps-operator
type: kubernetes.io/service-account-token
EOF
\n
    \n
  • 查看令牌 token
  • \n
\n
1
kubectl get --namespace default secret kubeapps-operator-token -o go-template='{{.data.token | base64decode}}'
\n
1
eyJhbGciOiJSUzI1NiIsImtpZCI6IkdVQTZzb3JEM1FHdkpxVDNsSEwtVEZWc2hyR08tbmFFWnFGX2Q2OGt5cEkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yLXRva2VuIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNTNjY2M0N2YtZWFmMS00NDY4LWJkN2ItYTVhMzliMzJjMzExIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6a3ViZWFwcHMtb3BlcmF0b3IifQ.qsTBQODZLD1EUP5WjF_ju0-_ZFoJa2pEGCGf2zoLK71TjZeytD0GUGp4Z5ACNFuJMtedtx8tRgWhioU2oimxGdCIL4f7Szt0dOQgXD15HmoiUjYEcDQNsfTdcmfZw-m3-zwtTqa3kTTG3Wio0wf_f_ayw8qZCDL2i3PK-7h0QeAb1rQhtCz_e8huNrcshjixGlyw8aKUvdi2hPe6yvpxKJqQeOalNhT22b-ax28oIyqmC-NXYUMyRbEsgOjyuJAv6XdjqsQKbOGMKsTtNyf7CvnHl88hfRZpF0W-GuKj1ggKGYClTHuXnsv9QP-AQN1UaEtcAbUp08bHN9isedJL6w
\n
    \n
  • 修改服务模式,将其改为 NodePort
  • \n
\n
1
2
# 因为是测试环境,因此直接采用 NodePort 方式暴露服务端口
kubectl edit svc kubeapps -n kubeapps
\n
    \n
  • 找到端口,在安全组放行
  • \n
\n
1
kubectl get svc -A |grep kubeapps
\n\n

8 在 K8S 上部署虚拟机服务 Kubevirt

\n
    \n
  • 设置 K8S ApiServer 允许特权容器
  • \n
\n
1
2
3
vim /etc/kubernetes/manifests/kube-apiserver.yaml
# 设置
--allow-privileged=true
\n
    \n
  • 检查每个节点是否支持虚拟化
  • \n
\n
1
2
3
virt-host-validate qemu
# 如果显示没有这个命令,先安装 libvrt 和 qemu 软件包:
yum install -y qemu-kvm libvirt virt-install bridge-utils
\n
    \n
  • 若有warnning,需要解决
  • \n
\n

\"image-20230408181653957\"

\n
1
2
3
4
5
6
7
8
# 1
vim /etc/default/grub
# 2.添加
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on"
# 3
grub2-mkconfig -o /boot/grub2/grub.cfg
# 4
reboot
\n
    \n
  • 安装 Kubevirt
  • \n
\n
1
2
3
4
# K8S 1.25版本,Kubervirt必须0.57.2以上,才能适配
kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0-rc.0/kubevirt-operator.yaml

kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0-rc.0/kubevirt-cr.yaml
\n
    \n
  • 等待 Kubevirt 资源创建完毕
  • \n
\n
1
kubectl -n kubevirt wait kv kubevirt --for condition=Available
\n
    \n
  • 安装 CDI
  • \n
\n

参考https://kubevirt.io/labs/kubernetes/lab2.html

\n
    \n
  • 安装 VNC
  • \n
\n
1
yum install -y tigervnc
\n
    \n
  • 查看 Kubevirt 资源
  • \n
\n
1
kubectl get pods -n kubevirt
\n

\"image-20230408185646502\"

\n
    \n
  • 安装 Kubevirtcli 管理工具
  • \n
\n
1
2
kubectl krew install virt
kubectl virt help
\n
    \n
  • Kubevirt创建/删除虚拟机服务
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
# 1.    创建yaml文件
Xxx
# 2. 运行一个虚拟机
kubectl apply -f test.yaml
# 3. 查看虚拟机
kubectl get vmis
# 4. 停止/删除虚拟机
kubectl delete -f vmi.yaml
# 或者
kubectl delete vmis testvmi
# 5. 开始/停止/暂停虚拟机
virtctl start/stop/pause my-vm
\n

9 在 K8S 上部署 PostgreSQL

\n
    \n
  • \n

    安装

    \n
      \n
    • \n

      注意:数据库安装需要持久卷,需提前创建满足要求的pv,或者创建nasstroageclass,以自动根据mysqlpvc创建pv

      \n
    • \n
    • \n

      集群已经配置23服务器的/mnt/storage/k8s/pv为NAS,并已经配置名字为nas-storagesc

      \n
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
helm repo add bitnami https://charts.bitnami.com/bitnami
# 首先检查是否有oge这个命名空间,否则执行如下进行创建
kubectl create ns oge
# postgresql 这个名字可以自己定义,但后面每一步都要注意对应更改
helm install -n oge bitnami/postgresql \\
--set global.storageClass=nfs-client \\
--set readReplicas.persistence.storageClass=nfs-client \\
--set primary.persistence.storageClass=nfs-client \\
--set primary.persistence.size=200Gi \\
--set readReplicas.persistence.size=200Gi \\
--set image.tag=14.5.0-debian-11-r6


helm install -n geoctap bitnami/postgresql \\
--set global.storageClass=nfs-client \\
--set readReplicas.persistence.storageClass=nfs-client \\
--set primary.persistence.storageClass=nfs-client \\
--set primary.persistence.size=200Gi \\
--set readReplicas.persistence.size=200Gi \\
--set image.tag=14.5.0-debian-11-r6
# 指定版本,可在kubeapps里面查看
# --set image.tag=14.5.0-debian-11-r6
\n
    \n
  • 查看 postgresql 密码
  • \n
\n
1
2
3
4
kubectl get secret --namespace oge postgresql -o jsonpath="{.data.postgres-password}" | base64 -d

# 密码
7jXf2gsmUX
\n
    \n
  • 更改服务端口
  • \n
\n
1
2
3
4
kubectl edit svc --namespace oge postgresql
# 将 type=ClusterIP 改为 NodePort
# b8:85:84:71:64:28
echo "SUBSYSTEM==\\"net\\", ACTION==\\"add\\", DRIVERS==\\"?*\\", ATTR{address}==\\" b8:85:84:71:64:28\\", ATTR{type}==\\"1\\", KERNEL==\\"eno*\\", NAME=\\"eno1\\"" >> /etc/udev/rules.d/70-persistent-net.rules
\n
    \n
  • 缩放副本集
  • \n
\n
1
2
3
4
5
6
kubectl get deployment 
# 发现并没有postgresql
kubectl get all -n oge
# 发现有statefulset.apps/postgresql
# 设置副本集个数为1
kubectl scale --replicas=1 statefulset.apps/postgresql -n oge
\n
    \n
  • 命令行进入pgsql
  • \n
\n
1
2
3
4
5
6
# 进入pgsql的pod
kubectl exec -it -n oge postgresql-0 bash
# 用户登录
psql -U postgres
# 输入密码
7jXf2gsmUX
\n
    \n
  • 在pod外面执行sql
  • \n
\n
1
psql -h 125.220.153.23 -p 30865 -U postgres -W -f ./public.sql
\n

10 在 K8S 上部署 MySQL

\n
    \n
  • \n

    安装

    \n
      \n
    • \n

      注意:数据库安装需要持久卷,需提前创建满足要求的pv,或者创建nasstroageclass,以自动根据postgresql的pvc创建pv。

      \n
    • \n
    • \n

      集群已经配置23服务器的/mnt/storage/k8s/pvNAS,并已经配置名字为 nas-storagesc

      \n
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
helm repo add bitnami https://charts.bitnami.com/bitnami

# 安装
helm install -n oge mysql bitnami/mysql \\
--set global.storageClass=nfs-client \\
--set readReplicas.persistence.storageClass=nfs-client \\
--set primary.persistence.storageClass=nfs-client \\
--set primary.persistence.size=200Gi \\
--set readReplicas.persistence.size=200Gi
\n
    \n
  • 查看 MySQL 密码
  • \n
\n
1
2
3
4
kubectl get secret --namespace oge mysql -o jsonpath="{.data.mysql-root-password}" | base64 -d

# 密码
VubCMiHvT1
\n
    \n
  • 更改服务端口
  • \n
\n
1
2
3
4
kubectl edit svc --namespace oge mysql
# 将type=ClusterIP改为NodePort
# b8:85:84:71:64:28
echo "SUBSYSTEM==\\"net\\", ACTION==\\"add\\", DRIVERS==\\"?*\\", ATTR{address}==\\" b8:85:84:71:64:28\\", ATTR{type}==\\"1\\", KERNEL==\\"eno*\\", NAME=\\"eno1\\"" >> /etc/udev/rules.d/70-persistent-net.rules
\n
    \n
  1. 缩放副本集
  2. \n
\n
1
2
3
4
5
kubectl get deployment 
# 发现并没有mysql
kubectl get all -n oge
# 发现有statefulset.apps/mysql
kubectl scale --replicas=1 statefulset.apps/mysql -n oge
\n
    \n
  1. 在K8S中进入数据库
  2. \n
\n
1
2
3
4
kubectl exec -it -n oge mysql-1  bash
# 进入后登录用户
mysql -u root -p
# 输入密码
\n

11 在K8S上部署 MongoDB

\n
    \n
  • \n

    安装

    \n
      \n
    • \n

      注意:数据库安装需要持久卷,需提前创建满足要求的pv,或者创建nas的stroageclass,以自动根据postgresql的pvc创建pv。

      \n
    • \n
    • \n

      集群已经配置23服务器的/mnt/storage/k8s/pv为NAS,并已经配置名字为nas-storage的sc

      \n
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
helm repo add bitnami https://charts.bitnami.com/bitnami

# 安装
helm install -n ydy mongodb bitnami/mongodb \\
--set global.storageClass=nfs-client \\
--set readReplicas.persistence.storageClass=nfs-client \\
--set primary.persistence.storageClass=nfs-client \\
--set primary.persistence.size=100Gi \\
--set readReplicas.persistence.size=100Gi
\n
    \n
  • 查看 MongoDB 密码
  • \n
\n
1
2
3
4
kubectl get secret --namespace ydy mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 -d

# 密码
WUL9FPQ2V9
\n
    \n
  • 更改服务端口
  • \n
\n
1
2
3
4
kubectl edit svc --namespace ydy mongodb
# 将type=ClusterIP改为NodePort
# b8:85:84:71:64:28
echo "SUBSYSTEM==\\"net\\", ACTION==\\"add\\", DRIVERS==\\"?*\\", ATTR{address}==\\" b8:85:84:71:64:28\\", ATTR{type}==\\"1\\", KERNEL==\\"eno*\\", NAME=\\"eno1\\"" >> /etc/udev/rules.d/70-persistent-net.rules
\n
    \n
  1. 缩放副本集
  2. \n
\n
1
2
3
4
5
kubectl get deployment 
# 发现并没有mongodb
kubectl get all -n ydy
# 发现有statefulset.apps/mongodb
kubectl scale --replicas=1 statefulset.apps/mongodb -n ydy
\n
    \n
  1. 在K8S中进入数据库
  2. \n
\n
1
kubectl exec -it -n ydy mongodb-644c657c4f-x62cn bash
\n

12 在 K8S 上部署 Apache Spark

\n

两个方式,第一种方式为Spark官方提出的;第二种为Google提出的,更符合K8S原生概念

\n
    \n
  1. Spark On K8S
  2. \n
  3. spark-on-k8s-operator
  4. \n
\n

\"image-20230408170401365\"

\n
Spark On K8S
\n

\"image-20230408170444023\"

\n
spark-on-k8s-operator
\n

12.1 安装 spark-on-k8s-operator

\n

参考 https://blog.csdn.net/w8998036/article/details/122217230

\n
    \n
  • 安装
  • \n
\n
1
2
3
4
5
6
7
helm repo add spark-operator https://googlecloudplatform.github.io/spark-on-k8s-operator 

# 注意是否存在 spark-operator 命名空间,没有则创建
kubectl create ns spark-operator

# 安装
helm install spark-operator spark-operator/spark-operator --namespace spark-operator --set sparkJobNamespace=default --set webhook.enable=true
\n
    \n
  • 创建服务账户
  • \n
\n
1
2
vim spark-application-rbac.yaml
# 内容如下
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
apiVersion: v1
kind: ServiceAccount
metadata:
name: spark
namespace: spark
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: spark
name: spark-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["*"]
- apiGroups: [""]
resources: ["services"]
verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: spark-role-binding
namespace: spark
subjects:
- kind: ServiceAccount
name: spark
namespace: spark
roleRef:
kind: Role
name: spark-role
apiGroup: rbac.authorization.k8s.io
\n
1
kubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root
\n
    \n
  • 编写作业模板并提交作业
  • \n
\n

创建一个Spark作业的YAML配置文件,并进行部署。

\n
    \n
  1. 创建spark-pi.yaml文件
  2. \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:
name: spark-pi
namespace: spark
spec:
type: Scala
mode: cluster
image: "registry.cn-hangzhou.aliyuncs.com/yudayu/spark:v3.1.1"
# 1gcr.io/spark-operator/spark:v3.1.1需要更换镜像,gcr.io目前国内无法访问。可以先对docker挂代理,pull到阿里云镜像后
imagePullPolicy: IfNotPresent
mainClass: org.apache.spark.examples.SparkPi
mainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar"
# 需要更换自己的jar包,local指该jar位于image内,可换成所有节点都能访问的web路径,或者通过指定nas挂载pv,将jar包放在nas的pv里
sparkVersion: "3.1.1"
restartPolicy:
type: Never
volumes:
- name: "test-volume"
hostPath:
path: "/tmp"
type: Directory
driver:
cores: 1
coreLimit: "1200m"
memory: "512m"
labels:
version: 3.1.1
serviceAccount: spark
volumeMounts:
- name: "test-volume"
mountPath: "/tmp"
executor:
cores: 1
instances: 2
memory: "512m"
labels:
version: 3.1.1
volumeMounts:
- name: "test-volume"
mountPath: "/tmp"
\n
    \n
  1. 部署一个Spark计算任务
  2. \n
\n
1
kubectl apply -f spark-pi.yaml
\n

运维

\n
1
2
3
kubectl get sparkapplications
kubectl describe sparkapplications
kubectl get svc # 查看该任务的spark ui
\n

12.2 安装 Spark On K8S

\n
1
2
3
4
5
helm repo add bitnami https://charts.bitnami.com/bitnami
# 注意是否存在 spark-operator 命名空间,没有则创建
kubectl create ns spark-on-k8s
helm install -n spark-on-k8s spark bitnami/spark \\
--set worker.coreLimit=28
\n
1
2
3
4
5
6
7
8
9
10
./bin/spark-submit    \\
--class org.apache.spark.examples.SparkPi \\
--conf spark.kubernetes.container.image=bitnami/spark:3 \\
--master k8s://https://125.220.153.23:6443 \\
--conf spark.kubernetes.driverEnv.SPARK_MASTER_URL=spark://10.97.43.141:7077 \\
--deploy-mode cluster \\
--executor-memory 20G \\
--num-executors 10 \\
--conf spark.executor.instances=5 \\
https:///data/spark-examples_2.12-3.3.0.jar 1000
\n
1
2
3
4
5
6
kubectl run --namespace spark-on-k8s spark-oge --rm --tty -i --restart='Never' \\
--image bitnami/spark:3 \\
-- spark-submit --master spark://10.97.43.141:7077 \\
--class org.apache.spark.examples.SparkPi \\
--deploy-mode cluster \\
/data/spark-examples_2.12-3.3.0.jar 100000
\n

13 在K8S上部署redis集群

\n
    \n
  • 待更
  • \n
\n

14 在K8S上部署nginx

\n

14.1 创建pv

\n
1
vim nginx-pv.yaml
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: v1
kind: PersistentVolume
metadata:
name: nginx-ydy-pv
namespace: ydy
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: manual
hostPath:
path: /mnt/storage/k8s/pv/ydy-nginx-pvc
\n

14.2 创建pvc

\n
1
vim nginx-pvc.yaml
\n
1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nginx-ydy-pvc
namespace: ydy
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: manual
\n

14.3 安装nginx并设置静态资源挂载的pvc

\n

将nginx中的/app挂载到/mnt/storage/k8s/pv/luluancheng-nginx-pvc

\n
1
2
helm install -n ydy nginx bitnami/nginx \\
--set staticSitePVC=nginx-ydy-pvc
\n

附录:疑难问题解决:

\n

1 K8S强制删除 namespace(会删除该命名空间中的所有 pod )

\n
1
2
3
#1、将该分区导出为json文件,以 oge namespace为例
kubectl get ns oge -o json > oge.json
#2、编辑该json文件,将spec内的内容全部删除,然后保存退出
\n

\"22f0a5cbf0424425b0d62681f79cb713\"

\n

\"ef949b8bb503410c918894ab20bad993\"

\n
1
2
# 3、另开一个终端,启动一个proxy
kubectl proxy --port=8081
\n
1
2
# 4、执行一个curl命令,更新oge namespace
curl -k -H "Content-Type: application/json" -X PUT --data-binary @oge.json http://127.0.0.1:8081/api/v1/namespaces/oge/finalize
\n

2 CNI网络错误

\n
    \n
  • 当迁移集群之后,拉取镜像报cni网络错误,如下:
  • \n
\n

\"8d5d49703c8ac59f24fde81b3982b616\"

\n
    \n
  • 从上面的截图中看到问题出现在给Pod分配IP上,意思是 cni0 的IP不同于``10.244.9.1/24,下面我们使用 ifconfig`命令查看IP信息
  • \n
\n

\"79e65e4f797200ad98feac6f8b2d4254\"

\n
    \n
  • 从上面的图中我们可以看到``flannel.1的 **IP** 为10.244.9.0,然后我们又使用cat /run/flannel/subnet.env`,该文件内容如下:
  • \n
\n

\"310efbdb614636a17aa48eaf4a8dc2c5\"

\n
    \n
  • \n

    其实现在的问题就比较明确了,我们使用的Overlay network为Flannel,也就是说Pod的IP地址段应该在Flannel的subnet下,而现在我们看到cni0的IP地址段与flannel subnet地址段不同,所以就出现了问题。

    \n
  • \n
  • \n

    解决方案

    \n
      \n
    • 方法1是将 cni0 的 IP 段修改为``10.244.9.1`
    • \n
    • 方法2是将这个错误的网卡删除掉,之后会自动重建
    • \n
    \n
  • \n
\n
1
2
3
# 下面我们删除错误的cni0,然后让它自己重建
ifconfig cni0 down
ip link delete cni0
\n

3 28 服务器增加路由(为了让两台刀片上网)

\n
    \n
  • 28上执行
  • \n
\n
1
2
iptables -t nat -A POSTROUTING -s 192.168.0.209/24 -o em1_2 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.177/24 -o em1_2 -j MASQUERADE
\n

4 异常断电等导致 etcd 心跳检测出现问题

\n\n

5 OpenStack服务器网络跳转镜像

\n
\n

作用: 保证OpenStack上服务器与实验室服务器可以 ping 通

\n
\n
    \n
  • IP\n
      \n
    • 115.156.91.250
    • \n
    \n
  • \n
  • 网关\n
      \n
    • 115.156.91.254
    • \n
    \n
  • \n
  • 子网掩码\n
      \n
    • 255.255.255.0
    • \n
    \n
  • \n
\n"},{"title":"K8S集群环境搭建(Docker作为容器)","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D2075113303%2C1509195472%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","abbrlink":"d862c611","date":"2023-05-18T06:08:12.000Z","keywords":"K8S, Docker","swiper_index":2,"_content":"\n本文参考:https://zhuanlan.zhihu.com/p/558014199?utm_id=0\n\n## 1. 安装Docker\n\n### 1.1 安装docker 20.10.7\n\n**注意 Docker 版本,要和 Kubernetes 版本 有对应关系**\n\n- 三台机器上执行\n\n```shell\n# 安装/更新 yum-utils\nyum install -y yum-utils\n\n# 配置 yum源\nyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo\n\n# 安装 docker 20.10.7 版本\nyum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io\n\n# 查看 docker 版本\ndocker -v\n\n# 启动 docker\nsystemctl start docker\n\n# 设置开机自启\nsystemctl enable docker\n\n# 查看 docker 是否成功, 有 Client 和 Server 即成功\ndocker version\n```\n\n### 1.2 配置加速镜像\n\n- 三台机器上执行\n\n```shell\nsudo mkdir -p /etc/docker\nsudo tee /etc/docker/daemon.json <<-'EOF'\n{\n \"registry-mirrors\": [\"https://82m9ar63.mirror.aliyuncs.com\"],\n \"exec-opts\": [\"native.cgroupdriver=systemd\"],\n \"log-driver\": \"json-file\",\n \"log-opts\": {\n \"max-size\": \"100m\"\n },\n \"storage-driver\": \"overlay2\"\n}\nEOF\n# 重启docker的后台线程\nsudo systemctl daemon-reload\n# 重启docker服务\nsudo systemctl restart docker\n\n# 查看是否配置成功\ndocker info\n```\n\n\n\n## 2. 安装Kubernetes\n\n- 每台机器2GB或者更多的RAM(如果少于这个数字 将会影响应用的运行内存)\n- CPU2核以上\n- 集群中所有的服务器的网络彼此可以相互连接。\n\n\n\n关闭防火墙\n\n````shell\nsystemctl stop firewalld NetworkManager\nsystemctl disable firewalld NetworkManager\n````\n\n\n\n### 2.1 设置hostname\n\n```shell\n# 查看主机名\nhostname\n\n# 设置主机名\nhostnamectl set-hostname k8s-master\nhostnamectl set-hostname k8s-node1\nhostnamectl set-hostname k8s-node2\n\n# 更新\nbash\n```\n\n\n\n### 2.2 关闭交换区\n\n- 三台机器上执行\n- 下面是一些安全设置\n\n```shell\n# 查看 交换分区\nfree -m\n\n# 将 SELinux 设置为 permissive 模式(相当于将其禁用) 第一行是临时禁用,第二行是永久禁用\nsetenforce 0\nsed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config\n\n# 关闭swap;第一行是临时禁用,第二行是永久禁用\nswapoff -a \nsed -ri 's/.*swap.*/#&/' /etc/fstab\n\n# 允许 iptables 检查桥接流量 (K8s 官方要求)\ncat <> /etc/hosts\n```\n\n- master节点上执行\n\n```shell\n# 主节点初始化 (只在 master 服务器执行, 其他 node 不用)\n# --apiserver-advertise-address: master 的 IP\n# --control-plane-endpoint: master 的域名\n# --service-cidr 和 --pod-network-cidr 是网络范围,雷神 建议不要改。要改的话 2 个cidr 和 vps(192.168.x.x) 的,3 个网络互相不能重叠;还要修改 calico.yaml的 IP(下图有写)。\nkubeadm init \\\n--apiserver-advertise-address=192.168.1.135 \\\n--control-plane-endpoint=k8s-master \\\n--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \\\n--kubernetes-version v1.20.9 \\\n--service-cidr=10.96.0.0/16 \\\n--pod-network-cidr=192.168.0.0/16\n```\n\n- 出现这个即成功了\n\n![image-20230406145652752](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406145652752.png)\n\n\n\n### 2.5 根据提示继续\n\n- master成功后提示\n\n```shell\nYour Kubernetes control-plane has initialized successfully!\n\nTo start using your cluster, you need to run the following as a regular user:\n\n mkdir -p $HOME/.kube\n sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\n sudo chown $(id -u):$(id -g) $HOME/.kube/config\n\nAlternatively, if you are the root user, you can run:\n\n export KUBECONFIG=/etc/kubernetes/admin.conf\n\nYou should now deploy a pod network to the cluster.\nRun \"kubectl apply -f [podnetwork].yaml\" with one of the options listed at:\n https://kubernetes.io/docs/concepts/cluster-administration/addons/\n\nYou can now join any number of control-plane nodes by copying certificate authorities\nand service account keys on each node and then running the following as root:\n\n kubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\\n --discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5 \\\n --control-plane\n\nThen you can join any number of worker nodes by running the following on each as root:\n\nkubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\\n --discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5\n```\n\n\n\nTo start using your cluster, you need to run the following as a regular user:\n\n要开始使用集群,您需要以普通用户身份运行以下命令(master节点执行):源自上面的提示\n\n```shell\nmkdir -p $HOME/.kube\nsudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\nsudo chown $(id -u):$(id -g) $HOME/.kube/config\n```\n\n\n\n### 2.6 安装网络组件(calico)\n\n注:只在 master 服务执行。其他 node 服务器 不用。\n\n- 在master上执行\n\n```shell\n# 下载 calico.yaml\ncurl https://docs.projectcalico.org/manifests/calico.yaml -O\n\n# 加载配置\nkubectl apply -f calico.yaml\n```\n\n- 或者(这个更不会出错)\n\n```shell\nkubectl apply -f https://docs.projectcalico.org/v3.18/manifests/calico.yaml\n```\n\n- 下载完成后生成calico.yaml\n\n![image-20230406150214816](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406150214816.png)\n\n\n- 或者安装flannel\n\n```shell\nkubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml\n```\n\n\n\n注意\n```shell\n如果修改了 初始化主节点中的\n--pod-network-cidr=192.168.0.0/16\n将 calico.yaml 的配置, # 去掉,IP 写 改的 IP。\n```\n\n\n\n### 2.7 **Worker 加入集群**\n\n- worker节点加入到集群中(源自提示)\n\n```shell\nkubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\\n --discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5\n```\n\n- 出现这个即成功\n\n![image-20230406153948047](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406153948047.png)\n\n\n\n### 2.8 每次重启需要先启动docker,否则k8s无法启动\n\n\n\n### 2.9 令牌过期\n\n- 在master主节点执行\n\n```shell\n# 重新获取令牌\nkubeadm token create --print-join-command\n```\n\n\n\n### 2.10 部署Dashboard\n\n- 参考链接: [kubernetes(k8s)部署Dashboard - 干货分享 - 代码森林 (codeforest.cn)](http://www.codeforest.cn/article/570)\n\n\n#### 2.10.1 运行pod(创建资源)\n\n部署 dashboard(可视化页面), [kubernetes 官方提供的可视化界面](https://github.com/kubernetes/dashboard)\n\n- 在master上执行,推荐下载到本地导入虚拟机\n\n```shell\n# 根据 在线配置文件 创建资源\nkubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml\n```\n\n```shell\n# 本地配置\nkubectl apply -f recommended.yaml\n```\n\n#### 2.10.2 设置访问端口\n\n```shell\n# 修改配置文件 找到 type,将 ClusterIP 改成 NodePort\nkubectl edit svc kubernetes-dashboard -n kubernetes-dashboard\n\n# 找到端口,在安全组放行\nkubectl get svc -A |grep kubernetes-dashboard\n```\n\n![image-20230406155958282](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406155958282.png)\n\n![image-20230406161329065](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406161329065.png)\n\n32499即为访问端口,以后只需要使用任一节点的ip+32499即可访问\n\n[https://192.168.1.135:32499](https://192.168.1.135:32499/) (要注意是 https,port 是映射的端口,在配置文件查看)\n\n## 3 疑难杂症\n### 3.1 删除现有的dashboard服务\n\n```shell\nkubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard\n```\n\n- 根据yaml来删除\n\n```shell\nkubectl delete -f recommended.yaml \n```\n\n- 若资源下载不下来,则直接本地导入recommended.yaml ,下载地址如下\n\nhttps://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml\n\n- 执行:\n\n```shell\nkubectl apply -f recommended.yaml\n```\n\n\n### 3.2 dashboard启动失败(无法访问)\n\n修改了 NodePort 后,Pod kubernetes-dashboard 起不来了。(环境:虚拟机)\n\n```shell\n# 查看日志\nkubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-658485d5c7-f89v7\n```\n\n![image.png](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/1652075593643-5900409d-98b9-48ef-8eb8-b6160feb6b71.png)\n\n解决思路\n\n```shell\n1、将 dashboard 部署到 master上,因为 master 刚安装了网络组件\n2、让 工作节点 也能访问 apiServer\n```\n\n方案1\n\n- 先卸载原来的 dashboard\n\n```shell\n# 无法访问,查看 部署到 哪个 node 上了, 将 dashboard 部署到 master 上\nkubectl get pods -A -o wide\n```\n\n![image-20230407113313033](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230407113313033.png)\n\n```shell\n# 修改 recommended.yaml,添加下面\n```\n\n![image.png](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/1652078359412-58130528-5fe9-407b-8be2-5b4ddcbad064.png)\n\n![image.png](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/1652078430899-c1b3f50d-354e-495c-8d02-e5e5e1353d1c.png)\n\n```shell\n# 重新安装 dashboard\n\n# 修改配置文件 找到 type,将 ClusterIP 改成 NodePort\nkubectl edit svc kubernetes-dashboard -n kubernetes-dashboard\n\n# 找到端口,在安全组放行\nkubectl get svc -A |grep kubernetes-dashboard\n```\n\n\n\n- 创建访问账号\n\n```shell\n#创建访问账号,准备一个yaml文件\nvim dash-usr.yaml\n```\n\n- 文件内容如下\n\n```yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: admin-user\n namespace: kubernetes-dashboard\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n name: admin-user\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: cluster-admin\nsubjects:\n- kind: ServiceAccount\n name: admin-user\n namespace: kubernetes-dashboard\n```\n\n```shell\nkubectl apply -f dash-usr.yaml\n```\n\n\n\n- 令牌访问\n\n```shell\n#获取访问令牌\nkubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath=\"{.secrets[0].name}\") -o go-template=\"{{.data.token | base64decode}}\"\n```\n\n![image-20230407135656881](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230407135656881.png)\n\n```tex\neyJhbGciOiJSUzI1NiIsImtpZCI6IkZkbV91WkVqTnp3clZLd29JS1FYUWxURzZyd0FLcnpVQzBtRlRMTmpya0UifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTVrbGtrIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiNWVhYjQ2MS0xNjE1LTQ5ZTQtYTAzNC0wY2MxYWM1YTI5ODkiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.eum4COcUzn6wt_vOpCUUEiNENzeGUTC_ZlKeB8d0IplFlZWrAav3RbqV5LMDRRIyyZ-7csJb3COhFEiCRtlkc9MM60od4IRMscNxv_tm11A32pmGn9eFERyaYjKUFBHZfF34jPcsjYqU50TDn6wykI_B6r9ZzvpJemR-wqF2y-GBvmz8q19D9q5zlhaE9gmmvksEx-D0ZyOeZo4tMdbD757OdTjgzlYhmTpfTs-Z8-sdKWnHGFCYbAPzrEgMgChcIjlyDle9-JaE1WCosGCA73xsBzXNnkvYC7YB_tagX4BhGDZEu4eyRNbgCAqO6of6QnvDXvlesd59IU-WMVE-7Q\n```\n\n- 将令牌复制到token处\n\n![image-20230407140527932](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230407140527932.png)\n\n- 登录成功\n\n![image-20230407140620636](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230407140620636.png)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","source":"_posts/K8S集群环境搭建(Docker作为容器).md","raw":"---\ntitle: K8S集群环境搭建(Docker作为容器)\ncover: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D2075113303%2C1509195472%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPG'\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nabbrlink: d862c611\ndate: 2023-05-18 14:08:12\nkeywords: K8S, Docker\ncategories:\n - 云原生\ntags:\n - K8S\n - Docker\nswiper_index: 2 #置顶轮播图顺序,非负整数,数字越大越靠前\n---\n\n本文参考:https://zhuanlan.zhihu.com/p/558014199?utm_id=0\n\n## 1. 安装Docker\n\n### 1.1 安装docker 20.10.7\n\n**注意 Docker 版本,要和 Kubernetes 版本 有对应关系**\n\n- 三台机器上执行\n\n```shell\n# 安装/更新 yum-utils\nyum install -y yum-utils\n\n# 配置 yum源\nyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo\n\n# 安装 docker 20.10.7 版本\nyum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io\n\n# 查看 docker 版本\ndocker -v\n\n# 启动 docker\nsystemctl start docker\n\n# 设置开机自启\nsystemctl enable docker\n\n# 查看 docker 是否成功, 有 Client 和 Server 即成功\ndocker version\n```\n\n### 1.2 配置加速镜像\n\n- 三台机器上执行\n\n```shell\nsudo mkdir -p /etc/docker\nsudo tee /etc/docker/daemon.json <<-'EOF'\n{\n \"registry-mirrors\": [\"https://82m9ar63.mirror.aliyuncs.com\"],\n \"exec-opts\": [\"native.cgroupdriver=systemd\"],\n \"log-driver\": \"json-file\",\n \"log-opts\": {\n \"max-size\": \"100m\"\n },\n \"storage-driver\": \"overlay2\"\n}\nEOF\n# 重启docker的后台线程\nsudo systemctl daemon-reload\n# 重启docker服务\nsudo systemctl restart docker\n\n# 查看是否配置成功\ndocker info\n```\n\n\n\n## 2. 安装Kubernetes\n\n- 每台机器2GB或者更多的RAM(如果少于这个数字 将会影响应用的运行内存)\n- CPU2核以上\n- 集群中所有的服务器的网络彼此可以相互连接。\n\n\n\n关闭防火墙\n\n````shell\nsystemctl stop firewalld NetworkManager\nsystemctl disable firewalld NetworkManager\n````\n\n\n\n### 2.1 设置hostname\n\n```shell\n# 查看主机名\nhostname\n\n# 设置主机名\nhostnamectl set-hostname k8s-master\nhostnamectl set-hostname k8s-node1\nhostnamectl set-hostname k8s-node2\n\n# 更新\nbash\n```\n\n\n\n### 2.2 关闭交换区\n\n- 三台机器上执行\n- 下面是一些安全设置\n\n```shell\n# 查看 交换分区\nfree -m\n\n# 将 SELinux 设置为 permissive 模式(相当于将其禁用) 第一行是临时禁用,第二行是永久禁用\nsetenforce 0\nsed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config\n\n# 关闭swap;第一行是临时禁用,第二行是永久禁用\nswapoff -a \nsed -ri 's/.*swap.*/#&/' /etc/fstab\n\n# 允许 iptables 检查桥接流量 (K8s 官方要求)\ncat <> /etc/hosts\n```\n\n- master节点上执行\n\n```shell\n# 主节点初始化 (只在 master 服务器执行, 其他 node 不用)\n# --apiserver-advertise-address: master 的 IP\n# --control-plane-endpoint: master 的域名\n# --service-cidr 和 --pod-network-cidr 是网络范围,雷神 建议不要改。要改的话 2 个cidr 和 vps(192.168.x.x) 的,3 个网络互相不能重叠;还要修改 calico.yaml的 IP(下图有写)。\nkubeadm init \\\n--apiserver-advertise-address=192.168.1.135 \\\n--control-plane-endpoint=k8s-master \\\n--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \\\n--kubernetes-version v1.20.9 \\\n--service-cidr=10.96.0.0/16 \\\n--pod-network-cidr=192.168.0.0/16\n```\n\n- 出现这个即成功了\n\n![image-20230406145652752](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406145652752.png)\n\n\n\n### 2.5 根据提示继续\n\n- master成功后提示\n\n```shell\nYour Kubernetes control-plane has initialized successfully!\n\nTo start using your cluster, you need to run the following as a regular user:\n\n mkdir -p $HOME/.kube\n sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\n sudo chown $(id -u):$(id -g) $HOME/.kube/config\n\nAlternatively, if you are the root user, you can run:\n\n export KUBECONFIG=/etc/kubernetes/admin.conf\n\nYou should now deploy a pod network to the cluster.\nRun \"kubectl apply -f [podnetwork].yaml\" with one of the options listed at:\n https://kubernetes.io/docs/concepts/cluster-administration/addons/\n\nYou can now join any number of control-plane nodes by copying certificate authorities\nand service account keys on each node and then running the following as root:\n\n kubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\\n --discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5 \\\n --control-plane\n\nThen you can join any number of worker nodes by running the following on each as root:\n\nkubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\\n --discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5\n```\n\n\n\nTo start using your cluster, you need to run the following as a regular user:\n\n要开始使用集群,您需要以普通用户身份运行以下命令(master节点执行):源自上面的提示\n\n```shell\nmkdir -p $HOME/.kube\nsudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\nsudo chown $(id -u):$(id -g) $HOME/.kube/config\n```\n\n\n\n### 2.6 安装网络组件(calico)\n\n注:只在 master 服务执行。其他 node 服务器 不用。\n\n- 在master上执行\n\n```shell\n# 下载 calico.yaml\ncurl https://docs.projectcalico.org/manifests/calico.yaml -O\n\n# 加载配置\nkubectl apply -f calico.yaml\n```\n\n- 或者(这个更不会出错)\n\n```shell\nkubectl apply -f https://docs.projectcalico.org/v3.18/manifests/calico.yaml\n```\n\n- 下载完成后生成calico.yaml\n\n![image-20230406150214816](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406150214816.png)\n\n\n- 或者安装flannel\n\n```shell\nkubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml\n```\n\n\n\n注意\n```shell\n如果修改了 初始化主节点中的\n--pod-network-cidr=192.168.0.0/16\n将 calico.yaml 的配置, # 去掉,IP 写 改的 IP。\n```\n\n\n\n### 2.7 **Worker 加入集群**\n\n- worker节点加入到集群中(源自提示)\n\n```shell\nkubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\\n --discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5\n```\n\n- 出现这个即成功\n\n![image-20230406153948047](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406153948047.png)\n\n\n\n### 2.8 每次重启需要先启动docker,否则k8s无法启动\n\n\n\n### 2.9 令牌过期\n\n- 在master主节点执行\n\n```shell\n# 重新获取令牌\nkubeadm token create --print-join-command\n```\n\n\n\n### 2.10 部署Dashboard\n\n- 参考链接: [kubernetes(k8s)部署Dashboard - 干货分享 - 代码森林 (codeforest.cn)](http://www.codeforest.cn/article/570)\n\n\n#### 2.10.1 运行pod(创建资源)\n\n部署 dashboard(可视化页面), [kubernetes 官方提供的可视化界面](https://github.com/kubernetes/dashboard)\n\n- 在master上执行,推荐下载到本地导入虚拟机\n\n```shell\n# 根据 在线配置文件 创建资源\nkubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml\n```\n\n```shell\n# 本地配置\nkubectl apply -f recommended.yaml\n```\n\n#### 2.10.2 设置访问端口\n\n```shell\n# 修改配置文件 找到 type,将 ClusterIP 改成 NodePort\nkubectl edit svc kubernetes-dashboard -n kubernetes-dashboard\n\n# 找到端口,在安全组放行\nkubectl get svc -A |grep kubernetes-dashboard\n```\n\n![image-20230406155958282](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406155958282.png)\n\n![image-20230406161329065](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406161329065.png)\n\n32499即为访问端口,以后只需要使用任一节点的ip+32499即可访问\n\n[https://192.168.1.135:32499](https://192.168.1.135:32499/) (要注意是 https,port 是映射的端口,在配置文件查看)\n\n## 3 疑难杂症\n### 3.1 删除现有的dashboard服务\n\n```shell\nkubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard\n```\n\n- 根据yaml来删除\n\n```shell\nkubectl delete -f recommended.yaml \n```\n\n- 若资源下载不下来,则直接本地导入recommended.yaml ,下载地址如下\n\nhttps://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml\n\n- 执行:\n\n```shell\nkubectl apply -f recommended.yaml\n```\n\n\n### 3.2 dashboard启动失败(无法访问)\n\n修改了 NodePort 后,Pod kubernetes-dashboard 起不来了。(环境:虚拟机)\n\n```shell\n# 查看日志\nkubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-658485d5c7-f89v7\n```\n\n![image.png](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/1652075593643-5900409d-98b9-48ef-8eb8-b6160feb6b71.png)\n\n解决思路\n\n```shell\n1、将 dashboard 部署到 master上,因为 master 刚安装了网络组件\n2、让 工作节点 也能访问 apiServer\n```\n\n方案1\n\n- 先卸载原来的 dashboard\n\n```shell\n# 无法访问,查看 部署到 哪个 node 上了, 将 dashboard 部署到 master 上\nkubectl get pods -A -o wide\n```\n\n![image-20230407113313033](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230407113313033.png)\n\n```shell\n# 修改 recommended.yaml,添加下面\n```\n\n![image.png](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/1652078359412-58130528-5fe9-407b-8be2-5b4ddcbad064.png)\n\n![image.png](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/1652078430899-c1b3f50d-354e-495c-8d02-e5e5e1353d1c.png)\n\n```shell\n# 重新安装 dashboard\n\n# 修改配置文件 找到 type,将 ClusterIP 改成 NodePort\nkubectl edit svc kubernetes-dashboard -n kubernetes-dashboard\n\n# 找到端口,在安全组放行\nkubectl get svc -A |grep kubernetes-dashboard\n```\n\n\n\n- 创建访问账号\n\n```shell\n#创建访问账号,准备一个yaml文件\nvim dash-usr.yaml\n```\n\n- 文件内容如下\n\n```yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: admin-user\n namespace: kubernetes-dashboard\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n name: admin-user\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: cluster-admin\nsubjects:\n- kind: ServiceAccount\n name: admin-user\n namespace: kubernetes-dashboard\n```\n\n```shell\nkubectl apply -f dash-usr.yaml\n```\n\n\n\n- 令牌访问\n\n```shell\n#获取访问令牌\nkubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath=\"{.secrets[0].name}\") -o go-template=\"{{.data.token | base64decode}}\"\n```\n\n![image-20230407135656881](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230407135656881.png)\n\n```tex\neyJhbGciOiJSUzI1NiIsImtpZCI6IkZkbV91WkVqTnp3clZLd29JS1FYUWxURzZyd0FLcnpVQzBtRlRMTmpya0UifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTVrbGtrIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiNWVhYjQ2MS0xNjE1LTQ5ZTQtYTAzNC0wY2MxYWM1YTI5ODkiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.eum4COcUzn6wt_vOpCUUEiNENzeGUTC_ZlKeB8d0IplFlZWrAav3RbqV5LMDRRIyyZ-7csJb3COhFEiCRtlkc9MM60od4IRMscNxv_tm11A32pmGn9eFERyaYjKUFBHZfF34jPcsjYqU50TDn6wykI_B6r9ZzvpJemR-wqF2y-GBvmz8q19D9q5zlhaE9gmmvksEx-D0ZyOeZo4tMdbD757OdTjgzlYhmTpfTs-Z8-sdKWnHGFCYbAPzrEgMgChcIjlyDle9-JaE1WCosGCA73xsBzXNnkvYC7YB_tagX4BhGDZEu4eyRNbgCAqO6of6QnvDXvlesd59IU-WMVE-7Q\n```\n\n- 将令牌复制到token处\n\n![image-20230407140527932](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230407140527932.png)\n\n- 登录成功\n\n![image-20230407140620636](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230407140620636.png)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","slug":"K8S集群环境搭建(Docker作为容器)","published":1,"updated":"2023-10-21T04:52:18.653Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5vd000hfc3ucj9c1xep","content":"

本文参考:https://zhuanlan.zhihu.com/p/558014199?utm_id=0

\n

1. 安装Docker

\n

1.1 安装docker 20.10.7

\n

注意 Docker 版本,要和 Kubernetes 版本 有对应关系

\n
    \n
  • 三台机器上执行
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 安装/更新 yum-utils
yum install -y yum-utils

# 配置 yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 docker 20.10.7 版本
yum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io

# 查看 docker 版本
docker -v

# 启动 docker
systemctl start docker

# 设置开机自启
systemctl enable docker

# 查看 docker 是否成功, 有 Client 和 Server 即成功
docker version
\n

1.2 配置加速镜像

\n
    \n
  • 三台机器上执行
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
# 重启docker的后台线程
sudo systemctl daemon-reload
# 重启docker服务
sudo systemctl restart docker

# 查看是否配置成功
docker info
\n

2. 安装Kubernetes

\n
    \n
  • 每台机器2GB或者更多的RAM(如果少于这个数字 将会影响应用的运行内存)
  • \n
  • CPU2核以上
  • \n
  • 集群中所有的服务器的网络彼此可以相互连接。
  • \n
\n

关闭防火墙

\n
1
2
systemctl stop firewalld NetworkManager
systemctl disable firewalld NetworkManager
\n

2.1 设置hostname

\n
1
2
3
4
5
6
7
8
9
10
# 查看主机名
hostname

# 设置主机名
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2

# 更新
bash
\n

2.2 关闭交换区

\n
    \n
  • 三台机器上执行
  • \n
  • 下面是一些安全设置
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查看 交换分区
free -m

# 将 SELinux 设置为 permissive 模式(相当于将其禁用) 第一行是临时禁用,第二行是永久禁用
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# 关闭swap;第一行是临时禁用,第二行是永久禁用
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 允许 iptables 检查桥接流量 (K8s 官方要求)
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 让配置生效
sysctl --system
\n

2.3 安装K8S三大件

\n

安装 kubelet、kebeadm、kubectl;注意版本 (1.20.9)

\n
    \n
  • 三台机器上执行
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
# 配置 k8s 的 yum 源地址
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
\n
1
2
3
4
5
6
7
8
9
# 安装 kubelet、kubeadm、kubectl
yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes

# 启动kubelet
systemctl enable --now kubelet

# 查看 kubelet 状态:一会停止 一会运行。 这个状态是对的,kubelet 等待 kubeadm 发号指令。
systemctl status kubelet

\n

2.4 使用kubeadm引导集群

\n
    \n
  • 下载各个机器需要的镜像,三台机器都要安装
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 配置镜像,生成 images.sh
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF

# 拉取镜像
chmod +x ./images.sh && ./images.sh
\n
    \n
  • 使用docker images 查看
  • \n
\n

\"image-20230406144630834\"

\n

2.5 初始化主节点,即把看 k8s-master 变为主节点

\n
    \n
  • 三台机器上执行
  • \n
\n
1
2
3
# 所有机器添加 master 域名映射,以下 IP 为 master 的 IP;
# 访问 k8s-master 即 访问 192.168.1.135
echo "192.168.1.135 k8s-master" >> /etc/hosts
\n
    \n
  • master节点上执行
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
# 主节点初始化 (只在 master 服务器执行, 其他 node 不用)
# --apiserver-advertise-address: master 的 IP
# --control-plane-endpoint: master 的域名
# --service-cidr 和 --pod-network-cidr 是网络范围,雷神 建议不要改。要改的话 2 个cidr 和 vps(192.168.x.x) 的,3 个网络互相不能重叠;还要修改 calico.yaml的 IP(下图有写)。
kubeadm init \\
--apiserver-advertise-address=192.168.1.135 \\
--control-plane-endpoint=k8s-master \\
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \\
--kubernetes-version v1.20.9 \\
--service-cidr=10.96.0.0/16 \\
--pod-network-cidr=192.168.0.0/16
\n
    \n
  • 出现这个即成功了
  • \n
\n

\"image-20230406145652752\"

\n

2.5 根据提示继续

\n
    \n
  • master成功后提示
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

kubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\
--discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5 \\
--control-plane

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\
--discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5
\n

To start using your cluster, you need to run the following as a regular user:

\n

要开始使用集群,您需要以普通用户身份运行以下命令(master节点执行):源自上面的提示

\n
1
2
3
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
\n

2.6 安装网络组件(calico)

\n

注:只在 master 服务执行。其他 node 服务器 不用。

\n
    \n
  • 在master上执行
  • \n
\n
1
2
3
4
5
# 下载 calico.yaml
curl https://docs.projectcalico.org/manifests/calico.yaml -O

# 加载配置
kubectl apply -f calico.yaml
\n
    \n
  • 或者(这个更不会出错)
  • \n
\n
1
kubectl apply -f https://docs.projectcalico.org/v3.18/manifests/calico.yaml
\n
    \n
  • 下载完成后生成calico.yaml
  • \n
\n

\"image-20230406150214816\"

\n
    \n
  • 或者安装flannel
  • \n
\n
1
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
\n

注意

\n
1
2
3
如果修改了 初始化主节点中的
--pod-network-cidr=192.168.0.0/16
将 calico.yaml 的配置, # 去掉,IP 写 改的 IP。
\n

2.7 Worker 加入集群

\n
    \n
  • worker节点加入到集群中(源自提示)
  • \n
\n
1
2
kubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\
--discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5
\n
    \n
  • 出现这个即成功
  • \n
\n

\"image-20230406153948047\"

\n

2.8 每次重启需要先启动docker,否则k8s无法启动

\n

2.9 令牌过期

\n
    \n
  • 在master主节点执行
  • \n
\n
1
2
# 重新获取令牌
kubeadm token create --print-join-command
\n

2.10 部署Dashboard

\n\n

2.10.1 运行pod(创建资源)

\n

部署 dashboard(可视化页面), kubernetes 官方提供的可视化界面

\n
    \n
  • 在master上执行,推荐下载到本地导入虚拟机
  • \n
\n
1
2
# 根据 在线配置文件 创建资源
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
\n
1
2
# 本地配置
kubectl apply -f recommended.yaml
\n

2.10.2 设置访问端口

\n
1
2
3
4
5
# 修改配置文件 找到 type,将 ClusterIP 改成 NodePort
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

# 找到端口,在安全组放行
kubectl get svc -A |grep kubernetes-dashboard
\n

\"image-20230406155958282\"

\n

\"image-20230406161329065\"

\n

32499即为访问端口,以后只需要使用任一节点的ip+32499即可访问

\n

https://192.168.1.135:32499 (要注意是 https,port 是映射的端口,在配置文件查看)

\n

3 疑难杂症

\n

3.1 删除现有的dashboard服务

\n
1
kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard
\n
    \n
  • 根据yaml来删除
  • \n
\n
1
kubectl delete -f recommended.yaml 
\n
    \n
  • 若资源下载不下来,则直接本地导入recommended.yaml ,下载地址如下
  • \n
\n

https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml

\n
    \n
  • 执行:
  • \n
\n
1
kubectl apply -f recommended.yaml
\n

3.2 dashboard启动失败(无法访问)

\n

修改了 NodePort 后,Pod kubernetes-dashboard 起不来了。(环境:虚拟机)

\n
1
2
# 查看日志
kubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-658485d5c7-f89v7
\n

\"image.png\"

\n

解决思路

\n
1
2
1、将 dashboard 部署到 master上,因为 master 刚安装了网络组件
2、让 工作节点 也能访问 apiServer
\n

方案1

\n
    \n
  • 先卸载原来的 dashboard
  • \n
\n
1
2
# 无法访问,查看 部署到 哪个 node 上了, 将 dashboard 部署到 master 上
kubectl get pods -A -o wide
\n

\"image-20230407113313033\"

\n
1
# 修改 recommended.yaml,添加下面
\n

\"image.png\"

\n

\"image.png\"

\n
1
2
3
4
5
6
7
# 重新安装 dashboard

# 修改配置文件 找到 type,将 ClusterIP 改成 NodePort
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

# 找到端口,在安全组放行
kubectl get svc -A |grep kubernetes-dashboard
\n
    \n
  • 创建访问账号
  • \n
\n
1
2
#创建访问账号,准备一个yaml文件
vim dash-usr.yaml
\n
    \n
  • 文件内容如下
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
\n
1
kubectl apply -f dash-usr.yaml
\n
    \n
  • 令牌访问
  • \n
\n
1
2
#获取访问令牌
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
\n

\"image-20230407135656881\"

\n
1
eyJhbGciOiJSUzI1NiIsImtpZCI6IkZkbV91WkVqTnp3clZLd29JS1FYUWxURzZyd0FLcnpVQzBtRlRMTmpya0UifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTVrbGtrIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiNWVhYjQ2MS0xNjE1LTQ5ZTQtYTAzNC0wY2MxYWM1YTI5ODkiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.eum4COcUzn6wt_vOpCUUEiNENzeGUTC_ZlKeB8d0IplFlZWrAav3RbqV5LMDRRIyyZ-7csJb3COhFEiCRtlkc9MM60od4IRMscNxv_tm11A32pmGn9eFERyaYjKUFBHZfF34jPcsjYqU50TDn6wykI_B6r9ZzvpJemR-wqF2y-GBvmz8q19D9q5zlhaE9gmmvksEx-D0ZyOeZo4tMdbD757OdTjgzlYhmTpfTs-Z8-sdKWnHGFCYbAPzrEgMgChcIjlyDle9-JaE1WCosGCA73xsBzXNnkvYC7YB_tagX4BhGDZEu4eyRNbgCAqO6of6QnvDXvlesd59IU-WMVE-7Q
\n
    \n
  • 将令牌复制到token处
  • \n
\n

\"image-20230407140527932\"

\n
    \n
  • 登录成功
  • \n
\n

\"image-20230407140620636\"

\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":8598,"excerpt":"","more":"

本文参考:https://zhuanlan.zhihu.com/p/558014199?utm_id=0

\n

1. 安装Docker

\n

1.1 安装docker 20.10.7

\n

注意 Docker 版本,要和 Kubernetes 版本 有对应关系

\n
    \n
  • 三台机器上执行
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 安装/更新 yum-utils
yum install -y yum-utils

# 配置 yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 docker 20.10.7 版本
yum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io

# 查看 docker 版本
docker -v

# 启动 docker
systemctl start docker

# 设置开机自启
systemctl enable docker

# 查看 docker 是否成功, 有 Client 和 Server 即成功
docker version
\n

1.2 配置加速镜像

\n
    \n
  • 三台机器上执行
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
# 重启docker的后台线程
sudo systemctl daemon-reload
# 重启docker服务
sudo systemctl restart docker

# 查看是否配置成功
docker info
\n

2. 安装Kubernetes

\n
    \n
  • 每台机器2GB或者更多的RAM(如果少于这个数字 将会影响应用的运行内存)
  • \n
  • CPU2核以上
  • \n
  • 集群中所有的服务器的网络彼此可以相互连接。
  • \n
\n

关闭防火墙

\n
1
2
systemctl stop firewalld NetworkManager
systemctl disable firewalld NetworkManager
\n

2.1 设置hostname

\n
1
2
3
4
5
6
7
8
9
10
# 查看主机名
hostname

# 设置主机名
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2

# 更新
bash
\n

2.2 关闭交换区

\n
    \n
  • 三台机器上执行
  • \n
  • 下面是一些安全设置
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查看 交换分区
free -m

# 将 SELinux 设置为 permissive 模式(相当于将其禁用) 第一行是临时禁用,第二行是永久禁用
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# 关闭swap;第一行是临时禁用,第二行是永久禁用
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 允许 iptables 检查桥接流量 (K8s 官方要求)
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 让配置生效
sysctl --system
\n

2.3 安装K8S三大件

\n

安装 kubelet、kebeadm、kubectl;注意版本 (1.20.9)

\n
    \n
  • 三台机器上执行
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
# 配置 k8s 的 yum 源地址
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
\n
1
2
3
4
5
6
7
8
9
# 安装 kubelet、kubeadm、kubectl
yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes

# 启动kubelet
systemctl enable --now kubelet

# 查看 kubelet 状态:一会停止 一会运行。 这个状态是对的,kubelet 等待 kubeadm 发号指令。
systemctl status kubelet

\n

2.4 使用kubeadm引导集群

\n
    \n
  • 下载各个机器需要的镜像,三台机器都要安装
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 配置镜像,生成 images.sh
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF

# 拉取镜像
chmod +x ./images.sh && ./images.sh
\n
    \n
  • 使用docker images 查看
  • \n
\n

\"image-20230406144630834\"

\n

2.5 初始化主节点,即把看 k8s-master 变为主节点

\n
    \n
  • 三台机器上执行
  • \n
\n
1
2
3
# 所有机器添加 master 域名映射,以下 IP 为 master 的 IP;
# 访问 k8s-master 即 访问 192.168.1.135
echo "192.168.1.135 k8s-master" >> /etc/hosts
\n
    \n
  • master节点上执行
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
# 主节点初始化 (只在 master 服务器执行, 其他 node 不用)
# --apiserver-advertise-address: master 的 IP
# --control-plane-endpoint: master 的域名
# --service-cidr 和 --pod-network-cidr 是网络范围,雷神 建议不要改。要改的话 2 个cidr 和 vps(192.168.x.x) 的,3 个网络互相不能重叠;还要修改 calico.yaml的 IP(下图有写)。
kubeadm init \\
--apiserver-advertise-address=192.168.1.135 \\
--control-plane-endpoint=k8s-master \\
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \\
--kubernetes-version v1.20.9 \\
--service-cidr=10.96.0.0/16 \\
--pod-network-cidr=192.168.0.0/16
\n
    \n
  • 出现这个即成功了
  • \n
\n

\"image-20230406145652752\"

\n

2.5 根据提示继续

\n
    \n
  • master成功后提示
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

kubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\
--discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5 \\
--control-plane

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\
--discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5
\n

To start using your cluster, you need to run the following as a regular user:

\n

要开始使用集群,您需要以普通用户身份运行以下命令(master节点执行):源自上面的提示

\n
1
2
3
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
\n

2.6 安装网络组件(calico)

\n

注:只在 master 服务执行。其他 node 服务器 不用。

\n
    \n
  • 在master上执行
  • \n
\n
1
2
3
4
5
# 下载 calico.yaml
curl https://docs.projectcalico.org/manifests/calico.yaml -O

# 加载配置
kubectl apply -f calico.yaml
\n
    \n
  • 或者(这个更不会出错)
  • \n
\n
1
kubectl apply -f https://docs.projectcalico.org/v3.18/manifests/calico.yaml
\n
    \n
  • 下载完成后生成calico.yaml
  • \n
\n

\"image-20230406150214816\"

\n
    \n
  • 或者安装flannel
  • \n
\n
1
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
\n

注意

\n
1
2
3
如果修改了 初始化主节点中的
--pod-network-cidr=192.168.0.0/16
将 calico.yaml 的配置, # 去掉,IP 写 改的 IP。
\n

2.7 Worker 加入集群

\n
    \n
  • worker节点加入到集群中(源自提示)
  • \n
\n
1
2
kubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\
--discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5
\n
    \n
  • 出现这个即成功
  • \n
\n

\"image-20230406153948047\"

\n

2.8 每次重启需要先启动docker,否则k8s无法启动

\n

2.9 令牌过期

\n
    \n
  • 在master主节点执行
  • \n
\n
1
2
# 重新获取令牌
kubeadm token create --print-join-command
\n

2.10 部署Dashboard

\n\n

2.10.1 运行pod(创建资源)

\n

部署 dashboard(可视化页面), kubernetes 官方提供的可视化界面

\n
    \n
  • 在master上执行,推荐下载到本地导入虚拟机
  • \n
\n
1
2
# 根据 在线配置文件 创建资源
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
\n
1
2
# 本地配置
kubectl apply -f recommended.yaml
\n

2.10.2 设置访问端口

\n
1
2
3
4
5
# 修改配置文件 找到 type,将 ClusterIP 改成 NodePort
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

# 找到端口,在安全组放行
kubectl get svc -A |grep kubernetes-dashboard
\n

\"image-20230406155958282\"

\n

\"image-20230406161329065\"

\n

32499即为访问端口,以后只需要使用任一节点的ip+32499即可访问

\n

https://192.168.1.135:32499 (要注意是 https,port 是映射的端口,在配置文件查看)

\n

3 疑难杂症

\n

3.1 删除现有的dashboard服务

\n
1
kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard
\n
    \n
  • 根据yaml来删除
  • \n
\n
1
kubectl delete -f recommended.yaml 
\n
    \n
  • 若资源下载不下来,则直接本地导入recommended.yaml ,下载地址如下
  • \n
\n

https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml

\n
    \n
  • 执行:
  • \n
\n
1
kubectl apply -f recommended.yaml
\n

3.2 dashboard启动失败(无法访问)

\n

修改了 NodePort 后,Pod kubernetes-dashboard 起不来了。(环境:虚拟机)

\n
1
2
# 查看日志
kubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-658485d5c7-f89v7
\n

\"image.png\"

\n

解决思路

\n
1
2
1、将 dashboard 部署到 master上,因为 master 刚安装了网络组件
2、让 工作节点 也能访问 apiServer
\n

方案1

\n
    \n
  • 先卸载原来的 dashboard
  • \n
\n
1
2
# 无法访问,查看 部署到 哪个 node 上了, 将 dashboard 部署到 master 上
kubectl get pods -A -o wide
\n

\"image-20230407113313033\"

\n
1
# 修改 recommended.yaml,添加下面
\n

\"image.png\"

\n

\"image.png\"

\n
1
2
3
4
5
6
7
# 重新安装 dashboard

# 修改配置文件 找到 type,将 ClusterIP 改成 NodePort
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

# 找到端口,在安全组放行
kubectl get svc -A |grep kubernetes-dashboard
\n
    \n
  • 创建访问账号
  • \n
\n
1
2
#创建访问账号,准备一个yaml文件
vim dash-usr.yaml
\n
    \n
  • 文件内容如下
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
\n
1
kubectl apply -f dash-usr.yaml
\n
    \n
  • 令牌访问
  • \n
\n
1
2
#获取访问令牌
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
\n

\"image-20230407135656881\"

\n
1
eyJhbGciOiJSUzI1NiIsImtpZCI6IkZkbV91WkVqTnp3clZLd29JS1FYUWxURzZyd0FLcnpVQzBtRlRMTmpya0UifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTVrbGtrIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiNWVhYjQ2MS0xNjE1LTQ5ZTQtYTAzNC0wY2MxYWM1YTI5ODkiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.eum4COcUzn6wt_vOpCUUEiNENzeGUTC_ZlKeB8d0IplFlZWrAav3RbqV5LMDRRIyyZ-7csJb3COhFEiCRtlkc9MM60od4IRMscNxv_tm11A32pmGn9eFERyaYjKUFBHZfF34jPcsjYqU50TDn6wykI_B6r9ZzvpJemR-wqF2y-GBvmz8q19D9q5zlhaE9gmmvksEx-D0ZyOeZo4tMdbD757OdTjgzlYhmTpfTs-Z8-sdKWnHGFCYbAPzrEgMgChcIjlyDle9-JaE1WCosGCA73xsBzXNnkvYC7YB_tagX4BhGDZEu4eyRNbgCAqO6of6QnvDXvlesd59IU-WMVE-7Q
\n
    \n
  • 将令牌复制到token处
  • \n
\n

\"image-20230407140527932\"

\n
    \n
  • 登录成功
  • \n
\n

\"image-20230407140620636\"

\n"},{"title":"Linux 系统字体安装","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3057738919%2C1244255327%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"Linux,安装,字体","swiper_index":3,"abbrlink":"2de821dc","date":"2023-08-09T11:48:15.000Z","_content":"\n{% note info simple %}在安装之前可以先使用命令 `fc-list :lang=zh` 查看已经安装的中文字体,最后安装后还使用该命令查看新安装的字体{% endnote %}\n\n\n## 1、创建目录\n\n- 在Linux中创建目录 `/usr/share/fonts/myfonts`\n\n## 2、拷贝字体\n\n- 将Windows下的字体拷贝到`myfonts`目录中。\n Windows 中的字体在目录 `C:\\Windows\\Fonts` 中,选择你需要的字体拷贝。\n\n![img.png](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230809195344.png)\n\n## 3、目录权限设置\n\n- 为myfonts目录设置权限\n\n```bash\nchmod 755 myfonts\n```\n\n## 4、安装字体索引指令\n\n- 在centos上,使用如下命令进行安装\n\n```bash\nyum install -y fontconfig mkfontscale\n```\n\n- 在ubuntu上,使用如下命令进行安装\n\n```bash\nsudo apt-get -y install fontconfig xfonts-utils\n```\n\n## 5、建立字体索引信息更新字体缓存\n\n- 进入`myfonts`目录安装字体,建立索引更新缓存\n\n```bash\ncd /usr/share/fonts/myfonts\nmkfontscale && mkfontdir && fc-cache -fv\n```\n\n## 6、验证结果\n\n- 验证字体是否安装成功\n\n```clike\nfc-list :lang=zh\n```\n","source":"_posts/Linux 系统字体安装.md","raw":"---\ntitle: Linux 系统字体安装\ncover: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3057738919%2C1244255327%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG'\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'Linux,安装,字体'\ncategories:\n - Linux\ntags:\n - Linux\n - 安装\nswiper_index: 3\nabbrlink: 2de821dc\ndate: 2023-08-09 19:48:15\n---\n\n{% note info simple %}在安装之前可以先使用命令 `fc-list :lang=zh` 查看已经安装的中文字体,最后安装后还使用该命令查看新安装的字体{% endnote %}\n\n\n## 1、创建目录\n\n- 在Linux中创建目录 `/usr/share/fonts/myfonts`\n\n## 2、拷贝字体\n\n- 将Windows下的字体拷贝到`myfonts`目录中。\n Windows 中的字体在目录 `C:\\Windows\\Fonts` 中,选择你需要的字体拷贝。\n\n![img.png](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230809195344.png)\n\n## 3、目录权限设置\n\n- 为myfonts目录设置权限\n\n```bash\nchmod 755 myfonts\n```\n\n## 4、安装字体索引指令\n\n- 在centos上,使用如下命令进行安装\n\n```bash\nyum install -y fontconfig mkfontscale\n```\n\n- 在ubuntu上,使用如下命令进行安装\n\n```bash\nsudo apt-get -y install fontconfig xfonts-utils\n```\n\n## 5、建立字体索引信息更新字体缓存\n\n- 进入`myfonts`目录安装字体,建立索引更新缓存\n\n```bash\ncd /usr/share/fonts/myfonts\nmkfontscale && mkfontdir && fc-cache -fv\n```\n\n## 6、验证结果\n\n- 验证字体是否安装成功\n\n```clike\nfc-list :lang=zh\n```\n","slug":"Linux 系统字体安装","published":1,"updated":"2023-10-24T08:38:20.901Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5ve000mfc3u4p0g0l1z","content":"

在安装之前可以先使用命令 fc-list :lang=zh 查看已经安装的中文字体,最后安装后还使用该命令查看新安装的字体

\n
\n

1、创建目录

\n
    \n
  • 在Linux中创建目录 /usr/share/fonts/myfonts
  • \n
\n

2、拷贝字体

\n
    \n
  • 将Windows下的字体拷贝到myfonts目录中。
    \nWindows 中的字体在目录 C:\\Windows\\Fonts 中,选择你需要的字体拷贝。
  • \n
\n

\"img.png\"

\n

3、目录权限设置

\n
    \n
  • 为myfonts目录设置权限
  • \n
\n
1
chmod 755 myfonts
\n

4、安装字体索引指令

\n
    \n
  • 在centos上,使用如下命令进行安装
  • \n
\n
1
yum install -y fontconfig mkfontscale
\n
    \n
  • 在ubuntu上,使用如下命令进行安装
  • \n
\n
1
sudo apt-get -y install fontconfig xfonts-utils
\n

5、建立字体索引信息更新字体缓存

\n
    \n
  • 进入myfonts目录安装字体,建立索引更新缓存
  • \n
\n
1
2
cd /usr/share/fonts/myfonts
mkfontscale && mkfontdir && fc-cache -fv
\n

6、验证结果

\n
    \n
  • 验证字体是否安装成功
  • \n
\n
1
fc-list :lang=zh
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":488,"excerpt":"","more":"

在安装之前可以先使用命令 fc-list :lang=zh 查看已经安装的中文字体,最后安装后还使用该命令查看新安装的字体

\n
\n

1、创建目录

\n
    \n
  • 在Linux中创建目录 /usr/share/fonts/myfonts
  • \n
\n

2、拷贝字体

\n
    \n
  • 将Windows下的字体拷贝到myfonts目录中。
    \nWindows 中的字体在目录 C:\\Windows\\Fonts 中,选择你需要的字体拷贝。
  • \n
\n

\"img.png\"

\n

3、目录权限设置

\n
    \n
  • 为myfonts目录设置权限
  • \n
\n
1
chmod 755 myfonts
\n

4、安装字体索引指令

\n
    \n
  • 在centos上,使用如下命令进行安装
  • \n
\n
1
yum install -y fontconfig mkfontscale
\n
    \n
  • 在ubuntu上,使用如下命令进行安装
  • \n
\n
1
sudo apt-get -y install fontconfig xfonts-utils
\n

5、建立字体索引信息更新字体缓存

\n
    \n
  • 进入myfonts目录安装字体,建立索引更新缓存
  • \n
\n
1
2
cd /usr/share/fonts/myfonts
mkfontscale && mkfontdir && fc-cache -fv
\n

6、验证结果

\n
    \n
  • 验证字体是否安装成功
  • \n
\n
1
fc-list :lang=zh
\n"},{"title":"Linux上Pandoc的使用","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/QQ%E6%88%AA%E5%9B%BE20230819015436.png","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"Linux,安装,centos","swiper_index":3,"abbrlink":"557acb69","date":"2023-08-09T10:25:15.000Z","_content":"\n{% note info simple %}如果你需要在不同的文件格式之间相互转换,多半听说或使用过文档转换的瑞士军刀——Pandoc。事实上,不仅人类知道 Pandoc,最近很火的人工智能 ChatGPT 也知道「将 Markdown 转换为 docx」,首选方案是使用 Pandoc。{% endnote %}\n{% link Pandoc 官网, https://www.pandoc.org/, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/%E8%B7%AF%E5%BE%84.svg %}\n\n\n## 1 安装\n- 下载压缩包\n```BASH\nwget https://github.com/jgm/pandoc/releases/download/2.14.0.3/pandoc-2.14.0.3-linux-amd64.tar.gz\n```\n\n- 解压\n```BASH\ntar -xvf pandoc-2.14.0.3-linux-amd64.tar.gz\n```\n\n- 建立软链接\n```BASH\nln -s /root/pandoc-2.14.0.3/bin/pandoc /usr/bin/pandoc\n```\n\n- latex引擎安装\n```BASH\nyum install texlive-xetex\n```\n\n- 查看版本\n```BASH\npandoc -v \n```\n\n## 2 使用\n{% tip success %}To see the output created by each of the commands below, click on the name of the output file:\n{% endtip %}\n\n- HTML fragment\n```BASH\npandoc MANUAL.txt -o example1.html\n```\n\n- Standalone HTML file\n```BASH\npandoc -s MANUAL.txt -o example2.html\n```\n\n- HTML with table of contents, CSS, and custom footer\n```BASH\npandoc -s --toc -c pandoc.css -A footer.html MANUAL.txt -o example3.html\n```\n- LaTeX\n```BASH\npandoc -s MANUAL.txt -o example4.tex\n```\n- From LaTeX to markdown\n```BASH\npandoc -s example4.tex -o example5.text\n```\n- reStructuredText\n```BASH\npandoc -s -t rst --toc MANUAL.txt -o example6.text\n```\n- Rich text format (RTF)\n```BASH\npandoc -s MANUAL.txt -o example7.rtf\n```\n- Beamer slide show\n```BASH\npandoc -t beamer SLIDES -o example8.pdf\n```\n- DocBook XML\n```BASH\npandoc -s -t docbook MANUAL.txt -o example9.db\n```\n- Man page\n```BASH\npandoc -s -t man pandoc.1.md -o example10.1\n```\n- ConTeXt\n```BASH\npandoc -s -t context MANUAL.txt -o example11.tex\n```\n- Converting a web page to markdown\n```BASH\npandoc -s -r html http://www.gnu.org/software/make/ -o example12.text\n```\n- From markdown to PDF\n```BASH\npandoc MANUAL.txt --pdf-engine=xelatex -o example13.pdf\n```\n- PDF with numbered sections and a custom LaTeX header\n```BASH\npandoc -N --variable \"geometry=margin=1.2in\" --variable mainfont=\"Palatino\" --variable sansfont=\"Helvetica\" --variable monofont=\"Menlo\" --variable fontsize=12pt --variable version=2.0 MANUAL.txt --include-in-header fancyheaders.tex --pdf-engine=lualatex --toc -o example14.pdf\n```\n- ipynb (Jupyter notebook)\n```BASH\npandoc example15.md -o example15.ipynb\n```\n- HTML slide shows\n```BASH\npandoc -s --mathml -i -t dzslides SLIDES -o example16a.html\n\npandoc -s --webtex -i -t slidy SLIDES -o example16b.html\n\npandoc -s --mathjax -i -t revealjs SLIDES -o example16d.html\n```\n- TeX math in HTML\n```BASH\npandoc math.text -s -o mathDefault.html\n\npandoc math.text -s --mathml -o mathMathML.html\n\npandoc math.text -s --webtex -o mathWebTeX.html\n\npandoc math.text -s --mathjax -o mathMathJax.html\n\npandoc math.text -s --katex -o mathKaTeX.html\n```\n- Syntax highlighting of delimited code blocks\n```BASH\npandoc code.text -s --highlight-style pygments -o example18a.html\n\npandoc code.text -s --highlight-style kate -o example18b.html\n\npandoc code.text -s --highlight-style monochrome -o example18c.html\n\npandoc code.text -s --highlight-style espresso -o example18d.html\n\npandoc code.text -s --highlight-style haddock -o example18e.html\n\npandoc code.text -s --highlight-style tango -o example18f.html\n\npandoc code.text -s --highlight-style zenburn -o example18g.html\n```\n- GNU Texinfo\n```BASH\npandoc MANUAL.txt -s -o example19.texi\n```\n- OpenDocument XML\n```BASH\npandoc MANUAL.txt -s -t opendocument -o example20.xml\n```\n- ODT (OpenDocument Text, readable by OpenOffice)\n```BASH\npandoc MANUAL.txt -o example21.odt\n```\n- MediaWiki markup\n```BASH\npandoc -s -t mediawiki --toc MANUAL.txt -o example22.wiki\n```\n- EPUB ebook\n```BASH\npandoc MANUAL.txt -o MANUAL.epub\n```\n- Markdown citations\n```BASH\npandoc -s --bibliography biblio.bib --citeproc CITATIONS -o example24a.html\n\npandoc -s --bibliography biblio.json --citeproc --csl chicago-fullnote-bibliography.csl CITATIONS -o example24b.html\n\npandoc -s --bibliography biblio.yaml --citeproc --csl ieee.csl CITATIONS -t man -o example24c.1\n```\n- Textile writer\n```BASH\npandoc -s MANUAL.txt -t textile -o example25.textile\n```\n- Textile reader\n```BASH\npandoc -s example25.textile -f textile -t html -o example26.html\n```\n- Org-mode\n```BASH\npandoc -s MANUAL.txt -o example27.org\n```\n- AsciiDoc\n```BASH\npandoc -s MANUAL.txt -t asciidoc -o example28.txt\n```\n- Word docx\n```BASH\npandoc -s MANUAL.txt -o example29.docx\n```\n- LaTeX math to docx\n```BASH\npandoc -s math.tex -o example30.docx\n```\n- DocBook to markdown\n```BASH\npandoc -f docbook -t markdown -s howto.xml -o example31.text\n```\n- MediaWiki to html5\n```BASH\npandoc -f mediawiki -t html5 -s haskell.wiki -o example32.html\n```\n- Chunked HTML\n```BASH\npandoc -t chunkedhtml --split-level=2 --toc --toc-depth=2 --number-sections -o example33 MANUAL.txt\n```\n- Docx with a reference docx\n```BASH\npandoc --reference-doc twocolumns.docx -o UsersGuide.docx MANUAL.txt\n```\n- Docx to markdown, including math\n```BASH\npandoc -s example30.docx -t markdown -o example35.md\n```\n- EPUB to plain text\n```BASH\npandoc MANUAL.epub -t plain -o example36.text\n```\n- Using a template to produce a table from structured data\n```BASH\npandoc fishwatch.yaml -t rst --template fishtable.rst -o fish.rst # see also the partial species.rst\n```\n- Converting a bibliography from BibTeX to CSL JSON\n```BASH\npandoc biblio.bib -t csljson -o biblio2.json\n```\n- Producing a formatted version of a bibliography\n```BASH\npandoc biblio.bib --citeproc --csl ieee.csl -s -o biblio.html\n```\n\n## 3 中文乱码问题\n\n中文乱码问题,大多与字体有关,解决方案详见文章\n{% link Linux 系统字体安装, https://tankenqi.cn/posts/2de821dc/, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20201027105140931.png %}\n\n","source":"_posts/Linux上Pandoc的使用.md","raw":"---\ntitle: Linux上Pandoc的使用\ncover: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/QQ%E6%88%AA%E5%9B%BE20230819015436.png'\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'Linux,安装,centos'\ncategories:\n - Linux\ntags:\n - Linux\n - Pandoc\n - 软件安装\nswiper_index: 3\nabbrlink: 557acb69\ndate: 2023-08-09 18:25:15\n---\n\n{% note info simple %}如果你需要在不同的文件格式之间相互转换,多半听说或使用过文档转换的瑞士军刀——Pandoc。事实上,不仅人类知道 Pandoc,最近很火的人工智能 ChatGPT 也知道「将 Markdown 转换为 docx」,首选方案是使用 Pandoc。{% endnote %}\n{% link Pandoc 官网, https://www.pandoc.org/, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/%E8%B7%AF%E5%BE%84.svg %}\n\n\n## 1 安装\n- 下载压缩包\n```BASH\nwget https://github.com/jgm/pandoc/releases/download/2.14.0.3/pandoc-2.14.0.3-linux-amd64.tar.gz\n```\n\n- 解压\n```BASH\ntar -xvf pandoc-2.14.0.3-linux-amd64.tar.gz\n```\n\n- 建立软链接\n```BASH\nln -s /root/pandoc-2.14.0.3/bin/pandoc /usr/bin/pandoc\n```\n\n- latex引擎安装\n```BASH\nyum install texlive-xetex\n```\n\n- 查看版本\n```BASH\npandoc -v \n```\n\n## 2 使用\n{% tip success %}To see the output created by each of the commands below, click on the name of the output file:\n{% endtip %}\n\n- HTML fragment\n```BASH\npandoc MANUAL.txt -o example1.html\n```\n\n- Standalone HTML file\n```BASH\npandoc -s MANUAL.txt -o example2.html\n```\n\n- HTML with table of contents, CSS, and custom footer\n```BASH\npandoc -s --toc -c pandoc.css -A footer.html MANUAL.txt -o example3.html\n```\n- LaTeX\n```BASH\npandoc -s MANUAL.txt -o example4.tex\n```\n- From LaTeX to markdown\n```BASH\npandoc -s example4.tex -o example5.text\n```\n- reStructuredText\n```BASH\npandoc -s -t rst --toc MANUAL.txt -o example6.text\n```\n- Rich text format (RTF)\n```BASH\npandoc -s MANUAL.txt -o example7.rtf\n```\n- Beamer slide show\n```BASH\npandoc -t beamer SLIDES -o example8.pdf\n```\n- DocBook XML\n```BASH\npandoc -s -t docbook MANUAL.txt -o example9.db\n```\n- Man page\n```BASH\npandoc -s -t man pandoc.1.md -o example10.1\n```\n- ConTeXt\n```BASH\npandoc -s -t context MANUAL.txt -o example11.tex\n```\n- Converting a web page to markdown\n```BASH\npandoc -s -r html http://www.gnu.org/software/make/ -o example12.text\n```\n- From markdown to PDF\n```BASH\npandoc MANUAL.txt --pdf-engine=xelatex -o example13.pdf\n```\n- PDF with numbered sections and a custom LaTeX header\n```BASH\npandoc -N --variable \"geometry=margin=1.2in\" --variable mainfont=\"Palatino\" --variable sansfont=\"Helvetica\" --variable monofont=\"Menlo\" --variable fontsize=12pt --variable version=2.0 MANUAL.txt --include-in-header fancyheaders.tex --pdf-engine=lualatex --toc -o example14.pdf\n```\n- ipynb (Jupyter notebook)\n```BASH\npandoc example15.md -o example15.ipynb\n```\n- HTML slide shows\n```BASH\npandoc -s --mathml -i -t dzslides SLIDES -o example16a.html\n\npandoc -s --webtex -i -t slidy SLIDES -o example16b.html\n\npandoc -s --mathjax -i -t revealjs SLIDES -o example16d.html\n```\n- TeX math in HTML\n```BASH\npandoc math.text -s -o mathDefault.html\n\npandoc math.text -s --mathml -o mathMathML.html\n\npandoc math.text -s --webtex -o mathWebTeX.html\n\npandoc math.text -s --mathjax -o mathMathJax.html\n\npandoc math.text -s --katex -o mathKaTeX.html\n```\n- Syntax highlighting of delimited code blocks\n```BASH\npandoc code.text -s --highlight-style pygments -o example18a.html\n\npandoc code.text -s --highlight-style kate -o example18b.html\n\npandoc code.text -s --highlight-style monochrome -o example18c.html\n\npandoc code.text -s --highlight-style espresso -o example18d.html\n\npandoc code.text -s --highlight-style haddock -o example18e.html\n\npandoc code.text -s --highlight-style tango -o example18f.html\n\npandoc code.text -s --highlight-style zenburn -o example18g.html\n```\n- GNU Texinfo\n```BASH\npandoc MANUAL.txt -s -o example19.texi\n```\n- OpenDocument XML\n```BASH\npandoc MANUAL.txt -s -t opendocument -o example20.xml\n```\n- ODT (OpenDocument Text, readable by OpenOffice)\n```BASH\npandoc MANUAL.txt -o example21.odt\n```\n- MediaWiki markup\n```BASH\npandoc -s -t mediawiki --toc MANUAL.txt -o example22.wiki\n```\n- EPUB ebook\n```BASH\npandoc MANUAL.txt -o MANUAL.epub\n```\n- Markdown citations\n```BASH\npandoc -s --bibliography biblio.bib --citeproc CITATIONS -o example24a.html\n\npandoc -s --bibliography biblio.json --citeproc --csl chicago-fullnote-bibliography.csl CITATIONS -o example24b.html\n\npandoc -s --bibliography biblio.yaml --citeproc --csl ieee.csl CITATIONS -t man -o example24c.1\n```\n- Textile writer\n```BASH\npandoc -s MANUAL.txt -t textile -o example25.textile\n```\n- Textile reader\n```BASH\npandoc -s example25.textile -f textile -t html -o example26.html\n```\n- Org-mode\n```BASH\npandoc -s MANUAL.txt -o example27.org\n```\n- AsciiDoc\n```BASH\npandoc -s MANUAL.txt -t asciidoc -o example28.txt\n```\n- Word docx\n```BASH\npandoc -s MANUAL.txt -o example29.docx\n```\n- LaTeX math to docx\n```BASH\npandoc -s math.tex -o example30.docx\n```\n- DocBook to markdown\n```BASH\npandoc -f docbook -t markdown -s howto.xml -o example31.text\n```\n- MediaWiki to html5\n```BASH\npandoc -f mediawiki -t html5 -s haskell.wiki -o example32.html\n```\n- Chunked HTML\n```BASH\npandoc -t chunkedhtml --split-level=2 --toc --toc-depth=2 --number-sections -o example33 MANUAL.txt\n```\n- Docx with a reference docx\n```BASH\npandoc --reference-doc twocolumns.docx -o UsersGuide.docx MANUAL.txt\n```\n- Docx to markdown, including math\n```BASH\npandoc -s example30.docx -t markdown -o example35.md\n```\n- EPUB to plain text\n```BASH\npandoc MANUAL.epub -t plain -o example36.text\n```\n- Using a template to produce a table from structured data\n```BASH\npandoc fishwatch.yaml -t rst --template fishtable.rst -o fish.rst # see also the partial species.rst\n```\n- Converting a bibliography from BibTeX to CSL JSON\n```BASH\npandoc biblio.bib -t csljson -o biblio2.json\n```\n- Producing a formatted version of a bibliography\n```BASH\npandoc biblio.bib --citeproc --csl ieee.csl -s -o biblio.html\n```\n\n## 3 中文乱码问题\n\n中文乱码问题,大多与字体有关,解决方案详见文章\n{% link Linux 系统字体安装, https://tankenqi.cn/posts/2de821dc/, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20201027105140931.png %}\n\n","slug":"Linux上Pandoc的使用","published":1,"updated":"2023-10-22T04:53:40.814Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5vf000ofc3u1tple09c","content":"

如果你需要在不同的文件格式之间相互转换,多半听说或使用过文档转换的瑞士军刀——Pandoc。事实上,不仅人类知道 Pandoc,最近很火的人工智能 ChatGPT 也知道「将 Markdown 转换为 docx」,首选方案是使用 Pandoc。

\n
\n\n

1 安装

\n
    \n
  • 下载压缩包
  • \n
\n
1
wget https://github.com/jgm/pandoc/releases/download/2.14.0.3/pandoc-2.14.0.3-linux-amd64.tar.gz
\n
    \n
  • 解压
  • \n
\n
1
tar -xvf pandoc-2.14.0.3-linux-amd64.tar.gz
\n
    \n
  • 建立软链接
  • \n
\n
1
ln -s /root/pandoc-2.14.0.3/bin/pandoc /usr/bin/pandoc
\n
    \n
  • latex引擎安装
  • \n
\n
1
yum install texlive-xetex
\n
    \n
  • 查看版本
  • \n
\n
1
pandoc -v 
\n

2 使用

\n

To see the output created by each of the commands below, click on the name of the output file:

\n
\n
    \n
  • HTML fragment
  • \n
\n
1
pandoc MANUAL.txt -o example1.html
\n
    \n
  • Standalone HTML file
  • \n
\n
1
pandoc -s MANUAL.txt -o example2.html
\n
    \n
  • HTML with table of contents, CSS, and custom footer
  • \n
\n
1
pandoc -s --toc -c pandoc.css -A footer.html MANUAL.txt -o example3.html
\n
    \n
  • LaTeX
  • \n
\n
1
pandoc -s MANUAL.txt -o example4.tex
\n
    \n
  • From LaTeX to markdown
  • \n
\n
1
pandoc -s example4.tex -o example5.text
\n
    \n
  • reStructuredText
  • \n
\n
1
pandoc -s -t rst --toc MANUAL.txt -o example6.text
\n
    \n
  • Rich text format (RTF)
  • \n
\n
1
pandoc -s MANUAL.txt -o example7.rtf
\n
    \n
  • Beamer slide show
  • \n
\n
1
pandoc -t beamer SLIDES -o example8.pdf
\n
    \n
  • DocBook XML
  • \n
\n
1
pandoc -s -t docbook MANUAL.txt -o example9.db
\n
    \n
  • Man page
  • \n
\n
1
pandoc -s -t man pandoc.1.md -o example10.1
\n
    \n
  • ConTeXt
  • \n
\n
1
pandoc -s -t context MANUAL.txt -o example11.tex
\n
    \n
  • Converting a web page to markdown
  • \n
\n
1
pandoc -s -r html http://www.gnu.org/software/make/ -o example12.text
\n
    \n
  • From markdown to PDF
  • \n
\n
1
pandoc MANUAL.txt --pdf-engine=xelatex -o example13.pdf
\n
    \n
  • PDF with numbered sections and a custom LaTeX header
  • \n
\n
1
pandoc -N --variable "geometry=margin=1.2in" --variable mainfont="Palatino" --variable sansfont="Helvetica" --variable monofont="Menlo" --variable fontsize=12pt --variable version=2.0 MANUAL.txt --include-in-header fancyheaders.tex --pdf-engine=lualatex --toc -o example14.pdf
\n
    \n
  • ipynb (Jupyter notebook)
  • \n
\n
1
pandoc example15.md -o example15.ipynb
\n
    \n
  • HTML slide shows
  • \n
\n
1
2
3
4
5
pandoc -s --mathml -i -t dzslides SLIDES -o example16a.html

pandoc -s --webtex -i -t slidy SLIDES -o example16b.html

pandoc -s --mathjax -i -t revealjs SLIDES -o example16d.html
\n
    \n
  • TeX math in HTML
  • \n
\n
1
2
3
4
5
6
7
8
9
pandoc math.text -s -o mathDefault.html

pandoc math.text -s --mathml -o mathMathML.html

pandoc math.text -s --webtex -o mathWebTeX.html

pandoc math.text -s --mathjax -o mathMathJax.html

pandoc math.text -s --katex -o mathKaTeX.html
\n
    \n
  • Syntax highlighting of delimited code blocks
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
pandoc code.text -s --highlight-style pygments -o example18a.html

pandoc code.text -s --highlight-style kate -o example18b.html

pandoc code.text -s --highlight-style monochrome -o example18c.html

pandoc code.text -s --highlight-style espresso -o example18d.html

pandoc code.text -s --highlight-style haddock -o example18e.html

pandoc code.text -s --highlight-style tango -o example18f.html

pandoc code.text -s --highlight-style zenburn -o example18g.html
\n
    \n
  • GNU Texinfo
  • \n
\n
1
pandoc MANUAL.txt -s -o example19.texi
\n
    \n
  • OpenDocument XML
  • \n
\n
1
pandoc MANUAL.txt -s -t opendocument -o example20.xml
\n
    \n
  • ODT (OpenDocument Text, readable by OpenOffice)
  • \n
\n
1
pandoc MANUAL.txt -o example21.odt
\n
    \n
  • MediaWiki markup
  • \n
\n
1
pandoc -s -t mediawiki --toc MANUAL.txt -o example22.wiki
\n
    \n
  • EPUB ebook
  • \n
\n
1
pandoc MANUAL.txt -o MANUAL.epub
\n
    \n
  • Markdown citations
  • \n
\n
1
2
3
4
5
pandoc -s --bibliography biblio.bib --citeproc CITATIONS -o example24a.html

pandoc -s --bibliography biblio.json --citeproc --csl chicago-fullnote-bibliography.csl CITATIONS -o example24b.html

pandoc -s --bibliography biblio.yaml --citeproc --csl ieee.csl CITATIONS -t man -o example24c.1
\n
    \n
  • Textile writer
  • \n
\n
1
pandoc -s MANUAL.txt -t textile -o example25.textile
\n
    \n
  • Textile reader
  • \n
\n
1
pandoc -s example25.textile -f textile -t html -o example26.html
\n
    \n
  • Org-mode
  • \n
\n
1
pandoc -s MANUAL.txt -o example27.org
\n
    \n
  • AsciiDoc
  • \n
\n
1
pandoc -s MANUAL.txt -t asciidoc -o example28.txt
\n
    \n
  • Word docx
  • \n
\n
1
pandoc -s MANUAL.txt -o example29.docx
\n
    \n
  • LaTeX math to docx
  • \n
\n
1
pandoc -s math.tex -o example30.docx
\n
    \n
  • DocBook to markdown
  • \n
\n
1
pandoc -f docbook -t markdown -s howto.xml -o example31.text
\n
    \n
  • MediaWiki to html5
  • \n
\n
1
pandoc -f mediawiki -t html5 -s haskell.wiki -o example32.html
\n
    \n
  • Chunked HTML
  • \n
\n
1
pandoc -t chunkedhtml --split-level=2 --toc --toc-depth=2 --number-sections -o example33 MANUAL.txt
\n
    \n
  • Docx with a reference docx
  • \n
\n
1
pandoc --reference-doc twocolumns.docx -o UsersGuide.docx MANUAL.txt
\n
    \n
  • Docx to markdown, including math
  • \n
\n
1
pandoc -s example30.docx -t markdown -o example35.md
\n
    \n
  • EPUB to plain text
  • \n
\n
1
pandoc MANUAL.epub -t plain -o example36.text
\n
    \n
  • Using a template to produce a table from structured data
  • \n
\n
1
pandoc fishwatch.yaml -t rst --template fishtable.rst -o fish.rst # see also the partial species.rst
\n
    \n
  • Converting a bibliography from BibTeX to CSL JSON
  • \n
\n
1
pandoc biblio.bib -t csljson -o biblio2.json
\n
    \n
  • Producing a formatted version of a bibliography
  • \n
\n
1
pandoc biblio.bib --citeproc --csl ieee.csl -s -o biblio.html
\n

3 中文乱码问题

\n

中文乱码问题,大多与字体有关,解决方案详见文章

\n\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":4229,"excerpt":"","more":"

如果你需要在不同的文件格式之间相互转换,多半听说或使用过文档转换的瑞士军刀——Pandoc。事实上,不仅人类知道 Pandoc,最近很火的人工智能 ChatGPT 也知道「将 Markdown 转换为 docx」,首选方案是使用 Pandoc。

\n
\n\n

1 安装

\n
    \n
  • 下载压缩包
  • \n
\n
1
wget https://github.com/jgm/pandoc/releases/download/2.14.0.3/pandoc-2.14.0.3-linux-amd64.tar.gz
\n
    \n
  • 解压
  • \n
\n
1
tar -xvf pandoc-2.14.0.3-linux-amd64.tar.gz
\n
    \n
  • 建立软链接
  • \n
\n
1
ln -s /root/pandoc-2.14.0.3/bin/pandoc /usr/bin/pandoc
\n
    \n
  • latex引擎安装
  • \n
\n
1
yum install texlive-xetex
\n
    \n
  • 查看版本
  • \n
\n
1
pandoc -v 
\n

2 使用

\n

To see the output created by each of the commands below, click on the name of the output file:

\n
\n
    \n
  • HTML fragment
  • \n
\n
1
pandoc MANUAL.txt -o example1.html
\n
    \n
  • Standalone HTML file
  • \n
\n
1
pandoc -s MANUAL.txt -o example2.html
\n
    \n
  • HTML with table of contents, CSS, and custom footer
  • \n
\n
1
pandoc -s --toc -c pandoc.css -A footer.html MANUAL.txt -o example3.html
\n
    \n
  • LaTeX
  • \n
\n
1
pandoc -s MANUAL.txt -o example4.tex
\n
    \n
  • From LaTeX to markdown
  • \n
\n
1
pandoc -s example4.tex -o example5.text
\n
    \n
  • reStructuredText
  • \n
\n
1
pandoc -s -t rst --toc MANUAL.txt -o example6.text
\n
    \n
  • Rich text format (RTF)
  • \n
\n
1
pandoc -s MANUAL.txt -o example7.rtf
\n
    \n
  • Beamer slide show
  • \n
\n
1
pandoc -t beamer SLIDES -o example8.pdf
\n
    \n
  • DocBook XML
  • \n
\n
1
pandoc -s -t docbook MANUAL.txt -o example9.db
\n
    \n
  • Man page
  • \n
\n
1
pandoc -s -t man pandoc.1.md -o example10.1
\n
    \n
  • ConTeXt
  • \n
\n
1
pandoc -s -t context MANUAL.txt -o example11.tex
\n
    \n
  • Converting a web page to markdown
  • \n
\n
1
pandoc -s -r html http://www.gnu.org/software/make/ -o example12.text
\n
    \n
  • From markdown to PDF
  • \n
\n
1
pandoc MANUAL.txt --pdf-engine=xelatex -o example13.pdf
\n
    \n
  • PDF with numbered sections and a custom LaTeX header
  • \n
\n
1
pandoc -N --variable "geometry=margin=1.2in" --variable mainfont="Palatino" --variable sansfont="Helvetica" --variable monofont="Menlo" --variable fontsize=12pt --variable version=2.0 MANUAL.txt --include-in-header fancyheaders.tex --pdf-engine=lualatex --toc -o example14.pdf
\n
    \n
  • ipynb (Jupyter notebook)
  • \n
\n
1
pandoc example15.md -o example15.ipynb
\n
    \n
  • HTML slide shows
  • \n
\n
1
2
3
4
5
pandoc -s --mathml -i -t dzslides SLIDES -o example16a.html

pandoc -s --webtex -i -t slidy SLIDES -o example16b.html

pandoc -s --mathjax -i -t revealjs SLIDES -o example16d.html
\n
    \n
  • TeX math in HTML
  • \n
\n
1
2
3
4
5
6
7
8
9
pandoc math.text -s -o mathDefault.html

pandoc math.text -s --mathml -o mathMathML.html

pandoc math.text -s --webtex -o mathWebTeX.html

pandoc math.text -s --mathjax -o mathMathJax.html

pandoc math.text -s --katex -o mathKaTeX.html
\n
    \n
  • Syntax highlighting of delimited code blocks
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
pandoc code.text -s --highlight-style pygments -o example18a.html

pandoc code.text -s --highlight-style kate -o example18b.html

pandoc code.text -s --highlight-style monochrome -o example18c.html

pandoc code.text -s --highlight-style espresso -o example18d.html

pandoc code.text -s --highlight-style haddock -o example18e.html

pandoc code.text -s --highlight-style tango -o example18f.html

pandoc code.text -s --highlight-style zenburn -o example18g.html
\n
    \n
  • GNU Texinfo
  • \n
\n
1
pandoc MANUAL.txt -s -o example19.texi
\n
    \n
  • OpenDocument XML
  • \n
\n
1
pandoc MANUAL.txt -s -t opendocument -o example20.xml
\n
    \n
  • ODT (OpenDocument Text, readable by OpenOffice)
  • \n
\n
1
pandoc MANUAL.txt -o example21.odt
\n
    \n
  • MediaWiki markup
  • \n
\n
1
pandoc -s -t mediawiki --toc MANUAL.txt -o example22.wiki
\n
    \n
  • EPUB ebook
  • \n
\n
1
pandoc MANUAL.txt -o MANUAL.epub
\n
    \n
  • Markdown citations
  • \n
\n
1
2
3
4
5
pandoc -s --bibliography biblio.bib --citeproc CITATIONS -o example24a.html

pandoc -s --bibliography biblio.json --citeproc --csl chicago-fullnote-bibliography.csl CITATIONS -o example24b.html

pandoc -s --bibliography biblio.yaml --citeproc --csl ieee.csl CITATIONS -t man -o example24c.1
\n
    \n
  • Textile writer
  • \n
\n
1
pandoc -s MANUAL.txt -t textile -o example25.textile
\n
    \n
  • Textile reader
  • \n
\n
1
pandoc -s example25.textile -f textile -t html -o example26.html
\n
    \n
  • Org-mode
  • \n
\n
1
pandoc -s MANUAL.txt -o example27.org
\n
    \n
  • AsciiDoc
  • \n
\n
1
pandoc -s MANUAL.txt -t asciidoc -o example28.txt
\n
    \n
  • Word docx
  • \n
\n
1
pandoc -s MANUAL.txt -o example29.docx
\n
    \n
  • LaTeX math to docx
  • \n
\n
1
pandoc -s math.tex -o example30.docx
\n
    \n
  • DocBook to markdown
  • \n
\n
1
pandoc -f docbook -t markdown -s howto.xml -o example31.text
\n
    \n
  • MediaWiki to html5
  • \n
\n
1
pandoc -f mediawiki -t html5 -s haskell.wiki -o example32.html
\n
    \n
  • Chunked HTML
  • \n
\n
1
pandoc -t chunkedhtml --split-level=2 --toc --toc-depth=2 --number-sections -o example33 MANUAL.txt
\n
    \n
  • Docx with a reference docx
  • \n
\n
1
pandoc --reference-doc twocolumns.docx -o UsersGuide.docx MANUAL.txt
\n
    \n
  • Docx to markdown, including math
  • \n
\n
1
pandoc -s example30.docx -t markdown -o example35.md
\n
    \n
  • EPUB to plain text
  • \n
\n
1
pandoc MANUAL.epub -t plain -o example36.text
\n
    \n
  • Using a template to produce a table from structured data
  • \n
\n
1
pandoc fishwatch.yaml -t rst --template fishtable.rst -o fish.rst # see also the partial species.rst
\n
    \n
  • Converting a bibliography from BibTeX to CSL JSON
  • \n
\n
1
pandoc biblio.bib -t csljson -o biblio2.json
\n
    \n
  • Producing a formatted version of a bibliography
  • \n
\n
1
pandoc biblio.bib --citeproc --csl ieee.csl -s -o biblio.html
\n

3 中文乱码问题

\n

中文乱码问题,大多与字体有关,解决方案详见文章

\n\n"},{"title":"Linux安装Clash – 代理 – VPN","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D19750327%2C3266188780%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"Linux,安装,VPN","date":"2023-08-01T10:25:15.000Z","abbrlink":"438a2103","_content":"\n### 1 什么是Clash?\n\n![78805a221a988e7-44](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/78805a221a988e7-44.png)\n\n\n\nClash 是一个跨平台的基于规则的代理实用程序,运行在网络和应用层,支持开箱即用的各种代理和反审查协议。\n\nClash 的使用对普通用户来说可能具有挑战性。那些可能想考虑改用 GUI 客户端,我们确实有一些建议:\n\n- [Windows 版 Clash](https://github.com/Fndroid/clash_for_windows_pkg/releases)(Windows 和 macOS)\n- [安卓版 Clash](https://github.com/Kr328/ClashForAndroid)\n- [ClashX](https://github.com/yichengchen/clashX) 或者 [ClashX Pro](https://install.appcenter.ms/users/clashx/apps/clashx-pro/distribution_groups/public) (macOS)\n\n\n\n### 2 安装Linux Clash\n\n#### 2.1 下载Clash\n\n- 下载链接:https://github.com/Dreamacro/clash/releases\n\n![image-20230906191333077](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230906191333077.png)\n\n\n\n#### 2.2 上传至Linux服务器\n\n- 创建文件夹\n\n```BASH\nmkdir /opt/clash && cd /opt/clash\n```\n\n- 上传或移动\n\n```BASH\nmv clash-linux-386-v1.16.0 /opt/clash/clash\n```\n\n\n\n#### 2.3 解压Clash\n\n```BASH\ngunzip clash-linux-386-v1.16.0.gz\n```\n\n\n\n#### 2.4 文件夹授权\n\n```BASH\nchmod +x clash\n```\n\n\n\n### 3 设置Clash的配置\n\n注:clash默认读取的配置文件位置在:`~/.config/clash/`\n\n#### 3.1 设置配置文件\n\n- 创建一个文件夹:放置我们的Clash配置文件\n\n```BASH\nmkdir ~/.config/clash/ && cd ~/.config/clash/ \n```\n\n- 获取配置文件\n\n如果没法直接下载,从PC电脑获取到Windows本地Clash的`yaml`、`mmdb`文件放到服务器的`./config/clash/`下面亦可,`yaml`文件命名为`config.yaml`、`mmdb`文件命名为:`Country.mmdb`\n\n```BASH\nsudo wget -O config.yaml \"yaml下载链接\"\nsudo wget -O XXX.mmdb \"mmdb下载链接\"\n```\n\n`yaml `文件大致内容如:\n\n```yaml\nmixed-port: 7890\nallow-lan: true\nbind-address: '*'\nmode: rule\nlog-level: info\nexternal-controller: '127.0.0.1:9090'\ndns:\n enable: true\n ......\n```\n\n\n\n### 4 启动服务\n\n- 直接启动我们的`./clash`即可\n\n```bash\n[root@VM-4-12-centos clash]# ./clash \nINFO[0000] Start initial compatible provider 自动选择 \nINFO[0000] Start initial compatible provider FreeGecko \nINFO[0000] Start initial compatible provider 故障转移 \nINFO[0000] RESTful API listening at: 127.0.0.1:34567 \nINFO[0000] Mixed(http+socks) proxy listening at: [::]:7890\n```\n\n","source":"_posts/Linux安装Clash – 代理 – VPN.md","raw":"---\ntitle: Linux安装Clash – 代理 – VPN\ncover: >-\n https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D19750327%2C3266188780%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'Linux,安装,VPN'\ncategories:\n - Linux\ntags:\n - Linux\n - Clash\n - 软件安装\n - VPN\ndate: '2023-08-01 18:25:15'\nabbrlink: 438a2103\n---\n\n### 1 什么是Clash?\n\n![78805a221a988e7-44](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/78805a221a988e7-44.png)\n\n\n\nClash 是一个跨平台的基于规则的代理实用程序,运行在网络和应用层,支持开箱即用的各种代理和反审查协议。\n\nClash 的使用对普通用户来说可能具有挑战性。那些可能想考虑改用 GUI 客户端,我们确实有一些建议:\n\n- [Windows 版 Clash](https://github.com/Fndroid/clash_for_windows_pkg/releases)(Windows 和 macOS)\n- [安卓版 Clash](https://github.com/Kr328/ClashForAndroid)\n- [ClashX](https://github.com/yichengchen/clashX) 或者 [ClashX Pro](https://install.appcenter.ms/users/clashx/apps/clashx-pro/distribution_groups/public) (macOS)\n\n\n\n### 2 安装Linux Clash\n\n#### 2.1 下载Clash\n\n- 下载链接:https://github.com/Dreamacro/clash/releases\n\n![image-20230906191333077](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230906191333077.png)\n\n\n\n#### 2.2 上传至Linux服务器\n\n- 创建文件夹\n\n```BASH\nmkdir /opt/clash && cd /opt/clash\n```\n\n- 上传或移动\n\n```BASH\nmv clash-linux-386-v1.16.0 /opt/clash/clash\n```\n\n\n\n#### 2.3 解压Clash\n\n```BASH\ngunzip clash-linux-386-v1.16.0.gz\n```\n\n\n\n#### 2.4 文件夹授权\n\n```BASH\nchmod +x clash\n```\n\n\n\n### 3 设置Clash的配置\n\n注:clash默认读取的配置文件位置在:`~/.config/clash/`\n\n#### 3.1 设置配置文件\n\n- 创建一个文件夹:放置我们的Clash配置文件\n\n```BASH\nmkdir ~/.config/clash/ && cd ~/.config/clash/ \n```\n\n- 获取配置文件\n\n如果没法直接下载,从PC电脑获取到Windows本地Clash的`yaml`、`mmdb`文件放到服务器的`./config/clash/`下面亦可,`yaml`文件命名为`config.yaml`、`mmdb`文件命名为:`Country.mmdb`\n\n```BASH\nsudo wget -O config.yaml \"yaml下载链接\"\nsudo wget -O XXX.mmdb \"mmdb下载链接\"\n```\n\n`yaml `文件大致内容如:\n\n```yaml\nmixed-port: 7890\nallow-lan: true\nbind-address: '*'\nmode: rule\nlog-level: info\nexternal-controller: '127.0.0.1:9090'\ndns:\n enable: true\n ......\n```\n\n\n\n### 4 启动服务\n\n- 直接启动我们的`./clash`即可\n\n```bash\n[root@VM-4-12-centos clash]# ./clash \nINFO[0000] Start initial compatible provider 自动选择 \nINFO[0000] Start initial compatible provider FreeGecko \nINFO[0000] Start initial compatible provider 故障转移 \nINFO[0000] RESTful API listening at: 127.0.0.1:34567 \nINFO[0000] Mixed(http+socks) proxy listening at: [::]:7890\n```\n\n","slug":"Linux安装Clash – 代理 – VPN","published":1,"updated":"2023-10-24T08:38:15.650Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5vg000tfc3ua14n7mr6","content":"

1 什么是Clash?

\n

\"78805a221a988e7-44\"

\n

Clash 是一个跨平台的基于规则的代理实用程序,运行在网络和应用层,支持开箱即用的各种代理和反审查协议。

\n

Clash 的使用对普通用户来说可能具有挑战性。那些可能想考虑改用 GUI 客户端,我们确实有一些建议:

\n\n

2 安装Linux Clash

\n

2.1 下载Clash

\n\n

\"image-20230906191333077\"

\n

2.2 上传至Linux服务器

\n
    \n
  • 创建文件夹
  • \n
\n
1
mkdir /opt/clash && cd /opt/clash
\n
    \n
  • 上传或移动
  • \n
\n
1
mv clash-linux-386-v1.16.0 /opt/clash/clash
\n

2.3 解压Clash

\n
1
gunzip clash-linux-386-v1.16.0.gz
\n

2.4 文件夹授权

\n
1
chmod +x clash
\n

3 设置Clash的配置

\n

注:clash默认读取的配置文件位置在:~/.config/clash/

\n

3.1 设置配置文件

\n
    \n
  • 创建一个文件夹:放置我们的Clash配置文件
  • \n
\n
1
mkdir ~/.config/clash/ && cd ~/.config/clash/ 
\n
    \n
  • 获取配置文件
  • \n
\n

如果没法直接下载,从PC电脑获取到Windows本地Clash的yamlmmdb文件放到服务器的./config/clash/下面亦可,yaml文件命名为config.yamlmmdb文件命名为:Country.mmdb

\n
1
2
sudo wget -O config.yaml "yaml下载链接"
sudo wget -O XXX.mmdb "mmdb下载链接"
\n

yaml 文件大致内容如:

\n
1
2
3
4
5
6
7
8
9
mixed-port: 7890
allow-lan: true
bind-address: '*'
mode: rule
log-level: info
external-controller: '127.0.0.1:9090'
dns:
enable: true
......
\n

4 启动服务

\n
    \n
  • 直接启动我们的./clash即可
  • \n
\n
1
2
3
4
5
6
[root@VM-4-12-centos clash]# ./clash 
INFO[0000] Start initial compatible provider 自动选择
INFO[0000] Start initial compatible provider FreeGecko
INFO[0000] Start initial compatible provider 故障转移
INFO[0000] RESTful API listening at: 127.0.0.1:34567
INFO[0000] Mixed(http+socks) proxy listening at: [::]:7890
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":1201,"excerpt":"","more":"

1 什么是Clash?

\n

\"78805a221a988e7-44\"

\n

Clash 是一个跨平台的基于规则的代理实用程序,运行在网络和应用层,支持开箱即用的各种代理和反审查协议。

\n

Clash 的使用对普通用户来说可能具有挑战性。那些可能想考虑改用 GUI 客户端,我们确实有一些建议:

\n\n

2 安装Linux Clash

\n

2.1 下载Clash

\n\n

\"image-20230906191333077\"

\n

2.2 上传至Linux服务器

\n
    \n
  • 创建文件夹
  • \n
\n
1
mkdir /opt/clash && cd /opt/clash
\n
    \n
  • 上传或移动
  • \n
\n
1
mv clash-linux-386-v1.16.0 /opt/clash/clash
\n

2.3 解压Clash

\n
1
gunzip clash-linux-386-v1.16.0.gz
\n

2.4 文件夹授权

\n
1
chmod +x clash
\n

3 设置Clash的配置

\n

注:clash默认读取的配置文件位置在:~/.config/clash/

\n

3.1 设置配置文件

\n
    \n
  • 创建一个文件夹:放置我们的Clash配置文件
  • \n
\n
1
mkdir ~/.config/clash/ && cd ~/.config/clash/ 
\n
    \n
  • 获取配置文件
  • \n
\n

如果没法直接下载,从PC电脑获取到Windows本地Clash的yamlmmdb文件放到服务器的./config/clash/下面亦可,yaml文件命名为config.yamlmmdb文件命名为:Country.mmdb

\n
1
2
sudo wget -O config.yaml "yaml下载链接"
sudo wget -O XXX.mmdb "mmdb下载链接"
\n

yaml 文件大致内容如:

\n
1
2
3
4
5
6
7
8
9
mixed-port: 7890
allow-lan: true
bind-address: '*'
mode: rule
log-level: info
external-controller: '127.0.0.1:9090'
dns:
enable: true
......
\n

4 启动服务

\n
    \n
  • 直接启动我们的./clash即可
  • \n
\n
1
2
3
4
5
6
[root@VM-4-12-centos clash]# ./clash 
INFO[0000] Start initial compatible provider 自动选择
INFO[0000] Start initial compatible provider FreeGecko
INFO[0000] Start initial compatible provider 故障转移
INFO[0000] RESTful API listening at: 127.0.0.1:34567
INFO[0000] Mixed(http+socks) proxy listening at: [::]:7890
\n"},{"title":"Linux配置NFS共享存储服务器","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D4034267880%2C2110905682%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","abbrlink":"d154fd87","date":"2023-04-03T12:10:50.000Z","keywords":"Linux, NFS, 共享存储","swiper_index":4,"_content":"\n### 1. 安装 nfs-untils\n\n```bash\nyum -y install nfs-utils\n```\n\n### 2. 设置共享目录\n\n```bash[categoryBar.pug](..%2F..%2Fnode_modules%2Fhexo-theme-butterfly%2Flayout%2Fincludes%2FcategoryBar.pug)\nmkdir -p /data/publicDisk001\n# 授权\nchmod 777 /data/publicDisk001/\n\n# 修改文件,让10.0.0.0/24 这个网段的机器都能用\nvim /etc/exports\n\n/data/publicDisk001 10.0.0.0/24(rw,no_root_squash)\n```\n\n### 3. 启动广播和nfs\n\n```bash\nsystemctl start rpcbind\n\n# 启动nfs\nsystemctl start nfs\n# 若 centerOS8以上,则执行此命令启动 \nsudo service nfs-server start\n```\n\n### 4. 在同一网段下,另一个主机也安装 nfs 作为客户端\n\n```bash\nyum -y install nfs-utils\n# 启动nfs\nsystemctl start nfs\nsudo service nfs-server start\n```\n\n### 5. 挂载\n\n```bash\n# 新建目录\nmkdir -p /data/disk01\n\n# 挂载网盘到此路径\nmount -t nfs 10.0.0.204:/data/publicDisk001 /data/disk01\n```\n\n### 6. 查看挂载情况\n\n```bash\ndf -h\n```\n","source":"_posts/Linux配置NFS共享存储服务器.md","raw":"---\ntitle: Linux配置NFS共享存储服务器\ncover: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D4034267880%2C2110905682%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG'\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nabbrlink: d154fd87\ndate: 2023-04-03 20:10:50\nkeywords: Linux, NFS, 共享存储\ncategories:\n - Linux\ntags:\n - Linux\n - 存储\nswiper_index: 4 #置顶轮播图顺序,非负整数,数字越大越靠前\n---\n\n### 1. 安装 nfs-untils\n\n```bash\nyum -y install nfs-utils\n```\n\n### 2. 设置共享目录\n\n```bash[categoryBar.pug](..%2F..%2Fnode_modules%2Fhexo-theme-butterfly%2Flayout%2Fincludes%2FcategoryBar.pug)\nmkdir -p /data/publicDisk001\n# 授权\nchmod 777 /data/publicDisk001/\n\n# 修改文件,让10.0.0.0/24 这个网段的机器都能用\nvim /etc/exports\n\n/data/publicDisk001 10.0.0.0/24(rw,no_root_squash)\n```\n\n### 3. 启动广播和nfs\n\n```bash\nsystemctl start rpcbind\n\n# 启动nfs\nsystemctl start nfs\n# 若 centerOS8以上,则执行此命令启动 \nsudo service nfs-server start\n```\n\n### 4. 在同一网段下,另一个主机也安装 nfs 作为客户端\n\n```bash\nyum -y install nfs-utils\n# 启动nfs\nsystemctl start nfs\nsudo service nfs-server start\n```\n\n### 5. 挂载\n\n```bash\n# 新建目录\nmkdir -p /data/disk01\n\n# 挂载网盘到此路径\nmount -t nfs 10.0.0.204:/data/publicDisk001 /data/disk01\n```\n\n### 6. 查看挂载情况\n\n```bash\ndf -h\n```\n","slug":"Linux配置NFS共享存储服务器","published":1,"updated":"2023-10-21T04:52:34.025Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5vg000xfc3uf6t13xk7","content":"

1. 安装 nfs-untils

\n
1
yum -y install nfs-utils
\n

2. 设置共享目录

\n
1
2
3
4
5
6
7
8
mkdir -p /data/publicDisk001
# 授权
chmod 777 /data/publicDisk001/

# 修改文件,让10.0.0.0/24 这个网段的机器都能用
vim /etc/exports

/data/publicDisk001 10.0.0.0/24(rw,no_root_squash)
\n

3. 启动广播和nfs

\n
1
2
3
4
5
6
systemctl start rpcbind

# 启动nfs
systemctl start nfs
# 若 centerOS8以上,则执行此命令启动
sudo service nfs-server start
\n

4. 在同一网段下,另一个主机也安装 nfs 作为客户端

\n
1
2
3
4
yum -y install nfs-utils
# 启动nfs
systemctl start nfs
sudo service nfs-server start
\n

5. 挂载

\n
1
2
3
4
5
# 新建目录
mkdir -p /data/disk01

# 挂载网盘到此路径
mount -t nfs 10.0.0.204:/data/publicDisk001 /data/disk01
\n

6. 查看挂载情况

\n
1
df -h
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":515,"excerpt":"","more":"

1. 安装 nfs-untils

\n
1
yum -y install nfs-utils
\n

2. 设置共享目录

\n
1
2
3
4
5
6
7
8
mkdir -p /data/publicDisk001
# 授权
chmod 777 /data/publicDisk001/

# 修改文件,让10.0.0.0/24 这个网段的机器都能用
vim /etc/exports

/data/publicDisk001 10.0.0.0/24(rw,no_root_squash)
\n

3. 启动广播和nfs

\n
1
2
3
4
5
6
systemctl start rpcbind

# 启动nfs
systemctl start nfs
# 若 centerOS8以上,则执行此命令启动
sudo service nfs-server start
\n

4. 在同一网段下,另一个主机也安装 nfs 作为客户端

\n
1
2
3
4
yum -y install nfs-utils
# 启动nfs
systemctl start nfs
sudo service nfs-server start
\n

5. 挂载

\n
1
2
3
4
5
# 新建目录
mkdir -p /data/disk01

# 挂载网盘到此路径
mount -t nfs 10.0.0.204:/data/publicDisk001 /data/disk01
\n

6. 查看挂载情况

\n
1
df -h
\n"},{"title":"Microsoft Office下载及激活教程","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3812449643%2C1656070772%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"软件安装,Office激活","abbrlink":"499a3852","date":"2023-10-11T12:10:50.000Z","_content":"\n\n\n## 1 Office Tool Plus下载\n\n- 下载链接\n\n{% link Office Tool Plus, https://otp.landian.vip/zh-cn/download.html, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20231011211410.png %}\n\n- 下载包含框架版本\n\n![image-20231011201941876](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011201941876-7026790.png)\n\n- 解压后双击运行Office Tool Plus.exe\n\n![image-20231011202115985](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202115985.png)\n\n\n\n\n\n## 2 安装Office\n\n- 若曾经安装过Office,则需要完全卸载,若卸载遇到问题,可以使用Office Tool Plus工具箱中的卸载工具进行卸载\n\n![image-20231011202421324](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202421324.png)\n\n- 点击左侧部署,根据自己的需求进行设置\n\n![image-20231011202700548](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202700548.png)\n\n- 在下面的产品对话框点击添加产品,选择Microsoft 365 企业应用版\n\n![image-20231011202856817](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202856817.png)\n\n- 然后勾选自己想要安装的产品\n\n![image-20231011202942134](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202942134.png)\n\n- 点击开始部署即可开始安装\n\n![image-20231011203205961](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011203205961.png)\n\n\n\n## 3 激活Office\n\n- 点击左侧激活选项,在许可证管理选项卡点击安装许可证,选择带有批量许可证的选项,然后点击确定\n\n![image-20231011203610772](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011203610772.png)\n\n- 许可证安装完成,点击KMS管理,保存设置,若该KMS主机报错,可以在以下链接找合适的:[KMS 列表](https://www.coolhub.top/tech-articles/kms_list.html)\n\n![image-20231011204022077](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011204022077.png)\n\n- 点击激活即可\n\n![image-20231011204111959](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011204111959.png)\n","source":"_posts/Microsoft Office下载及激活教程.md","raw":"---\ntitle: Microsoft Office下载及激活教程\ncover: >-\n https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3812449643%2C1656070772%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 软件安装,Office激活\ncategories:\n - 日常办公\ntags:\n - 软件安装\n - Office\n - Windows\nabbrlink: 499a3852\ndate: 2023-10-11 20:10:50\n---\n\n\n\n## 1 Office Tool Plus下载\n\n- 下载链接\n\n{% link Office Tool Plus, https://otp.landian.vip/zh-cn/download.html, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20231011211410.png %}\n\n- 下载包含框架版本\n\n![image-20231011201941876](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011201941876-7026790.png)\n\n- 解压后双击运行Office Tool Plus.exe\n\n![image-20231011202115985](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202115985.png)\n\n\n\n\n\n## 2 安装Office\n\n- 若曾经安装过Office,则需要完全卸载,若卸载遇到问题,可以使用Office Tool Plus工具箱中的卸载工具进行卸载\n\n![image-20231011202421324](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202421324.png)\n\n- 点击左侧部署,根据自己的需求进行设置\n\n![image-20231011202700548](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202700548.png)\n\n- 在下面的产品对话框点击添加产品,选择Microsoft 365 企业应用版\n\n![image-20231011202856817](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202856817.png)\n\n- 然后勾选自己想要安装的产品\n\n![image-20231011202942134](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202942134.png)\n\n- 点击开始部署即可开始安装\n\n![image-20231011203205961](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011203205961.png)\n\n\n\n## 3 激活Office\n\n- 点击左侧激活选项,在许可证管理选项卡点击安装许可证,选择带有批量许可证的选项,然后点击确定\n\n![image-20231011203610772](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011203610772.png)\n\n- 许可证安装完成,点击KMS管理,保存设置,若该KMS主机报错,可以在以下链接找合适的:[KMS 列表](https://www.coolhub.top/tech-articles/kms_list.html)\n\n![image-20231011204022077](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011204022077.png)\n\n- 点击激活即可\n\n![image-20231011204111959](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011204111959.png)\n","slug":"Microsoft Office下载及激活教程","published":1,"updated":"2023-10-22T04:49:12.391Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5vh0013fc3u3ez6bx8s","content":"

1 Office Tool Plus下载

\n
    \n
  • 下载链接
  • \n
\n\n
    \n
  • 下载包含框架版本
  • \n
\n

\"image-20231011201941876\"

\n
    \n
  • 解压后双击运行Office Tool Plus.exe
  • \n
\n

\"image-20231011202115985\"

\n

2 安装Office

\n
    \n
  • 若曾经安装过Office,则需要完全卸载,若卸载遇到问题,可以使用Office Tool Plus工具箱中的卸载工具进行卸载
  • \n
\n

\"image-20231011202421324\"

\n
    \n
  • 点击左侧部署,根据自己的需求进行设置
  • \n
\n

\"image-20231011202700548\"

\n
    \n
  • 在下面的产品对话框点击添加产品,选择Microsoft 365 企业应用版
  • \n
\n

\"image-20231011202856817\"

\n
    \n
  • 然后勾选自己想要安装的产品
  • \n
\n

\"image-20231011202942134\"

\n
    \n
  • 点击开始部署即可开始安装
  • \n
\n

\"image-20231011203205961\"

\n

3 激活Office

\n
    \n
  • 点击左侧激活选项,在许可证管理选项卡点击安装许可证,选择带有批量许可证的选项,然后点击确定
  • \n
\n

\"image-20231011203610772\"

\n
    \n
  • 许可证安装完成,点击KMS管理,保存设置,若该KMS主机报错,可以在以下链接找合适的:KMS 列表
  • \n
\n

\"image-20231011204022077\"

\n
    \n
  • 点击激活即可
  • \n
\n

\"image-20231011204111959\"

\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":366,"excerpt":"","more":"

1 Office Tool Plus下载

\n
    \n
  • 下载链接
  • \n
\n\n
    \n
  • 下载包含框架版本
  • \n
\n

\"image-20231011201941876\"

\n
    \n
  • 解压后双击运行Office Tool Plus.exe
  • \n
\n

\"image-20231011202115985\"

\n

2 安装Office

\n
    \n
  • 若曾经安装过Office,则需要完全卸载,若卸载遇到问题,可以使用Office Tool Plus工具箱中的卸载工具进行卸载
  • \n
\n

\"image-20231011202421324\"

\n
    \n
  • 点击左侧部署,根据自己的需求进行设置
  • \n
\n

\"image-20231011202700548\"

\n
    \n
  • 在下面的产品对话框点击添加产品,选择Microsoft 365 企业应用版
  • \n
\n

\"image-20231011202856817\"

\n
    \n
  • 然后勾选自己想要安装的产品
  • \n
\n

\"image-20231011202942134\"

\n
    \n
  • 点击开始部署即可开始安装
  • \n
\n

\"image-20231011203205961\"

\n

3 激活Office

\n
    \n
  • 点击左侧激活选项,在许可证管理选项卡点击安装许可证,选择带有批量许可证的选项,然后点击确定
  • \n
\n

\"image-20231011203610772\"

\n
    \n
  • 许可证安装完成,点击KMS管理,保存设置,若该KMS主机报错,可以在以下链接找合适的:KMS 列表
  • \n
\n

\"image-20231011204022077\"

\n
    \n
  • 点击激活即可
  • \n
\n

\"image-20231011204111959\"

\n"},{"title":"VMware安装CentOS 7","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3933667462%2C2332434810%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"VMware, 虚拟机, 静态IP, CentOS","abbrlink":"7ddf46fc","date":"2023-08-04T08:59:05.000Z","_content":"\n\n### 0 准备工作\n\n- CentOS 操作系统镜像文件下载:[https://mirrors.aliyun.com](https://links.jianshu.com/go?to=https%3A%2F%2Fmirrors.aliyun.com)\n\n![image-20230908171707525](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908171707525.png)\n\n\n\n---\n\n\n\n![image-20230908171728656](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908171728656.png)\n\n\n\n---\n\n\n\n![image-20230908171742599](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908171742599.png)\n\n\n\n---\n\n![image-20230908175418265](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908175418265.png)\n\n---\n\n\n\n![image-20230908175442769](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908175442769.png)\n\n---\n\n![image-20230908175605742](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908175605742.png)\n\n\n\n### 1 新建虚拟机\n\n![image-20230908142236250](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908142236250.png)\n\n\n\n### 2 选择自定义安装\n\n![image-20230908142400187](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908142400187.png)\n\n\n\n### 3 硬件兼容性选择\n\n- 选择与**VMware**相匹配的版本,点击下一步\n\n![image-20230908142621786](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908142621786.png)\n\n\n\n### 4 选择稍后安装操作系统\n\n![image-20230908142816382](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908142816382.png)\n\n\n\n### 5 选择要安装的操作系统\n\n![image-20230908143027761](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143027761.png)\n\n\n\n### 6 给虚拟机起名并选择它安装在什么位置\n\n![image-20230908143346019](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143346019.png)\n\n\n\n### 7 选择处理器配置\n\n![image-20230908143509051](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143509051.png)\n\n\n\n### 8 设置内存大小\n\n![image-20230908143642480](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143642480.png)\n\n\n\n### 9 网络类型选择NAT\n\n![image-20230908143745954](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143745954.png)\n\n\n\n### 10 I/O控制器类型,默认即可\n\n![image-20230908143828126](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143828126.png)\n\n\n\n### 11 磁盘类型,默认即可\n\n![image-20230908143902825](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143902825.png)\n\n\n\n### 12 创建磁盘\n\n![image-20230908143937104](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143937104.png)\n\n\n\n### 13 磁盘分配\n\n![image-20230908144028674](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908144028674.png)\n\n\n\n### 14 指定磁盘文件,默认即可\n\n![image-20230908144110656](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908144110656.png)\n\n\n\n### 15 新建虚拟机完成\n\n![image-20230908144157428](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908144157428.png)\n\n\n\n### 16 安装CentOS镜像\n\n- 点击编辑虚拟机配置\n\n![image-20230908145309603](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908145309603.png)\n\n- 选择`CD/DVD` 找到下载好的`iso`镜像路径放进去,点击确定\n\n![image-20230908150005089](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908150005089.png)\n\n- 开启虚拟机\n - 上下箭头可选择 `↑` 选中 `Install CentOS7`,回车\n\n![25517196-04af085f7eebd103](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/25517196-04af085f7eebd103.webp)\n\n- 选择语言,点击继续\n\n![image-20230908150311393](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908150311393.png)\n\n- 软件安装选择最小化安装\n\n![image-20230908150818220](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908150818220.png)\n\n![image-20230908150924342](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908150924342.png)\n\n- 创建分区\n\n - 点击安装位置\n\n ![image-20230908151004104](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908151004104.png)\n\n - 选择我要配置分区,然后点击完成\n\n ![image-20230908151145430](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908151145430.png)\n\n - 选择标准分区,然后点击 `+` 添加分区\n\n ![image-20230908151507360](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908151507360.png)\n\n - `/boot`分区就是操作系统的内核及在引导过程中使用的文件\n\n ![image-20230908151957680](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908151957680.png)\n\n - `Swap`分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用\n\n ![image-20230908152029333](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152029333.png)\n\n - 剩下的空间全部给根分区`/`,然后点击完成\n\n ![image-20230908152219217](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152219217.png)\n\n - 点击接受更改\n\n ![image-20230908152300028](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152300028.png)\n\n- 下面进行网络配置\n\n ![image-20230908152422052](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152422052.png)\n\n - 点击配置,按如下更改,然后点击保存,并设置主机名\n\n ![image-20230908152612519](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152612519.png)\n\n ![image-20230908152926994](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152926994.png)\n\n ![image-20230908153001212](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908153001212.png)\n\n ![image-20230908153240349](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908153240349.png)\n\n- 点击开始安装,安装过程中可以设置`root`的密码\n\n![image-20230908153341136](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908153341136.png)\n\n![image-20230908153417882](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908153417882.png)\n\n- 安装完成后,设置网卡,让虚拟机可以上网\n\n - 点击编辑 → 虚拟网络编辑器\n\n ![25517196-489dac124b1be481](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/25517196-489dac124b1be481.webp)\n\n - 点击更改设置\n\n ![image-20230908154539205](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908154539205.png)\n\n - 根据下图进行配置\n\n ![image-20230908154748383](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908154748383.png)\n\n ![image-20230908154821137](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908154821137.png)\n\n - 应用,然后点击确定,现在就可以正常使用了\n\n ![image-20230908160139747](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908160139747.png)\n\n\n\n\n\n### 17 配置静态IP\n\n- 打开命令行,输入\n - 网卡默认名称不一定为`ens33`,需要自行查看\n\n```BASH\nvim /etc/sysconfig/network-scripts/ifcfg-ens33\n```\n\n- 修改配置文件内容\n\n![image-20230908173017415](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908173017415.png)\n\n- 重启网络服务\n\n```BASH\nservice network restart\n```\n","source":"_posts/VMware安装CentOS 7.md","raw":"---\ntitle: VMware安装CentOS 7\ncover: >-\n https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3933667462%2C2332434810%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'VMware, 虚拟机, 静态IP, CentOS'\ncategories:\n - Linux\ntags:\n - VMware\n - 虚拟机\n - CentOS\nabbrlink: 7ddf46fc\ndate: 2023-08-04 16:59:05\n---\n\n\n### 0 准备工作\n\n- CentOS 操作系统镜像文件下载:[https://mirrors.aliyun.com](https://links.jianshu.com/go?to=https%3A%2F%2Fmirrors.aliyun.com)\n\n![image-20230908171707525](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908171707525.png)\n\n\n\n---\n\n\n\n![image-20230908171728656](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908171728656.png)\n\n\n\n---\n\n\n\n![image-20230908171742599](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908171742599.png)\n\n\n\n---\n\n![image-20230908175418265](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908175418265.png)\n\n---\n\n\n\n![image-20230908175442769](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908175442769.png)\n\n---\n\n![image-20230908175605742](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908175605742.png)\n\n\n\n### 1 新建虚拟机\n\n![image-20230908142236250](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908142236250.png)\n\n\n\n### 2 选择自定义安装\n\n![image-20230908142400187](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908142400187.png)\n\n\n\n### 3 硬件兼容性选择\n\n- 选择与**VMware**相匹配的版本,点击下一步\n\n![image-20230908142621786](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908142621786.png)\n\n\n\n### 4 选择稍后安装操作系统\n\n![image-20230908142816382](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908142816382.png)\n\n\n\n### 5 选择要安装的操作系统\n\n![image-20230908143027761](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143027761.png)\n\n\n\n### 6 给虚拟机起名并选择它安装在什么位置\n\n![image-20230908143346019](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143346019.png)\n\n\n\n### 7 选择处理器配置\n\n![image-20230908143509051](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143509051.png)\n\n\n\n### 8 设置内存大小\n\n![image-20230908143642480](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143642480.png)\n\n\n\n### 9 网络类型选择NAT\n\n![image-20230908143745954](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143745954.png)\n\n\n\n### 10 I/O控制器类型,默认即可\n\n![image-20230908143828126](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143828126.png)\n\n\n\n### 11 磁盘类型,默认即可\n\n![image-20230908143902825](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143902825.png)\n\n\n\n### 12 创建磁盘\n\n![image-20230908143937104](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143937104.png)\n\n\n\n### 13 磁盘分配\n\n![image-20230908144028674](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908144028674.png)\n\n\n\n### 14 指定磁盘文件,默认即可\n\n![image-20230908144110656](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908144110656.png)\n\n\n\n### 15 新建虚拟机完成\n\n![image-20230908144157428](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908144157428.png)\n\n\n\n### 16 安装CentOS镜像\n\n- 点击编辑虚拟机配置\n\n![image-20230908145309603](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908145309603.png)\n\n- 选择`CD/DVD` 找到下载好的`iso`镜像路径放进去,点击确定\n\n![image-20230908150005089](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908150005089.png)\n\n- 开启虚拟机\n - 上下箭头可选择 `↑` 选中 `Install CentOS7`,回车\n\n![25517196-04af085f7eebd103](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/25517196-04af085f7eebd103.webp)\n\n- 选择语言,点击继续\n\n![image-20230908150311393](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908150311393.png)\n\n- 软件安装选择最小化安装\n\n![image-20230908150818220](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908150818220.png)\n\n![image-20230908150924342](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908150924342.png)\n\n- 创建分区\n\n - 点击安装位置\n\n ![image-20230908151004104](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908151004104.png)\n\n - 选择我要配置分区,然后点击完成\n\n ![image-20230908151145430](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908151145430.png)\n\n - 选择标准分区,然后点击 `+` 添加分区\n\n ![image-20230908151507360](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908151507360.png)\n\n - `/boot`分区就是操作系统的内核及在引导过程中使用的文件\n\n ![image-20230908151957680](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908151957680.png)\n\n - `Swap`分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用\n\n ![image-20230908152029333](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152029333.png)\n\n - 剩下的空间全部给根分区`/`,然后点击完成\n\n ![image-20230908152219217](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152219217.png)\n\n - 点击接受更改\n\n ![image-20230908152300028](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152300028.png)\n\n- 下面进行网络配置\n\n ![image-20230908152422052](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152422052.png)\n\n - 点击配置,按如下更改,然后点击保存,并设置主机名\n\n ![image-20230908152612519](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152612519.png)\n\n ![image-20230908152926994](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152926994.png)\n\n ![image-20230908153001212](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908153001212.png)\n\n ![image-20230908153240349](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908153240349.png)\n\n- 点击开始安装,安装过程中可以设置`root`的密码\n\n![image-20230908153341136](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908153341136.png)\n\n![image-20230908153417882](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908153417882.png)\n\n- 安装完成后,设置网卡,让虚拟机可以上网\n\n - 点击编辑 → 虚拟网络编辑器\n\n ![25517196-489dac124b1be481](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/25517196-489dac124b1be481.webp)\n\n - 点击更改设置\n\n ![image-20230908154539205](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908154539205.png)\n\n - 根据下图进行配置\n\n ![image-20230908154748383](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908154748383.png)\n\n ![image-20230908154821137](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908154821137.png)\n\n - 应用,然后点击确定,现在就可以正常使用了\n\n ![image-20230908160139747](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908160139747.png)\n\n\n\n\n\n### 17 配置静态IP\n\n- 打开命令行,输入\n - 网卡默认名称不一定为`ens33`,需要自行查看\n\n```BASH\nvim /etc/sysconfig/network-scripts/ifcfg-ens33\n```\n\n- 修改配置文件内容\n\n![image-20230908173017415](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908173017415.png)\n\n- 重启网络服务\n\n```BASH\nservice network restart\n```\n","slug":"VMware安装CentOS 7","published":1,"updated":"2023-10-21T04:52:52.342Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5vh0017fc3u7soi4zjq","content":"

0 准备工作

\n\n

\"image-20230908171707525\"

\n
\n

\"image-20230908171728656\"

\n
\n

\"image-20230908171742599\"

\n
\n

\"image-20230908175418265\"

\n
\n

\"image-20230908175442769\"

\n
\n

\"image-20230908175605742\"

\n

1 新建虚拟机

\n

\"image-20230908142236250\"

\n

2 选择自定义安装

\n

\"image-20230908142400187\"

\n

3 硬件兼容性选择

\n
    \n
  • 选择与VMware相匹配的版本,点击下一步
  • \n
\n

\"image-20230908142621786\"

\n

4 选择稍后安装操作系统

\n

\"image-20230908142816382\"

\n

5 选择要安装的操作系统

\n

\"image-20230908143027761\"

\n

6 给虚拟机起名并选择它安装在什么位置

\n

\"image-20230908143346019\"

\n

7 选择处理器配置

\n

\"image-20230908143509051\"

\n

8 设置内存大小

\n

\"image-20230908143642480\"

\n

9 网络类型选择NAT

\n

\"image-20230908143745954\"

\n

10 I/O控制器类型,默认即可

\n

\"image-20230908143828126\"

\n

11 磁盘类型,默认即可

\n

\"image-20230908143902825\"

\n

12 创建磁盘

\n

\"image-20230908143937104\"

\n

13 磁盘分配

\n

\"image-20230908144028674\"

\n

14 指定磁盘文件,默认即可

\n

\"image-20230908144110656\"

\n

15 新建虚拟机完成

\n

\"image-20230908144157428\"

\n

16 安装CentOS镜像

\n
    \n
  • 点击编辑虚拟机配置
  • \n
\n

\"image-20230908145309603\"

\n
    \n
  • 选择CD/DVD 找到下载好的iso镜像路径放进去,点击确定
  • \n
\n

\"image-20230908150005089\"

\n
    \n
  • 开启虚拟机\n
      \n
    • 上下箭头可选择 选中 Install CentOS7,回车
    • \n
    \n
  • \n
\n

\"25517196-04af085f7eebd103\"

\n
    \n
  • 选择语言,点击继续
  • \n
\n

\"image-20230908150311393\"

\n
    \n
  • 软件安装选择最小化安装
  • \n
\n

\"image-20230908150818220\"

\n

\"image-20230908150924342\"

\n
    \n
  • \n

    创建分区

    \n
      \n
    • 点击安装位置
    • \n
    \n

    \"image-20230908151004104\"

    \n
      \n
    • 选择我要配置分区,然后点击完成
    • \n
    \n

    \"image-20230908151145430\"

    \n
      \n
    • 选择标准分区,然后点击 + 添加分区
    • \n
    \n

    \"image-20230908151507360\"

    \n
      \n
    • /boot分区就是操作系统的内核及在引导过程中使用的文件
    • \n
    \n

    \"image-20230908151957680\"

    \n
      \n
    • Swap分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用
    • \n
    \n

    \"image-20230908152029333\"

    \n
      \n
    • 剩下的空间全部给根分区/,然后点击完成
    • \n
    \n

    \"image-20230908152219217\"

    \n
      \n
    • 点击接受更改
    • \n
    \n

    \"image-20230908152300028\"

    \n
  • \n
  • \n

    下面进行网络配置

    \n

    \"image-20230908152422052\"

    \n
      \n
    • 点击配置,按如下更改,然后点击保存,并设置主机名
    • \n
    \n

    \"image-20230908152612519\"

    \n

    \"image-20230908152926994\"

    \n

    \"image-20230908153001212\"

    \n

    \"image-20230908153240349\"

    \n
  • \n
  • \n

    点击开始安装,安装过程中可以设置root的密码

    \n
  • \n
\n

\"image-20230908153341136\"

\n

\"image-20230908153417882\"

\n
    \n
  • \n

    安装完成后,设置网卡,让虚拟机可以上网

    \n
      \n
    • 点击编辑 → 虚拟网络编辑器
    • \n
    \n

    \"25517196-489dac124b1be481\"

    \n
      \n
    • 点击更改设置
    • \n
    \n

    \"image-20230908154539205\"

    \n
      \n
    • 根据下图进行配置
    • \n
    \n

    \"image-20230908154748383\"

    \n

    \"image-20230908154821137\"

    \n
      \n
    • 应用,然后点击确定,现在就可以正常使用了
    • \n
    \n

    \"image-20230908160139747\"

    \n
  • \n
\n

17 配置静态IP

\n
    \n
  • 打开命令行,输入\n
      \n
    • 网卡默认名称不一定为ens33,需要自行查看
    • \n
    \n
  • \n
\n
1
vim /etc/sysconfig/network-scripts/ifcfg-ens33
\n
    \n
  • 修改配置文件内容
  • \n
\n

\"image-20230908173017415\"

\n
    \n
  • 重启网络服务
  • \n
\n
1
service network restart
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":701,"excerpt":"","more":"

0 准备工作

\n\n

\"image-20230908171707525\"

\n
\n

\"image-20230908171728656\"

\n
\n

\"image-20230908171742599\"

\n
\n

\"image-20230908175418265\"

\n
\n

\"image-20230908175442769\"

\n
\n

\"image-20230908175605742\"

\n

1 新建虚拟机

\n

\"image-20230908142236250\"

\n

2 选择自定义安装

\n

\"image-20230908142400187\"

\n

3 硬件兼容性选择

\n
    \n
  • 选择与VMware相匹配的版本,点击下一步
  • \n
\n

\"image-20230908142621786\"

\n

4 选择稍后安装操作系统

\n

\"image-20230908142816382\"

\n

5 选择要安装的操作系统

\n

\"image-20230908143027761\"

\n

6 给虚拟机起名并选择它安装在什么位置

\n

\"image-20230908143346019\"

\n

7 选择处理器配置

\n

\"image-20230908143509051\"

\n

8 设置内存大小

\n

\"image-20230908143642480\"

\n

9 网络类型选择NAT

\n

\"image-20230908143745954\"

\n

10 I/O控制器类型,默认即可

\n

\"image-20230908143828126\"

\n

11 磁盘类型,默认即可

\n

\"image-20230908143902825\"

\n

12 创建磁盘

\n

\"image-20230908143937104\"

\n

13 磁盘分配

\n

\"image-20230908144028674\"

\n

14 指定磁盘文件,默认即可

\n

\"image-20230908144110656\"

\n

15 新建虚拟机完成

\n

\"image-20230908144157428\"

\n

16 安装CentOS镜像

\n
    \n
  • 点击编辑虚拟机配置
  • \n
\n

\"image-20230908145309603\"

\n
    \n
  • 选择CD/DVD 找到下载好的iso镜像路径放进去,点击确定
  • \n
\n

\"image-20230908150005089\"

\n
    \n
  • 开启虚拟机\n
      \n
    • 上下箭头可选择 选中 Install CentOS7,回车
    • \n
    \n
  • \n
\n

\"25517196-04af085f7eebd103\"

\n
    \n
  • 选择语言,点击继续
  • \n
\n

\"image-20230908150311393\"

\n
    \n
  • 软件安装选择最小化安装
  • \n
\n

\"image-20230908150818220\"

\n

\"image-20230908150924342\"

\n
    \n
  • \n

    创建分区

    \n
      \n
    • 点击安装位置
    • \n
    \n

    \"image-20230908151004104\"

    \n
      \n
    • 选择我要配置分区,然后点击完成
    • \n
    \n

    \"image-20230908151145430\"

    \n
      \n
    • 选择标准分区,然后点击 + 添加分区
    • \n
    \n

    \"image-20230908151507360\"

    \n
      \n
    • /boot分区就是操作系统的内核及在引导过程中使用的文件
    • \n
    \n

    \"image-20230908151957680\"

    \n
      \n
    • Swap分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用
    • \n
    \n

    \"image-20230908152029333\"

    \n
      \n
    • 剩下的空间全部给根分区/,然后点击完成
    • \n
    \n

    \"image-20230908152219217\"

    \n
      \n
    • 点击接受更改
    • \n
    \n

    \"image-20230908152300028\"

    \n
  • \n
  • \n

    下面进行网络配置

    \n

    \"image-20230908152422052\"

    \n
      \n
    • 点击配置,按如下更改,然后点击保存,并设置主机名
    • \n
    \n

    \"image-20230908152612519\"

    \n

    \"image-20230908152926994\"

    \n

    \"image-20230908153001212\"

    \n

    \"image-20230908153240349\"

    \n
  • \n
  • \n

    点击开始安装,安装过程中可以设置root的密码

    \n
  • \n
\n

\"image-20230908153341136\"

\n

\"image-20230908153417882\"

\n
    \n
  • \n

    安装完成后,设置网卡,让虚拟机可以上网

    \n
      \n
    • 点击编辑 → 虚拟网络编辑器
    • \n
    \n

    \"25517196-489dac124b1be481\"

    \n
      \n
    • 点击更改设置
    • \n
    \n

    \"image-20230908154539205\"

    \n
      \n
    • 根据下图进行配置
    • \n
    \n

    \"image-20230908154748383\"

    \n

    \"image-20230908154821137\"

    \n
      \n
    • 应用,然后点击确定,现在就可以正常使用了
    • \n
    \n

    \"image-20230908160139747\"

    \n
  • \n
\n

17 配置静态IP

\n
    \n
  • 打开命令行,输入\n
      \n
    • 网卡默认名称不一定为ens33,需要自行查看
    • \n
    \n
  • \n
\n
1
vim /etc/sysconfig/network-scripts/ifcfg-ens33
\n
    \n
  • 修改配置文件内容
  • \n
\n

\"image-20230908173017415\"

\n
    \n
  • 重启网络服务
  • \n
\n
1
service network restart
\n"},{"title":"VMware虚拟机设置静态IP","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D975125445%2C2172945209%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","abbrlink":"f5fad029","date":"2023-03-14T08:59:05.000Z","keywords":"VMware, 虚拟机, 静态IP","_content":"\n### 1、设置虚拟网关\n\n点击导航栏上面的【编辑】-->【虚拟网络编辑器】,并以【管理员】的身份打开虚拟机。\n\n![img](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/watermark%2Ctype_ZHJvaWRzYW5zZmFsbGJhY2s%2Cshadow_50%2Ctext_Q1NETiBAY2hhb2ZlbmdkZXY%3D%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16.png)\n\n点击【VMnet8 NAT模式】,取消使用本地使用本地[dhcp](https://so.csdn.net/so/search?q=dhcp&spm=1001.2101.3001.7020)服务,配置网络段(子网ip段)为192.168.1.0,点击NAT设置。\n\n![image-20230406140828304](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406140828304.png)\n\n配置【网关ip】,注意【网关ip】需要在【子网ip】段下,这里设置为192.168.1.2\n\n![image-20230406140906021](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406140906021.png)\n\n\n### 2、配置虚拟机静态ip\n\n- 打开命令行,输入\n\n```shell\nvim /etc/sysconfig/network-scripts/ifcfg-ens33\n```\n\n- 修改配置文件内容\n\n![image-20230406141120088](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406141120088.png)\n\n\n\n```shell\n#ip\nIPADDR=192.168.1.136\nNETMASK=255.255.255.0\n#gateway\nGATEWAY=192.168.1.2\n#DNS\nDNS1=114.114.114\n```\n\n注:DNS1是dns服务器,一般设置为114.114.114.114、114.114.115.115和8.8.8.8等(其他的也可以,只不过这几个用的人比较多而已)\n\n\n### 3、检测配置是否成功\n\n- 重启网络服务\n\n```shell\nservice network restart\n```\n\n- ping一下百度\n\n```shell\nping www.baidu.com\n```\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","source":"_posts/VMware虚拟机设置静态IP.md","raw":"---\ntitle: VMware虚拟机设置静态IP\ncover: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D975125445%2C2172945209%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG'\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nabbrlink: f5fad029\ndate: 2023-03-14 16:59:05\nkeywords: VMware, 虚拟机, 静态IP\ncategories:\n - Linux\ntags:\n - VMware\n - 虚拟机\n - IP\n---\n\n### 1、设置虚拟网关\n\n点击导航栏上面的【编辑】-->【虚拟网络编辑器】,并以【管理员】的身份打开虚拟机。\n\n![img](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/watermark%2Ctype_ZHJvaWRzYW5zZmFsbGJhY2s%2Cshadow_50%2Ctext_Q1NETiBAY2hhb2ZlbmdkZXY%3D%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16.png)\n\n点击【VMnet8 NAT模式】,取消使用本地使用本地[dhcp](https://so.csdn.net/so/search?q=dhcp&spm=1001.2101.3001.7020)服务,配置网络段(子网ip段)为192.168.1.0,点击NAT设置。\n\n![image-20230406140828304](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406140828304.png)\n\n配置【网关ip】,注意【网关ip】需要在【子网ip】段下,这里设置为192.168.1.2\n\n![image-20230406140906021](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406140906021.png)\n\n\n### 2、配置虚拟机静态ip\n\n- 打开命令行,输入\n\n```shell\nvim /etc/sysconfig/network-scripts/ifcfg-ens33\n```\n\n- 修改配置文件内容\n\n![image-20230406141120088](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406141120088.png)\n\n\n\n```shell\n#ip\nIPADDR=192.168.1.136\nNETMASK=255.255.255.0\n#gateway\nGATEWAY=192.168.1.2\n#DNS\nDNS1=114.114.114\n```\n\n注:DNS1是dns服务器,一般设置为114.114.114.114、114.114.115.115和8.8.8.8等(其他的也可以,只不过这几个用的人比较多而已)\n\n\n### 3、检测配置是否成功\n\n- 重启网络服务\n\n```shell\nservice network restart\n```\n\n- ping一下百度\n\n```shell\nping www.baidu.com\n```\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","slug":"VMware虚拟机设置静态IP","published":1,"updated":"2023-10-21T04:53:00.088Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5vi001bfc3u7p3f7c4h","content":"

1、设置虚拟网关

\n

点击导航栏上面的【编辑】–>【虚拟网络编辑器】,并以【管理员】的身份打开虚拟机。

\n

\"img\"

\n

点击【VMnet8 NAT模式】,取消使用本地使用本地dhcp服务,配置网络段(子网ip段)为192.168.1.0,点击NAT设置。

\n

\"image-20230406140828304\"

\n

配置【网关ip】,注意【网关ip】需要在【子网ip】段下,这里设置为192.168.1.2

\n

\"image-20230406140906021\"

\n

2、配置虚拟机静态ip

\n
    \n
  • 打开命令行,输入
  • \n
\n
1
vim /etc/sysconfig/network-scripts/ifcfg-ens33
\n
    \n
  • 修改配置文件内容
  • \n
\n

\"image-20230406141120088\"

\n
1
2
3
4
5
6
7
#ip
IPADDR=192.168.1.136
NETMASK=255.255.255.0
#gateway
GATEWAY=192.168.1.2
#DNS
DNS1=114.114.114
\n

注:DNS1是dns服务器,一般设置为114.114.114.114、114.114.115.115和8.8.8.8等(其他的也可以,只不过这几个用的人比较多而已)

\n

3、检测配置是否成功

\n
    \n
  • 重启网络服务
  • \n
\n
1
service network restart
\n
    \n
  • ping一下百度
  • \n
\n
1
ping www.baidu.com
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":479,"excerpt":"","more":"

1、设置虚拟网关

\n

点击导航栏上面的【编辑】–>【虚拟网络编辑器】,并以【管理员】的身份打开虚拟机。

\n

\"img\"

\n

点击【VMnet8 NAT模式】,取消使用本地使用本地dhcp服务,配置网络段(子网ip段)为192.168.1.0,点击NAT设置。

\n

\"image-20230406140828304\"

\n

配置【网关ip】,注意【网关ip】需要在【子网ip】段下,这里设置为192.168.1.2

\n

\"image-20230406140906021\"

\n

2、配置虚拟机静态ip

\n
    \n
  • 打开命令行,输入
  • \n
\n
1
vim /etc/sysconfig/network-scripts/ifcfg-ens33
\n
    \n
  • 修改配置文件内容
  • \n
\n

\"image-20230406141120088\"

\n
1
2
3
4
5
6
7
#ip
IPADDR=192.168.1.136
NETMASK=255.255.255.0
#gateway
GATEWAY=192.168.1.2
#DNS
DNS1=114.114.114
\n

注:DNS1是dns服务器,一般设置为114.114.114.114、114.114.115.115和8.8.8.8等(其他的也可以,只不过这几个用的人比较多而已)

\n

3、检测配置是否成功

\n
    \n
  • 重启网络服务
  • \n
\n
1
service network restart
\n
    \n
  • ping一下百度
  • \n
\n
1
ping www.baidu.com
\n"},{"title":"Vue子组件中调用父组件中的方法","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D702715071%2C3690882623%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"Vue,前端,组件","abbrlink":"aec1e412","date":"2023-08-12T09:59:05.000Z","_content":"\n{% note simple %}在Vue中,子组件可以通过事件(Event)机制与父组件进行通信,从而调用父组件中的方法。以下是一种常见的方法:{% endnote %}\n\n\n\n## 1 在父组件中定义方法\n\n- 首先,在父组件中定义一个方法\n\n```vue\n\n\n\n```\n\n\n\n## 2 在子组件中触发事件\n\n- 在子组件中,通过`$emit`方法触发一个自定义事件,从而与父组件通信\n\n```vue\n\n\n\n```\n\n- 在这个例子中,当子组件中的按钮被点击时,`callParentMethod`方法会调用`this.$emit('custom-event', ...)`,触发一个名为`custom-event`的自定义事件,并传递一个数据对象作为参数。\n\n\n\n## 3 在父组件中监听事件\n\n- 在父组件的模板中使用`@custom-event`来监听子组件发出的事件,并在相应的处理方法中调用父组件的方法\n\n- 通过这种方式,子组件就能够调用父组件中的方法,实现了子组件与父组件之间的通信。记住,事件名`custom-event`应该在父组件中监听和子组件中触发时保持一致。\n\n\n\n\n\n\n\n\n\n","source":"_posts/Vue子组件中调用父组件中的方法.md","raw":"---\ntitle: Vue子组件中调用父组件中的方法\ncover: >-\n https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D702715071%2C3690882623%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'Vue,前端,组件'\ncategories:\n - 前端开发\ntags:\n - Vue\n - 前端\n - 组件\nabbrlink: aec1e412\ndate: 2023-08-12 17:59:05\n---\n\n{% note simple %}在Vue中,子组件可以通过事件(Event)机制与父组件进行通信,从而调用父组件中的方法。以下是一种常见的方法:{% endnote %}\n\n\n\n## 1 在父组件中定义方法\n\n- 首先,在父组件中定义一个方法\n\n```vue\n\n\n\n```\n\n\n\n## 2 在子组件中触发事件\n\n- 在子组件中,通过`$emit`方法触发一个自定义事件,从而与父组件通信\n\n```vue\n\n\n\n```\n\n- 在这个例子中,当子组件中的按钮被点击时,`callParentMethod`方法会调用`this.$emit('custom-event', ...)`,触发一个名为`custom-event`的自定义事件,并传递一个数据对象作为参数。\n\n\n\n## 3 在父组件中监听事件\n\n- 在父组件的模板中使用`@custom-event`来监听子组件发出的事件,并在相应的处理方法中调用父组件的方法\n\n- 通过这种方式,子组件就能够调用父组件中的方法,实现了子组件与父组件之间的通信。记住,事件名`custom-event`应该在父组件中监听和子组件中触发时保持一致。\n\n\n\n\n\n\n\n\n\n","slug":"Vue子组件中调用父组件中的方法","published":1,"updated":"2023-10-21T04:53:05.237Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5vj001ffc3u7zso56wg","content":"

在Vue中,子组件可以通过事件(Event)机制与父组件进行通信,从而调用父组件中的方法。以下是一种常见的方法:

\n
\n

1 在父组件中定义方法

\n
    \n
  • 首先,在父组件中定义一个方法
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<template>
<div>
<button @click="callParentMethod">调用父组件方法</button>
<child-component @custom-event="handleCustomEvent"></child-component>
</div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
components: {
ChildComponent
},
methods: {
callParentMethod() {
console.log('父组件的方法被调用');
},
handleCustomEvent(payload) {
console.log('自定义事件在父组件被触发,数据:', payload);
}
}
};
</script>
\n

2 在子组件中触发事件

\n
    \n
  • 在子组件中,通过$emit方法触发一个自定义事件,从而与父组件通信
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<template>
<div>
<button @click="callParentMethod">调用父组件方法</button>
</div>
</template>

<script>
export default {
methods: {
callParentMethod() {
this.$emit('custom-event', { data: '来自子组件的数据' });
}
}
};
</script>
\n
    \n
  • 在这个例子中,当子组件中的按钮被点击时,callParentMethod方法会调用this.$emit('custom-event', ...),触发一个名为custom-event的自定义事件,并传递一个数据对象作为参数。
  • \n
\n

3 在父组件中监听事件

\n
    \n
  • \n

    在父组件的模板中使用@custom-event来监听子组件发出的事件,并在相应的处理方法中调用父组件的方法

    \n
  • \n
  • \n

    通过这种方式,子组件就能够调用父组件中的方法,实现了子组件与父组件之间的通信。记住,事件名custom-event应该在父组件中监听和子组件中触发时保持一致。

    \n
  • \n
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":1284,"excerpt":"","more":"

在Vue中,子组件可以通过事件(Event)机制与父组件进行通信,从而调用父组件中的方法。以下是一种常见的方法:

\n
\n

1 在父组件中定义方法

\n
    \n
  • 首先,在父组件中定义一个方法
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<template>
<div>
<button @click="callParentMethod">调用父组件方法</button>
<child-component @custom-event="handleCustomEvent"></child-component>
</div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
components: {
ChildComponent
},
methods: {
callParentMethod() {
console.log('父组件的方法被调用');
},
handleCustomEvent(payload) {
console.log('自定义事件在父组件被触发,数据:', payload);
}
}
};
</script>
\n

2 在子组件中触发事件

\n
    \n
  • 在子组件中,通过$emit方法触发一个自定义事件,从而与父组件通信
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<template>
<div>
<button @click="callParentMethod">调用父组件方法</button>
</div>
</template>

<script>
export default {
methods: {
callParentMethod() {
this.$emit('custom-event', { data: '来自子组件的数据' });
}
}
};
</script>
\n
    \n
  • 在这个例子中,当子组件中的按钮被点击时,callParentMethod方法会调用this.$emit('custom-event', ...),触发一个名为custom-event的自定义事件,并传递一个数据对象作为参数。
  • \n
\n

3 在父组件中监听事件

\n
    \n
  • \n

    在父组件的模板中使用@custom-event来监听子组件发出的事件,并在相应的处理方法中调用父组件的方法

    \n
  • \n
  • \n

    通过这种方式,子组件就能够调用父组件中的方法,实现了子组件与父组件之间的通信。记住,事件名custom-event应该在父组件中监听和子组件中触发时保持一致。

    \n
  • \n
\n"},{"title":"本地启动前端打包的项目","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6830a53bly1fxyfl3we7sj20g809qgma.jpg","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"前端,打包","abbrlink":"16380ff0","date":"2023-07-12T09:59:05.000Z","_content":"\n### 1 全局安装`live-server`插件\n\n```BASH\nnpm install -g live-server \n```\n\n\n\n### 2 启动服务\n\n- 在`dist/build`文件夹中终端输入\n\n```BASH\nlive-server\n```\n\n","source":"_posts/本地启动前端打包的项目.md","raw":"---\ntitle: 本地启动前端打包的项目\ncover: >-\n https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6830a53bly1fxyfl3we7sj20g809qgma.jpg\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: '前端,打包'\ncategories:\n - 前端开发\ntags:\n - 前端\n - 打包\nabbrlink: 16380ff0\ndate: 2023-07-12 17:59:05\n---\n\n### 1 全局安装`live-server`插件\n\n```BASH\nnpm install -g live-server \n```\n\n\n\n### 2 启动服务\n\n- 在`dist/build`文件夹中终端输入\n\n```BASH\nlive-server\n```\n\n","slug":"本地启动前端打包的项目","published":1,"updated":"2023-10-21T04:50:47.089Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5vj001kfc3u8nti7eb2","content":"

1 全局安装live-server插件

\n
1
npm install -g live-server 
\n

2 启动服务

\n
    \n
  • dist/build文件夹中终端输入
  • \n
\n
1
live-server
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":78,"excerpt":"","more":"

1 全局安装live-server插件

\n
1
npm install -g live-server 
\n

2 启动服务

\n
    \n
  • dist/build文件夹中终端输入
  • \n
\n
1
live-server
\n"},{"title":"武汉大学微软社招新2023笔试题","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/%E7%BC%96%E7%A8%8B.png","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"微软社","abbrlink":"33834cc9","date":"2023-08-13T17:50:45.000Z","_content":"\n## 1 题目\n\n{% note simple %}[点此下载 Files](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/Files.zip),并解压缩。Files 包含了 100 个具有随机名称的 .txt 文件,其中有且只有唯一一个 .txt 文件的内容是“MSC2023”,请尝试将其找出,得到文件名称。{% endnote %}\n\n\n\n{% link Github源码, https://github.com/binwenwu/Find-File, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D1662322932%2C969135674%26fm%3D253%26fmt%3Dauto%26app%3D120%26f%3DJPEG %}\n\n\n\n## 2 Java 版本\n\n```Java\nimport java.io.*;\nimport java.util.zip.*;\n\n/**\n * @author wbw\n */\npublic final class FindNameJava {\n public static void main(String[] args) {\n\n // 压缩文件路径\n String zipFilePath = \"src/main/demo/Files.zip\";\n // 解压缩目录\n String unzipFolderPath = \"src/main/demo/\";\n // 目标文件内容\n String targetContent = \"MSC2023\";\n\n\n // 1. 解压文件\n try {\n unzip(zipFilePath, unzipFolderPath);\n System.out.println(\"Unzip operation successful.\");\n } catch (IOException e) {\n e.printStackTrace();\n }\n\n // 2. 开始遍历寻找\n String targetFileName = findTargetFileName(\"src/main/demo/Files\", targetContent);\n if (targetFileName != null) {\n String outputFileName = \"src/main/demo/target.txt\";\n try (PrintWriter writer = new PrintWriter(outputFileName)) {\n writer.println(targetFileName);\n System.out.println(\"Target file name written to \" + outputFileName + \": \" + targetFileName);\n } catch (IOException e) {\n System.out.println(\"Error writing to \" + outputFileName + \": \" + e.getMessage());\n e.printStackTrace();\n }\n } else {\n System.out.println(\"Target file not found.\");\n }\n\n\n }\n\n\n /**\n * 解压缩\n * @author wbw\n * @param zipFilePath 压缩文件路径\n * @param outputFolder 解压缩目录\n */\n public static void unzip(String zipFilePath, String outputFolder) throws IOException {\n byte[] buffer = new byte[1024];\n try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFilePath))) {\n ZipEntry zipEntry = zipInputStream.getNextEntry();\n while (zipEntry != null) {\n String entryName = zipEntry.getName();\n File newFile = new File(outputFolder, entryName);\n if (zipEntry.isDirectory()) {\n newFile.mkdirs();\n } else {\n new File(newFile.getParent()).mkdirs();\n try (FileOutputStream fileOutputStream = new FileOutputStream(newFile)) {\n int length;\n while ((length = zipInputStream.read(buffer)) > 0) {\n fileOutputStream.write(buffer, 0, length);\n }\n }\n }\n zipEntry = zipInputStream.getNextEntry();\n }\n }\n }\n\n\n /**\n * 遍历文件夹,寻找目标文件名,返回文件名\n * @author wbw\n * @param folderPath 文件夹路径\n * @param targetContent 目标文件内容\n * @return 目标文件名\n */\n public static String findTargetFileName(String folderPath, String targetContent) {\n File folder = new File(folderPath);\n File[] files = folder.listFiles();\n\n if (files != null) {\n for (File file : files) {\n if (file.isFile() && file.getName().endsWith(\".txt\")) {\n try (BufferedReader reader = new BufferedReader(new FileReader(file))) {\n String line;\n StringBuilder content = new StringBuilder();\n while ((line = reader.readLine()) != null) {\n content.append(line);\n }\n if (content.toString().equals(targetContent)) {\n // 找到对应文件\n return file.getName();\n }\n } catch (IOException e) {\n e.printStackTrace();\n }\n }\n }\n }\n // 未找到\n return null;\n }\n}\n\n```\n\n\n\n## 3 Spark 版本\n\n```scala\nimport org.apache.spark.{SparkConf, SparkContext}\n\nimport java.io._\nimport java.util.zip._\nimport java.nio.file.{Paths, Path}\n\nobject FindNameScala {\n def main(args: Array[String]): Unit = {\n val zipFilePath = \"src/main/demo/Files.zip\" // ZIP文件路径\n val unzipFolderPath = \"src/main/demo/\" // 解压后的输出文件夹(当前目录)\n val targetContent = \"MSC2023\" // 目标文件内容\n\n\n // 1. 解压文件\n unzip(zipFilePath, unzipFolderPath)\n\n\n // 2. 开始寻找\n val conf = new SparkConf().setMaster(\"local\").setAppName(\"ParallelFileSearch\")\n val sc = new SparkContext(conf)\n val folderPath = \"src/main/demo/Files\" // 文件夹路径\n val textFiles = sc.wholeTextFiles(folderPath) // 读取所有文件的内容,返回(文件名,内容)对\n val matchingFiles = textFiles.filter { case (_, content) => content.trim == targetContent }\n if (matchingFiles.isEmpty()) {\n println(\"Target file not found.\")\n } else {\n val (filePath, _) = matchingFiles.first() // 获取第一个匹配的文件名\n val outputFile = new java.io.PrintWriter(\"src/main/demo/target.txt\") // 创建目标文件\n val fileName = extractFileName(filePath) // 提取文件名\n outputFile.println(fileName) // 写入文件名\n outputFile.close()\n println(s\"Target file name written to target.txt: $fileName\")\n }\n sc.stop()\n\n }\n\n\n /**\n * @author wbw\n * @param zipFilePath 压缩文件路径\n * @param unzipFolderPath 解压缩目录\n */\n def unzip(zipFilePath: String, unzipFolderPath: String): Unit = {\n val buffer = new Array[Byte](1024)\n val zipFile = new ZipFile(zipFilePath)\n\n val entries = zipFile.entries()\n\n while (entries.hasMoreElements) {\n val entry = entries.nextElement()\n val entryName = entry.getName\n val entryPath = s\"$unzipFolderPath/$entryName\"\n\n if (!entry.isDirectory) {\n val inputStream = zipFile.getInputStream(entry)\n val outputStream = new BufferedOutputStream(new FileOutputStream(entryPath))\n\n var bytesRead = 0\n while ( {\n bytesRead = inputStream.read(buffer);\n bytesRead != -1\n }) {\n outputStream.write(buffer, 0, bytesRead) // 从输入流读取内容并写入到输出流\n }\n outputStream.close()\n inputStream.close()\n } else {\n new File(entryPath).mkdirs()\n }\n }\n zipFile.close()\n println(\"Unzip completed.\")\n }\n\n\n/**\n * 从文件路径中提取文件名\n * @param filePath 文件路径\n * @return 文件名\n */\n def extractFileName(filePath: String): String = {\n val lastIndex = filePath.lastIndexOf('/')\n if (lastIndex != -1) {\n filePath.substring(lastIndex + 1)\n } else {\n filePath\n }\n }\n\n}\n\n```\n","source":"_posts/武汉大学微软社招新2023笔试题.md","raw":"---\ntitle: 武汉大学微软社招新2023笔试题\ncover: >-\n https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/%E7%BC%96%E7%A8%8B.png\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: '微软社'\ncategories:\n - 微软社\ntags:\n - 微软社\nabbrlink: 33834cc9\ndate: 2023-08-14 01:50:45\n---\n\n## 1 题目\n\n{% note simple %}[点此下载 Files](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/Files.zip),并解压缩。Files 包含了 100 个具有随机名称的 .txt 文件,其中有且只有唯一一个 .txt 文件的内容是“MSC2023”,请尝试将其找出,得到文件名称。{% endnote %}\n\n\n\n{% link Github源码, https://github.com/binwenwu/Find-File, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D1662322932%2C969135674%26fm%3D253%26fmt%3Dauto%26app%3D120%26f%3DJPEG %}\n\n\n\n## 2 Java 版本\n\n```Java\nimport java.io.*;\nimport java.util.zip.*;\n\n/**\n * @author wbw\n */\npublic final class FindNameJava {\n public static void main(String[] args) {\n\n // 压缩文件路径\n String zipFilePath = \"src/main/demo/Files.zip\";\n // 解压缩目录\n String unzipFolderPath = \"src/main/demo/\";\n // 目标文件内容\n String targetContent = \"MSC2023\";\n\n\n // 1. 解压文件\n try {\n unzip(zipFilePath, unzipFolderPath);\n System.out.println(\"Unzip operation successful.\");\n } catch (IOException e) {\n e.printStackTrace();\n }\n\n // 2. 开始遍历寻找\n String targetFileName = findTargetFileName(\"src/main/demo/Files\", targetContent);\n if (targetFileName != null) {\n String outputFileName = \"src/main/demo/target.txt\";\n try (PrintWriter writer = new PrintWriter(outputFileName)) {\n writer.println(targetFileName);\n System.out.println(\"Target file name written to \" + outputFileName + \": \" + targetFileName);\n } catch (IOException e) {\n System.out.println(\"Error writing to \" + outputFileName + \": \" + e.getMessage());\n e.printStackTrace();\n }\n } else {\n System.out.println(\"Target file not found.\");\n }\n\n\n }\n\n\n /**\n * 解压缩\n * @author wbw\n * @param zipFilePath 压缩文件路径\n * @param outputFolder 解压缩目录\n */\n public static void unzip(String zipFilePath, String outputFolder) throws IOException {\n byte[] buffer = new byte[1024];\n try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFilePath))) {\n ZipEntry zipEntry = zipInputStream.getNextEntry();\n while (zipEntry != null) {\n String entryName = zipEntry.getName();\n File newFile = new File(outputFolder, entryName);\n if (zipEntry.isDirectory()) {\n newFile.mkdirs();\n } else {\n new File(newFile.getParent()).mkdirs();\n try (FileOutputStream fileOutputStream = new FileOutputStream(newFile)) {\n int length;\n while ((length = zipInputStream.read(buffer)) > 0) {\n fileOutputStream.write(buffer, 0, length);\n }\n }\n }\n zipEntry = zipInputStream.getNextEntry();\n }\n }\n }\n\n\n /**\n * 遍历文件夹,寻找目标文件名,返回文件名\n * @author wbw\n * @param folderPath 文件夹路径\n * @param targetContent 目标文件内容\n * @return 目标文件名\n */\n public static String findTargetFileName(String folderPath, String targetContent) {\n File folder = new File(folderPath);\n File[] files = folder.listFiles();\n\n if (files != null) {\n for (File file : files) {\n if (file.isFile() && file.getName().endsWith(\".txt\")) {\n try (BufferedReader reader = new BufferedReader(new FileReader(file))) {\n String line;\n StringBuilder content = new StringBuilder();\n while ((line = reader.readLine()) != null) {\n content.append(line);\n }\n if (content.toString().equals(targetContent)) {\n // 找到对应文件\n return file.getName();\n }\n } catch (IOException e) {\n e.printStackTrace();\n }\n }\n }\n }\n // 未找到\n return null;\n }\n}\n\n```\n\n\n\n## 3 Spark 版本\n\n```scala\nimport org.apache.spark.{SparkConf, SparkContext}\n\nimport java.io._\nimport java.util.zip._\nimport java.nio.file.{Paths, Path}\n\nobject FindNameScala {\n def main(args: Array[String]): Unit = {\n val zipFilePath = \"src/main/demo/Files.zip\" // ZIP文件路径\n val unzipFolderPath = \"src/main/demo/\" // 解压后的输出文件夹(当前目录)\n val targetContent = \"MSC2023\" // 目标文件内容\n\n\n // 1. 解压文件\n unzip(zipFilePath, unzipFolderPath)\n\n\n // 2. 开始寻找\n val conf = new SparkConf().setMaster(\"local\").setAppName(\"ParallelFileSearch\")\n val sc = new SparkContext(conf)\n val folderPath = \"src/main/demo/Files\" // 文件夹路径\n val textFiles = sc.wholeTextFiles(folderPath) // 读取所有文件的内容,返回(文件名,内容)对\n val matchingFiles = textFiles.filter { case (_, content) => content.trim == targetContent }\n if (matchingFiles.isEmpty()) {\n println(\"Target file not found.\")\n } else {\n val (filePath, _) = matchingFiles.first() // 获取第一个匹配的文件名\n val outputFile = new java.io.PrintWriter(\"src/main/demo/target.txt\") // 创建目标文件\n val fileName = extractFileName(filePath) // 提取文件名\n outputFile.println(fileName) // 写入文件名\n outputFile.close()\n println(s\"Target file name written to target.txt: $fileName\")\n }\n sc.stop()\n\n }\n\n\n /**\n * @author wbw\n * @param zipFilePath 压缩文件路径\n * @param unzipFolderPath 解压缩目录\n */\n def unzip(zipFilePath: String, unzipFolderPath: String): Unit = {\n val buffer = new Array[Byte](1024)\n val zipFile = new ZipFile(zipFilePath)\n\n val entries = zipFile.entries()\n\n while (entries.hasMoreElements) {\n val entry = entries.nextElement()\n val entryName = entry.getName\n val entryPath = s\"$unzipFolderPath/$entryName\"\n\n if (!entry.isDirectory) {\n val inputStream = zipFile.getInputStream(entry)\n val outputStream = new BufferedOutputStream(new FileOutputStream(entryPath))\n\n var bytesRead = 0\n while ( {\n bytesRead = inputStream.read(buffer);\n bytesRead != -1\n }) {\n outputStream.write(buffer, 0, bytesRead) // 从输入流读取内容并写入到输出流\n }\n outputStream.close()\n inputStream.close()\n } else {\n new File(entryPath).mkdirs()\n }\n }\n zipFile.close()\n println(\"Unzip completed.\")\n }\n\n\n/**\n * 从文件路径中提取文件名\n * @param filePath 文件路径\n * @return 文件名\n */\n def extractFileName(filePath: String): String = {\n val lastIndex = filePath.lastIndexOf('/')\n if (lastIndex != -1) {\n filePath.substring(lastIndex + 1)\n } else {\n filePath\n }\n }\n\n}\n\n```\n","slug":"武汉大学微软社招新2023笔试题","published":1,"updated":"2023-10-21T05:16:08.660Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5vj001nfc3ud98352hn","content":"

1 题目

\n

点此下载 Files,并解压缩。Files 包含了 100 个具有随机名称的 .txt 文件,其中有且只有唯一一个 .txt 文件的内容是“MSC2023”,请尝试将其找出,得到文件名称。

\n
\n\n

2 Java 版本

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import java.io.*;
import java.util.zip.*;

/**
* @author wbw
*/
public final class FindNameJava {
public static void main(String[] args) {

// 压缩文件路径
String zipFilePath = "src/main/demo/Files.zip";
// 解压缩目录
String unzipFolderPath = "src/main/demo/";
// 目标文件内容
String targetContent = "MSC2023";


// 1. 解压文件
try {
unzip(zipFilePath, unzipFolderPath);
System.out.println("Unzip operation successful.");
} catch (IOException e) {
e.printStackTrace();
}

// 2. 开始遍历寻找
String targetFileName = findTargetFileName("src/main/demo/Files", targetContent);
if (targetFileName != null) {
String outputFileName = "src/main/demo/target.txt";
try (PrintWriter writer = new PrintWriter(outputFileName)) {
writer.println(targetFileName);
System.out.println("Target file name written to " + outputFileName + ": " + targetFileName);
} catch (IOException e) {
System.out.println("Error writing to " + outputFileName + ": " + e.getMessage());
e.printStackTrace();
}
} else {
System.out.println("Target file not found.");
}


}


/**
* 解压缩
* @author wbw
* @param zipFilePath 压缩文件路径
* @param outputFolder 解压缩目录
*/
public static void unzip(String zipFilePath, String outputFolder) throws IOException {
byte[] buffer = new byte[1024];
try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFilePath))) {
ZipEntry zipEntry = zipInputStream.getNextEntry();
while (zipEntry != null) {
String entryName = zipEntry.getName();
File newFile = new File(outputFolder, entryName);
if (zipEntry.isDirectory()) {
newFile.mkdirs();
} else {
new File(newFile.getParent()).mkdirs();
try (FileOutputStream fileOutputStream = new FileOutputStream(newFile)) {
int length;
while ((length = zipInputStream.read(buffer)) > 0) {
fileOutputStream.write(buffer, 0, length);
}
}
}
zipEntry = zipInputStream.getNextEntry();
}
}
}


/**
* 遍历文件夹,寻找目标文件名,返回文件名
* @author wbw
* @param folderPath 文件夹路径
* @param targetContent 目标文件内容
* @return 目标文件名
*/
public static String findTargetFileName(String folderPath, String targetContent) {
File folder = new File(folderPath);
File[] files = folder.listFiles();

if (files != null) {
for (File file : files) {
if (file.isFile() && file.getName().endsWith(".txt")) {
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
StringBuilder content = new StringBuilder();
while ((line = reader.readLine()) != null) {
content.append(line);
}
if (content.toString().equals(targetContent)) {
// 找到对应文件
return file.getName();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
// 未找到
return null;
}
}

\n

3 Spark 版本

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import org.apache.spark.{SparkConf, SparkContext}

import java.io._
import java.util.zip._
import java.nio.file.{Paths, Path}

object FindNameScala {
def main(args: Array[String]): Unit = {
val zipFilePath = "src/main/demo/Files.zip" // ZIP文件路径
val unzipFolderPath = "src/main/demo/" // 解压后的输出文件夹(当前目录)
val targetContent = "MSC2023" // 目标文件内容


// 1. 解压文件
unzip(zipFilePath, unzipFolderPath)


// 2. 开始寻找
val conf = new SparkConf().setMaster("local").setAppName("ParallelFileSearch")
val sc = new SparkContext(conf)
val folderPath = "src/main/demo/Files" // 文件夹路径
val textFiles = sc.wholeTextFiles(folderPath) // 读取所有文件的内容,返回(文件名,内容)对
val matchingFiles = textFiles.filter { case (_, content) => content.trim == targetContent }
if (matchingFiles.isEmpty()) {
println("Target file not found.")
} else {
val (filePath, _) = matchingFiles.first() // 获取第一个匹配的文件名
val outputFile = new java.io.PrintWriter("src/main/demo/target.txt") // 创建目标文件
val fileName = extractFileName(filePath) // 提取文件名
outputFile.println(fileName) // 写入文件名
outputFile.close()
println(s"Target file name written to target.txt: $fileName")
}
sc.stop()

}


/**
* @author wbw
* @param zipFilePath 压缩文件路径
* @param unzipFolderPath 解压缩目录
*/
def unzip(zipFilePath: String, unzipFolderPath: String): Unit = {
val buffer = new Array[Byte](1024)
val zipFile = new ZipFile(zipFilePath)

val entries = zipFile.entries()

while (entries.hasMoreElements) {
val entry = entries.nextElement()
val entryName = entry.getName
val entryPath = s"$unzipFolderPath/$entryName"

if (!entry.isDirectory) {
val inputStream = zipFile.getInputStream(entry)
val outputStream = new BufferedOutputStream(new FileOutputStream(entryPath))

var bytesRead = 0
while ( {
bytesRead = inputStream.read(buffer);
bytesRead != -1
}) {
outputStream.write(buffer, 0, bytesRead) // 从输入流读取内容并写入到输出流
}
outputStream.close()
inputStream.close()
} else {
new File(entryPath).mkdirs()
}
}
zipFile.close()
println("Unzip completed.")
}


/**
* 从文件路径中提取文件名
* @param filePath 文件路径
* @return 文件名
*/
def extractFileName(filePath: String): String = {
val lastIndex = filePath.lastIndexOf('/')
if (lastIndex != -1) {
filePath.substring(lastIndex + 1)
} else {
filePath
}
}

}

\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":5316,"excerpt":"","more":"

1 题目

\n

点此下载 Files,并解压缩。Files 包含了 100 个具有随机名称的 .txt 文件,其中有且只有唯一一个 .txt 文件的内容是“MSC2023”,请尝试将其找出,得到文件名称。

\n
\n\n

2 Java 版本

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import java.io.*;
import java.util.zip.*;

/**
* @author wbw
*/
public final class FindNameJava {
public static void main(String[] args) {

// 压缩文件路径
String zipFilePath = "src/main/demo/Files.zip";
// 解压缩目录
String unzipFolderPath = "src/main/demo/";
// 目标文件内容
String targetContent = "MSC2023";


// 1. 解压文件
try {
unzip(zipFilePath, unzipFolderPath);
System.out.println("Unzip operation successful.");
} catch (IOException e) {
e.printStackTrace();
}

// 2. 开始遍历寻找
String targetFileName = findTargetFileName("src/main/demo/Files", targetContent);
if (targetFileName != null) {
String outputFileName = "src/main/demo/target.txt";
try (PrintWriter writer = new PrintWriter(outputFileName)) {
writer.println(targetFileName);
System.out.println("Target file name written to " + outputFileName + ": " + targetFileName);
} catch (IOException e) {
System.out.println("Error writing to " + outputFileName + ": " + e.getMessage());
e.printStackTrace();
}
} else {
System.out.println("Target file not found.");
}


}


/**
* 解压缩
* @author wbw
* @param zipFilePath 压缩文件路径
* @param outputFolder 解压缩目录
*/
public static void unzip(String zipFilePath, String outputFolder) throws IOException {
byte[] buffer = new byte[1024];
try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFilePath))) {
ZipEntry zipEntry = zipInputStream.getNextEntry();
while (zipEntry != null) {
String entryName = zipEntry.getName();
File newFile = new File(outputFolder, entryName);
if (zipEntry.isDirectory()) {
newFile.mkdirs();
} else {
new File(newFile.getParent()).mkdirs();
try (FileOutputStream fileOutputStream = new FileOutputStream(newFile)) {
int length;
while ((length = zipInputStream.read(buffer)) > 0) {
fileOutputStream.write(buffer, 0, length);
}
}
}
zipEntry = zipInputStream.getNextEntry();
}
}
}


/**
* 遍历文件夹,寻找目标文件名,返回文件名
* @author wbw
* @param folderPath 文件夹路径
* @param targetContent 目标文件内容
* @return 目标文件名
*/
public static String findTargetFileName(String folderPath, String targetContent) {
File folder = new File(folderPath);
File[] files = folder.listFiles();

if (files != null) {
for (File file : files) {
if (file.isFile() && file.getName().endsWith(".txt")) {
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
StringBuilder content = new StringBuilder();
while ((line = reader.readLine()) != null) {
content.append(line);
}
if (content.toString().equals(targetContent)) {
// 找到对应文件
return file.getName();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
// 未找到
return null;
}
}

\n

3 Spark 版本

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import org.apache.spark.{SparkConf, SparkContext}

import java.io._
import java.util.zip._
import java.nio.file.{Paths, Path}

object FindNameScala {
def main(args: Array[String]): Unit = {
val zipFilePath = "src/main/demo/Files.zip" // ZIP文件路径
val unzipFolderPath = "src/main/demo/" // 解压后的输出文件夹(当前目录)
val targetContent = "MSC2023" // 目标文件内容


// 1. 解压文件
unzip(zipFilePath, unzipFolderPath)


// 2. 开始寻找
val conf = new SparkConf().setMaster("local").setAppName("ParallelFileSearch")
val sc = new SparkContext(conf)
val folderPath = "src/main/demo/Files" // 文件夹路径
val textFiles = sc.wholeTextFiles(folderPath) // 读取所有文件的内容,返回(文件名,内容)对
val matchingFiles = textFiles.filter { case (_, content) => content.trim == targetContent }
if (matchingFiles.isEmpty()) {
println("Target file not found.")
} else {
val (filePath, _) = matchingFiles.first() // 获取第一个匹配的文件名
val outputFile = new java.io.PrintWriter("src/main/demo/target.txt") // 创建目标文件
val fileName = extractFileName(filePath) // 提取文件名
outputFile.println(fileName) // 写入文件名
outputFile.close()
println(s"Target file name written to target.txt: $fileName")
}
sc.stop()

}


/**
* @author wbw
* @param zipFilePath 压缩文件路径
* @param unzipFolderPath 解压缩目录
*/
def unzip(zipFilePath: String, unzipFolderPath: String): Unit = {
val buffer = new Array[Byte](1024)
val zipFile = new ZipFile(zipFilePath)

val entries = zipFile.entries()

while (entries.hasMoreElements) {
val entry = entries.nextElement()
val entryName = entry.getName
val entryPath = s"$unzipFolderPath/$entryName"

if (!entry.isDirectory) {
val inputStream = zipFile.getInputStream(entry)
val outputStream = new BufferedOutputStream(new FileOutputStream(entryPath))

var bytesRead = 0
while ( {
bytesRead = inputStream.read(buffer);
bytesRead != -1
}) {
outputStream.write(buffer, 0, bytesRead) // 从输入流读取内容并写入到输出流
}
outputStream.close()
inputStream.close()
} else {
new File(entryPath).mkdirs()
}
}
zipFile.close()
println("Unzip completed.")
}


/**
* 从文件路径中提取文件名
* @param filePath 文件路径
* @return 文件名
*/
def extractFileName(filePath: String): String = {
val lastIndex = filePath.lastIndexOf('/')
if (lastIndex != -1) {
filePath.substring(lastIndex + 1)
} else {
filePath
}
}

}

\n"},{"title":"通过原始存储配置文件恢复数据库(简单粗暴)","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D4220270129%2C1172462401%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"docker,数据库恢复,数据库,恢复,原始存储配置文件,MongoDB,MySQL,PostgreSQL","abbrlink":"add5de83","date":"2023-10-12T01:20:52.000Z","_content":"\n\n{% tip warning faa-horizontal animated %}本文方法为作者自己尝试得出,不一定有效,若失败,还请参考正规的解决方案{% endtip %}\n{% tip %}本文的三种数据库恢复都以Docker来进行恢复,即本文会用Docker创建相应的数据库容器来对需要恢复的数据库进行恢复,在删除配置文件时,需要查看一些配置文件内容是否与需要恢复的数据库相同,如K8S集群中创建的数据库与Docker中创建的pg数据库就不同,`postmaster.pid`等文件内容{% endtip %}\n\n## 1 MongoDB \n\n- 找到需要恢复的数据库的存储配置文件,如下图所示\n\n![image-20231012214612701](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231012214612701.png)\n\n- 拉取MongoDB镜像,版本最好要对应,这里就以安装最新版本为例\n\n```BASH\ndocker pull mongo\n```\n\n- 生成容器\n - `-d`:后台启动模式,不会占用终端\n - `-p`:主机端口:容器内端口\n - `--name`:容器名称\n - `-v`:指定了主机文件系统路径 `/mnt/storage/wbw-mongo/data` 和容器内部路径 `/data/db` 之间的卷映射。这个映射用于将 MongoDB 数据库数据存储在主机上,以便数据持久性。容器内的数据将被存储在主机的 `/mnt/storage/wbw-mongo/data` 目录中\n\n```BASH\ndocker run -d -p 31074:27017 --name wbw-mongo -v /mnt/storage/wbw-mongo/data:/data/db mongo:latest\n```\n\n- 删除刚刚生成的存储配置文件\n\n{% tip warning faa-horizontal animated %}注意,不要直接删除data文件夹,而是将data内的文件全部删除{% endtip %}\n\n```BASH\nrm -rf /mnt/storage/wbw-mongo/data/*\n```\n\n- 将需要恢复的数据库的存储配置文件复制到`/mnt/storage/wbw-mongo/data/`下,假设需要恢复的数据库的存储配置文件位置为`/mnt/storage/bak-mongo/data/`\n\n```BASH\ncp /mnt/storage/bak-mongo/data/* /mnt/storage/wbw-mongo/data/\n```\n\n- 重启容器\n\n```BASH\ndocker restart wbw-mongo\n```\n\n- 恢复结束\n\n\n\n---\n\n\n\n## 2 MySQL \n\n- 找到需要恢复的数据库的存储配置文件,如下图所示\n\n![image-20231012221503300](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231012221503300.png)\n\n- 拉取MySQL镜像,版本最好要对应,这里就以安装最新版本为例\n\n```BASH\ndocker pull mysql\n```\n\n- 生成容器\n\n```BASH\ndocker run -d -p 30491:3306 --name wbw-mysql -e MYSQL_ROOT_PASSWORD=123456 -v /mnt/storage/wbw-mysql/data:/var/lib/mysql mysql:latest\n```\n\n- 删除刚刚生成的存储配置文件\n\n```BASH\nrm -rf /mnt/storage/wbw-mysql/data/*\n```\n\n- 将需要恢复的数据库的存储配置文件复制到`/mnt/storage/wbw-mysql/data/`下,假设需要恢复的数据库的存储配置文件位置为`/mnt/storage/bak-mysql/data/`\n\n```BASH\ncp /mnt/storage/bak-mysql/data/* /mnt/storage/wbw-mysql/data/\n```\n\n- 重启容器\n\n```BASH\ndocker restart wbw-mysql\n```\n\n- 恢复结束\n\n\n\n---\n\n\n\n## 3 PostgreSQL\n\n- 找到需要恢复的数据库的存储配置文件,如下图所示\n\n![image-20231012225210135](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231012225210135.png)\n\n- 拉取PostgreSQL镜像,版本最好要对应,这里就以安装14为例\n\n```BASH\ndocker pull postgres:14\n```\n\n- 生成容器\n\n```BASH\ndocker run -d --name wbw-postgres -v /mnt/storage/wbw-postgres/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:14\n```\n\n- 删除刚刚生成的存储配置文件\n\n```BASH\nrm -rf /mnt/storage/wbw-postgres/data/*\n```\n\n- 将需要恢复的数据库的存储配置文件复制到`/mnt/storage/postgresql/data/`下,假设需要恢复的数据库的存储配置文件位置为`/mnt/storage/bak-postgresql/data/`\n\n```BASH\ncp /mnt/storage/bak-postgres/data/* /mnt/storage/wbw-postgres/data/\n```\n\n- 重启容器\n\n```BASH\ndocker restart wbw-postgres\n```\n\n- 恢复结束\n\n","source":"_posts/通过原始存储配置文件恢复数据库(简单粗暴).md","raw":"---\ntitle: 通过原始存储配置文件恢复数据库(简单粗暴)\ncover: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D4220270129%2C1172462401%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'docker,数据库恢复,数据库,恢复,原始存储配置文件,MongoDB,MySQL,PostgreSQL'\ncategories:\n - 后端开发\ntags:\n - 后端\n - 数据库\n - 容器\n - Docker\nabbrlink: add5de83\ndate: 2023-10-12 09:20:52\n---\n\n\n{% tip warning faa-horizontal animated %}本文方法为作者自己尝试得出,不一定有效,若失败,还请参考正规的解决方案{% endtip %}\n{% tip %}本文的三种数据库恢复都以Docker来进行恢复,即本文会用Docker创建相应的数据库容器来对需要恢复的数据库进行恢复,在删除配置文件时,需要查看一些配置文件内容是否与需要恢复的数据库相同,如K8S集群中创建的数据库与Docker中创建的pg数据库就不同,`postmaster.pid`等文件内容{% endtip %}\n\n## 1 MongoDB \n\n- 找到需要恢复的数据库的存储配置文件,如下图所示\n\n![image-20231012214612701](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231012214612701.png)\n\n- 拉取MongoDB镜像,版本最好要对应,这里就以安装最新版本为例\n\n```BASH\ndocker pull mongo\n```\n\n- 生成容器\n - `-d`:后台启动模式,不会占用终端\n - `-p`:主机端口:容器内端口\n - `--name`:容器名称\n - `-v`:指定了主机文件系统路径 `/mnt/storage/wbw-mongo/data` 和容器内部路径 `/data/db` 之间的卷映射。这个映射用于将 MongoDB 数据库数据存储在主机上,以便数据持久性。容器内的数据将被存储在主机的 `/mnt/storage/wbw-mongo/data` 目录中\n\n```BASH\ndocker run -d -p 31074:27017 --name wbw-mongo -v /mnt/storage/wbw-mongo/data:/data/db mongo:latest\n```\n\n- 删除刚刚生成的存储配置文件\n\n{% tip warning faa-horizontal animated %}注意,不要直接删除data文件夹,而是将data内的文件全部删除{% endtip %}\n\n```BASH\nrm -rf /mnt/storage/wbw-mongo/data/*\n```\n\n- 将需要恢复的数据库的存储配置文件复制到`/mnt/storage/wbw-mongo/data/`下,假设需要恢复的数据库的存储配置文件位置为`/mnt/storage/bak-mongo/data/`\n\n```BASH\ncp /mnt/storage/bak-mongo/data/* /mnt/storage/wbw-mongo/data/\n```\n\n- 重启容器\n\n```BASH\ndocker restart wbw-mongo\n```\n\n- 恢复结束\n\n\n\n---\n\n\n\n## 2 MySQL \n\n- 找到需要恢复的数据库的存储配置文件,如下图所示\n\n![image-20231012221503300](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231012221503300.png)\n\n- 拉取MySQL镜像,版本最好要对应,这里就以安装最新版本为例\n\n```BASH\ndocker pull mysql\n```\n\n- 生成容器\n\n```BASH\ndocker run -d -p 30491:3306 --name wbw-mysql -e MYSQL_ROOT_PASSWORD=123456 -v /mnt/storage/wbw-mysql/data:/var/lib/mysql mysql:latest\n```\n\n- 删除刚刚生成的存储配置文件\n\n```BASH\nrm -rf /mnt/storage/wbw-mysql/data/*\n```\n\n- 将需要恢复的数据库的存储配置文件复制到`/mnt/storage/wbw-mysql/data/`下,假设需要恢复的数据库的存储配置文件位置为`/mnt/storage/bak-mysql/data/`\n\n```BASH\ncp /mnt/storage/bak-mysql/data/* /mnt/storage/wbw-mysql/data/\n```\n\n- 重启容器\n\n```BASH\ndocker restart wbw-mysql\n```\n\n- 恢复结束\n\n\n\n---\n\n\n\n## 3 PostgreSQL\n\n- 找到需要恢复的数据库的存储配置文件,如下图所示\n\n![image-20231012225210135](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231012225210135.png)\n\n- 拉取PostgreSQL镜像,版本最好要对应,这里就以安装14为例\n\n```BASH\ndocker pull postgres:14\n```\n\n- 生成容器\n\n```BASH\ndocker run -d --name wbw-postgres -v /mnt/storage/wbw-postgres/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:14\n```\n\n- 删除刚刚生成的存储配置文件\n\n```BASH\nrm -rf /mnt/storage/wbw-postgres/data/*\n```\n\n- 将需要恢复的数据库的存储配置文件复制到`/mnt/storage/postgresql/data/`下,假设需要恢复的数据库的存储配置文件位置为`/mnt/storage/bak-postgresql/data/`\n\n```BASH\ncp /mnt/storage/bak-postgres/data/* /mnt/storage/wbw-postgres/data/\n```\n\n- 重启容器\n\n```BASH\ndocker restart wbw-postgres\n```\n\n- 恢复结束\n\n","slug":"通过原始存储配置文件恢复数据库(简单粗暴)","published":1,"updated":"2023-10-22T03:36:29.061Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo56i5vp004efc3uh74sb25n","content":"

本文方法为作者自己尝试得出,不一定有效,若失败,还请参考正规的解决方案

\n
\n

本文的三种数据库恢复都以Docker来进行恢复,即本文会用Docker创建相应的数据库容器来对需要恢复的数据库进行恢复,在删除配置文件时,需要查看一些配置文件内容是否与需要恢复的数据库相同,如K8S集群中创建的数据库与Docker中创建的pg数据库就不同,postmaster.pid等文件内容

\n
\n

1 MongoDB

\n
    \n
  • 找到需要恢复的数据库的存储配置文件,如下图所示
  • \n
\n

\"image-20231012214612701\"

\n
    \n
  • 拉取MongoDB镜像,版本最好要对应,这里就以安装最新版本为例
  • \n
\n
1
docker pull mongo
\n
    \n
  • 生成容器\n
      \n
    • -d:后台启动模式,不会占用终端
    • \n
    • -p:主机端口:容器内端口
    • \n
    • --name:容器名称
    • \n
    • -v:指定了主机文件系统路径 /mnt/storage/wbw-mongo/data 和容器内部路径 /data/db 之间的卷映射。这个映射用于将 MongoDB 数据库数据存储在主机上,以便数据持久性。容器内的数据将被存储在主机的 /mnt/storage/wbw-mongo/data 目录中
    • \n
    \n
  • \n
\n
1
docker run -d -p 31074:27017 --name wbw-mongo -v /mnt/storage/wbw-mongo/data:/data/db  mongo:latest
\n
    \n
  • 删除刚刚生成的存储配置文件
  • \n
\n

注意,不要直接删除data文件夹,而是将data内的文件全部删除

\n
\n
1
rm -rf /mnt/storage/wbw-mongo/data/*
\n
    \n
  • 将需要恢复的数据库的存储配置文件复制到/mnt/storage/wbw-mongo/data/下,假设需要恢复的数据库的存储配置文件位置为/mnt/storage/bak-mongo/data/
  • \n
\n
1
cp /mnt/storage/bak-mongo/data/* /mnt/storage/wbw-mongo/data/
\n
    \n
  • 重启容器
  • \n
\n
1
docker restart wbw-mongo
\n
    \n
  • 恢复结束
  • \n
\n
\n

2 MySQL

\n
    \n
  • 找到需要恢复的数据库的存储配置文件,如下图所示
  • \n
\n

\"image-20231012221503300\"

\n
    \n
  • 拉取MySQL镜像,版本最好要对应,这里就以安装最新版本为例
  • \n
\n
1
docker pull mysql
\n
    \n
  • 生成容器
  • \n
\n
1
docker run -d -p 30491:3306 --name wbw-mysql -e MYSQL_ROOT_PASSWORD=123456 -v /mnt/storage/wbw-mysql/data:/var/lib/mysql mysql:latest
\n
    \n
  • 删除刚刚生成的存储配置文件
  • \n
\n
1
rm -rf /mnt/storage/wbw-mysql/data/*
\n
    \n
  • 将需要恢复的数据库的存储配置文件复制到/mnt/storage/wbw-mysql/data/下,假设需要恢复的数据库的存储配置文件位置为/mnt/storage/bak-mysql/data/
  • \n
\n
1
cp /mnt/storage/bak-mysql/data/* /mnt/storage/wbw-mysql/data/
\n
    \n
  • 重启容器
  • \n
\n
1
docker restart wbw-mysql
\n
    \n
  • 恢复结束
  • \n
\n
\n

3 PostgreSQL

\n
    \n
  • 找到需要恢复的数据库的存储配置文件,如下图所示
  • \n
\n

\"image-20231012225210135\"

\n
    \n
  • 拉取PostgreSQL镜像,版本最好要对应,这里就以安装14为例
  • \n
\n
1
docker pull postgres:14
\n
    \n
  • 生成容器
  • \n
\n
1
docker run -d --name wbw-postgres -v /mnt/storage/wbw-postgres/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:14
\n
    \n
  • 删除刚刚生成的存储配置文件
  • \n
\n
1
rm -rf /mnt/storage/wbw-postgres/data/*
\n
    \n
  • 将需要恢复的数据库的存储配置文件复制到/mnt/storage/postgresql/data/下,假设需要恢复的数据库的存储配置文件位置为/mnt/storage/bak-postgresql/data/
  • \n
\n
1
cp /mnt/storage/bak-postgres/data/* /mnt/storage/wbw-postgres/data/
\n
    \n
  • 重启容器
  • \n
\n
1
docker restart wbw-postgres
\n
    \n
  • 恢复结束
  • \n
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.2 万","view":"1.6 亿","danmaku":"33.4 万","coin":"45.0 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":1724,"excerpt":"","more":"

本文方法为作者自己尝试得出,不一定有效,若失败,还请参考正规的解决方案

\n
\n

本文的三种数据库恢复都以Docker来进行恢复,即本文会用Docker创建相应的数据库容器来对需要恢复的数据库进行恢复,在删除配置文件时,需要查看一些配置文件内容是否与需要恢复的数据库相同,如K8S集群中创建的数据库与Docker中创建的pg数据库就不同,postmaster.pid等文件内容

\n
\n

1 MongoDB

\n
    \n
  • 找到需要恢复的数据库的存储配置文件,如下图所示
  • \n
\n

\"image-20231012214612701\"

\n
    \n
  • 拉取MongoDB镜像,版本最好要对应,这里就以安装最新版本为例
  • \n
\n
1
docker pull mongo
\n
    \n
  • 生成容器\n
      \n
    • -d:后台启动模式,不会占用终端
    • \n
    • -p:主机端口:容器内端口
    • \n
    • --name:容器名称
    • \n
    • -v:指定了主机文件系统路径 /mnt/storage/wbw-mongo/data 和容器内部路径 /data/db 之间的卷映射。这个映射用于将 MongoDB 数据库数据存储在主机上,以便数据持久性。容器内的数据将被存储在主机的 /mnt/storage/wbw-mongo/data 目录中
    • \n
    \n
  • \n
\n
1
docker run -d -p 31074:27017 --name wbw-mongo -v /mnt/storage/wbw-mongo/data:/data/db  mongo:latest
\n
    \n
  • 删除刚刚生成的存储配置文件
  • \n
\n

注意,不要直接删除data文件夹,而是将data内的文件全部删除

\n
\n
1
rm -rf /mnt/storage/wbw-mongo/data/*
\n
    \n
  • 将需要恢复的数据库的存储配置文件复制到/mnt/storage/wbw-mongo/data/下,假设需要恢复的数据库的存储配置文件位置为/mnt/storage/bak-mongo/data/
  • \n
\n
1
cp /mnt/storage/bak-mongo/data/* /mnt/storage/wbw-mongo/data/
\n
    \n
  • 重启容器
  • \n
\n
1
docker restart wbw-mongo
\n
    \n
  • 恢复结束
  • \n
\n
\n

2 MySQL

\n
    \n
  • 找到需要恢复的数据库的存储配置文件,如下图所示
  • \n
\n

\"image-20231012221503300\"

\n
    \n
  • 拉取MySQL镜像,版本最好要对应,这里就以安装最新版本为例
  • \n
\n
1
docker pull mysql
\n
    \n
  • 生成容器
  • \n
\n
1
docker run -d -p 30491:3306 --name wbw-mysql -e MYSQL_ROOT_PASSWORD=123456 -v /mnt/storage/wbw-mysql/data:/var/lib/mysql mysql:latest
\n
    \n
  • 删除刚刚生成的存储配置文件
  • \n
\n
1
rm -rf /mnt/storage/wbw-mysql/data/*
\n
    \n
  • 将需要恢复的数据库的存储配置文件复制到/mnt/storage/wbw-mysql/data/下,假设需要恢复的数据库的存储配置文件位置为/mnt/storage/bak-mysql/data/
  • \n
\n
1
cp /mnt/storage/bak-mysql/data/* /mnt/storage/wbw-mysql/data/
\n
    \n
  • 重启容器
  • \n
\n
1
docker restart wbw-mysql
\n
    \n
  • 恢复结束
  • \n
\n
\n

3 PostgreSQL

\n
    \n
  • 找到需要恢复的数据库的存储配置文件,如下图所示
  • \n
\n

\"image-20231012225210135\"

\n
    \n
  • 拉取PostgreSQL镜像,版本最好要对应,这里就以安装14为例
  • \n
\n
1
docker pull postgres:14
\n
    \n
  • 生成容器
  • \n
\n
1
docker run -d --name wbw-postgres -v /mnt/storage/wbw-postgres/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:14
\n
    \n
  • 删除刚刚生成的存储配置文件
  • \n
\n
1
rm -rf /mnt/storage/wbw-postgres/data/*
\n
    \n
  • 将需要恢复的数据库的存储配置文件复制到/mnt/storage/postgresql/data/下,假设需要恢复的数据库的存储配置文件位置为/mnt/storage/bak-postgresql/data/
  • \n
\n
1
cp /mnt/storage/bak-postgres/data/* /mnt/storage/wbw-postgres/data/
\n
    \n
  • 重启容器
  • \n
\n
1
docker restart wbw-postgres
\n
    \n
  • 恢复结束
  • \n
\n"}],"PostAsset":[],"PostCategory":[{"post_id":"clo56i5v80001fc3u6j3f8gfe","category_id":"clo56i5va0004fc3u2329g27s","_id":"clo56i5vd000ifc3u32p24agv"},{"post_id":"clo56i5vd000ffc3ua3m2feky","category_id":"clo56i5vc000cfc3u5xlke8bo","_id":"clo56i5vf000pfc3u9a9502vh"},{"post_id":"clo56i5va0003fc3uarrxdxvm","category_id":"clo56i5vc000cfc3u5xlke8bo","_id":"clo56i5vg000ufc3ubwq3f7it"},{"post_id":"clo56i5vd000hfc3ucj9c1xep","category_id":"clo56i5vc000cfc3u5xlke8bo","_id":"clo56i5vg000yfc3u5m28h2ot"},{"post_id":"clo56i5vb0007fc3uhaz76c7q","category_id":"clo56i5vc000cfc3u5xlke8bo","_id":"clo56i5vh0014fc3uai66f3fx"},{"post_id":"clo56i5vc0009fc3u3paw3kn4","category_id":"clo56i5vc000cfc3u5xlke8bo","_id":"clo56i5vh0019fc3u1rpkb6qq"},{"post_id":"clo56i5vc000bfc3u3b014yt7","category_id":"clo56i5vc000cfc3u5xlke8bo","_id":"clo56i5vj001gfc3u5cvzg1gy"},{"post_id":"clo56i5vi001bfc3u7p3f7c4h","category_id":"clo56i5vh0018fc3u1jsoel9s","_id":"clo56i5vk001ofc3ub9pn8a1d"},{"post_id":"clo56i5ve000mfc3u4p0g0l1z","category_id":"clo56i5vh0018fc3u1jsoel9s","_id":"clo56i5vk001rfc3u711f0682"},{"post_id":"clo56i5vf000ofc3u1tple09c","category_id":"clo56i5vh0018fc3u1jsoel9s","_id":"clo56i5vk001wfc3ugt5qbknj"},{"post_id":"clo56i5vg000tfc3ua14n7mr6","category_id":"clo56i5vh0018fc3u1jsoel9s","_id":"clo56i5vl0022fc3ual3f5gva"},{"post_id":"clo56i5vg000xfc3uf6t13xk7","category_id":"clo56i5vh0018fc3u1jsoel9s","_id":"clo56i5vl0026fc3u13dog1rk"},{"post_id":"clo56i5vh0013fc3u3ez6bx8s","category_id":"clo56i5vl0021fc3u7se0gako","_id":"clo56i5vl002cfc3u9vdy4vsu"},{"post_id":"clo56i5vh0017fc3u7soi4zjq","category_id":"clo56i5vh0018fc3u1jsoel9s","_id":"clo56i5vm002efc3u516ahpv6"},{"post_id":"clo56i5vj001ffc3u7zso56wg","category_id":"clo56i5vl002bfc3u5l3khb9h","_id":"clo56i5vm002jfc3udizy081h"},{"post_id":"clo56i5vj001kfc3u8nti7eb2","category_id":"clo56i5vl002bfc3u5l3khb9h","_id":"clo56i5vm002nfc3ue9ipd6pl"},{"post_id":"clo56i5vj001nfc3ud98352hn","category_id":"clo56i5vm002ifc3ucuzmahoz","_id":"clo56i5vm002rfc3u7wbv83r2"},{"post_id":"clo56i5vp004efc3uh74sb25n","category_id":"clo56i5vp004ffc3ubp072d9s","_id":"clo56i5vp004jfc3u1iobapmu"}],"PostTag":[{"post_id":"clo56i5v80001fc3u6j3f8gfe","tag_id":"clo56i5vb0005fc3ufq7v4tm9","_id":"clo56i5vg000vfc3ugeny1739"},{"post_id":"clo56i5v80001fc3u6j3f8gfe","tag_id":"clo56i5vc000dfc3u17w76nep","_id":"clo56i5vg0010fc3u4px59bgn"},{"post_id":"clo56i5v80001fc3u6j3f8gfe","tag_id":"clo56i5ve000kfc3udqom1l3j","_id":"clo56i5vh0015fc3u7a7pfziy"},{"post_id":"clo56i5va0003fc3uarrxdxvm","tag_id":"clo56i5vf000rfc3u7bt81q2u","_id":"clo56i5vi001dfc3u0greghv4"},{"post_id":"clo56i5va0003fc3uarrxdxvm","tag_id":"clo56i5vh0011fc3u32sxayuk","_id":"clo56i5vj001ifc3u9jpce4l5"},{"post_id":"clo56i5vb0007fc3uhaz76c7q","tag_id":"clo56i5vf000rfc3u7bt81q2u","_id":"clo56i5vk001tfc3u0ddxdi0f"},{"post_id":"clo56i5vb0007fc3uhaz76c7q","tag_id":"clo56i5vh0011fc3u32sxayuk","_id":"clo56i5vk001xfc3uhpncajhl"},{"post_id":"clo56i5vc0009fc3u3paw3kn4","tag_id":"clo56i5vf000rfc3u7bt81q2u","_id":"clo56i5vm002hfc3u5sokbqts"},{"post_id":"clo56i5vc0009fc3u3paw3kn4","tag_id":"clo56i5vh0011fc3u32sxayuk","_id":"clo56i5vm002kfc3u04z4cgzb"},{"post_id":"clo56i5vc0009fc3u3paw3kn4","tag_id":"clo56i5vl0024fc3ua8nz329z","_id":"clo56i5vm002mfc3ubihm1h4r"},{"post_id":"clo56i5vc0009fc3u3paw3kn4","tag_id":"clo56i5vl0029fc3u4se3a6c3","_id":"clo56i5vm002ofc3u2bq23bdf"},{"post_id":"clo56i5vc0009fc3u3paw3kn4","tag_id":"clo56i5vl002dfc3uhguhb59w","_id":"clo56i5vm002qfc3u6uo24clp"},{"post_id":"clo56i5vc000bfc3u3b014yt7","tag_id":"clo56i5vf000rfc3u7bt81q2u","_id":"clo56i5vm002sfc3u2x2ehxx4"},{"post_id":"clo56i5vc000bfc3u3b014yt7","tag_id":"clo56i5vh0011fc3u32sxayuk","_id":"clo56i5vm002ufc3ualmi321o"},{"post_id":"clo56i5vd000ffc3ua3m2feky","tag_id":"clo56i5vm002pfc3ufsocctps","_id":"clo56i5vm002wfc3ud2jt5byr"},{"post_id":"clo56i5vd000ffc3ua3m2feky","tag_id":"clo56i5vm002tfc3ufh4m1awg","_id":"clo56i5vm002xfc3u8bdfbcdu"},{"post_id":"clo56i5vd000hfc3ucj9c1xep","tag_id":"clo56i5vm002pfc3ufsocctps","_id":"clo56i5vm0030fc3ua4i94mfx"},{"post_id":"clo56i5vd000hfc3ucj9c1xep","tag_id":"clo56i5vh0011fc3u32sxayuk","_id":"clo56i5vm0031fc3u3unhh24o"},{"post_id":"clo56i5ve000mfc3u4p0g0l1z","tag_id":"clo56i5vm002zfc3u2birbgfz","_id":"clo56i5vn0034fc3ugf52bmql"},{"post_id":"clo56i5ve000mfc3u4p0g0l1z","tag_id":"clo56i5vm0032fc3u39dkhuz2","_id":"clo56i5vn0035fc3udsn88d6f"},{"post_id":"clo56i5vf000ofc3u1tple09c","tag_id":"clo56i5vm002zfc3u2birbgfz","_id":"clo56i5vn0038fc3u7latexru"},{"post_id":"clo56i5vf000ofc3u1tple09c","tag_id":"clo56i5vn0036fc3u3gde64kz","_id":"clo56i5vn0039fc3ufjzm16lp"},{"post_id":"clo56i5vf000ofc3u1tple09c","tag_id":"clo56i5ve000kfc3udqom1l3j","_id":"clo56i5vn003bfc3u1y2eau03"},{"post_id":"clo56i5vg000tfc3ua14n7mr6","tag_id":"clo56i5vm002zfc3u2birbgfz","_id":"clo56i5vn003efc3u3w2pbwhs"},{"post_id":"clo56i5vg000tfc3ua14n7mr6","tag_id":"clo56i5vn003afc3u16na330v","_id":"clo56i5vn003ffc3uaqwl42io"},{"post_id":"clo56i5vg000tfc3ua14n7mr6","tag_id":"clo56i5ve000kfc3udqom1l3j","_id":"clo56i5vn003hfc3u8p658bdb"},{"post_id":"clo56i5vg000tfc3ua14n7mr6","tag_id":"clo56i5vn003cfc3uagck9jn9","_id":"clo56i5vn003ifc3u7btjgkzt"},{"post_id":"clo56i5vg000xfc3uf6t13xk7","tag_id":"clo56i5vm002zfc3u2birbgfz","_id":"clo56i5vn003kfc3ufjagbnkx"},{"post_id":"clo56i5vg000xfc3uf6t13xk7","tag_id":"clo56i5vn003gfc3ucn3p4l22","_id":"clo56i5vn003lfc3u50a262fa"},{"post_id":"clo56i5vh0013fc3u3ez6bx8s","tag_id":"clo56i5ve000kfc3udqom1l3j","_id":"clo56i5vn003ofc3u29j9cl7w"},{"post_id":"clo56i5vh0013fc3u3ez6bx8s","tag_id":"clo56i5vn003jfc3u20fsa159","_id":"clo56i5vn003pfc3u9vxq0c7c"},{"post_id":"clo56i5vh0013fc3u3ez6bx8s","tag_id":"clo56i5vn003mfc3udw5yh0tu","_id":"clo56i5vo003rfc3u0l3xd37t"},{"post_id":"clo56i5vh0017fc3u7soi4zjq","tag_id":"clo56i5vn003nfc3uakvfadkz","_id":"clo56i5vo003ufc3u2alwc29o"},{"post_id":"clo56i5vh0017fc3u7soi4zjq","tag_id":"clo56i5vn003qfc3u2rm74igv","_id":"clo56i5vo003vfc3u4i4z5o3c"},{"post_id":"clo56i5vh0017fc3u7soi4zjq","tag_id":"clo56i5vo003sfc3u201hh9cr","_id":"clo56i5vo003xfc3u0hhc3s33"},{"post_id":"clo56i5vi001bfc3u7p3f7c4h","tag_id":"clo56i5vn003nfc3uakvfadkz","_id":"clo56i5vo0040fc3uazd3962u"},{"post_id":"clo56i5vi001bfc3u7p3f7c4h","tag_id":"clo56i5vn003qfc3u2rm74igv","_id":"clo56i5vo0041fc3u544d0u1h"},{"post_id":"clo56i5vi001bfc3u7p3f7c4h","tag_id":"clo56i5vo003yfc3u95d77320","_id":"clo56i5vo0043fc3ubpsqejn5"},{"post_id":"clo56i5vj001ffc3u7zso56wg","tag_id":"clo56i5vo003zfc3u96fc2ut1","_id":"clo56i5vo0046fc3u82ceh0rp"},{"post_id":"clo56i5vj001ffc3u7zso56wg","tag_id":"clo56i5vo0042fc3u22wxgwi6","_id":"clo56i5vo0047fc3u6j5ebkbf"},{"post_id":"clo56i5vj001ffc3u7zso56wg","tag_id":"clo56i5vo0044fc3uh1e2e087","_id":"clo56i5vo0049fc3u6lwiabjn"},{"post_id":"clo56i5vj001kfc3u8nti7eb2","tag_id":"clo56i5vo0042fc3u22wxgwi6","_id":"clo56i5vo004bfc3u89cu08pk"},{"post_id":"clo56i5vj001kfc3u8nti7eb2","tag_id":"clo56i5vo0048fc3ua0epeh11","_id":"clo56i5vo004cfc3u9xccg94h"},{"post_id":"clo56i5vj001nfc3ud98352hn","tag_id":"clo56i5vo004afc3u582f4ezf","_id":"clo56i5vo004dfc3u640fbs17"},{"post_id":"clo56i5vp004efc3uh74sb25n","tag_id":"clo56i5vp004gfc3ugtb34kt4","_id":"clo56i5vp004hfc3udozc8dg1"},{"post_id":"clo56i5vp004efc3uh74sb25n","tag_id":"clo56i5vl002dfc3uhguhb59w","_id":"clo56i5vp004ifc3u10e6f3m0"},{"post_id":"clo56i5vp004efc3uh74sb25n","tag_id":"clo56i5vf000rfc3u7bt81q2u","_id":"clo56i5vp004kfc3uanxz5lx4"},{"post_id":"clo56i5vp004efc3uh74sb25n","tag_id":"clo56i5vh0011fc3u32sxayuk","_id":"clo56i5vp004lfc3udk915p0m"}],"Tag":[{"name":"遥感","_id":"clo56i5vb0005fc3ufq7v4tm9"},{"name":"GIS","_id":"clo56i5vc000dfc3u17w76nep"},{"name":"软件安装","_id":"clo56i5ve000kfc3udqom1l3j"},{"name":"容器","_id":"clo56i5vf000rfc3u7bt81q2u"},{"name":"Docker","_id":"clo56i5vh0011fc3u32sxayuk"},{"name":"PostgreSQL","_id":"clo56i5vl0024fc3ua8nz329z"},{"name":"PostGIS","_id":"clo56i5vl0029fc3u4se3a6c3"},{"name":"数据库","_id":"clo56i5vl002dfc3uhguhb59w"},{"name":"K8S","_id":"clo56i5vm002pfc3ufsocctps"},{"name":"Containerd","_id":"clo56i5vm002tfc3ufh4m1awg"},{"name":"Linux","_id":"clo56i5vm002zfc3u2birbgfz"},{"name":"安装","_id":"clo56i5vm0032fc3u39dkhuz2"},{"name":"Pandoc","_id":"clo56i5vn0036fc3u3gde64kz"},{"name":"Clash","_id":"clo56i5vn003afc3u16na330v"},{"name":"VPN","_id":"clo56i5vn003cfc3uagck9jn9"},{"name":"存储","_id":"clo56i5vn003gfc3ucn3p4l22"},{"name":"Office","_id":"clo56i5vn003jfc3u20fsa159"},{"name":"Windows","_id":"clo56i5vn003mfc3udw5yh0tu"},{"name":"VMware","_id":"clo56i5vn003nfc3uakvfadkz"},{"name":"虚拟机","_id":"clo56i5vn003qfc3u2rm74igv"},{"name":"CentOS","_id":"clo56i5vo003sfc3u201hh9cr"},{"name":"IP","_id":"clo56i5vo003yfc3u95d77320"},{"name":"Vue","_id":"clo56i5vo003zfc3u96fc2ut1"},{"name":"前端","_id":"clo56i5vo0042fc3u22wxgwi6"},{"name":"组件","_id":"clo56i5vo0044fc3uh1e2e087"},{"name":"打包","_id":"clo56i5vo0048fc3ua0epeh11"},{"name":"微软社","_id":"clo56i5vo004afc3u582f4ezf"},{"name":"后端","_id":"clo56i5vp004gfc3ugtb34kt4"}]}} \ No newline at end of file +{"meta":{"version":1,"warehouse":"4.0.2"},"models":{"Asset":[{"_id":"themes/acryple/source/owo.json","path":"owo.json","modified":0,"renderable":1},{"_id":"themes/acryple/source/sw.js","path":"sw.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/swReg.js","path":"swReg.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/ariasakablog.css","path":"css/ariasakablog.css","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/article_shine.css","path":"css/article_shine.css","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/cat.css","path":"css/cat.css","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/comment.css","path":"css/comment.css","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/commentBarrage.css","path":"css/commentBarrage.css","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/danmaku.css","path":"css/danmaku.css","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/iconfont.css","path":"css/iconfont.css","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/iconfont.ttf","path":"css/iconfont.ttf","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/iconfont.woff","path":"css/iconfont.woff","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/iconfont.woff2","path":"css/iconfont.woff2","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/index.styl","path":"css/index.styl","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/music.css","path":"css/music.css","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/people.css","path":"css/people.css","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/stylessimple.css","path":"css/stylessimple.css","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/swiper.min.css","path":"css/swiper.min.css","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/swiperstyle.css","path":"css/swiperstyle.css","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/top_wave.css","path":"css/top_wave.css","modified":0,"renderable":1},{"_id":"themes/acryple/source/css/var.styl","path":"css/var.styl","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/aplayersave.js","path":"js/aplayersave.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/bbtalk.js","path":"js/bbtalk.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/baiduhistory.js","path":"js/baiduhistory.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/bbtalklunbo.js","path":"js/bbtalklunbo.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/browser.js","path":"js/browser.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/calendar.js","path":"js/calendar.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/cat.js","path":"js/cat.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/cate.js","path":"js/cate.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/commentBarrage.js","path":"js/commentBarrage.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/commentsCount.js","path":"js/commentsCount.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/copy.js","path":"js/copy.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/countup.js","path":"js/countup.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/cursor.js","path":"js/cursor.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/danmaku.js","path":"js/danmaku.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/day.js","path":"js/day.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/dianzan.js","path":"js/dianzan.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/dis.js","path":"js/dis.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/fixbugpjax.js","path":"js/fixbugpjax.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/fixed_card_widget.js","path":"js/fixed_card_widget.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/fps.js","path":"js/fps.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/gitalker.js","path":"js/gitalker.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/heimu.js","path":"js/heimu.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/hide.show.js","path":"js/hide.show.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/languages.js","path":"js/languages.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/local-search.js","path":"js/local-search.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/lunar.js","path":"js/lunar.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/latest.js","path":"js/latest.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/lyxTalk.js","path":"js/lyxTalk.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/main.js","path":"js/main.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/nav.js","path":"js/nav.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/noie.js","path":"js/noie.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/owo.js","path":"js/owo.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/people.js","path":"js/people.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/player.js","path":"js/player.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/randomFriend.js","path":"js/randomFriend.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/resizeTop.js","path":"js/resizeTop.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/rightmenu.js","path":"js/rightmenu.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/sakura.js","path":"js/sakura.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/seo.js","path":"js/seo.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/settings.js","path":"js/settings.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/sitetime.js","path":"js/sitetime.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/smooth-scrolling.js","path":"js/smooth-scrolling.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/sw-toolbox.js","path":"js/sw-toolbox.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/swiperinit.js","path":"js/swiperinit.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/tianli_gpt.js","path":"js/tianli_gpt.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/tw_cn.js","path":"js/tw_cn.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/twikoo.all.min.js","path":"js/twikoo.all.min.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/welcome.js","path":"js/welcome.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/utils.js","path":"js/utils.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/welcomeconsole.js","path":"js/welcomeconsole.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/dist/baiduhistory.dev.js","path":"js/dist/baiduhistory.dev.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/dist/bbtalk.dev.js","path":"js/dist/bbtalk.dev.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/dist/bbtalklunbo.dev.js","path":"js/dist/bbtalklunbo.dev.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/dist/calendar.dev.js","path":"js/dist/calendar.dev.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/dist/fixbugpjax.dev.js","path":"js/dist/fixbugpjax.dev.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/dist/gongnong.dev.js","path":"js/dist/gongnong.dev.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/dist/heimu.dev.js","path":"js/dist/heimu.dev.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/dist/links.dev.js","path":"js/dist/links.dev.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/dist/main.dev.js","path":"js/dist/main.dev.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/dist/resizeTop.dev.js","path":"js/dist/resizeTop.dev.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/dist/seo.dev.js","path":"js/dist/seo.dev.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/dist/twikoo.all.min.dev.js","path":"js/dist/twikoo.all.min.dev.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/search/algolia.js","path":"js/search/algolia.js","modified":0,"renderable":1},{"_id":"themes/acryple/source/js/search/local-search.js","path":"js/search/local-search.js","modified":0,"renderable":1},{"_id":"source/404.html","path":"404.html","modified":0,"renderable":0},{"_id":"source/favicon.ico","path":"favicon.ico","modified":0,"renderable":0},{"_id":"source/noie.html","path":"noie.html","modified":0,"renderable":0},{"_id":"source/people.html","path":"people.html","modified":0,"renderable":0},{"_id":"source/projects.html","path":"projects.html","modified":0,"renderable":0},{"_id":"source/search.xml","path":"search.xml","modified":0,"renderable":0},{"_id":"source/assets/douban-loading.gif","path":"assets/douban-loading.gif","modified":0,"renderable":0},{"_id":"source/img/16.png","path":"img/16.png","modified":0,"renderable":0},{"_id":"source/img/144.png","path":"img/144.png","modified":0,"renderable":0},{"_id":"source/img/1666416625095-iPhone X.png","path":"img/1666416625095-iPhone X.png","modified":0,"renderable":0},{"_id":"source/img/1666416702650-Macbook Pro 2016 (1).png","path":"img/1666416702650-Macbook Pro 2016 (1).png","modified":0,"renderable":0},{"_id":"source/img/1666416764216-Nexus 9.png","path":"img/1666416764216-Nexus 9.png","modified":0,"renderable":0},{"_id":"source/img/180.png","path":"img/180.png","modified":0,"renderable":0},{"_id":"source/img/192.png","path":"img/192.png","modified":0,"renderable":0},{"_id":"source/img/20200904222157.png","path":"img/20200904222157.png","modified":0,"renderable":0},{"_id":"source/img/20200924153652.png","path":"img/20200924153652.png","modified":0,"renderable":0},{"_id":"source/img/256.png","path":"img/256.png","modified":0,"renderable":0},{"_id":"source/img/36.png","path":"img/36.png","modified":0,"renderable":0},{"_id":"source/img/48.png","path":"img/48.png","modified":0,"renderable":0},{"_id":"source/img/512.png","path":"img/512.png","modified":0,"renderable":0},{"_id":"source/img/72.png","path":"img/72.png","modified":0,"renderable":0},{"_id":"source/img/72645310.jpg","path":"img/72645310.jpg","modified":0,"renderable":0},{"_id":"source/img/8DSTSS20990281646044689944.PNG","path":"img/8DSTSS20990281646044689944.PNG","modified":0,"renderable":0},{"_id":"source/img/96.png","path":"img/96.png","modified":0,"renderable":0},{"_id":"source/img/O35HOG22090681654187900371.jpg","path":"img/O35HOG22090681654187900371.jpg","modified":0,"renderable":0},{"_id":"source/img/a.webp","path":"img/a.webp","modified":0,"renderable":0},{"_id":"source/img/ad.png","path":"img/ad.png","modified":0,"renderable":0},{"_id":"source/img/alipay.png","path":"img/alipay.png","modified":0,"renderable":0},{"_id":"source/img/apple-touch-icon.png","path":"img/apple-touch-icon.png","modified":0,"renderable":0},{"_id":"source/img/b.jpg","path":"img/b.jpg","modified":0,"renderable":0},{"_id":"source/img/buYgVO22990681624844309044.jpg","path":"img/buYgVO22990681624844309044.jpg","modified":0,"renderable":0},{"_id":"source/img/cd.png","path":"img/cd.png","modified":0,"renderable":0},{"_id":"source/img/cd_tou.png","path":"img/cd_tou.png","modified":0,"renderable":0},{"_id":"source/img/comment.png","path":"img/comment.png","modified":0,"renderable":0},{"_id":"source/img/favicon.ico","path":"img/favicon.ico","modified":0,"renderable":0},{"_id":"source/img/favicon.jpg","path":"img/favicon.jpg","modified":0,"renderable":0},{"_id":"source/img/mqaizf23990681654186719414.jpeg","path":"img/mqaizf23990681654186719414.jpeg","modified":0,"renderable":0},{"_id":"source/img/friend_404.gif","path":"img/friend_404.gif","modified":0,"renderable":0},{"_id":"source/img/nyancat.gif","path":"img/nyancat.gif","modified":0,"renderable":0},{"_id":"source/img/scacascasc.jpg","path":"img/scacascasc.jpg","modified":0,"renderable":0},{"_id":"source/img/siteshot.png","path":"img/siteshot.png","modified":0,"renderable":0},{"_id":"source/img/uTools_1666416859497-iMac.png","path":"img/uTools_1666416859497-iMac.png","modified":0,"renderable":0},{"_id":"source/img/头像.png","path":"img/头像.png","modified":0,"renderable":0},{"_id":"source/img/wechat.png","path":"img/wechat.png","modified":0,"renderable":0}],"Cache":[{"_id":"source/.DS_Store","hash":"9cef72d66273c3b903e1e43f2308f83bde6fdb34","modified":1698245896429},{"_id":"source/404.html","hash":"7104b2160a2559b3235604c9da9b6dc623150ebd","modified":1697868154529},{"_id":"source/favicon.ico","hash":"07e2960f0a3ceef1be826753c886d4da3b518dae","modified":1697850535929},{"_id":"source/link.json","hash":"b65431e745ae0807cf735013ad76e51606d21a56","modified":1698132676596},{"_id":"source/manifest.json","hash":"2cfe2ff04d5f6b792e15f5475047820680e081f1","modified":1697868133413},{"_id":"source/noie.html","hash":"9cd3ca039c06ffc39d8bbd8c73756d4d7b1a6796","modified":1697868169306},{"_id":"source/package.json","hash":"e29f6172f303300e570228e0609122228a68e053","modified":1697868206686},{"_id":"source/people.html","hash":"718b78874f19d65ccd5d90f450acdc5cfb6cdcc9","modified":1697863645647},{"_id":"source/projects.html","hash":"3c4ad54d574e2846d36a1c278c1ad761eb72e5c0","modified":1697887778435},{"_id":"source/search.xml","hash":"1008f75b87ba06da417effd3e91fabc5ead297e4","modified":1697850535968},{"_id":"source/_data/bangumis.json","hash":"f5e1435f822f9b41e81e4a68d2b7ab93df93c91d","modified":1698246240969},{"_id":"source/_data/games.yml","hash":"96dd327234297ae0269a3bddf685a24210901966","modified":1697956415693},{"_id":"source/_data/creativity.yml","hash":"340ad46a496c48f5f7288d6e5e2c10063cfefe1f","modified":1697873663948},{"_id":"source/_data/link.yml","hash":"a2db43785fee04d9e6c722f0da2a61851cde5873","modified":1698132328507},{"_id":"source/_posts/Centos安装Grass.md","hash":"cd6498e016a47167bbef1b309786f069f67092b1","modified":1697863901195},{"_id":"source/_posts/Docker安装PostgreSQL并添加PostGIS拓展.md","hash":"4a30d9183a22dc1c1a0c26d69192014e7ef9e15e","modified":1697863917415},{"_id":"source/_posts/Docker安装配置.md","hash":"179f4c0fb2b57cf9bd88260fa09ba9be8f0fe451","modified":1697863909730},{"_id":"source/_posts/Docker镜像打包迁移.md","hash":"6da4249a3dec723426f9afd4224016efb24adde3","modified":1697863922184},{"_id":"source/_posts/Docker修改容器映射主机端口.md","hash":"34f8b9c5161510abc22f2d1ad850c541325355e0","modified":1697863926632},{"_id":"source/_posts/K8S集群环境搭建(Containerd作为容器).md","hash":"67dfebe5a3f88effb7f623a91ed6b2d906de613a","modified":1697863933442},{"_id":"source/_posts/K8S集群环境搭建(Docker作为容器).md","hash":"ee700fedd86da6037faf01dc391db2cd066303a5","modified":1697863938653},{"_id":"source/_posts/Linux 系统字体安装.md","hash":"544f7ed5edde8f3042b1f7da338bfb7decfe9572","modified":1698136700901},{"_id":"source/_posts/Linux上Pandoc的使用.md","hash":"db32ba91a6128ef0f3d09067091d3b52dd842b07","modified":1697950420814},{"_id":"source/_posts/Linux配置NFS共享存储服务器.md","hash":"f94b80d6b627945d73e4fbc77d1c6db6b45560be","modified":1697863954025},{"_id":"source/_posts/Linux安装Clash – 代理 – VPN.md","hash":"f49859abf78919d4e62319230aa099306fbbdd2b","modified":1698136695650},{"_id":"source/_posts/Microsoft Office下载及激活教程.md","hash":"3ef3629e8b4f8cb33af42e63a75c5acf1c16d74e","modified":1697950152391},{"_id":"source/_posts/VMware安装CentOS 7.md","hash":"b95ba5be87174493606f0ead134763377b208e48","modified":1697863972342},{"_id":"source/_posts/VMware虚拟机设置静态IP.md","hash":"9877380d4c20190a4525ad763fcebe2430f89c3c","modified":1697863980088},{"_id":"source/_posts/Vue子组件中调用父组件中的方法.md","hash":"b8013bdbedfbd883f699925f0ba73f768c6ebcd7","modified":1697863985237},{"_id":"source/_posts/武汉大学微软社招新2023笔试题.md","hash":"776fab702fd55b5d7719e3f1f36fe5c9ec18b43c","modified":1697865368660},{"_id":"source/_posts/本地启动前端打包的项目.md","hash":"48b6af4f04aabcaa5422d30cc1e3044383e2c055","modified":1697863847089},{"_id":"source/_posts/通过原始存储配置文件恢复数据库(简单粗暴).md","hash":"82028f1032ea0d6813b9f3d018f17751b720715c","modified":1697945789061},{"_id":"source/_posts/基于 MPI 的埃拉托斯特尼筛法的并行化设计、实现与结果分析.md","hash":"2ee14b479b027922ea9ef08bc7e5d76e0950ab55","modified":1698246194037},{"_id":"source/about/index.md","hash":"d46ac45fe19355b0fcff146f62a28bc4e20c8077","modified":1697954984139},{"_id":"source/bangumis/index.md","hash":"001e001cf7d2171bbc706ea1d774039df71f3a9c","modified":1697850535929},{"_id":"source/categories/index.md","hash":"df49a8984100a2eb6b88bd8003a00897384721b6","modified":1697850535929},{"_id":"source/assets/douban-loading.gif","hash":"5817eeb1aaa58d12da01d526b3f5df591f5bccc6","modified":1697850535929},{"_id":"source/chatgpt/index.md","hash":"28a1e5b02a69bffb66f8899cc6c96d5f55a9fd55","modified":1698224171922},{"_id":"source/eat_cats/index.md","hash":"e83a1ab16bb063b2984d1f771c179b253c462372","modified":1698244263857},{"_id":"source/fcircle/index.md","hash":"a306f327a155ec1dc7fe89406df311dae1472d42","modified":1698056899350},{"_id":"source/fontawesome/index.md","hash":"9f7da684cbbbf1dce726997e33cadc76f5b1693a","modified":1697850535930},{"_id":"source/img/16.png","hash":"b33816a916bd35efad0f0119c54bbca47f9a0f3e","modified":1697850535930},{"_id":"source/img/144.png","hash":"b361835574cc281166e6196631f845d7c1a9c5b2","modified":1697850535930},{"_id":"source/img/.DS_Store","hash":"4c87d7d5e5b7d504d5a5bfb2f472f0c2e8a315f4","modified":1698219963253},{"_id":"source/img/180.png","hash":"79e72d5ef642a0005a91931f16a58249dfe2aa4b","modified":1697850535949},{"_id":"source/img/20200904222157.png","hash":"a66ccc276588321c4b225c51407df400b80070a3","modified":1697850535949},{"_id":"source/img/20200924153652.png","hash":"c451ed5524c9791ddfde5542d1fbf37c90607011","modified":1697850535949},{"_id":"source/img/192.png","hash":"e223eec796a440e58498da2afcb924ae9c2e9af5","modified":1697850535949},{"_id":"source/img/48.png","hash":"2807bcdaa106f1b9860c410e2b6518c4b4fed7f5","modified":1697850535949},{"_id":"source/img/72.png","hash":"4c7badee6be03ff4f3ccb55ec44dc7b7dc449714","modified":1697850535951},{"_id":"source/img/36.png","hash":"42222cc7ba47da2cea93badd38eeb1f030eb0e9d","modified":1697850535949},{"_id":"source/img/8DSTSS20990281646044689944.PNG","hash":"bada86fe868064d9acba2ba37dafcbfd2194442f","modified":1697850535952},{"_id":"source/img/72645310.jpg","hash":"1a2fc365c4f196cdd0659b1c8265653c83a66a15","modified":1697850535951},{"_id":"source/img/96.png","hash":"697c5a92a7ab712d677a96aad47cda9d852810fe","modified":1697850535952},{"_id":"source/img/O35HOG22090681654187900371.jpg","hash":"3eab9ee4d74c990bb8a4bd216d9a20f18d3862ff","modified":1697850535952},{"_id":"source/img/a.webp","hash":"9a78727cfd1c342f848edf8763a8cb040dc91621","modified":1697850535952},{"_id":"source/img/ad.png","hash":"ba05e1e0b88a71e3c6238aab1d3b123d1b9c8edd","modified":1697850535952},{"_id":"source/img/alipay.png","hash":"681c9c1a8d67ac76e1d59d29f0c2239a1b0272ee","modified":1697947276521},{"_id":"source/img/b.jpg","hash":"9c3363918511576e4782b477853298e82f6f23b1","modified":1697859726446},{"_id":"source/img/buYgVO22990681624844309044.jpg","hash":"2591290f4b1e24ba658805b116dae2da6d7455f8","modified":1697850535952},{"_id":"source/img/apple-touch-icon.png","hash":"79e72d5ef642a0005a91931f16a58249dfe2aa4b","modified":1697850535952},{"_id":"source/img/cd.png","hash":"9e2948f8fcdd6a33d4d88be26c26cc5a3f284a39","modified":1698133864527},{"_id":"source/img/cd_tou.png","hash":"f3be731e88699b3221349f154675f23efe6bbcaf","modified":1698133864508},{"_id":"source/img/comment.png","hash":"2873edd17eb2fdc0cbbb28384e6e049352c97f81","modified":1697850535952},{"_id":"source/img/favicon.ico","hash":"07e2960f0a3ceef1be826753c886d4da3b518dae","modified":1697850535953},{"_id":"source/img/mqaizf23990681654186719414.jpeg","hash":"bf7e3f6f1cac8e3c6778521afaadb202909323db","modified":1697850535954},{"_id":"source/img/friend_404.gif","hash":"5817eeb1aaa58d12da01d526b3f5df591f5bccc6","modified":1697850535954},{"_id":"source/img/nyancat.gif","hash":"afeb22b45705116cda3ea983e64d31557ff7bc7d","modified":1697850535954},{"_id":"source/img/头像.png","hash":"6fbe3833990993d8a334e13ed7aed8c1ed967104","modified":1697862895392},{"_id":"source/img/wechat.png","hash":"384a551645bd5fcff14bfcec2a684f8360db5008","modified":1697947276537},{"_id":"source/kongtiao/index.md","hash":"7722513d923ff354f9ff193159d6405fd7306ad7","modified":1698161579853},{"_id":"source/license/index.md","hash":"381b2f19d46604d880212122251c663e5b7c9415","modified":1697896059286},{"_id":"source/links/index.md","hash":"5ec1be91fcf542ac987d07ec45b51c56f28c26ef","modified":1698155238528},{"_id":"source/music/index.md","hash":"e3acf4adc9917995dd93e13cfac1cf91b602e7df","modified":1698196341674},{"_id":"source/messageboard/index.html","hash":"a76539e64ccff3289b67f7ad4e16030464f93a39","modified":1697955368629},{"_id":"source/muyu/index.md","hash":"5e7d0a262ee36d0161ab2ab588091f775961b8a9","modified":1697850535967},{"_id":"source/speaks/index.md","hash":"d35fd4166b75311045224b18c595cdd73d6ecc0f","modified":1698024639447},{"_id":"source/othersite/index.md","hash":"70efc7486bb529fe92cb4dde10ebc81ec167b8c6","modified":1697900479754},{"_id":"source/stars/allStars.json","hash":"c568b0fb74d29027eaa036fbee0b5d2e58957184","modified":1697894404502},{"_id":"source/subscribe/index.md","hash":"fe24e690a999095ebe17861831f8a038c4d59d27","modified":1697951342000},{"_id":"source/stars/stars.js","hash":"07ab2b10a2fb56540cbc147986ea480c48128800","modified":1697894404503},{"_id":"source/tags/index.md","hash":"5e9bcd3d06fb15fd619ae0698cac96907d74c55a","modified":1697850535968},{"_id":"source/stars/index.md","hash":"8a0531c5d9ed09b13f8ad47962a1516442d4efa0","modified":1697900477081},{"_id":"source/tomato_clock/index.md","hash":"9981e51a21567b06380a08dabb1d82b4ba8d17a5","modified":1698198111782},{"_id":"source/tools/index.md","hash":"197c06fdea0176f29b63f60b809e5c4d56d3a821","modified":1697850535968},{"_id":"source/zaobao/index.md","hash":"c10d6f39f8a54a93164388eeb45d6ac008ca2fc1","modified":1698124643633},{"_id":"source/update/index.md","hash":"a382c309af04307465ada128e6d1d0bccc47d143","modified":1697942979862},{"_id":"source/img/256.png","hash":"befbe5079133291ec2f63432f27eb60dc79299a9","modified":1697850535949},{"_id":"source/img/favicon.jpg","hash":"87b9a48ef9a6be95608aba8593bd361d4866da09","modified":1697850535953},{"_id":"source/img/scacascasc.jpg","hash":"ecd4ffd28005339f8027870759264b2e17ef61bb","modified":1697850535952},{"_id":"source/img/512.png","hash":"8981183b57d05ab7a32bd70f675ca136510119d3","modified":1697850535951},{"_id":"themes/acryple/layout/includes/dist/404.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1697850535970},{"_id":"themes/acryple/layout/includes/mixins/dist/post-ui.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1697850535972},{"_id":"themes/acryple/layout/includes/page/dist/categories.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1697850535973},{"_id":"themes/acryple/.DS_Store","hash":"02f4c117fbd299d9f4f903b67ba57f91dab75902","modified":1697873896875},{"_id":"themes/acryple/LICENSE","hash":"88fab95c66728ce9125509ce27324766e7b90740","modified":1697870137478},{"_id":"themes/acryple/package.json","hash":"37226e5094369b0bcac228e24759e6104713282a","modified":1697889666390},{"_id":"themes/acryple/_config.yml","hash":"caed9476817a7c9968ab93629ba8c2bdea7cf616","modified":1697850535969},{"_id":"themes/acryple/.github/stale.yml","hash":"5e8ea535424e8112439135d21afc5262c0bc0b39","modified":1697850535969},{"_id":"themes/acryple/languages/default.yml","hash":"1e37a3695d50e3e61d7c36e58a6dac872a4a56cd","modified":1697850535969},{"_id":"themes/acryple/languages/en.yml","hash":"d1bb560698eb8b0079495b7b18b44facb610f9fd","modified":1697850535969},{"_id":"themes/acryple/layout/.DS_Store","hash":"7b9e7b21ef49686b8d10012fb2de3a7a294c8a8c","modified":1697873891868},{"_id":"themes/acryple/languages/zh-CN.yml","hash":"b154ec52fe9c289eec96f94723bc2fca2166ee9d","modified":1697850535969},{"_id":"themes/acryple/layout/archive.pug","hash":"bd62286afb64a51c97e800c5945620d51605d5fa","modified":1697850535970},{"_id":"themes/acryple/languages/zh-TW.yml","hash":"947f794e862bb2813e36887f777bdb760f70a322","modified":1697850535969},{"_id":"themes/acryple/layout/category.pug","hash":"cc7a82f13a4481dbe21e2592a04bddad8952d13c","modified":1698137097476},{"_id":"themes/acryple/layout/page.pug","hash":"30ed0c5da772c9ab5030c6ea49a03d5b1c748a4c","modified":1697956909158},{"_id":"themes/acryple/layout/index.pug","hash":"38292c6dbd43bd3ffa98d22ebf477862aaf58dd2","modified":1697850535978},{"_id":"themes/acryple/layout/post.pug","hash":"92ba9d0ae1713c24d09d097ced3feda039eed038","modified":1697850535978},{"_id":"themes/acryple/layout/tag.pug","hash":"28b0c352df416079eb4a6b104ba437eecfbdf06a","modified":1697850535979},{"_id":"themes/acryple/source/sw.js","hash":"bcc7de219211ac6717fb6d70d7d347bb992aa04c","modified":1697850535997},{"_id":"themes/acryple/source/swReg.js","hash":"46413bd344c59aa6a17187f6d80ca82638bb9aff","modified":1697850535997},{"_id":"themes/acryple/.github/ISSUE_TEMPLATE/feature_request.yml","hash":"996640605ed1e8e35182f0fd9a60a88783b24b03","modified":1697850535969},{"_id":"themes/acryple/.github/ISSUE_TEMPLATE/bug_report.yml","hash":"67e4f5a66d4b8cabadbaad0410628364ee75e0ae","modified":1697850535969},{"_id":"themes/acryple/.github/ISSUE_TEMPLATE/config.yml","hash":"7dfe7189ffeaebb6db13842237f8e124649bea3d","modified":1697850535969},{"_id":"themes/acryple/.github/workflows/publish.yml","hash":"05857c2f265246d8de00e31037f2720709540c09","modified":1697850535969},{"_id":"themes/acryple/layout/includes/.DS_Store","hash":"38022cd96ed7cf7c37c279d615f0150e07caf83d","modified":1697873878567},{"_id":"themes/acryple/layout/includes/additional-js.pug","hash":"ba739266ec2838346131ac31a1e34670e77d50e6","modified":1697850535970},{"_id":"themes/acryple/layout/includes/404.pug","hash":"c17871aa658e984fdcd8cde23fcb9d2158bd2373","modified":1697850535970},{"_id":"themes/acryple/layout/includes/fixed_card_widget.pug","hash":"76db4c2b5179c462517f64194a8c60f96c0c3321","modified":1697850535970},{"_id":"themes/acryple/layout/includes/gitcalendar-js.pug","hash":"f41082ab08366ea32ec0e4b4b9bb534ae7093dd7","modified":1697850535970},{"_id":"themes/acryple/layout/includes/footer.pug","hash":"73b59bd7fc3827af765e4b178d7551cc7ce416f9","modified":1697979673006},{"_id":"themes/acryple/layout/includes/head.pug","hash":"d5f1fed5f53620e167d6890aa0e50e0d4b1535d9","modified":1698158963200},{"_id":"themes/acryple/layout/includes/homeTop.pug","hash":"f3e0e06d12947a19e9d8e1e2a0f16584bc411160","modified":1698137377213},{"_id":"themes/acryple/layout/includes/gitcalendar.pug","hash":"1ca20fc39704b472516c99e03649c94ea0d8532b","modified":1697850535970},{"_id":"themes/acryple/layout/includes/layout.pug","hash":"e50dd713fa13eb16e2149f19bea6f960fa5ebec9","modified":1698132715088},{"_id":"themes/acryple/layout/includes/pagination.pug","hash":"0b80f04950bd0fe5e6c4e7b7559adf4d0ce28436","modified":1697850535973},{"_id":"themes/acryple/layout/includes/rightmenu.pug","hash":"133a3afd763e65eb1def9c885711fa81613b278b","modified":1697946668721},{"_id":"themes/acryple/layout/includes/rightside.pug","hash":"e9463885bf454dfa3ccac0409b6e299f9ae43dcb","modified":1698203378680},{"_id":"themes/acryple/layout/includes/random.pug","hash":"7bfee27b7ed2366cfb53e26ea952cdf9a591a7a3","modified":1697850535973},{"_id":"themes/acryple/layout/includes/setting.pug","hash":"0cc1ab14e533b5cdd077fccb67d99ca9d6e768a8","modified":1698219053064},{"_id":"themes/acryple/scripts/events/404.js","hash":"83cd7f73225ccad123afbd526ce1834eb1eb6a6d","modified":1697850535979},{"_id":"themes/acryple/layout/includes/sidebar.pug","hash":"7954b129f1cccbdf8ea401fc7adc6841bb5b93f8","modified":1697850535973},{"_id":"themes/acryple/layout/includes/speaks.pug","hash":"f3b34827344889a9e9c1edce55f9c256401545a4","modified":1697850535973},{"_id":"themes/acryple/scripts/events/config.js","hash":"30ffde46eba876b09fe80d5660603e2b0a17d612","modified":1697850535979},{"_id":"themes/acryple/scripts/events/stylus.js","hash":"9819f0996234fbd80d6c50a9e526c56ebf22588d","modified":1697850535979},{"_id":"themes/acryple/scripts/events/welcome.js","hash":"27111eab1ae6cfd2b5e4ec1786498ecef8f645c4","modified":1697850535979},{"_id":"themes/acryple/scripts/events/init.js","hash":"b4940a5c73d3a5cd8bb5883e3041ecdd905a74e0","modified":1697850535979},{"_id":"themes/acryple/scripts/filters/post_lazyload.js","hash":"932df912976261929f809b7dbd4eb473e7787345","modified":1697850535979},{"_id":"themes/acryple/scripts/helpers/aside_archives.js","hash":"2ec66513d5322f185d2071acc052978ba9415a8e","modified":1697850535980},{"_id":"themes/acryple/scripts/helpers/charts.js","hash":"56545d3039990e7bf6882584645dac994145ef90","modified":1697850535980},{"_id":"themes/acryple/scripts/filters/random_cover.js","hash":"21379ed2dccb69c43b893895c9d56238c11e5f43","modified":1697850535979},{"_id":"themes/acryple/scripts/helpers/aside_categories.js","hash":"e00efdb5d02bc5c6eb4159e498af69fa61a7dbb9","modified":1697850535980},{"_id":"themes/acryple/scripts/helpers/inject_head_js.js","hash":"b4cd617c619d1a0df93603721a6fa1317526174b","modified":1697850535980},{"_id":"themes/acryple/scripts/helpers/page.js","hash":"c6611d97087c51845cb1ab4821696a62fa33daeb","modified":1697850535980},{"_id":"themes/acryple/scripts/tag/button.js","hash":"91d954f6e9fe6e571eb8ec9f8996294b2dc3688e","modified":1697850535980},{"_id":"themes/acryple/scripts/helpers/random.js","hash":"4aa9a5a36e4420ace1ae7f08da49269bf74699fd","modified":1697850535980},{"_id":"themes/acryple/scripts/helpers/related_post.js","hash":"d368a8830e506c8b5eb6512b709ec8db354d5ea1","modified":1697850535980},{"_id":"themes/acryple/scripts/tag/flink.js","hash":"c8f22a385d569a2e99a11dfa6bc096e3cd638ae9","modified":1697850535980},{"_id":"themes/acryple/scripts/tag/hide.js","hash":"396c3ab1bcf1c7693ad7e506eadd13016c6769b6","modified":1697850535980},{"_id":"themes/acryple/scripts/tag/gallery.js","hash":"f79c99f6c5b626c272dc2bed2b0250d6b91bb28a","modified":1697850535980},{"_id":"themes/acryple/scripts/tag/inlineImg.js","hash":"a43ee2c7871bdd93cb6beb804429e404570f7929","modified":1697850535981},{"_id":"themes/acryple/scripts/tag/mermaid.js","hash":"531808a290b8bdd66bac2faab211ada8e9646a37","modified":1697850535981},{"_id":"themes/acryple/scripts/tag/label.js","hash":"03b2afef41d02bd1045c89578a02402c28356006","modified":1697850535981},{"_id":"themes/acryple/scripts/tag/link.js","hash":"cf4b6ba15650f58a42968a4500ab716af0c9a45c","modified":1697869459954},{"_id":"themes/acryple/scripts/tag/note.js","hash":"c16c6eb058af2b36bcd583b2591076c7ebdd51ad","modified":1697850535981},{"_id":"themes/acryple/scripts/tag/timeline.js","hash":"300eb779588bf35a1b687d9f829d866074b707e3","modified":1697850535981},{"_id":"themes/acryple/scripts/tag/tabs.js","hash":"6c6e415623d0fd39da016d9e353bb4f5cca444f5","modified":1697850535981},{"_id":"themes/acryple/source/css/article_shine.css","hash":"ea0fcb297cc2bf81be261c2fb2a982c6b205ded5","modified":1697957135661},{"_id":"themes/acryple/source/css/cat.css","hash":"5ba70d299e10d5ce570dff80d0363a262b449e25","modified":1698159017747},{"_id":"themes/acryple/source/css/comment.css","hash":"c1f12867a881389b16473a28ece7259eb7c8e864","modified":1698134231502},{"_id":"themes/acryple/source/css/commentBarrage.css","hash":"3049e9a21192573efaca391303464edece2eb153","modified":1697850535985},{"_id":"themes/acryple/source/css/danmaku.css","hash":"5af51f5a1e9897bf14bc3742185d6cc49fce278f","modified":1697850535986},{"_id":"themes/acryple/source/css/iconfont.css","hash":"dbf6cd27a2b13b4ec570eb6977a749fbc16cc22c","modified":1697850535986},{"_id":"themes/acryple/source/css/iconfont.ttf","hash":"77c9046fe21f05606e245f04de5074dd0274766c","modified":1697850535986},{"_id":"themes/acryple/source/css/index.styl","hash":"861998e4ac67a59529a8245a9130d68f826c9c12","modified":1697850535986},{"_id":"themes/acryple/source/css/iconfont.woff2","hash":"826b152984fbc95747ab3de52dd92339a7108e6f","modified":1697850535986},{"_id":"themes/acryple/source/css/iconfont.woff","hash":"ef03d5f33fd2ee108f1779a0cf05a844721b6a69","modified":1697850535986},{"_id":"themes/acryple/source/css/music.css","hash":"4c36e1c13004f78ef01c05f41e7c1de171c0216e","modified":1698134257786},{"_id":"themes/acryple/source/css/people.css","hash":"68616ea98561a7ed31c3f6e213bf70885851105a","modified":1697863557555},{"_id":"themes/acryple/source/css/stylessimple.css","hash":"502e011516b23218b8089e8d8426ce2a7784e6ad","modified":1697850535986},{"_id":"themes/acryple/source/css/swiperstyle.css","hash":"bd96c9c1ef59f87fc900851af918d10ffeffee01","modified":1697850535986},{"_id":"themes/acryple/source/css/swiper.min.css","hash":"e5cfdad1e61ed33b54660abf8f018fdda1475dae","modified":1697850535986},{"_id":"themes/acryple/source/css/top_wave.css","hash":"936f232f700ffdeec514d1ab9f68b28c86402c5f","modified":1698072713758},{"_id":"themes/acryple/source/css/var.styl","hash":"4890a40366d6443f8b8942a4e9a6dce9fe3494f5","modified":1697850535986},{"_id":"themes/acryple/source/js/aplayersave.js","hash":"abbc6281d95c861b1c61e29bc2457a1942037e5f","modified":1698135713793},{"_id":"themes/acryple/source/js/calendar.js","hash":"13c40c66697e9b716d7548fce4aa27566c458c60","modified":1697850535988},{"_id":"themes/acryple/source/js/bbtalklunbo.js","hash":"8b93d67401594d194689b3093a886b7804243ea7","modified":1698052126552},{"_id":"themes/acryple/source/js/browser.js","hash":"ea2b973f9f2133900121dc50a184c4bdea77d2f7","modified":1697891046692},{"_id":"themes/acryple/source/js/cate.js","hash":"af35a2ea334e5af28586d14b8574f6da83ed8095","modified":1697850535988},{"_id":"themes/acryple/source/js/baiduhistory.js","hash":"e8862020512d657b314645126110eb717d2133ee","modified":1698033946663},{"_id":"themes/acryple/source/js/commentsCount.js","hash":"9f6095813472eeefcc493e16ffbd81f9e630b0a9","modified":1697977350937},{"_id":"themes/acryple/source/js/cat.js","hash":"294a85fb40f1c48d5f198bb8b6b978386f4871aa","modified":1698158964221},{"_id":"themes/acryple/source/js/commentBarrage.js","hash":"4b93346e8654ba48aba44a46c8130aad2b4e1554","modified":1697961203248},{"_id":"themes/acryple/source/js/cursor.js","hash":"064a76af7efc6f378c96ccaaa30bccd724dccd71","modified":1697850535988},{"_id":"themes/acryple/source/js/copy.js","hash":"d549dfed12e4953d6c7693ba71148ac6c2cf23d3","modified":1697850535988},{"_id":"themes/acryple/source/js/danmaku.js","hash":"699c81fa39471b3f10266fc2fbf3be350110431f","modified":1697850535989},{"_id":"themes/acryple/source/js/countup.js","hash":"89388b8b14405b13257da96356312a5f37f94841","modified":1697850535988},{"_id":"themes/acryple/source/js/day.js","hash":"dce34c73ca3d85431269e91d6d8d013c8d4e41c3","modified":1697850535989},{"_id":"themes/acryple/source/js/dis.js","hash":"664cfb1b06c9941a2a3845be00ec9fb443b09619","modified":1697891161874},{"_id":"themes/acryple/source/js/dianzan.js","hash":"5c41f4ce378aaf113c686b0623b10daa137af78f","modified":1697989261804},{"_id":"themes/acryple/source/js/fixbugpjax.js","hash":"4d440ed1dfb2bede2db96a647670b776179541f3","modified":1698032857225},{"_id":"themes/acryple/source/js/fixed_card_widget.js","hash":"d2c481ba0f16c29019b30805be6fbc35db0762a0","modified":1697850535992},{"_id":"themes/acryple/source/js/gitalker.js","hash":"265a1663d4a57febcbf2ffdc0ce7b2a1c29d9445","modified":1697850535993},{"_id":"themes/acryple/source/js/fps.js","hash":"a8320fe238d8863ce74f1371a0149c8032ac5b1a","modified":1697850535992},{"_id":"themes/acryple/source/js/heimu.js","hash":"87e0da37e658c9d87cbe45a548ed460821529a90","modified":1697850535993},{"_id":"themes/acryple/source/js/hide.show.js","hash":"b3f53672383108c3dcf2954659a76ce4f11f05da","modified":1697891240441},{"_id":"themes/acryple/source/js/lunar.js","hash":"cd9a6debfb8a0c3cc814add3f3b9b63368364cfd","modified":1697850535993},{"_id":"themes/acryple/source/js/local-search.js","hash":"58c87e36a0d7a31b5addc213d67960d89b0bfed3","modified":1697850535993},{"_id":"themes/acryple/source/js/languages.js","hash":"e3e117378358426607ac29546689e2b8046abd2f","modified":1697850535993},{"_id":"themes/acryple/source/js/latest.js","hash":"1012aa0cf451d2a2dee4323934c6cb5520ffc1aa","modified":1697891352279},{"_id":"themes/acryple/source/js/main.js","hash":"1db84afbd4dfcffa6af63adf5c53be764ede25fe","modified":1697850535993},{"_id":"themes/acryple/source/js/lyxTalk.js","hash":"a04c0bb45139048f1060f51a5c40b19069e9f121","modified":1697850535993},{"_id":"themes/acryple/source/js/nav.js","hash":"607c71d2f547f254cda37fc730c07b34fde3f9c7","modified":1697891328742},{"_id":"themes/acryple/source/js/noie.js","hash":"89068cb5cd118de77d7f8c88015cc3ca979a3ec9","modified":1697850535993},{"_id":"themes/acryple/source/js/owo.js","hash":"fcccdb757d8d956fdee03c1f53063b2ca1d4f7d4","modified":1698072962563},{"_id":"themes/acryple/source/js/people.js","hash":"7f54ebeb135bbdb389171a7b9303ad0d3189caa4","modified":1697850535994},{"_id":"themes/acryple/source/js/player.js","hash":"e1b0ac0047ff3e9600521365001336fb7febf545","modified":1698135710535},{"_id":"themes/acryple/source/js/rightmenu.js","hash":"806d068bf0692b36dfcf973a04372866f50d7691","modified":1697850535994},{"_id":"themes/acryple/source/js/randomFriend.js","hash":"dcfee422742ddde0997a244300d49862c1e0d942","modified":1698055043679},{"_id":"themes/acryple/source/js/seo.js","hash":"2b389b68da7509308f7b1038b822fb8e4a064a91","modified":1697850535994},{"_id":"themes/acryple/source/js/settings.js","hash":"bc7379b0f540385f3616c59bf5f46a4ae52d4a47","modified":1697891176110},{"_id":"themes/acryple/source/js/sakura.js","hash":"6ca567eb87b7698b57b04b505ba2bf8db63bee37","modified":1697850535994},{"_id":"themes/acryple/source/js/resizeTop.js","hash":"2c3370d0b7073b39efd84650d12bf80ac838fce8","modified":1697850535994},{"_id":"themes/acryple/source/js/sitetime.js","hash":"0487f2178e177bfac24e344950a69f984e2290eb","modified":1697945244968},{"_id":"themes/acryple/source/js/smooth-scrolling.js","hash":"187d332a5242f2f52090d6ad3fac501307866d93","modified":1697850535995},{"_id":"themes/acryple/source/js/sw-toolbox.js","hash":"e7936268344280b501dfe0e79de355df91b9a5d0","modified":1697850535995},{"_id":"themes/acryple/source/js/tianli_gpt.js","hash":"3356806553b701decd308e1b4793c2635e4dd52d","modified":1698219117928},{"_id":"themes/acryple/source/js/swiperinit.js","hash":"0cdacaca879a35effc93cfe1cfa3d89b359f9d11","modified":1697850535995},{"_id":"themes/acryple/source/js/tw_cn.js","hash":"5c1391c9e96950833641f178b5f23c58422fb659","modified":1697850535995},{"_id":"themes/acryple/source/js/welcome.js","hash":"2550cb3fdad3decabd9c0512c2cf50eb279cb82d","modified":1697889947331},{"_id":"themes/acryple/source/js/utils.js","hash":"0a8d52d21590dae3164033a600320c5c331ea427","modified":1698134310207},{"_id":"themes/acryple/source/js/welcomeconsole.js","hash":"1f0dac070d180b4253d7cb1237d87202136c223b","modified":1697850535997},{"_id":"themes/acryple/layout/includes/dist/random.html","hash":"7a3fa9590fdce168fae9a39c0dc72a131d957cca","modified":1697850535970},{"_id":"themes/acryple/layout/includes/dist/homeTop.html","hash":"ee7b6d74cb251e7facd188a86c86ed00493bcecd","modified":1697850535970},{"_id":"themes/acryple/layout/includes/head/Open_Graph.pug","hash":"6c41f49a3e682067533dd9384e6e4511fc3a1349","modified":1697850535971},{"_id":"themes/acryple/layout/includes/head/analytics.pug","hash":"a02d19a98c97df103f35ce5cfbf0762a8526141d","modified":1697962934156},{"_id":"themes/acryple/layout/includes/dist/speaks.html","hash":"b7a665fe18a8a091471926b33177adcb22da6cd2","modified":1697850535970},{"_id":"themes/acryple/layout/includes/head/config.pug","hash":"8f41fa9732ea654a10f6e666d9c782c7e27e5ea6","modified":1697850535971},{"_id":"themes/acryple/layout/includes/head/config_site.pug","hash":"7df90c8e432e33716517ab918b0a125bc284041b","modified":1697850535971},{"_id":"themes/acryple/layout/includes/head/google_adsense.pug","hash":"95a37e92b39c44bcbea4be7e29ddb3921c5b8220","modified":1697850535971},{"_id":"themes/acryple/layout/includes/head/noscript.pug","hash":"d16ad2ee0ff5751fd7f8a5ce1b83935518674977","modified":1697850535971},{"_id":"themes/acryple/layout/includes/head/pwa.pug","hash":"3d492cfe645d37c94d30512e0b230b0a09913148","modified":1697850535971},{"_id":"themes/acryple/layout/includes/head/site_verification.pug","hash":"e2e8d681f183f00ce5ee239c42d2e36b3744daad","modified":1697850535971},{"_id":"themes/acryple/layout/includes/head/preconnect.pug","hash":"4b7418c7b946a6ce95a9f624779f057799566215","modified":1697962907575},{"_id":"themes/acryple/layout/includes/header/index.pug","hash":"f47d81b09c446e944ba3d2efbcf15428455fd714","modified":1698058763451},{"_id":"themes/acryple/layout/includes/header/menu_item.pug","hash":"a144d54f29d4f7d576b282e4027871ea0f5ec946","modified":1697850535971},{"_id":"themes/acryple/layout/includes/header/nav.pug","hash":"48f2c178302c5ea75ca108ed018ef2aaa09e6453","modified":1697850535971},{"_id":"themes/acryple/layout/includes/header/post-info.pug","hash":"84dada58f6162610eab9cebe01c70c5ea6e2d1d9","modified":1697850535971},{"_id":"themes/acryple/layout/includes/header/social.pug","hash":"0d953e51d04a9294a64153c89c20f491a9ec42d4","modified":1697850535971},{"_id":"themes/acryple/layout/includes/mixins/article-sort.pug","hash":"045d332091c7d60b8c416f27d1d433f423bb6a4f","modified":1697850535972},{"_id":"themes/acryple/layout/includes/loading/loading-js.pug","hash":"0c767996610e908cb70df0f4efcd6d11dbd28e47","modified":1697850535972},{"_id":"themes/acryple/layout/includes/loading/loading.pug","hash":"59303888d1c4354f0f61e04ea9e5d9f96e28a32b","modified":1697850535972},{"_id":"themes/acryple/layout/includes/page/categories.pug","hash":"5276a8d2835e05bd535fedc9f593a0ce8c3e8437","modified":1697850535972},{"_id":"themes/acryple/layout/includes/page/.DS_Store","hash":"6725a9bc03d915c48bbbbc8bdc19ee4662a2bde0","modified":1697872573006},{"_id":"themes/acryple/layout/includes/mixins/post-ui.pug","hash":"f1af4927fe5f7fa37319bab6ce759cce3a6a9122","modified":1697850535972},{"_id":"themes/acryple/layout/includes/page/default-page.pug","hash":"12c65c174d26a41821df9bad26cdf1087ec5b0ca","modified":1697850535972},{"_id":"themes/acryple/layout/includes/page/flink.pug","hash":"fed069baa9b383f57db32bb631115071d29bdc60","modified":1697850535973},{"_id":"themes/acryple/layout/includes/page/tags.pug","hash":"6311eda08e4515281c51bd49f43902a51832383c","modified":1697850535973},{"_id":"themes/acryple/layout/includes/post/post-copyright.pug","hash":"8c2316e73a3cf60e0c0ec57d5d42fe1f74eeaf4d","modified":1697850535973},{"_id":"themes/acryple/layout/includes/third-party/effect.pug","hash":"6528e86656906117a1af6b90e0349c2c4651d5e1","modified":1697850535975},{"_id":"themes/acryple/layout/includes/third-party/aplayer.pug","hash":"c7cfade2b160380432c47eef4cd62273b6508c58","modified":1697850535973},{"_id":"themes/acryple/layout/includes/post/reward.pug","hash":"864869c43fe5b5bb6f4ac6b13dd4bfb16ea47550","modified":1697850535973},{"_id":"themes/acryple/layout/includes/third-party/pangu.pug","hash":"0f024e36b8116118233e10118714bde304e01e12","modified":1697850535976},{"_id":"themes/acryple/layout/includes/third-party/pjax.pug","hash":"c5242f8d570764d3a09f4ccf8f29fb403c012cfa","modified":1697850535976},{"_id":"themes/acryple/layout/includes/third-party/subtitle.pug","hash":"bae2f32ac96cebef600c1e37eaa8467c9a7e5d92","modified":1697850535977},{"_id":"themes/acryple/layout/includes/third-party/prismjs.pug","hash":"ffb9ea15a2b54423cd4cd441e2d061b8233e9b58","modified":1697850535976},{"_id":"themes/acryple/layout/includes/widget/card_ad.pug","hash":"60dc48a7b5d89c2a49123c3fc5893ab9c57dd225","modified":1697850535977},{"_id":"themes/acryple/layout/includes/widget/card_announcement.pug","hash":"ae392459ad401a083ca51ee0b27526b3c1e1faed","modified":1697850535977},{"_id":"themes/acryple/layout/includes/widget/card_archives.pug","hash":"86897010fe71503e239887fd8f6a4f5851737be9","modified":1697850535977},{"_id":"themes/acryple/layout/includes/widget/card_author.pug","hash":"b267678061c2db8be117a258123dc691795e786f","modified":1697850535977},{"_id":"themes/acryple/layout/includes/widget/card_bottom_self.pug","hash":"13dc8ce922e2e2332fe6ad5856ebb5dbf9ea4444","modified":1697850535977},{"_id":"themes/acryple/layout/includes/widget/card_history.pug","hash":"7d40d4ae59b8f3d897c1be5816b977d1dcbce58e","modified":1697850535978},{"_id":"themes/acryple/layout/includes/widget/card_categories.pug","hash":"d1a416d0a8a7916d0b1a41d73adc66f8c811e493","modified":1697850535977},{"_id":"themes/acryple/layout/includes/widget/card_calendar.pug","hash":"f5e7d9fbb36ef904423b61f2f2946ecf6d42fdf3","modified":1697850535977},{"_id":"themes/acryple/layout/includes/widget/card_newest_comment.pug","hash":"6d93564a8bd13cb9b52ee5e178db3bcbf18b1bc6","modified":1697850535978},{"_id":"themes/acryple/layout/includes/widget/card_recent_post.pug","hash":"9c1229af6ab48961021886882c473514101fba21","modified":1697850535978},{"_id":"themes/acryple/layout/includes/widget/card_post_toc.pug","hash":"3057a2f6f051355e35d3b205121af8735100eacf","modified":1697850535978},{"_id":"themes/acryple/layout/includes/widget/card_tags.pug","hash":"438aea3e713ed16b7559b9a80a9c5ec0221263df","modified":1697850535978},{"_id":"themes/acryple/layout/includes/widget/card_top_self.pug","hash":"ae67c6d4130a6c075058a9c1faea1648bcc6f83e","modified":1697850535978},{"_id":"themes/acryple/layout/includes/widget/index.pug","hash":"6aefde82534b52a04acede22f5ed6e62340fed96","modified":1697850535978},{"_id":"themes/acryple/layout/includes/widget/card_weather.pug","hash":"2ed1eef773b599d02d030d6bb8307f073df8ade3","modified":1697898434331},{"_id":"themes/acryple/scripts/helpers/dist/random.dev.js","hash":"6ff7256e48bb5c55c45cf21f1ebe2e7ca7c92e4e","modified":1697850535980},{"_id":"themes/acryple/layout/includes/widget/card_webinfo.pug","hash":"769471e8822c74e301883377fd92f9e4d5822748","modified":1697850535978},{"_id":"themes/acryple/source/css/_global/function.styl","hash":"ef40cff359aa5d3153e50923f955c15df9cae5cb","modified":1697850535981},{"_id":"themes/acryple/source/css/_global/index.styl","hash":"ec6173e3916fa5a7e2c159f5fb1daaf31c4d0653","modified":1697850535981},{"_id":"themes/acryple/source/css/_highlight/highlight.styl","hash":"c5fcb0d8591c8f4e011e6e00a9949ab0fd4ee958","modified":1697850535981},{"_id":"themes/acryple/source/css/_highlight/theme.styl","hash":"bcd384c8b2aa0390c9eb69ac1abbfd1240ce1da4","modified":1697850535982},{"_id":"themes/acryple/source/css/_layout/aside.styl","hash":"3a5a8d4eee5e630ec9c1c6b6b853364f91683a77","modified":1697850535982},{"_id":"themes/acryple/source/css/_layout/calendar.styl","hash":"1ed6b9aedff7e4a7b66d5b0df8f08054ccc2828d","modified":1697850535982},{"_id":"themes/acryple/source/css/_layout/comments.styl","hash":"8d6ac157b81208a269cc8a898e407d7d8b2d9156","modified":1697850535982},{"_id":"themes/acryple/source/css/_layout/categoryBar.styl","hash":"1c39ce15d7961ff8691610fc494631d6aa241639","modified":1697850535982},{"_id":"themes/acryple/source/css/_layout/fixed_card_widget.styl","hash":"e7efea97c7d07d5cdd3c6619a2d65450bbf31ffb","modified":1697850535983},{"_id":"themes/acryple/source/css/_layout/chat.styl","hash":"29f48f9370f245e6e575b5836bccf47eb5688d8b","modified":1697850535982},{"_id":"themes/acryple/source/css/_layout/footer.styl","hash":"26be2afa9d4e7016cf3c42a6cd166f01e8e4ad5c","modified":1697850535983},{"_id":"themes/acryple/source/css/_layout/gitcalendar.styl","hash":"e66824c4a4e3d69eca1d82d57e15acc11d955090","modified":1697850535983},{"_id":"themes/acryple/source/css/_layout/head.styl","hash":"08da23a73be64ce36f6503f55494436b43820058","modified":1697850535983},{"_id":"themes/acryple/source/css/_layout/loading.styl","hash":"00b9badd0279866949b223468e90abec9cb2330b","modified":1697850535983},{"_id":"themes/acryple/source/css/_layout/relatedposts.styl","hash":"d53de408cb27a2e704aba7f7402b7caebe0410d8","modified":1697850535983},{"_id":"themes/acryple/source/css/_layout/post.styl","hash":"a8c9ce2a1edeca72722796a94734c81c92a698d0","modified":1697850535983},{"_id":"themes/acryple/source/css/_layout/reward.styl","hash":"c5cfed620708807a48076b5ee59b0ba84e29aa80","modified":1697850535983},{"_id":"themes/acryple/source/css/_layout/pagination.styl","hash":"fb9f78bfbb79579f1d752cb73fb6d25c8418e0fd","modified":1697850535983},{"_id":"themes/acryple/source/css/_layout/rightside.styl","hash":"d454b4124716cff16d4967eb8c240fdd55674982","modified":1697850535983},{"_id":"themes/acryple/source/css/_layout/sidebar.styl","hash":"631ca35a38bc4ac052e9caf47508ff1f99842fc7","modified":1697850535983},{"_id":"themes/acryple/source/css/_layout/third-party.styl","hash":"8314e9749eb1ae40c4bae9735b7a6638b2d6876a","modified":1697850535983},{"_id":"themes/acryple/source/css/_mode/darkmode.styl","hash":"a238b88cef30491a0f70e379de7e62be5400861c","modified":1698132685469},{"_id":"themes/acryple/source/css/_page/404.styl","hash":"50dbb9e6d98c71ffe16741b8c1b0c1b9771efd2b","modified":1697850535984},{"_id":"themes/acryple/source/css/_mode/readmode.styl","hash":"34d749f38dd7a465b127875d8031023dd803c987","modified":1697850535983},{"_id":"themes/acryple/source/css/_page/categories.styl","hash":"f01ee74948cedb44e53cd3bb1ef36b7d2778ede7","modified":1697850535984},{"_id":"themes/acryple/source/css/_page/archives.styl","hash":"6f4b4ede52305bce9b22c8c897dcbde8af6e2ce4","modified":1697850535984},{"_id":"themes/acryple/source/css/_page/flink.styl","hash":"5760a9fe0f26ba0f3eb926e243ff49b1a834af8a","modified":1697850535984},{"_id":"themes/acryple/source/css/_page/common.styl","hash":"a58d35d698885f1034dedbe99f7dbc1a801412c6","modified":1697850535984},{"_id":"themes/acryple/source/css/_page/homepage.styl","hash":"826dae759062d8f84eb2bf5ab8fdb80e0f79d58b","modified":1697850535984},{"_id":"themes/acryple/source/css/_search/algolia.styl","hash":"51e45625929d57c9df3ba9090af99b9b7bb9a15b","modified":1697850535984},{"_id":"themes/acryple/source/css/_search/index.styl","hash":"4989f07b62867a183abea6bb7ef617d9056f2f7d","modified":1697850535984},{"_id":"themes/acryple/source/css/_search/local-search.styl","hash":"25e58a7a8bda4b73d0a0e551643ca01b09ccd7e5","modified":1697850535984},{"_id":"themes/acryple/source/css/_page/tags.styl","hash":"580feb7e8b0822a1be48ac380f8c5c53b1523321","modified":1697850535984},{"_id":"themes/acryple/source/css/_tags/gallery.styl","hash":"5963cf65a0841f4f4e4f93d6f2121502afb100ee","modified":1697850535984},{"_id":"themes/acryple/source/css/_tags/hide.styl","hash":"ce489ca2e249e2a3cf71584e20d84bdb022e3475","modified":1697850535985},{"_id":"themes/acryple/source/css/_tags/button.styl","hash":"45f0c32bdea117540f6b14ebac6450d7142bd710","modified":1697850535984},{"_id":"themes/acryple/source/css/_tags/hexo.styl","hash":"d76c38adf1d9c1279ef4241835667789f5b736e0","modified":1697850535985},{"_id":"themes/acryple/source/css/_tags/inlineImg.styl","hash":"df9d405c33a9a68946b530410f64096bcb72560c","modified":1697850535985},{"_id":"themes/acryple/source/css/_tags/note.styl","hash":"08493b66b9f31f2bd3e9a3115017a0ce16142b20","modified":1697850535985},{"_id":"themes/acryple/source/css/_tags/label.styl","hash":"66c59e193d794cdb02cca7bd1dc4aea5a19d7e84","modified":1697850535985},{"_id":"themes/acryple/source/css/_tags/timeline.styl","hash":"02f6286786aa5fd56d5e137e945273c6d4ca8589","modified":1697850535985},{"_id":"themes/acryple/source/css/_tags/tabs.styl","hash":"bf9568444dd54e39dc59b461323dcd38942f27d9","modified":1697850535985},{"_id":"themes/acryple/source/css/_third-party/normalize.min.css","hash":"2c18a1c9604af475b4749def8f1959df88d8b276","modified":1697850535985},{"_id":"themes/acryple/source/js/dist/baiduhistory.dev.js","hash":"deef9129b356d8a1e0054ae16f069ab0133903a1","modified":1698032810508},{"_id":"themes/acryple/source/js/dist/bbtalklunbo.dev.js","hash":"dbf6439e92cabff5441d39fa4a344a712574cfbe","modified":1697989261804},{"_id":"themes/acryple/source/js/dist/calendar.dev.js","hash":"cf9e338cfe5cb95d622cf5d01852c229972ce680","modified":1697850535990},{"_id":"themes/acryple/source/js/dist/fixbugpjax.dev.js","hash":"6f970fc679c05c82a094f0f1cf9d705dbdecd8e9","modified":1697850535990},{"_id":"themes/acryple/source/js/dist/gongnong.dev.js","hash":"1d1e4b3841c7b6a3b8ed42fc5e797cb8aad3a6b4","modified":1697850535990},{"_id":"themes/acryple/source/js/dist/heimu.dev.js","hash":"36836761b382bbd98d012023285eac61c334b4b7","modified":1697850535990},{"_id":"themes/acryple/source/js/dist/links.dev.js","hash":"d73bf4c53888e80bbb829d99ed88f8d9c6ba0c69","modified":1697850535991},{"_id":"themes/acryple/source/js/dist/resizeTop.dev.js","hash":"ff9afb48cf8214e08414e09fc4691aaf1aa5bc4a","modified":1697850535991},{"_id":"themes/acryple/source/js/dist/main.dev.js","hash":"9234c27bf03eca406d451e6900692388ae62f07e","modified":1697850535991},{"_id":"themes/acryple/source/js/dist/seo.dev.js","hash":"98ad54a95d32164dee097f9075b942bd6051c0d3","modified":1697850535991},{"_id":"themes/acryple/source/js/search/algolia.js","hash":"ce8131b712dca80f289015aef75f86e727f62981","modified":1697850535994},{"_id":"themes/acryple/source/js/search/local-search.js","hash":"3071a4208fdf89ad7e0031536dd6ffa7bc951e4d","modified":1697850535994},{"_id":"themes/acryple/layout/includes/third-party/card-post-count/fb.pug","hash":"7848ec58c6ec03243abf80a3b22b4dc10f3edf53","modified":1697850535974},{"_id":"themes/acryple/layout/includes/third-party/card-post-count/twikoo.pug","hash":"1d2b98e65cb266e48f1919f1f1c501dc24f8b650","modified":1697850535974},{"_id":"themes/acryple/layout/includes/third-party/card-post-count/index.pug","hash":"e3bf847553515174f6085df982f0623e9783db7a","modified":1697850535974},{"_id":"themes/acryple/layout/includes/third-party/card-post-count/disqus.pug","hash":"d85c3737b5c9548553a78b757a7698df126a52cf","modified":1697850535974},{"_id":"themes/acryple/layout/includes/third-party/card-post-count/valine.pug","hash":"e4b7bf91a29bd03181593b63e1f3ee1103af2e48","modified":1697850535974},{"_id":"themes/acryple/layout/includes/third-party/card-post-count/waline.pug","hash":"5f648086a33a32d169a2f8d8c549c08aa02f67db","modified":1697850535974},{"_id":"themes/acryple/layout/includes/third-party/chat/chatra.pug","hash":"481cd5053bafb1a19f623554a27d3aa077ea59c3","modified":1697850535974},{"_id":"themes/acryple/layout/includes/third-party/chat/crisp.pug","hash":"76634112c64023177260d1317ae39cef2a68e35f","modified":1697850535974},{"_id":"themes/acryple/layout/includes/third-party/chat/daovoice.pug","hash":"499bc3e9d22dd6a5fb32e10e7fa42760b3f36180","modified":1697850535974},{"_id":"themes/acryple/layout/includes/third-party/chat/gitter.pug","hash":"d1d2474420bf4edc2e43ccdff6f92b8b082143df","modified":1697850535974},{"_id":"themes/acryple/layout/includes/third-party/chat/index.pug","hash":"3f05f8311ae559d768ee3d0925e84ed767c314d3","modified":1697850535974},{"_id":"themes/acryple/layout/includes/third-party/chat/tidio.pug","hash":"24a926756c2300b9c561aaab6bd3a71fdd16e16d","modified":1697850535974},{"_id":"themes/acryple/layout/includes/third-party/comments/disqus.pug","hash":"a111407fdcafcf1099e26ffa69786f8822c5d9fb","modified":1697850535974},{"_id":"themes/acryple/layout/includes/third-party/comments/facebook_comments.pug","hash":"2d8fc3fb8f9aec61400acf3c94070bd8539058f8","modified":1697850535974},{"_id":"themes/acryple/layout/includes/third-party/comments/disqusjs.pug","hash":"693d999777dd16e0566d29ac3203d4c167b2f9a7","modified":1697850535974},{"_id":"themes/acryple/layout/includes/third-party/comments/giscus.pug","hash":"591ef23c583690bd74af0cafb09af64ba5bd8151","modified":1697850535975},{"_id":"themes/acryple/layout/includes/third-party/comments/gitalk.pug","hash":"22e2ef30fe5eb1db7566e89943c74ece029b2a8e","modified":1697850535975},{"_id":"themes/acryple/layout/includes/third-party/comments/index.pug","hash":"ee0f0153643dfcc5ec346955dad553136cc10432","modified":1697850535975},{"_id":"themes/acryple/layout/includes/third-party/comments/twikoo.pug","hash":"2f1575d4aed8c48640e5e69c0c59e4548ea3f50c","modified":1697850535975},{"_id":"themes/acryple/layout/includes/third-party/comments/livere.pug","hash":"52ea8aa26b84d3ad38ae28cdf0f163e9ca8dced7","modified":1697850535975},{"_id":"themes/acryple/layout/includes/third-party/comments/js.pug","hash":"9302837f1e35f153323bb4f166514c7e96e8ecdd","modified":1697850535975},{"_id":"themes/acryple/layout/includes/third-party/math/index.pug","hash":"b8ae5fd7d74e1edcef21f5004fc96147e064d219","modified":1697850535975},{"_id":"themes/acryple/layout/includes/third-party/comments/utterances.pug","hash":"a737046e730eb7264606ba0536218964044492f9","modified":1697850535975},{"_id":"themes/acryple/layout/includes/third-party/comments/valine.pug","hash":"e55b9c0f8ced231f47eb88bd7f4ec99f29c5c29d","modified":1697850535975},{"_id":"themes/acryple/layout/includes/third-party/comments/waline.pug","hash":"15462d1ed04651ad3b430c682842ac400f6f9b47","modified":1697850535975},{"_id":"themes/acryple/layout/includes/third-party/math/mathjax.pug","hash":"f4dc7d02c8192979404ae9e134c5048d3d0a76e2","modified":1697850535975},{"_id":"themes/acryple/layout/includes/third-party/math/katex.pug","hash":"31b007dc0f3de52176f278012ecf17a4bcecde2c","modified":1697850535975},{"_id":"themes/acryple/layout/includes/third-party/newest-comments/github-issues.pug","hash":"e846ddfe4a63b15d1416f6055f5756af5e3da7c6","modified":1697850535976},{"_id":"themes/acryple/layout/includes/third-party/newest-comments/disqus-comment.pug","hash":"04b2a5882e789a988e41d45abe606f0617b08e38","modified":1697850535976},{"_id":"themes/acryple/layout/includes/third-party/math/mermaid.pug","hash":"8e33aca36a4d3ae9e041ba05ced8eff56ae38f77","modified":1697850535975},{"_id":"themes/acryple/layout/includes/third-party/newest-comments/valine.pug","hash":"d19e1c2c0a50f0e4547d71a17b9be88e8152f17c","modified":1697850535976},{"_id":"themes/acryple/layout/includes/third-party/search/algolia.pug","hash":"e8245d0b4933129bb1c485d8de11a9e52e676348","modified":1697850535976},{"_id":"themes/acryple/layout/includes/third-party/share/add-this.pug","hash":"2980f1889226ca981aa23b8eb1853fde26dcf89a","modified":1697850535977},{"_id":"themes/acryple/layout/includes/third-party/newest-comments/index.pug","hash":"f6506ccfd1ce994b9e53aa95588d0b6dbad11411","modified":1697850535976},{"_id":"themes/acryple/layout/includes/third-party/newest-comments/twikoo-comment.pug","hash":"233907dd7f5b5f33412701d2ccffbc0bbae8707b","modified":1697850535976},{"_id":"themes/acryple/layout/includes/third-party/newest-comments/waline.pug","hash":"dd0bc119029b62dce5dc965d5de7377e438fa29a","modified":1697850535976},{"_id":"themes/acryple/layout/includes/third-party/search/index.pug","hash":"da3b9437d061ee68dbc383057db5c73034c49605","modified":1697850535976},{"_id":"themes/acryple/layout/includes/third-party/search/local-search.pug","hash":"178c9cdcc4ce5a006885b24ce4a3d624e4734899","modified":1697850535976},{"_id":"themes/acryple/layout/includes/third-party/share/addtoany.pug","hash":"85c92f8a7e44d7cd1c86f089a05be438535e5362","modified":1697850535977},{"_id":"themes/acryple/layout/includes/third-party/share/index.pug","hash":"4c4a9c15215ae8ac5eadb0e086b278f76db9ee92","modified":1697850535977},{"_id":"themes/acryple/layout/includes/third-party/share/share-js.pug","hash":"f61d63724ea5c5f352568b3a16bde023affefbe5","modified":1697850535977},{"_id":"themes/acryple/source/css/_highlight/highlight/diff.styl","hash":"cf1fae641c927621a4df1be5ca4a853b9b526e23","modified":1697850535982},{"_id":"themes/acryple/source/css/_global/dist/function.css","hash":"fb40e9d1cad6ad5261e6730ea1b5807ae51014b1","modified":1697850535981},{"_id":"themes/acryple/source/css/_highlight/highlight/index.styl","hash":"18804c58239d95798fa86d0597f32d7f7dd30051","modified":1697850535982},{"_id":"themes/acryple/source/css/_highlight/prismjs/diff.styl","hash":"5972c61f5125068cbe0af279a0c93a54847fdc3b","modified":1697850535982},{"_id":"themes/acryple/source/css/_highlight/prismjs/index.styl","hash":"5dc2e0bcae9a54bfb9bdcc82d02ae5a3cf1ca97d","modified":1697850535982},{"_id":"themes/acryple/source/css/_highlight/prismjs/line-number.styl","hash":"8970cc1916c982b64a1478792b2822d1d31e276d","modified":1697850535982},{"_id":"themes/acryple/source/css/_layout/dist/rightside.css","hash":"fd2f42dd830ca2b5226112f835ad753825f00735","modified":1697850535982},{"_id":"themes/acryple/source/css/_layout/dist/third-party.css","hash":"1e3916741fa12e64f482c954210b3f7286898735","modified":1697850535982},{"_id":"source/img/1666416764216-Nexus 9.png","hash":"ffc09c077971664bfc2719646c94c6041bed2319","modified":1697850535949},{"_id":"themes/acryple/layout/includes/page/about.pug","hash":"e404b11defa31c8677f5083beb7a3c507917ecd1","modified":1698219029743},{"_id":"source/img/1666416625095-iPhone X.png","hash":"39104e0623e0798b97605eedda8ea85f5453ae56","modified":1697850535935},{"_id":"themes/acryple/source/css/ariasakablog.css","hash":"8d8734fd0995a3774c654bc0b2982274fa28cc55","modified":1698155952773},{"_id":"themes/acryple/source/owo.json","hash":"00e59609d698ca50a9ed77c7436e040ebfa89582","modified":1698072666650},{"_id":"themes/acryple/source/js/bbtalk.js","hash":"10eb53c57638a498de78701625998b37535d6ac7","modified":1697958680403},{"_id":"themes/acryple/source/js/dist/bbtalk.dev.js","hash":"c3c1f148bf2ad94a1599a31f188e75d9e09808e5","modified":1697850535990},{"_id":"themes/acryple/source/js/twikoo.all.min.js","hash":"0894ffbe932c0b1e6ad2bfaebdd3b552bbee7de5","modified":1697850535996},{"_id":"themes/acryple/source/js/dist/twikoo.all.min.dev.js","hash":"2685407583d1923eea0be5725a02bf0fce3505fa","modified":1697850535992},{"_id":"source/img/uTools_1666416859497-iMac.png","hash":"82db53af4a2c95180ccf7205f9121e052cf180ba","modified":1697850535967},{"_id":"source/img/1666416702650-Macbook Pro 2016 (1).png","hash":"71ee0b2eeeb1bbe13b7037c937648d7a2b420b32","modified":1697850535945},{"_id":"source/img/siteshot.png","hash":"9841f448e6001a9dd94fd8ca5e9147d5c1a12f10","modified":1697850535961},{"_id":"public/search.xml","hash":"f4a1744d21bf66e08047e2ee00bbf6424823175e","modified":1698246241162},{"_id":"public/link.json","hash":"b84cb7fdc76a147a473888617ca2ec26452dc47f","modified":1698246241162},{"_id":"public/package.json","hash":"613cc26cd48b0c233c4988c8d2056581024322d3","modified":1698246241162},{"_id":"public/manifest.json","hash":"1e3d62f46c887fa7ba5fb0bf9e898f952abde144","modified":1698246241162},{"_id":"public/stars/allStars.json","hash":"8a235605cc87f4581f75808d50d5e05c706ef535","modified":1698246241162},{"_id":"public/stars/stars.js","hash":"07ab2b10a2fb56540cbc147986ea480c48128800","modified":1698246241162},{"_id":"public/baidusitemap.xml","hash":"5a2b1e14241146003385ad1d2c6b321892c8d3a7","modified":1698246241162},{"_id":"public/calendar.json","hash":"c449551b29ce3bf23447c9f8b3d4c6151fd4f94e","modified":1698246241162},{"_id":"public/atom.xml","hash":"462bc2ba118199df94053f0ea1fdebafbfdeae7b","modified":1698246241162},{"_id":"public/content.json","hash":"cae18f0b0518e0c41c039529e89319a37b52c307","modified":1698246241162},{"_id":"public/random.html","hash":"a59622128474e5f23fd9fe5ffa13573004a3dcae","modified":1698246241162},{"_id":"public/sitemap.xml","hash":"f3beeec80e6f5b39c6bb60b1d4cd7a68dc9c9d0b","modified":1698246241162},{"_id":"public/sitemap.txt","hash":"c3df19fd2f362c6ba0751f24b778772a3771917a","modified":1698246241162},{"_id":"public/submit_urls.txt","hash":"8b578f506e840ab3d21df501cb1f409f0ce34dda","modified":1698246241162},{"_id":"public/js/random.js","hash":"713dd01dec672b886a26eae19bcb1e5d840c8aae","modified":1698246241162},{"_id":"public/bangumis/index.html","hash":"3c7e636aa117996e2dddfdc56b3c41a376a8b7b4","modified":1698246241162},{"_id":"public/about/index.html","hash":"ff8a47f9292fcc24effdeca711af854e5ceeab59","modified":1698246241162},{"_id":"public/categories/index.html","hash":"c25e838a1b2cf64a4be732233179a6e87ebaad04","modified":1698246241162},{"_id":"public/chatgpt/index.html","hash":"a4ea69a57299f8b8bf38c74043299e9cae124bdf","modified":1698246241162},{"_id":"public/eat_cats/index.html","hash":"9634863762e6e26959e27b0d3382dee52cf88e3d","modified":1698246241162},{"_id":"public/fcircle/index.html","hash":"ebc70298dc274f69b7ec3cc6501a397c35aa03dd","modified":1698246241162},{"_id":"public/fontawesome/index.html","hash":"85ead8763b74530fdc461269520bac655a5669f0","modified":1698246241162},{"_id":"public/kongtiao/index.html","hash":"f1ad6e68374e8209bd8af2ec8c70c16b4f3072f1","modified":1698246241162},{"_id":"public/license/index.html","hash":"9909dfc0b158fe362b58978e7d7b178cb35e2d67","modified":1698246241162},{"_id":"public/links/index.html","hash":"45457531dd72aee36cea5ff34430c03d9cd7b8d7","modified":1698246241162},{"_id":"public/messageboard/index.html","hash":"82604c7b7dd225adcbf39ed43b4746edbffcfa1b","modified":1698246241162},{"_id":"public/muyu/index.html","hash":"500b58f395948b9c6c34e607ef26641e9cdf7c52","modified":1698246241162},{"_id":"public/music/index.html","hash":"15a3255fcd0228f500eab4b64b449eb18ebc1f70","modified":1698246241162},{"_id":"public/othersite/index.html","hash":"d5a6fd8f3fef3e4594198eee1e65398e53bcfb92","modified":1698246241162},{"_id":"public/speaks/index.html","hash":"1747719246cb3655bc07505778a35160227b5467","modified":1698246241162},{"_id":"public/stars/index.html","hash":"a1c97f2d444b9fd6466a7f354b14559de91857d5","modified":1698246241162},{"_id":"public/subscribe/index.html","hash":"69144057968725b254c749769bd0c6e6d5d1e85c","modified":1698246241162},{"_id":"public/tags/index.html","hash":"943a49230743b683739cdab6e3975c9145af55d2","modified":1698246241162},{"_id":"public/tomato_clock/index.html","hash":"f79c3b55a9f33ff0f75a1a7d7a785316da24c4ff","modified":1698246241162},{"_id":"public/tools/index.html","hash":"123882325adb4842c3656a41e8445deb4035199c","modified":1698246241162},{"_id":"public/zaobao/index.html","hash":"0247da2569b92b2f9a772ad1617487f2bd486fd3","modified":1698246241162},{"_id":"public/update/index.html","hash":"b865ba6ff6abb7936327bbfe20b1bb898e90d598","modified":1698246241162},{"_id":"public/posts/add5de83/index.html","hash":"47fc1a12b2de61300860ac54793a71e6c6a0cda8","modified":1698246241162},{"_id":"public/posts/499a3852/index.html","hash":"01046e33cdb135fbe5acc64afcf8e042dcde410d","modified":1698246241162},{"_id":"public/posts/e232bc22/index.html","hash":"67ab1a8fb04fe1e66fafd09da32d1ee133be3700","modified":1698246241162},{"_id":"public/posts/620cff7f/index.html","hash":"967137a6b23cd89f2078236c89bce48717adcc5d","modified":1698246241162},{"_id":"public/posts/33834cc9/index.html","hash":"da9b48b5ce1c4b4ce0289d2e63bb20763c7dca89","modified":1698246241162},{"_id":"public/posts/aec1e412/index.html","hash":"d195ef71a6b6e11066b8d2118b1f48a43793b3a2","modified":1698246241162},{"_id":"public/posts/2de821dc/index.html","hash":"5055f1406d840795c8889697e5c42291e59d9c8d","modified":1698246241162},{"_id":"public/posts/557acb69/index.html","hash":"c333498ad08dfc9a0f6c4d26b89507ba8d2cf250","modified":1698246241162},{"_id":"public/posts/9d39de82/index.html","hash":"17ad8194f248ec2c56e3371fe36825990d32361d","modified":1698246241162},{"_id":"public/posts/7ddf46fc/index.html","hash":"c1e11577a608ec33d52202d5b82ffb8b44a711c4","modified":1698246241162},{"_id":"public/posts/4e1214ce/index.html","hash":"ea2d737f1bb8b95f14da06999a8fd97a07331ef0","modified":1698246241162},{"_id":"public/posts/438a2103/index.html","hash":"0f5a2140c81f2cab598cc635b658055d1522b402","modified":1698246241162},{"_id":"public/posts/16380ff0/index.html","hash":"a10dbcdd41edfd3e9c66cf1bad1daf72cc101f08","modified":1698246241162},{"_id":"public/posts/d862c611/index.html","hash":"f1ccdaf886cb01b2dd1b2531ea855bdd28e88c7c","modified":1698246241162},{"_id":"public/posts/9c5d9ac5/index.html","hash":"0185582ea74ccfa5632ee85d60c83fce5ab17323","modified":1698246241162},{"_id":"public/posts/b035bcd6/index.html","hash":"89b9c945b9cf82f97d6073689673fde4088fff2d","modified":1698246241162},{"_id":"public/posts/d154fd87/index.html","hash":"272ee597c87b76a988ca3aec9c31923ab0f0af6f","modified":1698246241162},{"_id":"public/posts/f5fad029/index.html","hash":"9d72df50d38715f052fbf5f2002e591d5d4dbe3d","modified":1698246241162},{"_id":"public/posts/55978286/index.html","hash":"3001b22518e7e3489d4c554c13cc23d4a16dc261","modified":1698246241162},{"_id":"public/archives/index.html","hash":"0c373cdb642ed4da2a82e240f79d12ea1f187c51","modified":1698246241162},{"_id":"public/archives/page/2/index.html","hash":"5839acf968814449b15275cc865445078f06b293","modified":1698246241162},{"_id":"public/archives/2023/index.html","hash":"a32cbc54b5fcbb533db66aea9b92f281aefec651","modified":1698246241162},{"_id":"public/archives/2023/page/2/index.html","hash":"346b48bff5b317ff7169c3dca491997105048f42","modified":1698246241162},{"_id":"public/archives/2023/03/index.html","hash":"c7d94bbf632b73379f8e9c3ca8f240439766dae3","modified":1698246241162},{"_id":"public/archives/2023/04/index.html","hash":"baa472887d48be23434d8c0dbd4016a35e15b87a","modified":1698246241162},{"_id":"public/archives/2023/05/index.html","hash":"eee3d5a74eee2712dfb8684e8eb4021b258f007e","modified":1698246241162},{"_id":"public/archives/2023/07/index.html","hash":"6665edb3daac78763a2003947ff35e513f12ccef","modified":1698246241162},{"_id":"public/archives/2023/08/index.html","hash":"eb9a77f2291ffeff2fc3695cb76b540963c25f73","modified":1698246241162},{"_id":"public/archives/2023/10/index.html","hash":"8d99379ce90d72425dcf90de2e72274f1e0a0370","modified":1698246241162},{"_id":"public/categories/GIS/index.html","hash":"da3d956c2aaa82fbebc6f8163d8c81d5194eb418","modified":1698246241162},{"_id":"public/categories/云原生/index.html","hash":"0717bbb04aaadcf695e026deb178adbf49b81864","modified":1698246241162},{"_id":"public/categories/Linux/index.html","hash":"4a505faf32a374273aa1e9ff54cdc690a859e5ac","modified":1698246241162},{"_id":"public/categories/日常办公/index.html","hash":"8c29bac2c60f7d90c96cf3197cf06af93336b29e","modified":1698246241162},{"_id":"public/categories/前端开发/index.html","hash":"6bfa96387db0997e4d4f9aa950e584abc420d724","modified":1698246241162},{"_id":"public/categories/算法/index.html","hash":"7f7ddfc491e6b4ef19e8102b182263a69d7cae8b","modified":1698246241162},{"_id":"public/categories/微软社/index.html","hash":"703c743778074806f0ce69b5625261fd3a827afd","modified":1698246241162},{"_id":"public/categories/后端开发/index.html","hash":"2323a3c19a464c2d0150282a1d17fd095ec5f64b","modified":1698246241162},{"_id":"public/index.html","hash":"2b5dc832e901414cdad8a48d17413ee0a8a02cf1","modified":1698246241162},{"_id":"public/tags/遥感/index.html","hash":"ffd43deca4e77e9bc5db79c6cfdaf2eed918d7f8","modified":1698246241162},{"_id":"public/tags/GIS/index.html","hash":"2c5f571a69a50cfdf42edd36a097461d3d7a8e14","modified":1698246241162},{"_id":"public/tags/软件安装/index.html","hash":"1db38b4fd42a14a706f89c17492e918bc4d5286f","modified":1698246241162},{"_id":"public/tags/容器/index.html","hash":"84cec306c144e81e4a707e573b6a0ca2af830c16","modified":1698246241162},{"_id":"public/tags/Docker/index.html","hash":"9db78a45b558a5e3f8baafc4706528c0470037fc","modified":1698246241162},{"_id":"public/tags/PostgreSQL/index.html","hash":"43070328472739975c08134d3327c68715abbec5","modified":1698246241162},{"_id":"public/tags/PostGIS/index.html","hash":"5754fd9ae9a5b1b6dabe62ee0b6e6dd84423812e","modified":1698246241162},{"_id":"public/tags/数据库/index.html","hash":"b4408d4ce80a05d68335c235c2f026f81869a7ed","modified":1698246241162},{"_id":"public/tags/K8S/index.html","hash":"a468553e18fd4bb079eb697584e6bb2e463c649d","modified":1698246241162},{"_id":"public/tags/Containerd/index.html","hash":"241b2e1aa251b7242038dbceae32cb9dff4d38ee","modified":1698246241162},{"_id":"public/tags/Linux/index.html","hash":"c4bbacd834092411ef98f0da8874d0289f6c96f2","modified":1698246241162},{"_id":"public/tags/安装/index.html","hash":"8dbf5c17ac8ea70c15bc926af0dd8fe51886ae2d","modified":1698246241162},{"_id":"public/tags/Pandoc/index.html","hash":"c7143271f4cfbdab5ef9fdce3acc9420dafb11e0","modified":1698246241162},{"_id":"public/tags/Clash/index.html","hash":"141843df6c03d239dc5e48822b39aa7c49fb4596","modified":1698246241162},{"_id":"public/tags/VPN/index.html","hash":"e1636a5142e18b8a858275a9c1213680cc3ff1dd","modified":1698246241162},{"_id":"public/tags/存储/index.html","hash":"8ae1a87ba42e9c449c1f4c989a834df0de0320ce","modified":1698246241162},{"_id":"public/tags/VMware/index.html","hash":"d2b9acfb41008e79a3fa7614ddffb9e64a0445dd","modified":1698246241162},{"_id":"public/tags/虚拟机/index.html","hash":"8c873b01f5b9db511fa96a56671d112b79727973","modified":1698246241162},{"_id":"public/tags/CentOS/index.html","hash":"302ba20976d24005af398984f1cf68cc07653f48","modified":1698246241162},{"_id":"public/tags/Office/index.html","hash":"24bea14939aecda77a811c235818a2527be7ae20","modified":1698246241162},{"_id":"public/tags/Windows/index.html","hash":"67b8d93af2c386dee6153fd740a0716ffa0ed12d","modified":1698246241162},{"_id":"public/tags/IP/index.html","hash":"c28822cc4f96df0723a49a7a9c9919310e51b044","modified":1698246241162},{"_id":"public/tags/Vue/index.html","hash":"824b297146c76dfe08cc6bcf7a99ef3567ee8f67","modified":1698246241162},{"_id":"public/tags/前端/index.html","hash":"a6fb494c9f84d3d0cc779454a14d4e5685a4ab39","modified":1698246241162},{"_id":"public/tags/组件/index.html","hash":"f344fbe28b7cd63c3bbdbdf4f5cd8e3bed9d509d","modified":1698246241162},{"_id":"public/tags/并行计算/index.html","hash":"9bf85404b9e6544b7c873753e50d0da2faf3de85","modified":1698246241162},{"_id":"public/tags/算法/index.html","hash":"3d4386084fc5833f24e1f9101a68dea02c90ae5e","modified":1698246241162},{"_id":"public/tags/打包/index.html","hash":"ec8ed858a80f6712573b2ddd62818c5f5d95bb77","modified":1698246241162},{"_id":"public/tags/微软社/index.html","hash":"6ba05848f5a3e0cde94201197befa7e724a34f92","modified":1698246241162},{"_id":"public/tags/后端/index.html","hash":"1e37a38e77fe7c19f640385d72a50be321de3d36","modified":1698246241162},{"_id":"public/css/iconfont.ttf","hash":"77c9046fe21f05606e245f04de5074dd0274766c","modified":1698246241162},{"_id":"public/css/iconfont.woff2","hash":"826b152984fbc95747ab3de52dd92339a7108e6f","modified":1698246241162},{"_id":"public/css/iconfont.woff","hash":"ef03d5f33fd2ee108f1779a0cf05a844721b6a69","modified":1698246241162},{"_id":"public/favicon.ico","hash":"07e2960f0a3ceef1be826753c886d4da3b518dae","modified":1698246241162},{"_id":"public/noie.html","hash":"9cd3ca039c06ffc39d8bbd8c73756d4d7b1a6796","modified":1698246241162},{"_id":"public/people.html","hash":"718b78874f19d65ccd5d90f450acdc5cfb6cdcc9","modified":1698246241162},{"_id":"public/projects.html","hash":"3c4ad54d574e2846d36a1c278c1ad761eb72e5c0","modified":1698246241162},{"_id":"public/404.html","hash":"7104b2160a2559b3235604c9da9b6dc623150ebd","modified":1698246241162},{"_id":"public/img/16.png","hash":"b33816a916bd35efad0f0119c54bbca47f9a0f3e","modified":1698246241162},{"_id":"public/assets/douban-loading.gif","hash":"5817eeb1aaa58d12da01d526b3f5df591f5bccc6","modified":1698246241162},{"_id":"public/img/144.png","hash":"b361835574cc281166e6196631f845d7c1a9c5b2","modified":1698246241162},{"_id":"public/img/180.png","hash":"79e72d5ef642a0005a91931f16a58249dfe2aa4b","modified":1698246241162},{"_id":"public/img/192.png","hash":"e223eec796a440e58498da2afcb924ae9c2e9af5","modified":1698246241162},{"_id":"public/img/20200924153652.png","hash":"c451ed5524c9791ddfde5542d1fbf37c90607011","modified":1698246241162},{"_id":"public/img/36.png","hash":"42222cc7ba47da2cea93badd38eeb1f030eb0e9d","modified":1698246241162},{"_id":"public/img/20200904222157.png","hash":"a66ccc276588321c4b225c51407df400b80070a3","modified":1698246241162},{"_id":"public/img/48.png","hash":"2807bcdaa106f1b9860c410e2b6518c4b4fed7f5","modified":1698246241162},{"_id":"public/img/72.png","hash":"4c7badee6be03ff4f3ccb55ec44dc7b7dc449714","modified":1698246241162},{"_id":"public/img/96.png","hash":"697c5a92a7ab712d677a96aad47cda9d852810fe","modified":1698246241162},{"_id":"public/img/72645310.jpg","hash":"1a2fc365c4f196cdd0659b1c8265653c83a66a15","modified":1698246241162},{"_id":"public/img/8DSTSS20990281646044689944.PNG","hash":"bada86fe868064d9acba2ba37dafcbfd2194442f","modified":1698246241162},{"_id":"public/img/ad.png","hash":"ba05e1e0b88a71e3c6238aab1d3b123d1b9c8edd","modified":1698246241162},{"_id":"public/img/alipay.png","hash":"681c9c1a8d67ac76e1d59d29f0c2239a1b0272ee","modified":1698246241162},{"_id":"public/img/O35HOG22090681654187900371.jpg","hash":"3eab9ee4d74c990bb8a4bd216d9a20f18d3862ff","modified":1698246241162},{"_id":"public/img/a.webp","hash":"9a78727cfd1c342f848edf8763a8cb040dc91621","modified":1698246241162},{"_id":"public/img/apple-touch-icon.png","hash":"79e72d5ef642a0005a91931f16a58249dfe2aa4b","modified":1698246241162},{"_id":"public/img/b.jpg","hash":"9c3363918511576e4782b477853298e82f6f23b1","modified":1698246241162},{"_id":"public/img/cd.png","hash":"9e2948f8fcdd6a33d4d88be26c26cc5a3f284a39","modified":1698246241162},{"_id":"public/img/buYgVO22990681624844309044.jpg","hash":"2591290f4b1e24ba658805b116dae2da6d7455f8","modified":1698246241162},{"_id":"public/img/cd_tou.png","hash":"f3be731e88699b3221349f154675f23efe6bbcaf","modified":1698246241162},{"_id":"public/img/comment.png","hash":"2873edd17eb2fdc0cbbb28384e6e049352c97f81","modified":1698246241162},{"_id":"public/img/favicon.ico","hash":"07e2960f0a3ceef1be826753c886d4da3b518dae","modified":1698246241162},{"_id":"public/img/mqaizf23990681654186719414.jpeg","hash":"bf7e3f6f1cac8e3c6778521afaadb202909323db","modified":1698246241162},{"_id":"public/img/friend_404.gif","hash":"5817eeb1aaa58d12da01d526b3f5df591f5bccc6","modified":1698246241162},{"_id":"public/img/nyancat.gif","hash":"afeb22b45705116cda3ea983e64d31557ff7bc7d","modified":1698246241162},{"_id":"public/img/头像.png","hash":"6fbe3833990993d8a334e13ed7aed8c1ed967104","modified":1698246241162},{"_id":"public/img/wechat.png","hash":"384a551645bd5fcff14bfcec2a684f8360db5008","modified":1698246241162},{"_id":"public/img/256.png","hash":"befbe5079133291ec2f63432f27eb60dc79299a9","modified":1698246241162},{"_id":"public/img/favicon.jpg","hash":"87b9a48ef9a6be95608aba8593bd361d4866da09","modified":1698246241162},{"_id":"public/img/scacascasc.jpg","hash":"ecd4ffd28005339f8027870759264b2e17ef61bb","modified":1698246241162},{"_id":"public/sw.js","hash":"bcc7de219211ac6717fb6d70d7d347bb992aa04c","modified":1698246241162},{"_id":"public/swReg.js","hash":"46413bd344c59aa6a17187f6d80ca82638bb9aff","modified":1698246241162},{"_id":"public/css/article_shine.css","hash":"ea0fcb297cc2bf81be261c2fb2a982c6b205ded5","modified":1698246241162},{"_id":"public/css/cat.css","hash":"5ba70d299e10d5ce570dff80d0363a262b449e25","modified":1698246241162},{"_id":"public/css/commentBarrage.css","hash":"3049e9a21192573efaca391303464edece2eb153","modified":1698246241162},{"_id":"public/css/comment.css","hash":"c1f12867a881389b16473a28ece7259eb7c8e864","modified":1698246241162},{"_id":"public/css/danmaku.css","hash":"5af51f5a1e9897bf14bc3742185d6cc49fce278f","modified":1698246241162},{"_id":"public/css/iconfont.css","hash":"dbf6cd27a2b13b4ec570eb6977a749fbc16cc22c","modified":1698246241162},{"_id":"public/css/music.css","hash":"4c36e1c13004f78ef01c05f41e7c1de171c0216e","modified":1698246241162},{"_id":"public/css/people.css","hash":"68616ea98561a7ed31c3f6e213bf70885851105a","modified":1698246241162},{"_id":"public/css/stylessimple.css","hash":"502e011516b23218b8089e8d8426ce2a7784e6ad","modified":1698246241162},{"_id":"public/css/swiperstyle.css","hash":"bd96c9c1ef59f87fc900851af918d10ffeffee01","modified":1698246241162},{"_id":"public/css/top_wave.css","hash":"936f232f700ffdeec514d1ab9f68b28c86402c5f","modified":1698246241162},{"_id":"public/css/var.css","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1698246241162},{"_id":"public/js/aplayersave.js","hash":"abbc6281d95c861b1c61e29bc2457a1942037e5f","modified":1698246241162},{"_id":"public/js/baiduhistory.js","hash":"e8862020512d657b314645126110eb717d2133ee","modified":1698246241162},{"_id":"public/js/bbtalklunbo.js","hash":"8b93d67401594d194689b3093a886b7804243ea7","modified":1698246241162},{"_id":"public/js/browser.js","hash":"ea2b973f9f2133900121dc50a184c4bdea77d2f7","modified":1698246241162},{"_id":"public/js/calendar.js","hash":"13c40c66697e9b716d7548fce4aa27566c458c60","modified":1698246241162},{"_id":"public/js/cate.js","hash":"af35a2ea334e5af28586d14b8574f6da83ed8095","modified":1698246241162},{"_id":"public/js/cat.js","hash":"294a85fb40f1c48d5f198bb8b6b978386f4871aa","modified":1698246241162},{"_id":"public/js/commentBarrage.js","hash":"4b93346e8654ba48aba44a46c8130aad2b4e1554","modified":1698246241162},{"_id":"public/js/commentsCount.js","hash":"9f6095813472eeefcc493e16ffbd81f9e630b0a9","modified":1698246241162},{"_id":"public/js/copy.js","hash":"d549dfed12e4953d6c7693ba71148ac6c2cf23d3","modified":1698246241162},{"_id":"public/js/countup.js","hash":"89388b8b14405b13257da96356312a5f37f94841","modified":1698246241162},{"_id":"public/js/danmaku.js","hash":"699c81fa39471b3f10266fc2fbf3be350110431f","modified":1698246241162},{"_id":"public/js/cursor.js","hash":"064a76af7efc6f378c96ccaaa30bccd724dccd71","modified":1698246241162},{"_id":"public/js/day.js","hash":"dce34c73ca3d85431269e91d6d8d013c8d4e41c3","modified":1698246241162},{"_id":"public/js/dianzan.js","hash":"5c41f4ce378aaf113c686b0623b10daa137af78f","modified":1698246241162},{"_id":"public/js/fixbugpjax.js","hash":"4d440ed1dfb2bede2db96a647670b776179541f3","modified":1698246241162},{"_id":"public/js/dis.js","hash":"664cfb1b06c9941a2a3845be00ec9fb443b09619","modified":1698246241162},{"_id":"public/js/fixed_card_widget.js","hash":"d2c481ba0f16c29019b30805be6fbc35db0762a0","modified":1698246241162},{"_id":"public/js/gitalker.js","hash":"265a1663d4a57febcbf2ffdc0ce7b2a1c29d9445","modified":1698246241162},{"_id":"public/js/fps.js","hash":"a8320fe238d8863ce74f1371a0149c8032ac5b1a","modified":1698246241162},{"_id":"public/js/heimu.js","hash":"87e0da37e658c9d87cbe45a548ed460821529a90","modified":1698246241162},{"_id":"public/js/hide.show.js","hash":"b3f53672383108c3dcf2954659a76ce4f11f05da","modified":1698246241162},{"_id":"public/js/latest.js","hash":"1012aa0cf451d2a2dee4323934c6cb5520ffc1aa","modified":1698246241162},{"_id":"public/js/lyxTalk.js","hash":"a04c0bb45139048f1060f51a5c40b19069e9f121","modified":1698246241162},{"_id":"public/js/nav.js","hash":"607c71d2f547f254cda37fc730c07b34fde3f9c7","modified":1698246241162},{"_id":"public/js/noie.js","hash":"89068cb5cd118de77d7f8c88015cc3ca979a3ec9","modified":1698246241162},{"_id":"public/js/owo.js","hash":"fcccdb757d8d956fdee03c1f53063b2ca1d4f7d4","modified":1698246241162},{"_id":"public/js/people.js","hash":"7f54ebeb135bbdb389171a7b9303ad0d3189caa4","modified":1698246241162},{"_id":"public/js/player.js","hash":"e1b0ac0047ff3e9600521365001336fb7febf545","modified":1698246241162},{"_id":"public/js/randomFriend.js","hash":"dcfee422742ddde0997a244300d49862c1e0d942","modified":1698246241162},{"_id":"public/js/resizeTop.js","hash":"2c3370d0b7073b39efd84650d12bf80ac838fce8","modified":1698246241162},{"_id":"public/js/rightmenu.js","hash":"806d068bf0692b36dfcf973a04372866f50d7691","modified":1698246241162},{"_id":"public/js/seo.js","hash":"2b389b68da7509308f7b1038b822fb8e4a064a91","modified":1698246241162},{"_id":"public/js/settings.js","hash":"bc7379b0f540385f3616c59bf5f46a4ae52d4a47","modified":1698246241162},{"_id":"public/js/sitetime.js","hash":"0487f2178e177bfac24e344950a69f984e2290eb","modified":1698246241162},{"_id":"public/js/sw-toolbox.js","hash":"e7936268344280b501dfe0e79de355df91b9a5d0","modified":1698246241162},{"_id":"public/js/swiperinit.js","hash":"0cdacaca879a35effc93cfe1cfa3d89b359f9d11","modified":1698246241162},{"_id":"public/js/tianli_gpt.js","hash":"3356806553b701decd308e1b4793c2635e4dd52d","modified":1698246241162},{"_id":"public/js/welcome.js","hash":"2550cb3fdad3decabd9c0512c2cf50eb279cb82d","modified":1698246241162},{"_id":"public/js/welcomeconsole.js","hash":"1f0dac070d180b4253d7cb1237d87202136c223b","modified":1698246241162},{"_id":"public/js/utils.js","hash":"0a8d52d21590dae3164033a600320c5c331ea427","modified":1698246241162},{"_id":"public/js/dist/baiduhistory.dev.js","hash":"deef9129b356d8a1e0054ae16f069ab0133903a1","modified":1698246241162},{"_id":"public/js/dist/calendar.dev.js","hash":"cf9e338cfe5cb95d622cf5d01852c229972ce680","modified":1698246241162},{"_id":"public/js/dist/bbtalklunbo.dev.js","hash":"dbf6439e92cabff5441d39fa4a344a712574cfbe","modified":1698246241162},{"_id":"public/js/dist/fixbugpjax.dev.js","hash":"6f970fc679c05c82a094f0f1cf9d705dbdecd8e9","modified":1698246241162},{"_id":"public/js/dist/links.dev.js","hash":"d73bf4c53888e80bbb829d99ed88f8d9c6ba0c69","modified":1698246241162},{"_id":"public/js/dist/resizeTop.dev.js","hash":"ff9afb48cf8214e08414e09fc4691aaf1aa5bc4a","modified":1698246241162},{"_id":"public/js/dist/seo.dev.js","hash":"98ad54a95d32164dee097f9075b942bd6051c0d3","modified":1698246241162},{"_id":"public/js/dist/heimu.dev.js","hash":"36836761b382bbd98d012023285eac61c334b4b7","modified":1698246241162},{"_id":"public/js/search/algolia.js","hash":"ce8131b712dca80f289015aef75f86e727f62981","modified":1698246241162},{"_id":"public/js/search/local-search.js","hash":"3071a4208fdf89ad7e0031536dd6ffa7bc951e4d","modified":1698246241162},{"_id":"public/css/index.css","hash":"500db78c785a9d2348fd1364ad367d9c361d3b4e","modified":1698246241162},{"_id":"public/css/ariasakablog.css","hash":"8d8734fd0995a3774c654bc0b2982274fa28cc55","modified":1698246241162},{"_id":"public/owo.json","hash":"2619d4da2f83e5517dcbf21f1904a160eae30f2d","modified":1698246241162},{"_id":"public/css/swiper.min.css","hash":"e5cfdad1e61ed33b54660abf8f018fdda1475dae","modified":1698246241162},{"_id":"public/js/bbtalk.js","hash":"10eb53c57638a498de78701625998b37535d6ac7","modified":1698246241162},{"_id":"public/js/local-search.js","hash":"58c87e36a0d7a31b5addc213d67960d89b0bfed3","modified":1698246241162},{"_id":"public/js/languages.js","hash":"e3e117378358426607ac29546689e2b8046abd2f","modified":1698246241162},{"_id":"public/js/lunar.js","hash":"cd9a6debfb8a0c3cc814add3f3b9b63368364cfd","modified":1698246241162},{"_id":"public/js/main.js","hash":"1db84afbd4dfcffa6af63adf5c53be764ede25fe","modified":1698246241162},{"_id":"public/js/sakura.js","hash":"6ca567eb87b7698b57b04b505ba2bf8db63bee37","modified":1698246241162},{"_id":"public/js/smooth-scrolling.js","hash":"187d332a5242f2f52090d6ad3fac501307866d93","modified":1698246241162},{"_id":"public/js/tw_cn.js","hash":"5c1391c9e96950833641f178b5f23c58422fb659","modified":1698246241162},{"_id":"public/js/dist/main.dev.js","hash":"9234c27bf03eca406d451e6900692388ae62f07e","modified":1698246241162},{"_id":"public/js/dist/bbtalk.dev.js","hash":"c3c1f148bf2ad94a1599a31f188e75d9e09808e5","modified":1698246241162},{"_id":"public/js/dist/gongnong.dev.js","hash":"1d1e4b3841c7b6a3b8ed42fc5e797cb8aad3a6b4","modified":1698246241162},{"_id":"public/js/twikoo.all.min.js","hash":"0894ffbe932c0b1e6ad2bfaebdd3b552bbee7de5","modified":1698246241162},{"_id":"public/js/dist/twikoo.all.min.dev.js","hash":"2685407583d1923eea0be5725a02bf0fce3505fa","modified":1698246241162},{"_id":"public/img/512.png","hash":"8981183b57d05ab7a32bd70f675ca136510119d3","modified":1698246241162},{"_id":"public/img/1666416764216-Nexus 9.png","hash":"ffc09c077971664bfc2719646c94c6041bed2319","modified":1698246241162},{"_id":"public/img/1666416625095-iPhone X.png","hash":"39104e0623e0798b97605eedda8ea85f5453ae56","modified":1698246241162},{"_id":"public/img/uTools_1666416859497-iMac.png","hash":"82db53af4a2c95180ccf7205f9121e052cf180ba","modified":1698246241162},{"_id":"public/img/1666416702650-Macbook Pro 2016 (1).png","hash":"71ee0b2eeeb1bbe13b7037c937648d7a2b420b32","modified":1698246241162},{"_id":"public/img/siteshot.png","hash":"9841f448e6001a9dd94fd8ca5e9147d5c1a12f10","modified":1698246241162}],"Category":[{"name":"GIS","_id":"clo5vyrtp00042j3ug5q2edv0"},{"name":"云原生","_id":"clo5vyrtr000c2j3u2o2db3eq"},{"name":"Linux","_id":"clo5vyrtw00182j3uh9jf689t"},{"name":"日常办公","_id":"clo5vyru100242j3u6haff69w"},{"name":"前端开发","_id":"clo5vyru1002d2j3u5smradhy"},{"name":"算法","_id":"clo5vyru2002k2j3ucx3r9ras"},{"name":"微软社","_id":"clo5vyru7004k2j3u2eh5bfuu"},{"name":"后端开发","_id":"clo5vyru7004m2j3uclbk7bik"}],"Data":[{"_id":"bangumis","data":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]}},{"_id":"games","data":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}]},{"_id":"creativity","data":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}]},{"_id":"link","data":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}],"Page":[{"_content":"{\"link_list\": [],\"length\":0}","source":"link.json","raw":"{\"link_list\": [],\"length\":0}","date":"2023-10-24T07:31:16.596Z","updated":"2023-10-24T07:31:16.596Z","path":"link.json","layout":"false","title":"","comments":1,"_id":"clo5vyrtl00002j3u71mp28ug","content":"{\"link_list\":[],\"length\":0}","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":27,"excerpt":"","more":"{\"link_list\":[],\"length\":0}"},{"_content":"{\n \"name\": \"Tankenqiの小窝\", \n \"short_name\": \"Tankenqiの小窝\", \n \"theme_color\": \"var(--lyx-theme)\", \n \"background_color\": \"var(--lyx-theme)\",\n \"display\": \"standalone\",\n \"scope\": \"/\",\n \"start_url\": \"/\",\n \"icons\": [ \n {\n \"src\": \"/img/16.png\",\n \"sizes\": \"16x16\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/36.png\",\n \"sizes\": \"36x36\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/48.png\",\n \"sizes\": \"48x48\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/72.png\",\n \"sizes\": \"72x72\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/96.png\",\n \"sizes\": \"96x96\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/144.png\",\n \"sizes\": \"144x144\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/180.png\",\n \"sizes\": \"180X180\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/apple-touch-icon.png\",\n \"sizes\": \"180x180\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/192.png\",\n \"sizes\": \"192x192\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/256.png\",\n \"sizes\": \"256x256\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/512.png\",\n \"sizes\": \"512x512\",\n \"type\": \"image/png\"\n }\n ],\n \"splash_pages\": null\n }","source":"manifest.json","raw":"{\n \"name\": \"Tankenqiの小窝\", \n \"short_name\": \"Tankenqiの小窝\", \n \"theme_color\": \"var(--lyx-theme)\", \n \"background_color\": \"var(--lyx-theme)\",\n \"display\": \"standalone\",\n \"scope\": \"/\",\n \"start_url\": \"/\",\n \"icons\": [ \n {\n \"src\": \"/img/16.png\",\n \"sizes\": \"16x16\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/36.png\",\n \"sizes\": \"36x36\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/48.png\",\n \"sizes\": \"48x48\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/72.png\",\n \"sizes\": \"72x72\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/96.png\",\n \"sizes\": \"96x96\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/144.png\",\n \"sizes\": \"144x144\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/180.png\",\n \"sizes\": \"180X180\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/apple-touch-icon.png\",\n \"sizes\": \"180x180\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/192.png\",\n \"sizes\": \"192x192\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/256.png\",\n \"sizes\": \"256x256\",\n \"type\": \"image/png\"\n },\n {\n \"src\": \"/img/512.png\",\n \"sizes\": \"512x512\",\n \"type\": \"image/png\"\n }\n ],\n \"splash_pages\": null\n }","date":"2023-10-21T06:02:13.413Z","updated":"2023-10-21T06:02:13.413Z","path":"manifest.json","layout":"false","title":"","comments":1,"_id":"clo5vyrto00022j3u4gkac4za","content":"{\"name\":\"Tankenqiの小窝\",\"short_name\":\"Tankenqiの小窝\",\"theme_color\":\"var(--lyx-theme)\",\"background_color\":\"var(--lyx-theme)\",\"display\":\"standalone\",\"scope\":\"/\",\"start_url\":\"/\",\"icons\":[{\"src\":\"/img/16.png\",\"sizes\":\"16x16\",\"type\":\"image/png\"},{\"src\":\"/img/36.png\",\"sizes\":\"36x36\",\"type\":\"image/png\"},{\"src\":\"/img/48.png\",\"sizes\":\"48x48\",\"type\":\"image/png\"},{\"src\":\"/img/72.png\",\"sizes\":\"72x72\",\"type\":\"image/png\"},{\"src\":\"/img/96.png\",\"sizes\":\"96x96\",\"type\":\"image/png\"},{\"src\":\"/img/144.png\",\"sizes\":\"144x144\",\"type\":\"image/png\"},{\"src\":\"/img/180.png\",\"sizes\":\"180X180\",\"type\":\"image/png\"},{\"src\":\"/img/apple-touch-icon.png\",\"sizes\":\"180x180\",\"type\":\"image/png\"},{\"src\":\"/img/192.png\",\"sizes\":\"192x192\",\"type\":\"image/png\"},{\"src\":\"/img/256.png\",\"sizes\":\"256x256\",\"type\":\"image/png\"},{\"src\":\"/img/512.png\",\"sizes\":\"512x512\",\"type\":\"image/png\"}],\"splash_pages\":null}","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":859,"excerpt":"","more":"{\"name\":\"Tankenqiの小窝\",\"short_name\":\"Tankenqiの小窝\",\"theme_color\":\"var(--lyx-theme)\",\"background_color\":\"var(--lyx-theme)\",\"display\":\"standalone\",\"scope\":\"/\",\"start_url\":\"/\",\"icons\":[{\"src\":\"/img/16.png\",\"sizes\":\"16x16\",\"type\":\"image/png\"},{\"src\":\"/img/36.png\",\"sizes\":\"36x36\",\"type\":\"image/png\"},{\"src\":\"/img/48.png\",\"sizes\":\"48x48\",\"type\":\"image/png\"},{\"src\":\"/img/72.png\",\"sizes\":\"72x72\",\"type\":\"image/png\"},{\"src\":\"/img/96.png\",\"sizes\":\"96x96\",\"type\":\"image/png\"},{\"src\":\"/img/144.png\",\"sizes\":\"144x144\",\"type\":\"image/png\"},{\"src\":\"/img/180.png\",\"sizes\":\"180X180\",\"type\":\"image/png\"},{\"src\":\"/img/apple-touch-icon.png\",\"sizes\":\"180x180\",\"type\":\"image/png\"},{\"src\":\"/img/192.png\",\"sizes\":\"192x192\",\"type\":\"image/png\"},{\"src\":\"/img/256.png\",\"sizes\":\"256x256\",\"type\":\"image/png\"},{\"src\":\"/img/512.png\",\"sizes\":\"512x512\",\"type\":\"image/png\"}],\"splash_pages\":null}"},{"title":"关于","date":"2023-03-30T07:57:51.000Z","type":"about","_content":"\n","source":"about/index.md","raw":"---\ntitle: 关于\ndate: 2023-03-30 15:57:51\ntype: \"about\"\n---\n\n","updated":"2023-10-22T06:09:44.139Z","path":"about/index.html","comments":1,"layout":"page","_id":"clo5vyrtq00062j3ufr6z8pee","content":"","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":0,"excerpt":"","more":""},{"_content":"{\n \"name\": \"tankenqiblog\",\n \"version\": \"1.0.17\",\n \"description\": \"SpeedUp!\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"author\": \"\",\n \"license\": \"ISC\"\n}\n","source":"package.json","raw":"{\n \"name\": \"tankenqiblog\",\n \"version\": \"1.0.17\",\n \"description\": \"SpeedUp!\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"author\": \"\",\n \"license\": \"ISC\"\n}\n","date":"2023-10-21T06:03:26.686Z","updated":"2023-10-21T06:03:26.686Z","path":"package.json","layout":"false","title":"","comments":1,"_id":"clo5vyrtq00082j3u9ui26jbm","content":"{\"name\":\"tankenqiblog\",\"version\":\"1.0.17\",\"description\":\"SpeedUp!\",\"main\":\"index.js\",\"scripts\":{\"test\":\"echo \\\"Error: no test specified\\\" && exit 1\"},\"author\":\"\",\"license\":\"ISC\"}","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":171,"excerpt":"","more":"{\"name\":\"tankenqiblog\",\"version\":\"1.0.17\",\"description\":\"SpeedUp!\",\"main\":\"index.js\",\"scripts\":{\"test\":\"echo \\\"Error: no test specified\\\" && exit 1\"},\"author\":\"\",\"license\":\"ISC\"}"},{"title":"bangumis","date":"2022-07-16T02:35:32.000Z","type":"bangumis","_content":"","source":"bangumis/index.md","raw":"---\ntitle: bangumis\ndate: 2022-07-16 10:35:32\ntype: \"bangumis\"\n---\n","updated":"2023-10-21T01:08:55.929Z","path":"bangumis/index.html","comments":1,"layout":"page","_id":"clo5vyrtr000a2j3ugcwfcl73","content":"","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":0,"excerpt":"","more":""},{"title":"分类","date":"2022-07-03T12:48:08.000Z","type":"categories","_content":"","source":"categories/index.md","raw":"---\ntitle: 分类\ndate: 2022-07-03 20:48:08\ntype: \"categories\"\n---\n","updated":"2023-10-21T01:08:55.929Z","path":"categories/index.html","comments":1,"layout":"page","_id":"clo5vyrtr000e2j3u33zkdflh","content":"","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":0,"excerpt":"","more":""},{"comments":0,"aside":false,"_content":"","source":"chatgpt/index.md","raw":"---\ncomments: false\naside: false\n---\n","date":"2023-10-25T08:56:11.922Z","updated":"2023-10-25T08:56:11.922Z","path":"chatgpt/index.html","title":"","layout":"page","_id":"clo5vyrts000g2j3u3kav63te","content":"","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":0,"excerpt":"","more":""},{"comments":0,"aside":false,"_content":"\n\n\n","source":"eat_cats/index.md","raw":"---\ncomments: false\naside: false\n---\n\n\n\n","date":"2023-10-25T14:31:03.857Z","updated":"2023-10-25T14:31:03.857Z","path":"eat_cats/index.html","title":"","layout":"page","_id":"clo5vyrtt000l2j3u4oisfzb6","content":"\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":0,"excerpt":"","more":"\n"},{"title":"朋友圈","date":"2023-01-29T07:23:17.000Z","_content":"
\n
\n

🎣 钓鱼

\n
\n
\n
\n\n\n\n
\n
与主机通讯中……
\n
\n\n\n\n\n\n \n\n\n","source":"fcircle/index.md","raw":"---\ntitle: 朋友圈\ndate: 2023-01-29 15:23:17\n---\n
\n
\n

🎣 钓鱼

\n
\n
\n
\n\n\n\n
\n
与主机通讯中……
\n
\n\n\n\n\n\n \n\n\n","updated":"2023-10-23T10:28:19.350Z","path":"fcircle/index.html","comments":1,"layout":"page","_id":"clo5vyrtu000n2j3u49i5hmkd","content":"
\n
\n

🎣 钓鱼

\n
\n
\n
\n\n\n
\n
与主机通讯中……
\n
\n\n\n\n\n\n \n\n\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":88,"excerpt":"","more":"
\n
\n

🎣 钓鱼

\n
\n
\n
\n\n\n
\n
与主机通讯中……
\n
\n\n\n\n\n\n \n\n\n"},{"title":"fontawesome对照","date":"2022-11-25T00:16:09.000Z","_content":"\n\n","source":"fontawesome/index.md","raw":"---\ntitle: fontawesome对照\ndate: 2022-11-25 08:16:09\n---\n\n\n","updated":"2023-10-21T01:08:55.930Z","path":"fontawesome/index.html","comments":1,"layout":"page","_id":"clo5vyrtu000s2j3u9uwug7im","content":"\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":137,"excerpt":"","more":"\n"},{"title":"小空调","date":"2022-11-24T23:37:35.000Z","_content":"","source":"kongtiao/index.md","raw":"---\ntitle: 小空调\ndate: 2022-11-25 07:37:35\n---\n","updated":"2023-10-24T15:32:59.853Z","path":"kongtiao/index.html","comments":1,"layout":"page","_id":"clo5vyrtv000w2j3ubnho8rnm","content":"","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":0,"excerpt":"","more":""},{"title":"声明","date":"2023-07-10T03:13:49.000Z","seo_title":"声明","layout":"docs","bottom_meta":false,"_content":"Copyright(C) TANKENQI 2023\n\n# 声明 | 版权协议\n\n为了保持文章质量,并保持互联网的开放共享精神,保持页面流量的稳定,综合考虑下本站的所有原创文章均采用cc协议中比较严格的创作共用-非商业性-禁止演绎 4.0 国际标准。这篇文章主要想能够更加清楚明白的介绍本站的协议标准和要求。方便您合理的使用本站的文章。\n\n本站无广告嵌入和商业行为。违反协议的行为不仅会损害原作者的创作热情,而且会影响整个版权环境。强烈呼吁您能够在转载时遵守协议。遵守协议的行为几乎不会对您的目标产生负面影响,鼓励创作环境是每个创作者的期望。\n\n#### 博客的分类介绍\n\n经验分享包含原创内容,原创内容的非商用转载必须为完整转载且标注出处的带有超链接功能的完整url链接(需能点击)或访问原文之类字样的超链接。\n\n转载内容为转载内容,均标注了出处。建议使用原链接打开,尊重原作者。所有转载内容尽可能为完整转载(如果有部分内容有问题可能会由部分删减和补充)并进行样式调整以适合本博客。如果转载该部分内容需要联系原作者。\n\n#### 你可以做什么?\n\n只要您遵守本页的许可,您可以自由地共享文章的内容 — 在任何媒介以任何形式复制、发行本作品。并且无需通知作者。\n\n## 你需要遵守什么样的许可?\n\n#### 署名\n\n您必须标注内容的来源,您需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接提升阅读体验)。\n\n#### 禁止商用\n\n本站内容免费向互联网所有用户提供,分享本站文章时禁止商业性使用、禁止在转载页面中插入广告(例如谷歌广告、百度广告)、禁止阅读的拦截行为(例如关注公众号、下载App后观看文章)。\n\n#### 禁止演绎\n\n* 分享全部内容(无修改)\n 您需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接)\n* 分享部分截取内容或者衍生创作\n 目前本站全部原创文章的衍生品禁止公开分享和分发。如有更好的修改建议,可以在对应文章下留言。如有衍生创作需求,可以在评论中联系。\n\n## 什么内容会被版权保护\n\n#### 包括但不限于:\n\n* 文章封面图片\n* 文章标题和正文\n* 站点图片素材(不含主题自带素材)\n\n#### 例外情况\n\n本着友好互相进步的原则,被本站友链收录的博客允许博客文章内容的衍生品的分享和分发,但仍需标注出处。\n\n本着互联网开放精神,您可以在博客文章下方留言要求授权博文的衍生品的分享和分发,标注您的网站地址。\n\n## 作者原创代码及网站源代码协议\n\n网站所有代码采用MIT协议,如有不同,作者会进行标注\n\n随便扒站吧!\n\n## 网站本身有关\n\n本站已开启存储桶全站加速,接入了灵天盾CDN,请刷流量的耗子尾汁!!!","source":"license/index.md","raw":"---\ntitle: 声明\ndate: 2023-07-10 11:13:49\nseo_title: 声明\nlayout: docs\nbottom_meta: false\n---\nCopyright(C) TANKENQI 2023\n\n# 声明 | 版权协议\n\n为了保持文章质量,并保持互联网的开放共享精神,保持页面流量的稳定,综合考虑下本站的所有原创文章均采用cc协议中比较严格的创作共用-非商业性-禁止演绎 4.0 国际标准。这篇文章主要想能够更加清楚明白的介绍本站的协议标准和要求。方便您合理的使用本站的文章。\n\n本站无广告嵌入和商业行为。违反协议的行为不仅会损害原作者的创作热情,而且会影响整个版权环境。强烈呼吁您能够在转载时遵守协议。遵守协议的行为几乎不会对您的目标产生负面影响,鼓励创作环境是每个创作者的期望。\n\n#### 博客的分类介绍\n\n经验分享包含原创内容,原创内容的非商用转载必须为完整转载且标注出处的带有超链接功能的完整url链接(需能点击)或访问原文之类字样的超链接。\n\n转载内容为转载内容,均标注了出处。建议使用原链接打开,尊重原作者。所有转载内容尽可能为完整转载(如果有部分内容有问题可能会由部分删减和补充)并进行样式调整以适合本博客。如果转载该部分内容需要联系原作者。\n\n#### 你可以做什么?\n\n只要您遵守本页的许可,您可以自由地共享文章的内容 — 在任何媒介以任何形式复制、发行本作品。并且无需通知作者。\n\n## 你需要遵守什么样的许可?\n\n#### 署名\n\n您必须标注内容的来源,您需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接提升阅读体验)。\n\n#### 禁止商用\n\n本站内容免费向互联网所有用户提供,分享本站文章时禁止商业性使用、禁止在转载页面中插入广告(例如谷歌广告、百度广告)、禁止阅读的拦截行为(例如关注公众号、下载App后观看文章)。\n\n#### 禁止演绎\n\n* 分享全部内容(无修改)\n 您需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接)\n* 分享部分截取内容或者衍生创作\n 目前本站全部原创文章的衍生品禁止公开分享和分发。如有更好的修改建议,可以在对应文章下留言。如有衍生创作需求,可以在评论中联系。\n\n## 什么内容会被版权保护\n\n#### 包括但不限于:\n\n* 文章封面图片\n* 文章标题和正文\n* 站点图片素材(不含主题自带素材)\n\n#### 例外情况\n\n本着友好互相进步的原则,被本站友链收录的博客允许博客文章内容的衍生品的分享和分发,但仍需标注出处。\n\n本着互联网开放精神,您可以在博客文章下方留言要求授权博文的衍生品的分享和分发,标注您的网站地址。\n\n## 作者原创代码及网站源代码协议\n\n网站所有代码采用MIT协议,如有不同,作者会进行标注\n\n随便扒站吧!\n\n## 网站本身有关\n\n本站已开启存储桶全站加速,接入了灵天盾CDN,请刷流量的耗子尾汁!!!","updated":"2023-10-21T13:47:39.286Z","path":"license/index.html","comments":1,"_id":"clo5vyrtw00122j3uctd1bvhk","content":"

Copyright© TANKENQI 2023

\n

声明 | 版权协议

\n

为了保持文章质量,并保持互联网的开放共享精神,保持页面流量的稳定,综合考虑下本站的所有原创文章均采用cc协议中比较严格的创作共用-非商业性-禁止演绎 4.0 国际标准。这篇文章主要想能够更加清楚明白的介绍本站的协议标准和要求。方便您合理的使用本站的文章。

\n

本站无广告嵌入和商业行为。违反协议的行为不仅会损害原作者的创作热情,而且会影响整个版权环境。强烈呼吁您能够在转载时遵守协议。遵守协议的行为几乎不会对您的目标产生负面影响,鼓励创作环境是每个创作者的期望。

\n

博客的分类介绍

\n

经验分享包含原创内容,原创内容的非商用转载必须为完整转载且标注出处的带有超链接功能的完整url链接(需能点击)或访问原文之类字样的超链接。

\n

转载内容为转载内容,均标注了出处。建议使用原链接打开,尊重原作者。所有转载内容尽可能为完整转载(如果有部分内容有问题可能会由部分删减和补充)并进行样式调整以适合本博客。如果转载该部分内容需要联系原作者。

\n

你可以做什么?

\n

只要您遵守本页的许可,您可以自由地共享文章的内容 — 在任何媒介以任何形式复制、发行本作品。并且无需通知作者。

\n

你需要遵守什么样的许可?

\n

署名

\n

您必须标注内容的来源,您需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接提升阅读体验)。

\n

禁止商用

\n

本站内容免费向互联网所有用户提供,分享本站文章时禁止商业性使用、禁止在转载页面中插入广告(例如谷歌广告、百度广告)、禁止阅读的拦截行为(例如关注公众号、下载App后观看文章)。

\n

禁止演绎

\n
    \n
  • 分享全部内容(无修改)
    \n您需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接)
  • \n
  • 分享部分截取内容或者衍生创作
    \n目前本站全部原创文章的衍生品禁止公开分享和分发。如有更好的修改建议,可以在对应文章下留言。如有衍生创作需求,可以在评论中联系。
  • \n
\n

什么内容会被版权保护

\n

包括但不限于:

\n
    \n
  • 文章封面图片
  • \n
  • 文章标题和正文
  • \n
  • 站点图片素材(不含主题自带素材)
  • \n
\n

例外情况

\n

本着友好互相进步的原则,被本站友链收录的博客允许博客文章内容的衍生品的分享和分发,但仍需标注出处。

\n

本着互联网开放精神,您可以在博客文章下方留言要求授权博文的衍生品的分享和分发,标注您的网站地址。

\n

作者原创代码及网站源代码协议

\n

网站所有代码采用MIT协议,如有不同,作者会进行标注

\n

随便扒站吧!

\n

网站本身有关

\n

本站已开启存储桶全站加速,接入了灵天盾CDN,请刷流量的耗子尾汁!!!

\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":1010,"excerpt":"","more":"

Copyright© TANKENQI 2023

\n

声明 | 版权协议

\n

为了保持文章质量,并保持互联网的开放共享精神,保持页面流量的稳定,综合考虑下本站的所有原创文章均采用cc协议中比较严格的创作共用-非商业性-禁止演绎 4.0 国际标准。这篇文章主要想能够更加清楚明白的介绍本站的协议标准和要求。方便您合理的使用本站的文章。

\n

本站无广告嵌入和商业行为。违反协议的行为不仅会损害原作者的创作热情,而且会影响整个版权环境。强烈呼吁您能够在转载时遵守协议。遵守协议的行为几乎不会对您的目标产生负面影响,鼓励创作环境是每个创作者的期望。

\n

博客的分类介绍

\n

经验分享包含原创内容,原创内容的非商用转载必须为完整转载且标注出处的带有超链接功能的完整url链接(需能点击)或访问原文之类字样的超链接。

\n

转载内容为转载内容,均标注了出处。建议使用原链接打开,尊重原作者。所有转载内容尽可能为完整转载(如果有部分内容有问题可能会由部分删减和补充)并进行样式调整以适合本博客。如果转载该部分内容需要联系原作者。

\n

你可以做什么?

\n

只要您遵守本页的许可,您可以自由地共享文章的内容 — 在任何媒介以任何形式复制、发行本作品。并且无需通知作者。

\n

你需要遵守什么样的许可?

\n

署名

\n

您必须标注内容的来源,您需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接提升阅读体验)。

\n

禁止商用

\n

本站内容免费向互联网所有用户提供,分享本站文章时禁止商业性使用、禁止在转载页面中插入广告(例如谷歌广告、百度广告)、禁止阅读的拦截行为(例如关注公众号、下载App后观看文章)。

\n

禁止演绎

\n
    \n
  • 分享全部内容(无修改)
    \n您需要在文章开头部分(或者明显位置)标注原文章链接(建议使用超链接)
  • \n
  • 分享部分截取内容或者衍生创作
    \n目前本站全部原创文章的衍生品禁止公开分享和分发。如有更好的修改建议,可以在对应文章下留言。如有衍生创作需求,可以在评论中联系。
  • \n
\n

什么内容会被版权保护

\n

包括但不限于:

\n
    \n
  • 文章封面图片
  • \n
  • 文章标题和正文
  • \n
  • 站点图片素材(不含主题自带素材)
  • \n
\n

例外情况

\n

本着友好互相进步的原则,被本站友链收录的博客允许博客文章内容的衍生品的分享和分发,但仍需标注出处。

\n

本着互联网开放精神,您可以在博客文章下方留言要求授权博文的衍生品的分享和分发,标注您的网站地址。

\n

作者原创代码及网站源代码协议

\n

网站所有代码采用MIT协议,如有不同,作者会进行标注

\n

随便扒站吧!

\n

网站本身有关

\n

本站已开启存储桶全站加速,接入了灵天盾CDN,请刷流量的耗子尾汁!!!

\n"},{"title":"友链","date":"2023-07-03T12:40:57.000Z","type":"links","_content":"
\n
\n

🎣 钓鱼

\n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n{% flink %}\n- class_name:

冰糖红茶

\n class_desc: “冰糖红茶”博客魔改组织的大佬们\n link_list:\n - name: 小冰【冰】\n link: https://zfe.space/\n avatar: /img/20200904222157.png\n theme_color: \"#687584\"\n descr: 做个有梦想的人!\n - name: Akilar【糖】\n link: https://akilar.top/\n avatar: /img/20200924153652.png\n descr: 期待您的光临!\n - name: 张洪Heo【红】\n link: https://blog.zhheo.com/\n avatar: /img/8DSTSS20990281646044689944.PNG\n theme_color: \"#4759e6\"\n descr: 分享设计与科技生活\n - name: 贰猹【茶】\n link: https://noionion.top/\n avatar: /img/72645310.jpg\n descr: 用这生命中的每一秒,给自己一个不后悔的未来\n theme_color: \"#ebd3bb\"\n\n- class_name:

开发基础

\n class_desc: 没有这些框架,哪来这博客呢?\n link_list:\n - name: Hexo\n link: https://hexo.io/zh-cn/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/logo.svg\n theme_color: \"#2c5fb6\"\n descr: 快速、简单且强大的网站框架\n - name: Butterfly\n link: https://butterfly.js.org/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/asdasdasca.png\n theme_color: \"#66afef\"\n descr: 美观、方便的Hexo主题\n\n\n- class_name:

推荐博客

\n class_desc: 一些作者推荐的友链\n link_list:\n - name: 小冰【冰】\n link: https://zfe.space/\n avatar: /img/20200904222157.png\n theme_color: \"#687584\"\n descr: 做个有梦想的人!\n - name: Akilar【糖】\n link: https://akilar.top/\n avatar: /img/20200924153652.png\n descr: 期待您的光临!\n - name: 张洪Heo【红】\n link: https://blog.zhheo.com/\n avatar: /img/8DSTSS20990281646044689944.PNG\n theme_color: \"#4759e6\"\n descr: 分享设计与科技生活\n - name: 贰猹【茶】\n link: https://noionion.top/\n avatar: /img/72645310.jpg\n descr: 用这生命中的每一秒,给自己一个不后悔的未来\n theme_color: \"#ebd3bb\"\n - name: Tianli\n link: https://tianli-blog.club/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/randomAvatar\n descr: 惟其不可能,所以才相信\n theme_color: \"#77717f\"\n - name: 小N同学\n link: https://www.imcharon.com/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/buYgVO22990681624844309044.jpg\n descr: 青石落晚巷 故人未还乡\n theme_color: \"#5497bb\"\n - name: 轻笑Chuckle\n link: https://www.qcqx.cn/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/randomAvatar\n descr: 宁静致远,倾尘轻笑\n theme_color: \"#80a9b7\"\n - name: Leonus\n link: https://blog.leonus.cn/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/g\n descr: 进一寸有进一寸的欢喜\n theme_color: \"#949f98\"\n\n\n- class_name:

朋友

\n class_desc: 那些人,那些事\n link_list:\n - name: forDece\n link: https://www.fordece.cn/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg\n theme_color: \"#e2f0fe\"\n descr: 一枚优秀的学弟\n - name: Zly\n link: http://www.zly7.top/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png\n theme_color: \"#80a9b7\"\n descr: 记录,让你的人生不后悔\n\n\n{% endflink %}\n\n\n{% folding cyan open, 我的信息 %}\n\n{% tabs %}\n\n```yaml\n- name: Tankenqiの小窝\n link: https://www.tankenqi.cn\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp\n descr: 人有悲欢离合 月有阴晴圆缺\n siteshot: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/blog.png\n```\n\n\n\n```yaml\n- {\n title: 'Tankenqiの小窝',\n intro: '人有悲欢离合 月有阴晴圆缺',\n link: 'https://www.tankenqi.cn',\n image: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp'\n}\n```\n\n\n\n```yaml\n- title: Tankenqiの小窝\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp\n url: https://www.tankenqi.cn\n screenshot: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/blog.png\n keywords: 个人博客\n description: 人有悲欢离合 月有阴晴圆缺\n```\n\n\n\n```html\n\"avatar\"Tankenqiの小窝\n```\n\n\n{% endtabs %}\n\n{% endfolding %}\n\n{% folding cyan open, 推荐标签衡量标准 %}\n\n1.网站没有不良内容\n\n2.文章质量较高\n\n3.文章较多/或者质量过硬\n\n{% endfolding %}\n\n

如何申请友链?

\n\n点下面的按钮!\n\n\n\n快速添加友链\n","source":"links/index.md","raw":"---\ntitle: 友链\ndate: 2023-07-03 20:40:57\ntype: \"links\"\n---\n
\n
\n

🎣 钓鱼

\n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n{% flink %}\n- class_name:

冰糖红茶

\n class_desc: “冰糖红茶”博客魔改组织的大佬们\n link_list:\n - name: 小冰【冰】\n link: https://zfe.space/\n avatar: /img/20200904222157.png\n theme_color: \"#687584\"\n descr: 做个有梦想的人!\n - name: Akilar【糖】\n link: https://akilar.top/\n avatar: /img/20200924153652.png\n descr: 期待您的光临!\n - name: 张洪Heo【红】\n link: https://blog.zhheo.com/\n avatar: /img/8DSTSS20990281646044689944.PNG\n theme_color: \"#4759e6\"\n descr: 分享设计与科技生活\n - name: 贰猹【茶】\n link: https://noionion.top/\n avatar: /img/72645310.jpg\n descr: 用这生命中的每一秒,给自己一个不后悔的未来\n theme_color: \"#ebd3bb\"\n\n- class_name:

开发基础

\n class_desc: 没有这些框架,哪来这博客呢?\n link_list:\n - name: Hexo\n link: https://hexo.io/zh-cn/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/logo.svg\n theme_color: \"#2c5fb6\"\n descr: 快速、简单且强大的网站框架\n - name: Butterfly\n link: https://butterfly.js.org/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/asdasdasca.png\n theme_color: \"#66afef\"\n descr: 美观、方便的Hexo主题\n\n\n- class_name:

推荐博客

\n class_desc: 一些作者推荐的友链\n link_list:\n - name: 小冰【冰】\n link: https://zfe.space/\n avatar: /img/20200904222157.png\n theme_color: \"#687584\"\n descr: 做个有梦想的人!\n - name: Akilar【糖】\n link: https://akilar.top/\n avatar: /img/20200924153652.png\n descr: 期待您的光临!\n - name: 张洪Heo【红】\n link: https://blog.zhheo.com/\n avatar: /img/8DSTSS20990281646044689944.PNG\n theme_color: \"#4759e6\"\n descr: 分享设计与科技生活\n - name: 贰猹【茶】\n link: https://noionion.top/\n avatar: /img/72645310.jpg\n descr: 用这生命中的每一秒,给自己一个不后悔的未来\n theme_color: \"#ebd3bb\"\n - name: Tianli\n link: https://tianli-blog.club/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/randomAvatar\n descr: 惟其不可能,所以才相信\n theme_color: \"#77717f\"\n - name: 小N同学\n link: https://www.imcharon.com/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/buYgVO22990681624844309044.jpg\n descr: 青石落晚巷 故人未还乡\n theme_color: \"#5497bb\"\n - name: 轻笑Chuckle\n link: https://www.qcqx.cn/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/randomAvatar\n descr: 宁静致远,倾尘轻笑\n theme_color: \"#80a9b7\"\n - name: Leonus\n link: https://blog.leonus.cn/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/g\n descr: 进一寸有进一寸的欢喜\n theme_color: \"#949f98\"\n\n\n- class_name:

朋友

\n class_desc: 那些人,那些事\n link_list:\n - name: forDece\n link: https://www.fordece.cn/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg\n theme_color: \"#e2f0fe\"\n descr: 一枚优秀的学弟\n - name: Zly\n link: http://www.zly7.top/\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png\n theme_color: \"#80a9b7\"\n descr: 记录,让你的人生不后悔\n\n\n{% endflink %}\n\n\n{% folding cyan open, 我的信息 %}\n\n{% tabs %}\n\n```yaml\n- name: Tankenqiの小窝\n link: https://www.tankenqi.cn\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp\n descr: 人有悲欢离合 月有阴晴圆缺\n siteshot: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/blog.png\n```\n\n\n\n```yaml\n- {\n title: 'Tankenqiの小窝',\n intro: '人有悲欢离合 月有阴晴圆缺',\n link: 'https://www.tankenqi.cn',\n image: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp'\n}\n```\n\n\n\n```yaml\n- title: Tankenqiの小窝\n avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp\n url: https://www.tankenqi.cn\n screenshot: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/blog.png\n keywords: 个人博客\n description: 人有悲欢离合 月有阴晴圆缺\n```\n\n\n\n```html\n\"avatar\"Tankenqiの小窝\n```\n\n\n{% endtabs %}\n\n{% endfolding %}\n\n{% folding cyan open, 推荐标签衡量标准 %}\n\n1.网站没有不良内容\n\n2.文章质量较高\n\n3.文章较多/或者质量过硬\n\n{% endfolding %}\n\n

如何申请友链?

\n\n点下面的按钮!\n\n\n\n快速添加友链\n","updated":"2023-10-24T13:47:18.528Z","path":"links/index.html","comments":1,"layout":"page","_id":"clo5vyrtw00162j3u2xvr1m1t","content":"
\n
\n

🎣 钓鱼

\n
\n
\n
\n\n\n\n\n
我的信息 \n
\n
1
2
3
4
5
- name: Tankenqiの小窝
link: https://www.tankenqi.cn
avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp
descr: 人有悲欢离合 月有阴晴圆缺
siteshot: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/blog.png
1
2
3
4
5
6
- {
title: 'Tankenqiの小窝',
intro: '人有悲欢离合 月有阴晴圆缺',
link: 'https://www.tankenqi.cn',
image: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp'
}
1
2
3
4
5
6
- title: Tankenqiの小窝
avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp
url: https://www.tankenqi.cn
screenshot: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/blog.png
keywords: 个人博客
description: 人有悲欢离合 月有阴晴圆缺
1
<a href="https://www.tankenqi.cn"><img src="https://bu.dusays.com/2022/12/15/639a9ebbbc1ad.jpg" alt="avatar">Tankenqiの小窝</a>
\n
\n
\n
推荐标签衡量标准 \n
\n

1.网站没有不良内容

2.文章质量较高

3.文章较多/或者质量过硬

\n
\n
\n

如何申请友链?

\n

点下面的按钮!

\n\n\n

快速添加友链

\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":1263,"excerpt":"","more":"
\n
\n

🎣 钓鱼

\n
\n
\n
\n\n\n\n\n
我的信息 \n
\n
1
2
3
4
5
- name: Tankenqiの小窝
link: https://www.tankenqi.cn
avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp
descr: 人有悲欢离合 月有阴晴圆缺
siteshot: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/blog.png
1
2
3
4
5
6
- {
title: 'Tankenqiの小窝',
intro: '人有悲欢离合 月有阴晴圆缺',
link: 'https://www.tankenqi.cn',
image: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp'
}
1
2
3
4
5
6
- title: Tankenqiの小窝
avatar: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/639a9ebbbc1ad.webp
url: https://www.tankenqi.cn
screenshot: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/blog.png
keywords: 个人博客
description: 人有悲欢离合 月有阴晴圆缺
1
<a href="https://www.tankenqi.cn"><img src="https://bu.dusays.com/2022/12/15/639a9ebbbc1ad.jpg" alt="avatar">Tankenqiの小窝</a>
\n
\n
\n
推荐标签衡量标准 \n
\n

1.网站没有不良内容

2.文章质量较高

3.文章较多/或者质量过硬

\n
\n
\n

如何申请友链?

\n

点下面的按钮!

\n\n\n

快速添加友链

\n"},{"_content":"说说你的建议吧...\n
你也可以私发我的邮件2390726421@qq.com寻求帮助或者提供建议。\n隐藏/显示弹幕(缓解卡顿)\n\n\n\n\n
\n\t
\n
\n\n\n\n\n","source":"messageboard/index.html","raw":"说说你的建议吧...\n
你也可以私发我的邮件2390726421@qq.com寻求帮助或者提供建议。\n隐藏/显示弹幕(缓解卡顿)\n\n\n\n\n
\n\t
\n
\n\n\n\n\n","date":"2023-10-22T06:16:08.629Z","updated":"2023-10-22T06:16:08.629Z","path":"messageboard/index.html","title":"","comments":1,"layout":"page","_id":"clo5vyrtx001a2j3uf9u10yeq","content":"说说你的建议吧...\n
你也可以私发我的邮件2390726421@qq.com寻求帮助或者提供建议。\n隐藏/显示弹幕(缓解卡顿)\n\n\n\n\n
\n\t
\n
\n\n\n\n\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":94,"excerpt":"","more":"说说你的建议吧...\n
你也可以私发我的邮件2390726421@qq.com寻求帮助或者提供建议。\n隐藏/显示弹幕(缓解卡顿)\n\n\n\n\n
\n\t
\n
\n\n\n\n\n"},{"title":"敲木鱼","date":"2022-11-25T00:16:09.000Z","_content":"{% raw %}\n
\n
\n

功德:0

\n
\n
\n

功德+100

\n \n
\n
\n\n \n\n{% endraw %}\n\n","source":"muyu/index.md","raw":"---\ntitle: 敲木鱼\ndate: 2022-11-25 08:16:09\n---\n{% raw %}\n
\n
\n

功德:0

\n
\n
\n

功德+100

\n \n
\n
\n\n \n\n{% endraw %}\n\n","updated":"2023-10-21T01:08:55.967Z","path":"muyu/index.html","comments":1,"layout":"page","_id":"clo5vyrty001d2j3uefd1ct2w","content":"\n
\n
\n

功德:0

\n
\n
\n

功德+100

\n \n
\n
\n\n \n\n\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":985,"excerpt":"","more":"\n
\n
\n

功德:0

\n
\n
\n

功德+100

\n \n
\n
\n\n \n\n\n"},{"title":"音乐","comments":0,"aside":false,"_content":"\n\n\n\n\n","source":"music/index.md","raw":"---\ntitle: 音乐\ncomments: false\naside: false\n---\n\n\n\n\n\n","date":"2023-10-25T01:12:21.674Z","updated":"2023-10-25T01:12:21.674Z","path":"music/index.html","layout":"page","_id":"clo5vyrtz001h2j3ubeiz9xsg","content":"\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":0,"excerpt":"","more":"\n"},{"title":"分站","date":"2023-08-04T03:38:05.000Z","_content":"## 一些博主搭建的其它的站点(其实还没怎么开始搭):\n\n*PS:划掉的表示已挂*\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
域名用处搭建原因
tankenqi.cn博客,也是主站分享一些东西
\n\n## 博主的一些域名\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
域名用处
tankenqi.cn主要使用的域名
\n\n注意:本博客强制HTTPS,旧电脑可能会出现问题。\n\n\n","source":"othersite/index.md","raw":"---\ntitle: 分站\ndate: 2023-08-04 11:38:05\n---\n## 一些博主搭建的其它的站点(其实还没怎么开始搭):\n\n*PS:划掉的表示已挂*\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
域名用处搭建原因
tankenqi.cn博客,也是主站分享一些东西
\n\n## 博主的一些域名\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
域名用处
tankenqi.cn主要使用的域名
\n\n注意:本博客强制HTTPS,旧电脑可能会出现问题。\n\n\n","updated":"2023-10-21T15:01:19.754Z","path":"othersite/index.html","comments":1,"layout":"page","_id":"clo5vyrtz001k2j3uc47sfpi5","content":"

一些博主搭建的其它的站点(其实还没怎么开始搭):

\n

PS:划掉的表示已挂

\n\n\n\n\n\n\n\n\n\n\n\n\n
域名用处搭建原因
tankenqi.cn博客,也是主站分享一些东西
\n

博主的一些域名

\n\n\n\n\n\n\n\n\n\n\n
域名用处
tankenqi.cn主要使用的域名
\n

注意:本博客强制HTTPS,旧电脑可能会出现问题。

\n\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":564,"excerpt":"","more":"

一些博主搭建的其它的站点(其实还没怎么开始搭):

\n

PS:划掉的表示已挂

\n\n\n\n\n\n\n\n\n\n\n\n\n
域名用处搭建原因
tankenqi.cn博客,也是主站分享一些东西
\n

博主的一些域名

\n\n\n\n\n\n\n\n\n\n\n
域名用处
tankenqi.cn主要使用的域名
\n

注意:本博客强制HTTPS,旧电脑可能会出现问题。

\n\n"},{"title":"说说","_content":"\n\n\n\n
\n\n\n","source":"speaks/index.md","raw":"---\ntitle: 说说\n---\n\n\n\n\n
\n\n\n","date":"2023-10-23T01:30:39.447Z","updated":"2023-10-23T01:30:39.447Z","path":"speaks/index.html","comments":1,"layout":"page","_id":"clo5vyrtz001o2j3u5jpa0eo8","content":"\n\n
\n\n\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":333,"excerpt":"","more":"\n\n
\n\n\n"},{"_content":"{\n \".mine\":[\n {\n \"nickname\": \"又拍云控制台\",\n \"site\": \"https://console.upyun.com/dashboard/\",\n \"content\": \"CDN管理,刷新CDN缓存\"\n },\n {\n \"nickname\": \"LeanCloud控制台\",\n \"site\": \"https://leancloud.cn/dashboard/applist.html#/apps\",\n \"content\": \"应用管理,数据控制\"\n },\n {\n \"nickname\": \"开课吧\",\n \"site\": \"https://appaadih2af2521.pc.xiaoe-tech.com/bought\",\n \"content\": \"学习网站\"\n },\n {\n \"nickname\": \"网易云课堂\",\n \"site\": \"https://study.163.com/my\",\n \"content\": \"学习网站\"\n },\n {\n \"nickname\": \"NexT\",\n \"site\": \"https://theme-next.org/docs/\",\n \"content\": \"NexT主题官方文档\"\n }\n ],\n \".docs\":[\n {\n \"nickname\": \"JavaScript\",\n \"site\": \"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference\",\n \"content\": \"JavaScript API 文档\"\n },\n {\n \"nickname\": \"HTML\",\n \"site\": \"https://developer.mozilla.org/en-US/docs/Web/HTML/Element\",\n \"content\": \"HTML API 文档\"\n },\n {\n \"nickname\": \"CSS\",\n \"site\": \"https://developer.mozilla.org/en-US/docs/Web/CSS/Reference\",\n \"content\": \"CSS API 文档\"\n },\n {\n \"nickname\": \"Python\",\n \"site\": \"https://docs.python.org/\",\n \"content\": \"Python API 文档\"\n },\n {\n \"nickname\": \"PHP\",\n \"site\": \"https://www.php.net/manual/zh/index.php\",\n \"content\": \"PHP API 文档\"\n },\n {\n \"nickname\": \"SQL\",\n \"site\": \"https://docs.microsoft.com/zh-cn/sql/\",\n \"content\": \"SQL API 文档\"\n },\n {\n \"nickname\": \"Node.js\",\n \"site\": \"http://nodejs.cn/\",\n \"content\": \"Node.js API 文档\"\n },\n {\n \"nickname\": \"MongoDB\",\n \"site\": \"https://docs.mongodb.com/manual/\",\n \"content\": \"MongoDB API 文档\"\n },\n {\n \"nickname\": \"Vue.js\",\n \"site\": \"https://cn.vuejs.org/v2/guide/\",\n \"content\": \"一套用于构建用户界面的渐进式框架。\"\n },\n {\n \"nickname\": \"Vuex\",\n \"site\": \"https://vuex.vuejs.org/zh/\",\n \"content\": \"一个专为Vue.js应用程序开发的状态管理模式\"\n },\n {\n \"nickname\": \"Vue Router\",\n \"site\": \"https://router.vuejs.org/zh/\",\n \"content\": \"Vue.js官方路由管理器\"\n },\n {\n \"nickname\": \"Puppeteer中文文档\",\n \"site\": \"https://zhaoqize.github.io/puppeteer-api-zh_CN/\",\n \"content\": \"一个Node库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行,但是可以通过修改配置文件运行“有头”模式。\"\n },\n {\n \"nickname\": \"axios中文文档\",\n \"site\": \"http://www.axios-js.com/\",\n \"content\": \"易用、简洁且高效的http库\"\n },\n {\n \"nickname\": \"Express中文文档\",\n \"site\": \"https://www.expressjs.com.cn/\",\n \"content\": \"基于Node.js平台,快速、开放、极简的Web开发框架\"\n },\n {\n \"nickname\": \"Layui\",\n \"site\": \"https://www.layui.com/\",\n \"content\": \"经典模块化前端UI框架\"\n }\n ],\n \".code\":[\n {\n \"nickname\": \"Github\",\n \"site\": \"https://github.com/\",\n \"content\": \"全球最大的面向开源及私有软件项目的托管平台\"\n },\n {\n \"nickname\": \"Gitlab\",\n \"site\": \"https://gitlab.com/\",\n \"content\": \"支持无限的公有项目和私有项目的代码托管平台\"\n },\n {\n \"nickname\": \"Coding\",\n \"site\": \"https://coding.net/\",\n \"content\": \"国内首个一站式云端软件服务平台\"\n },\n {\n \"nickname\": \"Gitee\",\n \"site\": \"https://gitee.com/\",\n \"content\": \"国内最大的开源社区 OSChina 的代码托管平台\"\n },\n {\n \"nickname\": \"阿里云代码托管\",\n \"site\": \"https://code.aliyun.com/\",\n \"content\": \"阿里云旗下代码托管平台\"\n },\n {\n \"nickname\": \"百度效率云\",\n \"site\": \"http://xiaolvyun.baidu.com/\",\n \"content\": \"百度云旗下的 Git 代码托管平台\"\n },\n {\n \"nickname\": \"SourceForge\",\n \"site\": \"https://sourceforge.net/\",\n \"content\": \"又称 SF.net,是开源软件开发者进行开发管理的集中式场所\"\n },\n {\n \"nickname\": \"Bitbucket\",\n \"site\": \"https://bitbucket.org/\",\n \"content\": \"同时支持 Git 和 Mercurial 这两个版本控制软件,免费的私有仓库,支持5人以内的合作开发\"\n },\n {\n \"nickname\": \"npm\",\n \"site\": \"https://www.npmjs.com/\",\n \"content\": \"JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具。通过 npm 可以安装、共享、分发代码,管理项目依赖关系\"\n }\n ],\n \".skill\":[\n {\n \"nickname\": \"LeetCode\",\n \"site\": \"https://leetcode-cn.com/\",\n \"content\": \"全球极客挚爱的技术成长平台\"\n },\n {\n \"nickname\": \"Topcoder\",\n \"site\": \"https://www.topcoder.com/\",\n \"content\": \"全世界规模最大的程序竞赛网站,也会有一些算法竞赛,适合一些高端的或者搞ACM的,也会举办一些比赛\"\n },\n {\n \"nickname\": \"Codeforces\",\n \"site\": \"http://codeforces.com/\",\n \"content\": \"罗斯最大的算法比赛网站\"\n },\n {\n \"nickname\": \"Hihocoder\",\n \"site\": \"http://www.hihocoder.com/\",\n \"content\": \"技术团队来自原北京大学POJ (PKU Online Judge)开发团队,收集了全球范围内很多地区、高校举办的比赛试题, 提供365天*24小时的在线提交、评判程序的服务\"\n },\n {\n \"nickname\": \"LintCode\",\n \"site\": \"https://www.lintcode.com/\",\n \"content\": \"被称作中文版的leetcode,也是可以做为编程能力提升的一个中转站\"\n },\n {\n \"nickname\": \"SPOJ\",\n \"site\": \"https://www.spoj.com/\",\n \"content\": \"波兰的算法刷题网站\"\n },\n {\n \"nickname\": \"NEUQ OJ\",\n \"site\": \"http://acmclub.cn/\",\n \"content\": \"一个在线的判题平台\"\n },\n {\n \"nickname\": \"洛谷\",\n \"site\": \"https://www.luogu.com.cn/\",\n \"content\": \"创办于2013年,致力于为参加noip、noi、acm的选手提供清爽、快捷的编程体验\"\n },\n {\n \"nickname\": \"牛客网\",\n \"site\": \"https://www.nowcoder.com/contestRoom\",\n \"content\": \"中国最大的IT题库\"\n },\n {\n \"nickname\": \"计蒜客\",\n \"site\": \"https://nanti.jisuanke.com/oi\",\n \"content\": \"计蒜客OI题库致力于为参加noi、noip、信息学竞赛的选手提供优秀的Online Judge系统\"\n },\n {\n \"nickname\": \"C语言网\",\n \"site\": \"https://www.dotcpp.com/oj/contest.html\",\n \"content\": \"在这里可以参加包括ACM、NOI在内的各种C/C++/java程序比赛,也可以DIY举办各类程序比赛活动!\"\n }\n ],\n \".school\":[\n {\n \"nickname\": \"菜鸟教程\",\n \"site\": \"https://www.runoob.com/\",\n \"content\": \"提供了编程的基础技术教程, 介绍了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP , MySQL等各种编程语言的基础知识\"\n },\n {\n \"nickname\": \"W3school\",\n \"site\": \"https://www.w3school.com.cn/\",\n \"content\": \"领先的 Web 技术教程\"\n },\n {\n \"nickname\": \"前端网\",\n \"site\": \"http://www.qianduandaxue.com/\",\n \"content\": \"最好的自学web前端网站\"\n }\n ],\n \".community\":[\n {\n \"nickname\": \"Stack Overflow\",\n \"site\": \"https://stackoverflow.com/\",\n \"content\": \"全球最受程序员欢迎的开发社区\"\n },\n {\n \"nickname\": \"CSDN\",\n \"site\": \"https://www.csdn.net/\",\n \"content\": \"全球最大中文IT社区,为IT专业技术人员提供最全面的信息传播和服务平台\"\n },\n {\n \"nickname\": \"博客园\",\n \"site\": \"https://www.cnblogs.com\",\n \"content\": \"代码改变世界\"\n },\n {\n \"nickname\": \"V2EX\",\n \"site\": \"https://www.v2ex.com/\",\n \"content\": \"V2EX = way to explore\"\n },\n {\n \"nickname\": \"掘金\",\n \"site\": \"https://juejin.im/\",\n \"content\": \"一个帮助开发者成长的社区\"\n },\n {\n \"nickname\": \"SegmentFault\",\n \"site\": \"https://segmentfault.com/\",\n \"content\": \"改变并提升人们获取知识的方式和效率,帮助更多的开发者获得成长与成功\"\n },\n {\n \"nickname\": \"开源中国\",\n \"site\": \"https://www.oschina.net/\",\n \"content\": \"国内最大的开源技术社区\"\n },\n {\n \"nickname\": \"ITeye\",\n \"site\": \"https://www.iteye.com/\",\n \"content\": \"ITeye软件开发交流社区 - Java编程 Spring框架 Ajax技术 agile敏捷软件开发 ruby on rails实践\"\n },\n {\n \"nickname\": \"51CTO\",\n \"site\": \"https://www.51cto.com/\",\n \"content\": \"技术成就梦想\"\n },\n {\n \"nickname\": \"ITPUB\",\n \"site\": \"http://www.itpub.net/\",\n \"content\": \"全球最大的学习分享平台\"\n },\n {\n \"nickname\": \"知乎\",\n \"site\": \"https://www.zhihu.com/\",\n \"content\": \"国内最受欢迎的知识性问答社区\"\n },\n {\n \"nickname\": \"简书\",\n \"site\": \"https://www.jianshu.com/\",\n \"content\": \"创作你的创作\"\n },\n {\n \"nickname\": \"云+社区\",\n \"site\": \"https://cloud.tencent.com/developer\",\n \"content\": \"来自腾讯的开发者技术分享社区\"\n },\n {\n \"nickname\": \"云栖社区\",\n \"site\": \"https://yq.aliyun.com/\",\n \"content\": \"阿里云面向开发者的开放型技术平台\"\n },\n {\n \"nickname\": \"极术社区\",\n \"site\": \"https://aijishu.com/\",\n \"content\": \"全球软硬件资源信息,只要你有问题,我们就能解答。\"\n }\n ],\n \".serve\":[\n {\n \"nickname\": \"阿里云\",\n \"site\": \"https://www.aliyun.com/\",\n \"content\": \"为了无法计算的价值\"\n },\n {\n \"nickname\": \"腾讯云\",\n \"site\": \"https://cloud.tencent.com/\",\n \"content\": \"产业智变 云启未来\"\n },\n {\n \"nickname\": \"百度云\",\n \"site\": \"https://cloud.baidu.com/\",\n \"content\": \"计算无限可能\"\n },\n {\n \"nickname\": \"七牛云\",\n \"site\": \"https://www.qiniu.com/\",\n \"content\": \"国内领先的企业级云服务商\"\n }, \n {\n \"nickname\": \"又拍云\",\n \"site\": \"https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral\",\n \"content\": \"专注 CDN、云存储、小程序开发方案、 短视频开发方案、DDoS高防等产品的国内知名企业级云服务商\"\n },\n {\n \"nickname\": \"Cloudflare\",\n \"site\": \"https://www.cloudflare.com/\",\n \"content\": \"网络性能和安全公司\"\n },\n {\n \"nickname\": \"jsDelivr\",\n \"site\": \"https://www.jsdelivr.com/\",\n \"content\": \"A free, fast, and reliable Open Source CDN for npm and GitHub\"\n }\n ],\n \".sitetool\":[\n {\n \"nickname\": \"百度站长平台\",\n \"site\": \"https://ziyuan.baidu.com/\",\n \"content\": \"百度搜索资源平台 - 让网站更具价值\"\n },\n {\n \"nickname\": \"Google 站长平台\",\n \"site\": \"http://www.google.cn/webmasters/\",\n \"content\": \"支持、学习、互动交流和 Search Console – Google\"\n },\n {\n \"nickname\": \"Bing 网站管理员工具\",\n \"site\": \"https://www.bing.com/toolbox/webmaster/\",\n \"content\": \"Bing 网站管理员工具\"\n },\n {\n \"nickname\": \"站长工具 - 站长之家\",\n \"site\": \"http://tool.chinaz.com/\",\n \"content\": \"SEO工具,权重查询,收录查询,PR查询,ICP备案查询,whois查询,友情链接查询,反向链接查询,网站测试,IP查询,Alexa查询\"\n },\n {\n \"nickname\": \"搜狗站长平台\",\n \"site\": \"http://zhanzhang.sogou.com/\",\n \"content\": \"全面掌握在搜狗搜索中的数据表现\"\n },\n {\n \"nickname\": \"360 站长平台\",\n \"site\": \"http://zhanzhang.so.com/\",\n \"content\": \"给网站带来更多流量和展现\"\n },\n {\n \"nickname\": \"超级 SEO 外链工具\",\n \"site\": \"https://tool.lusongsong.com/seo/\",\n \"content\": \"网站自动化宣传机器/免费的超级外链工具可批量增加外链\"\n },\n {\n \"nickname\": \"域名备案管理系统\",\n \"site\": \"http://www.beian.miit.gov.cn/\",\n \"content\": \"工业和信息化部ICP/IP地址/域名信息备案管理系统\"\n },\n {\n \"nickname\": \"公安备案网\",\n \"site\": \"http://beian.gov.cn/\",\n \"content\": \"全国互联网安全管理服务平台\"\n }\n ],\n \".design\":[\n {\n \"nickname\": \"Iconfont\",\n \"site\": \"https://www.iconfont.cn/\",\n \"content\": \"阿里巴巴矢量图标库,提供矢量图标下载、在线存储、格式转换等功能\"\n },\n {\n \"nickname\": \"Font Awesome\",\n \"site\": \"https://fa5.dashgame.com/#/%E5%9B%BE%E6%A0%87\",\n \"content\": \"一个基于CSS 和 LESS 的字体和图标工具包\"\n },\n {\n \"nickname\": \"Flaticon\",\n \"site\": \"https://www.flaticon.com/\",\n \"content\": \"海量扁平化免费的图标库\"\n },\n {\n \"nickname\": \"icons8\",\n \"site\": \"https://icons8.com/\",\n \"content\": \"独特系统平台风格和web图标库,下载免费图标,音乐\"\n },\n {\n \"nickname\": \"Unsplash\",\n \"site\": \"https://unsplash.com/\",\n \"content\": \"质量超高的免费图片素材库,无需注册,直接下载\"\n },\n {\n \"nickname\": \"Mixkit\",\n \"site\": \"https://mixkit.co/\",\n \"content\": \"免费、高质量、可商用的视频素材分享网站\"\n },\n {\n \"nickname\": \"WebGradients\",\n \"site\": \"https://webgradients.com/\",\n \"content\": \"渐变色搭配方案\"\n },\n {\n \"nickname\": \"CoolHue2.0\",\n \"site\": \"https://webkul.github.io/coolhue/\",\n \"content\": \"渐变色搭配方案\"\n },\n {\n \"nickname\": \"Gradient\",\n \"site\": \"https://gradient.shapefactory.co/?a=540A43&b=629EA1&d=25\",\n \"content\": \"渐变色搭配方案\"\n },\n {\n \"nickname\": \"UiGradients\",\n \"site\": \"https://uigradients.com/#JShine\",\n \"content\": \"渐变色搭配方案\"\n }\n ],\n \".tools\":[\n {\n \"nickname\": \"智图\",\n \"site\": \"https://zhitu.isux.us/\",\n \"content\": \"腾讯ISUX前端团队开发的一个专门用于图片压缩和图片格式转换的平台\"\n },\n {\n \"nickname\": \"程序员的工具箱\",\n \"site\": \"https://tool.lu/\",\n \"content\": \"站长工具、代码格式化、压缩、加密、解密、下载链接转换等\"\n },\n {\n \"nickname\": \"OSCHINA.NET社区\",\n \"site\": \"https://tool.oschina.net/\",\n \"content\": \"常用文档、常用对照表、代码处理、Html/Js/Css工具、加密/转码工具等\"\n },\n {\n \"nickname\": \"记磊工具箱\",\n \"site\": \"https://tools.ly522.com/\",\n \"content\": \"Dns检测、CSS格式化、超级Ping、端口扫描等\"\n },\n {\n \"nickname\": \"孟坤工具箱\",\n \"site\": \"http://tool.mkblog.cn/\",\n \"content\": \"css一键美化、文本差异比较、代码高亮等\"\n },\n {\n \"nickname\": \"Text to ASCII\",\n \"site\": \"http://patorjk.com/software/taag/\",\n \"content\": \"Text to ASCII Art Generator,字符串转成 ASCII 码图案\"\n },\n {\n \"nickname\": \"临时邮箱\",\n \"site\": \"https://linshiyouxiang.net/\",\n \"content\": \"匿名注册不常用的网站/论坛,保护隐私免骚扰\"\n },\n {\n \"nickname\": \"TinyPNG\",\n \"site\": \"https://tinypng.com/\",\n \"content\": \"PNG/JPG图片在线压缩利器\"\n },\n {\n \"nickname\": \"图片格式在线转换\",\n \"site\": \"https://ezgif.com/png-to-webp\",\n \"content\": \"webp图片格式在线转换\"\n },\n {\n \"nickname\": \"SVGOMG\",\n \"site\": \"https://jakearchibald.github.io/svgomg/\",\n \"content\": \"SVG在线压缩平台\"\n },\n {\n \"nickname\": \"Loading\",\n \"site\": \"https://loading.io/\",\n \"content\": \"制作GIF、SVG、CSS加载动画图标\"\n },\n {\n \"nickname\": \"Preloaders\",\n \"site\": \"https://www.logaster.cn/\",\n \"content\": \"Loading 懒加载动画在线制作\"\n },\n {\n \"nickname\": \"移除图片背景\",\n \"site\": \"https://www.remove.bg/\",\n \"content\": \"一键智能抠图\"\n },\n {\n \"nickname\": \"KMS服务\",\n \"site\": \"https://kms.avg.cx/\",\n \"content\": \"KMS激活Windows一键脚本\"\n }\n ]\n}\n","source":"stars/allStars.json","raw":"{\n \".mine\":[\n {\n \"nickname\": \"又拍云控制台\",\n \"site\": \"https://console.upyun.com/dashboard/\",\n \"content\": \"CDN管理,刷新CDN缓存\"\n },\n {\n \"nickname\": \"LeanCloud控制台\",\n \"site\": \"https://leancloud.cn/dashboard/applist.html#/apps\",\n \"content\": \"应用管理,数据控制\"\n },\n {\n \"nickname\": \"开课吧\",\n \"site\": \"https://appaadih2af2521.pc.xiaoe-tech.com/bought\",\n \"content\": \"学习网站\"\n },\n {\n \"nickname\": \"网易云课堂\",\n \"site\": \"https://study.163.com/my\",\n \"content\": \"学习网站\"\n },\n {\n \"nickname\": \"NexT\",\n \"site\": \"https://theme-next.org/docs/\",\n \"content\": \"NexT主题官方文档\"\n }\n ],\n \".docs\":[\n {\n \"nickname\": \"JavaScript\",\n \"site\": \"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference\",\n \"content\": \"JavaScript API 文档\"\n },\n {\n \"nickname\": \"HTML\",\n \"site\": \"https://developer.mozilla.org/en-US/docs/Web/HTML/Element\",\n \"content\": \"HTML API 文档\"\n },\n {\n \"nickname\": \"CSS\",\n \"site\": \"https://developer.mozilla.org/en-US/docs/Web/CSS/Reference\",\n \"content\": \"CSS API 文档\"\n },\n {\n \"nickname\": \"Python\",\n \"site\": \"https://docs.python.org/\",\n \"content\": \"Python API 文档\"\n },\n {\n \"nickname\": \"PHP\",\n \"site\": \"https://www.php.net/manual/zh/index.php\",\n \"content\": \"PHP API 文档\"\n },\n {\n \"nickname\": \"SQL\",\n \"site\": \"https://docs.microsoft.com/zh-cn/sql/\",\n \"content\": \"SQL API 文档\"\n },\n {\n \"nickname\": \"Node.js\",\n \"site\": \"http://nodejs.cn/\",\n \"content\": \"Node.js API 文档\"\n },\n {\n \"nickname\": \"MongoDB\",\n \"site\": \"https://docs.mongodb.com/manual/\",\n \"content\": \"MongoDB API 文档\"\n },\n {\n \"nickname\": \"Vue.js\",\n \"site\": \"https://cn.vuejs.org/v2/guide/\",\n \"content\": \"一套用于构建用户界面的渐进式框架。\"\n },\n {\n \"nickname\": \"Vuex\",\n \"site\": \"https://vuex.vuejs.org/zh/\",\n \"content\": \"一个专为Vue.js应用程序开发的状态管理模式\"\n },\n {\n \"nickname\": \"Vue Router\",\n \"site\": \"https://router.vuejs.org/zh/\",\n \"content\": \"Vue.js官方路由管理器\"\n },\n {\n \"nickname\": \"Puppeteer中文文档\",\n \"site\": \"https://zhaoqize.github.io/puppeteer-api-zh_CN/\",\n \"content\": \"一个Node库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行,但是可以通过修改配置文件运行“有头”模式。\"\n },\n {\n \"nickname\": \"axios中文文档\",\n \"site\": \"http://www.axios-js.com/\",\n \"content\": \"易用、简洁且高效的http库\"\n },\n {\n \"nickname\": \"Express中文文档\",\n \"site\": \"https://www.expressjs.com.cn/\",\n \"content\": \"基于Node.js平台,快速、开放、极简的Web开发框架\"\n },\n {\n \"nickname\": \"Layui\",\n \"site\": \"https://www.layui.com/\",\n \"content\": \"经典模块化前端UI框架\"\n }\n ],\n \".code\":[\n {\n \"nickname\": \"Github\",\n \"site\": \"https://github.com/\",\n \"content\": \"全球最大的面向开源及私有软件项目的托管平台\"\n },\n {\n \"nickname\": \"Gitlab\",\n \"site\": \"https://gitlab.com/\",\n \"content\": \"支持无限的公有项目和私有项目的代码托管平台\"\n },\n {\n \"nickname\": \"Coding\",\n \"site\": \"https://coding.net/\",\n \"content\": \"国内首个一站式云端软件服务平台\"\n },\n {\n \"nickname\": \"Gitee\",\n \"site\": \"https://gitee.com/\",\n \"content\": \"国内最大的开源社区 OSChina 的代码托管平台\"\n },\n {\n \"nickname\": \"阿里云代码托管\",\n \"site\": \"https://code.aliyun.com/\",\n \"content\": \"阿里云旗下代码托管平台\"\n },\n {\n \"nickname\": \"百度效率云\",\n \"site\": \"http://xiaolvyun.baidu.com/\",\n \"content\": \"百度云旗下的 Git 代码托管平台\"\n },\n {\n \"nickname\": \"SourceForge\",\n \"site\": \"https://sourceforge.net/\",\n \"content\": \"又称 SF.net,是开源软件开发者进行开发管理的集中式场所\"\n },\n {\n \"nickname\": \"Bitbucket\",\n \"site\": \"https://bitbucket.org/\",\n \"content\": \"同时支持 Git 和 Mercurial 这两个版本控制软件,免费的私有仓库,支持5人以内的合作开发\"\n },\n {\n \"nickname\": \"npm\",\n \"site\": \"https://www.npmjs.com/\",\n \"content\": \"JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具。通过 npm 可以安装、共享、分发代码,管理项目依赖关系\"\n }\n ],\n \".skill\":[\n {\n \"nickname\": \"LeetCode\",\n \"site\": \"https://leetcode-cn.com/\",\n \"content\": \"全球极客挚爱的技术成长平台\"\n },\n {\n \"nickname\": \"Topcoder\",\n \"site\": \"https://www.topcoder.com/\",\n \"content\": \"全世界规模最大的程序竞赛网站,也会有一些算法竞赛,适合一些高端的或者搞ACM的,也会举办一些比赛\"\n },\n {\n \"nickname\": \"Codeforces\",\n \"site\": \"http://codeforces.com/\",\n \"content\": \"罗斯最大的算法比赛网站\"\n },\n {\n \"nickname\": \"Hihocoder\",\n \"site\": \"http://www.hihocoder.com/\",\n \"content\": \"技术团队来自原北京大学POJ (PKU Online Judge)开发团队,收集了全球范围内很多地区、高校举办的比赛试题, 提供365天*24小时的在线提交、评判程序的服务\"\n },\n {\n \"nickname\": \"LintCode\",\n \"site\": \"https://www.lintcode.com/\",\n \"content\": \"被称作中文版的leetcode,也是可以做为编程能力提升的一个中转站\"\n },\n {\n \"nickname\": \"SPOJ\",\n \"site\": \"https://www.spoj.com/\",\n \"content\": \"波兰的算法刷题网站\"\n },\n {\n \"nickname\": \"NEUQ OJ\",\n \"site\": \"http://acmclub.cn/\",\n \"content\": \"一个在线的判题平台\"\n },\n {\n \"nickname\": \"洛谷\",\n \"site\": \"https://www.luogu.com.cn/\",\n \"content\": \"创办于2013年,致力于为参加noip、noi、acm的选手提供清爽、快捷的编程体验\"\n },\n {\n \"nickname\": \"牛客网\",\n \"site\": \"https://www.nowcoder.com/contestRoom\",\n \"content\": \"中国最大的IT题库\"\n },\n {\n \"nickname\": \"计蒜客\",\n \"site\": \"https://nanti.jisuanke.com/oi\",\n \"content\": \"计蒜客OI题库致力于为参加noi、noip、信息学竞赛的选手提供优秀的Online Judge系统\"\n },\n {\n \"nickname\": \"C语言网\",\n \"site\": \"https://www.dotcpp.com/oj/contest.html\",\n \"content\": \"在这里可以参加包括ACM、NOI在内的各种C/C++/java程序比赛,也可以DIY举办各类程序比赛活动!\"\n }\n ],\n \".school\":[\n {\n \"nickname\": \"菜鸟教程\",\n \"site\": \"https://www.runoob.com/\",\n \"content\": \"提供了编程的基础技术教程, 介绍了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP , MySQL等各种编程语言的基础知识\"\n },\n {\n \"nickname\": \"W3school\",\n \"site\": \"https://www.w3school.com.cn/\",\n \"content\": \"领先的 Web 技术教程\"\n },\n {\n \"nickname\": \"前端网\",\n \"site\": \"http://www.qianduandaxue.com/\",\n \"content\": \"最好的自学web前端网站\"\n }\n ],\n \".community\":[\n {\n \"nickname\": \"Stack Overflow\",\n \"site\": \"https://stackoverflow.com/\",\n \"content\": \"全球最受程序员欢迎的开发社区\"\n },\n {\n \"nickname\": \"CSDN\",\n \"site\": \"https://www.csdn.net/\",\n \"content\": \"全球最大中文IT社区,为IT专业技术人员提供最全面的信息传播和服务平台\"\n },\n {\n \"nickname\": \"博客园\",\n \"site\": \"https://www.cnblogs.com\",\n \"content\": \"代码改变世界\"\n },\n {\n \"nickname\": \"V2EX\",\n \"site\": \"https://www.v2ex.com/\",\n \"content\": \"V2EX = way to explore\"\n },\n {\n \"nickname\": \"掘金\",\n \"site\": \"https://juejin.im/\",\n \"content\": \"一个帮助开发者成长的社区\"\n },\n {\n \"nickname\": \"SegmentFault\",\n \"site\": \"https://segmentfault.com/\",\n \"content\": \"改变并提升人们获取知识的方式和效率,帮助更多的开发者获得成长与成功\"\n },\n {\n \"nickname\": \"开源中国\",\n \"site\": \"https://www.oschina.net/\",\n \"content\": \"国内最大的开源技术社区\"\n },\n {\n \"nickname\": \"ITeye\",\n \"site\": \"https://www.iteye.com/\",\n \"content\": \"ITeye软件开发交流社区 - Java编程 Spring框架 Ajax技术 agile敏捷软件开发 ruby on rails实践\"\n },\n {\n \"nickname\": \"51CTO\",\n \"site\": \"https://www.51cto.com/\",\n \"content\": \"技术成就梦想\"\n },\n {\n \"nickname\": \"ITPUB\",\n \"site\": \"http://www.itpub.net/\",\n \"content\": \"全球最大的学习分享平台\"\n },\n {\n \"nickname\": \"知乎\",\n \"site\": \"https://www.zhihu.com/\",\n \"content\": \"国内最受欢迎的知识性问答社区\"\n },\n {\n \"nickname\": \"简书\",\n \"site\": \"https://www.jianshu.com/\",\n \"content\": \"创作你的创作\"\n },\n {\n \"nickname\": \"云+社区\",\n \"site\": \"https://cloud.tencent.com/developer\",\n \"content\": \"来自腾讯的开发者技术分享社区\"\n },\n {\n \"nickname\": \"云栖社区\",\n \"site\": \"https://yq.aliyun.com/\",\n \"content\": \"阿里云面向开发者的开放型技术平台\"\n },\n {\n \"nickname\": \"极术社区\",\n \"site\": \"https://aijishu.com/\",\n \"content\": \"全球软硬件资源信息,只要你有问题,我们就能解答。\"\n }\n ],\n \".serve\":[\n {\n \"nickname\": \"阿里云\",\n \"site\": \"https://www.aliyun.com/\",\n \"content\": \"为了无法计算的价值\"\n },\n {\n \"nickname\": \"腾讯云\",\n \"site\": \"https://cloud.tencent.com/\",\n \"content\": \"产业智变 云启未来\"\n },\n {\n \"nickname\": \"百度云\",\n \"site\": \"https://cloud.baidu.com/\",\n \"content\": \"计算无限可能\"\n },\n {\n \"nickname\": \"七牛云\",\n \"site\": \"https://www.qiniu.com/\",\n \"content\": \"国内领先的企业级云服务商\"\n }, \n {\n \"nickname\": \"又拍云\",\n \"site\": \"https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral\",\n \"content\": \"专注 CDN、云存储、小程序开发方案、 短视频开发方案、DDoS高防等产品的国内知名企业级云服务商\"\n },\n {\n \"nickname\": \"Cloudflare\",\n \"site\": \"https://www.cloudflare.com/\",\n \"content\": \"网络性能和安全公司\"\n },\n {\n \"nickname\": \"jsDelivr\",\n \"site\": \"https://www.jsdelivr.com/\",\n \"content\": \"A free, fast, and reliable Open Source CDN for npm and GitHub\"\n }\n ],\n \".sitetool\":[\n {\n \"nickname\": \"百度站长平台\",\n \"site\": \"https://ziyuan.baidu.com/\",\n \"content\": \"百度搜索资源平台 - 让网站更具价值\"\n },\n {\n \"nickname\": \"Google 站长平台\",\n \"site\": \"http://www.google.cn/webmasters/\",\n \"content\": \"支持、学习、互动交流和 Search Console – Google\"\n },\n {\n \"nickname\": \"Bing 网站管理员工具\",\n \"site\": \"https://www.bing.com/toolbox/webmaster/\",\n \"content\": \"Bing 网站管理员工具\"\n },\n {\n \"nickname\": \"站长工具 - 站长之家\",\n \"site\": \"http://tool.chinaz.com/\",\n \"content\": \"SEO工具,权重查询,收录查询,PR查询,ICP备案查询,whois查询,友情链接查询,反向链接查询,网站测试,IP查询,Alexa查询\"\n },\n {\n \"nickname\": \"搜狗站长平台\",\n \"site\": \"http://zhanzhang.sogou.com/\",\n \"content\": \"全面掌握在搜狗搜索中的数据表现\"\n },\n {\n \"nickname\": \"360 站长平台\",\n \"site\": \"http://zhanzhang.so.com/\",\n \"content\": \"给网站带来更多流量和展现\"\n },\n {\n \"nickname\": \"超级 SEO 外链工具\",\n \"site\": \"https://tool.lusongsong.com/seo/\",\n \"content\": \"网站自动化宣传机器/免费的超级外链工具可批量增加外链\"\n },\n {\n \"nickname\": \"域名备案管理系统\",\n \"site\": \"http://www.beian.miit.gov.cn/\",\n \"content\": \"工业和信息化部ICP/IP地址/域名信息备案管理系统\"\n },\n {\n \"nickname\": \"公安备案网\",\n \"site\": \"http://beian.gov.cn/\",\n \"content\": \"全国互联网安全管理服务平台\"\n }\n ],\n \".design\":[\n {\n \"nickname\": \"Iconfont\",\n \"site\": \"https://www.iconfont.cn/\",\n \"content\": \"阿里巴巴矢量图标库,提供矢量图标下载、在线存储、格式转换等功能\"\n },\n {\n \"nickname\": \"Font Awesome\",\n \"site\": \"https://fa5.dashgame.com/#/%E5%9B%BE%E6%A0%87\",\n \"content\": \"一个基于CSS 和 LESS 的字体和图标工具包\"\n },\n {\n \"nickname\": \"Flaticon\",\n \"site\": \"https://www.flaticon.com/\",\n \"content\": \"海量扁平化免费的图标库\"\n },\n {\n \"nickname\": \"icons8\",\n \"site\": \"https://icons8.com/\",\n \"content\": \"独特系统平台风格和web图标库,下载免费图标,音乐\"\n },\n {\n \"nickname\": \"Unsplash\",\n \"site\": \"https://unsplash.com/\",\n \"content\": \"质量超高的免费图片素材库,无需注册,直接下载\"\n },\n {\n \"nickname\": \"Mixkit\",\n \"site\": \"https://mixkit.co/\",\n \"content\": \"免费、高质量、可商用的视频素材分享网站\"\n },\n {\n \"nickname\": \"WebGradients\",\n \"site\": \"https://webgradients.com/\",\n \"content\": \"渐变色搭配方案\"\n },\n {\n \"nickname\": \"CoolHue2.0\",\n \"site\": \"https://webkul.github.io/coolhue/\",\n \"content\": \"渐变色搭配方案\"\n },\n {\n \"nickname\": \"Gradient\",\n \"site\": \"https://gradient.shapefactory.co/?a=540A43&b=629EA1&d=25\",\n \"content\": \"渐变色搭配方案\"\n },\n {\n \"nickname\": \"UiGradients\",\n \"site\": \"https://uigradients.com/#JShine\",\n \"content\": \"渐变色搭配方案\"\n }\n ],\n \".tools\":[\n {\n \"nickname\": \"智图\",\n \"site\": \"https://zhitu.isux.us/\",\n \"content\": \"腾讯ISUX前端团队开发的一个专门用于图片压缩和图片格式转换的平台\"\n },\n {\n \"nickname\": \"程序员的工具箱\",\n \"site\": \"https://tool.lu/\",\n \"content\": \"站长工具、代码格式化、压缩、加密、解密、下载链接转换等\"\n },\n {\n \"nickname\": \"OSCHINA.NET社区\",\n \"site\": \"https://tool.oschina.net/\",\n \"content\": \"常用文档、常用对照表、代码处理、Html/Js/Css工具、加密/转码工具等\"\n },\n {\n \"nickname\": \"记磊工具箱\",\n \"site\": \"https://tools.ly522.com/\",\n \"content\": \"Dns检测、CSS格式化、超级Ping、端口扫描等\"\n },\n {\n \"nickname\": \"孟坤工具箱\",\n \"site\": \"http://tool.mkblog.cn/\",\n \"content\": \"css一键美化、文本差异比较、代码高亮等\"\n },\n {\n \"nickname\": \"Text to ASCII\",\n \"site\": \"http://patorjk.com/software/taag/\",\n \"content\": \"Text to ASCII Art Generator,字符串转成 ASCII 码图案\"\n },\n {\n \"nickname\": \"临时邮箱\",\n \"site\": \"https://linshiyouxiang.net/\",\n \"content\": \"匿名注册不常用的网站/论坛,保护隐私免骚扰\"\n },\n {\n \"nickname\": \"TinyPNG\",\n \"site\": \"https://tinypng.com/\",\n \"content\": \"PNG/JPG图片在线压缩利器\"\n },\n {\n \"nickname\": \"图片格式在线转换\",\n \"site\": \"https://ezgif.com/png-to-webp\",\n \"content\": \"webp图片格式在线转换\"\n },\n {\n \"nickname\": \"SVGOMG\",\n \"site\": \"https://jakearchibald.github.io/svgomg/\",\n \"content\": \"SVG在线压缩平台\"\n },\n {\n \"nickname\": \"Loading\",\n \"site\": \"https://loading.io/\",\n \"content\": \"制作GIF、SVG、CSS加载动画图标\"\n },\n {\n \"nickname\": \"Preloaders\",\n \"site\": \"https://www.logaster.cn/\",\n \"content\": \"Loading 懒加载动画在线制作\"\n },\n {\n \"nickname\": \"移除图片背景\",\n \"site\": \"https://www.remove.bg/\",\n \"content\": \"一键智能抠图\"\n },\n {\n \"nickname\": \"KMS服务\",\n \"site\": \"https://kms.avg.cx/\",\n \"content\": \"KMS激活Windows一键脚本\"\n }\n ]\n}\n","date":"2023-10-21T13:20:04.503Z","updated":"2023-10-21T13:20:04.502Z","path":"stars/allStars.json","layout":"false","title":"","comments":1,"_id":"clo5vyru0001r2j3u4mb9g2as","content":"{\".mine\":[{\"nickname\":\"又拍云控制台\",\"site\":\"https://console.upyun.com/dashboard/\",\"content\":\"CDN管理,刷新CDN缓存\"},{\"nickname\":\"LeanCloud控制台\",\"site\":\"https://leancloud.cn/dashboard/applist.html#/apps\",\"content\":\"应用管理,数据控制\"},{\"nickname\":\"开课吧\",\"site\":\"https://appaadih2af2521.pc.xiaoe-tech.com/bought\",\"content\":\"学习网站\"},{\"nickname\":\"网易云课堂\",\"site\":\"https://study.163.com/my\",\"content\":\"学习网站\"},{\"nickname\":\"NexT\",\"site\":\"https://theme-next.org/docs/\",\"content\":\"NexT主题官方文档\"}],\".docs\":[{\"nickname\":\"JavaScript\",\"site\":\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference\",\"content\":\"JavaScript API 文档\"},{\"nickname\":\"HTML\",\"site\":\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element\",\"content\":\"HTML API 文档\"},{\"nickname\":\"CSS\",\"site\":\"https://developer.mozilla.org/en-US/docs/Web/CSS/Reference\",\"content\":\"CSS API 文档\"},{\"nickname\":\"Python\",\"site\":\"https://docs.python.org/\",\"content\":\"Python API 文档\"},{\"nickname\":\"PHP\",\"site\":\"https://www.php.net/manual/zh/index.php\",\"content\":\"PHP API 文档\"},{\"nickname\":\"SQL\",\"site\":\"https://docs.microsoft.com/zh-cn/sql/\",\"content\":\"SQL API 文档\"},{\"nickname\":\"Node.js\",\"site\":\"http://nodejs.cn/\",\"content\":\"Node.js API 文档\"},{\"nickname\":\"MongoDB\",\"site\":\"https://docs.mongodb.com/manual/\",\"content\":\"MongoDB API 文档\"},{\"nickname\":\"Vue.js\",\"site\":\"https://cn.vuejs.org/v2/guide/\",\"content\":\"一套用于构建用户界面的渐进式框架。\"},{\"nickname\":\"Vuex\",\"site\":\"https://vuex.vuejs.org/zh/\",\"content\":\"一个专为Vue.js应用程序开发的状态管理模式\"},{\"nickname\":\"Vue Router\",\"site\":\"https://router.vuejs.org/zh/\",\"content\":\"Vue.js官方路由管理器\"},{\"nickname\":\"Puppeteer中文文档\",\"site\":\"https://zhaoqize.github.io/puppeteer-api-zh_CN/\",\"content\":\"一个Node库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行,但是可以通过修改配置文件运行“有头”模式。\"},{\"nickname\":\"axios中文文档\",\"site\":\"http://www.axios-js.com/\",\"content\":\"易用、简洁且高效的http库\"},{\"nickname\":\"Express中文文档\",\"site\":\"https://www.expressjs.com.cn/\",\"content\":\"基于Node.js平台,快速、开放、极简的Web开发框架\"},{\"nickname\":\"Layui\",\"site\":\"https://www.layui.com/\",\"content\":\"经典模块化前端UI框架\"}],\".code\":[{\"nickname\":\"Github\",\"site\":\"https://github.com/\",\"content\":\"全球最大的面向开源及私有软件项目的托管平台\"},{\"nickname\":\"Gitlab\",\"site\":\"https://gitlab.com/\",\"content\":\"支持无限的公有项目和私有项目的代码托管平台\"},{\"nickname\":\"Coding\",\"site\":\"https://coding.net/\",\"content\":\"国内首个一站式云端软件服务平台\"},{\"nickname\":\"Gitee\",\"site\":\"https://gitee.com/\",\"content\":\"国内最大的开源社区 OSChina 的代码托管平台\"},{\"nickname\":\"阿里云代码托管\",\"site\":\"https://code.aliyun.com/\",\"content\":\"阿里云旗下代码托管平台\"},{\"nickname\":\"百度效率云\",\"site\":\"http://xiaolvyun.baidu.com/\",\"content\":\"百度云旗下的 Git 代码托管平台\"},{\"nickname\":\"SourceForge\",\"site\":\"https://sourceforge.net/\",\"content\":\"又称 SF.net,是开源软件开发者进行开发管理的集中式场所\"},{\"nickname\":\"Bitbucket\",\"site\":\"https://bitbucket.org/\",\"content\":\"同时支持 Git 和 Mercurial 这两个版本控制软件,免费的私有仓库,支持5人以内的合作开发\"},{\"nickname\":\"npm\",\"site\":\"https://www.npmjs.com/\",\"content\":\"JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具。通过 npm 可以安装、共享、分发代码,管理项目依赖关系\"}],\".skill\":[{\"nickname\":\"LeetCode\",\"site\":\"https://leetcode-cn.com/\",\"content\":\"全球极客挚爱的技术成长平台\"},{\"nickname\":\"Topcoder\",\"site\":\"https://www.topcoder.com/\",\"content\":\"全世界规模最大的程序竞赛网站,也会有一些算法竞赛,适合一些高端的或者搞ACM的,也会举办一些比赛\"},{\"nickname\":\"Codeforces\",\"site\":\"http://codeforces.com/\",\"content\":\"罗斯最大的算法比赛网站\"},{\"nickname\":\"Hihocoder\",\"site\":\"http://www.hihocoder.com/\",\"content\":\"技术团队来自原北京大学POJ (PKU Online Judge)开发团队,收集了全球范围内很多地区、高校举办的比赛试题, 提供365天*24小时的在线提交、评判程序的服务\"},{\"nickname\":\"LintCode\",\"site\":\"https://www.lintcode.com/\",\"content\":\"被称作中文版的leetcode,也是可以做为编程能力提升的一个中转站\"},{\"nickname\":\"SPOJ\",\"site\":\"https://www.spoj.com/\",\"content\":\"波兰的算法刷题网站\"},{\"nickname\":\"NEUQ OJ\",\"site\":\"http://acmclub.cn/\",\"content\":\"一个在线的判题平台\"},{\"nickname\":\"洛谷\",\"site\":\"https://www.luogu.com.cn/\",\"content\":\"创办于2013年,致力于为参加noip、noi、acm的选手提供清爽、快捷的编程体验\"},{\"nickname\":\"牛客网\",\"site\":\"https://www.nowcoder.com/contestRoom\",\"content\":\"中国最大的IT题库\"},{\"nickname\":\"计蒜客\",\"site\":\"https://nanti.jisuanke.com/oi\",\"content\":\"计蒜客OI题库致力于为参加noi、noip、信息学竞赛的选手提供优秀的Online Judge系统\"},{\"nickname\":\"C语言网\",\"site\":\"https://www.dotcpp.com/oj/contest.html\",\"content\":\"在这里可以参加包括ACM、NOI在内的各种C/C++/java程序比赛,也可以DIY举办各类程序比赛活动!\"}],\".school\":[{\"nickname\":\"菜鸟教程\",\"site\":\"https://www.runoob.com/\",\"content\":\"提供了编程的基础技术教程, 介绍了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP , MySQL等各种编程语言的基础知识\"},{\"nickname\":\"W3school\",\"site\":\"https://www.w3school.com.cn/\",\"content\":\"领先的 Web 技术教程\"},{\"nickname\":\"前端网\",\"site\":\"http://www.qianduandaxue.com/\",\"content\":\"最好的自学web前端网站\"}],\".community\":[{\"nickname\":\"Stack Overflow\",\"site\":\"https://stackoverflow.com/\",\"content\":\"全球最受程序员欢迎的开发社区\"},{\"nickname\":\"CSDN\",\"site\":\"https://www.csdn.net/\",\"content\":\"全球最大中文IT社区,为IT专业技术人员提供最全面的信息传播和服务平台\"},{\"nickname\":\"博客园\",\"site\":\"https://www.cnblogs.com\",\"content\":\"代码改变世界\"},{\"nickname\":\"V2EX\",\"site\":\"https://www.v2ex.com/\",\"content\":\"V2EX = way to explore\"},{\"nickname\":\"掘金\",\"site\":\"https://juejin.im/\",\"content\":\"一个帮助开发者成长的社区\"},{\"nickname\":\"SegmentFault\",\"site\":\"https://segmentfault.com/\",\"content\":\"改变并提升人们获取知识的方式和效率,帮助更多的开发者获得成长与成功\"},{\"nickname\":\"开源中国\",\"site\":\"https://www.oschina.net/\",\"content\":\"国内最大的开源技术社区\"},{\"nickname\":\"ITeye\",\"site\":\"https://www.iteye.com/\",\"content\":\"ITeye软件开发交流社区 - Java编程 Spring框架 Ajax技术 agile敏捷软件开发 ruby on rails实践\"},{\"nickname\":\"51CTO\",\"site\":\"https://www.51cto.com/\",\"content\":\"技术成就梦想\"},{\"nickname\":\"ITPUB\",\"site\":\"http://www.itpub.net/\",\"content\":\"全球最大的学习分享平台\"},{\"nickname\":\"知乎\",\"site\":\"https://www.zhihu.com/\",\"content\":\"国内最受欢迎的知识性问答社区\"},{\"nickname\":\"简书\",\"site\":\"https://www.jianshu.com/\",\"content\":\"创作你的创作\"},{\"nickname\":\"云+社区\",\"site\":\"https://cloud.tencent.com/developer\",\"content\":\"来自腾讯的开发者技术分享社区\"},{\"nickname\":\"云栖社区\",\"site\":\"https://yq.aliyun.com/\",\"content\":\"阿里云面向开发者的开放型技术平台\"},{\"nickname\":\"极术社区\",\"site\":\"https://aijishu.com/\",\"content\":\"全球软硬件资源信息,只要你有问题,我们就能解答。\"}],\".serve\":[{\"nickname\":\"阿里云\",\"site\":\"https://www.aliyun.com/\",\"content\":\"为了无法计算的价值\"},{\"nickname\":\"腾讯云\",\"site\":\"https://cloud.tencent.com/\",\"content\":\"产业智变 云启未来\"},{\"nickname\":\"百度云\",\"site\":\"https://cloud.baidu.com/\",\"content\":\"计算无限可能\"},{\"nickname\":\"七牛云\",\"site\":\"https://www.qiniu.com/\",\"content\":\"国内领先的企业级云服务商\"},{\"nickname\":\"又拍云\",\"site\":\"https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral\",\"content\":\"专注 CDN、云存储、小程序开发方案、 短视频开发方案、DDoS高防等产品的国内知名企业级云服务商\"},{\"nickname\":\"Cloudflare\",\"site\":\"https://www.cloudflare.com/\",\"content\":\"网络性能和安全公司\"},{\"nickname\":\"jsDelivr\",\"site\":\"https://www.jsdelivr.com/\",\"content\":\"A free, fast, and reliable Open Source CDN for npm and GitHub\"}],\".sitetool\":[{\"nickname\":\"百度站长平台\",\"site\":\"https://ziyuan.baidu.com/\",\"content\":\"百度搜索资源平台 - 让网站更具价值\"},{\"nickname\":\"Google 站长平台\",\"site\":\"http://www.google.cn/webmasters/\",\"content\":\"支持、学习、互动交流和 Search Console – Google\"},{\"nickname\":\"Bing 网站管理员工具\",\"site\":\"https://www.bing.com/toolbox/webmaster/\",\"content\":\"Bing 网站管理员工具\"},{\"nickname\":\"站长工具 - 站长之家\",\"site\":\"http://tool.chinaz.com/\",\"content\":\"SEO工具,权重查询,收录查询,PR查询,ICP备案查询,whois查询,友情链接查询,反向链接查询,网站测试,IP查询,Alexa查询\"},{\"nickname\":\"搜狗站长平台\",\"site\":\"http://zhanzhang.sogou.com/\",\"content\":\"全面掌握在搜狗搜索中的数据表现\"},{\"nickname\":\"360 站长平台\",\"site\":\"http://zhanzhang.so.com/\",\"content\":\"给网站带来更多流量和展现\"},{\"nickname\":\"超级 SEO 外链工具\",\"site\":\"https://tool.lusongsong.com/seo/\",\"content\":\"网站自动化宣传机器/免费的超级外链工具可批量增加外链\"},{\"nickname\":\"域名备案管理系统\",\"site\":\"http://www.beian.miit.gov.cn/\",\"content\":\"工业和信息化部ICP/IP地址/域名信息备案管理系统\"},{\"nickname\":\"公安备案网\",\"site\":\"http://beian.gov.cn/\",\"content\":\"全国互联网安全管理服务平台\"}],\".design\":[{\"nickname\":\"Iconfont\",\"site\":\"https://www.iconfont.cn/\",\"content\":\"阿里巴巴矢量图标库,提供矢量图标下载、在线存储、格式转换等功能\"},{\"nickname\":\"Font Awesome\",\"site\":\"https://fa5.dashgame.com/#/%E5%9B%BE%E6%A0%87\",\"content\":\"一个基于CSS 和 LESS 的字体和图标工具包\"},{\"nickname\":\"Flaticon\",\"site\":\"https://www.flaticon.com/\",\"content\":\"海量扁平化免费的图标库\"},{\"nickname\":\"icons8\",\"site\":\"https://icons8.com/\",\"content\":\"独特系统平台风格和web图标库,下载免费图标,音乐\"},{\"nickname\":\"Unsplash\",\"site\":\"https://unsplash.com/\",\"content\":\"质量超高的免费图片素材库,无需注册,直接下载\"},{\"nickname\":\"Mixkit\",\"site\":\"https://mixkit.co/\",\"content\":\"免费、高质量、可商用的视频素材分享网站\"},{\"nickname\":\"WebGradients\",\"site\":\"https://webgradients.com/\",\"content\":\"渐变色搭配方案\"},{\"nickname\":\"CoolHue2.0\",\"site\":\"https://webkul.github.io/coolhue/\",\"content\":\"渐变色搭配方案\"},{\"nickname\":\"Gradient\",\"site\":\"https://gradient.shapefactory.co/?a=540A43&b=629EA1&d=25\",\"content\":\"渐变色搭配方案\"},{\"nickname\":\"UiGradients\",\"site\":\"https://uigradients.com/#JShine\",\"content\":\"渐变色搭配方案\"}],\".tools\":[{\"nickname\":\"智图\",\"site\":\"https://zhitu.isux.us/\",\"content\":\"腾讯ISUX前端团队开发的一个专门用于图片压缩和图片格式转换的平台\"},{\"nickname\":\"程序员的工具箱\",\"site\":\"https://tool.lu/\",\"content\":\"站长工具、代码格式化、压缩、加密、解密、下载链接转换等\"},{\"nickname\":\"OSCHINA.NET社区\",\"site\":\"https://tool.oschina.net/\",\"content\":\"常用文档、常用对照表、代码处理、Html/Js/Css工具、加密/转码工具等\"},{\"nickname\":\"记磊工具箱\",\"site\":\"https://tools.ly522.com/\",\"content\":\"Dns检测、CSS格式化、超级Ping、端口扫描等\"},{\"nickname\":\"孟坤工具箱\",\"site\":\"http://tool.mkblog.cn/\",\"content\":\"css一键美化、文本差异比较、代码高亮等\"},{\"nickname\":\"Text to ASCII\",\"site\":\"http://patorjk.com/software/taag/\",\"content\":\"Text to ASCII Art Generator,字符串转成 ASCII 码图案\"},{\"nickname\":\"临时邮箱\",\"site\":\"https://linshiyouxiang.net/\",\"content\":\"匿名注册不常用的网站/论坛,保护隐私免骚扰\"},{\"nickname\":\"TinyPNG\",\"site\":\"https://tinypng.com/\",\"content\":\"PNG/JPG图片在线压缩利器\"},{\"nickname\":\"图片格式在线转换\",\"site\":\"https://ezgif.com/png-to-webp\",\"content\":\"webp图片格式在线转换\"},{\"nickname\":\"SVGOMG\",\"site\":\"https://jakearchibald.github.io/svgomg/\",\"content\":\"SVG在线压缩平台\"},{\"nickname\":\"Loading\",\"site\":\"https://loading.io/\",\"content\":\"制作GIF、SVG、CSS加载动画图标\"},{\"nickname\":\"Preloaders\",\"site\":\"https://www.logaster.cn/\",\"content\":\"Loading 懒加载动画在线制作\"},{\"nickname\":\"移除图片背景\",\"site\":\"https://www.remove.bg/\",\"content\":\"一键智能抠图\"},{\"nickname\":\"KMS服务\",\"site\":\"https://kms.avg.cx/\",\"content\":\"KMS激活Windows一键脚本\"}]}","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":9409,"excerpt":"","more":"{\".mine\":[{\"nickname\":\"又拍云控制台\",\"site\":\"https://console.upyun.com/dashboard/\",\"content\":\"CDN管理,刷新CDN缓存\"},{\"nickname\":\"LeanCloud控制台\",\"site\":\"https://leancloud.cn/dashboard/applist.html#/apps\",\"content\":\"应用管理,数据控制\"},{\"nickname\":\"开课吧\",\"site\":\"https://appaadih2af2521.pc.xiaoe-tech.com/bought\",\"content\":\"学习网站\"},{\"nickname\":\"网易云课堂\",\"site\":\"https://study.163.com/my\",\"content\":\"学习网站\"},{\"nickname\":\"NexT\",\"site\":\"https://theme-next.org/docs/\",\"content\":\"NexT主题官方文档\"}],\".docs\":[{\"nickname\":\"JavaScript\",\"site\":\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference\",\"content\":\"JavaScript API 文档\"},{\"nickname\":\"HTML\",\"site\":\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element\",\"content\":\"HTML API 文档\"},{\"nickname\":\"CSS\",\"site\":\"https://developer.mozilla.org/en-US/docs/Web/CSS/Reference\",\"content\":\"CSS API 文档\"},{\"nickname\":\"Python\",\"site\":\"https://docs.python.org/\",\"content\":\"Python API 文档\"},{\"nickname\":\"PHP\",\"site\":\"https://www.php.net/manual/zh/index.php\",\"content\":\"PHP API 文档\"},{\"nickname\":\"SQL\",\"site\":\"https://docs.microsoft.com/zh-cn/sql/\",\"content\":\"SQL API 文档\"},{\"nickname\":\"Node.js\",\"site\":\"http://nodejs.cn/\",\"content\":\"Node.js API 文档\"},{\"nickname\":\"MongoDB\",\"site\":\"https://docs.mongodb.com/manual/\",\"content\":\"MongoDB API 文档\"},{\"nickname\":\"Vue.js\",\"site\":\"https://cn.vuejs.org/v2/guide/\",\"content\":\"一套用于构建用户界面的渐进式框架。\"},{\"nickname\":\"Vuex\",\"site\":\"https://vuex.vuejs.org/zh/\",\"content\":\"一个专为Vue.js应用程序开发的状态管理模式\"},{\"nickname\":\"Vue Router\",\"site\":\"https://router.vuejs.org/zh/\",\"content\":\"Vue.js官方路由管理器\"},{\"nickname\":\"Puppeteer中文文档\",\"site\":\"https://zhaoqize.github.io/puppeteer-api-zh_CN/\",\"content\":\"一个Node库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行,但是可以通过修改配置文件运行“有头”模式。\"},{\"nickname\":\"axios中文文档\",\"site\":\"http://www.axios-js.com/\",\"content\":\"易用、简洁且高效的http库\"},{\"nickname\":\"Express中文文档\",\"site\":\"https://www.expressjs.com.cn/\",\"content\":\"基于Node.js平台,快速、开放、极简的Web开发框架\"},{\"nickname\":\"Layui\",\"site\":\"https://www.layui.com/\",\"content\":\"经典模块化前端UI框架\"}],\".code\":[{\"nickname\":\"Github\",\"site\":\"https://github.com/\",\"content\":\"全球最大的面向开源及私有软件项目的托管平台\"},{\"nickname\":\"Gitlab\",\"site\":\"https://gitlab.com/\",\"content\":\"支持无限的公有项目和私有项目的代码托管平台\"},{\"nickname\":\"Coding\",\"site\":\"https://coding.net/\",\"content\":\"国内首个一站式云端软件服务平台\"},{\"nickname\":\"Gitee\",\"site\":\"https://gitee.com/\",\"content\":\"国内最大的开源社区 OSChina 的代码托管平台\"},{\"nickname\":\"阿里云代码托管\",\"site\":\"https://code.aliyun.com/\",\"content\":\"阿里云旗下代码托管平台\"},{\"nickname\":\"百度效率云\",\"site\":\"http://xiaolvyun.baidu.com/\",\"content\":\"百度云旗下的 Git 代码托管平台\"},{\"nickname\":\"SourceForge\",\"site\":\"https://sourceforge.net/\",\"content\":\"又称 SF.net,是开源软件开发者进行开发管理的集中式场所\"},{\"nickname\":\"Bitbucket\",\"site\":\"https://bitbucket.org/\",\"content\":\"同时支持 Git 和 Mercurial 这两个版本控制软件,免费的私有仓库,支持5人以内的合作开发\"},{\"nickname\":\"npm\",\"site\":\"https://www.npmjs.com/\",\"content\":\"JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具。通过 npm 可以安装、共享、分发代码,管理项目依赖关系\"}],\".skill\":[{\"nickname\":\"LeetCode\",\"site\":\"https://leetcode-cn.com/\",\"content\":\"全球极客挚爱的技术成长平台\"},{\"nickname\":\"Topcoder\",\"site\":\"https://www.topcoder.com/\",\"content\":\"全世界规模最大的程序竞赛网站,也会有一些算法竞赛,适合一些高端的或者搞ACM的,也会举办一些比赛\"},{\"nickname\":\"Codeforces\",\"site\":\"http://codeforces.com/\",\"content\":\"罗斯最大的算法比赛网站\"},{\"nickname\":\"Hihocoder\",\"site\":\"http://www.hihocoder.com/\",\"content\":\"技术团队来自原北京大学POJ (PKU Online Judge)开发团队,收集了全球范围内很多地区、高校举办的比赛试题, 提供365天*24小时的在线提交、评判程序的服务\"},{\"nickname\":\"LintCode\",\"site\":\"https://www.lintcode.com/\",\"content\":\"被称作中文版的leetcode,也是可以做为编程能力提升的一个中转站\"},{\"nickname\":\"SPOJ\",\"site\":\"https://www.spoj.com/\",\"content\":\"波兰的算法刷题网站\"},{\"nickname\":\"NEUQ OJ\",\"site\":\"http://acmclub.cn/\",\"content\":\"一个在线的判题平台\"},{\"nickname\":\"洛谷\",\"site\":\"https://www.luogu.com.cn/\",\"content\":\"创办于2013年,致力于为参加noip、noi、acm的选手提供清爽、快捷的编程体验\"},{\"nickname\":\"牛客网\",\"site\":\"https://www.nowcoder.com/contestRoom\",\"content\":\"中国最大的IT题库\"},{\"nickname\":\"计蒜客\",\"site\":\"https://nanti.jisuanke.com/oi\",\"content\":\"计蒜客OI题库致力于为参加noi、noip、信息学竞赛的选手提供优秀的Online Judge系统\"},{\"nickname\":\"C语言网\",\"site\":\"https://www.dotcpp.com/oj/contest.html\",\"content\":\"在这里可以参加包括ACM、NOI在内的各种C/C++/java程序比赛,也可以DIY举办各类程序比赛活动!\"}],\".school\":[{\"nickname\":\"菜鸟教程\",\"site\":\"https://www.runoob.com/\",\"content\":\"提供了编程的基础技术教程, 介绍了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP , MySQL等各种编程语言的基础知识\"},{\"nickname\":\"W3school\",\"site\":\"https://www.w3school.com.cn/\",\"content\":\"领先的 Web 技术教程\"},{\"nickname\":\"前端网\",\"site\":\"http://www.qianduandaxue.com/\",\"content\":\"最好的自学web前端网站\"}],\".community\":[{\"nickname\":\"Stack Overflow\",\"site\":\"https://stackoverflow.com/\",\"content\":\"全球最受程序员欢迎的开发社区\"},{\"nickname\":\"CSDN\",\"site\":\"https://www.csdn.net/\",\"content\":\"全球最大中文IT社区,为IT专业技术人员提供最全面的信息传播和服务平台\"},{\"nickname\":\"博客园\",\"site\":\"https://www.cnblogs.com\",\"content\":\"代码改变世界\"},{\"nickname\":\"V2EX\",\"site\":\"https://www.v2ex.com/\",\"content\":\"V2EX = way to explore\"},{\"nickname\":\"掘金\",\"site\":\"https://juejin.im/\",\"content\":\"一个帮助开发者成长的社区\"},{\"nickname\":\"SegmentFault\",\"site\":\"https://segmentfault.com/\",\"content\":\"改变并提升人们获取知识的方式和效率,帮助更多的开发者获得成长与成功\"},{\"nickname\":\"开源中国\",\"site\":\"https://www.oschina.net/\",\"content\":\"国内最大的开源技术社区\"},{\"nickname\":\"ITeye\",\"site\":\"https://www.iteye.com/\",\"content\":\"ITeye软件开发交流社区 - Java编程 Spring框架 Ajax技术 agile敏捷软件开发 ruby on rails实践\"},{\"nickname\":\"51CTO\",\"site\":\"https://www.51cto.com/\",\"content\":\"技术成就梦想\"},{\"nickname\":\"ITPUB\",\"site\":\"http://www.itpub.net/\",\"content\":\"全球最大的学习分享平台\"},{\"nickname\":\"知乎\",\"site\":\"https://www.zhihu.com/\",\"content\":\"国内最受欢迎的知识性问答社区\"},{\"nickname\":\"简书\",\"site\":\"https://www.jianshu.com/\",\"content\":\"创作你的创作\"},{\"nickname\":\"云+社区\",\"site\":\"https://cloud.tencent.com/developer\",\"content\":\"来自腾讯的开发者技术分享社区\"},{\"nickname\":\"云栖社区\",\"site\":\"https://yq.aliyun.com/\",\"content\":\"阿里云面向开发者的开放型技术平台\"},{\"nickname\":\"极术社区\",\"site\":\"https://aijishu.com/\",\"content\":\"全球软硬件资源信息,只要你有问题,我们就能解答。\"}],\".serve\":[{\"nickname\":\"阿里云\",\"site\":\"https://www.aliyun.com/\",\"content\":\"为了无法计算的价值\"},{\"nickname\":\"腾讯云\",\"site\":\"https://cloud.tencent.com/\",\"content\":\"产业智变 云启未来\"},{\"nickname\":\"百度云\",\"site\":\"https://cloud.baidu.com/\",\"content\":\"计算无限可能\"},{\"nickname\":\"七牛云\",\"site\":\"https://www.qiniu.com/\",\"content\":\"国内领先的企业级云服务商\"},{\"nickname\":\"又拍云\",\"site\":\"https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral\",\"content\":\"专注 CDN、云存储、小程序开发方案、 短视频开发方案、DDoS高防等产品的国内知名企业级云服务商\"},{\"nickname\":\"Cloudflare\",\"site\":\"https://www.cloudflare.com/\",\"content\":\"网络性能和安全公司\"},{\"nickname\":\"jsDelivr\",\"site\":\"https://www.jsdelivr.com/\",\"content\":\"A free, fast, and reliable Open Source CDN for npm and GitHub\"}],\".sitetool\":[{\"nickname\":\"百度站长平台\",\"site\":\"https://ziyuan.baidu.com/\",\"content\":\"百度搜索资源平台 - 让网站更具价值\"},{\"nickname\":\"Google 站长平台\",\"site\":\"http://www.google.cn/webmasters/\",\"content\":\"支持、学习、互动交流和 Search Console – Google\"},{\"nickname\":\"Bing 网站管理员工具\",\"site\":\"https://www.bing.com/toolbox/webmaster/\",\"content\":\"Bing 网站管理员工具\"},{\"nickname\":\"站长工具 - 站长之家\",\"site\":\"http://tool.chinaz.com/\",\"content\":\"SEO工具,权重查询,收录查询,PR查询,ICP备案查询,whois查询,友情链接查询,反向链接查询,网站测试,IP查询,Alexa查询\"},{\"nickname\":\"搜狗站长平台\",\"site\":\"http://zhanzhang.sogou.com/\",\"content\":\"全面掌握在搜狗搜索中的数据表现\"},{\"nickname\":\"360 站长平台\",\"site\":\"http://zhanzhang.so.com/\",\"content\":\"给网站带来更多流量和展现\"},{\"nickname\":\"超级 SEO 外链工具\",\"site\":\"https://tool.lusongsong.com/seo/\",\"content\":\"网站自动化宣传机器/免费的超级外链工具可批量增加外链\"},{\"nickname\":\"域名备案管理系统\",\"site\":\"http://www.beian.miit.gov.cn/\",\"content\":\"工业和信息化部ICP/IP地址/域名信息备案管理系统\"},{\"nickname\":\"公安备案网\",\"site\":\"http://beian.gov.cn/\",\"content\":\"全国互联网安全管理服务平台\"}],\".design\":[{\"nickname\":\"Iconfont\",\"site\":\"https://www.iconfont.cn/\",\"content\":\"阿里巴巴矢量图标库,提供矢量图标下载、在线存储、格式转换等功能\"},{\"nickname\":\"Font Awesome\",\"site\":\"https://fa5.dashgame.com/#/%E5%9B%BE%E6%A0%87\",\"content\":\"一个基于CSS 和 LESS 的字体和图标工具包\"},{\"nickname\":\"Flaticon\",\"site\":\"https://www.flaticon.com/\",\"content\":\"海量扁平化免费的图标库\"},{\"nickname\":\"icons8\",\"site\":\"https://icons8.com/\",\"content\":\"独特系统平台风格和web图标库,下载免费图标,音乐\"},{\"nickname\":\"Unsplash\",\"site\":\"https://unsplash.com/\",\"content\":\"质量超高的免费图片素材库,无需注册,直接下载\"},{\"nickname\":\"Mixkit\",\"site\":\"https://mixkit.co/\",\"content\":\"免费、高质量、可商用的视频素材分享网站\"},{\"nickname\":\"WebGradients\",\"site\":\"https://webgradients.com/\",\"content\":\"渐变色搭配方案\"},{\"nickname\":\"CoolHue2.0\",\"site\":\"https://webkul.github.io/coolhue/\",\"content\":\"渐变色搭配方案\"},{\"nickname\":\"Gradient\",\"site\":\"https://gradient.shapefactory.co/?a=540A43&b=629EA1&d=25\",\"content\":\"渐变色搭配方案\"},{\"nickname\":\"UiGradients\",\"site\":\"https://uigradients.com/#JShine\",\"content\":\"渐变色搭配方案\"}],\".tools\":[{\"nickname\":\"智图\",\"site\":\"https://zhitu.isux.us/\",\"content\":\"腾讯ISUX前端团队开发的一个专门用于图片压缩和图片格式转换的平台\"},{\"nickname\":\"程序员的工具箱\",\"site\":\"https://tool.lu/\",\"content\":\"站长工具、代码格式化、压缩、加密、解密、下载链接转换等\"},{\"nickname\":\"OSCHINA.NET社区\",\"site\":\"https://tool.oschina.net/\",\"content\":\"常用文档、常用对照表、代码处理、Html/Js/Css工具、加密/转码工具等\"},{\"nickname\":\"记磊工具箱\",\"site\":\"https://tools.ly522.com/\",\"content\":\"Dns检测、CSS格式化、超级Ping、端口扫描等\"},{\"nickname\":\"孟坤工具箱\",\"site\":\"http://tool.mkblog.cn/\",\"content\":\"css一键美化、文本差异比较、代码高亮等\"},{\"nickname\":\"Text to ASCII\",\"site\":\"http://patorjk.com/software/taag/\",\"content\":\"Text to ASCII Art Generator,字符串转成 ASCII 码图案\"},{\"nickname\":\"临时邮箱\",\"site\":\"https://linshiyouxiang.net/\",\"content\":\"匿名注册不常用的网站/论坛,保护隐私免骚扰\"},{\"nickname\":\"TinyPNG\",\"site\":\"https://tinypng.com/\",\"content\":\"PNG/JPG图片在线压缩利器\"},{\"nickname\":\"图片格式在线转换\",\"site\":\"https://ezgif.com/png-to-webp\",\"content\":\"webp图片格式在线转换\"},{\"nickname\":\"SVGOMG\",\"site\":\"https://jakearchibald.github.io/svgomg/\",\"content\":\"SVG在线压缩平台\"},{\"nickname\":\"Loading\",\"site\":\"https://loading.io/\",\"content\":\"制作GIF、SVG、CSS加载动画图标\"},{\"nickname\":\"Preloaders\",\"site\":\"https://www.logaster.cn/\",\"content\":\"Loading 懒加载动画在线制作\"},{\"nickname\":\"移除图片背景\",\"site\":\"https://www.remove.bg/\",\"content\":\"一键智能抠图\"},{\"nickname\":\"KMS服务\",\"site\":\"https://kms.avg.cx/\",\"content\":\"KMS激活Windows一键脚本\"}]}"},{"title":"我的收藏","comments":0,"type":"stars","_content":"\n\n\n\n\n\n\n\n\n## 我的常用\n
\n\n## 官方文档\n
\n\n## 代码托管\n
\n\n## 技能训练\n
\n\n## 学习平台\n
\n\n## 开发者社区\n
\n\n## 云服务\n
\n\n## 站长工具\n
\n\n## 设计素材\n
\n\n## 实用工具\n
\n","source":"stars/index.md","raw":"---\ntitle: 我的收藏\ncomments: false\ntype: \"stars\"\n---\n\n\n\n\n\n\n\n\n\n## 我的常用\n
\n\n## 官方文档\n
\n\n## 代码托管\n
\n\n## 技能训练\n
\n\n## 学习平台\n
\n\n## 开发者社区\n
\n\n## 云服务\n
\n\n## 站长工具\n
\n\n## 设计素材\n
\n\n## 实用工具\n
\n","date":"2023-10-21T15:01:17.081Z","updated":"2023-10-21T15:01:17.081Z","path":"stars/index.html","layout":"page","_id":"clo5vyru0001u2j3u40uw506l","content":"\n\n\n\n

我的常用

\n
\n

官方文档

\n
\n

代码托管

\n
\n

技能训练

\n
\n

学习平台

\n
\n

开发者社区

\n
\n

云服务

\n
\n

站长工具

\n
\n

设计素材

\n
\n

实用工具

\n
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":2082,"excerpt":"","more":"\n\n\n\n

我的常用

\n
\n

官方文档

\n
\n

代码托管

\n
\n

技能训练

\n
\n

学习平台

\n
\n

开发者社区

\n
\n

云服务

\n
\n

站长工具

\n
\n

设计素材

\n
\n

实用工具

\n
\n"},{"_content":"// 采用一个多对象JSON文件存储所有数据的方式\nstars = {\n init: function (url) {\n var that = this;\n $.getJSON(url,\n function (data) {\n for (var className in data) {\n var classData = data[className]\n that.render(classData, className)\n }\n }\n );\n },\n render: function (data, name) {\n var nickname, site, li = \"\";\n for (var i = 0; i < data.length; i++) {\n nickname = data[i].nickname;\n site = data[i].site;\n content = data[i].content;\n li += '
' + '
' + '
' + nickname + '
' + '
' + '
' + '
' + content + '
' + '
' + '
';\n }\n $(name).append(li);\n }\n}\n\n// 传入json文件的路径\nstars.init(\"./allStars.json\")\n\n\n\n\n\n","source":"stars/stars.js","raw":"// 采用一个多对象JSON文件存储所有数据的方式\nstars = {\n init: function (url) {\n var that = this;\n $.getJSON(url,\n function (data) {\n for (var className in data) {\n var classData = data[className]\n that.render(classData, className)\n }\n }\n );\n },\n render: function (data, name) {\n var nickname, site, li = \"\";\n for (var i = 0; i < data.length; i++) {\n nickname = data[i].nickname;\n site = data[i].site;\n content = data[i].content;\n li += '
' + '
' + '
' + nickname + '
' + '
' + '
' + '
' + content + '
' + '
' + '
';\n }\n $(name).append(li);\n }\n}\n\n// 传入json文件的路径\nstars.init(\"./allStars.json\")\n\n\n\n\n\n","date":"2023-10-21T13:20:04.503Z","updated":"2023-10-21T13:20:04.503Z","path":"stars/stars.js","layout":"false","title":"","comments":1,"_id":"clo5vyru0001w2j3ud09u1vdu","content":"// 采用一个多对象JSON文件存储所有数据的方式\nstars = {\n init: function (url) {\n var that = this;\n $.getJSON(url,\n function (data) {\n for (var className in data) {\n var classData = data[className]\n that.render(classData, className)\n }\n }\n );\n },\n render: function (data, name) {\n var nickname, site, li = \"\";\n for (var i = 0; i < data.length; i++) {\n nickname = data[i].nickname;\n site = data[i].site;\n content = data[i].content;\n li += '
' + '
' + '
' + nickname + '
' + '
' + '
' + '
' + content + '
' + '
' + '
';\n }\n $(name).append(li);\n }\n}\n\n// 传入json文件的路径\nstars.init(\"./allStars.json\")\n\n\n\n\n\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":445,"excerpt":"","more":"// 采用一个多对象JSON文件存储所有数据的方式\nstars = {\n init: function (url) {\n var that = this;\n $.getJSON(url,\n function (data) {\n for (var className in data) {\n var classData = data[className]\n that.render(classData, className)\n }\n }\n );\n },\n render: function (data, name) {\n var nickname, site, li = \"\";\n for (var i = 0; i < data.length; i++) {\n nickname = data[i].nickname;\n site = data[i].site;\n content = data[i].content;\n li += '
' + '
' + '
' + nickname + '
' + '
' + '
' + '
' + content + '
' + '
' + '
';\n }\n $(name).append(li);\n }\n}\n\n// 传入json文件的路径\nstars.init(\"./allStars.json\")\n\n\n\n\n\n"},{"title":"订阅","date":"2023-07-28T05:01:46.000Z","type":"subscribe","top_img":false,"aside":false,"comments":0,"_content":"\n## 订阅本站\n\n首先,对每一位来到这里的iTank朋友们说声 \"有幸遇见,很高兴认识你\" 👋\n创立 Tankenqi 的初衷是想能够有一个让自己积累知识、积累兴趣的地方;是属于自己的温暖小窝;也是偌大的社会里的属于自己的内心避风港\n和他人分享,会让这些成为积累和沉淀。如果能够帮助到更多的人,帮助更多人解决问题,那一定是非常棒的事情\n\n与大多数垂直类的技术博客不同,这里的种类会非常的繁杂,有技能的教程干货、有生活上的吐槽和想法;所以一般我研究什么、发现了什么都会分享在这里\n这些就是创造 TANKENQI 的本意,也是我分享生活的方式。有幸能和你相遇在这里,相信我们能共同留下一段美好记忆\n\n\n## RSS订阅\n\n你可以使用第三方RSS客户端接收到博客的文章摘要通知\n\nhttps://tankenqi.cn/atom.xml\n\n","source":"subscribe/index.md","raw":"---\ntitle: 订阅\ndate: 2023-07-28 13:01:46\ntype: subscribe\ntop_img: false\naside: false\ncomments: false\n---\n\n## 订阅本站\n\n首先,对每一位来到这里的iTank朋友们说声 \"有幸遇见,很高兴认识你\" 👋\n创立 Tankenqi 的初衷是想能够有一个让自己积累知识、积累兴趣的地方;是属于自己的温暖小窝;也是偌大的社会里的属于自己的内心避风港\n和他人分享,会让这些成为积累和沉淀。如果能够帮助到更多的人,帮助更多人解决问题,那一定是非常棒的事情\n\n与大多数垂直类的技术博客不同,这里的种类会非常的繁杂,有技能的教程干货、有生活上的吐槽和想法;所以一般我研究什么、发现了什么都会分享在这里\n这些就是创造 TANKENQI 的本意,也是我分享生活的方式。有幸能和你相遇在这里,相信我们能共同留下一段美好记忆\n\n\n## RSS订阅\n\n你可以使用第三方RSS客户端接收到博客的文章摘要通知\n\nhttps://tankenqi.cn/atom.xml\n\n","updated":"2023-10-22T05:09:02.000Z","path":"subscribe/index.html","layout":"page","_id":"clo5vyru100202j3uhbkec8ey","content":"

订阅本站

\n

首先,对每一位来到这里的iTank朋友们说声 “有幸遇见,很高兴认识你” 👋
\n创立 Tankenqi 的初衷是想能够有一个让自己积累知识、积累兴趣的地方;是属于自己的温暖小窝;也是偌大的社会里的属于自己的内心避风港
\n和他人分享,会让这些成为积累和沉淀。如果能够帮助到更多的人,帮助更多人解决问题,那一定是非常棒的事情

\n

与大多数垂直类的技术博客不同,这里的种类会非常的繁杂,有技能的教程干货、有生活上的吐槽和想法;所以一般我研究什么、发现了什么都会分享在这里
\n这些就是创造 TANKENQI 的本意,也是我分享生活的方式。有幸能和你相遇在这里,相信我们能共同留下一段美好记忆

\n

RSS订阅

\n

你可以使用第三方RSS客户端接收到博客的文章摘要通知

\n

https://tankenqi.cn/atom.xml

\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":340,"excerpt":"","more":"

订阅本站

\n

首先,对每一位来到这里的iTank朋友们说声 “有幸遇见,很高兴认识你” 👋
\n创立 Tankenqi 的初衷是想能够有一个让自己积累知识、积累兴趣的地方;是属于自己的温暖小窝;也是偌大的社会里的属于自己的内心避风港
\n和他人分享,会让这些成为积累和沉淀。如果能够帮助到更多的人,帮助更多人解决问题,那一定是非常棒的事情

\n

与大多数垂直类的技术博客不同,这里的种类会非常的繁杂,有技能的教程干货、有生活上的吐槽和想法;所以一般我研究什么、发现了什么都会分享在这里
\n这些就是创造 TANKENQI 的本意,也是我分享生活的方式。有幸能和你相遇在这里,相信我们能共同留下一段美好记忆

\n

RSS订阅

\n

你可以使用第三方RSS客户端接收到博客的文章摘要通知

\n

https://tankenqi.cn/atom.xml

\n"},{"title":"标签","date":"2022-07-03T12:51:29.000Z","type":"tags","_content":"","source":"tags/index.md","raw":"---\ntitle: 标签\ndate: 2022-07-03 20:51:29\ntype: \"tags\"\n---\n","updated":"2023-10-21T01:08:55.968Z","path":"tags/index.html","comments":1,"layout":"page","_id":"clo5vyru100232j3u50p655nd","content":"","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":0,"excerpt":"","more":""},{"title":"番茄时钟","comments":0,"aside":false,"_content":"\n\n\n\n\n","source":"tomato_clock/index.md","raw":"---\ntitle: 番茄时钟\ncomments: false\naside: false\n---\n\n\n\n\n\n","date":"2023-10-25T01:41:51.782Z","updated":"2023-10-25T01:41:51.782Z","path":"tomato_clock/index.html","layout":"page","_id":"clo5vyru100272j3u6556gio9","content":"\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":0,"excerpt":"","more":"\n"},{"title":"工具","date":"2022-07-13T07:23:02.000Z","_content":"{% flink %}\n- class_name: 镜像站\n class_desc: 常用的PyPi/npm/SDK镜像站\n link_list:\n - name: TUNA\n link: https://mirrors.tuna.tsinghua.edu.cn\n avatar: https://mirrors.tuna.tsinghua.edu.cn/static/img/logo-small.png\n descr: 清华大学开源镜像站\n - name: 豆瓣PYPI源\n link: https://pypi.douban.io/simple\n avatar: https://www.douban.com/favicon.ico\n descr: 豆瓣PYPI镜像站\n - name: jsDelivr\n link: https://https://github.com/jsdelivr/jsdelivr\n avatar: https://camo.githubusercontent.com/ef61c154fec4fa5b935957f63561fd15bbd7713c9ae381b955a4dadcdc5457a3/68747470733a2f2f7777772e6a7364656c6976722e636f6d2f696d672f69636f6e5f323536783235362e706e67\n descr: jsDelivr静态资源加速(GFW已墙)\n - name: unpkg\n link: https://cdn1.tianli0.top/npm\n avatar: https://cdn1.tianli0.top/npm/favicon.ico\n descr: 另一个静态资源加速CDN(没墙)\n- class_name: 资源下载类\n class_desc: 好用的资源下载/收录站\n link_list:\n - name: MSDN,我告诉你\n link: https://msdn.itellyou.cn\n avatar: https://msdn.itellyou.cn/favicon.ico\n descr: 微软MSDNED2K镜像收录站\n - name: 唧唧Down\n link: https://client.jijidown.com/\n avatar: https://client.jijidown.com/images/favicon.ico\n descr: 下载B站视频\n - name: 无损生活\n link: https://flac.life/\n avatar: https://flac.life/favicon.png\n descr: 免费下载全网绝大部分无损音乐\n - name: 百度网盘简易下载助手\n link: https://greasyfork.org/zh-CN/scripts/418182-%E7%99%BE%E5%BA%A6%E7%BD%91%E7%9B%98%E7%AE%80%E6%98%93%E4%B8%8B%E8%BD%BD%E5%8A%A9%E6%89%8B-%E7%9B%B4%E9%93%BE%E4%B8%8B%E8%BD%BD%E5%A4%8D%E6%B4%BB%E7%89%88\n avatar: /img/rjxm.jpg\n descr: 特别好用的bd网盘破解器(不知道为什么公众号分享很怕敏感词)\n- class_name: 日常工具\n class_desc: 常用日常工具\n link_list:\n - name: 计时器\n link: https://naozhong.net.cn/jishiqi/\n avatar: https://naozhong.net.cn/favicon.ico\n descr: 闹钟网计时器\n- class_name: 图片系列\n class_desc: 关于图片的工具\n link_list:\n - name: Bigjpg\n link: //bigjpg.com\n avatar: https://bigjpg.com/favicon.ico\n descr: 高清修复图片与降噪\n - name: waifu2x\n link: //waifu2x.io\n avatar: https://baidu.com\n descr: 高清修复图片与降噪,性能貌似好一点\n - name: jpgrm\n link: https://jpgrm.com/\n avatar: https://jpgrm.com/htdocs/favicon.ico\n descr: 高清修复图片与降噪\n - name: Sheilds\n link: https://shields.io/\n avatar: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAABE0lEQVR4AWJkAIKkpCQ7TU3NySIiIlosQMCABejbMWAFf//8YXj77vWn27duZWVGz1nKGBYWZiQkJHSIkZGRmwEPCMxiwAt+/fz3/86VL8EAbuiiAKEoiMLwGcHdCQMBiUAlurDErmJ75tmKP8A3oiJyuF6vAxglws+0C5pv81GJaJdzhlWMMJssaaXM3C0CpmSDLAQtgH3BiCIVB2NRMKWEIoXQMBiLgjHGP9nQ+6ZPLgqGgs9xriDovX8A6Jjgw8ZyIigzn5xz+yZ+6O/tsz7Hy8tb/PLlywPAHMOFT/G3LwRc95fxPyerQCojuKwLDLQAGjoJWIzpAw1mw6bB0guHSYyMDBysnO/5hUTTGvM3rQEAI8qCnLiY3O4AAAAASUVORK5CYII=\n descr: 制作Github项目徽章\n - name: 极简壁纸\n link: https://bz.zzzmh.cn/index\n avatar: https://bz.zzzmh.cn/favicon.ico\n descr: 海量高清壁纸美图&二次元图片\n- class_name: 常用测试网站\n class_desc: 测试一些基础功能\n link_list:\n - name: 还没做完呢\n link: https://114514.hentai/\n avatar: //1919810.xxx\n descr: 你瞅啥?还妹做完呢!\n\n{% endflink %}\n","source":"tools/index.md","raw":"---\ntitle: 工具\ndate: 2022-07-13 15:23:02\n---\n{% flink %}\n- class_name: 镜像站\n class_desc: 常用的PyPi/npm/SDK镜像站\n link_list:\n - name: TUNA\n link: https://mirrors.tuna.tsinghua.edu.cn\n avatar: https://mirrors.tuna.tsinghua.edu.cn/static/img/logo-small.png\n descr: 清华大学开源镜像站\n - name: 豆瓣PYPI源\n link: https://pypi.douban.io/simple\n avatar: https://www.douban.com/favicon.ico\n descr: 豆瓣PYPI镜像站\n - name: jsDelivr\n link: https://https://github.com/jsdelivr/jsdelivr\n avatar: https://camo.githubusercontent.com/ef61c154fec4fa5b935957f63561fd15bbd7713c9ae381b955a4dadcdc5457a3/68747470733a2f2f7777772e6a7364656c6976722e636f6d2f696d672f69636f6e5f323536783235362e706e67\n descr: jsDelivr静态资源加速(GFW已墙)\n - name: unpkg\n link: https://cdn1.tianli0.top/npm\n avatar: https://cdn1.tianli0.top/npm/favicon.ico\n descr: 另一个静态资源加速CDN(没墙)\n- class_name: 资源下载类\n class_desc: 好用的资源下载/收录站\n link_list:\n - name: MSDN,我告诉你\n link: https://msdn.itellyou.cn\n avatar: https://msdn.itellyou.cn/favicon.ico\n descr: 微软MSDNED2K镜像收录站\n - name: 唧唧Down\n link: https://client.jijidown.com/\n avatar: https://client.jijidown.com/images/favicon.ico\n descr: 下载B站视频\n - name: 无损生活\n link: https://flac.life/\n avatar: https://flac.life/favicon.png\n descr: 免费下载全网绝大部分无损音乐\n - name: 百度网盘简易下载助手\n link: https://greasyfork.org/zh-CN/scripts/418182-%E7%99%BE%E5%BA%A6%E7%BD%91%E7%9B%98%E7%AE%80%E6%98%93%E4%B8%8B%E8%BD%BD%E5%8A%A9%E6%89%8B-%E7%9B%B4%E9%93%BE%E4%B8%8B%E8%BD%BD%E5%A4%8D%E6%B4%BB%E7%89%88\n avatar: /img/rjxm.jpg\n descr: 特别好用的bd网盘破解器(不知道为什么公众号分享很怕敏感词)\n- class_name: 日常工具\n class_desc: 常用日常工具\n link_list:\n - name: 计时器\n link: https://naozhong.net.cn/jishiqi/\n avatar: https://naozhong.net.cn/favicon.ico\n descr: 闹钟网计时器\n- class_name: 图片系列\n class_desc: 关于图片的工具\n link_list:\n - name: Bigjpg\n link: //bigjpg.com\n avatar: https://bigjpg.com/favicon.ico\n descr: 高清修复图片与降噪\n - name: waifu2x\n link: //waifu2x.io\n avatar: https://baidu.com\n descr: 高清修复图片与降噪,性能貌似好一点\n - name: jpgrm\n link: https://jpgrm.com/\n avatar: https://jpgrm.com/htdocs/favicon.ico\n descr: 高清修复图片与降噪\n - name: Sheilds\n link: https://shields.io/\n avatar: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAABE0lEQVR4AWJkAIKkpCQ7TU3NySIiIlosQMCABejbMWAFf//8YXj77vWn27duZWVGz1nKGBYWZiQkJHSIkZGRmwEPCMxiwAt+/fz3/86VL8EAbuiiAKEoiMLwGcHdCQMBiUAlurDErmJ75tmKP8A3oiJyuF6vAxglws+0C5pv81GJaJdzhlWMMJssaaXM3C0CpmSDLAQtgH3BiCIVB2NRMKWEIoXQMBiLgjHGP9nQ+6ZPLgqGgs9xriDovX8A6Jjgw8ZyIigzn5xz+yZ+6O/tsz7Hy8tb/PLlywPAHMOFT/G3LwRc95fxPyerQCojuKwLDLQAGjoJWIzpAw1mw6bB0guHSYyMDBysnO/5hUTTGvM3rQEAI8qCnLiY3O4AAAAASUVORK5CYII=\n descr: 制作Github项目徽章\n - name: 极简壁纸\n link: https://bz.zzzmh.cn/index\n avatar: https://bz.zzzmh.cn/favicon.ico\n descr: 海量高清壁纸美图&二次元图片\n- class_name: 常用测试网站\n class_desc: 测试一些基础功能\n link_list:\n - name: 还没做完呢\n link: https://114514.hentai/\n avatar: //1919810.xxx\n descr: 你瞅啥?还妹做完呢!\n\n{% endflink %}\n","updated":"2023-10-21T01:08:55.968Z","path":"tools/index.html","comments":1,"layout":"page","_id":"clo5vyru1002a2j3u7uw97gae","content":"\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":359,"excerpt":"","more":"\n"},{"title":"早报","date":"2022-11-24T23:37:35.000Z","_content":"\n\n\n\n","source":"zaobao/index.md","raw":"---\ntitle: 早报\ndate: 2022-11-25 07:37:35\n---\n\n\n\n\n","updated":"2023-10-24T05:17:23.633Z","path":"zaobao/index.html","comments":1,"layout":"page","_id":"clo5vyru2002e2j3u1nai8883","content":"\n\n\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":0,"excerpt":"","more":"\n\n\n"},{"title":"网站更新日志","date":"2023-10-01T11:56:00.000Z","_content":"\n\n\nCrypTek v1.0.0 2023-10-01\n\n经过了深思熟虑,博客主题独立啦!\n\n现在的主题叫做CrypTek,具体见:\n{% link2 博客正式独立主题啦!,Tankenqiの小窝,yisous.xyz/posts/a1078b2d %}\n\n目前博客有:\n\n1. 更好的右键菜单\n2. 留言弹幕\n3. 博客设置(功能贼多大家自己看)\n4. 不错的UI,至今为止主css(`style.css`)有3k行\n5. 一些小功能比如公祭日弹窗自动欢迎等\n\n大概就是这些了。\n\nAcryple v1.0.110 2022-12-13\n\n1. 加入pwa\n2. 全站采用存储桶加速,可惜并没有卵用\n3. 很多资源转为了白嫖eleme\n4. 抛弃metingjs,目前aplayer的歌曲托管在eleme npm镜像中\n5. 友链添加随机头像\n6. 博客设置画饼的三个功能仍未修复 qwq\n7. 修复一些bug\n8. 大改swiper,参考自[Leonus](https://leonus.cn)\n9. 完成Build101的大部分饼\n10. 修复了朋友圈爬取bug\n11. sw换回cyfan\n12. 套上了灵天盾亚太CDN\n13. 因为性能问题,移除了文章日历\n14. 给导航栏加上滚动动画(画饼)\n15. bb布局重构(画饼)\n16. 分类标签栏bug修复(画饼)\n17. 语雀云端写作(因bug已回滚)\n18. gulp(因bug已回滚)\n19. 文章进度显示(画饼)\n20. 修复pjax的bug\n21. 右键菜单功能完善\n\nAcryple v1.0.101 2022-12-06\n\n*(PS:部分画大饼*\n\n1. 壮举:适配pjax!!!\n2. 修复黑幕的bug\n3. 修复评论弹幕dom错误,溢出的bug\n4. 弹幕换用swiper方案,并且优化样式\n5. 首页bb增加天数显示,以及换用swiper(预计)\n6. 修复一些bug(e.g.aplayer、博客设置\n7. 优化部分动画/样式\n8. 完善博客控制面板,仍有部分未完工\n9. 修复部分文章页面溢出的bug\n10. 悼念某人,banner换图\n11. pace换用[xlenco](https://xlenco.eu.org/posts/769f.html)的胶囊方案\n12. 由于未知特性删除了pjax的加载动画,首次保留\n13. 部分资源换用缤纷云\n14. 换用空梦的sw\n15. 不断优化加载速度ing...\n16. 修复首页轮播bug(预计)\n17. 评论样式修改,预计添加用户tag功能\n18. 更换背景没有时效限制了\n19. 欢迎文本\n20. 左右栏切换\n21. 弹幕开关设置自动显隐\n22. 落樱特效\n23. aplayer显隐功能\n24. 明暗模式自动切换、固定导航栏功能(预计)\n25. 边栏样式修改\n26. 修复点赞第一赞没反应的bug\n27. 修复ghactions部署没有npm缓存的bug~~tnnd我等十几分钟安装依赖等几个月了,结果是顺序反了~~\n28. 目前朋友圈后端出现了bug,导致不更新,请静待修复\n\n![](https://bu.dusays.com/2022/12/06/638f29976b113.png)\n![](https://bu.dusays.com/2022/12/06/638f29976b113.png)\n![](https://bu.dusays.com/2022/12/06/638f29a959659.png)\n\nAcryple v1.0.100 2022-12-04\n\n1. 修复部分bug(不,特性\n2. 优化部分动画/样式\n3. 修改右键菜单\n4. 重写博客设置,并将 `rightside` 的部分功能移动到博客设置中,灵感来源于[ichika](https://ichika.cc)*(未完工*\n5. 支持隐藏 ASide 了\n6. 短暂变灰\n7. 修复公祭日js的bug\n8. 修复右键菜单在主页也能开启阅读模式的bug\n9. 优化手机端阅读体验,去卡片化\n10. 优化latex样式\n11. 修复部分分辨率下无导航栏的bug\n12. aplayer的体验更好了\n13. 优化部分样式,适配部分还未适配的黑暗模式\n14. 加了一个字体\n15. 重写分类和标签、归档页的样式,来源于[ichika](https://ichika.cc/Article/beautiful_MyBeautiful/)\n16. 优化页脚查看体验\n17. 优化网站性能\n18. 支持全屏\n19. css 5k+ qpzc\n20. 解封辣!!!\n21. 究极跳号?!~~CRT18:?!~~\n\n![](https://bu.dusays.com/2022/12/05/638d6b9b8a50f.png)\n\nAcryple v1.0.92\n\n1. 修复部分bug(不,特性\n2. 优化部分样式\n3. 更改了博客设置的部分主题色\n4. pages页面在Acrylic主题下的背景得到了改善\n5. 更改加载页面背景\n6. 重新进行部分断点\n7. 把博客api\\服务全部迁移到了[另一个github账号](https://github.com/cqxflyx)~~(垃圾桶)~~上\n8. 优化搜索UI\n9. 对butterfly4.5.1进行了选择性同步(优化繁体字库)\n10. 疫情退退退awa\n\nAcryple v1.0.91\n\n1. 修复部分bug(不,特性\n2. 为APlayer进行完善\n3. 添加早报、木鱼、空调页面,参考[Chuckle](https://chuckle.top)\n4. 更改关于页面,参考[安知鱼](https://anzhiy.cn)的[教程](https://anzhiy.cn/posts/e62b.html)\n5. 尝试npm全站静态化,最终失败放弃qwq\n6. 优化sw,加载速度略有提升\n7. 新增文章统计\n8. 优化部分样式\n\nAcryple v1.0.81 2022-11-23\n\n1. 修复部分bug(不,特性\n2. 优化性能问题,对弹幕进行了节流\n3. 添加APlayer,可惜没有pjax qwq\n4. 优化弹幕(更洪化了)\n5. 调整网站布局\n6. 修改一些样式\n7. PS:在1.0.51偷偷加了一号字号你们发现没有(doge)\n\n![](https://bu.dusays.com/2022/11/23/637dc9e31b83d.png)\n\n![](https://bu.dusays.com/2022/11/23/637dc909565a5.png)\n\n![](https://bu.dusays.com/2022/11/23/637dc958af6ef.png)\n\n![](https://bu.dusays.com/2022/11/23/637dca595e663.png)\n\nAcryple v1.0.51\n\n1. 修复部分bug(不,特性\n2. 优化性能问题(但是好像还是没毛提升\n3. 换用Twikoo-magic表情包\n4. 为了OI添加$\\textbf{ \\KaTeX}$\n5. 修复跳转链接因原有bug被迫使原页面刷新的bug\n\nAcryple v1.0.14 2022-11-10\n\n1. 修复部分bug(不,特性\n2. 优化性能问题(但是好像还是没毛提升\n3. 增加浏览器过期提醒以及banIE,参考[chuckle](https://chuckle.top/article/e61f6567.html)以及b站\n4. 增加fps显示\n5. 评论表情添加颜文字\n6. 修复手机端侧边栏bug\n\n![1668068215334.png](https://bu.dusays.com/2022/11/10/636cb378cb6f8.png)\n\n![1668068189449.png](https://bu.dusays.com/2022/11/10/636cb35f2f686.png)\n\n![1668068277934.png](https://bu.dusays.com/2022/11/10/636cb3ba2c1af.png)\n\n![1668069244663.png](https://bu.dusays.com/2022/11/10/636cb77e05a3f.png)\n\n![1668068328066.png](https://bu.dusays.com/2022/11/10/636cb3ea2923d.png)\n\nPS:作为一个萌新OIer依然没有考虑发oi文 ╮(╯▽╰)╭ \n\n{% hideToggle 以前的更新日志 %}\n哔哩哔哩 (゜-゜)つロ 干杯!\n\n{% timeline 2022 %}\n\n\n\n终于弄好网站了,庆祝一下🎉\n\nGitalk不知道为什么不显示出来...\n\n\n\n\n\n小更新,修改细节\n\n作者的Html实在太菜了,效果并不好\n\n\n\n\n\n大更新\n\n修改了很多ui\n\n\n\n\n\n大更新\n\n修改细节UI和友链部分,增加吐槽部分\n\n\n\n\n\n小更新,做好一些功能并且写了第一篇文章\n\n\n\n\n\n大更新,更改首页布局,增加首页分区\n\n\n\n\n\n小更新,修改细节,适配手机端,修复bug,说说由Artitalk换为BBtalk\n\n\n\n\n\n前面几天忘记写更新了,更新了很多UI和功能。。。\n\n\n\n\n\n~~前面几天又忘记写更新了~~小小修改了一些布局,把鸽了很久的博客写完了~~并且还加了萌百的黑幕,没有你知道的太多了差评~~\n\n\n\n\n\n~~前面几天又双忘记写更新了~~折腾了很多,加了自己的域名,把你知道的太多了弄出来了,并且修复了很多js的bug,把unpkg换成fastly.jsdelivr或者elemecdn,提升速度(竟然有人加了我友链,怎么知道这个网站的?)\n\n\n\n\n\n~~前面几天又双叒忘记写更新了~~还是折腾了很多,按照冰糖红茶大佬们的方法加了不少东西,比如那个人潮汹涌模拟器(主页的)、文章点赞、无缝跳转等等,换成jsdelivr加速,同时也在最大化利用GoormIDE,不过在险些没有数据之后就尽可能迁移到了其它没有风险的平台。\n\n\n\n最近在糖果屋群友们的建议和帮助下修改了很多功能,以后每隔一段时间都会写详细的日志而不是像前面简单概括了。\n\n1. 留言板的弹幕是真的像b站视频弹幕了,过一段时间修复了bug之后放教程\n2. 新增博客设置,做了一个极简风的主题,支持更换主题色,也可以换回之前的主题,可以禁用模糊效果和开启硬件加速提升性能\n3. 修复了部分排版bug,对safari进行了一些适应,感谢Apple Store和洪哥的帮助。\n4. 增加了hover的缩放效果,有层次感\n5. 优化动画\n6. 修复留言弹幕、右键菜单的bug并且把新版的代码更新到文章中\n7. 优化细节样式\n8. 新增最新文章标记\n9. 总算部署好朋友圈了!leancloud国内版垃圾!\n\n{% endtimeline %}\n{% endhideToggle %}","source":"update/index.md","raw":"---\ntitle: 网站更新日志\ndate: 2023-10-1 19:56:00\n---\n\n\n\nCrypTek v1.0.0 2023-10-01\n\n经过了深思熟虑,博客主题独立啦!\n\n现在的主题叫做CrypTek,具体见:\n{% link2 博客正式独立主题啦!,Tankenqiの小窝,yisous.xyz/posts/a1078b2d %}\n\n目前博客有:\n\n1. 更好的右键菜单\n2. 留言弹幕\n3. 博客设置(功能贼多大家自己看)\n4. 不错的UI,至今为止主css(`style.css`)有3k行\n5. 一些小功能比如公祭日弹窗自动欢迎等\n\n大概就是这些了。\n\nAcryple v1.0.110 2022-12-13\n\n1. 加入pwa\n2. 全站采用存储桶加速,可惜并没有卵用\n3. 很多资源转为了白嫖eleme\n4. 抛弃metingjs,目前aplayer的歌曲托管在eleme npm镜像中\n5. 友链添加随机头像\n6. 博客设置画饼的三个功能仍未修复 qwq\n7. 修复一些bug\n8. 大改swiper,参考自[Leonus](https://leonus.cn)\n9. 完成Build101的大部分饼\n10. 修复了朋友圈爬取bug\n11. sw换回cyfan\n12. 套上了灵天盾亚太CDN\n13. 因为性能问题,移除了文章日历\n14. 给导航栏加上滚动动画(画饼)\n15. bb布局重构(画饼)\n16. 分类标签栏bug修复(画饼)\n17. 语雀云端写作(因bug已回滚)\n18. gulp(因bug已回滚)\n19. 文章进度显示(画饼)\n20. 修复pjax的bug\n21. 右键菜单功能完善\n\nAcryple v1.0.101 2022-12-06\n\n*(PS:部分画大饼*\n\n1. 壮举:适配pjax!!!\n2. 修复黑幕的bug\n3. 修复评论弹幕dom错误,溢出的bug\n4. 弹幕换用swiper方案,并且优化样式\n5. 首页bb增加天数显示,以及换用swiper(预计)\n6. 修复一些bug(e.g.aplayer、博客设置\n7. 优化部分动画/样式\n8. 完善博客控制面板,仍有部分未完工\n9. 修复部分文章页面溢出的bug\n10. 悼念某人,banner换图\n11. pace换用[xlenco](https://xlenco.eu.org/posts/769f.html)的胶囊方案\n12. 由于未知特性删除了pjax的加载动画,首次保留\n13. 部分资源换用缤纷云\n14. 换用空梦的sw\n15. 不断优化加载速度ing...\n16. 修复首页轮播bug(预计)\n17. 评论样式修改,预计添加用户tag功能\n18. 更换背景没有时效限制了\n19. 欢迎文本\n20. 左右栏切换\n21. 弹幕开关设置自动显隐\n22. 落樱特效\n23. aplayer显隐功能\n24. 明暗模式自动切换、固定导航栏功能(预计)\n25. 边栏样式修改\n26. 修复点赞第一赞没反应的bug\n27. 修复ghactions部署没有npm缓存的bug~~tnnd我等十几分钟安装依赖等几个月了,结果是顺序反了~~\n28. 目前朋友圈后端出现了bug,导致不更新,请静待修复\n\n![](https://bu.dusays.com/2022/12/06/638f29976b113.png)\n![](https://bu.dusays.com/2022/12/06/638f29976b113.png)\n![](https://bu.dusays.com/2022/12/06/638f29a959659.png)\n\nAcryple v1.0.100 2022-12-04\n\n1. 修复部分bug(不,特性\n2. 优化部分动画/样式\n3. 修改右键菜单\n4. 重写博客设置,并将 `rightside` 的部分功能移动到博客设置中,灵感来源于[ichika](https://ichika.cc)*(未完工*\n5. 支持隐藏 ASide 了\n6. 短暂变灰\n7. 修复公祭日js的bug\n8. 修复右键菜单在主页也能开启阅读模式的bug\n9. 优化手机端阅读体验,去卡片化\n10. 优化latex样式\n11. 修复部分分辨率下无导航栏的bug\n12. aplayer的体验更好了\n13. 优化部分样式,适配部分还未适配的黑暗模式\n14. 加了一个字体\n15. 重写分类和标签、归档页的样式,来源于[ichika](https://ichika.cc/Article/beautiful_MyBeautiful/)\n16. 优化页脚查看体验\n17. 优化网站性能\n18. 支持全屏\n19. css 5k+ qpzc\n20. 解封辣!!!\n21. 究极跳号?!~~CRT18:?!~~\n\n![](https://bu.dusays.com/2022/12/05/638d6b9b8a50f.png)\n\nAcryple v1.0.92\n\n1. 修复部分bug(不,特性\n2. 优化部分样式\n3. 更改了博客设置的部分主题色\n4. pages页面在Acrylic主题下的背景得到了改善\n5. 更改加载页面背景\n6. 重新进行部分断点\n7. 把博客api\\服务全部迁移到了[另一个github账号](https://github.com/cqxflyx)~~(垃圾桶)~~上\n8. 优化搜索UI\n9. 对butterfly4.5.1进行了选择性同步(优化繁体字库)\n10. 疫情退退退awa\n\nAcryple v1.0.91\n\n1. 修复部分bug(不,特性\n2. 为APlayer进行完善\n3. 添加早报、木鱼、空调页面,参考[Chuckle](https://chuckle.top)\n4. 更改关于页面,参考[安知鱼](https://anzhiy.cn)的[教程](https://anzhiy.cn/posts/e62b.html)\n5. 尝试npm全站静态化,最终失败放弃qwq\n6. 优化sw,加载速度略有提升\n7. 新增文章统计\n8. 优化部分样式\n\nAcryple v1.0.81 2022-11-23\n\n1. 修复部分bug(不,特性\n2. 优化性能问题,对弹幕进行了节流\n3. 添加APlayer,可惜没有pjax qwq\n4. 优化弹幕(更洪化了)\n5. 调整网站布局\n6. 修改一些样式\n7. PS:在1.0.51偷偷加了一号字号你们发现没有(doge)\n\n![](https://bu.dusays.com/2022/11/23/637dc9e31b83d.png)\n\n![](https://bu.dusays.com/2022/11/23/637dc909565a5.png)\n\n![](https://bu.dusays.com/2022/11/23/637dc958af6ef.png)\n\n![](https://bu.dusays.com/2022/11/23/637dca595e663.png)\n\nAcryple v1.0.51\n\n1. 修复部分bug(不,特性\n2. 优化性能问题(但是好像还是没毛提升\n3. 换用Twikoo-magic表情包\n4. 为了OI添加$\\textbf{ \\KaTeX}$\n5. 修复跳转链接因原有bug被迫使原页面刷新的bug\n\nAcryple v1.0.14 2022-11-10\n\n1. 修复部分bug(不,特性\n2. 优化性能问题(但是好像还是没毛提升\n3. 增加浏览器过期提醒以及banIE,参考[chuckle](https://chuckle.top/article/e61f6567.html)以及b站\n4. 增加fps显示\n5. 评论表情添加颜文字\n6. 修复手机端侧边栏bug\n\n![1668068215334.png](https://bu.dusays.com/2022/11/10/636cb378cb6f8.png)\n\n![1668068189449.png](https://bu.dusays.com/2022/11/10/636cb35f2f686.png)\n\n![1668068277934.png](https://bu.dusays.com/2022/11/10/636cb3ba2c1af.png)\n\n![1668069244663.png](https://bu.dusays.com/2022/11/10/636cb77e05a3f.png)\n\n![1668068328066.png](https://bu.dusays.com/2022/11/10/636cb3ea2923d.png)\n\nPS:作为一个萌新OIer依然没有考虑发oi文 ╮(╯▽╰)╭ \n\n{% hideToggle 以前的更新日志 %}\n哔哩哔哩 (゜-゜)つロ 干杯!\n\n{% timeline 2022 %}\n\n\n\n终于弄好网站了,庆祝一下🎉\n\nGitalk不知道为什么不显示出来...\n\n\n\n\n\n小更新,修改细节\n\n作者的Html实在太菜了,效果并不好\n\n\n\n\n\n大更新\n\n修改了很多ui\n\n\n\n\n\n大更新\n\n修改细节UI和友链部分,增加吐槽部分\n\n\n\n\n\n小更新,做好一些功能并且写了第一篇文章\n\n\n\n\n\n大更新,更改首页布局,增加首页分区\n\n\n\n\n\n小更新,修改细节,适配手机端,修复bug,说说由Artitalk换为BBtalk\n\n\n\n\n\n前面几天忘记写更新了,更新了很多UI和功能。。。\n\n\n\n\n\n~~前面几天又忘记写更新了~~小小修改了一些布局,把鸽了很久的博客写完了~~并且还加了萌百的黑幕,没有你知道的太多了差评~~\n\n\n\n\n\n~~前面几天又双忘记写更新了~~折腾了很多,加了自己的域名,把你知道的太多了弄出来了,并且修复了很多js的bug,把unpkg换成fastly.jsdelivr或者elemecdn,提升速度(竟然有人加了我友链,怎么知道这个网站的?)\n\n\n\n\n\n~~前面几天又双叒忘记写更新了~~还是折腾了很多,按照冰糖红茶大佬们的方法加了不少东西,比如那个人潮汹涌模拟器(主页的)、文章点赞、无缝跳转等等,换成jsdelivr加速,同时也在最大化利用GoormIDE,不过在险些没有数据之后就尽可能迁移到了其它没有风险的平台。\n\n\n\n最近在糖果屋群友们的建议和帮助下修改了很多功能,以后每隔一段时间都会写详细的日志而不是像前面简单概括了。\n\n1. 留言板的弹幕是真的像b站视频弹幕了,过一段时间修复了bug之后放教程\n2. 新增博客设置,做了一个极简风的主题,支持更换主题色,也可以换回之前的主题,可以禁用模糊效果和开启硬件加速提升性能\n3. 修复了部分排版bug,对safari进行了一些适应,感谢Apple Store和洪哥的帮助。\n4. 增加了hover的缩放效果,有层次感\n5. 优化动画\n6. 修复留言弹幕、右键菜单的bug并且把新版的代码更新到文章中\n7. 优化细节样式\n8. 新增最新文章标记\n9. 总算部署好朋友圈了!leancloud国内版垃圾!\n\n{% endtimeline %}\n{% endhideToggle %}","updated":"2023-10-22T02:49:39.862Z","path":"update/index.html","comments":1,"layout":"page","_id":"clo5vyru2002h2j3u4pupclq5","content":"\n

CrypTek v1.0.0 2023-10-01

\n

经过了深思熟虑,博客主题独立啦!

\n

现在的主题叫做CrypTek,具体见:

\n\n \n \n \n

目前博客有:

\n
    \n
  1. 更好的右键菜单
  2. \n
  3. 留言弹幕
  4. \n
  5. 博客设置(功能贼多大家自己看)
  6. \n
  7. 不错的UI,至今为止主css(style.css)有3k行
  8. \n
  9. 一些小功能比如公祭日弹窗自动欢迎等
  10. \n
\n

大概就是这些了。

\n

Acryple v1.0.110 2022-12-13

\n
    \n
  1. 加入pwa
  2. \n
  3. 全站采用存储桶加速,可惜并没有卵用
  4. \n
  5. 很多资源转为了白嫖eleme
  6. \n
  7. 抛弃metingjs,目前aplayer的歌曲托管在eleme npm镜像中
  8. \n
  9. 友链添加随机头像
  10. \n
  11. 博客设置画饼的三个功能仍未修复 qwq
  12. \n
  13. 修复一些bug
  14. \n
  15. 大改swiper,参考自Leonus
  16. \n
  17. 完成Build101的大部分饼
  18. \n
  19. 修复了朋友圈爬取bug
  20. \n
  21. sw换回cyfan
  22. \n
  23. 套上了灵天盾亚太CDN
  24. \n
  25. 因为性能问题,移除了文章日历
  26. \n
  27. 给导航栏加上滚动动画(画饼)
  28. \n
  29. bb布局重构(画饼)
  30. \n
  31. 分类标签栏bug修复(画饼)
  32. \n
  33. 语雀云端写作(因bug已回滚)
  34. \n
  35. gulp(因bug已回滚)
  36. \n
  37. 文章进度显示(画饼)
  38. \n
  39. 修复pjax的bug
  40. \n
  41. 右键菜单功能完善
  42. \n
\n

Acryple v1.0.101 2022-12-06

\n

(PS:部分画大饼

\n
    \n
  1. 壮举:适配pjax!!!
  2. \n
  3. 修复黑幕的bug
  4. \n
  5. 修复评论弹幕dom错误,溢出的bug
  6. \n
  7. 弹幕换用swiper方案,并且优化样式
  8. \n
  9. 首页bb增加天数显示,以及换用swiper(预计)
  10. \n
  11. 修复一些bug(e.g.aplayer、博客设置
  12. \n
  13. 优化部分动画/样式
  14. \n
  15. 完善博客控制面板,仍有部分未完工
  16. \n
  17. 修复部分文章页面溢出的bug
  18. \n
  19. 悼念某人,banner换图
  20. \n
  21. pace换用xlenco的胶囊方案
  22. \n
  23. 由于未知特性删除了pjax的加载动画,首次保留
  24. \n
  25. 部分资源换用缤纷云
  26. \n
  27. 换用空梦的sw
  28. \n
  29. 不断优化加载速度ing…
  30. \n
  31. 修复首页轮播bug(预计)
  32. \n
  33. 评论样式修改,预计添加用户tag功能
  34. \n
  35. 更换背景没有时效限制了
  36. \n
  37. 欢迎文本
  38. \n
  39. 左右栏切换
  40. \n
  41. 弹幕开关设置自动显隐
  42. \n
  43. 落樱特效
  44. \n
  45. aplayer显隐功能
  46. \n
  47. 明暗模式自动切换、固定导航栏功能(预计)
  48. \n
  49. 边栏样式修改
  50. \n
  51. 修复点赞第一赞没反应的bug
  52. \n
  53. 修复ghactions部署没有npm缓存的bugtnnd我等十几分钟安装依赖等几个月了,结果是顺序反了
  54. \n
  55. 目前朋友圈后端出现了bug,导致不更新,请静待修复
  56. \n
\n

\"\"
\n\"\"
\n\"\"

\n

Acryple v1.0.100 2022-12-04

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化部分动画/样式
  4. \n
  5. 修改右键菜单
  6. \n
  7. 重写博客设置,并将 rightside 的部分功能移动到博客设置中,灵感来源于ichika(未完工
  8. \n
  9. 支持隐藏 ASide 了
  10. \n
  11. 短暂变灰
  12. \n
  13. 修复公祭日js的bug
  14. \n
  15. 修复右键菜单在主页也能开启阅读模式的bug
  16. \n
  17. 优化手机端阅读体验,去卡片化
  18. \n
  19. 优化latex样式
  20. \n
  21. 修复部分分辨率下无导航栏的bug
  22. \n
  23. aplayer的体验更好了
  24. \n
  25. 优化部分样式,适配部分还未适配的黑暗模式
  26. \n
  27. 加了一个字体
  28. \n
  29. 重写分类和标签、归档页的样式,来源于ichika
  30. \n
  31. 优化页脚查看体验
  32. \n
  33. 优化网站性能
  34. \n
  35. 支持全屏
  36. \n
  37. css 5k+ qpzc
  38. \n
  39. 解封辣!!!
  40. \n
  41. 究极跳号?!CRT18:?!
  42. \n
\n

\"\"

\n

Acryple v1.0.92

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化部分样式
  4. \n
  5. 更改了博客设置的部分主题色
  6. \n
  7. pages页面在Acrylic主题下的背景得到了改善
  8. \n
  9. 更改加载页面背景
  10. \n
  11. 重新进行部分断点
  12. \n
  13. 把博客api\\服务全部迁移到了另一个github账号~~(垃圾桶)~~上
  14. \n
  15. 优化搜索UI
  16. \n
  17. 对butterfly4.5.1进行了选择性同步(优化繁体字库)
  18. \n
  19. 疫情退退退awa
  20. \n
\n

Acryple v1.0.91

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 为APlayer进行完善
  4. \n
  5. 添加早报、木鱼、空调页面,参考Chuckle
  6. \n
  7. 更改关于页面,参考安知鱼教程
  8. \n
  9. 尝试npm全站静态化,最终失败放弃qwq
  10. \n
  11. 优化sw,加载速度略有提升
  12. \n
  13. 新增文章统计
  14. \n
  15. 优化部分样式
  16. \n
\n

Acryple v1.0.81 2022-11-23

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化性能问题,对弹幕进行了节流
  4. \n
  5. 添加APlayer,可惜没有pjax qwq
  6. \n
  7. 优化弹幕(更洪化了)
  8. \n
  9. 调整网站布局
  10. \n
  11. 修改一些样式
  12. \n
  13. PS:在1.0.51偷偷加了一号字号你们发现没有(doge)
  14. \n
\n

\"\"

\n

\"\"

\n

\"\"

\n

\"\"

\n

Acryple v1.0.51

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化性能问题(但是好像还是没毛提升
  4. \n
  5. 换用Twikoo-magic表情包
  6. \n
  7. 为了OI添加 KaTeX\\textbf{ \\KaTeX} KATEX
  8. \n
  9. 修复跳转链接因原有bug被迫使原页面刷新的bug
  10. \n
\n

Acryple v1.0.14 2022-11-10

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化性能问题(但是好像还是没毛提升
  4. \n
  5. 增加浏览器过期提醒以及banIE,参考chuckle以及b站
  6. \n
  7. 增加fps显示
  8. \n
  9. 评论表情添加颜文字
  10. \n
  11. 修复手机端侧边栏bug
  12. \n
\n

\"1668068215334.png\"

\n

\"1668068189449.png\"

\n

\"1668068277934.png\"

\n

\"1668069244663.png\"

\n

\"1668068328066.png\"

\n

PS:作为一个萌新OIer依然没有考虑发oi文 ╮(╯▽╰)╭

\n
以前的更新日志

哔哩哔哩 (゜-゜)つロ 干杯!

\n

2022

\n

07-02

\n

终于弄好网站了,庆祝一下🎉

\n

Gitalk不知道为什么不显示出来…

\n

07-03

\n

小更新,修改细节

\n

作者的Html实在太菜了,效果并不好

\n

07-04

\n

大更新

\n

修改了很多ui

\n

07-05

\n

大更新

\n

修改细节UI和友链部分,增加吐槽部分

\n

07-06

\n

小更新,做好一些功能并且写了第一篇文章

\n

07-08

\n

大更新,更改首页布局,增加首页分区

\n

07-09

\n

小更新,修改细节,适配手机端,修复bug,说说由Artitalk换为BBtalk

\n

07-14

\n

前面几天忘记写更新了,更新了很多UI和功能。。。

\n

07-18

\n

前面几天又忘记写更新了小小修改了一些布局,把鸽了很久的博客写完了并且还加了萌百的黑幕,没有你知道的太多了差评

\n

07-22

\n

前面几天又双忘记写更新了折腾了很多,加了自己的域名,把你知道的太多了弄出来了,并且修复了很多js的bug,把unpkg换成fastly.jsdelivr或者elemecdn,提升速度(竟然有人加了我友链,怎么知道这个网站的?)

\n

08-12

\n

前面几天又双叒忘记写更新了还是折腾了很多,按照冰糖红茶大佬们的方法加了不少东西,比如那个人潮汹涌模拟器(主页的)、文章点赞、无缝跳转等等,换成jsdelivr加速,同时也在最大化利用GoormIDE,不过在险些没有数据之后就尽可能迁移到了其它没有风险的平台。

\n

08-25

\n

最近在糖果屋群友们的建议和帮助下修改了很多功能,以后每隔一段时间都会写详细的日志而不是像前面简单概括了。

\n
    \n
  1. 留言板的弹幕是真的像b站视频弹幕了,过一段时间修复了bug之后放教程
  2. \n
  3. 新增博客设置,做了一个极简风的主题,支持更换主题色,也可以换回之前的主题,可以禁用模糊效果和开启硬件加速提升性能
  4. \n
  5. 修复了部分排版bug,对safari进行了一些适应,感谢Apple Store和洪哥的帮助。
  6. \n
  7. 增加了hover的缩放效果,有层次感
  8. \n
  9. 优化动画
  10. \n
  11. 修复留言弹幕、右键菜单的bug并且把新版的代码更新到文章中
  12. \n
  13. 优化细节样式
  14. \n
  15. 新增最新文章标记
  16. \n
  17. 总算部署好朋友圈了!leancloud国内版垃圾!
  18. \n
\n
","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"cover":"https://api.vvhan.com/api/acgimg","length":2736,"excerpt":"","more":"\n

CrypTek v1.0.0 2023-10-01

\n

经过了深思熟虑,博客主题独立啦!

\n

现在的主题叫做CrypTek,具体见:

\n\n \n \n \n

目前博客有:

\n
    \n
  1. 更好的右键菜单
  2. \n
  3. 留言弹幕
  4. \n
  5. 博客设置(功能贼多大家自己看)
  6. \n
  7. 不错的UI,至今为止主css(style.css)有3k行
  8. \n
  9. 一些小功能比如公祭日弹窗自动欢迎等
  10. \n
\n

大概就是这些了。

\n

Acryple v1.0.110 2022-12-13

\n
    \n
  1. 加入pwa
  2. \n
  3. 全站采用存储桶加速,可惜并没有卵用
  4. \n
  5. 很多资源转为了白嫖eleme
  6. \n
  7. 抛弃metingjs,目前aplayer的歌曲托管在eleme npm镜像中
  8. \n
  9. 友链添加随机头像
  10. \n
  11. 博客设置画饼的三个功能仍未修复 qwq
  12. \n
  13. 修复一些bug
  14. \n
  15. 大改swiper,参考自Leonus
  16. \n
  17. 完成Build101的大部分饼
  18. \n
  19. 修复了朋友圈爬取bug
  20. \n
  21. sw换回cyfan
  22. \n
  23. 套上了灵天盾亚太CDN
  24. \n
  25. 因为性能问题,移除了文章日历
  26. \n
  27. 给导航栏加上滚动动画(画饼)
  28. \n
  29. bb布局重构(画饼)
  30. \n
  31. 分类标签栏bug修复(画饼)
  32. \n
  33. 语雀云端写作(因bug已回滚)
  34. \n
  35. gulp(因bug已回滚)
  36. \n
  37. 文章进度显示(画饼)
  38. \n
  39. 修复pjax的bug
  40. \n
  41. 右键菜单功能完善
  42. \n
\n

Acryple v1.0.101 2022-12-06

\n

(PS:部分画大饼

\n
    \n
  1. 壮举:适配pjax!!!
  2. \n
  3. 修复黑幕的bug
  4. \n
  5. 修复评论弹幕dom错误,溢出的bug
  6. \n
  7. 弹幕换用swiper方案,并且优化样式
  8. \n
  9. 首页bb增加天数显示,以及换用swiper(预计)
  10. \n
  11. 修复一些bug(e.g.aplayer、博客设置
  12. \n
  13. 优化部分动画/样式
  14. \n
  15. 完善博客控制面板,仍有部分未完工
  16. \n
  17. 修复部分文章页面溢出的bug
  18. \n
  19. 悼念某人,banner换图
  20. \n
  21. pace换用xlenco的胶囊方案
  22. \n
  23. 由于未知特性删除了pjax的加载动画,首次保留
  24. \n
  25. 部分资源换用缤纷云
  26. \n
  27. 换用空梦的sw
  28. \n
  29. 不断优化加载速度ing…
  30. \n
  31. 修复首页轮播bug(预计)
  32. \n
  33. 评论样式修改,预计添加用户tag功能
  34. \n
  35. 更换背景没有时效限制了
  36. \n
  37. 欢迎文本
  38. \n
  39. 左右栏切换
  40. \n
  41. 弹幕开关设置自动显隐
  42. \n
  43. 落樱特效
  44. \n
  45. aplayer显隐功能
  46. \n
  47. 明暗模式自动切换、固定导航栏功能(预计)
  48. \n
  49. 边栏样式修改
  50. \n
  51. 修复点赞第一赞没反应的bug
  52. \n
  53. 修复ghactions部署没有npm缓存的bugtnnd我等十几分钟安装依赖等几个月了,结果是顺序反了
  54. \n
  55. 目前朋友圈后端出现了bug,导致不更新,请静待修复
  56. \n
\n

\"\"
\n\"\"
\n\"\"

\n

Acryple v1.0.100 2022-12-04

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化部分动画/样式
  4. \n
  5. 修改右键菜单
  6. \n
  7. 重写博客设置,并将 rightside 的部分功能移动到博客设置中,灵感来源于ichika(未完工
  8. \n
  9. 支持隐藏 ASide 了
  10. \n
  11. 短暂变灰
  12. \n
  13. 修复公祭日js的bug
  14. \n
  15. 修复右键菜单在主页也能开启阅读模式的bug
  16. \n
  17. 优化手机端阅读体验,去卡片化
  18. \n
  19. 优化latex样式
  20. \n
  21. 修复部分分辨率下无导航栏的bug
  22. \n
  23. aplayer的体验更好了
  24. \n
  25. 优化部分样式,适配部分还未适配的黑暗模式
  26. \n
  27. 加了一个字体
  28. \n
  29. 重写分类和标签、归档页的样式,来源于ichika
  30. \n
  31. 优化页脚查看体验
  32. \n
  33. 优化网站性能
  34. \n
  35. 支持全屏
  36. \n
  37. css 5k+ qpzc
  38. \n
  39. 解封辣!!!
  40. \n
  41. 究极跳号?!CRT18:?!
  42. \n
\n

\"\"

\n

Acryple v1.0.92

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化部分样式
  4. \n
  5. 更改了博客设置的部分主题色
  6. \n
  7. pages页面在Acrylic主题下的背景得到了改善
  8. \n
  9. 更改加载页面背景
  10. \n
  11. 重新进行部分断点
  12. \n
  13. 把博客api\\服务全部迁移到了另一个github账号~~(垃圾桶)~~上
  14. \n
  15. 优化搜索UI
  16. \n
  17. 对butterfly4.5.1进行了选择性同步(优化繁体字库)
  18. \n
  19. 疫情退退退awa
  20. \n
\n

Acryple v1.0.91

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 为APlayer进行完善
  4. \n
  5. 添加早报、木鱼、空调页面,参考Chuckle
  6. \n
  7. 更改关于页面,参考安知鱼教程
  8. \n
  9. 尝试npm全站静态化,最终失败放弃qwq
  10. \n
  11. 优化sw,加载速度略有提升
  12. \n
  13. 新增文章统计
  14. \n
  15. 优化部分样式
  16. \n
\n

Acryple v1.0.81 2022-11-23

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化性能问题,对弹幕进行了节流
  4. \n
  5. 添加APlayer,可惜没有pjax qwq
  6. \n
  7. 优化弹幕(更洪化了)
  8. \n
  9. 调整网站布局
  10. \n
  11. 修改一些样式
  12. \n
  13. PS:在1.0.51偷偷加了一号字号你们发现没有(doge)
  14. \n
\n

\"\"

\n

\"\"

\n

\"\"

\n

\"\"

\n

Acryple v1.0.51

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化性能问题(但是好像还是没毛提升
  4. \n
  5. 换用Twikoo-magic表情包
  6. \n
  7. 为了OI添加 KaTeX\\textbf{ \\KaTeX} KATEX
  8. \n
  9. 修复跳转链接因原有bug被迫使原页面刷新的bug
  10. \n
\n

Acryple v1.0.14 2022-11-10

\n
    \n
  1. 修复部分bug(不,特性
  2. \n
  3. 优化性能问题(但是好像还是没毛提升
  4. \n
  5. 增加浏览器过期提醒以及banIE,参考chuckle以及b站
  6. \n
  7. 增加fps显示
  8. \n
  9. 评论表情添加颜文字
  10. \n
  11. 修复手机端侧边栏bug
  12. \n
\n

\"1668068215334.png\"

\n

\"1668068189449.png\"

\n

\"1668068277934.png\"

\n

\"1668069244663.png\"

\n

\"1668068328066.png\"

\n

PS:作为一个萌新OIer依然没有考虑发oi文 ╮(╯▽╰)╭

\n
以前的更新日志

哔哩哔哩 (゜-゜)つロ 干杯!

\n

2022

\n

07-02

\n

终于弄好网站了,庆祝一下🎉

\n

Gitalk不知道为什么不显示出来…

\n

07-03

\n

小更新,修改细节

\n

作者的Html实在太菜了,效果并不好

\n

07-04

\n

大更新

\n

修改了很多ui

\n

07-05

\n

大更新

\n

修改细节UI和友链部分,增加吐槽部分

\n

07-06

\n

小更新,做好一些功能并且写了第一篇文章

\n

07-08

\n

大更新,更改首页布局,增加首页分区

\n

07-09

\n

小更新,修改细节,适配手机端,修复bug,说说由Artitalk换为BBtalk

\n

07-14

\n

前面几天忘记写更新了,更新了很多UI和功能。。。

\n

07-18

\n

前面几天又忘记写更新了小小修改了一些布局,把鸽了很久的博客写完了并且还加了萌百的黑幕,没有你知道的太多了差评

\n

07-22

\n

前面几天又双忘记写更新了折腾了很多,加了自己的域名,把你知道的太多了弄出来了,并且修复了很多js的bug,把unpkg换成fastly.jsdelivr或者elemecdn,提升速度(竟然有人加了我友链,怎么知道这个网站的?)

\n

08-12

\n

前面几天又双叒忘记写更新了还是折腾了很多,按照冰糖红茶大佬们的方法加了不少东西,比如那个人潮汹涌模拟器(主页的)、文章点赞、无缝跳转等等,换成jsdelivr加速,同时也在最大化利用GoormIDE,不过在险些没有数据之后就尽可能迁移到了其它没有风险的平台。

\n

08-25

\n

最近在糖果屋群友们的建议和帮助下修改了很多功能,以后每隔一段时间都会写详细的日志而不是像前面简单概括了。

\n
    \n
  1. 留言板的弹幕是真的像b站视频弹幕了,过一段时间修复了bug之后放教程
  2. \n
  3. 新增博客设置,做了一个极简风的主题,支持更换主题色,也可以换回之前的主题,可以禁用模糊效果和开启硬件加速提升性能
  4. \n
  5. 修复了部分排版bug,对safari进行了一些适应,感谢Apple Store和洪哥的帮助。
  6. \n
  7. 增加了hover的缩放效果,有层次感
  8. \n
  9. 优化动画
  10. \n
  11. 修复留言弹幕、右键菜单的bug并且把新版的代码更新到文章中
  12. \n
  13. 优化细节样式
  14. \n
  15. 新增最新文章标记
  16. \n
  17. 总算部署好朋友圈了!leancloud国内版垃圾!
  18. \n
\n
"}],"Post":[{"abbrlink":"4e1214ce","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3613172890%2C3047148242%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","date":"2023-08-03T14:04:51.000Z","keywords":"grass,安装,centos","swiper_index":3,"title":"Centos安装Grass","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","updated":"2023-10-21T04:51:41.195Z","_content":"## 1 方案一:通过 EPEL 源安装(Centos 8)\n\n### 1.1 安装 EPEL8 源\n\n链接:https://grass.osgeo.org/download/linux/#GRASS-GIS-current\n\n![image-20230507202148758](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507202148758.png)\n\n*安装 EPEL8 源步骤:参考链接:https://blog.csdn.net/Lcongming/article/details/115983236*\n\n- 首先切换到yum仓库源的目录\n\n```BASH\ncd /etc/yum.repos.d/\n```\n\n- 创建文件\n\n```BASH\ntouch epel8.repo\n# 文件内容如下:\n[EPEL]\nname=EPEL\nbaseurl=https://mirrors.cloud.tencent.com/epel/8/Everything/x86_64/ \ngpgcheck=0\n# 需要确保这个链接能打开\n# epel7用这个:https://mirrors.cloud.tencent.com/epel/7/x86_64/\n```\n\n- 执行 yum repolist 读取查看结果,已经都可以读取了\n\n```BASH\nyum repolist\n```\n\n![image-20230507202627273](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507202627273.png)\n\n### 1.2 查看软件库中是否包含 GRASS\n\n```BASH\nyum search grass\n```\n\n![image-20230507202759087](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507202759087.png)\n\n### 1.3 安装 GRASS\n\n```BASH\nyum install grass\n```\n\n```BASH\nError: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: hdf-4.2.14-5.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3(TIRPC_0.3.0)(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libpng16.so.16(PNG16_0)(64bit)\nError: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libc.so.6(GLIBC_2.28)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: wxGTK3-gl-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libreadline.so.7()(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: python3-wx-siplib-api(12)(x86-64) >= 12.7\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libpng16.so.16()(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libc.so.6(GLIBC_2.27)(64bit)\nError: Package: proj-6.3.2-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: PDAL-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: libbsd-0.11.7-2.el8.x86_64 (EPEL)\n Requires: libc.so.6(GLIBC_2.25)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libjson-c.so.4(JSONC_0.14)(64bit)\nError: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: hdf5-1.10.5-4.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpng16.so.16(PNG16_0)(64bit)\nError: Package: hdf5-1.10.5-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: PDAL-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.23)(64bit)\nError: Package: ogdi-4.1.0-1.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3()(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libpng16.so.16(PNG16_0)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libjson-c.so.4()(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.22)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpoppler.so.104()(64bit)\nError: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: python3-dateutil\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libcfitsio.so.7()(64bit)\n Available: cfitsio-3.47-1.el8.x86_64 (EPEL)\n libcfitsio.so.7()(64bit)\n Installed: cfitsio-3.370-10.el7.x86_64 (@epel)\n ~libcfitsio.so.2()(64bit)\nError: Package: hdf-4.2.14-5.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3()(64bit)\nError: Package: proj-6.3.2-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: netcdf-4.7.0-2.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3()(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libdap.so.25()(64bit)\nError: Package: ogdi-4.1.0-1.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3(TIRPC_0.3.0)(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpng16.so.16(PNG16_0)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libgif.so.7()(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libjasper.so.4()(64bit)\nError: Package: proj-epsg-4.8.0-4.el7.x86_64 (@epel)\n Requires: proj = 4.8.0-4.el7\n Removing: proj-4.8.0-4.el7.x86_64 (@epel)\n proj = 4.8.0-4.el7\n Updated By: proj-6.3.2-4.el8.x86_64 (EPEL)\n proj = 6.3.2-4.el8\nError: Package: proj-nad-4.8.0-4.el7.x86_64 (@epel)\n Requires: proj = 4.8.0-4.el7\n Removing: proj-4.8.0-4.el7.x86_64 (@epel)\n proj = 4.8.0-4.el7\n Updated By: proj-6.3.2-4.el8.x86_64 (EPEL)\n proj = 6.3.2-4.el8\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libhistory.so.7()(64bit)\nError: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpng16.so.16()(64bit)\nError: Package: arpack-3.7.0-1.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: proj-6.3.2-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: proj-6.3.2-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libpng16.so.16()(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpng16.so.16()(64bit)\n```\n\n直接 yum 安装 grass 会存在依赖错误的问题,先看报错缺的是什么包,然后通过rpm的方式先把缺的包装好,所有缺的包安装完毕后,就可以通过yum install grass完成grass的安装,缺的包可以在这个网站上找:https://pkgs.org/\n\n![image-20230507203155606](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507203155606.png)\n\n- 假设缺的包是下面这个:\n\n ![image-20230507203400626](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507203400626.png)\n- 点进去,查看这个包的下载地址:\n\n![image-20230507203411137](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507203411137.png)\n\n- 然后通过rpm命令安装这个包:rpm -Uvh 包的URL\n\n```BASH\n# rpm -Uvh 包的URL\nrpm -Uvh https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/glibc-2.28-164.el8.x86_64.rpm\n# 强制安装,忽略依赖错误\n# rpm -Uvh https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/glibc-2.28-164.el8.x86_64.rpm --force --nodeps\n```\n\n- 参考资料:https://blog.csdn.net/fancy_xunbei/article/details/6268441\n\n## 2 方案二:源码编译安装\n\n参考链接:https://www.zhihu.com/zvideo/1496911384683773952\n\n- 下载安装包\n- 解压并进入\n- 开始编译\n\n```BASH\n./configure --prefix=/home/oge/oge-grass\n```\n\n疑难杂症\n\n- GRASS需要针对 zstd 进行编译和链接。查看您尝试的命令(`yum install zstd-devel`),我假设您使用的是RHEL/CentOS7。在CentOS存储库中没有zstd的包-您需要从[EPEL](https://fedoraproject.org/wiki/EPEL)安装它。它应该看起来像这样\n\n![image-20230508084941624](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508084941624.png)\n\n```BASH\nyum install libzstd-devel\n```\n\n![image-20230508084900049](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508084900049.png)\n\n```BASH\nwhereis gdal-config\n# 然后再在编译时指定依赖的位置\n./configure --with-gdal=/usr/local/bin/gdal-config --prefix=/home/oge/oge-grass\n```\n\n![image-20230508090349691](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508090349691.png)\n\n```BASH\nyum install PNG-devel\n```\n\n![image-20230508090437991](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508090437991.png)\n\n```BASH\nyum install fftw-devel\n```\n\n![image-20230508090610207](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508090610207.png)\n\n```BASH\nyum install cairo-devel\n```\n\n![image-20230508091746038](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508091746038.png)\n\n```BASH\nyum install freetype-devel\n```\n\n- ......\n\n## 3 方案三: Docker镜像方式安装 (推荐)\n\n- grass docker 镜像:https://grass.osgeo.org/download/docker/\n\n![image-20230508194802552](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508194802552.png)\n\n- 创建容器\n","source":"_posts/Centos安装Grass.md","raw":"---\nabbrlink: 4e1214ce\ncategories:\n- GIS\ncover: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3613172890%2C3047148242%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG\ndate: '2023-08-03T22:04:51+08:00'\nkeywords: grass,安装,centos\nswiper_index: 3\ntags:\n- 遥感\n- GIS\n- 软件安装\ntitle: Centos安装Grass\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nupdated: 2023-9-3T14:59:29.426+8:0\n---\n## 1 方案一:通过 EPEL 源安装(Centos 8)\n\n### 1.1 安装 EPEL8 源\n\n链接:https://grass.osgeo.org/download/linux/#GRASS-GIS-current\n\n![image-20230507202148758](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507202148758.png)\n\n*安装 EPEL8 源步骤:参考链接:https://blog.csdn.net/Lcongming/article/details/115983236*\n\n- 首先切换到yum仓库源的目录\n\n```BASH\ncd /etc/yum.repos.d/\n```\n\n- 创建文件\n\n```BASH\ntouch epel8.repo\n# 文件内容如下:\n[EPEL]\nname=EPEL\nbaseurl=https://mirrors.cloud.tencent.com/epel/8/Everything/x86_64/ \ngpgcheck=0\n# 需要确保这个链接能打开\n# epel7用这个:https://mirrors.cloud.tencent.com/epel/7/x86_64/\n```\n\n- 执行 yum repolist 读取查看结果,已经都可以读取了\n\n```BASH\nyum repolist\n```\n\n![image-20230507202627273](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507202627273.png)\n\n### 1.2 查看软件库中是否包含 GRASS\n\n```BASH\nyum search grass\n```\n\n![image-20230507202759087](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507202759087.png)\n\n### 1.3 安装 GRASS\n\n```BASH\nyum install grass\n```\n\n```BASH\nError: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: hdf-4.2.14-5.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3(TIRPC_0.3.0)(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libpng16.so.16(PNG16_0)(64bit)\nError: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libc.so.6(GLIBC_2.28)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: wxGTK3-gl-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libreadline.so.7()(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: python3-wx-siplib-api(12)(x86-64) >= 12.7\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libpng16.so.16()(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libc.so.6(GLIBC_2.27)(64bit)\nError: Package: proj-6.3.2-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: PDAL-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: libbsd-0.11.7-2.el8.x86_64 (EPEL)\n Requires: libc.so.6(GLIBC_2.25)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libjson-c.so.4(JSONC_0.14)(64bit)\nError: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: hdf5-1.10.5-4.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpng16.so.16(PNG16_0)(64bit)\nError: Package: hdf5-1.10.5-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: PDAL-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.23)(64bit)\nError: Package: ogdi-4.1.0-1.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3()(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libpng16.so.16(PNG16_0)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libjson-c.so.4()(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.22)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpoppler.so.104()(64bit)\nError: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: python3-dateutil\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libcfitsio.so.7()(64bit)\n Available: cfitsio-3.47-1.el8.x86_64 (EPEL)\n libcfitsio.so.7()(64bit)\n Installed: cfitsio-3.370-10.el7.x86_64 (@epel)\n ~libcfitsio.so.2()(64bit)\nError: Package: hdf-4.2.14-5.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3()(64bit)\nError: Package: proj-6.3.2-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: netcdf-4.7.0-2.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3()(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libdap.so.25()(64bit)\nError: Package: ogdi-4.1.0-1.el8.x86_64 (EPEL)\n Requires: libtirpc.so.3(TIRPC_0.3.0)(64bit)\nError: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpng16.so.16(PNG16_0)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libgif.so.7()(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libjasper.so.4()(64bit)\nError: Package: proj-epsg-4.8.0-4.el7.x86_64 (@epel)\n Requires: proj = 4.8.0-4.el7\n Removing: proj-4.8.0-4.el7.x86_64 (@epel)\n proj = 4.8.0-4.el7\n Updated By: proj-6.3.2-4.el8.x86_64 (EPEL)\n proj = 6.3.2-4.el8\nError: Package: proj-nad-4.8.0-4.el7.x86_64 (@epel)\n Requires: proj = 4.8.0-4.el7\n Removing: proj-4.8.0-4.el7.x86_64 (@epel)\n proj = 4.8.0-4.el7\n Updated By: proj-6.3.2-4.el8.x86_64 (EPEL)\n proj = 6.3.2-4.el8\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libhistory.so.7()(64bit)\nError: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpng16.so.16()(64bit)\nError: Package: arpack-3.7.0-1.el8.x86_64 (EPEL)\n Requires: libm.so.6(GLIBC_2.27)(64bit)\nError: Package: proj-6.3.2-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)\nError: Package: proj-6.3.2-4.el8.x86_64 (EPEL)\n Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)\nError: Package: grass-7.8.7-1.el8.x86_64 (EPEL)\n Requires: libpng16.so.16()(64bit)\nError: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)\n Requires: libpng16.so.16()(64bit)\n```\n\n直接 yum 安装 grass 会存在依赖错误的问题,先看报错缺的是什么包,然后通过rpm的方式先把缺的包装好,所有缺的包安装完毕后,就可以通过yum install grass完成grass的安装,缺的包可以在这个网站上找:https://pkgs.org/\n\n![image-20230507203155606](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507203155606.png)\n\n- 假设缺的包是下面这个:\n\n ![image-20230507203400626](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507203400626.png)\n- 点进去,查看这个包的下载地址:\n\n![image-20230507203411137](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230507203411137.png)\n\n- 然后通过rpm命令安装这个包:rpm -Uvh 包的URL\n\n```BASH\n# rpm -Uvh 包的URL\nrpm -Uvh https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/glibc-2.28-164.el8.x86_64.rpm\n# 强制安装,忽略依赖错误\n# rpm -Uvh https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/glibc-2.28-164.el8.x86_64.rpm --force --nodeps\n```\n\n- 参考资料:https://blog.csdn.net/fancy_xunbei/article/details/6268441\n\n## 2 方案二:源码编译安装\n\n参考链接:https://www.zhihu.com/zvideo/1496911384683773952\n\n- 下载安装包\n- 解压并进入\n- 开始编译\n\n```BASH\n./configure --prefix=/home/oge/oge-grass\n```\n\n疑难杂症\n\n- GRASS需要针对 zstd 进行编译和链接。查看您尝试的命令(`yum install zstd-devel`),我假设您使用的是RHEL/CentOS7。在CentOS存储库中没有zstd的包-您需要从[EPEL](https://fedoraproject.org/wiki/EPEL)安装它。它应该看起来像这样\n\n![image-20230508084941624](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508084941624.png)\n\n```BASH\nyum install libzstd-devel\n```\n\n![image-20230508084900049](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508084900049.png)\n\n```BASH\nwhereis gdal-config\n# 然后再在编译时指定依赖的位置\n./configure --with-gdal=/usr/local/bin/gdal-config --prefix=/home/oge/oge-grass\n```\n\n![image-20230508090349691](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508090349691.png)\n\n```BASH\nyum install PNG-devel\n```\n\n![image-20230508090437991](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508090437991.png)\n\n```BASH\nyum install fftw-devel\n```\n\n![image-20230508090610207](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508090610207.png)\n\n```BASH\nyum install cairo-devel\n```\n\n![image-20230508091746038](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508091746038.png)\n\n```BASH\nyum install freetype-devel\n```\n\n- ......\n\n## 3 方案三: Docker镜像方式安装 (推荐)\n\n- grass docker 镜像:https://grass.osgeo.org/download/docker/\n\n![image-20230508194802552](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230508194802552.png)\n\n- 创建容器\n","slug":"Centos安装Grass","published":1,"comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyrtm00012j3ugcub3tgw","content":"

1 方案一:通过 EPEL 源安装(Centos 8)

\n

1.1 安装 EPEL8 源

\n

链接:https://grass.osgeo.org/download/linux/#GRASS-GIS-current

\n

\"image-20230507202148758\"

\n

安装 EPEL8 源步骤:参考链接:https://blog.csdn.net/Lcongming/article/details/115983236

\n
    \n
  • 首先切换到yum仓库源的目录
  • \n
\n
1
cd /etc/yum.repos.d/
\n
    \n
  • 创建文件
  • \n
\n
1
2
3
4
5
6
7
8
touch epel8.repo
# 文件内容如下:
[EPEL]
name=EPEL
baseurl=https://mirrors.cloud.tencent.com/epel/8/Everything/x86_64/
gpgcheck=0
# 需要确保这个链接能打开
# epel7用这个:https://mirrors.cloud.tencent.com/epel/7/x86_64/
\n
    \n
  • 执行 yum repolist 读取查看结果,已经都可以读取了
  • \n
\n
1
yum repolist
\n

\"image-20230507202627273\"

\n

1.2 查看软件库中是否包含 GRASS

\n
1
yum search grass
\n

\"image-20230507202759087\"

\n

1.3 安装 GRASS

\n
1
yum install grass
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
Error: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: hdf-4.2.14-5.el8.x86_64 (EPEL)
Requires: libtirpc.so.3(TIRPC_0.3.0)(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)
Requires: libpng16.so.16(PNG16_0)(64bit)
Error: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libc.so.6(GLIBC_2.28)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: wxGTK3-gl-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libreadline.so.7()(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: python3-wx-siplib-api(12)(x86-64) >= 12.7
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)
Requires: libpng16.so.16()(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libc.so.6(GLIBC_2.27)(64bit)
Error: Package: proj-6.3.2-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: PDAL-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: libbsd-0.11.7-2.el8.x86_64 (EPEL)
Requires: libc.so.6(GLIBC_2.25)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libjson-c.so.4(JSONC_0.14)(64bit)
Error: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: hdf5-1.10.5-4.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpng16.so.16(PNG16_0)(64bit)
Error: Package: hdf5-1.10.5-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: PDAL-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.23)(64bit)
Error: Package: ogdi-4.1.0-1.el8.x86_64 (EPEL)
Requires: libtirpc.so.3()(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libpng16.so.16(PNG16_0)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libjson-c.so.4()(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.22)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpoppler.so.104()(64bit)
Error: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: python3-dateutil
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libcfitsio.so.7()(64bit)
Available: cfitsio-3.47-1.el8.x86_64 (EPEL)
libcfitsio.so.7()(64bit)
Installed: cfitsio-3.370-10.el7.x86_64 (@epel)
~libcfitsio.so.2()(64bit)
Error: Package: hdf-4.2.14-5.el8.x86_64 (EPEL)
Requires: libtirpc.so.3()(64bit)
Error: Package: proj-6.3.2-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: netcdf-4.7.0-2.el8.x86_64 (EPEL)
Requires: libtirpc.so.3()(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libdap.so.25()(64bit)
Error: Package: ogdi-4.1.0-1.el8.x86_64 (EPEL)
Requires: libtirpc.so.3(TIRPC_0.3.0)(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpng16.so.16(PNG16_0)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libgif.so.7()(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libjasper.so.4()(64bit)
Error: Package: proj-epsg-4.8.0-4.el7.x86_64 (@epel)
Requires: proj = 4.8.0-4.el7
Removing: proj-4.8.0-4.el7.x86_64 (@epel)
proj = 4.8.0-4.el7
Updated By: proj-6.3.2-4.el8.x86_64 (EPEL)
proj = 6.3.2-4.el8
Error: Package: proj-nad-4.8.0-4.el7.x86_64 (@epel)
Requires: proj = 4.8.0-4.el7
Removing: proj-4.8.0-4.el7.x86_64 (@epel)
proj = 4.8.0-4.el7
Updated By: proj-6.3.2-4.el8.x86_64 (EPEL)
proj = 6.3.2-4.el8
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libhistory.so.7()(64bit)
Error: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpng16.so.16()(64bit)
Error: Package: arpack-3.7.0-1.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: proj-6.3.2-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: proj-6.3.2-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libpng16.so.16()(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpng16.so.16()(64bit)
\n

直接 yum 安装 grass 会存在依赖错误的问题,先看报错缺的是什么包,然后通过rpm的方式先把缺的包装好,所有缺的包安装完毕后,就可以通过yum install grass完成grass的安装,缺的包可以在这个网站上找:https://pkgs.org/

\n

\"image-20230507203155606\"

\n
    \n
  • \n

    假设缺的包是下面这个:

    \n

    \"image-20230507203400626\"

    \n
  • \n
  • \n

    点进去,查看这个包的下载地址:

    \n
  • \n
\n

\"image-20230507203411137\"

\n
    \n
  • 然后通过rpm命令安装这个包:rpm -Uvh 包的URL
  • \n
\n
1
2
3
4
# rpm -Uvh 包的URL
rpm -Uvh https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/glibc-2.28-164.el8.x86_64.rpm
# 强制安装,忽略依赖错误
# rpm -Uvh https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/glibc-2.28-164.el8.x86_64.rpm --force --nodeps
\n\n

2 方案二:源码编译安装

\n

参考链接:https://www.zhihu.com/zvideo/1496911384683773952

\n
    \n
  • 下载安装包
  • \n
  • 解压并进入
  • \n
  • 开始编译
  • \n
\n
1
./configure --prefix=/home/oge/oge-grass
\n

疑难杂症

\n
    \n
  • GRASS需要针对 zstd 进行编译和链接。查看您尝试的命令(yum install zstd-devel),我假设您使用的是RHEL/CentOS7。在CentOS存储库中没有zstd的包-您需要从EPEL安装它。它应该看起来像这样
  • \n
\n

\"image-20230508084941624\"

\n
1
yum install libzstd-devel
\n

\"image-20230508084900049\"

\n
1
2
3
whereis gdal-config
# 然后再在编译时指定依赖的位置
./configure --with-gdal=/usr/local/bin/gdal-config --prefix=/home/oge/oge-grass
\n

\"image-20230508090349691\"

\n
1
yum install PNG-devel
\n

\"image-20230508090437991\"

\n
1
yum install fftw-devel
\n

\"image-20230508090610207\"

\n
1
yum install cairo-devel
\n

\"image-20230508091746038\"

\n
1
yum install freetype-devel
\n
    \n
  • \n
\n

3 方案三: Docker镜像方式安装 (推荐)

\n\n

\"image-20230508194802552\"

\n
    \n
  • 创建容器
  • \n
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":7730,"excerpt":"","more":"

1 方案一:通过 EPEL 源安装(Centos 8)

\n

1.1 安装 EPEL8 源

\n

链接:https://grass.osgeo.org/download/linux/#GRASS-GIS-current

\n

\"image-20230507202148758\"

\n

安装 EPEL8 源步骤:参考链接:https://blog.csdn.net/Lcongming/article/details/115983236

\n
    \n
  • 首先切换到yum仓库源的目录
  • \n
\n
1
cd /etc/yum.repos.d/
\n
    \n
  • 创建文件
  • \n
\n
1
2
3
4
5
6
7
8
touch epel8.repo
# 文件内容如下:
[EPEL]
name=EPEL
baseurl=https://mirrors.cloud.tencent.com/epel/8/Everything/x86_64/
gpgcheck=0
# 需要确保这个链接能打开
# epel7用这个:https://mirrors.cloud.tencent.com/epel/7/x86_64/
\n
    \n
  • 执行 yum repolist 读取查看结果,已经都可以读取了
  • \n
\n
1
yum repolist
\n

\"image-20230507202627273\"

\n

1.2 查看软件库中是否包含 GRASS

\n
1
yum search grass
\n

\"image-20230507202759087\"

\n

1.3 安装 GRASS

\n
1
yum install grass
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
Error: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: hdf-4.2.14-5.el8.x86_64 (EPEL)
Requires: libtirpc.so.3(TIRPC_0.3.0)(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)
Requires: libpng16.so.16(PNG16_0)(64bit)
Error: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libc.so.6(GLIBC_2.28)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: wxGTK3-gl-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libreadline.so.7()(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: python3-wx-siplib-api(12)(x86-64) >= 12.7
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)
Requires: libpng16.so.16()(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libc.so.6(GLIBC_2.27)(64bit)
Error: Package: proj-6.3.2-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: PDAL-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: libbsd-0.11.7-2.el8.x86_64 (EPEL)
Requires: libc.so.6(GLIBC_2.25)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libjson-c.so.4(JSONC_0.14)(64bit)
Error: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: hdf5-1.10.5-4.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpng16.so.16(PNG16_0)(64bit)
Error: Package: hdf5-1.10.5-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: PDAL-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: grass-libs-7.8.7-1.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.23)(64bit)
Error: Package: ogdi-4.1.0-1.el8.x86_64 (EPEL)
Requires: libtirpc.so.3()(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libpng16.so.16(PNG16_0)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libjson-c.so.4()(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.22)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpoppler.so.104()(64bit)
Error: Package: xerces-c-3.2.3-5.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: python3-dateutil
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libcfitsio.so.7()(64bit)
Available: cfitsio-3.47-1.el8.x86_64 (EPEL)
libcfitsio.so.7()(64bit)
Installed: cfitsio-3.370-10.el7.x86_64 (@epel)
~libcfitsio.so.2()(64bit)
Error: Package: hdf-4.2.14-5.el8.x86_64 (EPEL)
Requires: libtirpc.so.3()(64bit)
Error: Package: proj-6.3.2-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: netcdf-4.7.0-2.el8.x86_64 (EPEL)
Requires: libtirpc.so.3()(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libdap.so.25()(64bit)
Error: Package: ogdi-4.1.0-1.el8.x86_64 (EPEL)
Requires: libtirpc.so.3(TIRPC_0.3.0)(64bit)
Error: Package: PDAL-libs-2.1.0-8.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: python3-wxpython4-4.0.7-13.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.8)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpng16.so.16(PNG16_0)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libgif.so.7()(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libjasper.so.4()(64bit)
Error: Package: proj-epsg-4.8.0-4.el7.x86_64 (@epel)
Requires: proj = 4.8.0-4.el7
Removing: proj-4.8.0-4.el7.x86_64 (@epel)
proj = 4.8.0-4.el7
Updated By: proj-6.3.2-4.el8.x86_64 (EPEL)
proj = 6.3.2-4.el8
Error: Package: proj-nad-4.8.0-4.el7.x86_64 (@epel)
Requires: proj = 4.8.0-4.el7
Removing: proj-4.8.0-4.el7.x86_64 (@epel)
proj = 4.8.0-4.el7
Updated By: proj-6.3.2-4.el8.x86_64 (EPEL)
proj = 6.3.2-4.el8
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libhistory.so.7()(64bit)
Error: Package: wxBase3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: gdal-libs-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpng16.so.16()(64bit)
Error: Package: arpack-3.7.0-1.el8.x86_64 (EPEL)
Requires: libm.so.6(GLIBC_2.27)(64bit)
Error: Package: proj-6.3.2-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(CXXABI_1.3.9)(64bit)
Error: Package: proj-6.3.2-4.el8.x86_64 (EPEL)
Requires: libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
Error: Package: grass-7.8.7-1.el8.x86_64 (EPEL)
Requires: libpng16.so.16()(64bit)
Error: Package: wxGTK3-3.0.4-11.el8.x86_64 (EPEL)
Requires: libpng16.so.16()(64bit)
\n

直接 yum 安装 grass 会存在依赖错误的问题,先看报错缺的是什么包,然后通过rpm的方式先把缺的包装好,所有缺的包安装完毕后,就可以通过yum install grass完成grass的安装,缺的包可以在这个网站上找:https://pkgs.org/

\n

\"image-20230507203155606\"

\n
    \n
  • \n

    假设缺的包是下面这个:

    \n

    \"image-20230507203400626\"

    \n
  • \n
  • \n

    点进去,查看这个包的下载地址:

    \n
  • \n
\n

\"image-20230507203411137\"

\n
    \n
  • 然后通过rpm命令安装这个包:rpm -Uvh 包的URL
  • \n
\n
1
2
3
4
# rpm -Uvh 包的URL
rpm -Uvh https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/glibc-2.28-164.el8.x86_64.rpm
# 强制安装,忽略依赖错误
# rpm -Uvh https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/glibc-2.28-164.el8.x86_64.rpm --force --nodeps
\n\n

2 方案二:源码编译安装

\n

参考链接:https://www.zhihu.com/zvideo/1496911384683773952

\n
    \n
  • 下载安装包
  • \n
  • 解压并进入
  • \n
  • 开始编译
  • \n
\n
1
./configure --prefix=/home/oge/oge-grass
\n

疑难杂症

\n
    \n
  • GRASS需要针对 zstd 进行编译和链接。查看您尝试的命令(yum install zstd-devel),我假设您使用的是RHEL/CentOS7。在CentOS存储库中没有zstd的包-您需要从EPEL安装它。它应该看起来像这样
  • \n
\n

\"image-20230508084941624\"

\n
1
yum install libzstd-devel
\n

\"image-20230508084900049\"

\n
1
2
3
whereis gdal-config
# 然后再在编译时指定依赖的位置
./configure --with-gdal=/usr/local/bin/gdal-config --prefix=/home/oge/oge-grass
\n

\"image-20230508090349691\"

\n
1
yum install PNG-devel
\n

\"image-20230508090437991\"

\n
1
yum install fftw-devel
\n

\"image-20230508090610207\"

\n
1
yum install cairo-devel
\n

\"image-20230508091746038\"

\n
1
yum install freetype-devel
\n
    \n
  • \n
\n

3 方案三: Docker镜像方式安装 (推荐)

\n\n

\"image-20230508194802552\"

\n
    \n
  • 创建容器
  • \n
\n"},{"title":"Docker安装PostgreSQL并添加PostGIS拓展","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D1460018586%2C621419257%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"docker,postgres,postgis","abbrlink":"e232bc22","date":"2023-10-09T12:20:52.000Z","_content":"\n\n### 1 下载镜像\n\n- 访问dockerhub官网:https://registry.hub.docker.com/ 地址,下载指定版本的PostgreSQL数据库。\n\n![image-20231009173917562](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231009173917562.png)\n\n- 下载\n\n```bash\ndocker pull postgres:14\n```\n\n- 查看\n\n```BASH\ndocker images\n```\n\n![image-20231009200905029](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231009200905029.png)\n\n\n\n### 2 镜像转为容器\n\n```BASH\ndocker run -d --restart=always --name postgres -v /mnt/storage/postgresql/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:14\n```\n\n- `docker run`: 这是Docker命令的开头,用于运行一个容器。\n- `-d`: 这是一个标志,表示容器应以后台模式运行(detached mode),这意味着容器将在后台运行,不会占用终端。\n- `--restart=always`: 这是一个标志,指定容器在退出时应该始终自动重新启动。如果容器不期望停止运行,这可以确保容器总是在它退出时重新启动。\n- `--name postgres`: 这是一个标志,为容器指定了一个名称,即\"postgres\"。这使得容器可以通过这个名称来引用,而不必使用容器ID。\n- `-v /mnt/storage/postgresql/data:/var/lib/postgresql/data`: 这是一个标志,指定了主机文件系统路径`/mnt/storage/postgresql/data`和容器内部路径`/var/lib/postgresql/data`之间的卷映射。这个映射用于将PostgreSQL数据库数据存储在主机上,以便数据持久性。容器内的数据将被存储在主机的`/mnt/storage/postgresql/data`目录中。\n- `-e POSTGRES_PASSWORD=123456`: 这是一个标志,用于设置PostgreSQL数据库的密码。在这个例子中,密码被设置为\"123456\",这是一个示例密码。你可以根据需要更改它。\n- `-p 5432:5432`: 这是一个标志,用于将主机端口5432映射到容器内的端口5432。这是PostgreSQL数据库默认监听的端口。通过这个映射,你可以在主机上通过5432端口访问容器内运行的PostgreSQL数据库。\n- `postgres:14`: 这是要运行的Docker镜像的名称和标签。在这里,使用的是PostgreSQL 14版本的官方Docker镜像。Docker将下载并运行此镜像以创建容器。\n\n{% tip warning faa-horizontal animated %}一旦运行此命令,Docker将创建一个PostgreSQL容器,该容器以后台模式运行,具有指定的名称`postgres`,将数据存储在主机上的`/mnt/storage/postgresql/data`目录中,使用指定的密码,同时将主机端口5432映射到容器内的5432端口上。容器将在退出时自动重新启动,以确保持续可用性。{% endtip %}\n\n### 3 添加PostGIS拓展\n\n- 进入容器\n\n```BASH\ndocker exec -it ca24dbe6f3d7 bash\n```\n\n- 更新软件包列表\n\n```bash\napt update\n```\n\n- 使用apt在线安装PostGIS(注意版本要和PostgreSQL兼容)\n\n```bash\napt install postgresql-14-postgis-3 postgresql-14-postgis-3-dbgsym postgresql-14-postgis-3-scripts\n```\n\n- 使用Navicat等客户端软件连接到PostgreSQL,并新建查询,输入以下SQL语句,点击执行\n\n```SQL\nCREATE EXTENSION postgis;\nSELECT postgis_full_version();\n```\n\n- 出现类似如下查询结果即为成功\n\n```TEXT\nPOSTGIS=\"3.4.0 0874ea3\" [EXTENSION] PGSQL=\"140\" GEOS=\"3.11.1-CAPI-1.17.1\" PROJ=\"9.1.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/var/lib/postgresql/.local/share/proj DATABASE_PATH=/usr/share/proj/proj.db\" LIBXML=\"2.9.14\" LIBJSON=\"0.16\" LIBPROTOBUF=\"1.4.1\" WAGYU=\"0.5.0 (Internal)\"\n```\n","source":"_posts/Docker安装PostgreSQL并添加PostGIS拓展.md","raw":"---\ntitle: Docker安装PostgreSQL并添加PostGIS拓展\ncover: >-\n https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D1460018586%2C621419257%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'docker,postgres,postgis'\ncategories:\n - 云原生\ntags:\n - 容器\n - Docker\n - PostgreSQL\n - PostGIS\n - 数据库\nabbrlink: e232bc22\ndate: 2023-10-09 20:20:52\n---\n\n\n### 1 下载镜像\n\n- 访问dockerhub官网:https://registry.hub.docker.com/ 地址,下载指定版本的PostgreSQL数据库。\n\n![image-20231009173917562](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231009173917562.png)\n\n- 下载\n\n```bash\ndocker pull postgres:14\n```\n\n- 查看\n\n```BASH\ndocker images\n```\n\n![image-20231009200905029](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231009200905029.png)\n\n\n\n### 2 镜像转为容器\n\n```BASH\ndocker run -d --restart=always --name postgres -v /mnt/storage/postgresql/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:14\n```\n\n- `docker run`: 这是Docker命令的开头,用于运行一个容器。\n- `-d`: 这是一个标志,表示容器应以后台模式运行(detached mode),这意味着容器将在后台运行,不会占用终端。\n- `--restart=always`: 这是一个标志,指定容器在退出时应该始终自动重新启动。如果容器不期望停止运行,这可以确保容器总是在它退出时重新启动。\n- `--name postgres`: 这是一个标志,为容器指定了一个名称,即\"postgres\"。这使得容器可以通过这个名称来引用,而不必使用容器ID。\n- `-v /mnt/storage/postgresql/data:/var/lib/postgresql/data`: 这是一个标志,指定了主机文件系统路径`/mnt/storage/postgresql/data`和容器内部路径`/var/lib/postgresql/data`之间的卷映射。这个映射用于将PostgreSQL数据库数据存储在主机上,以便数据持久性。容器内的数据将被存储在主机的`/mnt/storage/postgresql/data`目录中。\n- `-e POSTGRES_PASSWORD=123456`: 这是一个标志,用于设置PostgreSQL数据库的密码。在这个例子中,密码被设置为\"123456\",这是一个示例密码。你可以根据需要更改它。\n- `-p 5432:5432`: 这是一个标志,用于将主机端口5432映射到容器内的端口5432。这是PostgreSQL数据库默认监听的端口。通过这个映射,你可以在主机上通过5432端口访问容器内运行的PostgreSQL数据库。\n- `postgres:14`: 这是要运行的Docker镜像的名称和标签。在这里,使用的是PostgreSQL 14版本的官方Docker镜像。Docker将下载并运行此镜像以创建容器。\n\n{% tip warning faa-horizontal animated %}一旦运行此命令,Docker将创建一个PostgreSQL容器,该容器以后台模式运行,具有指定的名称`postgres`,将数据存储在主机上的`/mnt/storage/postgresql/data`目录中,使用指定的密码,同时将主机端口5432映射到容器内的5432端口上。容器将在退出时自动重新启动,以确保持续可用性。{% endtip %}\n\n### 3 添加PostGIS拓展\n\n- 进入容器\n\n```BASH\ndocker exec -it ca24dbe6f3d7 bash\n```\n\n- 更新软件包列表\n\n```bash\napt update\n```\n\n- 使用apt在线安装PostGIS(注意版本要和PostgreSQL兼容)\n\n```bash\napt install postgresql-14-postgis-3 postgresql-14-postgis-3-dbgsym postgresql-14-postgis-3-scripts\n```\n\n- 使用Navicat等客户端软件连接到PostgreSQL,并新建查询,输入以下SQL语句,点击执行\n\n```SQL\nCREATE EXTENSION postgis;\nSELECT postgis_full_version();\n```\n\n- 出现类似如下查询结果即为成功\n\n```TEXT\nPOSTGIS=\"3.4.0 0874ea3\" [EXTENSION] PGSQL=\"140\" GEOS=\"3.11.1-CAPI-1.17.1\" PROJ=\"9.1.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/var/lib/postgresql/.local/share/proj DATABASE_PATH=/usr/share/proj/proj.db\" LIBXML=\"2.9.14\" LIBJSON=\"0.16\" LIBPROTOBUF=\"1.4.1\" WAGYU=\"0.5.0 (Internal)\"\n```\n","slug":"Docker安装PostgreSQL并添加PostGIS拓展","published":1,"updated":"2023-10-21T04:51:57.415Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyrto00032j3u9kfr9p8w","content":"

1 下载镜像

\n\n

\"image-20231009173917562\"

\n
    \n
  • 下载
  • \n
\n
1
docker pull postgres:14
\n
    \n
  • 查看
  • \n
\n
1
docker images
\n

\"image-20231009200905029\"

\n

2 镜像转为容器

\n
1
docker run -d --restart=always --name postgres -v /mnt/storage/postgresql/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:14
\n
    \n
  • docker run: 这是Docker命令的开头,用于运行一个容器。
  • \n
  • -d: 这是一个标志,表示容器应以后台模式运行(detached mode),这意味着容器将在后台运行,不会占用终端。
  • \n
  • --restart=always: 这是一个标志,指定容器在退出时应该始终自动重新启动。如果容器不期望停止运行,这可以确保容器总是在它退出时重新启动。
  • \n
  • --name postgres: 这是一个标志,为容器指定了一个名称,即"postgres"。这使得容器可以通过这个名称来引用,而不必使用容器ID。
  • \n
  • -v /mnt/storage/postgresql/data:/var/lib/postgresql/data: 这是一个标志,指定了主机文件系统路径/mnt/storage/postgresql/data和容器内部路径/var/lib/postgresql/data之间的卷映射。这个映射用于将PostgreSQL数据库数据存储在主机上,以便数据持久性。容器内的数据将被存储在主机的/mnt/storage/postgresql/data目录中。
  • \n
  • -e POSTGRES_PASSWORD=123456: 这是一个标志,用于设置PostgreSQL数据库的密码。在这个例子中,密码被设置为"123456",这是一个示例密码。你可以根据需要更改它。
  • \n
  • -p 5432:5432: 这是一个标志,用于将主机端口5432映射到容器内的端口5432。这是PostgreSQL数据库默认监听的端口。通过这个映射,你可以在主机上通过5432端口访问容器内运行的PostgreSQL数据库。
  • \n
  • postgres:14: 这是要运行的Docker镜像的名称和标签。在这里,使用的是PostgreSQL 14版本的官方Docker镜像。Docker将下载并运行此镜像以创建容器。
  • \n
\n

一旦运行此命令,Docker将创建一个PostgreSQL容器,该容器以后台模式运行,具有指定的名称postgres,将数据存储在主机上的/mnt/storage/postgresql/data目录中,使用指定的密码,同时将主机端口5432映射到容器内的5432端口上。容器将在退出时自动重新启动,以确保持续可用性。

\n
\n

3 添加PostGIS拓展

\n
    \n
  • 进入容器
  • \n
\n
1
docker exec -it ca24dbe6f3d7 bash
\n
    \n
  • 更新软件包列表
  • \n
\n
1
apt update
\n
    \n
  • 使用apt在线安装PostGIS(注意版本要和PostgreSQL兼容)
  • \n
\n
1
apt install postgresql-14-postgis-3 postgresql-14-postgis-3-dbgsym postgresql-14-postgis-3-scripts
\n
    \n
  • 使用Navicat等客户端软件连接到PostgreSQL,并新建查询,输入以下SQL语句,点击执行
  • \n
\n
1
2
CREATE EXTENSION postgis;
SELECT postgis_full_version();
\n
    \n
  • 出现类似如下查询结果即为成功
  • \n
\n
1
POSTGIS="3.4.0 0874ea3" [EXTENSION] PGSQL="140" GEOS="3.11.1-CAPI-1.17.1" PROJ="9.1.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/var/lib/postgresql/.local/share/proj DATABASE_PATH=/usr/share/proj/proj.db" LIBXML="2.9.14" LIBJSON="0.16" LIBPROTOBUF="1.4.1" WAGYU="0.5.0 (Internal)"
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":1893,"excerpt":"","more":"

1 下载镜像

\n\n

\"image-20231009173917562\"

\n
    \n
  • 下载
  • \n
\n
1
docker pull postgres:14
\n
    \n
  • 查看
  • \n
\n
1
docker images
\n

\"image-20231009200905029\"

\n

2 镜像转为容器

\n
1
docker run -d --restart=always --name postgres -v /mnt/storage/postgresql/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:14
\n
    \n
  • docker run: 这是Docker命令的开头,用于运行一个容器。
  • \n
  • -d: 这是一个标志,表示容器应以后台模式运行(detached mode),这意味着容器将在后台运行,不会占用终端。
  • \n
  • --restart=always: 这是一个标志,指定容器在退出时应该始终自动重新启动。如果容器不期望停止运行,这可以确保容器总是在它退出时重新启动。
  • \n
  • --name postgres: 这是一个标志,为容器指定了一个名称,即"postgres"。这使得容器可以通过这个名称来引用,而不必使用容器ID。
  • \n
  • -v /mnt/storage/postgresql/data:/var/lib/postgresql/data: 这是一个标志,指定了主机文件系统路径/mnt/storage/postgresql/data和容器内部路径/var/lib/postgresql/data之间的卷映射。这个映射用于将PostgreSQL数据库数据存储在主机上,以便数据持久性。容器内的数据将被存储在主机的/mnt/storage/postgresql/data目录中。
  • \n
  • -e POSTGRES_PASSWORD=123456: 这是一个标志,用于设置PostgreSQL数据库的密码。在这个例子中,密码被设置为"123456",这是一个示例密码。你可以根据需要更改它。
  • \n
  • -p 5432:5432: 这是一个标志,用于将主机端口5432映射到容器内的端口5432。这是PostgreSQL数据库默认监听的端口。通过这个映射,你可以在主机上通过5432端口访问容器内运行的PostgreSQL数据库。
  • \n
  • postgres:14: 这是要运行的Docker镜像的名称和标签。在这里,使用的是PostgreSQL 14版本的官方Docker镜像。Docker将下载并运行此镜像以创建容器。
  • \n
\n

一旦运行此命令,Docker将创建一个PostgreSQL容器,该容器以后台模式运行,具有指定的名称postgres,将数据存储在主机上的/mnt/storage/postgresql/data目录中,使用指定的密码,同时将主机端口5432映射到容器内的5432端口上。容器将在退出时自动重新启动,以确保持续可用性。

\n
\n

3 添加PostGIS拓展

\n
    \n
  • 进入容器
  • \n
\n
1
docker exec -it ca24dbe6f3d7 bash
\n
    \n
  • 更新软件包列表
  • \n
\n
1
apt update
\n
    \n
  • 使用apt在线安装PostGIS(注意版本要和PostgreSQL兼容)
  • \n
\n
1
apt install postgresql-14-postgis-3 postgresql-14-postgis-3-dbgsym postgresql-14-postgis-3-scripts
\n
    \n
  • 使用Navicat等客户端软件连接到PostgreSQL,并新建查询,输入以下SQL语句,点击执行
  • \n
\n
1
2
CREATE EXTENSION postgis;
SELECT postgis_full_version();
\n
    \n
  • 出现类似如下查询结果即为成功
  • \n
\n
1
POSTGIS="3.4.0 0874ea3" [EXTENSION] PGSQL="140" GEOS="3.11.1-CAPI-1.17.1" PROJ="9.1.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/var/lib/postgresql/.local/share/proj DATABASE_PATH=/usr/share/proj/proj.db" LIBXML="2.9.14" LIBJSON="0.16" LIBPROTOBUF="1.4.1" WAGYU="0.5.0 (Internal)"
\n"},{"title":"Docker修改容器映射主机端口","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3767987760%2C254654213%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DPNG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","abbrlink":"9c5d9ac5","date":"2023-05-12T07:26:51.000Z","keywords":"docker,端口","_content":"\n### 1 对于已经存在的容器,更改端口\n\n- 停止容器\n\n- 将容器打包成镜像\n\n```bash\ndocker commit 4f4561192346 wbw-geoserver:0.1(自定义镜像名:自定版本号)\n```\n\n- 通过新镜像开启新容器\n\n```BASH\ndocker run -d --name wbw-geoserver -p 31520:8080 wbw-geoserver:0.1\n\n\n#-d ——>后台启动\n#-p ——>主机端口:容器端口\n```\n","source":"_posts/Docker修改容器映射主机端口.md","raw":"---\ntitle: Docker修改容器映射主机端口\ncover: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3767987760%2C254654213%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DPNG'\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nabbrlink: 9c5d9ac5\ndate: 2023-05-12 15:26:51\nkeywords: docker,端口\ncategories:\n - 云原生\ntags:\n - 容器\n - Docker\n---\n\n### 1 对于已经存在的容器,更改端口\n\n- 停止容器\n\n- 将容器打包成镜像\n\n```bash\ndocker commit 4f4561192346 wbw-geoserver:0.1(自定义镜像名:自定版本号)\n```\n\n- 通过新镜像开启新容器\n\n```BASH\ndocker run -d --name wbw-geoserver -p 31520:8080 wbw-geoserver:0.1\n\n\n#-d ——>后台启动\n#-p ——>主机端口:容器端口\n```\n","slug":"Docker修改容器映射主机端口","published":1,"updated":"2023-10-21T04:52:06.632Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyrtq00072j3u4p040k0p","content":"

1 对于已经存在的容器,更改端口

\n
    \n
  • \n

    停止容器

    \n
  • \n
  • \n

    将容器打包成镜像

    \n
  • \n
\n
1
docker commit 4f4561192346 wbw-geoserver:0.1(自定义镜像名:自定版本号)
\n
    \n
  • 通过新镜像开启新容器
  • \n
\n
1
2
3
4
5
docker run -d --name wbw-geoserver -p 31520:8080 wbw-geoserver:0.1


#-d ——>后台启动
#-p ——>主机端口:容器端口
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":188,"excerpt":"","more":"

1 对于已经存在的容器,更改端口

\n
    \n
  • \n

    停止容器

    \n
  • \n
  • \n

    将容器打包成镜像

    \n
  • \n
\n
1
docker commit 4f4561192346 wbw-geoserver:0.1(自定义镜像名:自定版本号)
\n
    \n
  • 通过新镜像开启新容器
  • \n
\n
1
2
3
4
5
docker run -d --name wbw-geoserver -p 31520:8080 wbw-geoserver:0.1


#-d ——>后台启动
#-p ——>主机端口:容器端口
\n"},{"title":"Docker安装配置","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3909901784%2C2254357094%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DPNG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","abbrlink":"b035bcd6","date":"2023-05-11T01:20:52.000Z","keywords":"docker,安装,配置","_content":"\n## 1 安装docker 20.10.7\n\n**注意 Docker 版本,要和 Kubernetes 版本 有对应关系**\n\n```shell\n# 安装/更新 yum-utils\nyum install -y yum-utils\n\n# 配置 yum源\nyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo\n\n# 安装 docker 20.10.7 版本\nyum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io\n\n# 查看 docker 版本\ndocker -v\n\n# 启动 docker\nsystemctl start docker\n\n# 查看 docker 是否成功, 有 Client 和 Server 即成功\ndocker version\n```\n\n## 2 配置加速镜像\n\n```shell\nsudo mkdir -p /etc/docker\nsudo tee /etc/docker/daemon.json <<-'EOF'\n{\n \"registry-mirrors\": [\"https://82m9ar63.mirror.aliyuncs.com\"],\n \"exec-opts\": [\"native.cgroupdriver=systemd\"],\n \"log-driver\": \"json-file\",\n \"log-opts\": {\n \"max-size\": \"100m\"\n },\n \"storage-driver\": \"overlay2\"\n}\nEOF\nsudo systemctl daemon-reload\nsudo systemctl restart docker\n\n# 查看是否配置成功\ndocker info\n```\n\n","source":"_posts/Docker安装配置.md","raw":"---\ntitle: Docker安装配置\ncover: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3909901784%2C2254357094%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DPNG'\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nabbrlink: b035bcd6\ndate: 2023-05-11 09:20:52\nkeywords: docker,安装,配置\ncategories:\n - 云原生\ntags:\n - 容器\n - Docker\n---\n\n## 1 安装docker 20.10.7\n\n**注意 Docker 版本,要和 Kubernetes 版本 有对应关系**\n\n```shell\n# 安装/更新 yum-utils\nyum install -y yum-utils\n\n# 配置 yum源\nyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo\n\n# 安装 docker 20.10.7 版本\nyum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io\n\n# 查看 docker 版本\ndocker -v\n\n# 启动 docker\nsystemctl start docker\n\n# 查看 docker 是否成功, 有 Client 和 Server 即成功\ndocker version\n```\n\n## 2 配置加速镜像\n\n```shell\nsudo mkdir -p /etc/docker\nsudo tee /etc/docker/daemon.json <<-'EOF'\n{\n \"registry-mirrors\": [\"https://82m9ar63.mirror.aliyuncs.com\"],\n \"exec-opts\": [\"native.cgroupdriver=systemd\"],\n \"log-driver\": \"json-file\",\n \"log-opts\": {\n \"max-size\": \"100m\"\n },\n \"storage-driver\": \"overlay2\"\n}\nEOF\nsudo systemctl daemon-reload\nsudo systemctl restart docker\n\n# 查看是否配置成功\ndocker info\n```\n\n","slug":"Docker安装配置","published":1,"updated":"2023-10-21T04:51:49.730Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyrtq00092j3uhtj2dyou","content":"

1 安装docker 20.10.7

\n

注意 Docker 版本,要和 Kubernetes 版本 有对应关系

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装/更新 yum-utils
yum install -y yum-utils

# 配置 yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 docker 20.10.7 版本
yum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io

# 查看 docker 版本
docker -v

# 启动 docker
systemctl start docker

# 查看 docker 是否成功, 有 Client 和 Server 即成功
docker version
\n

2 配置加速镜像

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

# 查看是否配置成功
docker info
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":871,"excerpt":"","more":"

1 安装docker 20.10.7

\n

注意 Docker 版本,要和 Kubernetes 版本 有对应关系

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装/更新 yum-utils
yum install -y yum-utils

# 配置 yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 docker 20.10.7 版本
yum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io

# 查看 docker 版本
docker -v

# 启动 docker
systemctl start docker

# 查看 docker 是否成功, 有 Client 和 Server 即成功
docker version
\n

2 配置加速镜像

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

# 查看是否配置成功
docker info
\n"},{"title":"Docker镜像打包迁移","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3909901784%2C2254357094%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DPNG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"docker,配置,迁移","abbrlink":"620cff7f","date":"2023-10-09T01:20:52.000Z","_content":"\n{% note simple %} 要将 Docker 镜像从一台服务器传输到另一台服务器,您可以使用以下步骤:{% endnote %}\n\n### **1 导出 Docker 镜像**:\n\n- 首先,在源服务器上导出您要传输的 Docker 镜像。使用以下命令将镜像导出为一个文件:\n\n```bash\ndocker save -o image.tar image_name:tag\n```\n\n- 其中 `image_name:tag` 是您要导出的 Docker 镜像的名称和标签。此命令将创建一个名为 `image.tar` 的镜像文件。\n\n### **2 传输 Docker 镜像文件**\n\n- 将导出的 Docker 镜像文件 `image.tar` 从源服务器传输到目标服务器。您可以使用各种方法,如SCP、SFTP、rsync 或者将文件上传到云存储服务(如Amazon S3、Google Cloud Storage)等方式来传输文件。\n\n### **3 导入 Docker 镜像**\n\n- 在目标服务器上导入传输过来的 Docker 镜像文件。使用以下命令来导入镜像:\n\n```bash\ndocker load -i image.tar\n```\n\n- 这将从 `image.tar` 文件中加载镜像到目标服务器的 Docker 环境中。\n\n### **4 验证导入的 Docker 镜像**\n\n- 您可以使用以下命令来验证在目标服务器上成功导入了镜像:\n\n```BASH\ndocker images\n```\n\n- 这将列出在目标服务器上可用的 Docker 镜像,确保您的镜像已成功导入。\n\n- 现在,您已经成功将 Docker 镜像从一台服务器传输到另一台服务器。请注意,在进行这些操作时,确保您有足够的权限来执行 Docker 命令和文件传输操作,并且在网络连接方面没有限制。另外,确保目标服务器上的 Docker 环境与源服务器兼容,以便正常运行您的镜像。\n","source":"_posts/Docker镜像打包迁移.md","raw":"---\ntitle: Docker镜像打包迁移\ncover: >-\n https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3909901784%2C2254357094%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DPNG\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'docker,配置,迁移'\ncategories:\n - 云原生\ntags:\n - 容器\n - Docker\nabbrlink: 620cff7f\ndate: 2023-10-09 09:20:52\n---\n\n{% note simple %} 要将 Docker 镜像从一台服务器传输到另一台服务器,您可以使用以下步骤:{% endnote %}\n\n### **1 导出 Docker 镜像**:\n\n- 首先,在源服务器上导出您要传输的 Docker 镜像。使用以下命令将镜像导出为一个文件:\n\n```bash\ndocker save -o image.tar image_name:tag\n```\n\n- 其中 `image_name:tag` 是您要导出的 Docker 镜像的名称和标签。此命令将创建一个名为 `image.tar` 的镜像文件。\n\n### **2 传输 Docker 镜像文件**\n\n- 将导出的 Docker 镜像文件 `image.tar` 从源服务器传输到目标服务器。您可以使用各种方法,如SCP、SFTP、rsync 或者将文件上传到云存储服务(如Amazon S3、Google Cloud Storage)等方式来传输文件。\n\n### **3 导入 Docker 镜像**\n\n- 在目标服务器上导入传输过来的 Docker 镜像文件。使用以下命令来导入镜像:\n\n```bash\ndocker load -i image.tar\n```\n\n- 这将从 `image.tar` 文件中加载镜像到目标服务器的 Docker 环境中。\n\n### **4 验证导入的 Docker 镜像**\n\n- 您可以使用以下命令来验证在目标服务器上成功导入了镜像:\n\n```BASH\ndocker images\n```\n\n- 这将列出在目标服务器上可用的 Docker 镜像,确保您的镜像已成功导入。\n\n- 现在,您已经成功将 Docker 镜像从一台服务器传输到另一台服务器。请注意,在进行这些操作时,确保您有足够的权限来执行 Docker 命令和文件传输操作,并且在网络连接方面没有限制。另外,确保目标服务器上的 Docker 环境与源服务器兼容,以便正常运行您的镜像。\n","slug":"Docker镜像打包迁移","published":1,"updated":"2023-10-21T04:52:02.184Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyrtr000b2j3u2dxz2wpc","content":"

要将 Docker 镜像从一台服务器传输到另一台服务器,您可以使用以下步骤:

\n
\n

1 导出 Docker 镜像

\n
    \n
  • 首先,在源服务器上导出您要传输的 Docker 镜像。使用以下命令将镜像导出为一个文件:
  • \n
\n
1
docker save -o image.tar image_name:tag
\n
    \n
  • 其中 image_name:tag 是您要导出的 Docker 镜像的名称和标签。此命令将创建一个名为 image.tar 的镜像文件。
  • \n
\n

2 传输 Docker 镜像文件

\n
    \n
  • 将导出的 Docker 镜像文件 image.tar 从源服务器传输到目标服务器。您可以使用各种方法,如SCP、SFTP、rsync 或者将文件上传到云存储服务(如Amazon S3、Google Cloud Storage)等方式来传输文件。
  • \n
\n

3 导入 Docker 镜像

\n
    \n
  • 在目标服务器上导入传输过来的 Docker 镜像文件。使用以下命令来导入镜像:
  • \n
\n
1
docker load -i image.tar
\n
    \n
  • 这将从 image.tar 文件中加载镜像到目标服务器的 Docker 环境中。
  • \n
\n

4 验证导入的 Docker 镜像

\n
    \n
  • 您可以使用以下命令来验证在目标服务器上成功导入了镜像:
  • \n
\n
1
docker images
\n
    \n
  • \n

    这将列出在目标服务器上可用的 Docker 镜像,确保您的镜像已成功导入。

    \n
  • \n
  • \n

    现在,您已经成功将 Docker 镜像从一台服务器传输到另一台服务器。请注意,在进行这些操作时,确保您有足够的权限来执行 Docker 命令和文件传输操作,并且在网络连接方面没有限制。另外,确保目标服务器上的 Docker 环境与源服务器兼容,以便正常运行您的镜像。

    \n
  • \n
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":637,"excerpt":"","more":"

要将 Docker 镜像从一台服务器传输到另一台服务器,您可以使用以下步骤:

\n
\n

1 导出 Docker 镜像

\n
    \n
  • 首先,在源服务器上导出您要传输的 Docker 镜像。使用以下命令将镜像导出为一个文件:
  • \n
\n
1
docker save -o image.tar image_name:tag
\n
    \n
  • 其中 image_name:tag 是您要导出的 Docker 镜像的名称和标签。此命令将创建一个名为 image.tar 的镜像文件。
  • \n
\n

2 传输 Docker 镜像文件

\n
    \n
  • 将导出的 Docker 镜像文件 image.tar 从源服务器传输到目标服务器。您可以使用各种方法,如SCP、SFTP、rsync 或者将文件上传到云存储服务(如Amazon S3、Google Cloud Storage)等方式来传输文件。
  • \n
\n

3 导入 Docker 镜像

\n
    \n
  • 在目标服务器上导入传输过来的 Docker 镜像文件。使用以下命令来导入镜像:
  • \n
\n
1
docker load -i image.tar
\n
    \n
  • 这将从 image.tar 文件中加载镜像到目标服务器的 Docker 环境中。
  • \n
\n

4 验证导入的 Docker 镜像

\n
    \n
  • 您可以使用以下命令来验证在目标服务器上成功导入了镜像:
  • \n
\n
1
docker images
\n
    \n
  • \n

    这将列出在目标服务器上可用的 Docker 镜像,确保您的镜像已成功导入。

    \n
  • \n
  • \n

    现在,您已经成功将 Docker 镜像从一台服务器传输到另一台服务器。请注意,在进行这些操作时,确保您有足够的权限来执行 Docker 命令和文件传输操作,并且在网络连接方面没有限制。另外,确保目标服务器上的 Docker 环境与源服务器兼容,以便正常运行您的镜像。

    \n
  • \n
\n"},{"title":"K8S集群环境搭建(Containerd作为容器)","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D2793533854%2C2733450472%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"K8S, Containerd","abbrlink":"9d39de82","date":"2023-08-06T07:08:12.000Z","swiper_index":1,"_content":"\n## 1 前述\n\n### 1.1 云原生定义\n\n- **Pivotal《传统应用和SOA向云原生转型指南》(2015)的云原生的特征:**\n - 符合 12 要素应用\n - 基准代码:一份基准代码,多份部署(类似于Git版本控制系统的main分支);\n - 显示声明所有依赖关系:通过依赖清单,确切地声明所有依赖项;\n - 把后端服务当作附加资源:各种后端服务(如数据库、消息队列、邮件服务、缓存系统),不区别对待本地或第三方服务;\n - 构建、发布、运行:严格区分构建、发布、运行这三个步骤;\n - 无状态进程:应用的进程必须无状态;\n - 端口绑定:互联网应用通过端口绑定来提供服务,并监听发送至该端口的请求。应用完全自我加载,不依赖于任何网络服务器;\n - 并发:通过进程模型进行扩展。进程是一等公民;\n - 易处理:进程可以瞬间开启或停止,有利于快速、弹性的伸缩应用。进程应追求最小启动时间;进程一旦接受终止信号就会优化的终止;进程在面对突然死亡时保持健壮;\n - 开发环境与线上环境等价:尽可能的保持开发,预发布,线上环境相同,以尽量做到持续部署;\n - 日志:应用本身从不存储自己的输出流,不应该试图去写或者管理日志文件,相反,每一个运行的进程都会直接的标准输出(stdout)事件流;\n - 管理进程:后台管理任务当作一次性进程运行;\n - 面向微服务架构\n - 微服务将单体系统分解为多个“仅做好一件事”的可独立部署的服务。这件事通常代表某项业务能力,或者最小可提供业务价值的“原子“服务单元。具备以下优点:\n - 变更周期解耦:只要变更限于单一有界的环境,并且服务继续履行其现有合约;实现了更频繁和快速的部署,从而实现了持续的价值流动;\n - 减少业务领域和现有代码的学习负担;\n - 可以加快采用新技术的步伐;\n - 提供独立、高效的服务扩展;\n - 自服务敏捷架构(可以认为是DevOps):\n - 一个能够持续部署和运行这些微服务的平台;如代码以Git形式“推送”。 然后,自服务敏捷平台构建应用程序工件,构建应用程序环境,部署应用程序,并启动必要的进程。 团队不必考虑他们的代码在哪里运行或如何到达那里,这些对用户都是透明得,因为平台会关注这些。\n - 基于 API 的协作\n - 抗脆弱性\n- **云原生计算基金会(2015)定义的特征**\n - 应用容器化\n - 面向微服务架构\n - 应用支持容器的编排制度\n- **云原生计算基金会(2018)定义**\n - 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API\n - 这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更\n\n\n\n### 1.2 容器、虚拟机、Docker、Openstack 和 K8S\n\n- **容器&虚拟机**:均为虚拟化技术,容器更为轻量化、效率更高、启动更快;虚拟机需数分钟启动,容器仅需数十毫秒;\n- **Docker**: 容器化虚拟技术事实上的标准;\n- **OpenStack**:分布式的虚拟机服务平台,相比于普通的虚拟机软件(如Vmare),多了分布式虚拟机调度管理的功能和节点的负载均衡; \n- **K8S**:分布式的容器调度管理平台,相比于Docker,多了分布式的容器调度管理和节点的负载均衡;\n- **注意**:常见的中文资料均言K8S是容器编排软件,这里的编排是指调度、管理的意思,而非工作流编排的意思,容易有误导性;\n- **注意**:无论是Openstack还是K8S,均不支持跨节点的容器或虚拟机的创建;所以将多台电脑合并成一台电脑的想法是不现实的;\n\n\n\n### 1.3 K8S 和 云原生\n\n在单机上运行容器,无法发挥它的最大效能,只有形成集群,才能最大程度发挥容器的良好隔离、资源分配与编排管理的优势,而对于容器的编排管理,Swarm、Mesos 和 Kubernetes 的大战已经基本宣告结束,Kubernetes 成为了无可争议的赢家。\n\n- Kubernetes 成为云原生应用的基石\n- 有机会成为跨云的真正的云原生应用的操作系统\n\n### 1.4 K8S 介绍\n\n- **官方**:**Kubernetes** 也称为 **K8S**,是用于自动部署、扩缩和管理容器化应用程序的开源系统。\n- **发展历史**:由**Google**设计并捐赠给**Cloud Native Computing Foundation**(今属**Linux**基金会)来使用。\n- **能力**:**Google** 每周运行数十亿个容器,能够在不扩张运维团队的情况下进行规模扩展。\n- **作用**: 相当于一个操作系统,可以快速提供**PaaS**服务:1)创建各种容器化测试化环境;2)发布各种容器化服务;3)快速安装各种容器化服务,如MongoDB、**Hbase**、**Postgresql**、**Redis**、**Spark**等;快速提供IaaS服务:通过安装**Openstack**或**KubeVirt**等软件;快速提供**FaaS**服务:通过安装**Kube** **Native**等软件;\n\n![image-20230414170948460](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230414170948460.png)\n\n![image-20230414171119324](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230414171119324.png)\n\n### 1.5 基本概念\n\n- **Container**:轻量级的系统虚拟化技术,使用namespace隔离环境。\n- **Pod**:\n- - **K8S** 的调度的基本单位,**Pod**是一组紧密关联的容器集合,内部的容器共享PID、IPC、Network和UTS namespace。可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。\n \n ![image-20230415141540422](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415141540422.png)\n\n​\t\t\t\tPod的设计理念基础是微服务,不同类型的业务组合由不同类型的Pod执行,一个Pod对应一个微服务\n\n- - K8S中,采用manifest(yaml或json)定义对象,比如nginx服务(包含了一个nginx 容器image)定义为:\n\n```YAML\n\tapiVersion: v1\n\tkind: Pod\n\tmetadata:\n\t name: nginx\n\t labels:\n\t app: nginx\n\tspec:\n\t containers:\n\t - name: nginx\n\t image: nginx\n\t ports:\n```\n\n- - **Node:** 是Pod运行的主机,可以为物理机,也可以为虚拟机。每个Node上要运行container runtime (docker或者rkt)、kubelet和kube-proxy服务\n - ![image-20230415142123300](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415142123300.png)\n\n- - **Service:** 一个Pod只是一个运行服务的实例,可能在一个节点上停止,在另一个节点以一个新的IP启动一个新的Pod。在K8S集群中,客户端需要访问的服务就是Service对象。每个Service会对应一个集群内部有效的虚拟IP,集群内部通过虚拟IP访问一个服务。\n- - **Kubelet:** 每个Node的任务和资源管理\n- - **Kube-proxy:** 负责每个节点的硬件负载均衡\n\n\n\n### 1.6 K8S 常见命令\n\n- **运行一个Nginix容器:** \n - `kubectl run --image=nginx:alpine nginx-app --port=80`\n- **Kubectl 命令:**\n - `kubectl get - 类似于 docker ps,查询资源列表`\n - `kubectl describe - 类似于 docker inspect,获取资源的详细信息`\n - `kubectl logs - 类似于 docker logs,获取容器的日志`\n - `kubectl exec - 类似于 docker exec,在容器内执行一个命令`\n - `kubectl create -f file.yaml – 根据yaml创建Deployment资源`\n - `kubectl delete 删除命令,可删除node、pod、svc、depolyment`\n- **yaml 定义 Pod:**\n\n```YAML\n\tapiVersion: v1\n\tkind: Pod\n\tmetadata:\n\t name: nginx\n\t labels:\n\t app: nginx\n\tspec:\n\t containers:\n\t - name: nginx\n\t image: nginx\n\t ports:\n\t - containerPort: 80\n```\n\n- **Volume:**\n - 一个**Pod**一旦发生异常,**Pod** 产生的数据会随着 **Pod** 消亡而自动消失。**Volume** 用于持久化容器数据。\n - 如:为 **redis** 容器指定一个 **hostPath** 来存储 **redis** 数据\n\n```YAML\n\tapiVersion: v1\n\tkind: Pod\n\tmetadata:\n\t name: redis\n\tspec:\n\t containers:\n\t - name: redis\n\t image: redis\n\t volumeMounts:\n\t - name: redis-persistent-storage\n\t mountPath: /data/redis\n\t volumes:\n\t - name: redis-persistent-storage\n\t hostPath:\n\t path: /data/\n```\n\n- **Service:**\n - kubectl创建Pod,Pob的IP地址会随着Pod的重启而变化\n - 为了访问Pod提供的服务,采用Service提供为一组Pod一个统一的入口,并提供负载均衡和**自动服务发现**。\n - `kubectl expose deployment nginx-app --port=80 --target-port=80 --type=NodePort`\n- **Replicas set:**\n - 在一个Service中,可为Pod设置数个副本,以确保服务永不掉线\n - `kubectl scale --replicas=3 deployment/nginx-app`\n\n![image-20230415143046325](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415143046325.png)\n\n- **滚动升级(Rolling Update):**\n - 滚动升级(Rolling Update)通过逐个副本容器替代升级的方式来实现无中断的服务升级:\n - `kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2`\n - 滚动升级中若发生错误,可随时回滚:\n - `kubectl rolling-update frontend-v1 frontend-v2 --rollback`\n- **资源限制:**\n - K8S通过 cgroups 提供容器资源管理的功能,可限制每个容器的 CPU 和内存使用,比如对于刚才创建的 deployment,可以通过下面的命令限制 nginx 容器最多只用 50% 的 CPU 和 128MB 的内存:\n - `kubectl set resources deployment nginx-app -c=nginx --limits=cpu=500m,memory=128Mi`\n - 或者在yaml中指定资源限制\n- **健康检查:**\n - K8S Kubernetes 提供了两种探针(Probe,支持 exec、tcpSocket 和 http 方式)来探测容器的状态:\n - LivenessProbe:探测应用是否处于健康状态,如果不健康则删除并重新创建容器\n - ReadinessProbe:探测应用是否启动完成并且处于正常服务状态,如果不正常则不会接收来自 Kubernetes Service 的流量\n\n\n\n### 1.7 K8S 常用运维命令\n\n- **查看pod,及所在的节点:**\n - `kubectl get pods -o wide`\n- **若有节点warn,回收垃圾失败:**\n\n```BASH\nkubectl drain --delete-local-data --ignore-daemonsets NODENAME\nkubectl uncordon NODENAME\n```\n\n\n\n## 2 K8S 集群基础环境部署\n\n{% p red, 若服务器之前搭建过 K8S 集群,需要彻底删除 %}\n\n参考:https://blog.csdn.net/qq_43159578/article/details/124131709 \n\n- 停止所有的Kubernetes服务\n\n```BASH\nsudo systemctl stop kubelet\nsudo systemctl stop containerd\n```\n\n- 删除Kubernetes软件包\n\n```BASH\nyum remove kubeadm kubectl kubelet kubernetes-cni -y\n```\n\n- 删除配置文件\n\n```BASH\n# 清除残留文件\nrm -rf /root/.kube\nrm -rf /etc/cni/net.d\nrm -rf /etc/kubernetes/*\n```\n\n- 删除etcd数据目录\n\n```BASH\nrm -rf /var/lib/etcd\n```\n\n- 清除iptables或者ipvs的配置\n\n```BASH\n# sudo ipvsadm -C\n# sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo # # iptables -Xkubec\n```\n\n- 如果只是想重新部署集群\n\n```BASH\nkubeadm reset\n```\n\n`kubeadm reset` 命令用于清除当前节点上所有与 `kubeadm init` 或 `kubeadm join` 命令创建的 Kubernetes 集群相关的状态。其主要作用如下:\n\n1. 移除 Kubernetes 集群相关的系统服务,如 kubelet 和 kube-proxy。\n\n2. 删除所有在当前节点上创建的 Kubernetes 对象,包括 Pod、Service、Deployment 等。\n\n3. 移除 etcd 中与当前节点相关的信息,如节点标识、配置信息等。\n\n4. 删除 Kubernetes 数据目录,包括证书、密钥、kubeconfig 文件等。\n\n使用 `kubeadm reset` 命令可以清除当前节点上的所有 Kubernetes 相关状态,以便重新创建新的 Kubernetes 集群或者将当前节点加入到另一个 Kubernetes 集群中。在进行 `kubeadm reset` 操作之前,应该先备份当前节点上的重要数据和配置信息,以便在需要时进行恢复。\n\n\n\n### 2.1 服务器\t\n\n- **网络资源:**各节点间通过**千兆交换机**互联(非光纤交换机)\n- **管理节点:**\n - Gisweb4,Gisweb3\n- **计算节点:**\n - Gisweb3,GISweb2,dellm640-01, Gisweb4, dellslot03, dellslot4\n- **持久化存储资源:**\n - 目前采用:\n - nfs-client: 23服务器的/mnt/storage/k8s/pv\n- **Node1(刀片3):**\n - 子网 IP:192.168.0.177\n - CPU:Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz;32核心,64线程。\n - 内存:64GB(32GB*2),每根DDR4,3000Mhz\n- **Node2(刀片4):**\n - 子网 IP:192.168.0.209\n - CPU:Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz;32核心64线程。\n - 内存:64GB(32GB*2),每根DDR43200Mhz\n\n\n\n### 2.2 安装过程\n\n#### 2.2.1 前提条件\n\na. 节点之中不可以有重复的主机名、`MAC` 地址或 `product_uuid`\n\n```BASH\ncat /sys/class/dmi/id/product_uuid\n```\n\nb. 检查网络适配器:若有多个网卡,确保每个node的子网通过默认路由可达\n\nc. 防火墙开放端口(所有节点):\n\n![image-20230415145138479](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415145138479.png)\n\n```BASH\nsystemctl restart firewalld\nfirewall-cmd --zone=public --add-port=443/tcp --permanent\nfirewall-cmd --zone=public --add-port=6443/tcp --permanent\nfirewall-cmd --zone=public --add-port=2379-2380/tcp --permanent\nfirewall-cmd --zone=public --add-port=10250/tcp --permanent\nfirewall-cmd --zone=public --add-port=10259/tcp --permanent\nfirewall-cmd --zone=public --add-port=10257/tcp --permanent\n```\n\nd. 关闭防火墙(所有节点):\n\n```BASH\nsystemctl stop firewalld NetworkManager\nsystemctl disable firewalld NetworkManager\n```\n\ne. 关闭交换分区并禁用 SELinux(所有节点):\n\n```bash\n# 查看 交换分区\nfree -m\n\n# 将 `SELinux` 设置为 `permissive` 模式(相当于将其禁用) 第一行是临时禁用,第二行是永久禁用\nsetenforce 0\nsed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config\n\n# 关闭swap;第一行是临时禁用,第二行是永久禁用\nswapoff -a \nsed -ri 's/.*swap.*/#&/' /etc/fstab\n\n# 允许 iptables 检查桥接流量 (K8s 官方要求)\ncat <(所有节点):\n\n```bash\nyum install chrony -y\nsystemctl start chronyd\nsystemctl enable chronyd\nchronyc sources\n```\n\ng. 设置主机名并添加 ip 映射(所有节点):\n\n```BASH\n# 以 gisweb4 为例\n# 查看主机名cat \nhostname\n# 设置主机名\nhostnamectl set-hostname gisweb4\n# 更新\nbash\n\n# 添加 ip 映射\necho \"125.250.153.23 gisweb4\" >> /etc/hosts\necho \"125.250.153.23 gisweb4\" >> /etc/hosts\n# 两台无外网ip的刀片添加内网ip\n\n# /etc/hosts 文件内容如下:\n192.168.0.203 gisweb1\n192.168.0.202 gisweb2\n192.168.0.204 gisweb4\n192.168.0.208 gisweb3\n192.168.0.176 dellm640-01\n192.168.0.177 dellm640-03\n192.168.0.209 dellslot04\n\n125.220.153.26 gisweb1\n125.220.153.25 gisweb2\n125.220.153.22 gisweb3\n125.220.153.23 gisweb4\n125.220.153.28 dellm640-01\n```\n\n#### 2.2.2 升级 Linux 内核到最新(所有节点):\n\n**清除缓存,重新构建缓存:**\n\n```BASH\n# 清除缓存\nyum makecache & yum -y update\n```\n\n**参考链接:*https://zhuanlan.zhihu.com/p/368879345***\n\n#### 2.2.3 转发 IPv4 并让 iptables 看到桥接流量(所有节点)\n\n``````SHELL\n# a.\t验证br_netfilter是否已经加载\nlsmod | grep br_netfilter\n# b.\t加载br_netfilter模块:\nmodprobe br_netfilter\n# c.\tiptabels桥接\ncat <(所有节点)\n\n``````BASH\nyum install ipvsadm ipset sysstat conntrack libseccomp -y\n\ncat <(所有节点,lb除外)\n\n```BASH\ncat <(选用containerd,弃用docker):\n\n- **Docker-engine+cir-dockerd方案(舍弃)**:从kubernetes 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,需要在kubelet和docker之间加上一个中间层cri-docker。cri-docker是一个支持CRI标准的shim。一头通过CRI跟kubelet交互,另一头跟docker api交互,从而间接的实现了kubernetes以docker作为容器运行时。但是这种架构缺点也很明显,**调用链更长,效率更低**。因此选用containerd作为容器runtime\n- **containerd**方案: **containerd**是一个**docker**的容器**runtime**,成为**CNCF**的官方项目\n\n官方安装教程:https://github.com/containerd/containerd/blob/main/docs/getting-started.md\n\n```BASH\n# 安装containerd.io\nyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo\nyum install containerd.io\n\n\n# 安装CNI插件\n# i.下载cni-plugins.tar 从https://github.com/containernetworking/plugins/releases\n# 在线下载:\n# wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz\n# ii.在/opt/cni/bin下解压:\n\n# 把22上的拷贝到没有公网ip的服务器上\n# scp -P22 /opt/cni/bin/cni-plugins-linux-amd64-v1.1.1.tgz root@192.168.0.203:/opt/cni/bin/\n\nmkdir -p /opt/cni/bin\ncd /opt/cni/bin\ntar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz\n\n\n# 重启服务:\nsystemctl restart containerd\n# 开机启动:\nsystemctl enable containerd\n\n\n# 配置systemd cgroup驱动\n# 修改配置文件,将 SystemdCgroup 改为 true 注意配置项是区分大小写的\ncontainerd config default | sudo tee /etc/containerd/config.toml\nvim /etc/containerd/config.toml\n\n[plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n ...\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n# 并将 sandbox_image 地址修改为国内的地址\n并且将 sandbox_image = \"registry.k8s.io/pause:3.6\"\n修改为 sandbox_image = \"registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6\"\n\n# 启动 containerd\nsystemctl restart containerd\n\n# 开机自启\nsystemctl enable containerd\n\n# 启动成功后可以查看到监听的端口\nnetstat -nlput | grep containerd\ntcp 0 0 127.0.0.1:36669 0.0.0.0:* LISTEN 8665/containerd off (0.00/0/0)\n```\n\n\n#### 2.2.7 在所有电脑上安装 kubeadm, kubelet and kubectl(所有节点)\n\n```BASH\n# a.\tkubeadm: the command to bootstrap the cluster.\n# b.\tkubelet: the component that runs on all of the machines in your cluster and does things like starting pods and containers.\n# c.\tkubectl: the command line util to talk to your cluster.\n```\n\n1. *配置阿里云的k8s源,加速安装*\n\n```BASH\ncat <若出现如下错误(上一次集群初始化的残留文件)\n\n```bash\n# 如果出现报错 \n[ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists\n```\n\n执行如下命令后再次初始化\n\n```BASH\nrm -rf /var/lib/etcd\nrm -rf /etc/kubernetes/manifests/* \n```\n\n#### 2.2.9 配置环境变量(初始化后)\n\n```BASH\nmkdir -p $HOME/.kube\ncp -i /etc/kubernetes/admin.conf $HOME/.kube/config\nchown $(id -u):$(id -g) $HOME/.kube/config\n```\n\n#### 2.2.10 将 master 作为node(管理节点上执行)\n\n- 检查 node 是否存在污点\n - 污点值有三种:\n - NoSchedule:一定不被调度\n - PreferNoSchedule:尽量不被调度【也有被调度的几率】\n - NoExecute:不会调度,并且还会驱逐Node已有Pod\n\n```BASH\nkubectl describe nodes gisweb4 |grep Taints\n```\n\n- 删除污点:\n\n```BASH\n# 本次删除的污点为:node-role.kubernetes.io/control-plane-\nkubectl taint nodes --all node-role.kubernetes.io/control-plane-\n```\n\n#### 2.2.11 安装 Pod 网络插件(CNI:Container Network Interface)(master)\n\n你必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信。\n\n确保kubeadm初始化时,pod_cidr 为10.244.0.0\n\n- 下载 **yml** 配置文件\n - 或自己下载到本地\n\n```BASH\ncurl https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml -O\n```\n\n- 编辑**kube-flannel.yml**\n - 找到如下位置,添加 **iface-regex**\n\n```BASH\nvim kube-flannel.yml\n# 添加\n- --iface-regex=^192.168..\n```\n\n![](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408114839608.png)\n\n- 构建\n\n```BASH\nkubectl apply -f kube-flannel.yml\n```\n\n#### 2.2.12 node 节点加入集群\n\n- 管理节点获取加入命令:\n\n```BASH\nkubeadm token create --print-join-command\n# 返回如下\nkubeadm join 125.220.153.23:6443 --token x0wdaj.d5wltdzdtos22fl6 --discovery-token-ca-cert-hash sha256:9245d363cdeb1757bacba21b9ccdc06a28e7490bcedfb0eeb404b56f769fa112\n```\n\n- 在 node 节点执行生成命令\n\n如果此步报如下错误\n\nThe connection to the server localhost:8080 was refused - did you specify the right host\n\n1. 出现这个问题的原因是kubectl命令需要使用`kubernetes-admin`的身份来运行,在`kubeadm int`启动集群的步骤中就生成了`/etc/kubernetes/admin.conf`。\n2. 因此,解决方法如下,将主节点中的`/etc/kubernetes/admin.conf`文件拷贝到工作节点相同目录下:\n3. 然后分别在工作节点上配置环境变量:\n\n\n{% p red, 解决方案 %}\n\n- 主节点执行\n\n```BASH\n# 将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到工作节点相同目录下:\nscp -P22 /etc/kubernetes/admin.conf oge@125.220.153.22:/etc/kubernetes/\n```\n\n- `node` 节点执行如下命令后,再次执行加入集群的命令\n\n```BASH\necho \"export KUBECONFIG=/etc/kubernetes/admin.conf\" >> ~/.bash_profile\nsource ~/.bash_profile\n```\n\n- 如果是重新加入集群,需要 `reset` 一下\n\n```BASH\nkubeadm reset\n```\n\n\n\n#### 2.2.13 添加新的 master 节点\n\n- 管理节点:\n\n```BASH\n# 管理节点查看\nkubeadm token create --print-join-command\n# 生成如下\nkubeadm join 125.220.153.23:6443 --token mc56rw.t9b3d1ql53yhom9y --discovery-token-ca-cert-hash sha256:753ccf865a9c590413043d469a9848300871afaef7221e3fdb97d981939a2b83\n\n# 管理节点\nkubeadm init phase upload-certs --upload-certs \n# 输出\nI0413 11:00:30.817038 10009 version.go:256] remote version is much newer: v1.27.0; falling back to: stable-1.25\n[upload-certs] Storing the certificates in Secret \"kubeadm-certs\" in the \"kube-system\" Namespace\n[upload-certs] Using certificate key:\n70d43cde7f6423b5c3e88c0fa9d08511cefbc53992dc63a13544cd548a912941\n\n# 管理节点,在networking前添加:controlPlaneEndpoint: 125.220.153.23:6443\nkubectl -n kube-system edit cm kubeadm-config\n```\n\n- 新的master节点\n\n```BASH\n# 新节点\n# 重新加入的话,检查是否需要kill掉6443端口(这是之前的api-service服务)\nkubeadm join 125.220.153.23:6443 --token mc56rw.t9b3d1ql53yhom9y --discovery-token-ca-cert-hash sha256:753ccf865a9c590413043d469a9848300871afaef7221e3fdb97d981939a2b83 --control-plane --certificate-key 70d43cde7f6423b5c3e88c0fa9d08511cefbc53992dc63a13544cd548a912941\n\n# 生成\nThis node has joined the cluster and a new control plane instance was created:\n\n* Certificate signing request was sent to apiserver and approval was received.\n* The Kubelet was informed of the new secure connection details.\n* Control plane label and taint were applied to the new node.\n* The Kubernetes control plane instances scaled up.\n* A new etcd member was added to the local/stacked etcd cluster.\n\nTo start administering your cluster from this node, you need to run the following as a regular user:\n\n mkdir -p $HOME/.kube\n sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\n sudo chown $(id -u):$(id -g) $HOME/.kube/config\n\nRun 'kubectl get nodes' to see this node join the cluster.\n```\n\n\n\n## 3 K8S 管理平台 dashboard 环境部署(管理节点)\n\n- 下载 **yaml** 配置文件并应用\n - 或下载到本地然后上传\n\n```bash\nkubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml\n```\n\n- 修改配置文件(以node)\n - 但是这个只能内部访问,所以要外部访问,要么部署 ingress,要么就是设置 service NodePort 类型。这里选择 service 暴露端口。\n\n```BASH\nkubectl edit svc kubernetes-dashboard -n kubernetes-dashboard\n\n# 将其中的,type: ClusterIP 修改成type: NodePort,保存退出即可。\n\n# 查看服务的暴露端口,需在安全组放行\nkubectl get svc -A |grep kubernetes-dashboard\n\n```\n\n![image-20230415154841715](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415154841715.png)\n\n- 权限认证\n\n```BASH\n# 创建访问用户\nkubectl apply -f https://kuboard.cn/install-script/k8s-dashboard/auth.yaml\n# 获取访问令牌\nkubectl -n kubernetes-dashboard create token admin-user \n# 生成的令牌\neyJhbGciOiJSUzI1NiIsImtpZCI6IkdVQTZzb3JEM1FHdkpxVDNsSEwtVEZWc2hyR08tbmFFWnFGX2Q2OGt5cEkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjgzNzM1MTQ1LCJpYXQiOjE2ODM3MzE1NDUsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiMzBlMWQzNDEtNDc0Yi00M2MyLWIyNzYtZGIxZTU4NzM5ZTgxIn19LCJuYmYiOjE2ODM3MzE1NDUsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.mg1IU29tBpH23nglJVbRmVa2A26WZjXxMCzckQyb-dnviLBRzBuvNebb8H4YH5CNJUPkB2GGC_r7dlm5zEbPpK8RqkbwXy-wqkOoMephs83gIQkJ3RgskpWqTgqqg87e6WXHRtuzYsQQZ4Rq3Y4uQy9jJS9o1lIoRTujpmpWORb9vu4JN0RqEfK2chQqNsYCe_TCtvtvkP2EyuU3QSeYdvWh5NNZ9CYwA8l8eqA6ijrmTqZjnI6Q9Ymo7trKSuGFmffotBpN9dTYZoyv6Io_VgEz6_1oHsA0pwG-3wc41Ly11sDAzwjZvoGN1yfw0vsVcwnAjH4LkRG2ImwYIcZbig\n```\n\n- 访问方式(每个节点 ip 均可访问):https://125.220.153.23:30151\n\n\n\n## 4 安装K8S的包管理工具Helm (管理节点)\n参考:https://helm.sh/docs/intro/install/ \n\n\n- 这里以下载压缩包安装为例:\n\n参考:https://www.cnblogs.com/zhanglianghhh/p/14165995.html\ngithub地址:https://github.com/helm/helm\n\n\n\n![image-20230413112634363](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230413112634363.png)\n\n```BASH\ncd ~/k8s/helm\nwget https://get.helm.sh/helm-v3.11.3-linux-amd64.tar.gz\ntar zxfv helm-v3.11.3-linux-amd64.tar.gz\nmv ./linux-amd64/helm /usr/bin/\n# 显示版本,安装完成\nhelm version\n```\n\n## 5 安装K8S的包管理工具 krew`(管理节点)`\n参考:https://krew.sigs.k8s.io/docs/user-guide/setup/install/ \n\n\n- 确保 git 已经安装\n\n```BASH\ngit version\n# 若未安装\nyum -y install git\n```\n\n- 安装krew\n\n```BASH\n(\n set -x; cd \"$(mktemp -d)\" &&\n OS=\"$(uname | tr '[:upper:]' '[:lower:]')\" &&\n ARCH=\"$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\\(arm\\)\\(64\\)\\?.*/\\1\\2/' -e 's/aarch64$/arm64/')\" &&\n KREW=\"krew-${OS}_${ARCH}\" &&\n curl -fsSLO \"https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz\" &&\n tar zxvf \"${KREW}.tar.gz\" &&\n ./\"${KREW}\" install krew\n)\n```\n\n- 添加 `$HOME/.krew/bin`目录到您的 PATH 环境变量。 更新你的 `.bashrc`或者 `.zshrc`文件\n\n```BASH\n# 永久写的用户的环境变量文件,避免登出后失效\nexport PATH=\"${KREW_ROOT:-$HOME/.krew}/bin:$PATH\"\nsource ~/.bashrc\n```\n\n- 若安装失败,采用压缩包安装\n\n```BASH\nwget https://github.com/kubernetes-sigs/krew/releases/latest/download/krew-linux_amd64.tar.gz\n\ntar -zxvf krew-linux_amd64.tar.gz\n# 添加$HOME/.krew/bin目录到PATH环境变量\nexport PATH=\"${KREW_ROOT:-$HOME/.krew}/bin:$PATH\"\n# 配置为 kubectl 插件\nmv ./krew-linux_amd64 ./kubectl-krew\nmv ./kubectl-krew /usr/local/bin/\n# 测试\nkubectl krew version\n```\n\n- 检查是否安装成功\n\n```BASH\nkubectl krew\nkubectl plugin list\n```\n\n\n\n## 6 为 K8S 创建 PV 持久卷\n\n### 6.1 PV和PVC\n\n- 持久卷(PersistentVolume,PV)是集群中由管理员配置的一段网络存储。它是集群中的资源,就像节点是集群资源一样。PV持久卷和普通的Volume一样,也是使用卷插件来实现的,只是它们拥有独立于任何使用PV的Pod的生命周期。此API对象捕获存储实现的详细信息,包括NFS,iSCSI或特定于云提供程序的存储系统。\n\n- 持久卷申领(PersistentVolumeClaim,PVC)表达的是用户对存储的请求。概念上与Pod类似。Pod会耗用节点资源,而PVC申领会耗用PV资源。\n\n### 6.2 用 storageClass 动态创建 PV \n\n- 对1PB的大量目录创建NFS服务,gisweb1-4,以gisweb4为例子\n\n```bash\n安装NFS: \nyum -y install nfs-utils rpcbind\n```\n\n- 设置持久卷权限\n\n```BASH\n# 执行权限\nchown -R nobody:nfsnobody /mnt/storage/k8s/pv\n#chmod -R 777 /mnt/storage/k8s/pv\n```\n\n- 配置 nfs\n\n```BASH\nvim /etc/exports\n# 添加:\n/mnt/storage/k8s/pv 192.168.0.0/24(rw,sync,no_root_squash)\n# 以上设置让所有的 IP 都有效\n```\n\n```BASH\nsystemctl start rpcbind\nsystemctl enable rpcbind\nsystemctl enable nfs\nsystemctl start nfs\nsystemctl start nfs-server\nsystemctl enable nfs-server\n\nsystemctl start firewalld\nfirewall-cmd --permanent --add-service=nfs\nfirewall-cmd --reload\nsystemctl stop firewalld && sudo systemctl disable firewalld\n```\n\n- 检查\n\n```BASH\nexportfs -rv\nshowmount -e 127.0.0.1\n```\n\n- 所有节点安装nfs客户端\n\n```BASH\nyum install -y nfs-utils\n# 每个节点挂载nfs客户端的存储目录,本次nfs客户端在gisweb4(192.168.0.204)上\nmount -t nfs 192.168.0.204:/mnt/storage/k8s/pv /mnt/storage/k8s/pv \n# 检查挂载情况\ndf -h\n```\n\n- 安装nfs-client-provisioner (需要翻墙)\n\n参考:[**https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner**](https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner)\n\n```bash\n# 更新helm repo\nhelm repo update\n# 搜索helm库中nfs版本\nhelm search repo nfs-subdir-external-provisioner\n\n# 添加 helm 仓库\nhelm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/\n\nhelm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \\\n--set nfs.server=192.168.0.204 \\\n--set nfs.path=/mnt/storage/k8s/pv\t \\\n--set image.repository=registry.cn-hangzhou.aliyuncs.com/xzjs/nfs-subdir-external-provisioner \\\n--set image.tag=v4.0.0\n```\n\n- 手动安装 nfs-client-provisioner\n\n参考:http://www.mydlq.club/article/109/#%E5%88%9B%E5%BB%BA-nfs-subdir-external-provisioner-%E9%83%A8%E7%BD%B2%E6%96%87%E4%BB%B6\n\n- 成功后,安装时添加持久化参数,其中 nfs-storage 为安装的 storageclass 的 provisioner 字段名字\n\n## 7 安装 kubeAPPS 可视化软件管理工具\n\n参考:[**https://kubeapps.dev/docs/latest/tutorials/getting-started/**](https://kubeapps.dev/docs/latest/tutorials/getting-started/)\n\n- 安装\n\n```BASH\n# 添加 kubeapps 仓库\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n# 创建 kubeapps 的命名空间\nkubectl create namespace kubeapps\n# 安装\nhelm install kubeapps --namespace kubeapps bitnami/kubeapps\n```\n\n- 创建证书\n\n```bash\n# 创建用于访问 Kubeapps 和 Kubernetes 的演示凭证\nkubectl create --namespace default serviceaccount kubeapps-operator\nkubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator\n\n\ncat <访问:http://125.220.153.23:31885/\n\n## 8 在 K8S 上部署虚拟机服务 Kubevirt\n\n- 设置 **K8S** **ApiServer** 允许特权容器\n\n```BASH\nvim /etc/kubernetes/manifests/kube-apiserver.yaml\n# 设置 \n--allow-privileged=true\n```\n\n- 检查每个节点是否支持虚拟化\n\n```BASH\nvirt-host-validate qemu\n# 如果显示没有这个命令,先安装 libvrt 和 qemu 软件包:\nyum install -y qemu-kvm libvirt virt-install bridge-utils\n```\n\n- 若有**warnning**,需要解决\n\n![image-20230408181653957](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408181653957.png)\n\n```BASH\n# 1\nvim /etc/default/grub\n# 2.添加\nGRUB_CMDLINE_LINUX=\"crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on\"\n# 3 \ngrub2-mkconfig -o /boot/grub2/grub.cfg\n# 4 \nreboot\n```\n\n- 安装 **Kubevirt**\n\n```BASH\n# K8S 1.25版本,Kubervirt必须0.57.2以上,才能适配\nkubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0-rc.0/kubevirt-operator.yaml\n\nkubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0-rc.0/kubevirt-cr.yaml\n```\n\n- 等待 **Kubevirt** 资源创建完毕\n\n```BASH\nkubectl -n kubevirt wait kv kubevirt --for condition=Available\n```\n\n- 安装 **CDI** \n\n参考:https://kubevirt.io/labs/kubernetes/lab2.html\n\n- 安装 **VNC**\n\n```BASH\nyum install -y tigervnc\n```\n\n- 查看 **Kubevirt** 资源\n\n```BASH\nkubectl get pods -n kubevirt\n```\n\n![image-20230408185646502](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408185646502.png)\n\n- 安装 **Kubevirt** 的 **cli** 管理工具\n\n```BASH\nkubectl krew install virt\nkubectl virt help\n```\n\n- Kubevirt创建/删除虚拟机服务\n\n```BASH\n# 1.\t创建yaml文件\nXxx\n# 2.\t运行一个虚拟机\nkubectl apply -f test.yaml\n# 3.\t查看虚拟机\nkubectl get vmis\n# 4.\t停止/删除虚拟机\nkubectl delete -f vmi.yaml\n# 或者\nkubectl delete vmis testvmi\n# 5.\t开始/停止/暂停虚拟机\nvirtctl start/stop/pause my-vm\n```\n\n## 9 在 K8S 上部署 PostgreSQL\n\n- 安装\n\n - 注意:数据库安装需要持久卷,需提前创建满足要求的**pv**,或者创建**nas**的**stroageclass**,以自动根据**mysql**的**pvc**创建**pv**。\n\n\n - 集群已经配置23服务器的`/mnt/storage/k8s/pv`为NAS,并已经配置名字为**nas-storage**的**sc**\n\n\n```BASH\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n# 首先检查是否有oge这个命名空间,否则执行如下进行创建\nkubectl create ns oge\n# postgresql 这个名字可以自己定义,但后面每一步都要注意对应更改\nhelm install -n oge bitnami/postgresql \\\n--set global.storageClass=nfs-client \\\n--set readReplicas.persistence.storageClass=nfs-client \\\n--set primary.persistence.storageClass=nfs-client \\\n--set primary.persistence.size=200Gi \\\n--set readReplicas.persistence.size=200Gi \\\n--set image.tag=14.5.0-debian-11-r6\n\n\nhelm install -n geoctap bitnami/postgresql \\\n--set global.storageClass=nfs-client \\\n--set readReplicas.persistence.storageClass=nfs-client \\\n--set primary.persistence.storageClass=nfs-client \\\n--set primary.persistence.size=200Gi \\\n--set readReplicas.persistence.size=200Gi \\\n--set image.tag=14.5.0-debian-11-r6\n# 指定版本,可在kubeapps里面查看\n# --set image.tag=14.5.0-debian-11-r6\n```\n\n- 查看 postgresql 密码\n\n```BASH\nkubectl get secret --namespace oge postgresql -o jsonpath=\"{.data.postgres-password}\" | base64 -d\n\n# 密码\n7jXf2gsmUX\n```\n\n- 更改服务端口\n\n```BASH\nkubectl edit svc --namespace oge postgresql\n# 将 type=ClusterIP 改为 NodePort\n# b8:85:84:71:64:28\necho \"SUBSYSTEM==\\\"net\\\", ACTION==\\\"add\\\", DRIVERS==\\\"?*\\\", ATTR{address}==\\\" b8:85:84:71:64:28\\\", ATTR{type}==\\\"1\\\", KERNEL==\\\"eno*\\\", NAME=\\\"eno1\\\"\" >> /etc/udev/rules.d/70-persistent-net.rules\n```\n\n- 缩放副本集\n\n```BASH\nkubectl get deployment \n# 发现并没有postgresql\nkubectl get all -n oge\n# 发现有statefulset.apps/postgresql\n# 设置副本集个数为1\nkubectl scale --replicas=1 statefulset.apps/postgresql -n oge\n```\n\n- 命令行进入pgsql\n\n```bash\n# 进入pgsql的pod\nkubectl exec -it -n oge postgresql-0 bash \n# 用户登录\npsql -U postgres \n# 输入密码\n7jXf2gsmUX\n```\n\n- 在pod外面执行sql\n\n```BASH\npsql -h 125.220.153.23 -p 30865 -U postgres -W -f ./public.sql\n```\n\n\n\n## 10 在 K8S 上部署 MySQL\n\n- 安装\n\n - 注意:数据库安装需要持久卷,需提前创建满足要求的`pv`,或者创建`nas`的 `stroageclass`,以自动根据postgresql的pvc创建pv。\n\n - 集群已经配置23服务器的`/mnt/storage/k8s/pv`为 `NAS`,并已经配置名字为 `nas-storage` 的 `sc`\n\n\n```BASH\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n\n# 安装\nhelm install -n oge mysql bitnami/mysql \\\n--set global.storageClass=nfs-client \\\n--set readReplicas.persistence.storageClass=nfs-client \\\n--set primary.persistence.storageClass=nfs-client \\\n--set primary.persistence.size=200Gi \\\n--set readReplicas.persistence.size=200Gi\n```\n\n- 查看 MySQL 密码\n\n```BASH\nkubectl get secret --namespace oge mysql -o jsonpath=\"{.data.mysql-root-password}\" | base64 -d\n\n# 密码\nVubCMiHvT1\n```\n\n- 更改服务端口\n\n```BASH\nkubectl edit svc --namespace oge mysql\n# 将type=ClusterIP改为NodePort\n# b8:85:84:71:64:28\necho \"SUBSYSTEM==\\\"net\\\", ACTION==\\\"add\\\", DRIVERS==\\\"?*\\\", ATTR{address}==\\\" b8:85:84:71:64:28\\\", ATTR{type}==\\\"1\\\", KERNEL==\\\"eno*\\\", NAME=\\\"eno1\\\"\" >> /etc/udev/rules.d/70-persistent-net.rules\n```\n\n2. 缩放副本集\n\n```BASH\nkubectl get deployment \n# 发现并没有mysql\nkubectl get all -n oge\n# 发现有statefulset.apps/mysql\nkubectl scale --replicas=1 statefulset.apps/mysql -n oge\n```\n\n3. 在K8S中进入数据库\n\n```BASH\nkubectl exec -it -n oge mysql-1 bash\n# 进入后登录用户\nmysql -u root -p\n# 输入密码\n```\n\n\n\n## 11 在K8S上部署 MongoDB \n\n- 安装\n\n - 注意:数据库安装需要持久卷,需提前创建满足要求的pv,或者创建nas的stroageclass,以自动根据postgresql的pvc创建pv。\n\n - 集群已经配置23服务器的`/mnt/storage/k8s/pv`为NAS,并已经配置名字为nas-storage的sc\n\n\n```BASH\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n\n# 安装\nhelm install -n ydy mongodb bitnami/mongodb \\\n--set global.storageClass=nfs-client \\\n--set readReplicas.persistence.storageClass=nfs-client \\\n--set primary.persistence.storageClass=nfs-client \\\n--set primary.persistence.size=100Gi \\\n--set readReplicas.persistence.size=100Gi\n```\n\n- 查看 MongoDB 密码\n\n```BASH\nkubectl get secret --namespace ydy mongodb -o jsonpath=\"{.data.mongodb-root-password}\" | base64 -d\n\n# 密码\nWUL9FPQ2V9\n```\n\n- 更改服务端口\n\n```BASH\nkubectl edit svc --namespace ydy mongodb\n# 将type=ClusterIP改为NodePort\n# b8:85:84:71:64:28\necho \"SUBSYSTEM==\\\"net\\\", ACTION==\\\"add\\\", DRIVERS==\\\"?*\\\", ATTR{address}==\\\" b8:85:84:71:64:28\\\", ATTR{type}==\\\"1\\\", KERNEL==\\\"eno*\\\", NAME=\\\"eno1\\\"\" >> /etc/udev/rules.d/70-persistent-net.rules\n```\n\n2. 缩放副本集\n\n```BASH\nkubectl get deployment \n# 发现并没有mongodb\nkubectl get all -n ydy\n# 发现有statefulset.apps/mongodb\nkubectl scale --replicas=1 statefulset.apps/mongodb -n ydy\n```\n\n3. 在K8S中进入数据库\n\n```BASH\nkubectl exec -it -n ydy mongodb-644c657c4f-x62cn bash\n```\n\n\n\n## 12 在 K8S 上部署 Apache Spark\n\n两个方式,第一种方式为Spark官方提出的;第二种为Google提出的,更符合K8S原生概念\n\n1. Spark On K8S\n2. spark-on-k8s-operator\n\n![image-20230408170401365](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408170401365.png)\n\n
Spark On K8S
\n\n![image-20230408170444023](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408170444023.png)\n\n\n\n
spark-on-k8s-operator
\n\n\n\n### 12.1 安装 spark-on-k8s-operator \n\n参考 :https://blog.csdn.net/w8998036/article/details/122217230\n\n- 安装\n\n```BASH\nhelm repo add spark-operator https://googlecloudplatform.github.io/spark-on-k8s-operator \n\n# 注意是否存在 spark-operator 命名空间,没有则创建\nkubectl create ns spark-operator\n\n# 安装\nhelm install spark-operator spark-operator/spark-operator --namespace spark-operator --set sparkJobNamespace=default --set webhook.enable=true\n```\n\n- 创建服务账户\n\n```bash\nvim spark-application-rbac.yaml\n# 内容如下\n```\n\n```yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: spark\n namespace: spark\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n namespace: spark\n name: spark-role\nrules:\n- apiGroups: [\"\"]\n resources: [\"pods\"]\n verbs: [\"*\"]\n- apiGroups: [\"\"]\n resources: [\"services\"]\n verbs: [\"*\"]\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: spark-role-binding\n namespace: spark\nsubjects:\n- kind: ServiceAccount\n name: spark\n namespace: spark\nroleRef:\n kind: Role\n name: spark-role\n apiGroup: rbac.authorization.k8s.io\n```\n\n```BASH\nkubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root\n```\n\n- 编写作业模板并提交作业\n\n_创建一个Spark作业的YAML配置文件,并进行部署。_\n\n1. 创建spark-pi.yaml文件\n\n```YAML\napiVersion: \"sparkoperator.k8s.io/v1beta2\"\nkind: SparkApplication\nmetadata:\n name: spark-pi\n namespace: spark\nspec:\n type: Scala\n mode: cluster\n image: \"registry.cn-hangzhou.aliyuncs.com/yudayu/spark:v3.1.1\" \n # 1gcr.io/spark-operator/spark:v3.1.1需要更换镜像,gcr.io目前国内无法访问。可以先对docker挂代理,pull到阿里云镜像后\n imagePullPolicy: IfNotPresent\n mainClass: org.apache.spark.examples.SparkPi\n mainApplicationFile: \"local:///opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar\" \n # 需要更换自己的jar包,local指该jar位于image内,可换成所有节点都能访问的web路径,或者通过指定nas挂载pv,将jar包放在nas的pv里\n sparkVersion: \"3.1.1\"\n restartPolicy:\n type: Never\n volumes:\n - name: \"test-volume\"\n hostPath:\n path: \"/tmp\"\n type: Directory\n driver:\n cores: 1\n coreLimit: \"1200m\"\n memory: \"512m\"\n labels:\n version: 3.1.1\n serviceAccount: spark\n volumeMounts:\n - name: \"test-volume\"\n mountPath: \"/tmp\"\n executor:\n cores: 1\n instances: 2\n memory: \"512m\"\n labels:\n version: 3.1.1\n volumeMounts:\n - name: \"test-volume\"\n mountPath: \"/tmp\"\n```\n\n2. 部署一个Spark计算任务\n\n```BASH\nkubectl apply -f spark-pi.yaml\n```\n\n运维\n\n```BASH\nkubectl get sparkapplications\nkubectl describe sparkapplications\nkubectl get svc # 查看该任务的spark ui\n```\n\n### 12.2 安装 Spark On K8S\n\n```BASH\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n# 注意是否存在 spark-operator 命名空间,没有则创建\nkubectl create ns spark-on-k8s\nhelm install -n spark-on-k8s spark bitnami/spark \\\n --set worker.coreLimit=28 \n```\n\n```BASH\n./bin/spark-submit \\\n --class org.apache.spark.examples.SparkPi \\\n --conf spark.kubernetes.container.image=bitnami/spark:3 \\\n --master k8s://https://125.220.153.23:6443 \\\n --conf spark.kubernetes.driverEnv.SPARK_MASTER_URL=spark://10.97.43.141:7077 \\\n--deploy-mode cluster \\\n --executor-memory 20G \\\n --num-executors 10 \\\n--conf spark.executor.instances=5 \\\nhttps:///data/spark-examples_2.12-3.3.0.jar 1000\n```\n\n```bash\nkubectl run --namespace spark-on-k8s spark-oge --rm --tty -i --restart='Never' \\\n--image bitnami/spark:3 \\\n-- spark-submit --master spark://10.97.43.141:7077 \\\n--class org.apache.spark.examples.SparkPi \\\n --deploy-mode cluster \\\n/data/spark-examples_2.12-3.3.0.jar 100000\n```\n\n\n\n## 13 在K8S上部署redis集群\n\n- 待更\n\n\n\n## 14 在K8S上部署nginx\n\n### 14.1 创建pv\n\n```BASH\nvim nginx-pv.yaml\n```\n\n```YAML\napiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: nginx-ydy-pv\n namespace: ydy\nspec:\n capacity:\n storage: 10Gi\n accessModes:\n - ReadWriteOnce\n persistentVolumeReclaimPolicy: Retain\n storageClassName: manual\n hostPath:\n path: /mnt/storage/k8s/pv/ydy-nginx-pvc\n```\n\n### 14.2 创建pvc\n\n```BASH\nvim nginx-pvc.yaml\n```\n\n```YAML\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n name: nginx-ydy-pvc\n namespace: ydy\nspec:\n accessModes:\n - ReadWriteOnce\n resources:\n requests:\n storage: 10Gi\n storageClassName: manual\n```\n\n### 14.3 安装nginx并设置静态资源挂载的pvc\n\n将nginx中的`/app`挂载到`/mnt/storage/k8s/pv/luluancheng-nginx-pvc`下\n\n```BASH\nhelm install -n ydy nginx bitnami/nginx \\\n--set staticSitePVC=nginx-ydy-pvc\n```\n\n\n\n\n\n## 附录:疑难问题解决:\n\n### 1 K8S强制删除 namespace(会删除该命名空间中的所有 pod )\n\n```bash\n#1、将该分区导出为json文件,以 oge namespace为例\nkubectl get ns oge -o json > oge.json\n#2、编辑该json文件,将spec内的内容全部删除,然后保存退出\n```\n\n![22f0a5cbf0424425b0d62681f79cb713](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/22f0a5cbf0424425b0d62681f79cb713.png)\n\n![ef949b8bb503410c918894ab20bad993](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/ef949b8bb503410c918894ab20bad993.png)\n\n```BASH\n# 3、另开一个终端,启动一个proxy\nkubectl proxy --port=8081\n```\n\n```BASH\n# 4、执行一个curl命令,更新oge namespace\ncurl -k -H \"Content-Type: application/json\" -X PUT --data-binary @oge.json http://127.0.0.1:8081/api/v1/namespaces/oge/finalize\n```\n\n\n\n### 2 CNI网络错误\n\n- 当迁移集群之后,拉取镜像报cni网络错误,如下:\n\n![8d5d49703c8ac59f24fde81b3982b616](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/8d5d49703c8ac59f24fde81b3982b616.png)\n\n- 从上面的截图中看到问题出现在给Pod分配IP上,意思是 cni0 的IP不同于``10.244.9.1/24`,下面我们使用 `ifconfig`命令查看IP信息\n\n![79e65e4f797200ad98feac6f8b2d4254](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/79e65e4f797200ad98feac6f8b2d4254.png)\n\n- 从上面的图中我们可以看到``flannel.1`的 **IP** 为`10.244.9.0`,然后我们又使用`cat /run/flannel/subnet.env`,该文件内容如下: \n\n![310efbdb614636a17aa48eaf4a8dc2c5](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/310efbdb614636a17aa48eaf4a8dc2c5.png)\n\n- 其实现在的问题就比较明确了,我们使用的Overlay network为Flannel,也就是说Pod的IP地址段应该在Flannel的subnet下,而现在我们看到cni0的IP地址段与flannel subnet地址段不同,所以就出现了问题。 \n\n- 解决方案\n - 方法1是将 cni0 的 IP 段修改为``10.244.9.1`\n - 方法2是将这个错误的网卡删除掉,之后会自动重建\n\n```bash\n# 下面我们删除错误的cni0,然后让它自己重建\nifconfig cni0 down\nip link delete cni0\n```\n\n\n\n### 3 28 服务器增加路由(为了让两台刀片上网)\n\n- 28上执行\n\n```BASH\niptables -t nat -A POSTROUTING -s 192.168.0.209/24 -o em1_2 -j MASQUERADE\niptables -t nat -A POSTROUTING -s 192.168.0.177/24 -o em1_2 -j MASQUERADE\n```\n\n\n\n### 4 异常断电等导致 etcd 心跳检测出现问题\n\n- [Kubernetes API Server cannot be started after improper reboot](https://github.com/kubernetes/kubernetes/issues/107491)\n\n- [K8S: etcd 集群备份灾难恢复操作手册](https://blog.51cto.com/liruilong/6060676)\n\n\n\n### 5 OpenStack服务器网络跳转镜像\n\n>作用: 保证OpenStack上服务器与实验室服务器可以 ping 通\n\n- **IP**\n - `115.156.91.250`\n- **网关**\n - `115.156.91.254`\n- **子网掩码**\n - `255.255.255.0`\n\n\n\n\n\n","source":"_posts/K8S集群环境搭建(Containerd作为容器).md","raw":"---\ntitle: K8S集群环境搭建(Containerd作为容器)\ncover: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D2793533854%2C2733450472%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'K8S, Containerd'\ncategories:\n - 云原生\ntags:\n - K8S\n - Containerd\nabbrlink: 9d39de82\ndate: 2023-08-06 15:08:12\nswiper_index: 1 #置顶轮播图顺序,非负整数,数字越大越靠前\n---\n\n## 1 前述\n\n### 1.1 云原生定义\n\n- **Pivotal《传统应用和SOA向云原生转型指南》(2015)的云原生的特征:**\n - 符合 12 要素应用\n - 基准代码:一份基准代码,多份部署(类似于Git版本控制系统的main分支);\n - 显示声明所有依赖关系:通过依赖清单,确切地声明所有依赖项;\n - 把后端服务当作附加资源:各种后端服务(如数据库、消息队列、邮件服务、缓存系统),不区别对待本地或第三方服务;\n - 构建、发布、运行:严格区分构建、发布、运行这三个步骤;\n - 无状态进程:应用的进程必须无状态;\n - 端口绑定:互联网应用通过端口绑定来提供服务,并监听发送至该端口的请求。应用完全自我加载,不依赖于任何网络服务器;\n - 并发:通过进程模型进行扩展。进程是一等公民;\n - 易处理:进程可以瞬间开启或停止,有利于快速、弹性的伸缩应用。进程应追求最小启动时间;进程一旦接受终止信号就会优化的终止;进程在面对突然死亡时保持健壮;\n - 开发环境与线上环境等价:尽可能的保持开发,预发布,线上环境相同,以尽量做到持续部署;\n - 日志:应用本身从不存储自己的输出流,不应该试图去写或者管理日志文件,相反,每一个运行的进程都会直接的标准输出(stdout)事件流;\n - 管理进程:后台管理任务当作一次性进程运行;\n - 面向微服务架构\n - 微服务将单体系统分解为多个“仅做好一件事”的可独立部署的服务。这件事通常代表某项业务能力,或者最小可提供业务价值的“原子“服务单元。具备以下优点:\n - 变更周期解耦:只要变更限于单一有界的环境,并且服务继续履行其现有合约;实现了更频繁和快速的部署,从而实现了持续的价值流动;\n - 减少业务领域和现有代码的学习负担;\n - 可以加快采用新技术的步伐;\n - 提供独立、高效的服务扩展;\n - 自服务敏捷架构(可以认为是DevOps):\n - 一个能够持续部署和运行这些微服务的平台;如代码以Git形式“推送”。 然后,自服务敏捷平台构建应用程序工件,构建应用程序环境,部署应用程序,并启动必要的进程。 团队不必考虑他们的代码在哪里运行或如何到达那里,这些对用户都是透明得,因为平台会关注这些。\n - 基于 API 的协作\n - 抗脆弱性\n- **云原生计算基金会(2015)定义的特征**\n - 应用容器化\n - 面向微服务架构\n - 应用支持容器的编排制度\n- **云原生计算基金会(2018)定义**\n - 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API\n - 这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更\n\n\n\n### 1.2 容器、虚拟机、Docker、Openstack 和 K8S\n\n- **容器&虚拟机**:均为虚拟化技术,容器更为轻量化、效率更高、启动更快;虚拟机需数分钟启动,容器仅需数十毫秒;\n- **Docker**: 容器化虚拟技术事实上的标准;\n- **OpenStack**:分布式的虚拟机服务平台,相比于普通的虚拟机软件(如Vmare),多了分布式虚拟机调度管理的功能和节点的负载均衡; \n- **K8S**:分布式的容器调度管理平台,相比于Docker,多了分布式的容器调度管理和节点的负载均衡;\n- **注意**:常见的中文资料均言K8S是容器编排软件,这里的编排是指调度、管理的意思,而非工作流编排的意思,容易有误导性;\n- **注意**:无论是Openstack还是K8S,均不支持跨节点的容器或虚拟机的创建;所以将多台电脑合并成一台电脑的想法是不现实的;\n\n\n\n### 1.3 K8S 和 云原生\n\n在单机上运行容器,无法发挥它的最大效能,只有形成集群,才能最大程度发挥容器的良好隔离、资源分配与编排管理的优势,而对于容器的编排管理,Swarm、Mesos 和 Kubernetes 的大战已经基本宣告结束,Kubernetes 成为了无可争议的赢家。\n\n- Kubernetes 成为云原生应用的基石\n- 有机会成为跨云的真正的云原生应用的操作系统\n\n### 1.4 K8S 介绍\n\n- **官方**:**Kubernetes** 也称为 **K8S**,是用于自动部署、扩缩和管理容器化应用程序的开源系统。\n- **发展历史**:由**Google**设计并捐赠给**Cloud Native Computing Foundation**(今属**Linux**基金会)来使用。\n- **能力**:**Google** 每周运行数十亿个容器,能够在不扩张运维团队的情况下进行规模扩展。\n- **作用**: 相当于一个操作系统,可以快速提供**PaaS**服务:1)创建各种容器化测试化环境;2)发布各种容器化服务;3)快速安装各种容器化服务,如MongoDB、**Hbase**、**Postgresql**、**Redis**、**Spark**等;快速提供IaaS服务:通过安装**Openstack**或**KubeVirt**等软件;快速提供**FaaS**服务:通过安装**Kube** **Native**等软件;\n\n![image-20230414170948460](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230414170948460.png)\n\n![image-20230414171119324](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230414171119324.png)\n\n### 1.5 基本概念\n\n- **Container**:轻量级的系统虚拟化技术,使用namespace隔离环境。\n- **Pod**:\n- - **K8S** 的调度的基本单位,**Pod**是一组紧密关联的容器集合,内部的容器共享PID、IPC、Network和UTS namespace。可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。\n \n ![image-20230415141540422](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415141540422.png)\n\n​\t\t\t\tPod的设计理念基础是微服务,不同类型的业务组合由不同类型的Pod执行,一个Pod对应一个微服务\n\n- - K8S中,采用manifest(yaml或json)定义对象,比如nginx服务(包含了一个nginx 容器image)定义为:\n\n```YAML\n\tapiVersion: v1\n\tkind: Pod\n\tmetadata:\n\t name: nginx\n\t labels:\n\t app: nginx\n\tspec:\n\t containers:\n\t - name: nginx\n\t image: nginx\n\t ports:\n```\n\n- - **Node:** 是Pod运行的主机,可以为物理机,也可以为虚拟机。每个Node上要运行container runtime (docker或者rkt)、kubelet和kube-proxy服务\n - ![image-20230415142123300](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415142123300.png)\n\n- - **Service:** 一个Pod只是一个运行服务的实例,可能在一个节点上停止,在另一个节点以一个新的IP启动一个新的Pod。在K8S集群中,客户端需要访问的服务就是Service对象。每个Service会对应一个集群内部有效的虚拟IP,集群内部通过虚拟IP访问一个服务。\n- - **Kubelet:** 每个Node的任务和资源管理\n- - **Kube-proxy:** 负责每个节点的硬件负载均衡\n\n\n\n### 1.6 K8S 常见命令\n\n- **运行一个Nginix容器:** \n - `kubectl run --image=nginx:alpine nginx-app --port=80`\n- **Kubectl 命令:**\n - `kubectl get - 类似于 docker ps,查询资源列表`\n - `kubectl describe - 类似于 docker inspect,获取资源的详细信息`\n - `kubectl logs - 类似于 docker logs,获取容器的日志`\n - `kubectl exec - 类似于 docker exec,在容器内执行一个命令`\n - `kubectl create -f file.yaml – 根据yaml创建Deployment资源`\n - `kubectl delete 删除命令,可删除node、pod、svc、depolyment`\n- **yaml 定义 Pod:**\n\n```YAML\n\tapiVersion: v1\n\tkind: Pod\n\tmetadata:\n\t name: nginx\n\t labels:\n\t app: nginx\n\tspec:\n\t containers:\n\t - name: nginx\n\t image: nginx\n\t ports:\n\t - containerPort: 80\n```\n\n- **Volume:**\n - 一个**Pod**一旦发生异常,**Pod** 产生的数据会随着 **Pod** 消亡而自动消失。**Volume** 用于持久化容器数据。\n - 如:为 **redis** 容器指定一个 **hostPath** 来存储 **redis** 数据\n\n```YAML\n\tapiVersion: v1\n\tkind: Pod\n\tmetadata:\n\t name: redis\n\tspec:\n\t containers:\n\t - name: redis\n\t image: redis\n\t volumeMounts:\n\t - name: redis-persistent-storage\n\t mountPath: /data/redis\n\t volumes:\n\t - name: redis-persistent-storage\n\t hostPath:\n\t path: /data/\n```\n\n- **Service:**\n - kubectl创建Pod,Pob的IP地址会随着Pod的重启而变化\n - 为了访问Pod提供的服务,采用Service提供为一组Pod一个统一的入口,并提供负载均衡和**自动服务发现**。\n - `kubectl expose deployment nginx-app --port=80 --target-port=80 --type=NodePort`\n- **Replicas set:**\n - 在一个Service中,可为Pod设置数个副本,以确保服务永不掉线\n - `kubectl scale --replicas=3 deployment/nginx-app`\n\n![image-20230415143046325](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415143046325.png)\n\n- **滚动升级(Rolling Update):**\n - 滚动升级(Rolling Update)通过逐个副本容器替代升级的方式来实现无中断的服务升级:\n - `kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2`\n - 滚动升级中若发生错误,可随时回滚:\n - `kubectl rolling-update frontend-v1 frontend-v2 --rollback`\n- **资源限制:**\n - K8S通过 cgroups 提供容器资源管理的功能,可限制每个容器的 CPU 和内存使用,比如对于刚才创建的 deployment,可以通过下面的命令限制 nginx 容器最多只用 50% 的 CPU 和 128MB 的内存:\n - `kubectl set resources deployment nginx-app -c=nginx --limits=cpu=500m,memory=128Mi`\n - 或者在yaml中指定资源限制\n- **健康检查:**\n - K8S Kubernetes 提供了两种探针(Probe,支持 exec、tcpSocket 和 http 方式)来探测容器的状态:\n - LivenessProbe:探测应用是否处于健康状态,如果不健康则删除并重新创建容器\n - ReadinessProbe:探测应用是否启动完成并且处于正常服务状态,如果不正常则不会接收来自 Kubernetes Service 的流量\n\n\n\n### 1.7 K8S 常用运维命令\n\n- **查看pod,及所在的节点:**\n - `kubectl get pods -o wide`\n- **若有节点warn,回收垃圾失败:**\n\n```BASH\nkubectl drain --delete-local-data --ignore-daemonsets NODENAME\nkubectl uncordon NODENAME\n```\n\n\n\n## 2 K8S 集群基础环境部署\n\n{% p red, 若服务器之前搭建过 K8S 集群,需要彻底删除 %}\n\n参考:https://blog.csdn.net/qq_43159578/article/details/124131709 \n\n- 停止所有的Kubernetes服务\n\n```BASH\nsudo systemctl stop kubelet\nsudo systemctl stop containerd\n```\n\n- 删除Kubernetes软件包\n\n```BASH\nyum remove kubeadm kubectl kubelet kubernetes-cni -y\n```\n\n- 删除配置文件\n\n```BASH\n# 清除残留文件\nrm -rf /root/.kube\nrm -rf /etc/cni/net.d\nrm -rf /etc/kubernetes/*\n```\n\n- 删除etcd数据目录\n\n```BASH\nrm -rf /var/lib/etcd\n```\n\n- 清除iptables或者ipvs的配置\n\n```BASH\n# sudo ipvsadm -C\n# sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo # # iptables -Xkubec\n```\n\n- 如果只是想重新部署集群\n\n```BASH\nkubeadm reset\n```\n\n`kubeadm reset` 命令用于清除当前节点上所有与 `kubeadm init` 或 `kubeadm join` 命令创建的 Kubernetes 集群相关的状态。其主要作用如下:\n\n1. 移除 Kubernetes 集群相关的系统服务,如 kubelet 和 kube-proxy。\n\n2. 删除所有在当前节点上创建的 Kubernetes 对象,包括 Pod、Service、Deployment 等。\n\n3. 移除 etcd 中与当前节点相关的信息,如节点标识、配置信息等。\n\n4. 删除 Kubernetes 数据目录,包括证书、密钥、kubeconfig 文件等。\n\n使用 `kubeadm reset` 命令可以清除当前节点上的所有 Kubernetes 相关状态,以便重新创建新的 Kubernetes 集群或者将当前节点加入到另一个 Kubernetes 集群中。在进行 `kubeadm reset` 操作之前,应该先备份当前节点上的重要数据和配置信息,以便在需要时进行恢复。\n\n\n\n### 2.1 服务器\t\n\n- **网络资源:**各节点间通过**千兆交换机**互联(非光纤交换机)\n- **管理节点:**\n - Gisweb4,Gisweb3\n- **计算节点:**\n - Gisweb3,GISweb2,dellm640-01, Gisweb4, dellslot03, dellslot4\n- **持久化存储资源:**\n - 目前采用:\n - nfs-client: 23服务器的/mnt/storage/k8s/pv\n- **Node1(刀片3):**\n - 子网 IP:192.168.0.177\n - CPU:Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz;32核心,64线程。\n - 内存:64GB(32GB*2),每根DDR4,3000Mhz\n- **Node2(刀片4):**\n - 子网 IP:192.168.0.209\n - CPU:Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz;32核心64线程。\n - 内存:64GB(32GB*2),每根DDR43200Mhz\n\n\n\n### 2.2 安装过程\n\n#### 2.2.1 前提条件\n\na. 节点之中不可以有重复的主机名、`MAC` 地址或 `product_uuid`\n\n```BASH\ncat /sys/class/dmi/id/product_uuid\n```\n\nb. 检查网络适配器:若有多个网卡,确保每个node的子网通过默认路由可达\n\nc. 防火墙开放端口(所有节点):\n\n![image-20230415145138479](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415145138479.png)\n\n```BASH\nsystemctl restart firewalld\nfirewall-cmd --zone=public --add-port=443/tcp --permanent\nfirewall-cmd --zone=public --add-port=6443/tcp --permanent\nfirewall-cmd --zone=public --add-port=2379-2380/tcp --permanent\nfirewall-cmd --zone=public --add-port=10250/tcp --permanent\nfirewall-cmd --zone=public --add-port=10259/tcp --permanent\nfirewall-cmd --zone=public --add-port=10257/tcp --permanent\n```\n\nd. 关闭防火墙(所有节点):\n\n```BASH\nsystemctl stop firewalld NetworkManager\nsystemctl disable firewalld NetworkManager\n```\n\ne. 关闭交换分区并禁用 SELinux(所有节点):\n\n```bash\n# 查看 交换分区\nfree -m\n\n# 将 `SELinux` 设置为 `permissive` 模式(相当于将其禁用) 第一行是临时禁用,第二行是永久禁用\nsetenforce 0\nsed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config\n\n# 关闭swap;第一行是临时禁用,第二行是永久禁用\nswapoff -a \nsed -ri 's/.*swap.*/#&/' /etc/fstab\n\n# 允许 iptables 检查桥接流量 (K8s 官方要求)\ncat <(所有节点):\n\n```bash\nyum install chrony -y\nsystemctl start chronyd\nsystemctl enable chronyd\nchronyc sources\n```\n\ng. 设置主机名并添加 ip 映射(所有节点):\n\n```BASH\n# 以 gisweb4 为例\n# 查看主机名cat \nhostname\n# 设置主机名\nhostnamectl set-hostname gisweb4\n# 更新\nbash\n\n# 添加 ip 映射\necho \"125.250.153.23 gisweb4\" >> /etc/hosts\necho \"125.250.153.23 gisweb4\" >> /etc/hosts\n# 两台无外网ip的刀片添加内网ip\n\n# /etc/hosts 文件内容如下:\n192.168.0.203 gisweb1\n192.168.0.202 gisweb2\n192.168.0.204 gisweb4\n192.168.0.208 gisweb3\n192.168.0.176 dellm640-01\n192.168.0.177 dellm640-03\n192.168.0.209 dellslot04\n\n125.220.153.26 gisweb1\n125.220.153.25 gisweb2\n125.220.153.22 gisweb3\n125.220.153.23 gisweb4\n125.220.153.28 dellm640-01\n```\n\n#### 2.2.2 升级 Linux 内核到最新(所有节点):\n\n**清除缓存,重新构建缓存:**\n\n```BASH\n# 清除缓存\nyum makecache & yum -y update\n```\n\n**参考链接:*https://zhuanlan.zhihu.com/p/368879345***\n\n#### 2.2.3 转发 IPv4 并让 iptables 看到桥接流量(所有节点)\n\n``````SHELL\n# a.\t验证br_netfilter是否已经加载\nlsmod | grep br_netfilter\n# b.\t加载br_netfilter模块:\nmodprobe br_netfilter\n# c.\tiptabels桥接\ncat <(所有节点)\n\n``````BASH\nyum install ipvsadm ipset sysstat conntrack libseccomp -y\n\ncat <(所有节点,lb除外)\n\n```BASH\ncat <(选用containerd,弃用docker):\n\n- **Docker-engine+cir-dockerd方案(舍弃)**:从kubernetes 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,需要在kubelet和docker之间加上一个中间层cri-docker。cri-docker是一个支持CRI标准的shim。一头通过CRI跟kubelet交互,另一头跟docker api交互,从而间接的实现了kubernetes以docker作为容器运行时。但是这种架构缺点也很明显,**调用链更长,效率更低**。因此选用containerd作为容器runtime\n- **containerd**方案: **containerd**是一个**docker**的容器**runtime**,成为**CNCF**的官方项目\n\n官方安装教程:https://github.com/containerd/containerd/blob/main/docs/getting-started.md\n\n```BASH\n# 安装containerd.io\nyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo\nyum install containerd.io\n\n\n# 安装CNI插件\n# i.下载cni-plugins.tar 从https://github.com/containernetworking/plugins/releases\n# 在线下载:\n# wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz\n# ii.在/opt/cni/bin下解压:\n\n# 把22上的拷贝到没有公网ip的服务器上\n# scp -P22 /opt/cni/bin/cni-plugins-linux-amd64-v1.1.1.tgz root@192.168.0.203:/opt/cni/bin/\n\nmkdir -p /opt/cni/bin\ncd /opt/cni/bin\ntar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz\n\n\n# 重启服务:\nsystemctl restart containerd\n# 开机启动:\nsystemctl enable containerd\n\n\n# 配置systemd cgroup驱动\n# 修改配置文件,将 SystemdCgroup 改为 true 注意配置项是区分大小写的\ncontainerd config default | sudo tee /etc/containerd/config.toml\nvim /etc/containerd/config.toml\n\n[plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n ...\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n# 并将 sandbox_image 地址修改为国内的地址\n并且将 sandbox_image = \"registry.k8s.io/pause:3.6\"\n修改为 sandbox_image = \"registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6\"\n\n# 启动 containerd\nsystemctl restart containerd\n\n# 开机自启\nsystemctl enable containerd\n\n# 启动成功后可以查看到监听的端口\nnetstat -nlput | grep containerd\ntcp 0 0 127.0.0.1:36669 0.0.0.0:* LISTEN 8665/containerd off (0.00/0/0)\n```\n\n\n#### 2.2.7 在所有电脑上安装 kubeadm, kubelet and kubectl(所有节点)\n\n```BASH\n# a.\tkubeadm: the command to bootstrap the cluster.\n# b.\tkubelet: the component that runs on all of the machines in your cluster and does things like starting pods and containers.\n# c.\tkubectl: the command line util to talk to your cluster.\n```\n\n1. *配置阿里云的k8s源,加速安装*\n\n```BASH\ncat <若出现如下错误(上一次集群初始化的残留文件)\n\n```bash\n# 如果出现报错 \n[ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists\n```\n\n执行如下命令后再次初始化\n\n```BASH\nrm -rf /var/lib/etcd\nrm -rf /etc/kubernetes/manifests/* \n```\n\n#### 2.2.9 配置环境变量(初始化后)\n\n```BASH\nmkdir -p $HOME/.kube\ncp -i /etc/kubernetes/admin.conf $HOME/.kube/config\nchown $(id -u):$(id -g) $HOME/.kube/config\n```\n\n#### 2.2.10 将 master 作为node(管理节点上执行)\n\n- 检查 node 是否存在污点\n - 污点值有三种:\n - NoSchedule:一定不被调度\n - PreferNoSchedule:尽量不被调度【也有被调度的几率】\n - NoExecute:不会调度,并且还会驱逐Node已有Pod\n\n```BASH\nkubectl describe nodes gisweb4 |grep Taints\n```\n\n- 删除污点:\n\n```BASH\n# 本次删除的污点为:node-role.kubernetes.io/control-plane-\nkubectl taint nodes --all node-role.kubernetes.io/control-plane-\n```\n\n#### 2.2.11 安装 Pod 网络插件(CNI:Container Network Interface)(master)\n\n你必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信。\n\n确保kubeadm初始化时,pod_cidr 为10.244.0.0\n\n- 下载 **yml** 配置文件\n - 或自己下载到本地\n\n```BASH\ncurl https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml -O\n```\n\n- 编辑**kube-flannel.yml**\n - 找到如下位置,添加 **iface-regex**\n\n```BASH\nvim kube-flannel.yml\n# 添加\n- --iface-regex=^192.168..\n```\n\n![](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408114839608.png)\n\n- 构建\n\n```BASH\nkubectl apply -f kube-flannel.yml\n```\n\n#### 2.2.12 node 节点加入集群\n\n- 管理节点获取加入命令:\n\n```BASH\nkubeadm token create --print-join-command\n# 返回如下\nkubeadm join 125.220.153.23:6443 --token x0wdaj.d5wltdzdtos22fl6 --discovery-token-ca-cert-hash sha256:9245d363cdeb1757bacba21b9ccdc06a28e7490bcedfb0eeb404b56f769fa112\n```\n\n- 在 node 节点执行生成命令\n\n如果此步报如下错误\n\nThe connection to the server localhost:8080 was refused - did you specify the right host\n\n1. 出现这个问题的原因是kubectl命令需要使用`kubernetes-admin`的身份来运行,在`kubeadm int`启动集群的步骤中就生成了`/etc/kubernetes/admin.conf`。\n2. 因此,解决方法如下,将主节点中的`/etc/kubernetes/admin.conf`文件拷贝到工作节点相同目录下:\n3. 然后分别在工作节点上配置环境变量:\n\n\n{% p red, 解决方案 %}\n\n- 主节点执行\n\n```BASH\n# 将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到工作节点相同目录下:\nscp -P22 /etc/kubernetes/admin.conf oge@125.220.153.22:/etc/kubernetes/\n```\n\n- `node` 节点执行如下命令后,再次执行加入集群的命令\n\n```BASH\necho \"export KUBECONFIG=/etc/kubernetes/admin.conf\" >> ~/.bash_profile\nsource ~/.bash_profile\n```\n\n- 如果是重新加入集群,需要 `reset` 一下\n\n```BASH\nkubeadm reset\n```\n\n\n\n#### 2.2.13 添加新的 master 节点\n\n- 管理节点:\n\n```BASH\n# 管理节点查看\nkubeadm token create --print-join-command\n# 生成如下\nkubeadm join 125.220.153.23:6443 --token mc56rw.t9b3d1ql53yhom9y --discovery-token-ca-cert-hash sha256:753ccf865a9c590413043d469a9848300871afaef7221e3fdb97d981939a2b83\n\n# 管理节点\nkubeadm init phase upload-certs --upload-certs \n# 输出\nI0413 11:00:30.817038 10009 version.go:256] remote version is much newer: v1.27.0; falling back to: stable-1.25\n[upload-certs] Storing the certificates in Secret \"kubeadm-certs\" in the \"kube-system\" Namespace\n[upload-certs] Using certificate key:\n70d43cde7f6423b5c3e88c0fa9d08511cefbc53992dc63a13544cd548a912941\n\n# 管理节点,在networking前添加:controlPlaneEndpoint: 125.220.153.23:6443\nkubectl -n kube-system edit cm kubeadm-config\n```\n\n- 新的master节点\n\n```BASH\n# 新节点\n# 重新加入的话,检查是否需要kill掉6443端口(这是之前的api-service服务)\nkubeadm join 125.220.153.23:6443 --token mc56rw.t9b3d1ql53yhom9y --discovery-token-ca-cert-hash sha256:753ccf865a9c590413043d469a9848300871afaef7221e3fdb97d981939a2b83 --control-plane --certificate-key 70d43cde7f6423b5c3e88c0fa9d08511cefbc53992dc63a13544cd548a912941\n\n# 生成\nThis node has joined the cluster and a new control plane instance was created:\n\n* Certificate signing request was sent to apiserver and approval was received.\n* The Kubelet was informed of the new secure connection details.\n* Control plane label and taint were applied to the new node.\n* The Kubernetes control plane instances scaled up.\n* A new etcd member was added to the local/stacked etcd cluster.\n\nTo start administering your cluster from this node, you need to run the following as a regular user:\n\n mkdir -p $HOME/.kube\n sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\n sudo chown $(id -u):$(id -g) $HOME/.kube/config\n\nRun 'kubectl get nodes' to see this node join the cluster.\n```\n\n\n\n## 3 K8S 管理平台 dashboard 环境部署(管理节点)\n\n- 下载 **yaml** 配置文件并应用\n - 或下载到本地然后上传\n\n```bash\nkubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml\n```\n\n- 修改配置文件(以node)\n - 但是这个只能内部访问,所以要外部访问,要么部署 ingress,要么就是设置 service NodePort 类型。这里选择 service 暴露端口。\n\n```BASH\nkubectl edit svc kubernetes-dashboard -n kubernetes-dashboard\n\n# 将其中的,type: ClusterIP 修改成type: NodePort,保存退出即可。\n\n# 查看服务的暴露端口,需在安全组放行\nkubectl get svc -A |grep kubernetes-dashboard\n\n```\n\n![image-20230415154841715](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230415154841715.png)\n\n- 权限认证\n\n```BASH\n# 创建访问用户\nkubectl apply -f https://kuboard.cn/install-script/k8s-dashboard/auth.yaml\n# 获取访问令牌\nkubectl -n kubernetes-dashboard create token admin-user \n# 生成的令牌\neyJhbGciOiJSUzI1NiIsImtpZCI6IkdVQTZzb3JEM1FHdkpxVDNsSEwtVEZWc2hyR08tbmFFWnFGX2Q2OGt5cEkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjgzNzM1MTQ1LCJpYXQiOjE2ODM3MzE1NDUsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiMzBlMWQzNDEtNDc0Yi00M2MyLWIyNzYtZGIxZTU4NzM5ZTgxIn19LCJuYmYiOjE2ODM3MzE1NDUsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.mg1IU29tBpH23nglJVbRmVa2A26WZjXxMCzckQyb-dnviLBRzBuvNebb8H4YH5CNJUPkB2GGC_r7dlm5zEbPpK8RqkbwXy-wqkOoMephs83gIQkJ3RgskpWqTgqqg87e6WXHRtuzYsQQZ4Rq3Y4uQy9jJS9o1lIoRTujpmpWORb9vu4JN0RqEfK2chQqNsYCe_TCtvtvkP2EyuU3QSeYdvWh5NNZ9CYwA8l8eqA6ijrmTqZjnI6Q9Ymo7trKSuGFmffotBpN9dTYZoyv6Io_VgEz6_1oHsA0pwG-3wc41Ly11sDAzwjZvoGN1yfw0vsVcwnAjH4LkRG2ImwYIcZbig\n```\n\n- 访问方式(每个节点 ip 均可访问):https://125.220.153.23:30151\n\n\n\n## 4 安装K8S的包管理工具Helm (管理节点)\n参考:https://helm.sh/docs/intro/install/ \n\n\n- 这里以下载压缩包安装为例:\n\n参考:https://www.cnblogs.com/zhanglianghhh/p/14165995.html\ngithub地址:https://github.com/helm/helm\n\n\n\n![image-20230413112634363](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230413112634363.png)\n\n```BASH\ncd ~/k8s/helm\nwget https://get.helm.sh/helm-v3.11.3-linux-amd64.tar.gz\ntar zxfv helm-v3.11.3-linux-amd64.tar.gz\nmv ./linux-amd64/helm /usr/bin/\n# 显示版本,安装完成\nhelm version\n```\n\n## 5 安装K8S的包管理工具 krew`(管理节点)`\n参考:https://krew.sigs.k8s.io/docs/user-guide/setup/install/ \n\n\n- 确保 git 已经安装\n\n```BASH\ngit version\n# 若未安装\nyum -y install git\n```\n\n- 安装krew\n\n```BASH\n(\n set -x; cd \"$(mktemp -d)\" &&\n OS=\"$(uname | tr '[:upper:]' '[:lower:]')\" &&\n ARCH=\"$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\\(arm\\)\\(64\\)\\?.*/\\1\\2/' -e 's/aarch64$/arm64/')\" &&\n KREW=\"krew-${OS}_${ARCH}\" &&\n curl -fsSLO \"https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz\" &&\n tar zxvf \"${KREW}.tar.gz\" &&\n ./\"${KREW}\" install krew\n)\n```\n\n- 添加 `$HOME/.krew/bin`目录到您的 PATH 环境变量。 更新你的 `.bashrc`或者 `.zshrc`文件\n\n```BASH\n# 永久写的用户的环境变量文件,避免登出后失效\nexport PATH=\"${KREW_ROOT:-$HOME/.krew}/bin:$PATH\"\nsource ~/.bashrc\n```\n\n- 若安装失败,采用压缩包安装\n\n```BASH\nwget https://github.com/kubernetes-sigs/krew/releases/latest/download/krew-linux_amd64.tar.gz\n\ntar -zxvf krew-linux_amd64.tar.gz\n# 添加$HOME/.krew/bin目录到PATH环境变量\nexport PATH=\"${KREW_ROOT:-$HOME/.krew}/bin:$PATH\"\n# 配置为 kubectl 插件\nmv ./krew-linux_amd64 ./kubectl-krew\nmv ./kubectl-krew /usr/local/bin/\n# 测试\nkubectl krew version\n```\n\n- 检查是否安装成功\n\n```BASH\nkubectl krew\nkubectl plugin list\n```\n\n\n\n## 6 为 K8S 创建 PV 持久卷\n\n### 6.1 PV和PVC\n\n- 持久卷(PersistentVolume,PV)是集群中由管理员配置的一段网络存储。它是集群中的资源,就像节点是集群资源一样。PV持久卷和普通的Volume一样,也是使用卷插件来实现的,只是它们拥有独立于任何使用PV的Pod的生命周期。此API对象捕获存储实现的详细信息,包括NFS,iSCSI或特定于云提供程序的存储系统。\n\n- 持久卷申领(PersistentVolumeClaim,PVC)表达的是用户对存储的请求。概念上与Pod类似。Pod会耗用节点资源,而PVC申领会耗用PV资源。\n\n### 6.2 用 storageClass 动态创建 PV \n\n- 对1PB的大量目录创建NFS服务,gisweb1-4,以gisweb4为例子\n\n```bash\n安装NFS: \nyum -y install nfs-utils rpcbind\n```\n\n- 设置持久卷权限\n\n```BASH\n# 执行权限\nchown -R nobody:nfsnobody /mnt/storage/k8s/pv\n#chmod -R 777 /mnt/storage/k8s/pv\n```\n\n- 配置 nfs\n\n```BASH\nvim /etc/exports\n# 添加:\n/mnt/storage/k8s/pv 192.168.0.0/24(rw,sync,no_root_squash)\n# 以上设置让所有的 IP 都有效\n```\n\n```BASH\nsystemctl start rpcbind\nsystemctl enable rpcbind\nsystemctl enable nfs\nsystemctl start nfs\nsystemctl start nfs-server\nsystemctl enable nfs-server\n\nsystemctl start firewalld\nfirewall-cmd --permanent --add-service=nfs\nfirewall-cmd --reload\nsystemctl stop firewalld && sudo systemctl disable firewalld\n```\n\n- 检查\n\n```BASH\nexportfs -rv\nshowmount -e 127.0.0.1\n```\n\n- 所有节点安装nfs客户端\n\n```BASH\nyum install -y nfs-utils\n# 每个节点挂载nfs客户端的存储目录,本次nfs客户端在gisweb4(192.168.0.204)上\nmount -t nfs 192.168.0.204:/mnt/storage/k8s/pv /mnt/storage/k8s/pv \n# 检查挂载情况\ndf -h\n```\n\n- 安装nfs-client-provisioner (需要翻墙)\n\n参考:[**https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner**](https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner)\n\n```bash\n# 更新helm repo\nhelm repo update\n# 搜索helm库中nfs版本\nhelm search repo nfs-subdir-external-provisioner\n\n# 添加 helm 仓库\nhelm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/\n\nhelm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \\\n--set nfs.server=192.168.0.204 \\\n--set nfs.path=/mnt/storage/k8s/pv\t \\\n--set image.repository=registry.cn-hangzhou.aliyuncs.com/xzjs/nfs-subdir-external-provisioner \\\n--set image.tag=v4.0.0\n```\n\n- 手动安装 nfs-client-provisioner\n\n参考:http://www.mydlq.club/article/109/#%E5%88%9B%E5%BB%BA-nfs-subdir-external-provisioner-%E9%83%A8%E7%BD%B2%E6%96%87%E4%BB%B6\n\n- 成功后,安装时添加持久化参数,其中 nfs-storage 为安装的 storageclass 的 provisioner 字段名字\n\n## 7 安装 kubeAPPS 可视化软件管理工具\n\n参考:[**https://kubeapps.dev/docs/latest/tutorials/getting-started/**](https://kubeapps.dev/docs/latest/tutorials/getting-started/)\n\n- 安装\n\n```BASH\n# 添加 kubeapps 仓库\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n# 创建 kubeapps 的命名空间\nkubectl create namespace kubeapps\n# 安装\nhelm install kubeapps --namespace kubeapps bitnami/kubeapps\n```\n\n- 创建证书\n\n```bash\n# 创建用于访问 Kubeapps 和 Kubernetes 的演示凭证\nkubectl create --namespace default serviceaccount kubeapps-operator\nkubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator\n\n\ncat <访问:http://125.220.153.23:31885/\n\n## 8 在 K8S 上部署虚拟机服务 Kubevirt\n\n- 设置 **K8S** **ApiServer** 允许特权容器\n\n```BASH\nvim /etc/kubernetes/manifests/kube-apiserver.yaml\n# 设置 \n--allow-privileged=true\n```\n\n- 检查每个节点是否支持虚拟化\n\n```BASH\nvirt-host-validate qemu\n# 如果显示没有这个命令,先安装 libvrt 和 qemu 软件包:\nyum install -y qemu-kvm libvirt virt-install bridge-utils\n```\n\n- 若有**warnning**,需要解决\n\n![image-20230408181653957](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408181653957.png)\n\n```BASH\n# 1\nvim /etc/default/grub\n# 2.添加\nGRUB_CMDLINE_LINUX=\"crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on\"\n# 3 \ngrub2-mkconfig -o /boot/grub2/grub.cfg\n# 4 \nreboot\n```\n\n- 安装 **Kubevirt**\n\n```BASH\n# K8S 1.25版本,Kubervirt必须0.57.2以上,才能适配\nkubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0-rc.0/kubevirt-operator.yaml\n\nkubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0-rc.0/kubevirt-cr.yaml\n```\n\n- 等待 **Kubevirt** 资源创建完毕\n\n```BASH\nkubectl -n kubevirt wait kv kubevirt --for condition=Available\n```\n\n- 安装 **CDI** \n\n参考:https://kubevirt.io/labs/kubernetes/lab2.html\n\n- 安装 **VNC**\n\n```BASH\nyum install -y tigervnc\n```\n\n- 查看 **Kubevirt** 资源\n\n```BASH\nkubectl get pods -n kubevirt\n```\n\n![image-20230408185646502](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408185646502.png)\n\n- 安装 **Kubevirt** 的 **cli** 管理工具\n\n```BASH\nkubectl krew install virt\nkubectl virt help\n```\n\n- Kubevirt创建/删除虚拟机服务\n\n```BASH\n# 1.\t创建yaml文件\nXxx\n# 2.\t运行一个虚拟机\nkubectl apply -f test.yaml\n# 3.\t查看虚拟机\nkubectl get vmis\n# 4.\t停止/删除虚拟机\nkubectl delete -f vmi.yaml\n# 或者\nkubectl delete vmis testvmi\n# 5.\t开始/停止/暂停虚拟机\nvirtctl start/stop/pause my-vm\n```\n\n## 9 在 K8S 上部署 PostgreSQL\n\n- 安装\n\n - 注意:数据库安装需要持久卷,需提前创建满足要求的**pv**,或者创建**nas**的**stroageclass**,以自动根据**mysql**的**pvc**创建**pv**。\n\n\n - 集群已经配置23服务器的`/mnt/storage/k8s/pv`为NAS,并已经配置名字为**nas-storage**的**sc**\n\n\n```BASH\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n# 首先检查是否有oge这个命名空间,否则执行如下进行创建\nkubectl create ns oge\n# postgresql 这个名字可以自己定义,但后面每一步都要注意对应更改\nhelm install -n oge bitnami/postgresql \\\n--set global.storageClass=nfs-client \\\n--set readReplicas.persistence.storageClass=nfs-client \\\n--set primary.persistence.storageClass=nfs-client \\\n--set primary.persistence.size=200Gi \\\n--set readReplicas.persistence.size=200Gi \\\n--set image.tag=14.5.0-debian-11-r6\n\n\nhelm install -n geoctap bitnami/postgresql \\\n--set global.storageClass=nfs-client \\\n--set readReplicas.persistence.storageClass=nfs-client \\\n--set primary.persistence.storageClass=nfs-client \\\n--set primary.persistence.size=200Gi \\\n--set readReplicas.persistence.size=200Gi \\\n--set image.tag=14.5.0-debian-11-r6\n# 指定版本,可在kubeapps里面查看\n# --set image.tag=14.5.0-debian-11-r6\n```\n\n- 查看 postgresql 密码\n\n```BASH\nkubectl get secret --namespace oge postgresql -o jsonpath=\"{.data.postgres-password}\" | base64 -d\n\n# 密码\n7jXf2gsmUX\n```\n\n- 更改服务端口\n\n```BASH\nkubectl edit svc --namespace oge postgresql\n# 将 type=ClusterIP 改为 NodePort\n# b8:85:84:71:64:28\necho \"SUBSYSTEM==\\\"net\\\", ACTION==\\\"add\\\", DRIVERS==\\\"?*\\\", ATTR{address}==\\\" b8:85:84:71:64:28\\\", ATTR{type}==\\\"1\\\", KERNEL==\\\"eno*\\\", NAME=\\\"eno1\\\"\" >> /etc/udev/rules.d/70-persistent-net.rules\n```\n\n- 缩放副本集\n\n```BASH\nkubectl get deployment \n# 发现并没有postgresql\nkubectl get all -n oge\n# 发现有statefulset.apps/postgresql\n# 设置副本集个数为1\nkubectl scale --replicas=1 statefulset.apps/postgresql -n oge\n```\n\n- 命令行进入pgsql\n\n```bash\n# 进入pgsql的pod\nkubectl exec -it -n oge postgresql-0 bash \n# 用户登录\npsql -U postgres \n# 输入密码\n7jXf2gsmUX\n```\n\n- 在pod外面执行sql\n\n```BASH\npsql -h 125.220.153.23 -p 30865 -U postgres -W -f ./public.sql\n```\n\n\n\n## 10 在 K8S 上部署 MySQL\n\n- 安装\n\n - 注意:数据库安装需要持久卷,需提前创建满足要求的`pv`,或者创建`nas`的 `stroageclass`,以自动根据postgresql的pvc创建pv。\n\n - 集群已经配置23服务器的`/mnt/storage/k8s/pv`为 `NAS`,并已经配置名字为 `nas-storage` 的 `sc`\n\n\n```BASH\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n\n# 安装\nhelm install -n oge mysql bitnami/mysql \\\n--set global.storageClass=nfs-client \\\n--set readReplicas.persistence.storageClass=nfs-client \\\n--set primary.persistence.storageClass=nfs-client \\\n--set primary.persistence.size=200Gi \\\n--set readReplicas.persistence.size=200Gi\n```\n\n- 查看 MySQL 密码\n\n```BASH\nkubectl get secret --namespace oge mysql -o jsonpath=\"{.data.mysql-root-password}\" | base64 -d\n\n# 密码\nVubCMiHvT1\n```\n\n- 更改服务端口\n\n```BASH\nkubectl edit svc --namespace oge mysql\n# 将type=ClusterIP改为NodePort\n# b8:85:84:71:64:28\necho \"SUBSYSTEM==\\\"net\\\", ACTION==\\\"add\\\", DRIVERS==\\\"?*\\\", ATTR{address}==\\\" b8:85:84:71:64:28\\\", ATTR{type}==\\\"1\\\", KERNEL==\\\"eno*\\\", NAME=\\\"eno1\\\"\" >> /etc/udev/rules.d/70-persistent-net.rules\n```\n\n2. 缩放副本集\n\n```BASH\nkubectl get deployment \n# 发现并没有mysql\nkubectl get all -n oge\n# 发现有statefulset.apps/mysql\nkubectl scale --replicas=1 statefulset.apps/mysql -n oge\n```\n\n3. 在K8S中进入数据库\n\n```BASH\nkubectl exec -it -n oge mysql-1 bash\n# 进入后登录用户\nmysql -u root -p\n# 输入密码\n```\n\n\n\n## 11 在K8S上部署 MongoDB \n\n- 安装\n\n - 注意:数据库安装需要持久卷,需提前创建满足要求的pv,或者创建nas的stroageclass,以自动根据postgresql的pvc创建pv。\n\n - 集群已经配置23服务器的`/mnt/storage/k8s/pv`为NAS,并已经配置名字为nas-storage的sc\n\n\n```BASH\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n\n# 安装\nhelm install -n ydy mongodb bitnami/mongodb \\\n--set global.storageClass=nfs-client \\\n--set readReplicas.persistence.storageClass=nfs-client \\\n--set primary.persistence.storageClass=nfs-client \\\n--set primary.persistence.size=100Gi \\\n--set readReplicas.persistence.size=100Gi\n```\n\n- 查看 MongoDB 密码\n\n```BASH\nkubectl get secret --namespace ydy mongodb -o jsonpath=\"{.data.mongodb-root-password}\" | base64 -d\n\n# 密码\nWUL9FPQ2V9\n```\n\n- 更改服务端口\n\n```BASH\nkubectl edit svc --namespace ydy mongodb\n# 将type=ClusterIP改为NodePort\n# b8:85:84:71:64:28\necho \"SUBSYSTEM==\\\"net\\\", ACTION==\\\"add\\\", DRIVERS==\\\"?*\\\", ATTR{address}==\\\" b8:85:84:71:64:28\\\", ATTR{type}==\\\"1\\\", KERNEL==\\\"eno*\\\", NAME=\\\"eno1\\\"\" >> /etc/udev/rules.d/70-persistent-net.rules\n```\n\n2. 缩放副本集\n\n```BASH\nkubectl get deployment \n# 发现并没有mongodb\nkubectl get all -n ydy\n# 发现有statefulset.apps/mongodb\nkubectl scale --replicas=1 statefulset.apps/mongodb -n ydy\n```\n\n3. 在K8S中进入数据库\n\n```BASH\nkubectl exec -it -n ydy mongodb-644c657c4f-x62cn bash\n```\n\n\n\n## 12 在 K8S 上部署 Apache Spark\n\n两个方式,第一种方式为Spark官方提出的;第二种为Google提出的,更符合K8S原生概念\n\n1. Spark On K8S\n2. spark-on-k8s-operator\n\n![image-20230408170401365](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408170401365.png)\n\n
Spark On K8S
\n\n![image-20230408170444023](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230408170444023.png)\n\n\n\n
spark-on-k8s-operator
\n\n\n\n### 12.1 安装 spark-on-k8s-operator \n\n参考 :https://blog.csdn.net/w8998036/article/details/122217230\n\n- 安装\n\n```BASH\nhelm repo add spark-operator https://googlecloudplatform.github.io/spark-on-k8s-operator \n\n# 注意是否存在 spark-operator 命名空间,没有则创建\nkubectl create ns spark-operator\n\n# 安装\nhelm install spark-operator spark-operator/spark-operator --namespace spark-operator --set sparkJobNamespace=default --set webhook.enable=true\n```\n\n- 创建服务账户\n\n```bash\nvim spark-application-rbac.yaml\n# 内容如下\n```\n\n```yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: spark\n namespace: spark\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n namespace: spark\n name: spark-role\nrules:\n- apiGroups: [\"\"]\n resources: [\"pods\"]\n verbs: [\"*\"]\n- apiGroups: [\"\"]\n resources: [\"services\"]\n verbs: [\"*\"]\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: spark-role-binding\n namespace: spark\nsubjects:\n- kind: ServiceAccount\n name: spark\n namespace: spark\nroleRef:\n kind: Role\n name: spark-role\n apiGroup: rbac.authorization.k8s.io\n```\n\n```BASH\nkubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root\n```\n\n- 编写作业模板并提交作业\n\n_创建一个Spark作业的YAML配置文件,并进行部署。_\n\n1. 创建spark-pi.yaml文件\n\n```YAML\napiVersion: \"sparkoperator.k8s.io/v1beta2\"\nkind: SparkApplication\nmetadata:\n name: spark-pi\n namespace: spark\nspec:\n type: Scala\n mode: cluster\n image: \"registry.cn-hangzhou.aliyuncs.com/yudayu/spark:v3.1.1\" \n # 1gcr.io/spark-operator/spark:v3.1.1需要更换镜像,gcr.io目前国内无法访问。可以先对docker挂代理,pull到阿里云镜像后\n imagePullPolicy: IfNotPresent\n mainClass: org.apache.spark.examples.SparkPi\n mainApplicationFile: \"local:///opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar\" \n # 需要更换自己的jar包,local指该jar位于image内,可换成所有节点都能访问的web路径,或者通过指定nas挂载pv,将jar包放在nas的pv里\n sparkVersion: \"3.1.1\"\n restartPolicy:\n type: Never\n volumes:\n - name: \"test-volume\"\n hostPath:\n path: \"/tmp\"\n type: Directory\n driver:\n cores: 1\n coreLimit: \"1200m\"\n memory: \"512m\"\n labels:\n version: 3.1.1\n serviceAccount: spark\n volumeMounts:\n - name: \"test-volume\"\n mountPath: \"/tmp\"\n executor:\n cores: 1\n instances: 2\n memory: \"512m\"\n labels:\n version: 3.1.1\n volumeMounts:\n - name: \"test-volume\"\n mountPath: \"/tmp\"\n```\n\n2. 部署一个Spark计算任务\n\n```BASH\nkubectl apply -f spark-pi.yaml\n```\n\n运维\n\n```BASH\nkubectl get sparkapplications\nkubectl describe sparkapplications\nkubectl get svc # 查看该任务的spark ui\n```\n\n### 12.2 安装 Spark On K8S\n\n```BASH\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n# 注意是否存在 spark-operator 命名空间,没有则创建\nkubectl create ns spark-on-k8s\nhelm install -n spark-on-k8s spark bitnami/spark \\\n --set worker.coreLimit=28 \n```\n\n```BASH\n./bin/spark-submit \\\n --class org.apache.spark.examples.SparkPi \\\n --conf spark.kubernetes.container.image=bitnami/spark:3 \\\n --master k8s://https://125.220.153.23:6443 \\\n --conf spark.kubernetes.driverEnv.SPARK_MASTER_URL=spark://10.97.43.141:7077 \\\n--deploy-mode cluster \\\n --executor-memory 20G \\\n --num-executors 10 \\\n--conf spark.executor.instances=5 \\\nhttps:///data/spark-examples_2.12-3.3.0.jar 1000\n```\n\n```bash\nkubectl run --namespace spark-on-k8s spark-oge --rm --tty -i --restart='Never' \\\n--image bitnami/spark:3 \\\n-- spark-submit --master spark://10.97.43.141:7077 \\\n--class org.apache.spark.examples.SparkPi \\\n --deploy-mode cluster \\\n/data/spark-examples_2.12-3.3.0.jar 100000\n```\n\n\n\n## 13 在K8S上部署redis集群\n\n- 待更\n\n\n\n## 14 在K8S上部署nginx\n\n### 14.1 创建pv\n\n```BASH\nvim nginx-pv.yaml\n```\n\n```YAML\napiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: nginx-ydy-pv\n namespace: ydy\nspec:\n capacity:\n storage: 10Gi\n accessModes:\n - ReadWriteOnce\n persistentVolumeReclaimPolicy: Retain\n storageClassName: manual\n hostPath:\n path: /mnt/storage/k8s/pv/ydy-nginx-pvc\n```\n\n### 14.2 创建pvc\n\n```BASH\nvim nginx-pvc.yaml\n```\n\n```YAML\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n name: nginx-ydy-pvc\n namespace: ydy\nspec:\n accessModes:\n - ReadWriteOnce\n resources:\n requests:\n storage: 10Gi\n storageClassName: manual\n```\n\n### 14.3 安装nginx并设置静态资源挂载的pvc\n\n将nginx中的`/app`挂载到`/mnt/storage/k8s/pv/luluancheng-nginx-pvc`下\n\n```BASH\nhelm install -n ydy nginx bitnami/nginx \\\n--set staticSitePVC=nginx-ydy-pvc\n```\n\n\n\n\n\n## 附录:疑难问题解决:\n\n### 1 K8S强制删除 namespace(会删除该命名空间中的所有 pod )\n\n```bash\n#1、将该分区导出为json文件,以 oge namespace为例\nkubectl get ns oge -o json > oge.json\n#2、编辑该json文件,将spec内的内容全部删除,然后保存退出\n```\n\n![22f0a5cbf0424425b0d62681f79cb713](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/22f0a5cbf0424425b0d62681f79cb713.png)\n\n![ef949b8bb503410c918894ab20bad993](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/ef949b8bb503410c918894ab20bad993.png)\n\n```BASH\n# 3、另开一个终端,启动一个proxy\nkubectl proxy --port=8081\n```\n\n```BASH\n# 4、执行一个curl命令,更新oge namespace\ncurl -k -H \"Content-Type: application/json\" -X PUT --data-binary @oge.json http://127.0.0.1:8081/api/v1/namespaces/oge/finalize\n```\n\n\n\n### 2 CNI网络错误\n\n- 当迁移集群之后,拉取镜像报cni网络错误,如下:\n\n![8d5d49703c8ac59f24fde81b3982b616](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/8d5d49703c8ac59f24fde81b3982b616.png)\n\n- 从上面的截图中看到问题出现在给Pod分配IP上,意思是 cni0 的IP不同于``10.244.9.1/24`,下面我们使用 `ifconfig`命令查看IP信息\n\n![79e65e4f797200ad98feac6f8b2d4254](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/79e65e4f797200ad98feac6f8b2d4254.png)\n\n- 从上面的图中我们可以看到``flannel.1`的 **IP** 为`10.244.9.0`,然后我们又使用`cat /run/flannel/subnet.env`,该文件内容如下: \n\n![310efbdb614636a17aa48eaf4a8dc2c5](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/310efbdb614636a17aa48eaf4a8dc2c5.png)\n\n- 其实现在的问题就比较明确了,我们使用的Overlay network为Flannel,也就是说Pod的IP地址段应该在Flannel的subnet下,而现在我们看到cni0的IP地址段与flannel subnet地址段不同,所以就出现了问题。 \n\n- 解决方案\n - 方法1是将 cni0 的 IP 段修改为``10.244.9.1`\n - 方法2是将这个错误的网卡删除掉,之后会自动重建\n\n```bash\n# 下面我们删除错误的cni0,然后让它自己重建\nifconfig cni0 down\nip link delete cni0\n```\n\n\n\n### 3 28 服务器增加路由(为了让两台刀片上网)\n\n- 28上执行\n\n```BASH\niptables -t nat -A POSTROUTING -s 192.168.0.209/24 -o em1_2 -j MASQUERADE\niptables -t nat -A POSTROUTING -s 192.168.0.177/24 -o em1_2 -j MASQUERADE\n```\n\n\n\n### 4 异常断电等导致 etcd 心跳检测出现问题\n\n- [Kubernetes API Server cannot be started after improper reboot](https://github.com/kubernetes/kubernetes/issues/107491)\n\n- [K8S: etcd 集群备份灾难恢复操作手册](https://blog.51cto.com/liruilong/6060676)\n\n\n\n### 5 OpenStack服务器网络跳转镜像\n\n>作用: 保证OpenStack上服务器与实验室服务器可以 ping 通\n\n- **IP**\n - `115.156.91.250`\n- **网关**\n - `115.156.91.254`\n- **子网掩码**\n - `255.255.255.0`\n\n\n\n\n\n","slug":"K8S集群环境搭建(Containerd作为容器)","published":1,"updated":"2023-10-21T04:52:13.442Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyrts000f2j3uc2eo00x5","content":"

1 前述

\n

1.1 云原生定义

\n
    \n
  • Pivotal《传统应用和SOA向云原生转型指南》(2015)的云原生的特征:\n
      \n
    • 符合 12 要素应用\n
        \n
      • 基准代码:一份基准代码,多份部署(类似于Git版本控制系统的main分支);
      • \n
      • 显示声明所有依赖关系:通过依赖清单,确切地声明所有依赖项;
      • \n
      • 把后端服务当作附加资源:各种后端服务(如数据库、消息队列、邮件服务、缓存系统),不区别对待本地或第三方服务;
      • \n
      • 构建、发布、运行:严格区分构建、发布、运行这三个步骤;
      • \n
      • 无状态进程:应用的进程必须无状态;
      • \n
      • 端口绑定:互联网应用通过端口绑定来提供服务,并监听发送至该端口的请求。应用完全自我加载,不依赖于任何网络服务器;
      • \n
      • 并发:通过进程模型进行扩展。进程是一等公民;
      • \n
      • 易处理:进程可以瞬间开启或停止,有利于快速、弹性的伸缩应用。进程应追求最小启动时间;进程一旦接受终止信号就会优化的终止;进程在面对突然死亡时保持健壮;
      • \n
      • 开发环境与线上环境等价:尽可能的保持开发,预发布,线上环境相同,以尽量做到持续部署;
      • \n
      • 日志:应用本身从不存储自己的输出流,不应该试图去写或者管理日志文件,相反,每一个运行的进程都会直接的标准输出(stdout)事件流;
      • \n
      • 管理进程:后台管理任务当作一次性进程运行;
      • \n
      \n
    • \n
    • 面向微服务架构\n
        \n
      • 微服务将单体系统分解为多个“仅做好一件事”的可独立部署的服务。这件事通常代表某项业务能力,或者最小可提供业务价值的“原子“服务单元。具备以下优点:\n
          \n
        • 变更周期解耦:只要变更限于单一有界的环境,并且服务继续履行其现有合约;实现了更频繁和快速的部署,从而实现了持续的价值流动;
        • \n
        • 减少业务领域和现有代码的学习负担
        • \n
        • 可以加快采用新技术的步伐
        • \n
        • 提供独立、高效的服务扩展
        • \n
        \n
      • \n
      \n
    • \n
    • 自服务敏捷架构(可以认为是DevOps):\n
        \n
      • 一个能够持续部署和运行这些微服务的平台;如代码以Git形式“推送”。 然后,自服务敏捷平台构建应用程序工件,构建应用程序环境,部署应用程序,并启动必要的进程。 团队不必考虑他们的代码在哪里运行或如何到达那里,这些对用户都是透明得,因为平台会关注这些。
      • \n
      \n
    • \n
    • 基于 API 的协作
    • \n
    • 抗脆弱性
    • \n
    \n
  • \n
  • 云原生计算基金会(2015)定义的特征\n
      \n
    • 应用容器化
    • \n
    • 面向微服务架构
    • \n
    • 应用支持容器的编排制度
    • \n
    \n
  • \n
  • 云原生计算基金会(2018)定义\n
      \n
    • 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API
    • \n
    • 这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更
    • \n
    \n
  • \n
\n

1.2 容器、虚拟机、Docker、Openstack 和 K8S

\n
    \n
  • 容器&虚拟机:均为虚拟化技术,容器更为轻量化、效率更高、启动更快;虚拟机需数分钟启动,容器仅需数十毫秒;
  • \n
  • Docker: 容器化虚拟技术事实上的标准;
  • \n
  • OpenStack:分布式的虚拟机服务平台,相比于普通的虚拟机软件(如Vmare),多了分布式虚拟机调度管理的功能和节点的负载均衡;
  • \n
  • K8S:分布式的容器调度管理平台,相比于Docker,多了分布式的容器调度管理和节点的负载均衡;
  • \n
  • 注意:常见的中文资料均言K8S是容器编排软件,这里的编排是指调度、管理的意思,而非工作流编排的意思,容易有误导性;
  • \n
  • 注意:无论是Openstack还是K8S,均不支持跨节点的容器或虚拟机的创建;所以将多台电脑合并成一台电脑的想法是不现实的;
  • \n
\n

1.3 K8S 和 云原生

\n

在单机上运行容器,无法发挥它的最大效能,只有形成集群,才能最大程度发挥容器的良好隔离、资源分配与编排管理的优势,而对于容器的编排管理,Swarm、Mesos 和 Kubernetes 的大战已经基本宣告结束,Kubernetes 成为了无可争议的赢家。

\n
    \n
  • Kubernetes 成为云原生应用的基石
  • \n
  • 有机会成为跨云的真正的云原生应用的操作系统
  • \n
\n

1.4 K8S 介绍

\n
    \n
  • 官方Kubernetes 也称为 K8S,是用于自动部署、扩缩和管理容器化应用程序的开源系统。
  • \n
  • 发展历史:由Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用。
  • \n
  • 能力Google 每周运行数十亿个容器,能够在不扩张运维团队的情况下进行规模扩展。
  • \n
  • 作用: 相当于一个操作系统,可以快速提供PaaS服务:1)创建各种容器化测试化环境;2)发布各种容器化服务;3)快速安装各种容器化服务,如MongoDB、HbasePostgresqlRedisSpark等;快速提供IaaS服务:通过安装OpenstackKubeVirt等软件;快速提供FaaS服务:通过安装Kube Native等软件;
  • \n
\n

\"image-20230414170948460\"

\n

\"image-20230414171119324\"

\n

1.5 基本概念

\n
    \n
  • \n

    Container:轻量级的系统虚拟化技术,使用namespace隔离环境。

    \n
  • \n
  • \n

    Pod

    \n
  • \n
  • \n
      \n
    • K8S 的调度的基本单位,Pod是一组紧密关联的容器集合,内部的容器共享PID、IPC、Network和UTS namespace。可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。
    • \n
    \n

    \"image-20230415141540422\"

    \n
  • \n
\n

​\t\t\t\tPod的设计理念基础是微服务,不同类型的业务组合由不同类型的Pod执行,一个Pod对应一个微服务

\n
    \n
  • \n
      \n
    • K8S中,采用manifest(yaml或json)定义对象,比如nginx服务(包含了一个nginx 容器image)定义为:
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
\n
    \n
  • \n
      \n
    • Node: 是Pod运行的主机,可以为物理机,也可以为虚拟机。每个Node上要运行container runtime (docker或者rkt)、kubelet和kube-proxy服务
    • \n
    • \"image-20230415142123300\"
    • \n
    \n
  • \n
  • \n
      \n
    • Service: 一个Pod只是一个运行服务的实例,可能在一个节点上停止,在另一个节点以一个新的IP启动一个新的Pod。在K8S集群中,客户端需要访问的服务就是Service对象。每个Service会对应一个集群内部有效的虚拟IP,集群内部通过虚拟IP访问一个服务。
    • \n
    \n
  • \n
  • \n
      \n
    • Kubelet: 每个Node的任务和资源管理
    • \n
    \n
  • \n
  • \n
      \n
    • Kube-proxy: 负责每个节点的硬件负载均衡
    • \n
    \n
  • \n
\n

1.6 K8S 常见命令

\n
    \n
  • 运行一个Nginix容器:\n
      \n
    • kubectl run --image=nginx:alpine nginx-app --port=80
    • \n
    \n
  • \n
  • Kubectl 命令:\n
      \n
    • kubectl get - 类似于 docker ps,查询资源列表
    • \n
    • kubectl describe - 类似于 docker inspect,获取资源的详细信息
    • \n
    • kubectl logs - 类似于 docker logs,获取容器的日志
    • \n
    • kubectl exec - 类似于 docker exec,在容器内执行一个命令
    • \n
    • kubectl create -f file.yaml – 根据yaml创建Deployment资源
    • \n
    • kubectl delete 删除命令,可删除node、pod、svc、depolyment
    • \n
    \n
  • \n
  • yaml 定义 Pod:
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
\n
    \n
  • Volume:\n
      \n
    • 一个Pod一旦发生异常,Pod 产生的数据会随着 Pod 消亡而自动消失。Volume 用于持久化容器数据。
    • \n
    • 如:为 redis 容器指定一个 hostPath 来存储 redis 数据
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
volumeMounts:
- name: redis-persistent-storage
mountPath: /data/redis
volumes:
- name: redis-persistent-storage
hostPath:
path: /data/
\n
    \n
  • Service:\n
      \n
    • kubectl创建Pod,Pob的IP地址会随着Pod的重启而变化
    • \n
    • 为了访问Pod提供的服务,采用Service提供为一组Pod一个统一的入口,并提供负载均衡和自动服务发现。\n
        \n
      • kubectl expose deployment nginx-app --port=80 --target-port=80 --type=NodePort
      • \n
      \n
    • \n
    \n
  • \n
  • Replicas set:\n
      \n
    • 在一个Service中,可为Pod设置数个副本,以确保服务永不掉线\n
        \n
      • kubectl scale --replicas=3 deployment/nginx-app
      • \n
      \n
    • \n
    \n
  • \n
\n

\"image-20230415143046325\"

\n
    \n
  • 滚动升级(Rolling Update):\n
      \n
    • 滚动升级(Rolling Update)通过逐个副本容器替代升级的方式来实现无中断的服务升级:\n
        \n
      • kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2
      • \n
      \n
    • \n
    • 滚动升级中若发生错误,可随时回滚:\n
        \n
      • kubectl rolling-update frontend-v1 frontend-v2 --rollback
      • \n
      \n
    • \n
    \n
  • \n
  • 资源限制:\n
      \n
    • K8S通过 cgroups 提供容器资源管理的功能,可限制每个容器的 CPU 和内存使用,比如对于刚才创建的 deployment,可以通过下面的命令限制 nginx 容器最多只用 50% 的 CPU 和 128MB 的内存:\n
        \n
      • kubectl set resources deployment nginx-app -c=nginx --limits=cpu=500m,memory=128Mi
      • \n
      \n
    • \n
    • 或者在yaml中指定资源限制
    • \n
    \n
  • \n
  • 健康检查:\n
      \n
    • K8S Kubernetes 提供了两种探针(Probe,支持 exec、tcpSocket 和 http 方式)来探测容器的状态:\n
        \n
      • LivenessProbe:探测应用是否处于健康状态,如果不健康则删除并重新创建容器
      • \n
      • ReadinessProbe:探测应用是否启动完成并且处于正常服务状态,如果不正常则不会接收来自 Kubernetes Service 的流量
      • \n
      \n
    • \n
    \n
  • \n
\n

1.7 K8S 常用运维命令

\n
    \n
  • 查看pod,及所在的节点:\n
      \n
    • kubectl get pods -o wide
    • \n
    \n
  • \n
  • 若有节点warn,回收垃圾失败:
  • \n
\n
1
2
kubectl drain --delete-local-data --ignore-daemonsets NODENAME
kubectl uncordon NODENAME
\n

2 K8S 集群基础环境部署

\n

若服务器之前搭建过 K8S 集群,需要彻底删除

\n

参考https://blog.csdn.net/qq_43159578/article/details/124131709

\n
    \n
  • 停止所有的Kubernetes服务
  • \n
\n
1
2
sudo systemctl stop kubelet
sudo systemctl stop containerd
\n
    \n
  • 删除Kubernetes软件包
  • \n
\n
1
yum remove kubeadm kubectl kubelet kubernetes-cni -y
\n
    \n
  • 删除配置文件
  • \n
\n
1
2
3
4
# 清除残留文件
rm -rf /root/.kube
rm -rf /etc/cni/net.d
rm -rf /etc/kubernetes/*
\n
    \n
  • 删除etcd数据目录
  • \n
\n
1
rm -rf /var/lib/etcd
\n
    \n
  • 清除iptables或者ipvs的配置
  • \n
\n
1
2
# sudo ipvsadm -C
# sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo # # iptables -Xkubec
\n
    \n
  • 如果只是想重新部署集群
  • \n
\n
1
kubeadm reset
\n

kubeadm reset 命令用于清除当前节点上所有与 kubeadm initkubeadm join 命令创建的 Kubernetes 集群相关的状态。其主要作用如下:

\n
    \n
  1. \n

    移除 Kubernetes 集群相关的系统服务,如 kubelet 和 kube-proxy。

    \n
  2. \n
  3. \n

    删除所有在当前节点上创建的 Kubernetes 对象,包括 Pod、Service、Deployment 等。

    \n
  4. \n
  5. \n

    移除 etcd 中与当前节点相关的信息,如节点标识、配置信息等。

    \n
  6. \n
  7. \n

    删除 Kubernetes 数据目录,包括证书、密钥、kubeconfig 文件等。

    \n
  8. \n
\n

使用 kubeadm reset 命令可以清除当前节点上的所有 Kubernetes 相关状态,以便重新创建新的 Kubernetes 集群或者将当前节点加入到另一个 Kubernetes 集群中。在进行 kubeadm reset 操作之前,应该先备份当前节点上的重要数据和配置信息,以便在需要时进行恢复。

\n

2.1 服务器

\n
    \n
  • 网络资源:各节点间通过千兆交换机互联(非光纤交换机)
  • \n
  • 管理节点:\n
      \n
    • Gisweb4,Gisweb3
    • \n
    \n
  • \n
  • 计算节点:\n
      \n
    • Gisweb3,GISweb2,dellm640-01, Gisweb4, dellslot03, dellslot4
    • \n
    \n
  • \n
  • 持久化存储资源:\n
      \n
    • 目前采用:\n
        \n
      • nfs-client: 23服务器的/mnt/storage/k8s/pv
      • \n
      \n
    • \n
    \n
  • \n
  • Node1(刀片3):\n
      \n
    • 子网 IP:192.168.0.177
    • \n
    • CPU:Intel® Xeon® Silver 4216 CPU @ 2.10GHz;32核心,64线程。
    • \n
    • 内存:64GB(32GB*2),每根DDR4,3000Mhz
    • \n
    \n
  • \n
  • Node2(刀片4):\n
      \n
    • 子网 IP:192.168.0.209
    • \n
    • CPU:Intel® Xeon® Silver 4216 CPU @ 2.10GHz;32核心64线程。
    • \n
    • 内存:64GB(32GB*2),每根DDR43200Mhz
    • \n
    \n
  • \n
\n

2.2 安装过程

\n

2.2.1 前提条件

\n

a. 节点之中不可以有重复的主机名、MAC 地址或 product_uuid

\n
1
cat /sys/class/dmi/id/product_uuid
\n

b. 检查网络适配器:若有多个网卡,确保每个node的子网通过默认路由可达

\n

c. 防火墙开放端口(所有节点)

\n

\"image-20230415145138479\"

\n
1
2
3
4
5
6
7
systemctl restart firewalld
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=6443/tcp --permanent
firewall-cmd --zone=public --add-port=2379-2380/tcp --permanent
firewall-cmd --zone=public --add-port=10250/tcp --permanent
firewall-cmd --zone=public --add-port=10259/tcp --permanent
firewall-cmd --zone=public --add-port=10257/tcp --permanent
\n

d. 关闭防火墙(所有节点)

\n
1
2
systemctl stop firewalld NetworkManager
systemctl disable firewalld NetworkManager
\n

e. 关闭交换分区并禁用 SELinux(所有节点)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看 交换分区
free -m

# 将 `SELinux` 设置为 `permissive` 模式(相当于将其禁用) 第一行是临时禁用,第二行是永久禁用
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# 关闭swap;第一行是临时禁用,第二行是永久禁用
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 允许 iptables 检查桥接流量 (K8s 官方要求)
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 让配置生效
sysctl --system
\n

f. 时间同步(所有节点)

\n
1
2
3
4
yum install chrony -y
systemctl start chronyd
systemctl enable chronyd
chronyc sources
\n

g. 设置主机名并添加 ip 映射(所有节点)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 以 gisweb4 为例
# 查看主机名cat
hostname
# 设置主机名
hostnamectl set-hostname gisweb4
# 更新
bash

# 添加 ip 映射
echo "125.250.153.23 gisweb4" >> /etc/hosts
echo "125.250.153.23 gisweb4" >> /etc/hosts
# 两台无外网ip的刀片添加内网ip

# /etc/hosts 文件内容如下:
192.168.0.203 gisweb1
192.168.0.202 gisweb2
192.168.0.204 gisweb4
192.168.0.208 gisweb3
192.168.0.176 dellm640-01
192.168.0.177 dellm640-03
192.168.0.209 dellslot04

125.220.153.26 gisweb1
125.220.153.25 gisweb2
125.220.153.22 gisweb3
125.220.153.23 gisweb4
125.220.153.28 dellm640-01
\n

2.2.2 升级 Linux 内核到最新(所有节点)

\n

清除缓存,重新构建缓存:

\n
1
2
# 清除缓存
yum makecache & yum -y update
\n

参考链接https://zhuanlan.zhihu.com/p/368879345

\n

2.2.3 转发 IPv4 并让 iptables 看到桥接流量(所有节点)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# a.    验证br_netfilter是否已经加载
lsmod | grep br_netfilter
# b. 加载br_netfilter模块:
modprobe br_netfilter
# c. iptabels桥接
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

# 应用 sysctl 参数而不重新启动
sysctl --system
\n

2.2.4 安装 ipvsadm(所有节点)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
yum install ipvsadm ipset sysstat conntrack libseccomp -y

cat <<EOF | sudo tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF

systemctl restart systemd-modules-load.service

lsmod | grep -e ip_vs -e nf_conntrack
\n

2.2.5 修改内核参数(所有节点,lb除外)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.netfilter.nf_conntrack_max=2310720

net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384

net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.all.forwarding = 1
EOF

sysctl --systemS
\n

2.2.6 安装Container Runtime(选用containerd,弃用docker)

\n
    \n
  • Docker-engine+cir-dockerd方案(舍弃:从kubernetes 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,需要在kubelet和docker之间加上一个中间层cri-docker。cri-docker是一个支持CRI标准的shim。一头通过CRI跟kubelet交互,另一头跟docker api交互,从而间接的实现了kubernetes以docker作为容器运行时。但是这种架构缺点也很明显,调用链更长,效率更低。因此选用containerd作为容器runtime
  • \n
  • containerd方案: containerd是一个docker的容器runtime,成为CNCF的官方项目
  • \n
\n

官方安装教程:https://github.com/containerd/containerd/blob/main/docs/getting-started.md

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 安装containerd.io
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install containerd.io


# 安装CNI插件
# i.下载cni-plugins.tar 从https://github.com/containernetworking/plugins/releases
# 在线下载:
# wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
# ii.在/opt/cni/bin下解压:

# 把22上的拷贝到没有公网ip的服务器上
# scp -P22 /opt/cni/bin/cni-plugins-linux-amd64-v1.1.1.tgz root@192.168.0.203:/opt/cni/bin/

mkdir -p /opt/cni/bin
cd /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz


# 重启服务:
systemctl restart containerd
# 开机启动:
systemctl enable containerd


# 配置systemd cgroup驱动
# 修改配置文件,将 SystemdCgroup 改为 true 注意配置项是区分大小写的
containerd config default | sudo tee /etc/containerd/config.toml
vim /etc/containerd/config.toml

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
# 并将 sandbox_image 地址修改为国内的地址
并且将 sandbox_image = "registry.k8s.io/pause:3.6"
修改为 sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6"

# 启动 containerd
systemctl restart containerd

# 开机自启
systemctl enable containerd

# 启动成功后可以查看到监听的端口
netstat -nlput | grep containerd
tcp 0 0 127.0.0.1:36669 0.0.0.0:* LISTEN 8665/containerd off (0.00/0/0)
\n

2.2.7 在所有电脑上安装 kubeadm, kubelet and kubectl(所有节点)

\n
1
2
3
# a.    kubeadm: the command to bootstrap the cluster.
# b. kubelet: the component that runs on all of the machines in your cluster and does things like starting pods and containers.
# c. kubectl: the command line util to talk to your cluster.
\n
    \n
  1. 配置阿里云的k8s源,加速安装
  2. \n
\n
1
2
3
4
5
6
7
8
9
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
\n
    \n
  1. 将 SELinux 设置为 permissive 模式(相当于将其禁用)
  2. \n
\n
1
2
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
\n
    \n
  1. 安装
  2. \n
\n
1
2
3
4
yum install -y --nogpgcheck kubelet-1.25.2 kubeadm-1.25.2 kubectl-1.25.2  
# sudo yum install -y --nogpgcheck kubelet-1.26.3 kubeadm-1.26.3 kubectl-1.26.3
# 自启动
systemctl enable --now kubelet
\n

2.2.8 启动控制面节点

\n
1
2
3
kubeadm init --kubernetes-version=v1.25.2 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 

#kubeadm init --kubernetes-version=v1.26.3 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
\n

若出现如下错误(上一次集群初始化的残留文件)

\n
1
2
# 如果出现报错  
[ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
\n

执行如下命令后再次初始化

\n
1
2
rm -rf /var/lib/etcd
rm -rf /etc/kubernetes/manifests/*
\n

2.2.9 配置环境变量(初始化后)

\n
1
2
3
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
\n

2.2.10 将 master 作为node(管理节点上执行)

\n
    \n
  • 检查 node 是否存在污点\n
      \n
    • 污点值有三种:\n
        \n
      • NoSchedule:一定不被调度
      • \n
      • PreferNoSchedule:尽量不被调度【也有被调度的几率】
      • \n
      • NoExecute:不会调度,并且还会驱逐Node已有Pod
      • \n
      \n
    • \n
    \n
  • \n
\n
1
kubectl describe nodes gisweb4 |grep Taints
\n
    \n
  • 删除污点:
  • \n
\n
1
2
# 本次删除的污点为:node-role.kubernetes.io/control-plane-
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
\n

2.2.11 安装 Pod 网络插件(CNI:Container Network Interface)(master)

\n

你必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信。

\n

确保kubeadm初始化时,pod_cidr 为10.244.0.0

\n
    \n
  • 下载 yml 配置文件\n
      \n
    • 或自己下载到本地
    • \n
    \n
  • \n
\n
1
curl https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml -O
\n
    \n
  • 编辑kube-flannel.yml\n
      \n
    • 找到如下位置,添加 iface-regex
    • \n
    \n
  • \n
\n
1
2
3
vim kube-flannel.yml
# 添加
- --iface-regex=^192.168..
\n

\"\"

\n
    \n
  • 构建
  • \n
\n
1
kubectl apply -f kube-flannel.yml
\n

2.2.12 node 节点加入集群

\n
    \n
  • 管理节点获取加入命令:
  • \n
\n
1
2
3
kubeadm token create --print-join-command
# 返回如下
kubeadm join 125.220.153.23:6443 --token x0wdaj.d5wltdzdtos22fl6 --discovery-token-ca-cert-hash sha256:9245d363cdeb1757bacba21b9ccdc06a28e7490bcedfb0eeb404b56f769fa112
\n
    \n
  • 在 node 节点执行生成命令
  • \n
\n

如果此步报如下错误

\n

The connection to the server localhost:8080 was refused - did you specify the right host

\n
    \n
  1. 出现这个问题的原因是kubectl命令需要使用kubernetes-admin的身份来运行,在kubeadm int启动集群的步骤中就生成了/etc/kubernetes/admin.conf
  2. \n
  3. 因此,解决方法如下,将主节点中的/etc/kubernetes/admin.conf文件拷贝到工作节点相同目录下:
  4. \n
  5. 然后分别在工作节点上配置环境变量:
  6. \n
\n

解决方案

\n
    \n
  • 主节点执行
  • \n
\n
1
2
# 将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到工作节点相同目录下:
scp -P22 /etc/kubernetes/admin.conf oge@125.220.153.22:/etc/kubernetes/
\n
    \n
  • node 节点执行如下命令后,再次执行加入集群的命令
  • \n
\n
1
2
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
\n
    \n
  • 如果是重新加入集群,需要 reset 一下
  • \n
\n
1
kubeadm reset
\n

2.2.13 添加新的 master 节点

\n
    \n
  • 管理节点:
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 管理节点查看
kubeadm token create --print-join-command
# 生成如下
kubeadm join 125.220.153.23:6443 --token mc56rw.t9b3d1ql53yhom9y --discovery-token-ca-cert-hash sha256:753ccf865a9c590413043d469a9848300871afaef7221e3fdb97d981939a2b83

# 管理节点
kubeadm init phase upload-certs --upload-certs
# 输出
I0413 11:00:30.817038 10009 version.go:256] remote version is much newer: v1.27.0; falling back to: stable-1.25
[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
[upload-certs] Using certificate key:
70d43cde7f6423b5c3e88c0fa9d08511cefbc53992dc63a13544cd548a912941

# 管理节点,在networking前添加:controlPlaneEndpoint: 125.220.153.23:6443
kubectl -n kube-system edit cm kubeadm-config
\n
    \n
  • 新的master节点
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 新节点
# 重新加入的话,检查是否需要kill掉6443端口(这是之前的api-service服务)
kubeadm join 125.220.153.23:6443 --token mc56rw.t9b3d1ql53yhom9y --discovery-token-ca-cert-hash sha256:753ccf865a9c590413043d469a9848300871afaef7221e3fdb97d981939a2b83 --control-plane --certificate-key 70d43cde7f6423b5c3e88c0fa9d08511cefbc53992dc63a13544cd548a912941

# 生成
This node has joined the cluster and a new control plane instance was created:

* Certificate signing request was sent to apiserver and approval was received.
* The Kubelet was informed of the new secure connection details.
* Control plane label and taint were applied to the new node.
* The Kubernetes control plane instances scaled up.
* A new etcd member was added to the local/stacked etcd cluster.

To start administering your cluster from this node, you need to run the following as a regular user:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Run 'kubectl get nodes' to see this node join the cluster.
\n

3 K8S 管理平台 dashboard 环境部署(管理节点)

\n
    \n
  • 下载 yaml 配置文件并应用\n
      \n
    • 或下载到本地然后上传
    • \n
    \n
  • \n
\n
1
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml
\n
    \n
  • 修改配置文件(以node)\n
      \n
    • 但是这个只能内部访问,所以要外部访问,要么部署 ingress,要么就是设置 service NodePort 类型。这里选择 service 暴露端口。
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

# 将其中的,type: ClusterIP 修改成type: NodePort,保存退出即可。

# 查看服务的暴露端口,需在安全组放行
kubectl get svc -A |grep kubernetes-dashboard

\n

\"image-20230415154841715\"

\n
    \n
  • 权限认证
  • \n
\n
1
2
3
4
5
6
# 创建访问用户
kubectl apply -f https://kuboard.cn/install-script/k8s-dashboard/auth.yaml
# 获取访问令牌
kubectl -n kubernetes-dashboard create token admin-user
# 生成的令牌
eyJhbGciOiJSUzI1NiIsImtpZCI6IkdVQTZzb3JEM1FHdkpxVDNsSEwtVEZWc2hyR08tbmFFWnFGX2Q2OGt5cEkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjgzNzM1MTQ1LCJpYXQiOjE2ODM3MzE1NDUsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiMzBlMWQzNDEtNDc0Yi00M2MyLWIyNzYtZGIxZTU4NzM5ZTgxIn19LCJuYmYiOjE2ODM3MzE1NDUsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.mg1IU29tBpH23nglJVbRmVa2A26WZjXxMCzckQyb-dnviLBRzBuvNebb8H4YH5CNJUPkB2GGC_r7dlm5zEbPpK8RqkbwXy-wqkOoMephs83gIQkJ3RgskpWqTgqqg87e6WXHRtuzYsQQZ4Rq3Y4uQy9jJS9o1lIoRTujpmpWORb9vu4JN0RqEfK2chQqNsYCe_TCtvtvkP2EyuU3QSeYdvWh5NNZ9CYwA8l8eqA6ijrmTqZjnI6Q9Ymo7trKSuGFmffotBpN9dTYZoyv6Io_VgEz6_1oHsA0pwG-3wc41Ly11sDAzwjZvoGN1yfw0vsVcwnAjH4LkRG2ImwYIcZbig
\n\n

4 安装K8S的包管理工具Helm (管理节点)

\n

参考https://helm.sh/docs/intro/install/

\n
    \n
  • 这里以下载压缩包安装为例:
  • \n
\n

参考https://www.cnblogs.com/zhanglianghhh/p/14165995.html
\ngithub地址https://github.com/helm/helm

\n

\"image-20230413112634363\"

\n
1
2
3
4
5
6
cd  ~/k8s/helm
wget https://get.helm.sh/helm-v3.11.3-linux-amd64.tar.gz
tar zxfv helm-v3.11.3-linux-amd64.tar.gz
mv ./linux-amd64/helm /usr/bin/
# 显示版本,安装完成
helm version
\n

5 安装K8S的包管理工具 krew(管理节点)

\n

参考https://krew.sigs.k8s.io/docs/user-guide/setup/install/

\n
    \n
  • 确保 git 已经安装
  • \n
\n
1
2
3
git version
# 若未安装
yum -y install git
\n
    \n
  • 安装krew
  • \n
\n
1
2
3
4
5
6
7
8
9
(
set -x; cd "$(mktemp -d)" &&
OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\\(arm\\)\\(64\\)\\?.*/\\1\\2/' -e 's/aarch64$/arm64/')" &&
KREW="krew-${OS}_${ARCH}" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
tar zxvf "${KREW}.tar.gz" &&
./"${KREW}" install krew
)
\n
    \n
  • 添加 $HOME/.krew/bin目录到您的 PATH 环境变量。 更新你的 .bashrc或者 .zshrc文件
  • \n
\n
1
2
3
# 永久写的用户的环境变量文件,避免登出后失效
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
source ~/.bashrc
\n
    \n
  • 若安装失败,采用压缩包安装
  • \n
\n
1
2
3
4
5
6
7
8
9
10
wget https://github.com/kubernetes-sigs/krew/releases/latest/download/krew-linux_amd64.tar.gz

tar -zxvf krew-linux_amd64.tar.gz
# 添加$HOME/.krew/bin目录到PATH环境变量
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
# 配置为 kubectl 插件
mv ./krew-linux_amd64 ./kubectl-krew
mv ./kubectl-krew /usr/local/bin/
# 测试
kubectl krew version
\n
    \n
  • 检查是否安装成功
  • \n
\n
1
2
kubectl krew
kubectl plugin list
\n

6 为 K8S 创建 PV 持久卷

\n

6.1 PV和PVC

\n
    \n
  • \n

    持久卷(PersistentVolume,PV)是集群中由管理员配置的一段网络存储。它是集群中的资源,就像节点是集群资源一样。PV持久卷和普通的Volume一样,也是使用卷插件来实现的,只是它们拥有独立于任何使用PV的Pod的生命周期。此API对象捕获存储实现的详细信息,包括NFS,iSCSI或特定于云提供程序的存储系统。

    \n
  • \n
  • \n

    持久卷申领(PersistentVolumeClaim,PVC)表达的是用户对存储的请求。概念上与Pod类似。Pod会耗用节点资源,而PVC申领会耗用PV资源。

    \n
  • \n
\n

6.2 用 storageClass 动态创建 PV

\n
    \n
  • 对1PB的大量目录创建NFS服务,gisweb1-4,以gisweb4为例子
  • \n
\n
1
2
安装NFS: 
yum -y install nfs-utils rpcbind
\n
    \n
  • 设置持久卷权限
  • \n
\n
1
2
3
# 执行权限
chown -R nobody:nfsnobody /mnt/storage/k8s/pv
#chmod -R 777 /mnt/storage/k8s/pv
\n
    \n
  • 配置 nfs
  • \n
\n
1
2
3
4
vim /etc/exports
# 添加:
/mnt/storage/k8s/pv 192.168.0.0/24(rw,sync,no_root_squash)
# 以上设置让所有的 IP 都有效
\n
1
2
3
4
5
6
7
8
9
10
11
systemctl start rpcbind
systemctl enable rpcbind
systemctl enable nfs
systemctl start nfs
systemctl start nfs-server
systemctl enable nfs-server

systemctl start firewalld
firewall-cmd --permanent --add-service=nfs
firewall-cmd --reload
systemctl stop firewalld && sudo systemctl disable firewalld
\n
    \n
  • 检查
  • \n
\n
1
2
exportfs -rv
showmount -e 127.0.0.1
\n
    \n
  • 所有节点安装nfs客户端
  • \n
\n
1
2
3
4
5
yum install -y nfs-utils
# 每个节点挂载nfs客户端的存储目录,本次nfs客户端在gisweb4(192.168.0.204)上
mount -t nfs 192.168.0.204:/mnt/storage/k8s/pv /mnt/storage/k8s/pv
# 检查挂载情况
df -h
\n
    \n
  • 安装nfs-client-provisioner (需要翻墙)
  • \n
\n

参考:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
# 更新helm repo
helm repo update
# 搜索helm库中nfs版本
helm search repo nfs-subdir-external-provisioner

# 添加 helm 仓库
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \\
--set nfs.server=192.168.0.204 \\
--set nfs.path=/mnt/storage/k8s/pv \\
--set image.repository=registry.cn-hangzhou.aliyuncs.com/xzjs/nfs-subdir-external-provisioner \\
--set image.tag=v4.0.0
\n
    \n
  • 手动安装 nfs-client-provisioner
  • \n
\n

参考:http://www.mydlq.club/article/109/#创建-nfs-subdir-external-provisioner-部署文件

\n
    \n
  • 成功后,安装时添加持久化参数,其中 nfs-storage 为安装的 storageclass 的 provisioner 字段名字
  • \n
\n

7 安装 kubeAPPS 可视化软件管理工具

\n

参考:https://kubeapps.dev/docs/latest/tutorials/getting-started/

\n
    \n
  • 安装
  • \n
\n
1
2
3
4
5
6
# 添加 kubeapps 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
# 创建 kubeapps 的命名空间
kubectl create namespace kubeapps
# 安装
helm install kubeapps --namespace kubeapps bitnami/kubeapps
\n
    \n
  • 创建证书
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建用于访问 Kubeapps 和 Kubernetes 的演示凭证
kubectl create --namespace default serviceaccount kubeapps-operator
kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator


cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: kubeapps-operator-token
namespace: default
annotations:
kubernetes.io/service-account.name: kubeapps-operator
type: kubernetes.io/service-account-token
EOF
\n
    \n
  • 查看令牌 token
  • \n
\n
1
kubectl get --namespace default secret kubeapps-operator-token -o go-template='{{.data.token | base64decode}}'
\n
1
eyJhbGciOiJSUzI1NiIsImtpZCI6IkdVQTZzb3JEM1FHdkpxVDNsSEwtVEZWc2hyR08tbmFFWnFGX2Q2OGt5cEkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yLXRva2VuIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNTNjY2M0N2YtZWFmMS00NDY4LWJkN2ItYTVhMzliMzJjMzExIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6a3ViZWFwcHMtb3BlcmF0b3IifQ.qsTBQODZLD1EUP5WjF_ju0-_ZFoJa2pEGCGf2zoLK71TjZeytD0GUGp4Z5ACNFuJMtedtx8tRgWhioU2oimxGdCIL4f7Szt0dOQgXD15HmoiUjYEcDQNsfTdcmfZw-m3-zwtTqa3kTTG3Wio0wf_f_ayw8qZCDL2i3PK-7h0QeAb1rQhtCz_e8huNrcshjixGlyw8aKUvdi2hPe6yvpxKJqQeOalNhT22b-ax28oIyqmC-NXYUMyRbEsgOjyuJAv6XdjqsQKbOGMKsTtNyf7CvnHl88hfRZpF0W-GuKj1ggKGYClTHuXnsv9QP-AQN1UaEtcAbUp08bHN9isedJL6w
\n
    \n
  • 修改服务模式,将其改为 NodePort
  • \n
\n
1
2
# 因为是测试环境,因此直接采用 NodePort 方式暴露服务端口
kubectl edit svc kubeapps -n kubeapps
\n
    \n
  • 找到端口,在安全组放行
  • \n
\n
1
kubectl get svc -A |grep kubeapps
\n\n

8 在 K8S 上部署虚拟机服务 Kubevirt

\n
    \n
  • 设置 K8S ApiServer 允许特权容器
  • \n
\n
1
2
3
vim /etc/kubernetes/manifests/kube-apiserver.yaml
# 设置
--allow-privileged=true
\n
    \n
  • 检查每个节点是否支持虚拟化
  • \n
\n
1
2
3
virt-host-validate qemu
# 如果显示没有这个命令,先安装 libvrt 和 qemu 软件包:
yum install -y qemu-kvm libvirt virt-install bridge-utils
\n
    \n
  • 若有warnning,需要解决
  • \n
\n

\"image-20230408181653957\"

\n
1
2
3
4
5
6
7
8
# 1
vim /etc/default/grub
# 2.添加
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on"
# 3
grub2-mkconfig -o /boot/grub2/grub.cfg
# 4
reboot
\n
    \n
  • 安装 Kubevirt
  • \n
\n
1
2
3
4
# K8S 1.25版本,Kubervirt必须0.57.2以上,才能适配
kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0-rc.0/kubevirt-operator.yaml

kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0-rc.0/kubevirt-cr.yaml
\n
    \n
  • 等待 Kubevirt 资源创建完毕
  • \n
\n
1
kubectl -n kubevirt wait kv kubevirt --for condition=Available
\n
    \n
  • 安装 CDI
  • \n
\n

参考https://kubevirt.io/labs/kubernetes/lab2.html

\n
    \n
  • 安装 VNC
  • \n
\n
1
yum install -y tigervnc
\n
    \n
  • 查看 Kubevirt 资源
  • \n
\n
1
kubectl get pods -n kubevirt
\n

\"image-20230408185646502\"

\n
    \n
  • 安装 Kubevirtcli 管理工具
  • \n
\n
1
2
kubectl krew install virt
kubectl virt help
\n
    \n
  • Kubevirt创建/删除虚拟机服务
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
# 1.    创建yaml文件
Xxx
# 2. 运行一个虚拟机
kubectl apply -f test.yaml
# 3. 查看虚拟机
kubectl get vmis
# 4. 停止/删除虚拟机
kubectl delete -f vmi.yaml
# 或者
kubectl delete vmis testvmi
# 5. 开始/停止/暂停虚拟机
virtctl start/stop/pause my-vm
\n

9 在 K8S 上部署 PostgreSQL

\n
    \n
  • \n

    安装

    \n
      \n
    • \n

      注意:数据库安装需要持久卷,需提前创建满足要求的pv,或者创建nasstroageclass,以自动根据mysqlpvc创建pv

      \n
    • \n
    • \n

      集群已经配置23服务器的/mnt/storage/k8s/pv为NAS,并已经配置名字为nas-storagesc

      \n
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
helm repo add bitnami https://charts.bitnami.com/bitnami
# 首先检查是否有oge这个命名空间,否则执行如下进行创建
kubectl create ns oge
# postgresql 这个名字可以自己定义,但后面每一步都要注意对应更改
helm install -n oge bitnami/postgresql \\
--set global.storageClass=nfs-client \\
--set readReplicas.persistence.storageClass=nfs-client \\
--set primary.persistence.storageClass=nfs-client \\
--set primary.persistence.size=200Gi \\
--set readReplicas.persistence.size=200Gi \\
--set image.tag=14.5.0-debian-11-r6


helm install -n geoctap bitnami/postgresql \\
--set global.storageClass=nfs-client \\
--set readReplicas.persistence.storageClass=nfs-client \\
--set primary.persistence.storageClass=nfs-client \\
--set primary.persistence.size=200Gi \\
--set readReplicas.persistence.size=200Gi \\
--set image.tag=14.5.0-debian-11-r6
# 指定版本,可在kubeapps里面查看
# --set image.tag=14.5.0-debian-11-r6
\n
    \n
  • 查看 postgresql 密码
  • \n
\n
1
2
3
4
kubectl get secret --namespace oge postgresql -o jsonpath="{.data.postgres-password}" | base64 -d

# 密码
7jXf2gsmUX
\n
    \n
  • 更改服务端口
  • \n
\n
1
2
3
4
kubectl edit svc --namespace oge postgresql
# 将 type=ClusterIP 改为 NodePort
# b8:85:84:71:64:28
echo "SUBSYSTEM==\\"net\\", ACTION==\\"add\\", DRIVERS==\\"?*\\", ATTR{address}==\\" b8:85:84:71:64:28\\", ATTR{type}==\\"1\\", KERNEL==\\"eno*\\", NAME=\\"eno1\\"" >> /etc/udev/rules.d/70-persistent-net.rules
\n
    \n
  • 缩放副本集
  • \n
\n
1
2
3
4
5
6
kubectl get deployment 
# 发现并没有postgresql
kubectl get all -n oge
# 发现有statefulset.apps/postgresql
# 设置副本集个数为1
kubectl scale --replicas=1 statefulset.apps/postgresql -n oge
\n
    \n
  • 命令行进入pgsql
  • \n
\n
1
2
3
4
5
6
# 进入pgsql的pod
kubectl exec -it -n oge postgresql-0 bash
# 用户登录
psql -U postgres
# 输入密码
7jXf2gsmUX
\n
    \n
  • 在pod外面执行sql
  • \n
\n
1
psql -h 125.220.153.23 -p 30865 -U postgres -W -f ./public.sql
\n

10 在 K8S 上部署 MySQL

\n
    \n
  • \n

    安装

    \n
      \n
    • \n

      注意:数据库安装需要持久卷,需提前创建满足要求的pv,或者创建nasstroageclass,以自动根据postgresql的pvc创建pv。

      \n
    • \n
    • \n

      集群已经配置23服务器的/mnt/storage/k8s/pvNAS,并已经配置名字为 nas-storagesc

      \n
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
helm repo add bitnami https://charts.bitnami.com/bitnami

# 安装
helm install -n oge mysql bitnami/mysql \\
--set global.storageClass=nfs-client \\
--set readReplicas.persistence.storageClass=nfs-client \\
--set primary.persistence.storageClass=nfs-client \\
--set primary.persistence.size=200Gi \\
--set readReplicas.persistence.size=200Gi
\n
    \n
  • 查看 MySQL 密码
  • \n
\n
1
2
3
4
kubectl get secret --namespace oge mysql -o jsonpath="{.data.mysql-root-password}" | base64 -d

# 密码
VubCMiHvT1
\n
    \n
  • 更改服务端口
  • \n
\n
1
2
3
4
kubectl edit svc --namespace oge mysql
# 将type=ClusterIP改为NodePort
# b8:85:84:71:64:28
echo "SUBSYSTEM==\\"net\\", ACTION==\\"add\\", DRIVERS==\\"?*\\", ATTR{address}==\\" b8:85:84:71:64:28\\", ATTR{type}==\\"1\\", KERNEL==\\"eno*\\", NAME=\\"eno1\\"" >> /etc/udev/rules.d/70-persistent-net.rules
\n
    \n
  1. 缩放副本集
  2. \n
\n
1
2
3
4
5
kubectl get deployment 
# 发现并没有mysql
kubectl get all -n oge
# 发现有statefulset.apps/mysql
kubectl scale --replicas=1 statefulset.apps/mysql -n oge
\n
    \n
  1. 在K8S中进入数据库
  2. \n
\n
1
2
3
4
kubectl exec -it -n oge mysql-1  bash
# 进入后登录用户
mysql -u root -p
# 输入密码
\n

11 在K8S上部署 MongoDB

\n
    \n
  • \n

    安装

    \n
      \n
    • \n

      注意:数据库安装需要持久卷,需提前创建满足要求的pv,或者创建nas的stroageclass,以自动根据postgresql的pvc创建pv。

      \n
    • \n
    • \n

      集群已经配置23服务器的/mnt/storage/k8s/pv为NAS,并已经配置名字为nas-storage的sc

      \n
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
helm repo add bitnami https://charts.bitnami.com/bitnami

# 安装
helm install -n ydy mongodb bitnami/mongodb \\
--set global.storageClass=nfs-client \\
--set readReplicas.persistence.storageClass=nfs-client \\
--set primary.persistence.storageClass=nfs-client \\
--set primary.persistence.size=100Gi \\
--set readReplicas.persistence.size=100Gi
\n
    \n
  • 查看 MongoDB 密码
  • \n
\n
1
2
3
4
kubectl get secret --namespace ydy mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 -d

# 密码
WUL9FPQ2V9
\n
    \n
  • 更改服务端口
  • \n
\n
1
2
3
4
kubectl edit svc --namespace ydy mongodb
# 将type=ClusterIP改为NodePort
# b8:85:84:71:64:28
echo "SUBSYSTEM==\\"net\\", ACTION==\\"add\\", DRIVERS==\\"?*\\", ATTR{address}==\\" b8:85:84:71:64:28\\", ATTR{type}==\\"1\\", KERNEL==\\"eno*\\", NAME=\\"eno1\\"" >> /etc/udev/rules.d/70-persistent-net.rules
\n
    \n
  1. 缩放副本集
  2. \n
\n
1
2
3
4
5
kubectl get deployment 
# 发现并没有mongodb
kubectl get all -n ydy
# 发现有statefulset.apps/mongodb
kubectl scale --replicas=1 statefulset.apps/mongodb -n ydy
\n
    \n
  1. 在K8S中进入数据库
  2. \n
\n
1
kubectl exec -it -n ydy mongodb-644c657c4f-x62cn bash
\n

12 在 K8S 上部署 Apache Spark

\n

两个方式,第一种方式为Spark官方提出的;第二种为Google提出的,更符合K8S原生概念

\n
    \n
  1. Spark On K8S
  2. \n
  3. spark-on-k8s-operator
  4. \n
\n

\"image-20230408170401365\"

\n
Spark On K8S
\n

\"image-20230408170444023\"

\n
spark-on-k8s-operator
\n

12.1 安装 spark-on-k8s-operator

\n

参考 https://blog.csdn.net/w8998036/article/details/122217230

\n
    \n
  • 安装
  • \n
\n
1
2
3
4
5
6
7
helm repo add spark-operator https://googlecloudplatform.github.io/spark-on-k8s-operator 

# 注意是否存在 spark-operator 命名空间,没有则创建
kubectl create ns spark-operator

# 安装
helm install spark-operator spark-operator/spark-operator --namespace spark-operator --set sparkJobNamespace=default --set webhook.enable=true
\n
    \n
  • 创建服务账户
  • \n
\n
1
2
vim spark-application-rbac.yaml
# 内容如下
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
apiVersion: v1
kind: ServiceAccount
metadata:
name: spark
namespace: spark
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: spark
name: spark-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["*"]
- apiGroups: [""]
resources: ["services"]
verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: spark-role-binding
namespace: spark
subjects:
- kind: ServiceAccount
name: spark
namespace: spark
roleRef:
kind: Role
name: spark-role
apiGroup: rbac.authorization.k8s.io
\n
1
kubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root
\n
    \n
  • 编写作业模板并提交作业
  • \n
\n

创建一个Spark作业的YAML配置文件,并进行部署。

\n
    \n
  1. 创建spark-pi.yaml文件
  2. \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:
name: spark-pi
namespace: spark
spec:
type: Scala
mode: cluster
image: "registry.cn-hangzhou.aliyuncs.com/yudayu/spark:v3.1.1"
# 1gcr.io/spark-operator/spark:v3.1.1需要更换镜像,gcr.io目前国内无法访问。可以先对docker挂代理,pull到阿里云镜像后
imagePullPolicy: IfNotPresent
mainClass: org.apache.spark.examples.SparkPi
mainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar"
# 需要更换自己的jar包,local指该jar位于image内,可换成所有节点都能访问的web路径,或者通过指定nas挂载pv,将jar包放在nas的pv里
sparkVersion: "3.1.1"
restartPolicy:
type: Never
volumes:
- name: "test-volume"
hostPath:
path: "/tmp"
type: Directory
driver:
cores: 1
coreLimit: "1200m"
memory: "512m"
labels:
version: 3.1.1
serviceAccount: spark
volumeMounts:
- name: "test-volume"
mountPath: "/tmp"
executor:
cores: 1
instances: 2
memory: "512m"
labels:
version: 3.1.1
volumeMounts:
- name: "test-volume"
mountPath: "/tmp"
\n
    \n
  1. 部署一个Spark计算任务
  2. \n
\n
1
kubectl apply -f spark-pi.yaml
\n

运维

\n
1
2
3
kubectl get sparkapplications
kubectl describe sparkapplications
kubectl get svc # 查看该任务的spark ui
\n

12.2 安装 Spark On K8S

\n
1
2
3
4
5
helm repo add bitnami https://charts.bitnami.com/bitnami
# 注意是否存在 spark-operator 命名空间,没有则创建
kubectl create ns spark-on-k8s
helm install -n spark-on-k8s spark bitnami/spark \\
--set worker.coreLimit=28
\n
1
2
3
4
5
6
7
8
9
10
./bin/spark-submit    \\
--class org.apache.spark.examples.SparkPi \\
--conf spark.kubernetes.container.image=bitnami/spark:3 \\
--master k8s://https://125.220.153.23:6443 \\
--conf spark.kubernetes.driverEnv.SPARK_MASTER_URL=spark://10.97.43.141:7077 \\
--deploy-mode cluster \\
--executor-memory 20G \\
--num-executors 10 \\
--conf spark.executor.instances=5 \\
https:///data/spark-examples_2.12-3.3.0.jar 1000
\n
1
2
3
4
5
6
kubectl run --namespace spark-on-k8s spark-oge --rm --tty -i --restart='Never' \\
--image bitnami/spark:3 \\
-- spark-submit --master spark://10.97.43.141:7077 \\
--class org.apache.spark.examples.SparkPi \\
--deploy-mode cluster \\
/data/spark-examples_2.12-3.3.0.jar 100000
\n

13 在K8S上部署redis集群

\n
    \n
  • 待更
  • \n
\n

14 在K8S上部署nginx

\n

14.1 创建pv

\n
1
vim nginx-pv.yaml
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: v1
kind: PersistentVolume
metadata:
name: nginx-ydy-pv
namespace: ydy
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: manual
hostPath:
path: /mnt/storage/k8s/pv/ydy-nginx-pvc
\n

14.2 创建pvc

\n
1
vim nginx-pvc.yaml
\n
1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nginx-ydy-pvc
namespace: ydy
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: manual
\n

14.3 安装nginx并设置静态资源挂载的pvc

\n

将nginx中的/app挂载到/mnt/storage/k8s/pv/luluancheng-nginx-pvc

\n
1
2
helm install -n ydy nginx bitnami/nginx \\
--set staticSitePVC=nginx-ydy-pvc
\n

附录:疑难问题解决:

\n

1 K8S强制删除 namespace(会删除该命名空间中的所有 pod )

\n
1
2
3
#1、将该分区导出为json文件,以 oge namespace为例
kubectl get ns oge -o json > oge.json
#2、编辑该json文件,将spec内的内容全部删除,然后保存退出
\n

\"22f0a5cbf0424425b0d62681f79cb713\"

\n

\"ef949b8bb503410c918894ab20bad993\"

\n
1
2
# 3、另开一个终端,启动一个proxy
kubectl proxy --port=8081
\n
1
2
# 4、执行一个curl命令,更新oge namespace
curl -k -H "Content-Type: application/json" -X PUT --data-binary @oge.json http://127.0.0.1:8081/api/v1/namespaces/oge/finalize
\n

2 CNI网络错误

\n
    \n
  • 当迁移集群之后,拉取镜像报cni网络错误,如下:
  • \n
\n

\"8d5d49703c8ac59f24fde81b3982b616\"

\n
    \n
  • 从上面的截图中看到问题出现在给Pod分配IP上,意思是 cni0 的IP不同于``10.244.9.1/24,下面我们使用 ifconfig`命令查看IP信息
  • \n
\n

\"79e65e4f797200ad98feac6f8b2d4254\"

\n
    \n
  • 从上面的图中我们可以看到``flannel.1的 **IP** 为10.244.9.0,然后我们又使用cat /run/flannel/subnet.env`,该文件内容如下:
  • \n
\n

\"310efbdb614636a17aa48eaf4a8dc2c5\"

\n
    \n
  • \n

    其实现在的问题就比较明确了,我们使用的Overlay network为Flannel,也就是说Pod的IP地址段应该在Flannel的subnet下,而现在我们看到cni0的IP地址段与flannel subnet地址段不同,所以就出现了问题。

    \n
  • \n
  • \n

    解决方案

    \n
      \n
    • 方法1是将 cni0 的 IP 段修改为``10.244.9.1`
    • \n
    • 方法2是将这个错误的网卡删除掉,之后会自动重建
    • \n
    \n
  • \n
\n
1
2
3
# 下面我们删除错误的cni0,然后让它自己重建
ifconfig cni0 down
ip link delete cni0
\n

3 28 服务器增加路由(为了让两台刀片上网)

\n
    \n
  • 28上执行
  • \n
\n
1
2
iptables -t nat -A POSTROUTING -s 192.168.0.209/24 -o em1_2 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.177/24 -o em1_2 -j MASQUERADE
\n

4 异常断电等导致 etcd 心跳检测出现问题

\n\n

5 OpenStack服务器网络跳转镜像

\n
\n

作用: 保证OpenStack上服务器与实验室服务器可以 ping 通

\n
\n
    \n
  • IP\n
      \n
    • 115.156.91.250
    • \n
    \n
  • \n
  • 网关\n
      \n
    • 115.156.91.254
    • \n
    \n
  • \n
  • 子网掩码\n
      \n
    • 255.255.255.0
    • \n
    \n
  • \n
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":32655,"excerpt":"","more":"

1 前述

\n

1.1 云原生定义

\n
    \n
  • Pivotal《传统应用和SOA向云原生转型指南》(2015)的云原生的特征:\n
      \n
    • 符合 12 要素应用\n
        \n
      • 基准代码:一份基准代码,多份部署(类似于Git版本控制系统的main分支);
      • \n
      • 显示声明所有依赖关系:通过依赖清单,确切地声明所有依赖项;
      • \n
      • 把后端服务当作附加资源:各种后端服务(如数据库、消息队列、邮件服务、缓存系统),不区别对待本地或第三方服务;
      • \n
      • 构建、发布、运行:严格区分构建、发布、运行这三个步骤;
      • \n
      • 无状态进程:应用的进程必须无状态;
      • \n
      • 端口绑定:互联网应用通过端口绑定来提供服务,并监听发送至该端口的请求。应用完全自我加载,不依赖于任何网络服务器;
      • \n
      • 并发:通过进程模型进行扩展。进程是一等公民;
      • \n
      • 易处理:进程可以瞬间开启或停止,有利于快速、弹性的伸缩应用。进程应追求最小启动时间;进程一旦接受终止信号就会优化的终止;进程在面对突然死亡时保持健壮;
      • \n
      • 开发环境与线上环境等价:尽可能的保持开发,预发布,线上环境相同,以尽量做到持续部署;
      • \n
      • 日志:应用本身从不存储自己的输出流,不应该试图去写或者管理日志文件,相反,每一个运行的进程都会直接的标准输出(stdout)事件流;
      • \n
      • 管理进程:后台管理任务当作一次性进程运行;
      • \n
      \n
    • \n
    • 面向微服务架构\n
        \n
      • 微服务将单体系统分解为多个“仅做好一件事”的可独立部署的服务。这件事通常代表某项业务能力,或者最小可提供业务价值的“原子“服务单元。具备以下优点:\n
          \n
        • 变更周期解耦:只要变更限于单一有界的环境,并且服务继续履行其现有合约;实现了更频繁和快速的部署,从而实现了持续的价值流动;
        • \n
        • 减少业务领域和现有代码的学习负担
        • \n
        • 可以加快采用新技术的步伐
        • \n
        • 提供独立、高效的服务扩展
        • \n
        \n
      • \n
      \n
    • \n
    • 自服务敏捷架构(可以认为是DevOps):\n
        \n
      • 一个能够持续部署和运行这些微服务的平台;如代码以Git形式“推送”。 然后,自服务敏捷平台构建应用程序工件,构建应用程序环境,部署应用程序,并启动必要的进程。 团队不必考虑他们的代码在哪里运行或如何到达那里,这些对用户都是透明得,因为平台会关注这些。
      • \n
      \n
    • \n
    • 基于 API 的协作
    • \n
    • 抗脆弱性
    • \n
    \n
  • \n
  • 云原生计算基金会(2015)定义的特征\n
      \n
    • 应用容器化
    • \n
    • 面向微服务架构
    • \n
    • 应用支持容器的编排制度
    • \n
    \n
  • \n
  • 云原生计算基金会(2018)定义\n
      \n
    • 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API
    • \n
    • 这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更
    • \n
    \n
  • \n
\n

1.2 容器、虚拟机、Docker、Openstack 和 K8S

\n
    \n
  • 容器&虚拟机:均为虚拟化技术,容器更为轻量化、效率更高、启动更快;虚拟机需数分钟启动,容器仅需数十毫秒;
  • \n
  • Docker: 容器化虚拟技术事实上的标准;
  • \n
  • OpenStack:分布式的虚拟机服务平台,相比于普通的虚拟机软件(如Vmare),多了分布式虚拟机调度管理的功能和节点的负载均衡;
  • \n
  • K8S:分布式的容器调度管理平台,相比于Docker,多了分布式的容器调度管理和节点的负载均衡;
  • \n
  • 注意:常见的中文资料均言K8S是容器编排软件,这里的编排是指调度、管理的意思,而非工作流编排的意思,容易有误导性;
  • \n
  • 注意:无论是Openstack还是K8S,均不支持跨节点的容器或虚拟机的创建;所以将多台电脑合并成一台电脑的想法是不现实的;
  • \n
\n

1.3 K8S 和 云原生

\n

在单机上运行容器,无法发挥它的最大效能,只有形成集群,才能最大程度发挥容器的良好隔离、资源分配与编排管理的优势,而对于容器的编排管理,Swarm、Mesos 和 Kubernetes 的大战已经基本宣告结束,Kubernetes 成为了无可争议的赢家。

\n
    \n
  • Kubernetes 成为云原生应用的基石
  • \n
  • 有机会成为跨云的真正的云原生应用的操作系统
  • \n
\n

1.4 K8S 介绍

\n
    \n
  • 官方Kubernetes 也称为 K8S,是用于自动部署、扩缩和管理容器化应用程序的开源系统。
  • \n
  • 发展历史:由Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用。
  • \n
  • 能力Google 每周运行数十亿个容器,能够在不扩张运维团队的情况下进行规模扩展。
  • \n
  • 作用: 相当于一个操作系统,可以快速提供PaaS服务:1)创建各种容器化测试化环境;2)发布各种容器化服务;3)快速安装各种容器化服务,如MongoDB、HbasePostgresqlRedisSpark等;快速提供IaaS服务:通过安装OpenstackKubeVirt等软件;快速提供FaaS服务:通过安装Kube Native等软件;
  • \n
\n

\"image-20230414170948460\"

\n

\"image-20230414171119324\"

\n

1.5 基本概念

\n
    \n
  • \n

    Container:轻量级的系统虚拟化技术,使用namespace隔离环境。

    \n
  • \n
  • \n

    Pod

    \n
  • \n
  • \n
      \n
    • K8S 的调度的基本单位,Pod是一组紧密关联的容器集合,内部的容器共享PID、IPC、Network和UTS namespace。可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。
    • \n
    \n

    \"image-20230415141540422\"

    \n
  • \n
\n

​\t\t\t\tPod的设计理念基础是微服务,不同类型的业务组合由不同类型的Pod执行,一个Pod对应一个微服务

\n
    \n
  • \n
      \n
    • K8S中,采用manifest(yaml或json)定义对象,比如nginx服务(包含了一个nginx 容器image)定义为:
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
\n
    \n
  • \n
      \n
    • Node: 是Pod运行的主机,可以为物理机,也可以为虚拟机。每个Node上要运行container runtime (docker或者rkt)、kubelet和kube-proxy服务
    • \n
    • \"image-20230415142123300\"
    • \n
    \n
  • \n
  • \n
      \n
    • Service: 一个Pod只是一个运行服务的实例,可能在一个节点上停止,在另一个节点以一个新的IP启动一个新的Pod。在K8S集群中,客户端需要访问的服务就是Service对象。每个Service会对应一个集群内部有效的虚拟IP,集群内部通过虚拟IP访问一个服务。
    • \n
    \n
  • \n
  • \n
      \n
    • Kubelet: 每个Node的任务和资源管理
    • \n
    \n
  • \n
  • \n
      \n
    • Kube-proxy: 负责每个节点的硬件负载均衡
    • \n
    \n
  • \n
\n

1.6 K8S 常见命令

\n
    \n
  • 运行一个Nginix容器:\n
      \n
    • kubectl run --image=nginx:alpine nginx-app --port=80
    • \n
    \n
  • \n
  • Kubectl 命令:\n
      \n
    • kubectl get - 类似于 docker ps,查询资源列表
    • \n
    • kubectl describe - 类似于 docker inspect,获取资源的详细信息
    • \n
    • kubectl logs - 类似于 docker logs,获取容器的日志
    • \n
    • kubectl exec - 类似于 docker exec,在容器内执行一个命令
    • \n
    • kubectl create -f file.yaml – 根据yaml创建Deployment资源
    • \n
    • kubectl delete 删除命令,可删除node、pod、svc、depolyment
    • \n
    \n
  • \n
  • yaml 定义 Pod:
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
\n
    \n
  • Volume:\n
      \n
    • 一个Pod一旦发生异常,Pod 产生的数据会随着 Pod 消亡而自动消失。Volume 用于持久化容器数据。
    • \n
    • 如:为 redis 容器指定一个 hostPath 来存储 redis 数据
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
volumeMounts:
- name: redis-persistent-storage
mountPath: /data/redis
volumes:
- name: redis-persistent-storage
hostPath:
path: /data/
\n
    \n
  • Service:\n
      \n
    • kubectl创建Pod,Pob的IP地址会随着Pod的重启而变化
    • \n
    • 为了访问Pod提供的服务,采用Service提供为一组Pod一个统一的入口,并提供负载均衡和自动服务发现。\n
        \n
      • kubectl expose deployment nginx-app --port=80 --target-port=80 --type=NodePort
      • \n
      \n
    • \n
    \n
  • \n
  • Replicas set:\n
      \n
    • 在一个Service中,可为Pod设置数个副本,以确保服务永不掉线\n
        \n
      • kubectl scale --replicas=3 deployment/nginx-app
      • \n
      \n
    • \n
    \n
  • \n
\n

\"image-20230415143046325\"

\n
    \n
  • 滚动升级(Rolling Update):\n
      \n
    • 滚动升级(Rolling Update)通过逐个副本容器替代升级的方式来实现无中断的服务升级:\n
        \n
      • kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2
      • \n
      \n
    • \n
    • 滚动升级中若发生错误,可随时回滚:\n
        \n
      • kubectl rolling-update frontend-v1 frontend-v2 --rollback
      • \n
      \n
    • \n
    \n
  • \n
  • 资源限制:\n
      \n
    • K8S通过 cgroups 提供容器资源管理的功能,可限制每个容器的 CPU 和内存使用,比如对于刚才创建的 deployment,可以通过下面的命令限制 nginx 容器最多只用 50% 的 CPU 和 128MB 的内存:\n
        \n
      • kubectl set resources deployment nginx-app -c=nginx --limits=cpu=500m,memory=128Mi
      • \n
      \n
    • \n
    • 或者在yaml中指定资源限制
    • \n
    \n
  • \n
  • 健康检查:\n
      \n
    • K8S Kubernetes 提供了两种探针(Probe,支持 exec、tcpSocket 和 http 方式)来探测容器的状态:\n
        \n
      • LivenessProbe:探测应用是否处于健康状态,如果不健康则删除并重新创建容器
      • \n
      • ReadinessProbe:探测应用是否启动完成并且处于正常服务状态,如果不正常则不会接收来自 Kubernetes Service 的流量
      • \n
      \n
    • \n
    \n
  • \n
\n

1.7 K8S 常用运维命令

\n
    \n
  • 查看pod,及所在的节点:\n
      \n
    • kubectl get pods -o wide
    • \n
    \n
  • \n
  • 若有节点warn,回收垃圾失败:
  • \n
\n
1
2
kubectl drain --delete-local-data --ignore-daemonsets NODENAME
kubectl uncordon NODENAME
\n

2 K8S 集群基础环境部署

\n

若服务器之前搭建过 K8S 集群,需要彻底删除

\n

参考https://blog.csdn.net/qq_43159578/article/details/124131709

\n
    \n
  • 停止所有的Kubernetes服务
  • \n
\n
1
2
sudo systemctl stop kubelet
sudo systemctl stop containerd
\n
    \n
  • 删除Kubernetes软件包
  • \n
\n
1
yum remove kubeadm kubectl kubelet kubernetes-cni -y
\n
    \n
  • 删除配置文件
  • \n
\n
1
2
3
4
# 清除残留文件
rm -rf /root/.kube
rm -rf /etc/cni/net.d
rm -rf /etc/kubernetes/*
\n
    \n
  • 删除etcd数据目录
  • \n
\n
1
rm -rf /var/lib/etcd
\n
    \n
  • 清除iptables或者ipvs的配置
  • \n
\n
1
2
# sudo ipvsadm -C
# sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo # # iptables -Xkubec
\n
    \n
  • 如果只是想重新部署集群
  • \n
\n
1
kubeadm reset
\n

kubeadm reset 命令用于清除当前节点上所有与 kubeadm initkubeadm join 命令创建的 Kubernetes 集群相关的状态。其主要作用如下:

\n
    \n
  1. \n

    移除 Kubernetes 集群相关的系统服务,如 kubelet 和 kube-proxy。

    \n
  2. \n
  3. \n

    删除所有在当前节点上创建的 Kubernetes 对象,包括 Pod、Service、Deployment 等。

    \n
  4. \n
  5. \n

    移除 etcd 中与当前节点相关的信息,如节点标识、配置信息等。

    \n
  6. \n
  7. \n

    删除 Kubernetes 数据目录,包括证书、密钥、kubeconfig 文件等。

    \n
  8. \n
\n

使用 kubeadm reset 命令可以清除当前节点上的所有 Kubernetes 相关状态,以便重新创建新的 Kubernetes 集群或者将当前节点加入到另一个 Kubernetes 集群中。在进行 kubeadm reset 操作之前,应该先备份当前节点上的重要数据和配置信息,以便在需要时进行恢复。

\n

2.1 服务器

\n
    \n
  • 网络资源:各节点间通过千兆交换机互联(非光纤交换机)
  • \n
  • 管理节点:\n
      \n
    • Gisweb4,Gisweb3
    • \n
    \n
  • \n
  • 计算节点:\n
      \n
    • Gisweb3,GISweb2,dellm640-01, Gisweb4, dellslot03, dellslot4
    • \n
    \n
  • \n
  • 持久化存储资源:\n
      \n
    • 目前采用:\n
        \n
      • nfs-client: 23服务器的/mnt/storage/k8s/pv
      • \n
      \n
    • \n
    \n
  • \n
  • Node1(刀片3):\n
      \n
    • 子网 IP:192.168.0.177
    • \n
    • CPU:Intel® Xeon® Silver 4216 CPU @ 2.10GHz;32核心,64线程。
    • \n
    • 内存:64GB(32GB*2),每根DDR4,3000Mhz
    • \n
    \n
  • \n
  • Node2(刀片4):\n
      \n
    • 子网 IP:192.168.0.209
    • \n
    • CPU:Intel® Xeon® Silver 4216 CPU @ 2.10GHz;32核心64线程。
    • \n
    • 内存:64GB(32GB*2),每根DDR43200Mhz
    • \n
    \n
  • \n
\n

2.2 安装过程

\n

2.2.1 前提条件

\n

a. 节点之中不可以有重复的主机名、MAC 地址或 product_uuid

\n
1
cat /sys/class/dmi/id/product_uuid
\n

b. 检查网络适配器:若有多个网卡,确保每个node的子网通过默认路由可达

\n

c. 防火墙开放端口(所有节点)

\n

\"image-20230415145138479\"

\n
1
2
3
4
5
6
7
systemctl restart firewalld
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=6443/tcp --permanent
firewall-cmd --zone=public --add-port=2379-2380/tcp --permanent
firewall-cmd --zone=public --add-port=10250/tcp --permanent
firewall-cmd --zone=public --add-port=10259/tcp --permanent
firewall-cmd --zone=public --add-port=10257/tcp --permanent
\n

d. 关闭防火墙(所有节点)

\n
1
2
systemctl stop firewalld NetworkManager
systemctl disable firewalld NetworkManager
\n

e. 关闭交换分区并禁用 SELinux(所有节点)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看 交换分区
free -m

# 将 `SELinux` 设置为 `permissive` 模式(相当于将其禁用) 第一行是临时禁用,第二行是永久禁用
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# 关闭swap;第一行是临时禁用,第二行是永久禁用
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 允许 iptables 检查桥接流量 (K8s 官方要求)
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 让配置生效
sysctl --system
\n

f. 时间同步(所有节点)

\n
1
2
3
4
yum install chrony -y
systemctl start chronyd
systemctl enable chronyd
chronyc sources
\n

g. 设置主机名并添加 ip 映射(所有节点)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 以 gisweb4 为例
# 查看主机名cat
hostname
# 设置主机名
hostnamectl set-hostname gisweb4
# 更新
bash

# 添加 ip 映射
echo "125.250.153.23 gisweb4" >> /etc/hosts
echo "125.250.153.23 gisweb4" >> /etc/hosts
# 两台无外网ip的刀片添加内网ip

# /etc/hosts 文件内容如下:
192.168.0.203 gisweb1
192.168.0.202 gisweb2
192.168.0.204 gisweb4
192.168.0.208 gisweb3
192.168.0.176 dellm640-01
192.168.0.177 dellm640-03
192.168.0.209 dellslot04

125.220.153.26 gisweb1
125.220.153.25 gisweb2
125.220.153.22 gisweb3
125.220.153.23 gisweb4
125.220.153.28 dellm640-01
\n

2.2.2 升级 Linux 内核到最新(所有节点)

\n

清除缓存,重新构建缓存:

\n
1
2
# 清除缓存
yum makecache & yum -y update
\n

参考链接https://zhuanlan.zhihu.com/p/368879345

\n

2.2.3 转发 IPv4 并让 iptables 看到桥接流量(所有节点)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# a.    验证br_netfilter是否已经加载
lsmod | grep br_netfilter
# b. 加载br_netfilter模块:
modprobe br_netfilter
# c. iptabels桥接
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

# 应用 sysctl 参数而不重新启动
sysctl --system
\n

2.2.4 安装 ipvsadm(所有节点)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
yum install ipvsadm ipset sysstat conntrack libseccomp -y

cat <<EOF | sudo tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF

systemctl restart systemd-modules-load.service

lsmod | grep -e ip_vs -e nf_conntrack
\n

2.2.5 修改内核参数(所有节点,lb除外)

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.netfilter.nf_conntrack_max=2310720

net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384

net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.all.forwarding = 1
EOF

sysctl --systemS
\n

2.2.6 安装Container Runtime(选用containerd,弃用docker)

\n
    \n
  • Docker-engine+cir-dockerd方案(舍弃:从kubernetes 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,需要在kubelet和docker之间加上一个中间层cri-docker。cri-docker是一个支持CRI标准的shim。一头通过CRI跟kubelet交互,另一头跟docker api交互,从而间接的实现了kubernetes以docker作为容器运行时。但是这种架构缺点也很明显,调用链更长,效率更低。因此选用containerd作为容器runtime
  • \n
  • containerd方案: containerd是一个docker的容器runtime,成为CNCF的官方项目
  • \n
\n

官方安装教程:https://github.com/containerd/containerd/blob/main/docs/getting-started.md

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 安装containerd.io
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install containerd.io


# 安装CNI插件
# i.下载cni-plugins.tar 从https://github.com/containernetworking/plugins/releases
# 在线下载:
# wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
# ii.在/opt/cni/bin下解压:

# 把22上的拷贝到没有公网ip的服务器上
# scp -P22 /opt/cni/bin/cni-plugins-linux-amd64-v1.1.1.tgz root@192.168.0.203:/opt/cni/bin/

mkdir -p /opt/cni/bin
cd /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz


# 重启服务:
systemctl restart containerd
# 开机启动:
systemctl enable containerd


# 配置systemd cgroup驱动
# 修改配置文件,将 SystemdCgroup 改为 true 注意配置项是区分大小写的
containerd config default | sudo tee /etc/containerd/config.toml
vim /etc/containerd/config.toml

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
# 并将 sandbox_image 地址修改为国内的地址
并且将 sandbox_image = "registry.k8s.io/pause:3.6"
修改为 sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6"

# 启动 containerd
systemctl restart containerd

# 开机自启
systemctl enable containerd

# 启动成功后可以查看到监听的端口
netstat -nlput | grep containerd
tcp 0 0 127.0.0.1:36669 0.0.0.0:* LISTEN 8665/containerd off (0.00/0/0)
\n

2.2.7 在所有电脑上安装 kubeadm, kubelet and kubectl(所有节点)

\n
1
2
3
# a.    kubeadm: the command to bootstrap the cluster.
# b. kubelet: the component that runs on all of the machines in your cluster and does things like starting pods and containers.
# c. kubectl: the command line util to talk to your cluster.
\n
    \n
  1. 配置阿里云的k8s源,加速安装
  2. \n
\n
1
2
3
4
5
6
7
8
9
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
\n
    \n
  1. 将 SELinux 设置为 permissive 模式(相当于将其禁用)
  2. \n
\n
1
2
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
\n
    \n
  1. 安装
  2. \n
\n
1
2
3
4
yum install -y --nogpgcheck kubelet-1.25.2 kubeadm-1.25.2 kubectl-1.25.2  
# sudo yum install -y --nogpgcheck kubelet-1.26.3 kubeadm-1.26.3 kubectl-1.26.3
# 自启动
systemctl enable --now kubelet
\n

2.2.8 启动控制面节点

\n
1
2
3
kubeadm init --kubernetes-version=v1.25.2 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 

#kubeadm init --kubernetes-version=v1.26.3 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
\n

若出现如下错误(上一次集群初始化的残留文件)

\n
1
2
# 如果出现报错  
[ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
\n

执行如下命令后再次初始化

\n
1
2
rm -rf /var/lib/etcd
rm -rf /etc/kubernetes/manifests/*
\n

2.2.9 配置环境变量(初始化后)

\n
1
2
3
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
\n

2.2.10 将 master 作为node(管理节点上执行)

\n
    \n
  • 检查 node 是否存在污点\n
      \n
    • 污点值有三种:\n
        \n
      • NoSchedule:一定不被调度
      • \n
      • PreferNoSchedule:尽量不被调度【也有被调度的几率】
      • \n
      • NoExecute:不会调度,并且还会驱逐Node已有Pod
      • \n
      \n
    • \n
    \n
  • \n
\n
1
kubectl describe nodes gisweb4 |grep Taints
\n
    \n
  • 删除污点:
  • \n
\n
1
2
# 本次删除的污点为:node-role.kubernetes.io/control-plane-
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
\n

2.2.11 安装 Pod 网络插件(CNI:Container Network Interface)(master)

\n

你必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信。

\n

确保kubeadm初始化时,pod_cidr 为10.244.0.0

\n
    \n
  • 下载 yml 配置文件\n
      \n
    • 或自己下载到本地
    • \n
    \n
  • \n
\n
1
curl https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml -O
\n
    \n
  • 编辑kube-flannel.yml\n
      \n
    • 找到如下位置,添加 iface-regex
    • \n
    \n
  • \n
\n
1
2
3
vim kube-flannel.yml
# 添加
- --iface-regex=^192.168..
\n

\"\"

\n
    \n
  • 构建
  • \n
\n
1
kubectl apply -f kube-flannel.yml
\n

2.2.12 node 节点加入集群

\n
    \n
  • 管理节点获取加入命令:
  • \n
\n
1
2
3
kubeadm token create --print-join-command
# 返回如下
kubeadm join 125.220.153.23:6443 --token x0wdaj.d5wltdzdtos22fl6 --discovery-token-ca-cert-hash sha256:9245d363cdeb1757bacba21b9ccdc06a28e7490bcedfb0eeb404b56f769fa112
\n
    \n
  • 在 node 节点执行生成命令
  • \n
\n

如果此步报如下错误

\n

The connection to the server localhost:8080 was refused - did you specify the right host

\n
    \n
  1. 出现这个问题的原因是kubectl命令需要使用kubernetes-admin的身份来运行,在kubeadm int启动集群的步骤中就生成了/etc/kubernetes/admin.conf
  2. \n
  3. 因此,解决方法如下,将主节点中的/etc/kubernetes/admin.conf文件拷贝到工作节点相同目录下:
  4. \n
  5. 然后分别在工作节点上配置环境变量:
  6. \n
\n

解决方案

\n
    \n
  • 主节点执行
  • \n
\n
1
2
# 将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到工作节点相同目录下:
scp -P22 /etc/kubernetes/admin.conf oge@125.220.153.22:/etc/kubernetes/
\n
    \n
  • node 节点执行如下命令后,再次执行加入集群的命令
  • \n
\n
1
2
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
\n
    \n
  • 如果是重新加入集群,需要 reset 一下
  • \n
\n
1
kubeadm reset
\n

2.2.13 添加新的 master 节点

\n
    \n
  • 管理节点:
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 管理节点查看
kubeadm token create --print-join-command
# 生成如下
kubeadm join 125.220.153.23:6443 --token mc56rw.t9b3d1ql53yhom9y --discovery-token-ca-cert-hash sha256:753ccf865a9c590413043d469a9848300871afaef7221e3fdb97d981939a2b83

# 管理节点
kubeadm init phase upload-certs --upload-certs
# 输出
I0413 11:00:30.817038 10009 version.go:256] remote version is much newer: v1.27.0; falling back to: stable-1.25
[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
[upload-certs] Using certificate key:
70d43cde7f6423b5c3e88c0fa9d08511cefbc53992dc63a13544cd548a912941

# 管理节点,在networking前添加:controlPlaneEndpoint: 125.220.153.23:6443
kubectl -n kube-system edit cm kubeadm-config
\n
    \n
  • 新的master节点
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 新节点
# 重新加入的话,检查是否需要kill掉6443端口(这是之前的api-service服务)
kubeadm join 125.220.153.23:6443 --token mc56rw.t9b3d1ql53yhom9y --discovery-token-ca-cert-hash sha256:753ccf865a9c590413043d469a9848300871afaef7221e3fdb97d981939a2b83 --control-plane --certificate-key 70d43cde7f6423b5c3e88c0fa9d08511cefbc53992dc63a13544cd548a912941

# 生成
This node has joined the cluster and a new control plane instance was created:

* Certificate signing request was sent to apiserver and approval was received.
* The Kubelet was informed of the new secure connection details.
* Control plane label and taint were applied to the new node.
* The Kubernetes control plane instances scaled up.
* A new etcd member was added to the local/stacked etcd cluster.

To start administering your cluster from this node, you need to run the following as a regular user:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Run 'kubectl get nodes' to see this node join the cluster.
\n

3 K8S 管理平台 dashboard 环境部署(管理节点)

\n
    \n
  • 下载 yaml 配置文件并应用\n
      \n
    • 或下载到本地然后上传
    • \n
    \n
  • \n
\n
1
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml
\n
    \n
  • 修改配置文件(以node)\n
      \n
    • 但是这个只能内部访问,所以要外部访问,要么部署 ingress,要么就是设置 service NodePort 类型。这里选择 service 暴露端口。
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

# 将其中的,type: ClusterIP 修改成type: NodePort,保存退出即可。

# 查看服务的暴露端口,需在安全组放行
kubectl get svc -A |grep kubernetes-dashboard

\n

\"image-20230415154841715\"

\n
    \n
  • 权限认证
  • \n
\n
1
2
3
4
5
6
# 创建访问用户
kubectl apply -f https://kuboard.cn/install-script/k8s-dashboard/auth.yaml
# 获取访问令牌
kubectl -n kubernetes-dashboard create token admin-user
# 生成的令牌
eyJhbGciOiJSUzI1NiIsImtpZCI6IkdVQTZzb3JEM1FHdkpxVDNsSEwtVEZWc2hyR08tbmFFWnFGX2Q2OGt5cEkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjgzNzM1MTQ1LCJpYXQiOjE2ODM3MzE1NDUsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiMzBlMWQzNDEtNDc0Yi00M2MyLWIyNzYtZGIxZTU4NzM5ZTgxIn19LCJuYmYiOjE2ODM3MzE1NDUsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.mg1IU29tBpH23nglJVbRmVa2A26WZjXxMCzckQyb-dnviLBRzBuvNebb8H4YH5CNJUPkB2GGC_r7dlm5zEbPpK8RqkbwXy-wqkOoMephs83gIQkJ3RgskpWqTgqqg87e6WXHRtuzYsQQZ4Rq3Y4uQy9jJS9o1lIoRTujpmpWORb9vu4JN0RqEfK2chQqNsYCe_TCtvtvkP2EyuU3QSeYdvWh5NNZ9CYwA8l8eqA6ijrmTqZjnI6Q9Ymo7trKSuGFmffotBpN9dTYZoyv6Io_VgEz6_1oHsA0pwG-3wc41Ly11sDAzwjZvoGN1yfw0vsVcwnAjH4LkRG2ImwYIcZbig
\n\n

4 安装K8S的包管理工具Helm (管理节点)

\n

参考https://helm.sh/docs/intro/install/

\n
    \n
  • 这里以下载压缩包安装为例:
  • \n
\n

参考https://www.cnblogs.com/zhanglianghhh/p/14165995.html
\ngithub地址https://github.com/helm/helm

\n

\"image-20230413112634363\"

\n
1
2
3
4
5
6
cd  ~/k8s/helm
wget https://get.helm.sh/helm-v3.11.3-linux-amd64.tar.gz
tar zxfv helm-v3.11.3-linux-amd64.tar.gz
mv ./linux-amd64/helm /usr/bin/
# 显示版本,安装完成
helm version
\n

5 安装K8S的包管理工具 krew(管理节点)

\n

参考https://krew.sigs.k8s.io/docs/user-guide/setup/install/

\n
    \n
  • 确保 git 已经安装
  • \n
\n
1
2
3
git version
# 若未安装
yum -y install git
\n
    \n
  • 安装krew
  • \n
\n
1
2
3
4
5
6
7
8
9
(
set -x; cd "$(mktemp -d)" &&
OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\\(arm\\)\\(64\\)\\?.*/\\1\\2/' -e 's/aarch64$/arm64/')" &&
KREW="krew-${OS}_${ARCH}" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
tar zxvf "${KREW}.tar.gz" &&
./"${KREW}" install krew
)
\n
    \n
  • 添加 $HOME/.krew/bin目录到您的 PATH 环境变量。 更新你的 .bashrc或者 .zshrc文件
  • \n
\n
1
2
3
# 永久写的用户的环境变量文件,避免登出后失效
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
source ~/.bashrc
\n
    \n
  • 若安装失败,采用压缩包安装
  • \n
\n
1
2
3
4
5
6
7
8
9
10
wget https://github.com/kubernetes-sigs/krew/releases/latest/download/krew-linux_amd64.tar.gz

tar -zxvf krew-linux_amd64.tar.gz
# 添加$HOME/.krew/bin目录到PATH环境变量
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
# 配置为 kubectl 插件
mv ./krew-linux_amd64 ./kubectl-krew
mv ./kubectl-krew /usr/local/bin/
# 测试
kubectl krew version
\n
    \n
  • 检查是否安装成功
  • \n
\n
1
2
kubectl krew
kubectl plugin list
\n

6 为 K8S 创建 PV 持久卷

\n

6.1 PV和PVC

\n
    \n
  • \n

    持久卷(PersistentVolume,PV)是集群中由管理员配置的一段网络存储。它是集群中的资源,就像节点是集群资源一样。PV持久卷和普通的Volume一样,也是使用卷插件来实现的,只是它们拥有独立于任何使用PV的Pod的生命周期。此API对象捕获存储实现的详细信息,包括NFS,iSCSI或特定于云提供程序的存储系统。

    \n
  • \n
  • \n

    持久卷申领(PersistentVolumeClaim,PVC)表达的是用户对存储的请求。概念上与Pod类似。Pod会耗用节点资源,而PVC申领会耗用PV资源。

    \n
  • \n
\n

6.2 用 storageClass 动态创建 PV

\n
    \n
  • 对1PB的大量目录创建NFS服务,gisweb1-4,以gisweb4为例子
  • \n
\n
1
2
安装NFS: 
yum -y install nfs-utils rpcbind
\n
    \n
  • 设置持久卷权限
  • \n
\n
1
2
3
# 执行权限
chown -R nobody:nfsnobody /mnt/storage/k8s/pv
#chmod -R 777 /mnt/storage/k8s/pv
\n
    \n
  • 配置 nfs
  • \n
\n
1
2
3
4
vim /etc/exports
# 添加:
/mnt/storage/k8s/pv 192.168.0.0/24(rw,sync,no_root_squash)
# 以上设置让所有的 IP 都有效
\n
1
2
3
4
5
6
7
8
9
10
11
systemctl start rpcbind
systemctl enable rpcbind
systemctl enable nfs
systemctl start nfs
systemctl start nfs-server
systemctl enable nfs-server

systemctl start firewalld
firewall-cmd --permanent --add-service=nfs
firewall-cmd --reload
systemctl stop firewalld && sudo systemctl disable firewalld
\n
    \n
  • 检查
  • \n
\n
1
2
exportfs -rv
showmount -e 127.0.0.1
\n
    \n
  • 所有节点安装nfs客户端
  • \n
\n
1
2
3
4
5
yum install -y nfs-utils
# 每个节点挂载nfs客户端的存储目录,本次nfs客户端在gisweb4(192.168.0.204)上
mount -t nfs 192.168.0.204:/mnt/storage/k8s/pv /mnt/storage/k8s/pv
# 检查挂载情况
df -h
\n
    \n
  • 安装nfs-client-provisioner (需要翻墙)
  • \n
\n

参考:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
# 更新helm repo
helm repo update
# 搜索helm库中nfs版本
helm search repo nfs-subdir-external-provisioner

# 添加 helm 仓库
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \\
--set nfs.server=192.168.0.204 \\
--set nfs.path=/mnt/storage/k8s/pv \\
--set image.repository=registry.cn-hangzhou.aliyuncs.com/xzjs/nfs-subdir-external-provisioner \\
--set image.tag=v4.0.0
\n
    \n
  • 手动安装 nfs-client-provisioner
  • \n
\n

参考:http://www.mydlq.club/article/109/#创建-nfs-subdir-external-provisioner-部署文件

\n
    \n
  • 成功后,安装时添加持久化参数,其中 nfs-storage 为安装的 storageclass 的 provisioner 字段名字
  • \n
\n

7 安装 kubeAPPS 可视化软件管理工具

\n

参考:https://kubeapps.dev/docs/latest/tutorials/getting-started/

\n
    \n
  • 安装
  • \n
\n
1
2
3
4
5
6
# 添加 kubeapps 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
# 创建 kubeapps 的命名空间
kubectl create namespace kubeapps
# 安装
helm install kubeapps --namespace kubeapps bitnami/kubeapps
\n
    \n
  • 创建证书
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建用于访问 Kubeapps 和 Kubernetes 的演示凭证
kubectl create --namespace default serviceaccount kubeapps-operator
kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator


cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: kubeapps-operator-token
namespace: default
annotations:
kubernetes.io/service-account.name: kubeapps-operator
type: kubernetes.io/service-account-token
EOF
\n
    \n
  • 查看令牌 token
  • \n
\n
1
kubectl get --namespace default secret kubeapps-operator-token -o go-template='{{.data.token | base64decode}}'
\n
1
eyJhbGciOiJSUzI1NiIsImtpZCI6IkdVQTZzb3JEM1FHdkpxVDNsSEwtVEZWc2hyR08tbmFFWnFGX2Q2OGt5cEkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yLXRva2VuIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNTNjY2M0N2YtZWFmMS00NDY4LWJkN2ItYTVhMzliMzJjMzExIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6a3ViZWFwcHMtb3BlcmF0b3IifQ.qsTBQODZLD1EUP5WjF_ju0-_ZFoJa2pEGCGf2zoLK71TjZeytD0GUGp4Z5ACNFuJMtedtx8tRgWhioU2oimxGdCIL4f7Szt0dOQgXD15HmoiUjYEcDQNsfTdcmfZw-m3-zwtTqa3kTTG3Wio0wf_f_ayw8qZCDL2i3PK-7h0QeAb1rQhtCz_e8huNrcshjixGlyw8aKUvdi2hPe6yvpxKJqQeOalNhT22b-ax28oIyqmC-NXYUMyRbEsgOjyuJAv6XdjqsQKbOGMKsTtNyf7CvnHl88hfRZpF0W-GuKj1ggKGYClTHuXnsv9QP-AQN1UaEtcAbUp08bHN9isedJL6w
\n
    \n
  • 修改服务模式,将其改为 NodePort
  • \n
\n
1
2
# 因为是测试环境,因此直接采用 NodePort 方式暴露服务端口
kubectl edit svc kubeapps -n kubeapps
\n
    \n
  • 找到端口,在安全组放行
  • \n
\n
1
kubectl get svc -A |grep kubeapps
\n\n

8 在 K8S 上部署虚拟机服务 Kubevirt

\n
    \n
  • 设置 K8S ApiServer 允许特权容器
  • \n
\n
1
2
3
vim /etc/kubernetes/manifests/kube-apiserver.yaml
# 设置
--allow-privileged=true
\n
    \n
  • 检查每个节点是否支持虚拟化
  • \n
\n
1
2
3
virt-host-validate qemu
# 如果显示没有这个命令,先安装 libvrt 和 qemu 软件包:
yum install -y qemu-kvm libvirt virt-install bridge-utils
\n
    \n
  • 若有warnning,需要解决
  • \n
\n

\"image-20230408181653957\"

\n
1
2
3
4
5
6
7
8
# 1
vim /etc/default/grub
# 2.添加
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on"
# 3
grub2-mkconfig -o /boot/grub2/grub.cfg
# 4
reboot
\n
    \n
  • 安装 Kubevirt
  • \n
\n
1
2
3
4
# K8S 1.25版本,Kubervirt必须0.57.2以上,才能适配
kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0-rc.0/kubevirt-operator.yaml

kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0-rc.0/kubevirt-cr.yaml
\n
    \n
  • 等待 Kubevirt 资源创建完毕
  • \n
\n
1
kubectl -n kubevirt wait kv kubevirt --for condition=Available
\n
    \n
  • 安装 CDI
  • \n
\n

参考https://kubevirt.io/labs/kubernetes/lab2.html

\n
    \n
  • 安装 VNC
  • \n
\n
1
yum install -y tigervnc
\n
    \n
  • 查看 Kubevirt 资源
  • \n
\n
1
kubectl get pods -n kubevirt
\n

\"image-20230408185646502\"

\n
    \n
  • 安装 Kubevirtcli 管理工具
  • \n
\n
1
2
kubectl krew install virt
kubectl virt help
\n
    \n
  • Kubevirt创建/删除虚拟机服务
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
# 1.    创建yaml文件
Xxx
# 2. 运行一个虚拟机
kubectl apply -f test.yaml
# 3. 查看虚拟机
kubectl get vmis
# 4. 停止/删除虚拟机
kubectl delete -f vmi.yaml
# 或者
kubectl delete vmis testvmi
# 5. 开始/停止/暂停虚拟机
virtctl start/stop/pause my-vm
\n

9 在 K8S 上部署 PostgreSQL

\n
    \n
  • \n

    安装

    \n
      \n
    • \n

      注意:数据库安装需要持久卷,需提前创建满足要求的pv,或者创建nasstroageclass,以自动根据mysqlpvc创建pv

      \n
    • \n
    • \n

      集群已经配置23服务器的/mnt/storage/k8s/pv为NAS,并已经配置名字为nas-storagesc

      \n
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
helm repo add bitnami https://charts.bitnami.com/bitnami
# 首先检查是否有oge这个命名空间,否则执行如下进行创建
kubectl create ns oge
# postgresql 这个名字可以自己定义,但后面每一步都要注意对应更改
helm install -n oge bitnami/postgresql \\
--set global.storageClass=nfs-client \\
--set readReplicas.persistence.storageClass=nfs-client \\
--set primary.persistence.storageClass=nfs-client \\
--set primary.persistence.size=200Gi \\
--set readReplicas.persistence.size=200Gi \\
--set image.tag=14.5.0-debian-11-r6


helm install -n geoctap bitnami/postgresql \\
--set global.storageClass=nfs-client \\
--set readReplicas.persistence.storageClass=nfs-client \\
--set primary.persistence.storageClass=nfs-client \\
--set primary.persistence.size=200Gi \\
--set readReplicas.persistence.size=200Gi \\
--set image.tag=14.5.0-debian-11-r6
# 指定版本,可在kubeapps里面查看
# --set image.tag=14.5.0-debian-11-r6
\n
    \n
  • 查看 postgresql 密码
  • \n
\n
1
2
3
4
kubectl get secret --namespace oge postgresql -o jsonpath="{.data.postgres-password}" | base64 -d

# 密码
7jXf2gsmUX
\n
    \n
  • 更改服务端口
  • \n
\n
1
2
3
4
kubectl edit svc --namespace oge postgresql
# 将 type=ClusterIP 改为 NodePort
# b8:85:84:71:64:28
echo "SUBSYSTEM==\\"net\\", ACTION==\\"add\\", DRIVERS==\\"?*\\", ATTR{address}==\\" b8:85:84:71:64:28\\", ATTR{type}==\\"1\\", KERNEL==\\"eno*\\", NAME=\\"eno1\\"" >> /etc/udev/rules.d/70-persistent-net.rules
\n
    \n
  • 缩放副本集
  • \n
\n
1
2
3
4
5
6
kubectl get deployment 
# 发现并没有postgresql
kubectl get all -n oge
# 发现有statefulset.apps/postgresql
# 设置副本集个数为1
kubectl scale --replicas=1 statefulset.apps/postgresql -n oge
\n
    \n
  • 命令行进入pgsql
  • \n
\n
1
2
3
4
5
6
# 进入pgsql的pod
kubectl exec -it -n oge postgresql-0 bash
# 用户登录
psql -U postgres
# 输入密码
7jXf2gsmUX
\n
    \n
  • 在pod外面执行sql
  • \n
\n
1
psql -h 125.220.153.23 -p 30865 -U postgres -W -f ./public.sql
\n

10 在 K8S 上部署 MySQL

\n
    \n
  • \n

    安装

    \n
      \n
    • \n

      注意:数据库安装需要持久卷,需提前创建满足要求的pv,或者创建nasstroageclass,以自动根据postgresql的pvc创建pv。

      \n
    • \n
    • \n

      集群已经配置23服务器的/mnt/storage/k8s/pvNAS,并已经配置名字为 nas-storagesc

      \n
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
helm repo add bitnami https://charts.bitnami.com/bitnami

# 安装
helm install -n oge mysql bitnami/mysql \\
--set global.storageClass=nfs-client \\
--set readReplicas.persistence.storageClass=nfs-client \\
--set primary.persistence.storageClass=nfs-client \\
--set primary.persistence.size=200Gi \\
--set readReplicas.persistence.size=200Gi
\n
    \n
  • 查看 MySQL 密码
  • \n
\n
1
2
3
4
kubectl get secret --namespace oge mysql -o jsonpath="{.data.mysql-root-password}" | base64 -d

# 密码
VubCMiHvT1
\n
    \n
  • 更改服务端口
  • \n
\n
1
2
3
4
kubectl edit svc --namespace oge mysql
# 将type=ClusterIP改为NodePort
# b8:85:84:71:64:28
echo "SUBSYSTEM==\\"net\\", ACTION==\\"add\\", DRIVERS==\\"?*\\", ATTR{address}==\\" b8:85:84:71:64:28\\", ATTR{type}==\\"1\\", KERNEL==\\"eno*\\", NAME=\\"eno1\\"" >> /etc/udev/rules.d/70-persistent-net.rules
\n
    \n
  1. 缩放副本集
  2. \n
\n
1
2
3
4
5
kubectl get deployment 
# 发现并没有mysql
kubectl get all -n oge
# 发现有statefulset.apps/mysql
kubectl scale --replicas=1 statefulset.apps/mysql -n oge
\n
    \n
  1. 在K8S中进入数据库
  2. \n
\n
1
2
3
4
kubectl exec -it -n oge mysql-1  bash
# 进入后登录用户
mysql -u root -p
# 输入密码
\n

11 在K8S上部署 MongoDB

\n
    \n
  • \n

    安装

    \n
      \n
    • \n

      注意:数据库安装需要持久卷,需提前创建满足要求的pv,或者创建nas的stroageclass,以自动根据postgresql的pvc创建pv。

      \n
    • \n
    • \n

      集群已经配置23服务器的/mnt/storage/k8s/pv为NAS,并已经配置名字为nas-storage的sc

      \n
    • \n
    \n
  • \n
\n
1
2
3
4
5
6
7
8
9
helm repo add bitnami https://charts.bitnami.com/bitnami

# 安装
helm install -n ydy mongodb bitnami/mongodb \\
--set global.storageClass=nfs-client \\
--set readReplicas.persistence.storageClass=nfs-client \\
--set primary.persistence.storageClass=nfs-client \\
--set primary.persistence.size=100Gi \\
--set readReplicas.persistence.size=100Gi
\n
    \n
  • 查看 MongoDB 密码
  • \n
\n
1
2
3
4
kubectl get secret --namespace ydy mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 -d

# 密码
WUL9FPQ2V9
\n
    \n
  • 更改服务端口
  • \n
\n
1
2
3
4
kubectl edit svc --namespace ydy mongodb
# 将type=ClusterIP改为NodePort
# b8:85:84:71:64:28
echo "SUBSYSTEM==\\"net\\", ACTION==\\"add\\", DRIVERS==\\"?*\\", ATTR{address}==\\" b8:85:84:71:64:28\\", ATTR{type}==\\"1\\", KERNEL==\\"eno*\\", NAME=\\"eno1\\"" >> /etc/udev/rules.d/70-persistent-net.rules
\n
    \n
  1. 缩放副本集
  2. \n
\n
1
2
3
4
5
kubectl get deployment 
# 发现并没有mongodb
kubectl get all -n ydy
# 发现有statefulset.apps/mongodb
kubectl scale --replicas=1 statefulset.apps/mongodb -n ydy
\n
    \n
  1. 在K8S中进入数据库
  2. \n
\n
1
kubectl exec -it -n ydy mongodb-644c657c4f-x62cn bash
\n

12 在 K8S 上部署 Apache Spark

\n

两个方式,第一种方式为Spark官方提出的;第二种为Google提出的,更符合K8S原生概念

\n
    \n
  1. Spark On K8S
  2. \n
  3. spark-on-k8s-operator
  4. \n
\n

\"image-20230408170401365\"

\n
Spark On K8S
\n

\"image-20230408170444023\"

\n
spark-on-k8s-operator
\n

12.1 安装 spark-on-k8s-operator

\n

参考 https://blog.csdn.net/w8998036/article/details/122217230

\n
    \n
  • 安装
  • \n
\n
1
2
3
4
5
6
7
helm repo add spark-operator https://googlecloudplatform.github.io/spark-on-k8s-operator 

# 注意是否存在 spark-operator 命名空间,没有则创建
kubectl create ns spark-operator

# 安装
helm install spark-operator spark-operator/spark-operator --namespace spark-operator --set sparkJobNamespace=default --set webhook.enable=true
\n
    \n
  • 创建服务账户
  • \n
\n
1
2
vim spark-application-rbac.yaml
# 内容如下
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
apiVersion: v1
kind: ServiceAccount
metadata:
name: spark
namespace: spark
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: spark
name: spark-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["*"]
- apiGroups: [""]
resources: ["services"]
verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: spark-role-binding
namespace: spark
subjects:
- kind: ServiceAccount
name: spark
namespace: spark
roleRef:
kind: Role
name: spark-role
apiGroup: rbac.authorization.k8s.io
\n
1
kubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root
\n
    \n
  • 编写作业模板并提交作业
  • \n
\n

创建一个Spark作业的YAML配置文件,并进行部署。

\n
    \n
  1. 创建spark-pi.yaml文件
  2. \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:
name: spark-pi
namespace: spark
spec:
type: Scala
mode: cluster
image: "registry.cn-hangzhou.aliyuncs.com/yudayu/spark:v3.1.1"
# 1gcr.io/spark-operator/spark:v3.1.1需要更换镜像,gcr.io目前国内无法访问。可以先对docker挂代理,pull到阿里云镜像后
imagePullPolicy: IfNotPresent
mainClass: org.apache.spark.examples.SparkPi
mainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar"
# 需要更换自己的jar包,local指该jar位于image内,可换成所有节点都能访问的web路径,或者通过指定nas挂载pv,将jar包放在nas的pv里
sparkVersion: "3.1.1"
restartPolicy:
type: Never
volumes:
- name: "test-volume"
hostPath:
path: "/tmp"
type: Directory
driver:
cores: 1
coreLimit: "1200m"
memory: "512m"
labels:
version: 3.1.1
serviceAccount: spark
volumeMounts:
- name: "test-volume"
mountPath: "/tmp"
executor:
cores: 1
instances: 2
memory: "512m"
labels:
version: 3.1.1
volumeMounts:
- name: "test-volume"
mountPath: "/tmp"
\n
    \n
  1. 部署一个Spark计算任务
  2. \n
\n
1
kubectl apply -f spark-pi.yaml
\n

运维

\n
1
2
3
kubectl get sparkapplications
kubectl describe sparkapplications
kubectl get svc # 查看该任务的spark ui
\n

12.2 安装 Spark On K8S

\n
1
2
3
4
5
helm repo add bitnami https://charts.bitnami.com/bitnami
# 注意是否存在 spark-operator 命名空间,没有则创建
kubectl create ns spark-on-k8s
helm install -n spark-on-k8s spark bitnami/spark \\
--set worker.coreLimit=28
\n
1
2
3
4
5
6
7
8
9
10
./bin/spark-submit    \\
--class org.apache.spark.examples.SparkPi \\
--conf spark.kubernetes.container.image=bitnami/spark:3 \\
--master k8s://https://125.220.153.23:6443 \\
--conf spark.kubernetes.driverEnv.SPARK_MASTER_URL=spark://10.97.43.141:7077 \\
--deploy-mode cluster \\
--executor-memory 20G \\
--num-executors 10 \\
--conf spark.executor.instances=5 \\
https:///data/spark-examples_2.12-3.3.0.jar 1000
\n
1
2
3
4
5
6
kubectl run --namespace spark-on-k8s spark-oge --rm --tty -i --restart='Never' \\
--image bitnami/spark:3 \\
-- spark-submit --master spark://10.97.43.141:7077 \\
--class org.apache.spark.examples.SparkPi \\
--deploy-mode cluster \\
/data/spark-examples_2.12-3.3.0.jar 100000
\n

13 在K8S上部署redis集群

\n
    \n
  • 待更
  • \n
\n

14 在K8S上部署nginx

\n

14.1 创建pv

\n
1
vim nginx-pv.yaml
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: v1
kind: PersistentVolume
metadata:
name: nginx-ydy-pv
namespace: ydy
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: manual
hostPath:
path: /mnt/storage/k8s/pv/ydy-nginx-pvc
\n

14.2 创建pvc

\n
1
vim nginx-pvc.yaml
\n
1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nginx-ydy-pvc
namespace: ydy
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: manual
\n

14.3 安装nginx并设置静态资源挂载的pvc

\n

将nginx中的/app挂载到/mnt/storage/k8s/pv/luluancheng-nginx-pvc

\n
1
2
helm install -n ydy nginx bitnami/nginx \\
--set staticSitePVC=nginx-ydy-pvc
\n

附录:疑难问题解决:

\n

1 K8S强制删除 namespace(会删除该命名空间中的所有 pod )

\n
1
2
3
#1、将该分区导出为json文件,以 oge namespace为例
kubectl get ns oge -o json > oge.json
#2、编辑该json文件,将spec内的内容全部删除,然后保存退出
\n

\"22f0a5cbf0424425b0d62681f79cb713\"

\n

\"ef949b8bb503410c918894ab20bad993\"

\n
1
2
# 3、另开一个终端,启动一个proxy
kubectl proxy --port=8081
\n
1
2
# 4、执行一个curl命令,更新oge namespace
curl -k -H "Content-Type: application/json" -X PUT --data-binary @oge.json http://127.0.0.1:8081/api/v1/namespaces/oge/finalize
\n

2 CNI网络错误

\n
    \n
  • 当迁移集群之后,拉取镜像报cni网络错误,如下:
  • \n
\n

\"8d5d49703c8ac59f24fde81b3982b616\"

\n
    \n
  • 从上面的截图中看到问题出现在给Pod分配IP上,意思是 cni0 的IP不同于``10.244.9.1/24,下面我们使用 ifconfig`命令查看IP信息
  • \n
\n

\"79e65e4f797200ad98feac6f8b2d4254\"

\n
    \n
  • 从上面的图中我们可以看到``flannel.1的 **IP** 为10.244.9.0,然后我们又使用cat /run/flannel/subnet.env`,该文件内容如下:
  • \n
\n

\"310efbdb614636a17aa48eaf4a8dc2c5\"

\n
    \n
  • \n

    其实现在的问题就比较明确了,我们使用的Overlay network为Flannel,也就是说Pod的IP地址段应该在Flannel的subnet下,而现在我们看到cni0的IP地址段与flannel subnet地址段不同,所以就出现了问题。

    \n
  • \n
  • \n

    解决方案

    \n
      \n
    • 方法1是将 cni0 的 IP 段修改为``10.244.9.1`
    • \n
    • 方法2是将这个错误的网卡删除掉,之后会自动重建
    • \n
    \n
  • \n
\n
1
2
3
# 下面我们删除错误的cni0,然后让它自己重建
ifconfig cni0 down
ip link delete cni0
\n

3 28 服务器增加路由(为了让两台刀片上网)

\n
    \n
  • 28上执行
  • \n
\n
1
2
iptables -t nat -A POSTROUTING -s 192.168.0.209/24 -o em1_2 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.177/24 -o em1_2 -j MASQUERADE
\n

4 异常断电等导致 etcd 心跳检测出现问题

\n\n

5 OpenStack服务器网络跳转镜像

\n
\n

作用: 保证OpenStack上服务器与实验室服务器可以 ping 通

\n
\n
    \n
  • IP\n
      \n
    • 115.156.91.250
    • \n
    \n
  • \n
  • 网关\n
      \n
    • 115.156.91.254
    • \n
    \n
  • \n
  • 子网掩码\n
      \n
    • 255.255.255.0
    • \n
    \n
  • \n
\n"},{"title":"K8S集群环境搭建(Docker作为容器)","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D2075113303%2C1509195472%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","abbrlink":"d862c611","date":"2023-05-18T06:08:12.000Z","keywords":"K8S, Docker","swiper_index":2,"_content":"\n本文参考:https://zhuanlan.zhihu.com/p/558014199?utm_id=0\n\n## 1. 安装Docker\n\n### 1.1 安装docker 20.10.7\n\n**注意 Docker 版本,要和 Kubernetes 版本 有对应关系**\n\n- 三台机器上执行\n\n```shell\n# 安装/更新 yum-utils\nyum install -y yum-utils\n\n# 配置 yum源\nyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo\n\n# 安装 docker 20.10.7 版本\nyum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io\n\n# 查看 docker 版本\ndocker -v\n\n# 启动 docker\nsystemctl start docker\n\n# 设置开机自启\nsystemctl enable docker\n\n# 查看 docker 是否成功, 有 Client 和 Server 即成功\ndocker version\n```\n\n### 1.2 配置加速镜像\n\n- 三台机器上执行\n\n```shell\nsudo mkdir -p /etc/docker\nsudo tee /etc/docker/daemon.json <<-'EOF'\n{\n \"registry-mirrors\": [\"https://82m9ar63.mirror.aliyuncs.com\"],\n \"exec-opts\": [\"native.cgroupdriver=systemd\"],\n \"log-driver\": \"json-file\",\n \"log-opts\": {\n \"max-size\": \"100m\"\n },\n \"storage-driver\": \"overlay2\"\n}\nEOF\n# 重启docker的后台线程\nsudo systemctl daemon-reload\n# 重启docker服务\nsudo systemctl restart docker\n\n# 查看是否配置成功\ndocker info\n```\n\n\n\n## 2. 安装Kubernetes\n\n- 每台机器2GB或者更多的RAM(如果少于这个数字 将会影响应用的运行内存)\n- CPU2核以上\n- 集群中所有的服务器的网络彼此可以相互连接。\n\n\n\n关闭防火墙\n\n````shell\nsystemctl stop firewalld NetworkManager\nsystemctl disable firewalld NetworkManager\n````\n\n\n\n### 2.1 设置hostname\n\n```shell\n# 查看主机名\nhostname\n\n# 设置主机名\nhostnamectl set-hostname k8s-master\nhostnamectl set-hostname k8s-node1\nhostnamectl set-hostname k8s-node2\n\n# 更新\nbash\n```\n\n\n\n### 2.2 关闭交换区\n\n- 三台机器上执行\n- 下面是一些安全设置\n\n```shell\n# 查看 交换分区\nfree -m\n\n# 将 SELinux 设置为 permissive 模式(相当于将其禁用) 第一行是临时禁用,第二行是永久禁用\nsetenforce 0\nsed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config\n\n# 关闭swap;第一行是临时禁用,第二行是永久禁用\nswapoff -a \nsed -ri 's/.*swap.*/#&/' /etc/fstab\n\n# 允许 iptables 检查桥接流量 (K8s 官方要求)\ncat <> /etc/hosts\n```\n\n- master节点上执行\n\n```shell\n# 主节点初始化 (只在 master 服务器执行, 其他 node 不用)\n# --apiserver-advertise-address: master 的 IP\n# --control-plane-endpoint: master 的域名\n# --service-cidr 和 --pod-network-cidr 是网络范围,雷神 建议不要改。要改的话 2 个cidr 和 vps(192.168.x.x) 的,3 个网络互相不能重叠;还要修改 calico.yaml的 IP(下图有写)。\nkubeadm init \\\n--apiserver-advertise-address=192.168.1.135 \\\n--control-plane-endpoint=k8s-master \\\n--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \\\n--kubernetes-version v1.20.9 \\\n--service-cidr=10.96.0.0/16 \\\n--pod-network-cidr=192.168.0.0/16\n```\n\n- 出现这个即成功了\n\n![image-20230406145652752](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406145652752.png)\n\n\n\n### 2.5 根据提示继续\n\n- master成功后提示\n\n```shell\nYour Kubernetes control-plane has initialized successfully!\n\nTo start using your cluster, you need to run the following as a regular user:\n\n mkdir -p $HOME/.kube\n sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\n sudo chown $(id -u):$(id -g) $HOME/.kube/config\n\nAlternatively, if you are the root user, you can run:\n\n export KUBECONFIG=/etc/kubernetes/admin.conf\n\nYou should now deploy a pod network to the cluster.\nRun \"kubectl apply -f [podnetwork].yaml\" with one of the options listed at:\n https://kubernetes.io/docs/concepts/cluster-administration/addons/\n\nYou can now join any number of control-plane nodes by copying certificate authorities\nand service account keys on each node and then running the following as root:\n\n kubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\\n --discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5 \\\n --control-plane\n\nThen you can join any number of worker nodes by running the following on each as root:\n\nkubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\\n --discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5\n```\n\n\n\nTo start using your cluster, you need to run the following as a regular user:\n\n要开始使用集群,您需要以普通用户身份运行以下命令(master节点执行):源自上面的提示\n\n```shell\nmkdir -p $HOME/.kube\nsudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\nsudo chown $(id -u):$(id -g) $HOME/.kube/config\n```\n\n\n\n### 2.6 安装网络组件(calico)\n\n注:只在 master 服务执行。其他 node 服务器 不用。\n\n- 在master上执行\n\n```shell\n# 下载 calico.yaml\ncurl https://docs.projectcalico.org/manifests/calico.yaml -O\n\n# 加载配置\nkubectl apply -f calico.yaml\n```\n\n- 或者(这个更不会出错)\n\n```shell\nkubectl apply -f https://docs.projectcalico.org/v3.18/manifests/calico.yaml\n```\n\n- 下载完成后生成calico.yaml\n\n![image-20230406150214816](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406150214816.png)\n\n\n- 或者安装flannel\n\n```shell\nkubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml\n```\n\n\n\n注意\n```shell\n如果修改了 初始化主节点中的\n--pod-network-cidr=192.168.0.0/16\n将 calico.yaml 的配置, # 去掉,IP 写 改的 IP。\n```\n\n\n\n### 2.7 **Worker 加入集群**\n\n- worker节点加入到集群中(源自提示)\n\n```shell\nkubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\\n --discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5\n```\n\n- 出现这个即成功\n\n![image-20230406153948047](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406153948047.png)\n\n\n\n### 2.8 每次重启需要先启动docker,否则k8s无法启动\n\n\n\n### 2.9 令牌过期\n\n- 在master主节点执行\n\n```shell\n# 重新获取令牌\nkubeadm token create --print-join-command\n```\n\n\n\n### 2.10 部署Dashboard\n\n- 参考链接: [kubernetes(k8s)部署Dashboard - 干货分享 - 代码森林 (codeforest.cn)](http://www.codeforest.cn/article/570)\n\n\n#### 2.10.1 运行pod(创建资源)\n\n部署 dashboard(可视化页面), [kubernetes 官方提供的可视化界面](https://github.com/kubernetes/dashboard)\n\n- 在master上执行,推荐下载到本地导入虚拟机\n\n```shell\n# 根据 在线配置文件 创建资源\nkubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml\n```\n\n```shell\n# 本地配置\nkubectl apply -f recommended.yaml\n```\n\n#### 2.10.2 设置访问端口\n\n```shell\n# 修改配置文件 找到 type,将 ClusterIP 改成 NodePort\nkubectl edit svc kubernetes-dashboard -n kubernetes-dashboard\n\n# 找到端口,在安全组放行\nkubectl get svc -A |grep kubernetes-dashboard\n```\n\n![image-20230406155958282](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406155958282.png)\n\n![image-20230406161329065](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406161329065.png)\n\n32499即为访问端口,以后只需要使用任一节点的ip+32499即可访问\n\n[https://192.168.1.135:32499](https://192.168.1.135:32499/) (要注意是 https,port 是映射的端口,在配置文件查看)\n\n## 3 疑难杂症\n### 3.1 删除现有的dashboard服务\n\n```shell\nkubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard\n```\n\n- 根据yaml来删除\n\n```shell\nkubectl delete -f recommended.yaml \n```\n\n- 若资源下载不下来,则直接本地导入recommended.yaml ,下载地址如下\n\nhttps://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml\n\n- 执行:\n\n```shell\nkubectl apply -f recommended.yaml\n```\n\n\n### 3.2 dashboard启动失败(无法访问)\n\n修改了 NodePort 后,Pod kubernetes-dashboard 起不来了。(环境:虚拟机)\n\n```shell\n# 查看日志\nkubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-658485d5c7-f89v7\n```\n\n![image.png](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/1652075593643-5900409d-98b9-48ef-8eb8-b6160feb6b71.png)\n\n解决思路\n\n```shell\n1、将 dashboard 部署到 master上,因为 master 刚安装了网络组件\n2、让 工作节点 也能访问 apiServer\n```\n\n方案1\n\n- 先卸载原来的 dashboard\n\n```shell\n# 无法访问,查看 部署到 哪个 node 上了, 将 dashboard 部署到 master 上\nkubectl get pods -A -o wide\n```\n\n![image-20230407113313033](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230407113313033.png)\n\n```shell\n# 修改 recommended.yaml,添加下面\n```\n\n![image.png](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/1652078359412-58130528-5fe9-407b-8be2-5b4ddcbad064.png)\n\n![image.png](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/1652078430899-c1b3f50d-354e-495c-8d02-e5e5e1353d1c.png)\n\n```shell\n# 重新安装 dashboard\n\n# 修改配置文件 找到 type,将 ClusterIP 改成 NodePort\nkubectl edit svc kubernetes-dashboard -n kubernetes-dashboard\n\n# 找到端口,在安全组放行\nkubectl get svc -A |grep kubernetes-dashboard\n```\n\n\n\n- 创建访问账号\n\n```shell\n#创建访问账号,准备一个yaml文件\nvim dash-usr.yaml\n```\n\n- 文件内容如下\n\n```yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: admin-user\n namespace: kubernetes-dashboard\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n name: admin-user\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: cluster-admin\nsubjects:\n- kind: ServiceAccount\n name: admin-user\n namespace: kubernetes-dashboard\n```\n\n```shell\nkubectl apply -f dash-usr.yaml\n```\n\n\n\n- 令牌访问\n\n```shell\n#获取访问令牌\nkubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath=\"{.secrets[0].name}\") -o go-template=\"{{.data.token | base64decode}}\"\n```\n\n![image-20230407135656881](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230407135656881.png)\n\n```tex\neyJhbGciOiJSUzI1NiIsImtpZCI6IkZkbV91WkVqTnp3clZLd29JS1FYUWxURzZyd0FLcnpVQzBtRlRMTmpya0UifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTVrbGtrIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiNWVhYjQ2MS0xNjE1LTQ5ZTQtYTAzNC0wY2MxYWM1YTI5ODkiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.eum4COcUzn6wt_vOpCUUEiNENzeGUTC_ZlKeB8d0IplFlZWrAav3RbqV5LMDRRIyyZ-7csJb3COhFEiCRtlkc9MM60od4IRMscNxv_tm11A32pmGn9eFERyaYjKUFBHZfF34jPcsjYqU50TDn6wykI_B6r9ZzvpJemR-wqF2y-GBvmz8q19D9q5zlhaE9gmmvksEx-D0ZyOeZo4tMdbD757OdTjgzlYhmTpfTs-Z8-sdKWnHGFCYbAPzrEgMgChcIjlyDle9-JaE1WCosGCA73xsBzXNnkvYC7YB_tagX4BhGDZEu4eyRNbgCAqO6of6QnvDXvlesd59IU-WMVE-7Q\n```\n\n- 将令牌复制到token处\n\n![image-20230407140527932](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230407140527932.png)\n\n- 登录成功\n\n![image-20230407140620636](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230407140620636.png)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","source":"_posts/K8S集群环境搭建(Docker作为容器).md","raw":"---\ntitle: K8S集群环境搭建(Docker作为容器)\ncover: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D2075113303%2C1509195472%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPG'\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nabbrlink: d862c611\ndate: 2023-05-18 14:08:12\nkeywords: K8S, Docker\ncategories:\n - 云原生\ntags:\n - K8S\n - Docker\nswiper_index: 2 #置顶轮播图顺序,非负整数,数字越大越靠前\n---\n\n本文参考:https://zhuanlan.zhihu.com/p/558014199?utm_id=0\n\n## 1. 安装Docker\n\n### 1.1 安装docker 20.10.7\n\n**注意 Docker 版本,要和 Kubernetes 版本 有对应关系**\n\n- 三台机器上执行\n\n```shell\n# 安装/更新 yum-utils\nyum install -y yum-utils\n\n# 配置 yum源\nyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo\n\n# 安装 docker 20.10.7 版本\nyum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io\n\n# 查看 docker 版本\ndocker -v\n\n# 启动 docker\nsystemctl start docker\n\n# 设置开机自启\nsystemctl enable docker\n\n# 查看 docker 是否成功, 有 Client 和 Server 即成功\ndocker version\n```\n\n### 1.2 配置加速镜像\n\n- 三台机器上执行\n\n```shell\nsudo mkdir -p /etc/docker\nsudo tee /etc/docker/daemon.json <<-'EOF'\n{\n \"registry-mirrors\": [\"https://82m9ar63.mirror.aliyuncs.com\"],\n \"exec-opts\": [\"native.cgroupdriver=systemd\"],\n \"log-driver\": \"json-file\",\n \"log-opts\": {\n \"max-size\": \"100m\"\n },\n \"storage-driver\": \"overlay2\"\n}\nEOF\n# 重启docker的后台线程\nsudo systemctl daemon-reload\n# 重启docker服务\nsudo systemctl restart docker\n\n# 查看是否配置成功\ndocker info\n```\n\n\n\n## 2. 安装Kubernetes\n\n- 每台机器2GB或者更多的RAM(如果少于这个数字 将会影响应用的运行内存)\n- CPU2核以上\n- 集群中所有的服务器的网络彼此可以相互连接。\n\n\n\n关闭防火墙\n\n````shell\nsystemctl stop firewalld NetworkManager\nsystemctl disable firewalld NetworkManager\n````\n\n\n\n### 2.1 设置hostname\n\n```shell\n# 查看主机名\nhostname\n\n# 设置主机名\nhostnamectl set-hostname k8s-master\nhostnamectl set-hostname k8s-node1\nhostnamectl set-hostname k8s-node2\n\n# 更新\nbash\n```\n\n\n\n### 2.2 关闭交换区\n\n- 三台机器上执行\n- 下面是一些安全设置\n\n```shell\n# 查看 交换分区\nfree -m\n\n# 将 SELinux 设置为 permissive 模式(相当于将其禁用) 第一行是临时禁用,第二行是永久禁用\nsetenforce 0\nsed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config\n\n# 关闭swap;第一行是临时禁用,第二行是永久禁用\nswapoff -a \nsed -ri 's/.*swap.*/#&/' /etc/fstab\n\n# 允许 iptables 检查桥接流量 (K8s 官方要求)\ncat <> /etc/hosts\n```\n\n- master节点上执行\n\n```shell\n# 主节点初始化 (只在 master 服务器执行, 其他 node 不用)\n# --apiserver-advertise-address: master 的 IP\n# --control-plane-endpoint: master 的域名\n# --service-cidr 和 --pod-network-cidr 是网络范围,雷神 建议不要改。要改的话 2 个cidr 和 vps(192.168.x.x) 的,3 个网络互相不能重叠;还要修改 calico.yaml的 IP(下图有写)。\nkubeadm init \\\n--apiserver-advertise-address=192.168.1.135 \\\n--control-plane-endpoint=k8s-master \\\n--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \\\n--kubernetes-version v1.20.9 \\\n--service-cidr=10.96.0.0/16 \\\n--pod-network-cidr=192.168.0.0/16\n```\n\n- 出现这个即成功了\n\n![image-20230406145652752](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406145652752.png)\n\n\n\n### 2.5 根据提示继续\n\n- master成功后提示\n\n```shell\nYour Kubernetes control-plane has initialized successfully!\n\nTo start using your cluster, you need to run the following as a regular user:\n\n mkdir -p $HOME/.kube\n sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\n sudo chown $(id -u):$(id -g) $HOME/.kube/config\n\nAlternatively, if you are the root user, you can run:\n\n export KUBECONFIG=/etc/kubernetes/admin.conf\n\nYou should now deploy a pod network to the cluster.\nRun \"kubectl apply -f [podnetwork].yaml\" with one of the options listed at:\n https://kubernetes.io/docs/concepts/cluster-administration/addons/\n\nYou can now join any number of control-plane nodes by copying certificate authorities\nand service account keys on each node and then running the following as root:\n\n kubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\\n --discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5 \\\n --control-plane\n\nThen you can join any number of worker nodes by running the following on each as root:\n\nkubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\\n --discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5\n```\n\n\n\nTo start using your cluster, you need to run the following as a regular user:\n\n要开始使用集群,您需要以普通用户身份运行以下命令(master节点执行):源自上面的提示\n\n```shell\nmkdir -p $HOME/.kube\nsudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\nsudo chown $(id -u):$(id -g) $HOME/.kube/config\n```\n\n\n\n### 2.6 安装网络组件(calico)\n\n注:只在 master 服务执行。其他 node 服务器 不用。\n\n- 在master上执行\n\n```shell\n# 下载 calico.yaml\ncurl https://docs.projectcalico.org/manifests/calico.yaml -O\n\n# 加载配置\nkubectl apply -f calico.yaml\n```\n\n- 或者(这个更不会出错)\n\n```shell\nkubectl apply -f https://docs.projectcalico.org/v3.18/manifests/calico.yaml\n```\n\n- 下载完成后生成calico.yaml\n\n![image-20230406150214816](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406150214816.png)\n\n\n- 或者安装flannel\n\n```shell\nkubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml\n```\n\n\n\n注意\n```shell\n如果修改了 初始化主节点中的\n--pod-network-cidr=192.168.0.0/16\n将 calico.yaml 的配置, # 去掉,IP 写 改的 IP。\n```\n\n\n\n### 2.7 **Worker 加入集群**\n\n- worker节点加入到集群中(源自提示)\n\n```shell\nkubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\\n --discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5\n```\n\n- 出现这个即成功\n\n![image-20230406153948047](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406153948047.png)\n\n\n\n### 2.8 每次重启需要先启动docker,否则k8s无法启动\n\n\n\n### 2.9 令牌过期\n\n- 在master主节点执行\n\n```shell\n# 重新获取令牌\nkubeadm token create --print-join-command\n```\n\n\n\n### 2.10 部署Dashboard\n\n- 参考链接: [kubernetes(k8s)部署Dashboard - 干货分享 - 代码森林 (codeforest.cn)](http://www.codeforest.cn/article/570)\n\n\n#### 2.10.1 运行pod(创建资源)\n\n部署 dashboard(可视化页面), [kubernetes 官方提供的可视化界面](https://github.com/kubernetes/dashboard)\n\n- 在master上执行,推荐下载到本地导入虚拟机\n\n```shell\n# 根据 在线配置文件 创建资源\nkubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml\n```\n\n```shell\n# 本地配置\nkubectl apply -f recommended.yaml\n```\n\n#### 2.10.2 设置访问端口\n\n```shell\n# 修改配置文件 找到 type,将 ClusterIP 改成 NodePort\nkubectl edit svc kubernetes-dashboard -n kubernetes-dashboard\n\n# 找到端口,在安全组放行\nkubectl get svc -A |grep kubernetes-dashboard\n```\n\n![image-20230406155958282](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406155958282.png)\n\n![image-20230406161329065](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406161329065.png)\n\n32499即为访问端口,以后只需要使用任一节点的ip+32499即可访问\n\n[https://192.168.1.135:32499](https://192.168.1.135:32499/) (要注意是 https,port 是映射的端口,在配置文件查看)\n\n## 3 疑难杂症\n### 3.1 删除现有的dashboard服务\n\n```shell\nkubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard\n```\n\n- 根据yaml来删除\n\n```shell\nkubectl delete -f recommended.yaml \n```\n\n- 若资源下载不下来,则直接本地导入recommended.yaml ,下载地址如下\n\nhttps://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml\n\n- 执行:\n\n```shell\nkubectl apply -f recommended.yaml\n```\n\n\n### 3.2 dashboard启动失败(无法访问)\n\n修改了 NodePort 后,Pod kubernetes-dashboard 起不来了。(环境:虚拟机)\n\n```shell\n# 查看日志\nkubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-658485d5c7-f89v7\n```\n\n![image.png](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/1652075593643-5900409d-98b9-48ef-8eb8-b6160feb6b71.png)\n\n解决思路\n\n```shell\n1、将 dashboard 部署到 master上,因为 master 刚安装了网络组件\n2、让 工作节点 也能访问 apiServer\n```\n\n方案1\n\n- 先卸载原来的 dashboard\n\n```shell\n# 无法访问,查看 部署到 哪个 node 上了, 将 dashboard 部署到 master 上\nkubectl get pods -A -o wide\n```\n\n![image-20230407113313033](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230407113313033.png)\n\n```shell\n# 修改 recommended.yaml,添加下面\n```\n\n![image.png](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/1652078359412-58130528-5fe9-407b-8be2-5b4ddcbad064.png)\n\n![image.png](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/1652078430899-c1b3f50d-354e-495c-8d02-e5e5e1353d1c.png)\n\n```shell\n# 重新安装 dashboard\n\n# 修改配置文件 找到 type,将 ClusterIP 改成 NodePort\nkubectl edit svc kubernetes-dashboard -n kubernetes-dashboard\n\n# 找到端口,在安全组放行\nkubectl get svc -A |grep kubernetes-dashboard\n```\n\n\n\n- 创建访问账号\n\n```shell\n#创建访问账号,准备一个yaml文件\nvim dash-usr.yaml\n```\n\n- 文件内容如下\n\n```yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: admin-user\n namespace: kubernetes-dashboard\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n name: admin-user\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: cluster-admin\nsubjects:\n- kind: ServiceAccount\n name: admin-user\n namespace: kubernetes-dashboard\n```\n\n```shell\nkubectl apply -f dash-usr.yaml\n```\n\n\n\n- 令牌访问\n\n```shell\n#获取访问令牌\nkubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath=\"{.secrets[0].name}\") -o go-template=\"{{.data.token | base64decode}}\"\n```\n\n![image-20230407135656881](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230407135656881.png)\n\n```tex\neyJhbGciOiJSUzI1NiIsImtpZCI6IkZkbV91WkVqTnp3clZLd29JS1FYUWxURzZyd0FLcnpVQzBtRlRMTmpya0UifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTVrbGtrIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiNWVhYjQ2MS0xNjE1LTQ5ZTQtYTAzNC0wY2MxYWM1YTI5ODkiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.eum4COcUzn6wt_vOpCUUEiNENzeGUTC_ZlKeB8d0IplFlZWrAav3RbqV5LMDRRIyyZ-7csJb3COhFEiCRtlkc9MM60od4IRMscNxv_tm11A32pmGn9eFERyaYjKUFBHZfF34jPcsjYqU50TDn6wykI_B6r9ZzvpJemR-wqF2y-GBvmz8q19D9q5zlhaE9gmmvksEx-D0ZyOeZo4tMdbD757OdTjgzlYhmTpfTs-Z8-sdKWnHGFCYbAPzrEgMgChcIjlyDle9-JaE1WCosGCA73xsBzXNnkvYC7YB_tagX4BhGDZEu4eyRNbgCAqO6of6QnvDXvlesd59IU-WMVE-7Q\n```\n\n- 将令牌复制到token处\n\n![image-20230407140527932](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230407140527932.png)\n\n- 登录成功\n\n![image-20230407140620636](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230407140620636.png)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","slug":"K8S集群环境搭建(Docker作为容器)","published":1,"updated":"2023-10-21T04:52:18.653Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyrts000h2j3u19u63umo","content":"

本文参考:https://zhuanlan.zhihu.com/p/558014199?utm_id=0

\n

1. 安装Docker

\n

1.1 安装docker 20.10.7

\n

注意 Docker 版本,要和 Kubernetes 版本 有对应关系

\n
    \n
  • 三台机器上执行
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 安装/更新 yum-utils
yum install -y yum-utils

# 配置 yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 docker 20.10.7 版本
yum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io

# 查看 docker 版本
docker -v

# 启动 docker
systemctl start docker

# 设置开机自启
systemctl enable docker

# 查看 docker 是否成功, 有 Client 和 Server 即成功
docker version
\n

1.2 配置加速镜像

\n
    \n
  • 三台机器上执行
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
# 重启docker的后台线程
sudo systemctl daemon-reload
# 重启docker服务
sudo systemctl restart docker

# 查看是否配置成功
docker info
\n

2. 安装Kubernetes

\n
    \n
  • 每台机器2GB或者更多的RAM(如果少于这个数字 将会影响应用的运行内存)
  • \n
  • CPU2核以上
  • \n
  • 集群中所有的服务器的网络彼此可以相互连接。
  • \n
\n

关闭防火墙

\n
1
2
systemctl stop firewalld NetworkManager
systemctl disable firewalld NetworkManager
\n

2.1 设置hostname

\n
1
2
3
4
5
6
7
8
9
10
# 查看主机名
hostname

# 设置主机名
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2

# 更新
bash
\n

2.2 关闭交换区

\n
    \n
  • 三台机器上执行
  • \n
  • 下面是一些安全设置
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查看 交换分区
free -m

# 将 SELinux 设置为 permissive 模式(相当于将其禁用) 第一行是临时禁用,第二行是永久禁用
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# 关闭swap;第一行是临时禁用,第二行是永久禁用
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 允许 iptables 检查桥接流量 (K8s 官方要求)
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 让配置生效
sysctl --system
\n

2.3 安装K8S三大件

\n

安装 kubelet、kebeadm、kubectl;注意版本 (1.20.9)

\n
    \n
  • 三台机器上执行
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
# 配置 k8s 的 yum 源地址
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
\n
1
2
3
4
5
6
7
8
9
# 安装 kubelet、kubeadm、kubectl
yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes

# 启动kubelet
systemctl enable --now kubelet

# 查看 kubelet 状态:一会停止 一会运行。 这个状态是对的,kubelet 等待 kubeadm 发号指令。
systemctl status kubelet

\n

2.4 使用kubeadm引导集群

\n
    \n
  • 下载各个机器需要的镜像,三台机器都要安装
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 配置镜像,生成 images.sh
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF

# 拉取镜像
chmod +x ./images.sh && ./images.sh
\n
    \n
  • 使用docker images 查看
  • \n
\n

\"image-20230406144630834\"

\n

2.5 初始化主节点,即把看 k8s-master 变为主节点

\n
    \n
  • 三台机器上执行
  • \n
\n
1
2
3
# 所有机器添加 master 域名映射,以下 IP 为 master 的 IP;
# 访问 k8s-master 即 访问 192.168.1.135
echo "192.168.1.135 k8s-master" >> /etc/hosts
\n
    \n
  • master节点上执行
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
# 主节点初始化 (只在 master 服务器执行, 其他 node 不用)
# --apiserver-advertise-address: master 的 IP
# --control-plane-endpoint: master 的域名
# --service-cidr 和 --pod-network-cidr 是网络范围,雷神 建议不要改。要改的话 2 个cidr 和 vps(192.168.x.x) 的,3 个网络互相不能重叠;还要修改 calico.yaml的 IP(下图有写)。
kubeadm init \\
--apiserver-advertise-address=192.168.1.135 \\
--control-plane-endpoint=k8s-master \\
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \\
--kubernetes-version v1.20.9 \\
--service-cidr=10.96.0.0/16 \\
--pod-network-cidr=192.168.0.0/16
\n
    \n
  • 出现这个即成功了
  • \n
\n

\"image-20230406145652752\"

\n

2.5 根据提示继续

\n
    \n
  • master成功后提示
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

kubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\
--discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5 \\
--control-plane

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\
--discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5
\n

To start using your cluster, you need to run the following as a regular user:

\n

要开始使用集群,您需要以普通用户身份运行以下命令(master节点执行):源自上面的提示

\n
1
2
3
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
\n

2.6 安装网络组件(calico)

\n

注:只在 master 服务执行。其他 node 服务器 不用。

\n
    \n
  • 在master上执行
  • \n
\n
1
2
3
4
5
# 下载 calico.yaml
curl https://docs.projectcalico.org/manifests/calico.yaml -O

# 加载配置
kubectl apply -f calico.yaml
\n
    \n
  • 或者(这个更不会出错)
  • \n
\n
1
kubectl apply -f https://docs.projectcalico.org/v3.18/manifests/calico.yaml
\n
    \n
  • 下载完成后生成calico.yaml
  • \n
\n

\"image-20230406150214816\"

\n
    \n
  • 或者安装flannel
  • \n
\n
1
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
\n

注意

\n
1
2
3
如果修改了 初始化主节点中的
--pod-network-cidr=192.168.0.0/16
将 calico.yaml 的配置, # 去掉,IP 写 改的 IP。
\n

2.7 Worker 加入集群

\n
    \n
  • worker节点加入到集群中(源自提示)
  • \n
\n
1
2
kubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\
--discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5
\n
    \n
  • 出现这个即成功
  • \n
\n

\"image-20230406153948047\"

\n

2.8 每次重启需要先启动docker,否则k8s无法启动

\n

2.9 令牌过期

\n
    \n
  • 在master主节点执行
  • \n
\n
1
2
# 重新获取令牌
kubeadm token create --print-join-command
\n

2.10 部署Dashboard

\n\n

2.10.1 运行pod(创建资源)

\n

部署 dashboard(可视化页面), kubernetes 官方提供的可视化界面

\n
    \n
  • 在master上执行,推荐下载到本地导入虚拟机
  • \n
\n
1
2
# 根据 在线配置文件 创建资源
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
\n
1
2
# 本地配置
kubectl apply -f recommended.yaml
\n

2.10.2 设置访问端口

\n
1
2
3
4
5
# 修改配置文件 找到 type,将 ClusterIP 改成 NodePort
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

# 找到端口,在安全组放行
kubectl get svc -A |grep kubernetes-dashboard
\n

\"image-20230406155958282\"

\n

\"image-20230406161329065\"

\n

32499即为访问端口,以后只需要使用任一节点的ip+32499即可访问

\n

https://192.168.1.135:32499 (要注意是 https,port 是映射的端口,在配置文件查看)

\n

3 疑难杂症

\n

3.1 删除现有的dashboard服务

\n
1
kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard
\n
    \n
  • 根据yaml来删除
  • \n
\n
1
kubectl delete -f recommended.yaml 
\n
    \n
  • 若资源下载不下来,则直接本地导入recommended.yaml ,下载地址如下
  • \n
\n

https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml

\n
    \n
  • 执行:
  • \n
\n
1
kubectl apply -f recommended.yaml
\n

3.2 dashboard启动失败(无法访问)

\n

修改了 NodePort 后,Pod kubernetes-dashboard 起不来了。(环境:虚拟机)

\n
1
2
# 查看日志
kubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-658485d5c7-f89v7
\n

\"image.png\"

\n

解决思路

\n
1
2
1、将 dashboard 部署到 master上,因为 master 刚安装了网络组件
2、让 工作节点 也能访问 apiServer
\n

方案1

\n
    \n
  • 先卸载原来的 dashboard
  • \n
\n
1
2
# 无法访问,查看 部署到 哪个 node 上了, 将 dashboard 部署到 master 上
kubectl get pods -A -o wide
\n

\"image-20230407113313033\"

\n
1
# 修改 recommended.yaml,添加下面
\n

\"image.png\"

\n

\"image.png\"

\n
1
2
3
4
5
6
7
# 重新安装 dashboard

# 修改配置文件 找到 type,将 ClusterIP 改成 NodePort
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

# 找到端口,在安全组放行
kubectl get svc -A |grep kubernetes-dashboard
\n
    \n
  • 创建访问账号
  • \n
\n
1
2
#创建访问账号,准备一个yaml文件
vim dash-usr.yaml
\n
    \n
  • 文件内容如下
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
\n
1
kubectl apply -f dash-usr.yaml
\n
    \n
  • 令牌访问
  • \n
\n
1
2
#获取访问令牌
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
\n

\"image-20230407135656881\"

\n
1
eyJhbGciOiJSUzI1NiIsImtpZCI6IkZkbV91WkVqTnp3clZLd29JS1FYUWxURzZyd0FLcnpVQzBtRlRMTmpya0UifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTVrbGtrIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiNWVhYjQ2MS0xNjE1LTQ5ZTQtYTAzNC0wY2MxYWM1YTI5ODkiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.eum4COcUzn6wt_vOpCUUEiNENzeGUTC_ZlKeB8d0IplFlZWrAav3RbqV5LMDRRIyyZ-7csJb3COhFEiCRtlkc9MM60od4IRMscNxv_tm11A32pmGn9eFERyaYjKUFBHZfF34jPcsjYqU50TDn6wykI_B6r9ZzvpJemR-wqF2y-GBvmz8q19D9q5zlhaE9gmmvksEx-D0ZyOeZo4tMdbD757OdTjgzlYhmTpfTs-Z8-sdKWnHGFCYbAPzrEgMgChcIjlyDle9-JaE1WCosGCA73xsBzXNnkvYC7YB_tagX4BhGDZEu4eyRNbgCAqO6of6QnvDXvlesd59IU-WMVE-7Q
\n
    \n
  • 将令牌复制到token处
  • \n
\n

\"image-20230407140527932\"

\n
    \n
  • 登录成功
  • \n
\n

\"image-20230407140620636\"

\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":8598,"excerpt":"","more":"

本文参考:https://zhuanlan.zhihu.com/p/558014199?utm_id=0

\n

1. 安装Docker

\n

1.1 安装docker 20.10.7

\n

注意 Docker 版本,要和 Kubernetes 版本 有对应关系

\n
    \n
  • 三台机器上执行
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 安装/更新 yum-utils
yum install -y yum-utils

# 配置 yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 docker 20.10.7 版本
yum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io

# 查看 docker 版本
docker -v

# 启动 docker
systemctl start docker

# 设置开机自启
systemctl enable docker

# 查看 docker 是否成功, 有 Client 和 Server 即成功
docker version
\n

1.2 配置加速镜像

\n
    \n
  • 三台机器上执行
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
# 重启docker的后台线程
sudo systemctl daemon-reload
# 重启docker服务
sudo systemctl restart docker

# 查看是否配置成功
docker info
\n

2. 安装Kubernetes

\n
    \n
  • 每台机器2GB或者更多的RAM(如果少于这个数字 将会影响应用的运行内存)
  • \n
  • CPU2核以上
  • \n
  • 集群中所有的服务器的网络彼此可以相互连接。
  • \n
\n

关闭防火墙

\n
1
2
systemctl stop firewalld NetworkManager
systemctl disable firewalld NetworkManager
\n

2.1 设置hostname

\n
1
2
3
4
5
6
7
8
9
10
# 查看主机名
hostname

# 设置主机名
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2

# 更新
bash
\n

2.2 关闭交换区

\n
    \n
  • 三台机器上执行
  • \n
  • 下面是一些安全设置
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查看 交换分区
free -m

# 将 SELinux 设置为 permissive 模式(相当于将其禁用) 第一行是临时禁用,第二行是永久禁用
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# 关闭swap;第一行是临时禁用,第二行是永久禁用
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 允许 iptables 检查桥接流量 (K8s 官方要求)
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 让配置生效
sysctl --system
\n

2.3 安装K8S三大件

\n

安装 kubelet、kebeadm、kubectl;注意版本 (1.20.9)

\n
    \n
  • 三台机器上执行
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
# 配置 k8s 的 yum 源地址
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
\n
1
2
3
4
5
6
7
8
9
# 安装 kubelet、kubeadm、kubectl
yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes

# 启动kubelet
systemctl enable --now kubelet

# 查看 kubelet 状态:一会停止 一会运行。 这个状态是对的,kubelet 等待 kubeadm 发号指令。
systemctl status kubelet

\n

2.4 使用kubeadm引导集群

\n
    \n
  • 下载各个机器需要的镜像,三台机器都要安装
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 配置镜像,生成 images.sh
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF

# 拉取镜像
chmod +x ./images.sh && ./images.sh
\n
    \n
  • 使用docker images 查看
  • \n
\n

\"image-20230406144630834\"

\n

2.5 初始化主节点,即把看 k8s-master 变为主节点

\n
    \n
  • 三台机器上执行
  • \n
\n
1
2
3
# 所有机器添加 master 域名映射,以下 IP 为 master 的 IP;
# 访问 k8s-master 即 访问 192.168.1.135
echo "192.168.1.135 k8s-master" >> /etc/hosts
\n
    \n
  • master节点上执行
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
# 主节点初始化 (只在 master 服务器执行, 其他 node 不用)
# --apiserver-advertise-address: master 的 IP
# --control-plane-endpoint: master 的域名
# --service-cidr 和 --pod-network-cidr 是网络范围,雷神 建议不要改。要改的话 2 个cidr 和 vps(192.168.x.x) 的,3 个网络互相不能重叠;还要修改 calico.yaml的 IP(下图有写)。
kubeadm init \\
--apiserver-advertise-address=192.168.1.135 \\
--control-plane-endpoint=k8s-master \\
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \\
--kubernetes-version v1.20.9 \\
--service-cidr=10.96.0.0/16 \\
--pod-network-cidr=192.168.0.0/16
\n
    \n
  • 出现这个即成功了
  • \n
\n

\"image-20230406145652752\"

\n

2.5 根据提示继续

\n
    \n
  • master成功后提示
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

kubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\
--discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5 \\
--control-plane

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\
--discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5
\n

To start using your cluster, you need to run the following as a regular user:

\n

要开始使用集群,您需要以普通用户身份运行以下命令(master节点执行):源自上面的提示

\n
1
2
3
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
\n

2.6 安装网络组件(calico)

\n

注:只在 master 服务执行。其他 node 服务器 不用。

\n
    \n
  • 在master上执行
  • \n
\n
1
2
3
4
5
# 下载 calico.yaml
curl https://docs.projectcalico.org/manifests/calico.yaml -O

# 加载配置
kubectl apply -f calico.yaml
\n
    \n
  • 或者(这个更不会出错)
  • \n
\n
1
kubectl apply -f https://docs.projectcalico.org/v3.18/manifests/calico.yaml
\n
    \n
  • 下载完成后生成calico.yaml
  • \n
\n

\"image-20230406150214816\"

\n
    \n
  • 或者安装flannel
  • \n
\n
1
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
\n

注意

\n
1
2
3
如果修改了 初始化主节点中的
--pod-network-cidr=192.168.0.0/16
将 calico.yaml 的配置, # 去掉,IP 写 改的 IP。
\n

2.7 Worker 加入集群

\n
    \n
  • worker节点加入到集群中(源自提示)
  • \n
\n
1
2
kubeadm join k8s-master:6443 --token is7ewi.nznlk1wdhsaocmp1 \\
--discovery-token-ca-cert-hash sha256:b2795fca75bab316c566e98a619a3ce9b18c418e978c7b8fa9c48ff4143fd3c5
\n
    \n
  • 出现这个即成功
  • \n
\n

\"image-20230406153948047\"

\n

2.8 每次重启需要先启动docker,否则k8s无法启动

\n

2.9 令牌过期

\n
    \n
  • 在master主节点执行
  • \n
\n
1
2
# 重新获取令牌
kubeadm token create --print-join-command
\n

2.10 部署Dashboard

\n\n

2.10.1 运行pod(创建资源)

\n

部署 dashboard(可视化页面), kubernetes 官方提供的可视化界面

\n
    \n
  • 在master上执行,推荐下载到本地导入虚拟机
  • \n
\n
1
2
# 根据 在线配置文件 创建资源
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
\n
1
2
# 本地配置
kubectl apply -f recommended.yaml
\n

2.10.2 设置访问端口

\n
1
2
3
4
5
# 修改配置文件 找到 type,将 ClusterIP 改成 NodePort
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

# 找到端口,在安全组放行
kubectl get svc -A |grep kubernetes-dashboard
\n

\"image-20230406155958282\"

\n

\"image-20230406161329065\"

\n

32499即为访问端口,以后只需要使用任一节点的ip+32499即可访问

\n

https://192.168.1.135:32499 (要注意是 https,port 是映射的端口,在配置文件查看)

\n

3 疑难杂症

\n

3.1 删除现有的dashboard服务

\n
1
kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard
\n
    \n
  • 根据yaml来删除
  • \n
\n
1
kubectl delete -f recommended.yaml 
\n
    \n
  • 若资源下载不下来,则直接本地导入recommended.yaml ,下载地址如下
  • \n
\n

https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml

\n
    \n
  • 执行:
  • \n
\n
1
kubectl apply -f recommended.yaml
\n

3.2 dashboard启动失败(无法访问)

\n

修改了 NodePort 后,Pod kubernetes-dashboard 起不来了。(环境:虚拟机)

\n
1
2
# 查看日志
kubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-658485d5c7-f89v7
\n

\"image.png\"

\n

解决思路

\n
1
2
1、将 dashboard 部署到 master上,因为 master 刚安装了网络组件
2、让 工作节点 也能访问 apiServer
\n

方案1

\n
    \n
  • 先卸载原来的 dashboard
  • \n
\n
1
2
# 无法访问,查看 部署到 哪个 node 上了, 将 dashboard 部署到 master 上
kubectl get pods -A -o wide
\n

\"image-20230407113313033\"

\n
1
# 修改 recommended.yaml,添加下面
\n

\"image.png\"

\n

\"image.png\"

\n
1
2
3
4
5
6
7
# 重新安装 dashboard

# 修改配置文件 找到 type,将 ClusterIP 改成 NodePort
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

# 找到端口,在安全组放行
kubectl get svc -A |grep kubernetes-dashboard
\n
    \n
  • 创建访问账号
  • \n
\n
1
2
#创建访问账号,准备一个yaml文件
vim dash-usr.yaml
\n
    \n
  • 文件内容如下
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
\n
1
kubectl apply -f dash-usr.yaml
\n
    \n
  • 令牌访问
  • \n
\n
1
2
#获取访问令牌
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
\n

\"image-20230407135656881\"

\n
1
eyJhbGciOiJSUzI1NiIsImtpZCI6IkZkbV91WkVqTnp3clZLd29JS1FYUWxURzZyd0FLcnpVQzBtRlRMTmpya0UifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTVrbGtrIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiNWVhYjQ2MS0xNjE1LTQ5ZTQtYTAzNC0wY2MxYWM1YTI5ODkiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.eum4COcUzn6wt_vOpCUUEiNENzeGUTC_ZlKeB8d0IplFlZWrAav3RbqV5LMDRRIyyZ-7csJb3COhFEiCRtlkc9MM60od4IRMscNxv_tm11A32pmGn9eFERyaYjKUFBHZfF34jPcsjYqU50TDn6wykI_B6r9ZzvpJemR-wqF2y-GBvmz8q19D9q5zlhaE9gmmvksEx-D0ZyOeZo4tMdbD757OdTjgzlYhmTpfTs-Z8-sdKWnHGFCYbAPzrEgMgChcIjlyDle9-JaE1WCosGCA73xsBzXNnkvYC7YB_tagX4BhGDZEu4eyRNbgCAqO6of6QnvDXvlesd59IU-WMVE-7Q
\n
    \n
  • 将令牌复制到token处
  • \n
\n

\"image-20230407140527932\"

\n
    \n
  • 登录成功
  • \n
\n

\"image-20230407140620636\"

\n"},{"title":"Linux 系统字体安装","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3057738919%2C1244255327%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"Linux,安装,字体","swiper_index":3,"abbrlink":"2de821dc","date":"2023-08-09T11:48:15.000Z","_content":"\n{% note info simple %}在安装之前可以先使用命令 `fc-list :lang=zh` 查看已经安装的中文字体,最后安装后还使用该命令查看新安装的字体{% endnote %}\n\n\n## 1、创建目录\n\n- 在Linux中创建目录 `/usr/share/fonts/myfonts`\n\n## 2、拷贝字体\n\n- 将Windows下的字体拷贝到`myfonts`目录中。\n Windows 中的字体在目录 `C:\\Windows\\Fonts` 中,选择你需要的字体拷贝。\n\n![img.png](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230809195344.png)\n\n## 3、目录权限设置\n\n- 为myfonts目录设置权限\n\n```bash\nchmod 755 myfonts\n```\n\n## 4、安装字体索引指令\n\n- 在centos上,使用如下命令进行安装\n\n```bash\nyum install -y fontconfig mkfontscale\n```\n\n- 在ubuntu上,使用如下命令进行安装\n\n```bash\nsudo apt-get -y install fontconfig xfonts-utils\n```\n\n## 5、建立字体索引信息更新字体缓存\n\n- 进入`myfonts`目录安装字体,建立索引更新缓存\n\n```bash\ncd /usr/share/fonts/myfonts\nmkfontscale && mkfontdir && fc-cache -fv\n```\n\n## 6、验证结果\n\n- 验证字体是否安装成功\n\n```clike\nfc-list :lang=zh\n```\n","source":"_posts/Linux 系统字体安装.md","raw":"---\ntitle: Linux 系统字体安装\ncover: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3057738919%2C1244255327%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG'\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'Linux,安装,字体'\ncategories:\n - Linux\ntags:\n - Linux\n - 安装\nswiper_index: 3\nabbrlink: 2de821dc\ndate: 2023-08-09 19:48:15\n---\n\n{% note info simple %}在安装之前可以先使用命令 `fc-list :lang=zh` 查看已经安装的中文字体,最后安装后还使用该命令查看新安装的字体{% endnote %}\n\n\n## 1、创建目录\n\n- 在Linux中创建目录 `/usr/share/fonts/myfonts`\n\n## 2、拷贝字体\n\n- 将Windows下的字体拷贝到`myfonts`目录中。\n Windows 中的字体在目录 `C:\\Windows\\Fonts` 中,选择你需要的字体拷贝。\n\n![img.png](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230809195344.png)\n\n## 3、目录权限设置\n\n- 为myfonts目录设置权限\n\n```bash\nchmod 755 myfonts\n```\n\n## 4、安装字体索引指令\n\n- 在centos上,使用如下命令进行安装\n\n```bash\nyum install -y fontconfig mkfontscale\n```\n\n- 在ubuntu上,使用如下命令进行安装\n\n```bash\nsudo apt-get -y install fontconfig xfonts-utils\n```\n\n## 5、建立字体索引信息更新字体缓存\n\n- 进入`myfonts`目录安装字体,建立索引更新缓存\n\n```bash\ncd /usr/share/fonts/myfonts\nmkfontscale && mkfontdir && fc-cache -fv\n```\n\n## 6、验证结果\n\n- 验证字体是否安装成功\n\n```clike\nfc-list :lang=zh\n```\n","slug":"Linux 系统字体安装","published":1,"updated":"2023-10-24T08:38:20.901Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyrtt000m2j3ueaymcnsd","content":"

在安装之前可以先使用命令 fc-list :lang=zh 查看已经安装的中文字体,最后安装后还使用该命令查看新安装的字体

\n
\n

1、创建目录

\n
    \n
  • 在Linux中创建目录 /usr/share/fonts/myfonts
  • \n
\n

2、拷贝字体

\n
    \n
  • 将Windows下的字体拷贝到myfonts目录中。
    \nWindows 中的字体在目录 C:\\Windows\\Fonts 中,选择你需要的字体拷贝。
  • \n
\n

\"img.png\"

\n

3、目录权限设置

\n
    \n
  • 为myfonts目录设置权限
  • \n
\n
1
chmod 755 myfonts
\n

4、安装字体索引指令

\n
    \n
  • 在centos上,使用如下命令进行安装
  • \n
\n
1
yum install -y fontconfig mkfontscale
\n
    \n
  • 在ubuntu上,使用如下命令进行安装
  • \n
\n
1
sudo apt-get -y install fontconfig xfonts-utils
\n

5、建立字体索引信息更新字体缓存

\n
    \n
  • 进入myfonts目录安装字体,建立索引更新缓存
  • \n
\n
1
2
cd /usr/share/fonts/myfonts
mkfontscale && mkfontdir && fc-cache -fv
\n

6、验证结果

\n
    \n
  • 验证字体是否安装成功
  • \n
\n
1
fc-list :lang=zh
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":488,"excerpt":"","more":"

在安装之前可以先使用命令 fc-list :lang=zh 查看已经安装的中文字体,最后安装后还使用该命令查看新安装的字体

\n
\n

1、创建目录

\n
    \n
  • 在Linux中创建目录 /usr/share/fonts/myfonts
  • \n
\n

2、拷贝字体

\n
    \n
  • 将Windows下的字体拷贝到myfonts目录中。
    \nWindows 中的字体在目录 C:\\Windows\\Fonts 中,选择你需要的字体拷贝。
  • \n
\n

\"img.png\"

\n

3、目录权限设置

\n
    \n
  • 为myfonts目录设置权限
  • \n
\n
1
chmod 755 myfonts
\n

4、安装字体索引指令

\n
    \n
  • 在centos上,使用如下命令进行安装
  • \n
\n
1
yum install -y fontconfig mkfontscale
\n
    \n
  • 在ubuntu上,使用如下命令进行安装
  • \n
\n
1
sudo apt-get -y install fontconfig xfonts-utils
\n

5、建立字体索引信息更新字体缓存

\n
    \n
  • 进入myfonts目录安装字体,建立索引更新缓存
  • \n
\n
1
2
cd /usr/share/fonts/myfonts
mkfontscale && mkfontdir && fc-cache -fv
\n

6、验证结果

\n
    \n
  • 验证字体是否安装成功
  • \n
\n
1
fc-list :lang=zh
\n"},{"title":"Linux上Pandoc的使用","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/QQ%E6%88%AA%E5%9B%BE20230819015436.png","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"Linux,安装,centos","swiper_index":3,"abbrlink":"557acb69","date":"2023-08-09T10:25:15.000Z","_content":"\n{% note info simple %}如果你需要在不同的文件格式之间相互转换,多半听说或使用过文档转换的瑞士军刀——Pandoc。事实上,不仅人类知道 Pandoc,最近很火的人工智能 ChatGPT 也知道「将 Markdown 转换为 docx」,首选方案是使用 Pandoc。{% endnote %}\n{% link Pandoc 官网, https://www.pandoc.org/, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/%E8%B7%AF%E5%BE%84.svg %}\n\n\n## 1 安装\n- 下载压缩包\n```BASH\nwget https://github.com/jgm/pandoc/releases/download/2.14.0.3/pandoc-2.14.0.3-linux-amd64.tar.gz\n```\n\n- 解压\n```BASH\ntar -xvf pandoc-2.14.0.3-linux-amd64.tar.gz\n```\n\n- 建立软链接\n```BASH\nln -s /root/pandoc-2.14.0.3/bin/pandoc /usr/bin/pandoc\n```\n\n- latex引擎安装\n```BASH\nyum install texlive-xetex\n```\n\n- 查看版本\n```BASH\npandoc -v \n```\n\n## 2 使用\n{% tip success %}To see the output created by each of the commands below, click on the name of the output file:\n{% endtip %}\n\n- HTML fragment\n```BASH\npandoc MANUAL.txt -o example1.html\n```\n\n- Standalone HTML file\n```BASH\npandoc -s MANUAL.txt -o example2.html\n```\n\n- HTML with table of contents, CSS, and custom footer\n```BASH\npandoc -s --toc -c pandoc.css -A footer.html MANUAL.txt -o example3.html\n```\n- LaTeX\n```BASH\npandoc -s MANUAL.txt -o example4.tex\n```\n- From LaTeX to markdown\n```BASH\npandoc -s example4.tex -o example5.text\n```\n- reStructuredText\n```BASH\npandoc -s -t rst --toc MANUAL.txt -o example6.text\n```\n- Rich text format (RTF)\n```BASH\npandoc -s MANUAL.txt -o example7.rtf\n```\n- Beamer slide show\n```BASH\npandoc -t beamer SLIDES -o example8.pdf\n```\n- DocBook XML\n```BASH\npandoc -s -t docbook MANUAL.txt -o example9.db\n```\n- Man page\n```BASH\npandoc -s -t man pandoc.1.md -o example10.1\n```\n- ConTeXt\n```BASH\npandoc -s -t context MANUAL.txt -o example11.tex\n```\n- Converting a web page to markdown\n```BASH\npandoc -s -r html http://www.gnu.org/software/make/ -o example12.text\n```\n- From markdown to PDF\n```BASH\npandoc MANUAL.txt --pdf-engine=xelatex -o example13.pdf\n```\n- PDF with numbered sections and a custom LaTeX header\n```BASH\npandoc -N --variable \"geometry=margin=1.2in\" --variable mainfont=\"Palatino\" --variable sansfont=\"Helvetica\" --variable monofont=\"Menlo\" --variable fontsize=12pt --variable version=2.0 MANUAL.txt --include-in-header fancyheaders.tex --pdf-engine=lualatex --toc -o example14.pdf\n```\n- ipynb (Jupyter notebook)\n```BASH\npandoc example15.md -o example15.ipynb\n```\n- HTML slide shows\n```BASH\npandoc -s --mathml -i -t dzslides SLIDES -o example16a.html\n\npandoc -s --webtex -i -t slidy SLIDES -o example16b.html\n\npandoc -s --mathjax -i -t revealjs SLIDES -o example16d.html\n```\n- TeX math in HTML\n```BASH\npandoc math.text -s -o mathDefault.html\n\npandoc math.text -s --mathml -o mathMathML.html\n\npandoc math.text -s --webtex -o mathWebTeX.html\n\npandoc math.text -s --mathjax -o mathMathJax.html\n\npandoc math.text -s --katex -o mathKaTeX.html\n```\n- Syntax highlighting of delimited code blocks\n```BASH\npandoc code.text -s --highlight-style pygments -o example18a.html\n\npandoc code.text -s --highlight-style kate -o example18b.html\n\npandoc code.text -s --highlight-style monochrome -o example18c.html\n\npandoc code.text -s --highlight-style espresso -o example18d.html\n\npandoc code.text -s --highlight-style haddock -o example18e.html\n\npandoc code.text -s --highlight-style tango -o example18f.html\n\npandoc code.text -s --highlight-style zenburn -o example18g.html\n```\n- GNU Texinfo\n```BASH\npandoc MANUAL.txt -s -o example19.texi\n```\n- OpenDocument XML\n```BASH\npandoc MANUAL.txt -s -t opendocument -o example20.xml\n```\n- ODT (OpenDocument Text, readable by OpenOffice)\n```BASH\npandoc MANUAL.txt -o example21.odt\n```\n- MediaWiki markup\n```BASH\npandoc -s -t mediawiki --toc MANUAL.txt -o example22.wiki\n```\n- EPUB ebook\n```BASH\npandoc MANUAL.txt -o MANUAL.epub\n```\n- Markdown citations\n```BASH\npandoc -s --bibliography biblio.bib --citeproc CITATIONS -o example24a.html\n\npandoc -s --bibliography biblio.json --citeproc --csl chicago-fullnote-bibliography.csl CITATIONS -o example24b.html\n\npandoc -s --bibliography biblio.yaml --citeproc --csl ieee.csl CITATIONS -t man -o example24c.1\n```\n- Textile writer\n```BASH\npandoc -s MANUAL.txt -t textile -o example25.textile\n```\n- Textile reader\n```BASH\npandoc -s example25.textile -f textile -t html -o example26.html\n```\n- Org-mode\n```BASH\npandoc -s MANUAL.txt -o example27.org\n```\n- AsciiDoc\n```BASH\npandoc -s MANUAL.txt -t asciidoc -o example28.txt\n```\n- Word docx\n```BASH\npandoc -s MANUAL.txt -o example29.docx\n```\n- LaTeX math to docx\n```BASH\npandoc -s math.tex -o example30.docx\n```\n- DocBook to markdown\n```BASH\npandoc -f docbook -t markdown -s howto.xml -o example31.text\n```\n- MediaWiki to html5\n```BASH\npandoc -f mediawiki -t html5 -s haskell.wiki -o example32.html\n```\n- Chunked HTML\n```BASH\npandoc -t chunkedhtml --split-level=2 --toc --toc-depth=2 --number-sections -o example33 MANUAL.txt\n```\n- Docx with a reference docx\n```BASH\npandoc --reference-doc twocolumns.docx -o UsersGuide.docx MANUAL.txt\n```\n- Docx to markdown, including math\n```BASH\npandoc -s example30.docx -t markdown -o example35.md\n```\n- EPUB to plain text\n```BASH\npandoc MANUAL.epub -t plain -o example36.text\n```\n- Using a template to produce a table from structured data\n```BASH\npandoc fishwatch.yaml -t rst --template fishtable.rst -o fish.rst # see also the partial species.rst\n```\n- Converting a bibliography from BibTeX to CSL JSON\n```BASH\npandoc biblio.bib -t csljson -o biblio2.json\n```\n- Producing a formatted version of a bibliography\n```BASH\npandoc biblio.bib --citeproc --csl ieee.csl -s -o biblio.html\n```\n\n## 3 中文乱码问题\n\n中文乱码问题,大多与字体有关,解决方案详见文章\n{% link Linux 系统字体安装, https://tankenqi.cn/posts/2de821dc/, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20201027105140931.png %}\n\n","source":"_posts/Linux上Pandoc的使用.md","raw":"---\ntitle: Linux上Pandoc的使用\ncover: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/QQ%E6%88%AA%E5%9B%BE20230819015436.png'\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'Linux,安装,centos'\ncategories:\n - Linux\ntags:\n - Linux\n - Pandoc\n - 软件安装\nswiper_index: 3\nabbrlink: 557acb69\ndate: 2023-08-09 18:25:15\n---\n\n{% note info simple %}如果你需要在不同的文件格式之间相互转换,多半听说或使用过文档转换的瑞士军刀——Pandoc。事实上,不仅人类知道 Pandoc,最近很火的人工智能 ChatGPT 也知道「将 Markdown 转换为 docx」,首选方案是使用 Pandoc。{% endnote %}\n{% link Pandoc 官网, https://www.pandoc.org/, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/%E8%B7%AF%E5%BE%84.svg %}\n\n\n## 1 安装\n- 下载压缩包\n```BASH\nwget https://github.com/jgm/pandoc/releases/download/2.14.0.3/pandoc-2.14.0.3-linux-amd64.tar.gz\n```\n\n- 解压\n```BASH\ntar -xvf pandoc-2.14.0.3-linux-amd64.tar.gz\n```\n\n- 建立软链接\n```BASH\nln -s /root/pandoc-2.14.0.3/bin/pandoc /usr/bin/pandoc\n```\n\n- latex引擎安装\n```BASH\nyum install texlive-xetex\n```\n\n- 查看版本\n```BASH\npandoc -v \n```\n\n## 2 使用\n{% tip success %}To see the output created by each of the commands below, click on the name of the output file:\n{% endtip %}\n\n- HTML fragment\n```BASH\npandoc MANUAL.txt -o example1.html\n```\n\n- Standalone HTML file\n```BASH\npandoc -s MANUAL.txt -o example2.html\n```\n\n- HTML with table of contents, CSS, and custom footer\n```BASH\npandoc -s --toc -c pandoc.css -A footer.html MANUAL.txt -o example3.html\n```\n- LaTeX\n```BASH\npandoc -s MANUAL.txt -o example4.tex\n```\n- From LaTeX to markdown\n```BASH\npandoc -s example4.tex -o example5.text\n```\n- reStructuredText\n```BASH\npandoc -s -t rst --toc MANUAL.txt -o example6.text\n```\n- Rich text format (RTF)\n```BASH\npandoc -s MANUAL.txt -o example7.rtf\n```\n- Beamer slide show\n```BASH\npandoc -t beamer SLIDES -o example8.pdf\n```\n- DocBook XML\n```BASH\npandoc -s -t docbook MANUAL.txt -o example9.db\n```\n- Man page\n```BASH\npandoc -s -t man pandoc.1.md -o example10.1\n```\n- ConTeXt\n```BASH\npandoc -s -t context MANUAL.txt -o example11.tex\n```\n- Converting a web page to markdown\n```BASH\npandoc -s -r html http://www.gnu.org/software/make/ -o example12.text\n```\n- From markdown to PDF\n```BASH\npandoc MANUAL.txt --pdf-engine=xelatex -o example13.pdf\n```\n- PDF with numbered sections and a custom LaTeX header\n```BASH\npandoc -N --variable \"geometry=margin=1.2in\" --variable mainfont=\"Palatino\" --variable sansfont=\"Helvetica\" --variable monofont=\"Menlo\" --variable fontsize=12pt --variable version=2.0 MANUAL.txt --include-in-header fancyheaders.tex --pdf-engine=lualatex --toc -o example14.pdf\n```\n- ipynb (Jupyter notebook)\n```BASH\npandoc example15.md -o example15.ipynb\n```\n- HTML slide shows\n```BASH\npandoc -s --mathml -i -t dzslides SLIDES -o example16a.html\n\npandoc -s --webtex -i -t slidy SLIDES -o example16b.html\n\npandoc -s --mathjax -i -t revealjs SLIDES -o example16d.html\n```\n- TeX math in HTML\n```BASH\npandoc math.text -s -o mathDefault.html\n\npandoc math.text -s --mathml -o mathMathML.html\n\npandoc math.text -s --webtex -o mathWebTeX.html\n\npandoc math.text -s --mathjax -o mathMathJax.html\n\npandoc math.text -s --katex -o mathKaTeX.html\n```\n- Syntax highlighting of delimited code blocks\n```BASH\npandoc code.text -s --highlight-style pygments -o example18a.html\n\npandoc code.text -s --highlight-style kate -o example18b.html\n\npandoc code.text -s --highlight-style monochrome -o example18c.html\n\npandoc code.text -s --highlight-style espresso -o example18d.html\n\npandoc code.text -s --highlight-style haddock -o example18e.html\n\npandoc code.text -s --highlight-style tango -o example18f.html\n\npandoc code.text -s --highlight-style zenburn -o example18g.html\n```\n- GNU Texinfo\n```BASH\npandoc MANUAL.txt -s -o example19.texi\n```\n- OpenDocument XML\n```BASH\npandoc MANUAL.txt -s -t opendocument -o example20.xml\n```\n- ODT (OpenDocument Text, readable by OpenOffice)\n```BASH\npandoc MANUAL.txt -o example21.odt\n```\n- MediaWiki markup\n```BASH\npandoc -s -t mediawiki --toc MANUAL.txt -o example22.wiki\n```\n- EPUB ebook\n```BASH\npandoc MANUAL.txt -o MANUAL.epub\n```\n- Markdown citations\n```BASH\npandoc -s --bibliography biblio.bib --citeproc CITATIONS -o example24a.html\n\npandoc -s --bibliography biblio.json --citeproc --csl chicago-fullnote-bibliography.csl CITATIONS -o example24b.html\n\npandoc -s --bibliography biblio.yaml --citeproc --csl ieee.csl CITATIONS -t man -o example24c.1\n```\n- Textile writer\n```BASH\npandoc -s MANUAL.txt -t textile -o example25.textile\n```\n- Textile reader\n```BASH\npandoc -s example25.textile -f textile -t html -o example26.html\n```\n- Org-mode\n```BASH\npandoc -s MANUAL.txt -o example27.org\n```\n- AsciiDoc\n```BASH\npandoc -s MANUAL.txt -t asciidoc -o example28.txt\n```\n- Word docx\n```BASH\npandoc -s MANUAL.txt -o example29.docx\n```\n- LaTeX math to docx\n```BASH\npandoc -s math.tex -o example30.docx\n```\n- DocBook to markdown\n```BASH\npandoc -f docbook -t markdown -s howto.xml -o example31.text\n```\n- MediaWiki to html5\n```BASH\npandoc -f mediawiki -t html5 -s haskell.wiki -o example32.html\n```\n- Chunked HTML\n```BASH\npandoc -t chunkedhtml --split-level=2 --toc --toc-depth=2 --number-sections -o example33 MANUAL.txt\n```\n- Docx with a reference docx\n```BASH\npandoc --reference-doc twocolumns.docx -o UsersGuide.docx MANUAL.txt\n```\n- Docx to markdown, including math\n```BASH\npandoc -s example30.docx -t markdown -o example35.md\n```\n- EPUB to plain text\n```BASH\npandoc MANUAL.epub -t plain -o example36.text\n```\n- Using a template to produce a table from structured data\n```BASH\npandoc fishwatch.yaml -t rst --template fishtable.rst -o fish.rst # see also the partial species.rst\n```\n- Converting a bibliography from BibTeX to CSL JSON\n```BASH\npandoc biblio.bib -t csljson -o biblio2.json\n```\n- Producing a formatted version of a bibliography\n```BASH\npandoc biblio.bib --citeproc --csl ieee.csl -s -o biblio.html\n```\n\n## 3 中文乱码问题\n\n中文乱码问题,大多与字体有关,解决方案详见文章\n{% link Linux 系统字体安装, https://tankenqi.cn/posts/2de821dc/, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20201027105140931.png %}\n\n","slug":"Linux上Pandoc的使用","published":1,"updated":"2023-10-22T04:53:40.814Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyrtu000o2j3u2x152fj6","content":"

如果你需要在不同的文件格式之间相互转换,多半听说或使用过文档转换的瑞士军刀——Pandoc。事实上,不仅人类知道 Pandoc,最近很火的人工智能 ChatGPT 也知道「将 Markdown 转换为 docx」,首选方案是使用 Pandoc。

\n
\n\n

1 安装

\n
    \n
  • 下载压缩包
  • \n
\n
1
wget https://github.com/jgm/pandoc/releases/download/2.14.0.3/pandoc-2.14.0.3-linux-amd64.tar.gz
\n
    \n
  • 解压
  • \n
\n
1
tar -xvf pandoc-2.14.0.3-linux-amd64.tar.gz
\n
    \n
  • 建立软链接
  • \n
\n
1
ln -s /root/pandoc-2.14.0.3/bin/pandoc /usr/bin/pandoc
\n
    \n
  • latex引擎安装
  • \n
\n
1
yum install texlive-xetex
\n
    \n
  • 查看版本
  • \n
\n
1
pandoc -v 
\n

2 使用

\n

To see the output created by each of the commands below, click on the name of the output file:

\n
\n
    \n
  • HTML fragment
  • \n
\n
1
pandoc MANUAL.txt -o example1.html
\n
    \n
  • Standalone HTML file
  • \n
\n
1
pandoc -s MANUAL.txt -o example2.html
\n
    \n
  • HTML with table of contents, CSS, and custom footer
  • \n
\n
1
pandoc -s --toc -c pandoc.css -A footer.html MANUAL.txt -o example3.html
\n
    \n
  • LaTeX
  • \n
\n
1
pandoc -s MANUAL.txt -o example4.tex
\n
    \n
  • From LaTeX to markdown
  • \n
\n
1
pandoc -s example4.tex -o example5.text
\n
    \n
  • reStructuredText
  • \n
\n
1
pandoc -s -t rst --toc MANUAL.txt -o example6.text
\n
    \n
  • Rich text format (RTF)
  • \n
\n
1
pandoc -s MANUAL.txt -o example7.rtf
\n
    \n
  • Beamer slide show
  • \n
\n
1
pandoc -t beamer SLIDES -o example8.pdf
\n
    \n
  • DocBook XML
  • \n
\n
1
pandoc -s -t docbook MANUAL.txt -o example9.db
\n
    \n
  • Man page
  • \n
\n
1
pandoc -s -t man pandoc.1.md -o example10.1
\n
    \n
  • ConTeXt
  • \n
\n
1
pandoc -s -t context MANUAL.txt -o example11.tex
\n
    \n
  • Converting a web page to markdown
  • \n
\n
1
pandoc -s -r html http://www.gnu.org/software/make/ -o example12.text
\n
    \n
  • From markdown to PDF
  • \n
\n
1
pandoc MANUAL.txt --pdf-engine=xelatex -o example13.pdf
\n
    \n
  • PDF with numbered sections and a custom LaTeX header
  • \n
\n
1
pandoc -N --variable "geometry=margin=1.2in" --variable mainfont="Palatino" --variable sansfont="Helvetica" --variable monofont="Menlo" --variable fontsize=12pt --variable version=2.0 MANUAL.txt --include-in-header fancyheaders.tex --pdf-engine=lualatex --toc -o example14.pdf
\n
    \n
  • ipynb (Jupyter notebook)
  • \n
\n
1
pandoc example15.md -o example15.ipynb
\n
    \n
  • HTML slide shows
  • \n
\n
1
2
3
4
5
pandoc -s --mathml -i -t dzslides SLIDES -o example16a.html

pandoc -s --webtex -i -t slidy SLIDES -o example16b.html

pandoc -s --mathjax -i -t revealjs SLIDES -o example16d.html
\n
    \n
  • TeX math in HTML
  • \n
\n
1
2
3
4
5
6
7
8
9
pandoc math.text -s -o mathDefault.html

pandoc math.text -s --mathml -o mathMathML.html

pandoc math.text -s --webtex -o mathWebTeX.html

pandoc math.text -s --mathjax -o mathMathJax.html

pandoc math.text -s --katex -o mathKaTeX.html
\n
    \n
  • Syntax highlighting of delimited code blocks
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
pandoc code.text -s --highlight-style pygments -o example18a.html

pandoc code.text -s --highlight-style kate -o example18b.html

pandoc code.text -s --highlight-style monochrome -o example18c.html

pandoc code.text -s --highlight-style espresso -o example18d.html

pandoc code.text -s --highlight-style haddock -o example18e.html

pandoc code.text -s --highlight-style tango -o example18f.html

pandoc code.text -s --highlight-style zenburn -o example18g.html
\n
    \n
  • GNU Texinfo
  • \n
\n
1
pandoc MANUAL.txt -s -o example19.texi
\n
    \n
  • OpenDocument XML
  • \n
\n
1
pandoc MANUAL.txt -s -t opendocument -o example20.xml
\n
    \n
  • ODT (OpenDocument Text, readable by OpenOffice)
  • \n
\n
1
pandoc MANUAL.txt -o example21.odt
\n
    \n
  • MediaWiki markup
  • \n
\n
1
pandoc -s -t mediawiki --toc MANUAL.txt -o example22.wiki
\n
    \n
  • EPUB ebook
  • \n
\n
1
pandoc MANUAL.txt -o MANUAL.epub
\n
    \n
  • Markdown citations
  • \n
\n
1
2
3
4
5
pandoc -s --bibliography biblio.bib --citeproc CITATIONS -o example24a.html

pandoc -s --bibliography biblio.json --citeproc --csl chicago-fullnote-bibliography.csl CITATIONS -o example24b.html

pandoc -s --bibliography biblio.yaml --citeproc --csl ieee.csl CITATIONS -t man -o example24c.1
\n
    \n
  • Textile writer
  • \n
\n
1
pandoc -s MANUAL.txt -t textile -o example25.textile
\n
    \n
  • Textile reader
  • \n
\n
1
pandoc -s example25.textile -f textile -t html -o example26.html
\n
    \n
  • Org-mode
  • \n
\n
1
pandoc -s MANUAL.txt -o example27.org
\n
    \n
  • AsciiDoc
  • \n
\n
1
pandoc -s MANUAL.txt -t asciidoc -o example28.txt
\n
    \n
  • Word docx
  • \n
\n
1
pandoc -s MANUAL.txt -o example29.docx
\n
    \n
  • LaTeX math to docx
  • \n
\n
1
pandoc -s math.tex -o example30.docx
\n
    \n
  • DocBook to markdown
  • \n
\n
1
pandoc -f docbook -t markdown -s howto.xml -o example31.text
\n
    \n
  • MediaWiki to html5
  • \n
\n
1
pandoc -f mediawiki -t html5 -s haskell.wiki -o example32.html
\n
    \n
  • Chunked HTML
  • \n
\n
1
pandoc -t chunkedhtml --split-level=2 --toc --toc-depth=2 --number-sections -o example33 MANUAL.txt
\n
    \n
  • Docx with a reference docx
  • \n
\n
1
pandoc --reference-doc twocolumns.docx -o UsersGuide.docx MANUAL.txt
\n
    \n
  • Docx to markdown, including math
  • \n
\n
1
pandoc -s example30.docx -t markdown -o example35.md
\n
    \n
  • EPUB to plain text
  • \n
\n
1
pandoc MANUAL.epub -t plain -o example36.text
\n
    \n
  • Using a template to produce a table from structured data
  • \n
\n
1
pandoc fishwatch.yaml -t rst --template fishtable.rst -o fish.rst # see also the partial species.rst
\n
    \n
  • Converting a bibliography from BibTeX to CSL JSON
  • \n
\n
1
pandoc biblio.bib -t csljson -o biblio2.json
\n
    \n
  • Producing a formatted version of a bibliography
  • \n
\n
1
pandoc biblio.bib --citeproc --csl ieee.csl -s -o biblio.html
\n

3 中文乱码问题

\n

中文乱码问题,大多与字体有关,解决方案详见文章

\n\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":4229,"excerpt":"","more":"

如果你需要在不同的文件格式之间相互转换,多半听说或使用过文档转换的瑞士军刀——Pandoc。事实上,不仅人类知道 Pandoc,最近很火的人工智能 ChatGPT 也知道「将 Markdown 转换为 docx」,首选方案是使用 Pandoc。

\n
\n\n

1 安装

\n
    \n
  • 下载压缩包
  • \n
\n
1
wget https://github.com/jgm/pandoc/releases/download/2.14.0.3/pandoc-2.14.0.3-linux-amd64.tar.gz
\n
    \n
  • 解压
  • \n
\n
1
tar -xvf pandoc-2.14.0.3-linux-amd64.tar.gz
\n
    \n
  • 建立软链接
  • \n
\n
1
ln -s /root/pandoc-2.14.0.3/bin/pandoc /usr/bin/pandoc
\n
    \n
  • latex引擎安装
  • \n
\n
1
yum install texlive-xetex
\n
    \n
  • 查看版本
  • \n
\n
1
pandoc -v 
\n

2 使用

\n

To see the output created by each of the commands below, click on the name of the output file:

\n
\n
    \n
  • HTML fragment
  • \n
\n
1
pandoc MANUAL.txt -o example1.html
\n
    \n
  • Standalone HTML file
  • \n
\n
1
pandoc -s MANUAL.txt -o example2.html
\n
    \n
  • HTML with table of contents, CSS, and custom footer
  • \n
\n
1
pandoc -s --toc -c pandoc.css -A footer.html MANUAL.txt -o example3.html
\n
    \n
  • LaTeX
  • \n
\n
1
pandoc -s MANUAL.txt -o example4.tex
\n
    \n
  • From LaTeX to markdown
  • \n
\n
1
pandoc -s example4.tex -o example5.text
\n
    \n
  • reStructuredText
  • \n
\n
1
pandoc -s -t rst --toc MANUAL.txt -o example6.text
\n
    \n
  • Rich text format (RTF)
  • \n
\n
1
pandoc -s MANUAL.txt -o example7.rtf
\n
    \n
  • Beamer slide show
  • \n
\n
1
pandoc -t beamer SLIDES -o example8.pdf
\n
    \n
  • DocBook XML
  • \n
\n
1
pandoc -s -t docbook MANUAL.txt -o example9.db
\n
    \n
  • Man page
  • \n
\n
1
pandoc -s -t man pandoc.1.md -o example10.1
\n
    \n
  • ConTeXt
  • \n
\n
1
pandoc -s -t context MANUAL.txt -o example11.tex
\n
    \n
  • Converting a web page to markdown
  • \n
\n
1
pandoc -s -r html http://www.gnu.org/software/make/ -o example12.text
\n
    \n
  • From markdown to PDF
  • \n
\n
1
pandoc MANUAL.txt --pdf-engine=xelatex -o example13.pdf
\n
    \n
  • PDF with numbered sections and a custom LaTeX header
  • \n
\n
1
pandoc -N --variable "geometry=margin=1.2in" --variable mainfont="Palatino" --variable sansfont="Helvetica" --variable monofont="Menlo" --variable fontsize=12pt --variable version=2.0 MANUAL.txt --include-in-header fancyheaders.tex --pdf-engine=lualatex --toc -o example14.pdf
\n
    \n
  • ipynb (Jupyter notebook)
  • \n
\n
1
pandoc example15.md -o example15.ipynb
\n
    \n
  • HTML slide shows
  • \n
\n
1
2
3
4
5
pandoc -s --mathml -i -t dzslides SLIDES -o example16a.html

pandoc -s --webtex -i -t slidy SLIDES -o example16b.html

pandoc -s --mathjax -i -t revealjs SLIDES -o example16d.html
\n
    \n
  • TeX math in HTML
  • \n
\n
1
2
3
4
5
6
7
8
9
pandoc math.text -s -o mathDefault.html

pandoc math.text -s --mathml -o mathMathML.html

pandoc math.text -s --webtex -o mathWebTeX.html

pandoc math.text -s --mathjax -o mathMathJax.html

pandoc math.text -s --katex -o mathKaTeX.html
\n
    \n
  • Syntax highlighting of delimited code blocks
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
pandoc code.text -s --highlight-style pygments -o example18a.html

pandoc code.text -s --highlight-style kate -o example18b.html

pandoc code.text -s --highlight-style monochrome -o example18c.html

pandoc code.text -s --highlight-style espresso -o example18d.html

pandoc code.text -s --highlight-style haddock -o example18e.html

pandoc code.text -s --highlight-style tango -o example18f.html

pandoc code.text -s --highlight-style zenburn -o example18g.html
\n
    \n
  • GNU Texinfo
  • \n
\n
1
pandoc MANUAL.txt -s -o example19.texi
\n
    \n
  • OpenDocument XML
  • \n
\n
1
pandoc MANUAL.txt -s -t opendocument -o example20.xml
\n
    \n
  • ODT (OpenDocument Text, readable by OpenOffice)
  • \n
\n
1
pandoc MANUAL.txt -o example21.odt
\n
    \n
  • MediaWiki markup
  • \n
\n
1
pandoc -s -t mediawiki --toc MANUAL.txt -o example22.wiki
\n
    \n
  • EPUB ebook
  • \n
\n
1
pandoc MANUAL.txt -o MANUAL.epub
\n
    \n
  • Markdown citations
  • \n
\n
1
2
3
4
5
pandoc -s --bibliography biblio.bib --citeproc CITATIONS -o example24a.html

pandoc -s --bibliography biblio.json --citeproc --csl chicago-fullnote-bibliography.csl CITATIONS -o example24b.html

pandoc -s --bibliography biblio.yaml --citeproc --csl ieee.csl CITATIONS -t man -o example24c.1
\n
    \n
  • Textile writer
  • \n
\n
1
pandoc -s MANUAL.txt -t textile -o example25.textile
\n
    \n
  • Textile reader
  • \n
\n
1
pandoc -s example25.textile -f textile -t html -o example26.html
\n
    \n
  • Org-mode
  • \n
\n
1
pandoc -s MANUAL.txt -o example27.org
\n
    \n
  • AsciiDoc
  • \n
\n
1
pandoc -s MANUAL.txt -t asciidoc -o example28.txt
\n
    \n
  • Word docx
  • \n
\n
1
pandoc -s MANUAL.txt -o example29.docx
\n
    \n
  • LaTeX math to docx
  • \n
\n
1
pandoc -s math.tex -o example30.docx
\n
    \n
  • DocBook to markdown
  • \n
\n
1
pandoc -f docbook -t markdown -s howto.xml -o example31.text
\n
    \n
  • MediaWiki to html5
  • \n
\n
1
pandoc -f mediawiki -t html5 -s haskell.wiki -o example32.html
\n
    \n
  • Chunked HTML
  • \n
\n
1
pandoc -t chunkedhtml --split-level=2 --toc --toc-depth=2 --number-sections -o example33 MANUAL.txt
\n
    \n
  • Docx with a reference docx
  • \n
\n
1
pandoc --reference-doc twocolumns.docx -o UsersGuide.docx MANUAL.txt
\n
    \n
  • Docx to markdown, including math
  • \n
\n
1
pandoc -s example30.docx -t markdown -o example35.md
\n
    \n
  • EPUB to plain text
  • \n
\n
1
pandoc MANUAL.epub -t plain -o example36.text
\n
    \n
  • Using a template to produce a table from structured data
  • \n
\n
1
pandoc fishwatch.yaml -t rst --template fishtable.rst -o fish.rst # see also the partial species.rst
\n
    \n
  • Converting a bibliography from BibTeX to CSL JSON
  • \n
\n
1
pandoc biblio.bib -t csljson -o biblio2.json
\n
    \n
  • Producing a formatted version of a bibliography
  • \n
\n
1
pandoc biblio.bib --citeproc --csl ieee.csl -s -o biblio.html
\n

3 中文乱码问题

\n

中文乱码问题,大多与字体有关,解决方案详见文章

\n\n"},{"title":"Linux安装Clash – 代理 – VPN","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D19750327%2C3266188780%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"Linux,安装,VPN","date":"2023-08-01T10:25:15.000Z","abbrlink":"438a2103","_content":"\n### 1 什么是Clash?\n\n![78805a221a988e7-44](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/78805a221a988e7-44.png)\n\n\n\nClash 是一个跨平台的基于规则的代理实用程序,运行在网络和应用层,支持开箱即用的各种代理和反审查协议。\n\nClash 的使用对普通用户来说可能具有挑战性。那些可能想考虑改用 GUI 客户端,我们确实有一些建议:\n\n- [Windows 版 Clash](https://github.com/Fndroid/clash_for_windows_pkg/releases)(Windows 和 macOS)\n- [安卓版 Clash](https://github.com/Kr328/ClashForAndroid)\n- [ClashX](https://github.com/yichengchen/clashX) 或者 [ClashX Pro](https://install.appcenter.ms/users/clashx/apps/clashx-pro/distribution_groups/public) (macOS)\n\n\n\n### 2 安装Linux Clash\n\n#### 2.1 下载Clash\n\n- 下载链接:https://github.com/Dreamacro/clash/releases\n\n![image-20230906191333077](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230906191333077.png)\n\n\n\n#### 2.2 上传至Linux服务器\n\n- 创建文件夹\n\n```BASH\nmkdir /opt/clash && cd /opt/clash\n```\n\n- 上传或移动\n\n```BASH\nmv clash-linux-386-v1.16.0 /opt/clash/clash\n```\n\n\n\n#### 2.3 解压Clash\n\n```BASH\ngunzip clash-linux-386-v1.16.0.gz\n```\n\n\n\n#### 2.4 文件夹授权\n\n```BASH\nchmod +x clash\n```\n\n\n\n### 3 设置Clash的配置\n\n注:clash默认读取的配置文件位置在:`~/.config/clash/`\n\n#### 3.1 设置配置文件\n\n- 创建一个文件夹:放置我们的Clash配置文件\n\n```BASH\nmkdir ~/.config/clash/ && cd ~/.config/clash/ \n```\n\n- 获取配置文件\n\n如果没法直接下载,从PC电脑获取到Windows本地Clash的`yaml`、`mmdb`文件放到服务器的`./config/clash/`下面亦可,`yaml`文件命名为`config.yaml`、`mmdb`文件命名为:`Country.mmdb`\n\n```BASH\nsudo wget -O config.yaml \"yaml下载链接\"\nsudo wget -O XXX.mmdb \"mmdb下载链接\"\n```\n\n`yaml `文件大致内容如:\n\n```yaml\nmixed-port: 7890\nallow-lan: true\nbind-address: '*'\nmode: rule\nlog-level: info\nexternal-controller: '127.0.0.1:9090'\ndns:\n enable: true\n ......\n```\n\n\n\n### 4 启动服务\n\n- 直接启动我们的`./clash`即可\n\n```bash\n[root@VM-4-12-centos clash]# ./clash \nINFO[0000] Start initial compatible provider 自动选择 \nINFO[0000] Start initial compatible provider FreeGecko \nINFO[0000] Start initial compatible provider 故障转移 \nINFO[0000] RESTful API listening at: 127.0.0.1:34567 \nINFO[0000] Mixed(http+socks) proxy listening at: [::]:7890\n```\n\n","source":"_posts/Linux安装Clash – 代理 – VPN.md","raw":"---\ntitle: Linux安装Clash – 代理 – VPN\ncover: >-\n https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D19750327%2C3266188780%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'Linux,安装,VPN'\ncategories:\n - Linux\ntags:\n - Linux\n - Clash\n - 软件安装\n - VPN\ndate: '2023-08-01 18:25:15'\nabbrlink: 438a2103\n---\n\n### 1 什么是Clash?\n\n![78805a221a988e7-44](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/78805a221a988e7-44.png)\n\n\n\nClash 是一个跨平台的基于规则的代理实用程序,运行在网络和应用层,支持开箱即用的各种代理和反审查协议。\n\nClash 的使用对普通用户来说可能具有挑战性。那些可能想考虑改用 GUI 客户端,我们确实有一些建议:\n\n- [Windows 版 Clash](https://github.com/Fndroid/clash_for_windows_pkg/releases)(Windows 和 macOS)\n- [安卓版 Clash](https://github.com/Kr328/ClashForAndroid)\n- [ClashX](https://github.com/yichengchen/clashX) 或者 [ClashX Pro](https://install.appcenter.ms/users/clashx/apps/clashx-pro/distribution_groups/public) (macOS)\n\n\n\n### 2 安装Linux Clash\n\n#### 2.1 下载Clash\n\n- 下载链接:https://github.com/Dreamacro/clash/releases\n\n![image-20230906191333077](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230906191333077.png)\n\n\n\n#### 2.2 上传至Linux服务器\n\n- 创建文件夹\n\n```BASH\nmkdir /opt/clash && cd /opt/clash\n```\n\n- 上传或移动\n\n```BASH\nmv clash-linux-386-v1.16.0 /opt/clash/clash\n```\n\n\n\n#### 2.3 解压Clash\n\n```BASH\ngunzip clash-linux-386-v1.16.0.gz\n```\n\n\n\n#### 2.4 文件夹授权\n\n```BASH\nchmod +x clash\n```\n\n\n\n### 3 设置Clash的配置\n\n注:clash默认读取的配置文件位置在:`~/.config/clash/`\n\n#### 3.1 设置配置文件\n\n- 创建一个文件夹:放置我们的Clash配置文件\n\n```BASH\nmkdir ~/.config/clash/ && cd ~/.config/clash/ \n```\n\n- 获取配置文件\n\n如果没法直接下载,从PC电脑获取到Windows本地Clash的`yaml`、`mmdb`文件放到服务器的`./config/clash/`下面亦可,`yaml`文件命名为`config.yaml`、`mmdb`文件命名为:`Country.mmdb`\n\n```BASH\nsudo wget -O config.yaml \"yaml下载链接\"\nsudo wget -O XXX.mmdb \"mmdb下载链接\"\n```\n\n`yaml `文件大致内容如:\n\n```yaml\nmixed-port: 7890\nallow-lan: true\nbind-address: '*'\nmode: rule\nlog-level: info\nexternal-controller: '127.0.0.1:9090'\ndns:\n enable: true\n ......\n```\n\n\n\n### 4 启动服务\n\n- 直接启动我们的`./clash`即可\n\n```bash\n[root@VM-4-12-centos clash]# ./clash \nINFO[0000] Start initial compatible provider 自动选择 \nINFO[0000] Start initial compatible provider FreeGecko \nINFO[0000] Start initial compatible provider 故障转移 \nINFO[0000] RESTful API listening at: 127.0.0.1:34567 \nINFO[0000] Mixed(http+socks) proxy listening at: [::]:7890\n```\n\n","slug":"Linux安装Clash – 代理 – VPN","published":1,"updated":"2023-10-24T08:38:15.650Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyrtu000t2j3uheml8yh3","content":"

1 什么是Clash?

\n

\"78805a221a988e7-44\"

\n

Clash 是一个跨平台的基于规则的代理实用程序,运行在网络和应用层,支持开箱即用的各种代理和反审查协议。

\n

Clash 的使用对普通用户来说可能具有挑战性。那些可能想考虑改用 GUI 客户端,我们确实有一些建议:

\n\n

2 安装Linux Clash

\n

2.1 下载Clash

\n\n

\"image-20230906191333077\"

\n

2.2 上传至Linux服务器

\n
    \n
  • 创建文件夹
  • \n
\n
1
mkdir /opt/clash && cd /opt/clash
\n
    \n
  • 上传或移动
  • \n
\n
1
mv clash-linux-386-v1.16.0 /opt/clash/clash
\n

2.3 解压Clash

\n
1
gunzip clash-linux-386-v1.16.0.gz
\n

2.4 文件夹授权

\n
1
chmod +x clash
\n

3 设置Clash的配置

\n

注:clash默认读取的配置文件位置在:~/.config/clash/

\n

3.1 设置配置文件

\n
    \n
  • 创建一个文件夹:放置我们的Clash配置文件
  • \n
\n
1
mkdir ~/.config/clash/ && cd ~/.config/clash/ 
\n
    \n
  • 获取配置文件
  • \n
\n

如果没法直接下载,从PC电脑获取到Windows本地Clash的yamlmmdb文件放到服务器的./config/clash/下面亦可,yaml文件命名为config.yamlmmdb文件命名为:Country.mmdb

\n
1
2
sudo wget -O config.yaml "yaml下载链接"
sudo wget -O XXX.mmdb "mmdb下载链接"
\n

yaml 文件大致内容如:

\n
1
2
3
4
5
6
7
8
9
mixed-port: 7890
allow-lan: true
bind-address: '*'
mode: rule
log-level: info
external-controller: '127.0.0.1:9090'
dns:
enable: true
......
\n

4 启动服务

\n
    \n
  • 直接启动我们的./clash即可
  • \n
\n
1
2
3
4
5
6
[root@VM-4-12-centos clash]# ./clash 
INFO[0000] Start initial compatible provider 自动选择
INFO[0000] Start initial compatible provider FreeGecko
INFO[0000] Start initial compatible provider 故障转移
INFO[0000] RESTful API listening at: 127.0.0.1:34567
INFO[0000] Mixed(http+socks) proxy listening at: [::]:7890
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":1201,"excerpt":"","more":"

1 什么是Clash?

\n

\"78805a221a988e7-44\"

\n

Clash 是一个跨平台的基于规则的代理实用程序,运行在网络和应用层,支持开箱即用的各种代理和反审查协议。

\n

Clash 的使用对普通用户来说可能具有挑战性。那些可能想考虑改用 GUI 客户端,我们确实有一些建议:

\n\n

2 安装Linux Clash

\n

2.1 下载Clash

\n\n

\"image-20230906191333077\"

\n

2.2 上传至Linux服务器

\n
    \n
  • 创建文件夹
  • \n
\n
1
mkdir /opt/clash && cd /opt/clash
\n
    \n
  • 上传或移动
  • \n
\n
1
mv clash-linux-386-v1.16.0 /opt/clash/clash
\n

2.3 解压Clash

\n
1
gunzip clash-linux-386-v1.16.0.gz
\n

2.4 文件夹授权

\n
1
chmod +x clash
\n

3 设置Clash的配置

\n

注:clash默认读取的配置文件位置在:~/.config/clash/

\n

3.1 设置配置文件

\n
    \n
  • 创建一个文件夹:放置我们的Clash配置文件
  • \n
\n
1
mkdir ~/.config/clash/ && cd ~/.config/clash/ 
\n
    \n
  • 获取配置文件
  • \n
\n

如果没法直接下载,从PC电脑获取到Windows本地Clash的yamlmmdb文件放到服务器的./config/clash/下面亦可,yaml文件命名为config.yamlmmdb文件命名为:Country.mmdb

\n
1
2
sudo wget -O config.yaml "yaml下载链接"
sudo wget -O XXX.mmdb "mmdb下载链接"
\n

yaml 文件大致内容如:

\n
1
2
3
4
5
6
7
8
9
mixed-port: 7890
allow-lan: true
bind-address: '*'
mode: rule
log-level: info
external-controller: '127.0.0.1:9090'
dns:
enable: true
......
\n

4 启动服务

\n
    \n
  • 直接启动我们的./clash即可
  • \n
\n
1
2
3
4
5
6
[root@VM-4-12-centos clash]# ./clash 
INFO[0000] Start initial compatible provider 自动选择
INFO[0000] Start initial compatible provider FreeGecko
INFO[0000] Start initial compatible provider 故障转移
INFO[0000] RESTful API listening at: 127.0.0.1:34567
INFO[0000] Mixed(http+socks) proxy listening at: [::]:7890
\n"},{"title":"Linux配置NFS共享存储服务器","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D4034267880%2C2110905682%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","abbrlink":"d154fd87","date":"2023-04-03T12:10:50.000Z","keywords":"Linux, NFS, 共享存储","swiper_index":4,"_content":"\n### 1. 安装 nfs-untils\n\n```bash\nyum -y install nfs-utils\n```\n\n### 2. 设置共享目录\n\n```bash[categoryBar.pug](..%2F..%2Fnode_modules%2Fhexo-theme-butterfly%2Flayout%2Fincludes%2FcategoryBar.pug)\nmkdir -p /data/publicDisk001\n# 授权\nchmod 777 /data/publicDisk001/\n\n# 修改文件,让10.0.0.0/24 这个网段的机器都能用\nvim /etc/exports\n\n/data/publicDisk001 10.0.0.0/24(rw,no_root_squash)\n```\n\n### 3. 启动广播和nfs\n\n```bash\nsystemctl start rpcbind\n\n# 启动nfs\nsystemctl start nfs\n# 若 centerOS8以上,则执行此命令启动 \nsudo service nfs-server start\n```\n\n### 4. 在同一网段下,另一个主机也安装 nfs 作为客户端\n\n```bash\nyum -y install nfs-utils\n# 启动nfs\nsystemctl start nfs\nsudo service nfs-server start\n```\n\n### 5. 挂载\n\n```bash\n# 新建目录\nmkdir -p /data/disk01\n\n# 挂载网盘到此路径\nmount -t nfs 10.0.0.204:/data/publicDisk001 /data/disk01\n```\n\n### 6. 查看挂载情况\n\n```bash\ndf -h\n```\n","source":"_posts/Linux配置NFS共享存储服务器.md","raw":"---\ntitle: Linux配置NFS共享存储服务器\ncover: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D4034267880%2C2110905682%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG'\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nabbrlink: d154fd87\ndate: 2023-04-03 20:10:50\nkeywords: Linux, NFS, 共享存储\ncategories:\n - Linux\ntags:\n - Linux\n - 存储\nswiper_index: 4 #置顶轮播图顺序,非负整数,数字越大越靠前\n---\n\n### 1. 安装 nfs-untils\n\n```bash\nyum -y install nfs-utils\n```\n\n### 2. 设置共享目录\n\n```bash[categoryBar.pug](..%2F..%2Fnode_modules%2Fhexo-theme-butterfly%2Flayout%2Fincludes%2FcategoryBar.pug)\nmkdir -p /data/publicDisk001\n# 授权\nchmod 777 /data/publicDisk001/\n\n# 修改文件,让10.0.0.0/24 这个网段的机器都能用\nvim /etc/exports\n\n/data/publicDisk001 10.0.0.0/24(rw,no_root_squash)\n```\n\n### 3. 启动广播和nfs\n\n```bash\nsystemctl start rpcbind\n\n# 启动nfs\nsystemctl start nfs\n# 若 centerOS8以上,则执行此命令启动 \nsudo service nfs-server start\n```\n\n### 4. 在同一网段下,另一个主机也安装 nfs 作为客户端\n\n```bash\nyum -y install nfs-utils\n# 启动nfs\nsystemctl start nfs\nsudo service nfs-server start\n```\n\n### 5. 挂载\n\n```bash\n# 新建目录\nmkdir -p /data/disk01\n\n# 挂载网盘到此路径\nmount -t nfs 10.0.0.204:/data/publicDisk001 /data/disk01\n```\n\n### 6. 查看挂载情况\n\n```bash\ndf -h\n```\n","slug":"Linux配置NFS共享存储服务器","published":1,"updated":"2023-10-21T04:52:34.025Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyrtv000x2j3u9gw5b8gt","content":"

1. 安装 nfs-untils

\n
1
yum -y install nfs-utils
\n

2. 设置共享目录

\n
1
2
3
4
5
6
7
8
mkdir -p /data/publicDisk001
# 授权
chmod 777 /data/publicDisk001/

# 修改文件,让10.0.0.0/24 这个网段的机器都能用
vim /etc/exports

/data/publicDisk001 10.0.0.0/24(rw,no_root_squash)
\n

3. 启动广播和nfs

\n
1
2
3
4
5
6
systemctl start rpcbind

# 启动nfs
systemctl start nfs
# 若 centerOS8以上,则执行此命令启动
sudo service nfs-server start
\n

4. 在同一网段下,另一个主机也安装 nfs 作为客户端

\n
1
2
3
4
yum -y install nfs-utils
# 启动nfs
systemctl start nfs
sudo service nfs-server start
\n

5. 挂载

\n
1
2
3
4
5
# 新建目录
mkdir -p /data/disk01

# 挂载网盘到此路径
mount -t nfs 10.0.0.204:/data/publicDisk001 /data/disk01
\n

6. 查看挂载情况

\n
1
df -h
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":515,"excerpt":"","more":"

1. 安装 nfs-untils

\n
1
yum -y install nfs-utils
\n

2. 设置共享目录

\n
1
2
3
4
5
6
7
8
mkdir -p /data/publicDisk001
# 授权
chmod 777 /data/publicDisk001/

# 修改文件,让10.0.0.0/24 这个网段的机器都能用
vim /etc/exports

/data/publicDisk001 10.0.0.0/24(rw,no_root_squash)
\n

3. 启动广播和nfs

\n
1
2
3
4
5
6
systemctl start rpcbind

# 启动nfs
systemctl start nfs
# 若 centerOS8以上,则执行此命令启动
sudo service nfs-server start
\n

4. 在同一网段下,另一个主机也安装 nfs 作为客户端

\n
1
2
3
4
yum -y install nfs-utils
# 启动nfs
systemctl start nfs
sudo service nfs-server start
\n

5. 挂载

\n
1
2
3
4
5
# 新建目录
mkdir -p /data/disk01

# 挂载网盘到此路径
mount -t nfs 10.0.0.204:/data/publicDisk001 /data/disk01
\n

6. 查看挂载情况

\n
1
df -h
\n"},{"title":"VMware安装CentOS 7","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3933667462%2C2332434810%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"VMware, 虚拟机, 静态IP, CentOS","abbrlink":"7ddf46fc","date":"2023-08-04T08:59:05.000Z","_content":"\n\n### 0 准备工作\n\n- CentOS 操作系统镜像文件下载:[https://mirrors.aliyun.com](https://links.jianshu.com/go?to=https%3A%2F%2Fmirrors.aliyun.com)\n\n![image-20230908171707525](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908171707525.png)\n\n\n\n---\n\n\n\n![image-20230908171728656](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908171728656.png)\n\n\n\n---\n\n\n\n![image-20230908171742599](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908171742599.png)\n\n\n\n---\n\n![image-20230908175418265](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908175418265.png)\n\n---\n\n\n\n![image-20230908175442769](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908175442769.png)\n\n---\n\n![image-20230908175605742](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908175605742.png)\n\n\n\n### 1 新建虚拟机\n\n![image-20230908142236250](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908142236250.png)\n\n\n\n### 2 选择自定义安装\n\n![image-20230908142400187](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908142400187.png)\n\n\n\n### 3 硬件兼容性选择\n\n- 选择与**VMware**相匹配的版本,点击下一步\n\n![image-20230908142621786](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908142621786.png)\n\n\n\n### 4 选择稍后安装操作系统\n\n![image-20230908142816382](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908142816382.png)\n\n\n\n### 5 选择要安装的操作系统\n\n![image-20230908143027761](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143027761.png)\n\n\n\n### 6 给虚拟机起名并选择它安装在什么位置\n\n![image-20230908143346019](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143346019.png)\n\n\n\n### 7 选择处理器配置\n\n![image-20230908143509051](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143509051.png)\n\n\n\n### 8 设置内存大小\n\n![image-20230908143642480](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143642480.png)\n\n\n\n### 9 网络类型选择NAT\n\n![image-20230908143745954](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143745954.png)\n\n\n\n### 10 I/O控制器类型,默认即可\n\n![image-20230908143828126](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143828126.png)\n\n\n\n### 11 磁盘类型,默认即可\n\n![image-20230908143902825](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143902825.png)\n\n\n\n### 12 创建磁盘\n\n![image-20230908143937104](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143937104.png)\n\n\n\n### 13 磁盘分配\n\n![image-20230908144028674](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908144028674.png)\n\n\n\n### 14 指定磁盘文件,默认即可\n\n![image-20230908144110656](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908144110656.png)\n\n\n\n### 15 新建虚拟机完成\n\n![image-20230908144157428](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908144157428.png)\n\n\n\n### 16 安装CentOS镜像\n\n- 点击编辑虚拟机配置\n\n![image-20230908145309603](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908145309603.png)\n\n- 选择`CD/DVD` 找到下载好的`iso`镜像路径放进去,点击确定\n\n![image-20230908150005089](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908150005089.png)\n\n- 开启虚拟机\n - 上下箭头可选择 `↑` 选中 `Install CentOS7`,回车\n\n![25517196-04af085f7eebd103](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/25517196-04af085f7eebd103.webp)\n\n- 选择语言,点击继续\n\n![image-20230908150311393](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908150311393.png)\n\n- 软件安装选择最小化安装\n\n![image-20230908150818220](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908150818220.png)\n\n![image-20230908150924342](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908150924342.png)\n\n- 创建分区\n\n - 点击安装位置\n\n ![image-20230908151004104](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908151004104.png)\n\n - 选择我要配置分区,然后点击完成\n\n ![image-20230908151145430](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908151145430.png)\n\n - 选择标准分区,然后点击 `+` 添加分区\n\n ![image-20230908151507360](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908151507360.png)\n\n - `/boot`分区就是操作系统的内核及在引导过程中使用的文件\n\n ![image-20230908151957680](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908151957680.png)\n\n - `Swap`分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用\n\n ![image-20230908152029333](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152029333.png)\n\n - 剩下的空间全部给根分区`/`,然后点击完成\n\n ![image-20230908152219217](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152219217.png)\n\n - 点击接受更改\n\n ![image-20230908152300028](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152300028.png)\n\n- 下面进行网络配置\n\n ![image-20230908152422052](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152422052.png)\n\n - 点击配置,按如下更改,然后点击保存,并设置主机名\n\n ![image-20230908152612519](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152612519.png)\n\n ![image-20230908152926994](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152926994.png)\n\n ![image-20230908153001212](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908153001212.png)\n\n ![image-20230908153240349](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908153240349.png)\n\n- 点击开始安装,安装过程中可以设置`root`的密码\n\n![image-20230908153341136](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908153341136.png)\n\n![image-20230908153417882](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908153417882.png)\n\n- 安装完成后,设置网卡,让虚拟机可以上网\n\n - 点击编辑 → 虚拟网络编辑器\n\n ![25517196-489dac124b1be481](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/25517196-489dac124b1be481.webp)\n\n - 点击更改设置\n\n ![image-20230908154539205](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908154539205.png)\n\n - 根据下图进行配置\n\n ![image-20230908154748383](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908154748383.png)\n\n ![image-20230908154821137](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908154821137.png)\n\n - 应用,然后点击确定,现在就可以正常使用了\n\n ![image-20230908160139747](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908160139747.png)\n\n\n\n\n\n### 17 配置静态IP\n\n- 打开命令行,输入\n - 网卡默认名称不一定为`ens33`,需要自行查看\n\n```BASH\nvim /etc/sysconfig/network-scripts/ifcfg-ens33\n```\n\n- 修改配置文件内容\n\n![image-20230908173017415](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908173017415.png)\n\n- 重启网络服务\n\n```BASH\nservice network restart\n```\n","source":"_posts/VMware安装CentOS 7.md","raw":"---\ntitle: VMware安装CentOS 7\ncover: >-\n https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3933667462%2C2332434810%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'VMware, 虚拟机, 静态IP, CentOS'\ncategories:\n - Linux\ntags:\n - VMware\n - 虚拟机\n - CentOS\nabbrlink: 7ddf46fc\ndate: 2023-08-04 16:59:05\n---\n\n\n### 0 准备工作\n\n- CentOS 操作系统镜像文件下载:[https://mirrors.aliyun.com](https://links.jianshu.com/go?to=https%3A%2F%2Fmirrors.aliyun.com)\n\n![image-20230908171707525](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908171707525.png)\n\n\n\n---\n\n\n\n![image-20230908171728656](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908171728656.png)\n\n\n\n---\n\n\n\n![image-20230908171742599](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908171742599.png)\n\n\n\n---\n\n![image-20230908175418265](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908175418265.png)\n\n---\n\n\n\n![image-20230908175442769](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908175442769.png)\n\n---\n\n![image-20230908175605742](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908175605742.png)\n\n\n\n### 1 新建虚拟机\n\n![image-20230908142236250](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908142236250.png)\n\n\n\n### 2 选择自定义安装\n\n![image-20230908142400187](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908142400187.png)\n\n\n\n### 3 硬件兼容性选择\n\n- 选择与**VMware**相匹配的版本,点击下一步\n\n![image-20230908142621786](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908142621786.png)\n\n\n\n### 4 选择稍后安装操作系统\n\n![image-20230908142816382](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908142816382.png)\n\n\n\n### 5 选择要安装的操作系统\n\n![image-20230908143027761](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143027761.png)\n\n\n\n### 6 给虚拟机起名并选择它安装在什么位置\n\n![image-20230908143346019](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143346019.png)\n\n\n\n### 7 选择处理器配置\n\n![image-20230908143509051](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143509051.png)\n\n\n\n### 8 设置内存大小\n\n![image-20230908143642480](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143642480.png)\n\n\n\n### 9 网络类型选择NAT\n\n![image-20230908143745954](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143745954.png)\n\n\n\n### 10 I/O控制器类型,默认即可\n\n![image-20230908143828126](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143828126.png)\n\n\n\n### 11 磁盘类型,默认即可\n\n![image-20230908143902825](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143902825.png)\n\n\n\n### 12 创建磁盘\n\n![image-20230908143937104](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908143937104.png)\n\n\n\n### 13 磁盘分配\n\n![image-20230908144028674](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908144028674.png)\n\n\n\n### 14 指定磁盘文件,默认即可\n\n![image-20230908144110656](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908144110656.png)\n\n\n\n### 15 新建虚拟机完成\n\n![image-20230908144157428](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908144157428.png)\n\n\n\n### 16 安装CentOS镜像\n\n- 点击编辑虚拟机配置\n\n![image-20230908145309603](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908145309603.png)\n\n- 选择`CD/DVD` 找到下载好的`iso`镜像路径放进去,点击确定\n\n![image-20230908150005089](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908150005089.png)\n\n- 开启虚拟机\n - 上下箭头可选择 `↑` 选中 `Install CentOS7`,回车\n\n![25517196-04af085f7eebd103](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/25517196-04af085f7eebd103.webp)\n\n- 选择语言,点击继续\n\n![image-20230908150311393](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908150311393.png)\n\n- 软件安装选择最小化安装\n\n![image-20230908150818220](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908150818220.png)\n\n![image-20230908150924342](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908150924342.png)\n\n- 创建分区\n\n - 点击安装位置\n\n ![image-20230908151004104](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908151004104.png)\n\n - 选择我要配置分区,然后点击完成\n\n ![image-20230908151145430](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908151145430.png)\n\n - 选择标准分区,然后点击 `+` 添加分区\n\n ![image-20230908151507360](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908151507360.png)\n\n - `/boot`分区就是操作系统的内核及在引导过程中使用的文件\n\n ![image-20230908151957680](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908151957680.png)\n\n - `Swap`分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用\n\n ![image-20230908152029333](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152029333.png)\n\n - 剩下的空间全部给根分区`/`,然后点击完成\n\n ![image-20230908152219217](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152219217.png)\n\n - 点击接受更改\n\n ![image-20230908152300028](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152300028.png)\n\n- 下面进行网络配置\n\n ![image-20230908152422052](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152422052.png)\n\n - 点击配置,按如下更改,然后点击保存,并设置主机名\n\n ![image-20230908152612519](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152612519.png)\n\n ![image-20230908152926994](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908152926994.png)\n\n ![image-20230908153001212](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908153001212.png)\n\n ![image-20230908153240349](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908153240349.png)\n\n- 点击开始安装,安装过程中可以设置`root`的密码\n\n![image-20230908153341136](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908153341136.png)\n\n![image-20230908153417882](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908153417882.png)\n\n- 安装完成后,设置网卡,让虚拟机可以上网\n\n - 点击编辑 → 虚拟网络编辑器\n\n ![25517196-489dac124b1be481](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/25517196-489dac124b1be481.webp)\n\n - 点击更改设置\n\n ![image-20230908154539205](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908154539205.png)\n\n - 根据下图进行配置\n\n ![image-20230908154748383](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908154748383.png)\n\n ![image-20230908154821137](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908154821137.png)\n\n - 应用,然后点击确定,现在就可以正常使用了\n\n ![image-20230908160139747](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908160139747.png)\n\n\n\n\n\n### 17 配置静态IP\n\n- 打开命令行,输入\n - 网卡默认名称不一定为`ens33`,需要自行查看\n\n```BASH\nvim /etc/sysconfig/network-scripts/ifcfg-ens33\n```\n\n- 修改配置文件内容\n\n![image-20230908173017415](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230908173017415.png)\n\n- 重启网络服务\n\n```BASH\nservice network restart\n```\n","slug":"VMware安装CentOS 7","published":1,"updated":"2023-10-21T04:52:52.342Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyrtw00132j3uhqbjbhjh","content":"

0 准备工作

\n\n

\"image-20230908171707525\"

\n
\n

\"image-20230908171728656\"

\n
\n

\"image-20230908171742599\"

\n
\n

\"image-20230908175418265\"

\n
\n

\"image-20230908175442769\"

\n
\n

\"image-20230908175605742\"

\n

1 新建虚拟机

\n

\"image-20230908142236250\"

\n

2 选择自定义安装

\n

\"image-20230908142400187\"

\n

3 硬件兼容性选择

\n
    \n
  • 选择与VMware相匹配的版本,点击下一步
  • \n
\n

\"image-20230908142621786\"

\n

4 选择稍后安装操作系统

\n

\"image-20230908142816382\"

\n

5 选择要安装的操作系统

\n

\"image-20230908143027761\"

\n

6 给虚拟机起名并选择它安装在什么位置

\n

\"image-20230908143346019\"

\n

7 选择处理器配置

\n

\"image-20230908143509051\"

\n

8 设置内存大小

\n

\"image-20230908143642480\"

\n

9 网络类型选择NAT

\n

\"image-20230908143745954\"

\n

10 I/O控制器类型,默认即可

\n

\"image-20230908143828126\"

\n

11 磁盘类型,默认即可

\n

\"image-20230908143902825\"

\n

12 创建磁盘

\n

\"image-20230908143937104\"

\n

13 磁盘分配

\n

\"image-20230908144028674\"

\n

14 指定磁盘文件,默认即可

\n

\"image-20230908144110656\"

\n

15 新建虚拟机完成

\n

\"image-20230908144157428\"

\n

16 安装CentOS镜像

\n
    \n
  • 点击编辑虚拟机配置
  • \n
\n

\"image-20230908145309603\"

\n
    \n
  • 选择CD/DVD 找到下载好的iso镜像路径放进去,点击确定
  • \n
\n

\"image-20230908150005089\"

\n
    \n
  • 开启虚拟机\n
      \n
    • 上下箭头可选择 选中 Install CentOS7,回车
    • \n
    \n
  • \n
\n

\"25517196-04af085f7eebd103\"

\n
    \n
  • 选择语言,点击继续
  • \n
\n

\"image-20230908150311393\"

\n
    \n
  • 软件安装选择最小化安装
  • \n
\n

\"image-20230908150818220\"

\n

\"image-20230908150924342\"

\n
    \n
  • \n

    创建分区

    \n
      \n
    • 点击安装位置
    • \n
    \n

    \"image-20230908151004104\"

    \n
      \n
    • 选择我要配置分区,然后点击完成
    • \n
    \n

    \"image-20230908151145430\"

    \n
      \n
    • 选择标准分区,然后点击 + 添加分区
    • \n
    \n

    \"image-20230908151507360\"

    \n
      \n
    • /boot分区就是操作系统的内核及在引导过程中使用的文件
    • \n
    \n

    \"image-20230908151957680\"

    \n
      \n
    • Swap分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用
    • \n
    \n

    \"image-20230908152029333\"

    \n
      \n
    • 剩下的空间全部给根分区/,然后点击完成
    • \n
    \n

    \"image-20230908152219217\"

    \n
      \n
    • 点击接受更改
    • \n
    \n

    \"image-20230908152300028\"

    \n
  • \n
  • \n

    下面进行网络配置

    \n

    \"image-20230908152422052\"

    \n
      \n
    • 点击配置,按如下更改,然后点击保存,并设置主机名
    • \n
    \n

    \"image-20230908152612519\"

    \n

    \"image-20230908152926994\"

    \n

    \"image-20230908153001212\"

    \n

    \"image-20230908153240349\"

    \n
  • \n
  • \n

    点击开始安装,安装过程中可以设置root的密码

    \n
  • \n
\n

\"image-20230908153341136\"

\n

\"image-20230908153417882\"

\n
    \n
  • \n

    安装完成后,设置网卡,让虚拟机可以上网

    \n
      \n
    • 点击编辑 → 虚拟网络编辑器
    • \n
    \n

    \"25517196-489dac124b1be481\"

    \n
      \n
    • 点击更改设置
    • \n
    \n

    \"image-20230908154539205\"

    \n
      \n
    • 根据下图进行配置
    • \n
    \n

    \"image-20230908154748383\"

    \n

    \"image-20230908154821137\"

    \n
      \n
    • 应用,然后点击确定,现在就可以正常使用了
    • \n
    \n

    \"image-20230908160139747\"

    \n
  • \n
\n

17 配置静态IP

\n
    \n
  • 打开命令行,输入\n
      \n
    • 网卡默认名称不一定为ens33,需要自行查看
    • \n
    \n
  • \n
\n
1
vim /etc/sysconfig/network-scripts/ifcfg-ens33
\n
    \n
  • 修改配置文件内容
  • \n
\n

\"image-20230908173017415\"

\n
    \n
  • 重启网络服务
  • \n
\n
1
service network restart
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":701,"excerpt":"","more":"

0 准备工作

\n\n

\"image-20230908171707525\"

\n
\n

\"image-20230908171728656\"

\n
\n

\"image-20230908171742599\"

\n
\n

\"image-20230908175418265\"

\n
\n

\"image-20230908175442769\"

\n
\n

\"image-20230908175605742\"

\n

1 新建虚拟机

\n

\"image-20230908142236250\"

\n

2 选择自定义安装

\n

\"image-20230908142400187\"

\n

3 硬件兼容性选择

\n
    \n
  • 选择与VMware相匹配的版本,点击下一步
  • \n
\n

\"image-20230908142621786\"

\n

4 选择稍后安装操作系统

\n

\"image-20230908142816382\"

\n

5 选择要安装的操作系统

\n

\"image-20230908143027761\"

\n

6 给虚拟机起名并选择它安装在什么位置

\n

\"image-20230908143346019\"

\n

7 选择处理器配置

\n

\"image-20230908143509051\"

\n

8 设置内存大小

\n

\"image-20230908143642480\"

\n

9 网络类型选择NAT

\n

\"image-20230908143745954\"

\n

10 I/O控制器类型,默认即可

\n

\"image-20230908143828126\"

\n

11 磁盘类型,默认即可

\n

\"image-20230908143902825\"

\n

12 创建磁盘

\n

\"image-20230908143937104\"

\n

13 磁盘分配

\n

\"image-20230908144028674\"

\n

14 指定磁盘文件,默认即可

\n

\"image-20230908144110656\"

\n

15 新建虚拟机完成

\n

\"image-20230908144157428\"

\n

16 安装CentOS镜像

\n
    \n
  • 点击编辑虚拟机配置
  • \n
\n

\"image-20230908145309603\"

\n
    \n
  • 选择CD/DVD 找到下载好的iso镜像路径放进去,点击确定
  • \n
\n

\"image-20230908150005089\"

\n
    \n
  • 开启虚拟机\n
      \n
    • 上下箭头可选择 选中 Install CentOS7,回车
    • \n
    \n
  • \n
\n

\"25517196-04af085f7eebd103\"

\n
    \n
  • 选择语言,点击继续
  • \n
\n

\"image-20230908150311393\"

\n
    \n
  • 软件安装选择最小化安装
  • \n
\n

\"image-20230908150818220\"

\n

\"image-20230908150924342\"

\n
    \n
  • \n

    创建分区

    \n
      \n
    • 点击安装位置
    • \n
    \n

    \"image-20230908151004104\"

    \n
      \n
    • 选择我要配置分区,然后点击完成
    • \n
    \n

    \"image-20230908151145430\"

    \n
      \n
    • 选择标准分区,然后点击 + 添加分区
    • \n
    \n

    \"image-20230908151507360\"

    \n
      \n
    • /boot分区就是操作系统的内核及在引导过程中使用的文件
    • \n
    \n

    \"image-20230908151957680\"

    \n
      \n
    • Swap分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用
    • \n
    \n

    \"image-20230908152029333\"

    \n
      \n
    • 剩下的空间全部给根分区/,然后点击完成
    • \n
    \n

    \"image-20230908152219217\"

    \n
      \n
    • 点击接受更改
    • \n
    \n

    \"image-20230908152300028\"

    \n
  • \n
  • \n

    下面进行网络配置

    \n

    \"image-20230908152422052\"

    \n
      \n
    • 点击配置,按如下更改,然后点击保存,并设置主机名
    • \n
    \n

    \"image-20230908152612519\"

    \n

    \"image-20230908152926994\"

    \n

    \"image-20230908153001212\"

    \n

    \"image-20230908153240349\"

    \n
  • \n
  • \n

    点击开始安装,安装过程中可以设置root的密码

    \n
  • \n
\n

\"image-20230908153341136\"

\n

\"image-20230908153417882\"

\n
    \n
  • \n

    安装完成后,设置网卡,让虚拟机可以上网

    \n
      \n
    • 点击编辑 → 虚拟网络编辑器
    • \n
    \n

    \"25517196-489dac124b1be481\"

    \n
      \n
    • 点击更改设置
    • \n
    \n

    \"image-20230908154539205\"

    \n
      \n
    • 根据下图进行配置
    • \n
    \n

    \"image-20230908154748383\"

    \n

    \"image-20230908154821137\"

    \n
      \n
    • 应用,然后点击确定,现在就可以正常使用了
    • \n
    \n

    \"image-20230908160139747\"

    \n
  • \n
\n

17 配置静态IP

\n
    \n
  • 打开命令行,输入\n
      \n
    • 网卡默认名称不一定为ens33,需要自行查看
    • \n
    \n
  • \n
\n
1
vim /etc/sysconfig/network-scripts/ifcfg-ens33
\n
    \n
  • 修改配置文件内容
  • \n
\n

\"image-20230908173017415\"

\n
    \n
  • 重启网络服务
  • \n
\n
1
service network restart
\n"},{"title":"Microsoft Office下载及激活教程","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3812449643%2C1656070772%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"软件安装,Office激活","abbrlink":"499a3852","date":"2023-10-11T12:10:50.000Z","_content":"\n\n\n## 1 Office Tool Plus下载\n\n- 下载链接\n\n{% link Office Tool Plus, https://otp.landian.vip/zh-cn/download.html, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20231011211410.png %}\n\n- 下载包含框架版本\n\n![image-20231011201941876](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011201941876-7026790.png)\n\n- 解压后双击运行Office Tool Plus.exe\n\n![image-20231011202115985](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202115985.png)\n\n\n\n\n\n## 2 安装Office\n\n- 若曾经安装过Office,则需要完全卸载,若卸载遇到问题,可以使用Office Tool Plus工具箱中的卸载工具进行卸载\n\n![image-20231011202421324](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202421324.png)\n\n- 点击左侧部署,根据自己的需求进行设置\n\n![image-20231011202700548](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202700548.png)\n\n- 在下面的产品对话框点击添加产品,选择Microsoft 365 企业应用版\n\n![image-20231011202856817](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202856817.png)\n\n- 然后勾选自己想要安装的产品\n\n![image-20231011202942134](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202942134.png)\n\n- 点击开始部署即可开始安装\n\n![image-20231011203205961](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011203205961.png)\n\n\n\n## 3 激活Office\n\n- 点击左侧激活选项,在许可证管理选项卡点击安装许可证,选择带有批量许可证的选项,然后点击确定\n\n![image-20231011203610772](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011203610772.png)\n\n- 许可证安装完成,点击KMS管理,保存设置,若该KMS主机报错,可以在以下链接找合适的:[KMS 列表](https://www.coolhub.top/tech-articles/kms_list.html)\n\n![image-20231011204022077](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011204022077.png)\n\n- 点击激活即可\n\n![image-20231011204111959](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011204111959.png)\n","source":"_posts/Microsoft Office下载及激活教程.md","raw":"---\ntitle: Microsoft Office下载及激活教程\ncover: >-\n https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D3812449643%2C1656070772%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 软件安装,Office激活\ncategories:\n - 日常办公\ntags:\n - 软件安装\n - Office\n - Windows\nabbrlink: 499a3852\ndate: 2023-10-11 20:10:50\n---\n\n\n\n## 1 Office Tool Plus下载\n\n- 下载链接\n\n{% link Office Tool Plus, https://otp.landian.vip/zh-cn/download.html, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20231011211410.png %}\n\n- 下载包含框架版本\n\n![image-20231011201941876](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011201941876-7026790.png)\n\n- 解压后双击运行Office Tool Plus.exe\n\n![image-20231011202115985](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202115985.png)\n\n\n\n\n\n## 2 安装Office\n\n- 若曾经安装过Office,则需要完全卸载,若卸载遇到问题,可以使用Office Tool Plus工具箱中的卸载工具进行卸载\n\n![image-20231011202421324](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202421324.png)\n\n- 点击左侧部署,根据自己的需求进行设置\n\n![image-20231011202700548](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202700548.png)\n\n- 在下面的产品对话框点击添加产品,选择Microsoft 365 企业应用版\n\n![image-20231011202856817](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202856817.png)\n\n- 然后勾选自己想要安装的产品\n\n![image-20231011202942134](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011202942134.png)\n\n- 点击开始部署即可开始安装\n\n![image-20231011203205961](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011203205961.png)\n\n\n\n## 3 激活Office\n\n- 点击左侧激活选项,在许可证管理选项卡点击安装许可证,选择带有批量许可证的选项,然后点击确定\n\n![image-20231011203610772](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011203610772.png)\n\n- 许可证安装完成,点击KMS管理,保存设置,若该KMS主机报错,可以在以下链接找合适的:[KMS 列表](https://www.coolhub.top/tech-articles/kms_list.html)\n\n![image-20231011204022077](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011204022077.png)\n\n- 点击激活即可\n\n![image-20231011204111959](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231011204111959.png)\n","slug":"Microsoft Office下载及激活教程","published":1,"updated":"2023-10-22T04:49:12.391Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyrtw00172j3uevcjce89","content":"

1 Office Tool Plus下载

\n
    \n
  • 下载链接
  • \n
\n\n
    \n
  • 下载包含框架版本
  • \n
\n

\"image-20231011201941876\"

\n
    \n
  • 解压后双击运行Office Tool Plus.exe
  • \n
\n

\"image-20231011202115985\"

\n

2 安装Office

\n
    \n
  • 若曾经安装过Office,则需要完全卸载,若卸载遇到问题,可以使用Office Tool Plus工具箱中的卸载工具进行卸载
  • \n
\n

\"image-20231011202421324\"

\n
    \n
  • 点击左侧部署,根据自己的需求进行设置
  • \n
\n

\"image-20231011202700548\"

\n
    \n
  • 在下面的产品对话框点击添加产品,选择Microsoft 365 企业应用版
  • \n
\n

\"image-20231011202856817\"

\n
    \n
  • 然后勾选自己想要安装的产品
  • \n
\n

\"image-20231011202942134\"

\n
    \n
  • 点击开始部署即可开始安装
  • \n
\n

\"image-20231011203205961\"

\n

3 激活Office

\n
    \n
  • 点击左侧激活选项,在许可证管理选项卡点击安装许可证,选择带有批量许可证的选项,然后点击确定
  • \n
\n

\"image-20231011203610772\"

\n
    \n
  • 许可证安装完成,点击KMS管理,保存设置,若该KMS主机报错,可以在以下链接找合适的:KMS 列表
  • \n
\n

\"image-20231011204022077\"

\n
    \n
  • 点击激活即可
  • \n
\n

\"image-20231011204111959\"

\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":366,"excerpt":"","more":"

1 Office Tool Plus下载

\n
    \n
  • 下载链接
  • \n
\n\n
    \n
  • 下载包含框架版本
  • \n
\n

\"image-20231011201941876\"

\n
    \n
  • 解压后双击运行Office Tool Plus.exe
  • \n
\n

\"image-20231011202115985\"

\n

2 安装Office

\n
    \n
  • 若曾经安装过Office,则需要完全卸载,若卸载遇到问题,可以使用Office Tool Plus工具箱中的卸载工具进行卸载
  • \n
\n

\"image-20231011202421324\"

\n
    \n
  • 点击左侧部署,根据自己的需求进行设置
  • \n
\n

\"image-20231011202700548\"

\n
    \n
  • 在下面的产品对话框点击添加产品,选择Microsoft 365 企业应用版
  • \n
\n

\"image-20231011202856817\"

\n
    \n
  • 然后勾选自己想要安装的产品
  • \n
\n

\"image-20231011202942134\"

\n
    \n
  • 点击开始部署即可开始安装
  • \n
\n

\"image-20231011203205961\"

\n

3 激活Office

\n
    \n
  • 点击左侧激活选项,在许可证管理选项卡点击安装许可证,选择带有批量许可证的选项,然后点击确定
  • \n
\n

\"image-20231011203610772\"

\n
    \n
  • 许可证安装完成,点击KMS管理,保存设置,若该KMS主机报错,可以在以下链接找合适的:KMS 列表
  • \n
\n

\"image-20231011204022077\"

\n
    \n
  • 点击激活即可
  • \n
\n

\"image-20231011204111959\"

\n"},{"title":"VMware虚拟机设置静态IP","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D975125445%2C2172945209%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","abbrlink":"f5fad029","date":"2023-03-14T08:59:05.000Z","keywords":"VMware, 虚拟机, 静态IP","_content":"\n### 1、设置虚拟网关\n\n点击导航栏上面的【编辑】-->【虚拟网络编辑器】,并以【管理员】的身份打开虚拟机。\n\n![img](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/watermark%2Ctype_ZHJvaWRzYW5zZmFsbGJhY2s%2Cshadow_50%2Ctext_Q1NETiBAY2hhb2ZlbmdkZXY%3D%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16.png)\n\n点击【VMnet8 NAT模式】,取消使用本地使用本地[dhcp](https://so.csdn.net/so/search?q=dhcp&spm=1001.2101.3001.7020)服务,配置网络段(子网ip段)为192.168.1.0,点击NAT设置。\n\n![image-20230406140828304](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406140828304.png)\n\n配置【网关ip】,注意【网关ip】需要在【子网ip】段下,这里设置为192.168.1.2\n\n![image-20230406140906021](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406140906021.png)\n\n\n### 2、配置虚拟机静态ip\n\n- 打开命令行,输入\n\n```shell\nvim /etc/sysconfig/network-scripts/ifcfg-ens33\n```\n\n- 修改配置文件内容\n\n![image-20230406141120088](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406141120088.png)\n\n\n\n```shell\n#ip\nIPADDR=192.168.1.136\nNETMASK=255.255.255.0\n#gateway\nGATEWAY=192.168.1.2\n#DNS\nDNS1=114.114.114\n```\n\n注:DNS1是dns服务器,一般设置为114.114.114.114、114.114.115.115和8.8.8.8等(其他的也可以,只不过这几个用的人比较多而已)\n\n\n### 3、检测配置是否成功\n\n- 重启网络服务\n\n```shell\nservice network restart\n```\n\n- ping一下百度\n\n```shell\nping www.baidu.com\n```\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","source":"_posts/VMware虚拟机设置静态IP.md","raw":"---\ntitle: VMware虚拟机设置静态IP\ncover: 'https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D975125445%2C2172945209%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG'\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nabbrlink: f5fad029\ndate: 2023-03-14 16:59:05\nkeywords: VMware, 虚拟机, 静态IP\ncategories:\n - Linux\ntags:\n - VMware\n - 虚拟机\n - IP\n---\n\n### 1、设置虚拟网关\n\n点击导航栏上面的【编辑】-->【虚拟网络编辑器】,并以【管理员】的身份打开虚拟机。\n\n![img](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/watermark%2Ctype_ZHJvaWRzYW5zZmFsbGJhY2s%2Cshadow_50%2Ctext_Q1NETiBAY2hhb2ZlbmdkZXY%3D%2Csize_20%2Ccolor_FFFFFF%2Ct_70%2Cg_se%2Cx_16.png)\n\n点击【VMnet8 NAT模式】,取消使用本地使用本地[dhcp](https://so.csdn.net/so/search?q=dhcp&spm=1001.2101.3001.7020)服务,配置网络段(子网ip段)为192.168.1.0,点击NAT设置。\n\n![image-20230406140828304](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406140828304.png)\n\n配置【网关ip】,注意【网关ip】需要在【子网ip】段下,这里设置为192.168.1.2\n\n![image-20230406140906021](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406140906021.png)\n\n\n### 2、配置虚拟机静态ip\n\n- 打开命令行,输入\n\n```shell\nvim /etc/sysconfig/network-scripts/ifcfg-ens33\n```\n\n- 修改配置文件内容\n\n![image-20230406141120088](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20230406141120088.png)\n\n\n\n```shell\n#ip\nIPADDR=192.168.1.136\nNETMASK=255.255.255.0\n#gateway\nGATEWAY=192.168.1.2\n#DNS\nDNS1=114.114.114\n```\n\n注:DNS1是dns服务器,一般设置为114.114.114.114、114.114.115.115和8.8.8.8等(其他的也可以,只不过这几个用的人比较多而已)\n\n\n### 3、检测配置是否成功\n\n- 重启网络服务\n\n```shell\nservice network restart\n```\n\n- ping一下百度\n\n```shell\nping www.baidu.com\n```\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","slug":"VMware虚拟机设置静态IP","published":1,"updated":"2023-10-21T04:53:00.088Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyrty001b2j3u3dggfvw5","content":"

1、设置虚拟网关

\n

点击导航栏上面的【编辑】–>【虚拟网络编辑器】,并以【管理员】的身份打开虚拟机。

\n

\"img\"

\n

点击【VMnet8 NAT模式】,取消使用本地使用本地dhcp服务,配置网络段(子网ip段)为192.168.1.0,点击NAT设置。

\n

\"image-20230406140828304\"

\n

配置【网关ip】,注意【网关ip】需要在【子网ip】段下,这里设置为192.168.1.2

\n

\"image-20230406140906021\"

\n

2、配置虚拟机静态ip

\n
    \n
  • 打开命令行,输入
  • \n
\n
1
vim /etc/sysconfig/network-scripts/ifcfg-ens33
\n
    \n
  • 修改配置文件内容
  • \n
\n

\"image-20230406141120088\"

\n
1
2
3
4
5
6
7
#ip
IPADDR=192.168.1.136
NETMASK=255.255.255.0
#gateway
GATEWAY=192.168.1.2
#DNS
DNS1=114.114.114
\n

注:DNS1是dns服务器,一般设置为114.114.114.114、114.114.115.115和8.8.8.8等(其他的也可以,只不过这几个用的人比较多而已)

\n

3、检测配置是否成功

\n
    \n
  • 重启网络服务
  • \n
\n
1
service network restart
\n
    \n
  • ping一下百度
  • \n
\n
1
ping www.baidu.com
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":479,"excerpt":"","more":"

1、设置虚拟网关

\n

点击导航栏上面的【编辑】–>【虚拟网络编辑器】,并以【管理员】的身份打开虚拟机。

\n

\"img\"

\n

点击【VMnet8 NAT模式】,取消使用本地使用本地dhcp服务,配置网络段(子网ip段)为192.168.1.0,点击NAT设置。

\n

\"image-20230406140828304\"

\n

配置【网关ip】,注意【网关ip】需要在【子网ip】段下,这里设置为192.168.1.2

\n

\"image-20230406140906021\"

\n

2、配置虚拟机静态ip

\n
    \n
  • 打开命令行,输入
  • \n
\n
1
vim /etc/sysconfig/network-scripts/ifcfg-ens33
\n
    \n
  • 修改配置文件内容
  • \n
\n

\"image-20230406141120088\"

\n
1
2
3
4
5
6
7
#ip
IPADDR=192.168.1.136
NETMASK=255.255.255.0
#gateway
GATEWAY=192.168.1.2
#DNS
DNS1=114.114.114
\n

注:DNS1是dns服务器,一般设置为114.114.114.114、114.114.115.115和8.8.8.8等(其他的也可以,只不过这几个用的人比较多而已)

\n

3、检测配置是否成功

\n
    \n
  • 重启网络服务
  • \n
\n
1
service network restart
\n
    \n
  • ping一下百度
  • \n
\n
1
ping www.baidu.com
\n"},{"title":"Vue子组件中调用父组件中的方法","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D702715071%2C3690882623%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"Vue,前端,组件","abbrlink":"aec1e412","date":"2023-08-12T09:59:05.000Z","_content":"\n{% note simple %}在Vue中,子组件可以通过事件(Event)机制与父组件进行通信,从而调用父组件中的方法。以下是一种常见的方法:{% endnote %}\n\n\n\n## 1 在父组件中定义方法\n\n- 首先,在父组件中定义一个方法\n\n```vue\n\n\n\n```\n\n\n\n## 2 在子组件中触发事件\n\n- 在子组件中,通过`$emit`方法触发一个自定义事件,从而与父组件通信\n\n```vue\n\n\n\n```\n\n- 在这个例子中,当子组件中的按钮被点击时,`callParentMethod`方法会调用`this.$emit('custom-event', ...)`,触发一个名为`custom-event`的自定义事件,并传递一个数据对象作为参数。\n\n\n\n## 3 在父组件中监听事件\n\n- 在父组件的模板中使用`@custom-event`来监听子组件发出的事件,并在相应的处理方法中调用父组件的方法\n\n- 通过这种方式,子组件就能够调用父组件中的方法,实现了子组件与父组件之间的通信。记住,事件名`custom-event`应该在父组件中监听和子组件中触发时保持一致。\n\n\n\n\n\n\n\n\n\n","source":"_posts/Vue子组件中调用父组件中的方法.md","raw":"---\ntitle: Vue子组件中调用父组件中的方法\ncover: >-\n https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D702715071%2C3690882623%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'Vue,前端,组件'\ncategories:\n - 前端开发\ntags:\n - Vue\n - 前端\n - 组件\nabbrlink: aec1e412\ndate: 2023-08-12 17:59:05\n---\n\n{% note simple %}在Vue中,子组件可以通过事件(Event)机制与父组件进行通信,从而调用父组件中的方法。以下是一种常见的方法:{% endnote %}\n\n\n\n## 1 在父组件中定义方法\n\n- 首先,在父组件中定义一个方法\n\n```vue\n\n\n\n```\n\n\n\n## 2 在子组件中触发事件\n\n- 在子组件中,通过`$emit`方法触发一个自定义事件,从而与父组件通信\n\n```vue\n\n\n\n```\n\n- 在这个例子中,当子组件中的按钮被点击时,`callParentMethod`方法会调用`this.$emit('custom-event', ...)`,触发一个名为`custom-event`的自定义事件,并传递一个数据对象作为参数。\n\n\n\n## 3 在父组件中监听事件\n\n- 在父组件的模板中使用`@custom-event`来监听子组件发出的事件,并在相应的处理方法中调用父组件的方法\n\n- 通过这种方式,子组件就能够调用父组件中的方法,实现了子组件与父组件之间的通信。记住,事件名`custom-event`应该在父组件中监听和子组件中触发时保持一致。\n\n\n\n\n\n\n\n\n\n","slug":"Vue子组件中调用父组件中的方法","published":1,"updated":"2023-10-21T04:53:05.237Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyrty001e2j3uf6kf85ra","content":"

在Vue中,子组件可以通过事件(Event)机制与父组件进行通信,从而调用父组件中的方法。以下是一种常见的方法:

\n
\n

1 在父组件中定义方法

\n
    \n
  • 首先,在父组件中定义一个方法
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<template>
<div>
<button @click="callParentMethod">调用父组件方法</button>
<child-component @custom-event="handleCustomEvent"></child-component>
</div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
components: {
ChildComponent
},
methods: {
callParentMethod() {
console.log('父组件的方法被调用');
},
handleCustomEvent(payload) {
console.log('自定义事件在父组件被触发,数据:', payload);
}
}
};
</script>
\n

2 在子组件中触发事件

\n
    \n
  • 在子组件中,通过$emit方法触发一个自定义事件,从而与父组件通信
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<template>
<div>
<button @click="callParentMethod">调用父组件方法</button>
</div>
</template>

<script>
export default {
methods: {
callParentMethod() {
this.$emit('custom-event', { data: '来自子组件的数据' });
}
}
};
</script>
\n
    \n
  • 在这个例子中,当子组件中的按钮被点击时,callParentMethod方法会调用this.$emit('custom-event', ...),触发一个名为custom-event的自定义事件,并传递一个数据对象作为参数。
  • \n
\n

3 在父组件中监听事件

\n
    \n
  • \n

    在父组件的模板中使用@custom-event来监听子组件发出的事件,并在相应的处理方法中调用父组件的方法

    \n
  • \n
  • \n

    通过这种方式,子组件就能够调用父组件中的方法,实现了子组件与父组件之间的通信。记住,事件名custom-event应该在父组件中监听和子组件中触发时保持一致。

    \n
  • \n
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":1284,"excerpt":"","more":"

在Vue中,子组件可以通过事件(Event)机制与父组件进行通信,从而调用父组件中的方法。以下是一种常见的方法:

\n
\n

1 在父组件中定义方法

\n
    \n
  • 首先,在父组件中定义一个方法
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<template>
<div>
<button @click="callParentMethod">调用父组件方法</button>
<child-component @custom-event="handleCustomEvent"></child-component>
</div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
components: {
ChildComponent
},
methods: {
callParentMethod() {
console.log('父组件的方法被调用');
},
handleCustomEvent(payload) {
console.log('自定义事件在父组件被触发,数据:', payload);
}
}
};
</script>
\n

2 在子组件中触发事件

\n
    \n
  • 在子组件中,通过$emit方法触发一个自定义事件,从而与父组件通信
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<template>
<div>
<button @click="callParentMethod">调用父组件方法</button>
</div>
</template>

<script>
export default {
methods: {
callParentMethod() {
this.$emit('custom-event', { data: '来自子组件的数据' });
}
}
};
</script>
\n
    \n
  • 在这个例子中,当子组件中的按钮被点击时,callParentMethod方法会调用this.$emit('custom-event', ...),触发一个名为custom-event的自定义事件,并传递一个数据对象作为参数。
  • \n
\n

3 在父组件中监听事件

\n
    \n
  • \n

    在父组件的模板中使用@custom-event来监听子组件发出的事件,并在相应的处理方法中调用父组件的方法

    \n
  • \n
  • \n

    通过这种方式,子组件就能够调用父组件中的方法,实现了子组件与父组件之间的通信。记住,事件名custom-event应该在父组件中监听和子组件中触发时保持一致。

    \n
  • \n
\n"},{"title":"基于 MPI 的埃拉托斯特尼筛法的并行化设计、实现与结果分析","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D4009061548%2C3284864615%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"算法,并行计算","abbrlink":"55978286","date":"2023-03-12T09:59:05.000Z","_content":"\n## 1 算法介绍\n\n​\t埃拉托斯特尼是一位古希腊数学家,他在寻找整数N以内的素数时,采用了一种与众不同的方法:先将2~N的各个数写在纸上:\n\n​\t在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数是5,将它画圈,并划去5的其他倍数……依此类推,一直到所有小于或等于N的各数都画了圈或划去为止。这时,画了圈的以及未划去的那些数正好就是小于N的素数。\n\n![image-20231025224209018](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231025224209018.png)\n\n- 其伪代码如下:\n\n```TEXT\nInput: an integer n > 1\n\nLet A be an array of Boolean values, indexed by integers 2 to n,\ninitially all set to true.\n\n for i = 2, 3, 4, ..., not exceeding √n:\n if A[i] is true:\n for j = i2, i2+i, i2+2i, i2+3i, ..., not exceeding n :\n A[j] := false\n\nOutput: all i such that A[i] is true.\n```\n\n\n\n## 2 实验环境\n\n- 硬件环境\n\n![image-20231025224344521](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20231025225837.png)\n\n- 开发环境\n - Visual Studio 2019,MSMPI v10.0\n\n\n\n## 3 MPI环境配置(Windows)\n\nwindows 下运行mpi首推微软的msmp,因为比较简单,下载地址为:https://docs.microsoft.com/en-us/message-passing-interface/microsoft-mpi,\n将两个安装包msmpisdk.msi和msmpisetup.exe分别下载然后安装完成后即可,下面是在VS2019中引入MSMPI的步骤:\n\n- 在VS中新建C++控制台应用程序,将项目编译改为X64\n\n![image-20231025224621719](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231025224621719.png)\n\n- 去安装的SDK目录,找到include与lib文件夹右键项目 -- 属性 -- vc++ 目录中包含目录添加 include 文件夹路径,库目录中添加 lib 文件夹路径。\n\n![image-20231025224632397](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231025224632397.png)\n\n- C/C++ ->预处理器 -> 预处理器定义 -> 添加MPICH_SKIP_MPICXX\n\n![image-20231025224644983](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231025224644983.png)\n\n- C/C++ -> 代码生成 -> 运行库 ->选择:多线程调试(/MTD)\n\n![image-20231025224658506](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231025224658506.png)\n\n- 属性 -- 链接器 -- 输入 -- 附加依赖项中添加msmpi.lib; \n\n![image-20231025224712946](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231025224712946.png)\n\n\n\n## 4 Linux下配置MPICH\n\n- 安装\n\n```BASH\nsudo apt-get install mpic \n```\n\n- CmakeLists.txt 下配置\n\n```BASH\ncmake_minimum_required(VERSION 3.13) \nproject(MPI) \nset(CMAKE_CXX_STANDARD 17) \nfind_package(MPI REQUIRED) \ninclude_directories(${MPI_INCLUDE_PATH}) \nset(CMAKE_CXX_COMPILER mpicxx) \nset(CMAKE_C_COMPILER mpicc) \nadd_executable(MPI main.cpp)\n```\n\n\n\n## 5 源码及更多分析文档\n\n{% link Github源码, https://github.com/binwenwu/Eratosthenes, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D1662322932%2C969135674%26fm%3D253%26fmt%3Dauto%26app%3D120%26f%3DJPEG %}\n\n","source":"_posts/基于 MPI 的埃拉托斯特尼筛法的并行化设计、实现与结果分析.md","raw":"---\ntitle: 基于 MPI 的埃拉托斯特尼筛法的并行化设计、实现与结果分析\ncover: >-\n https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D4009061548%2C3284864615%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG\ntop_img: 'https://bu.dusays.com/2022/09/01/63103a65e883d.webp'\nkeywords: '算法,并行计算'\ncategories:\n - 算法\ntags:\n - 并行计算\n - 算法\nabbrlink: '55978286'\ndate: 2023-03-12 17:59:05\n---\n\n## 1 算法介绍\n\n​\t埃拉托斯特尼是一位古希腊数学家,他在寻找整数N以内的素数时,采用了一种与众不同的方法:先将2~N的各个数写在纸上:\n\n​\t在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数是5,将它画圈,并划去5的其他倍数……依此类推,一直到所有小于或等于N的各数都画了圈或划去为止。这时,画了圈的以及未划去的那些数正好就是小于N的素数。\n\n![image-20231025224209018](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231025224209018.png)\n\n- 其伪代码如下:\n\n```TEXT\nInput: an integer n > 1\n\nLet A be an array of Boolean values, indexed by integers 2 to n,\ninitially all set to true.\n\n for i = 2, 3, 4, ..., not exceeding √n:\n if A[i] is true:\n for j = i2, i2+i, i2+2i, i2+3i, ..., not exceeding n :\n A[j] := false\n\nOutput: all i such that A[i] is true.\n```\n\n\n\n## 2 实验环境\n\n- 硬件环境\n\n![image-20231025224344521](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20231025225837.png)\n\n- 开发环境\n - Visual Studio 2019,MSMPI v10.0\n\n\n\n## 3 MPI环境配置(Windows)\n\nwindows 下运行mpi首推微软的msmp,因为比较简单,下载地址为:https://docs.microsoft.com/en-us/message-passing-interface/microsoft-mpi,\n将两个安装包msmpisdk.msi和msmpisetup.exe分别下载然后安装完成后即可,下面是在VS2019中引入MSMPI的步骤:\n\n- 在VS中新建C++控制台应用程序,将项目编译改为X64\n\n![image-20231025224621719](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231025224621719.png)\n\n- 去安装的SDK目录,找到include与lib文件夹右键项目 -- 属性 -- vc++ 目录中包含目录添加 include 文件夹路径,库目录中添加 lib 文件夹路径。\n\n![image-20231025224632397](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231025224632397.png)\n\n- C/C++ ->预处理器 -> 预处理器定义 -> 添加MPICH_SKIP_MPICXX\n\n![image-20231025224644983](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231025224644983.png)\n\n- C/C++ -> 代码生成 -> 运行库 ->选择:多线程调试(/MTD)\n\n![image-20231025224658506](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231025224658506.png)\n\n- 属性 -- 链接器 -- 输入 -- 附加依赖项中添加msmpi.lib; \n\n![image-20231025224712946](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231025224712946.png)\n\n\n\n## 4 Linux下配置MPICH\n\n- 安装\n\n```BASH\nsudo apt-get install mpic \n```\n\n- CmakeLists.txt 下配置\n\n```BASH\ncmake_minimum_required(VERSION 3.13) \nproject(MPI) \nset(CMAKE_CXX_STANDARD 17) \nfind_package(MPI REQUIRED) \ninclude_directories(${MPI_INCLUDE_PATH}) \nset(CMAKE_CXX_COMPILER mpicxx) \nset(CMAKE_C_COMPILER mpicc) \nadd_executable(MPI main.cpp)\n```\n\n\n\n## 5 源码及更多分析文档\n\n{% link Github源码, https://github.com/binwenwu/Eratosthenes, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D1662322932%2C969135674%26fm%3D253%26fmt%3Dauto%26app%3D120%26f%3DJPEG %}\n\n","slug":"基于 MPI 的埃拉托斯特尼筛法的并行化设计、实现与结果分析","published":1,"updated":"2023-10-25T15:03:14.037Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyrtz001i2j3ugs0lc92x","content":"

1 算法介绍

\n

​\t埃拉托斯特尼是一位古希腊数学家,他在寻找整数N以内的素数时,采用了一种与众不同的方法:先将2~N的各个数写在纸上:

\n

​\t在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数是5,将它画圈,并划去5的其他倍数……依此类推,一直到所有小于或等于N的各数都画了圈或划去为止。这时,画了圈的以及未划去的那些数正好就是小于N的素数。

\n

\"image-20231025224209018\"

\n
    \n
  • 其伪代码如下:
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
Input: an integer n > 1

Let A be an array of Boolean values, indexed by integers 2 to n,
initially all set to true.

for i = 2, 3, 4, ..., not exceeding √n:
if A[i] is true:
for j = i2, i2+i, i2+2i, i2+3i, ..., not exceeding n :
A[j] := false

Output: all i such that A[i] is true.
\n

2 实验环境

\n
    \n
  • 硬件环境
  • \n
\n

\"image-20231025224344521\"

\n
    \n
  • 开发环境\n
      \n
    • Visual Studio 2019,MSMPI v10.0
    • \n
    \n
  • \n
\n

3 MPI环境配置(Windows)

\n

windows 下运行mpi首推微软的msmp,因为比较简单,下载地址为:https://docs.microsoft.com/en-us/message-passing-interface/microsoft-mpi,
\n将两个安装包msmpisdk.msi和msmpisetup.exe分别下载然后安装完成后即可,下面是在VS2019中引入MSMPI的步骤:

\n
    \n
  • 在VS中新建C++控制台应用程序,将项目编译改为X64
  • \n
\n

\"image-20231025224621719\"

\n
    \n
  • 去安装的SDK目录,找到include与lib文件夹右键项目 – 属性 – vc++ 目录中包含目录添加 include 文件夹路径,库目录中添加 lib 文件夹路径。
  • \n
\n

\"image-20231025224632397\"

\n
    \n
  • C/C++ ->预处理器 -> 预处理器定义 -> 添加MPICH_SKIP_MPICXX
  • \n
\n

\"image-20231025224644983\"

\n
    \n
  • C/C++ -> 代码生成 -> 运行库 ->选择:多线程调试(/MTD)
  • \n
\n

\"image-20231025224658506\"

\n
    \n
  • 属性 – 链接器 – 输入 – 附加依赖项中添加msmpi.lib;
  • \n
\n

\"image-20231025224712946\"

\n

4 Linux下配置MPICH

\n
    \n
  • 安装
  • \n
\n
1
sudo apt-get install mpic  
\n
    \n
  • CmakeLists.txt 下配置
  • \n
\n
1
2
3
4
5
6
7
8
cmake_minimum_required(VERSION 3.13)    
project(MPI)
set(CMAKE_CXX_STANDARD 17)
find_package(MPI REQUIRED)
include_directories(${MPI_INCLUDE_PATH})
set(CMAKE_CXX_COMPILER mpicxx)
set(CMAKE_C_COMPILER mpicc)
add_executable(MPI main.cpp)
\n

5 源码及更多分析文档

\n\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":1258,"excerpt":"","more":"

1 算法介绍

\n

​\t埃拉托斯特尼是一位古希腊数学家,他在寻找整数N以内的素数时,采用了一种与众不同的方法:先将2~N的各个数写在纸上:

\n

​\t在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数是5,将它画圈,并划去5的其他倍数……依此类推,一直到所有小于或等于N的各数都画了圈或划去为止。这时,画了圈的以及未划去的那些数正好就是小于N的素数。

\n

\"image-20231025224209018\"

\n
    \n
  • 其伪代码如下:
  • \n
\n
1
2
3
4
5
6
7
8
9
10
11
Input: an integer n > 1

Let A be an array of Boolean values, indexed by integers 2 to n,
initially all set to true.

for i = 2, 3, 4, ..., not exceeding √n:
if A[i] is true:
for j = i2, i2+i, i2+2i, i2+3i, ..., not exceeding n :
A[j] := false

Output: all i such that A[i] is true.
\n

2 实验环境

\n
    \n
  • 硬件环境
  • \n
\n

\"image-20231025224344521\"

\n
    \n
  • 开发环境\n
      \n
    • Visual Studio 2019,MSMPI v10.0
    • \n
    \n
  • \n
\n

3 MPI环境配置(Windows)

\n

windows 下运行mpi首推微软的msmp,因为比较简单,下载地址为:https://docs.microsoft.com/en-us/message-passing-interface/microsoft-mpi,
\n将两个安装包msmpisdk.msi和msmpisetup.exe分别下载然后安装完成后即可,下面是在VS2019中引入MSMPI的步骤:

\n
    \n
  • 在VS中新建C++控制台应用程序,将项目编译改为X64
  • \n
\n

\"image-20231025224621719\"

\n
    \n
  • 去安装的SDK目录,找到include与lib文件夹右键项目 – 属性 – vc++ 目录中包含目录添加 include 文件夹路径,库目录中添加 lib 文件夹路径。
  • \n
\n

\"image-20231025224632397\"

\n
    \n
  • C/C++ ->预处理器 -> 预处理器定义 -> 添加MPICH_SKIP_MPICXX
  • \n
\n

\"image-20231025224644983\"

\n
    \n
  • C/C++ -> 代码生成 -> 运行库 ->选择:多线程调试(/MTD)
  • \n
\n

\"image-20231025224658506\"

\n
    \n
  • 属性 – 链接器 – 输入 – 附加依赖项中添加msmpi.lib;
  • \n
\n

\"image-20231025224712946\"

\n

4 Linux下配置MPICH

\n
    \n
  • 安装
  • \n
\n
1
sudo apt-get install mpic  
\n
    \n
  • CmakeLists.txt 下配置
  • \n
\n
1
2
3
4
5
6
7
8
cmake_minimum_required(VERSION 3.13)    
project(MPI)
set(CMAKE_CXX_STANDARD 17)
find_package(MPI REQUIRED)
include_directories(${MPI_INCLUDE_PATH})
set(CMAKE_CXX_COMPILER mpicxx)
set(CMAKE_C_COMPILER mpicc)
add_executable(MPI main.cpp)
\n

5 源码及更多分析文档

\n\n"},{"title":"本地启动前端打包的项目","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6830a53bly1fxyfl3we7sj20g809qgma.jpg","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"前端,打包","abbrlink":"16380ff0","date":"2023-07-12T09:59:05.000Z","_content":"\n### 1 全局安装`live-server`插件\n\n```BASH\nnpm install -g live-server \n```\n\n\n\n### 2 启动服务\n\n- 在`dist/build`文件夹中终端输入\n\n```BASH\nlive-server\n```\n\n","source":"_posts/本地启动前端打包的项目.md","raw":"---\ntitle: 本地启动前端打包的项目\ncover: >-\n https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6830a53bly1fxyfl3we7sj20g809qgma.jpg\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: '前端,打包'\ncategories:\n - 前端开发\ntags:\n - 前端\n - 打包\nabbrlink: 16380ff0\ndate: 2023-07-12 17:59:05\n---\n\n### 1 全局安装`live-server`插件\n\n```BASH\nnpm install -g live-server \n```\n\n\n\n### 2 启动服务\n\n- 在`dist/build`文件夹中终端输入\n\n```BASH\nlive-server\n```\n\n","slug":"本地启动前端打包的项目","published":1,"updated":"2023-10-21T04:50:47.089Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyrtz001l2j3u5o1pdrwi","content":"

1 全局安装live-server插件

\n
1
npm install -g live-server 
\n

2 启动服务

\n
    \n
  • dist/build文件夹中终端输入
  • \n
\n
1
live-server
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":78,"excerpt":"","more":"

1 全局安装live-server插件

\n
1
npm install -g live-server 
\n

2 启动服务

\n
    \n
  • dist/build文件夹中终端输入
  • \n
\n
1
live-server
\n"},{"title":"武汉大学微软社招新2023笔试题","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/%E7%BC%96%E7%A8%8B.png","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"微软社","abbrlink":"33834cc9","date":"2023-08-13T17:50:45.000Z","_content":"\n## 1 题目\n\n{% note simple %}[点此下载 Files](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/Files.zip),并解压缩。Files 包含了 100 个具有随机名称的 .txt 文件,其中有且只有唯一一个 .txt 文件的内容是“MSC2023”,请尝试将其找出,得到文件名称。{% endnote %}\n\n\n\n{% link Github源码, https://github.com/binwenwu/Find-File, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D1662322932%2C969135674%26fm%3D253%26fmt%3Dauto%26app%3D120%26f%3DJPEG %}\n\n\n\n## 2 Java 版本\n\n```Java\nimport java.io.*;\nimport java.util.zip.*;\n\n/**\n * @author wbw\n */\npublic final class FindNameJava {\n public static void main(String[] args) {\n\n // 压缩文件路径\n String zipFilePath = \"src/main/demo/Files.zip\";\n // 解压缩目录\n String unzipFolderPath = \"src/main/demo/\";\n // 目标文件内容\n String targetContent = \"MSC2023\";\n\n\n // 1. 解压文件\n try {\n unzip(zipFilePath, unzipFolderPath);\n System.out.println(\"Unzip operation successful.\");\n } catch (IOException e) {\n e.printStackTrace();\n }\n\n // 2. 开始遍历寻找\n String targetFileName = findTargetFileName(\"src/main/demo/Files\", targetContent);\n if (targetFileName != null) {\n String outputFileName = \"src/main/demo/target.txt\";\n try (PrintWriter writer = new PrintWriter(outputFileName)) {\n writer.println(targetFileName);\n System.out.println(\"Target file name written to \" + outputFileName + \": \" + targetFileName);\n } catch (IOException e) {\n System.out.println(\"Error writing to \" + outputFileName + \": \" + e.getMessage());\n e.printStackTrace();\n }\n } else {\n System.out.println(\"Target file not found.\");\n }\n\n\n }\n\n\n /**\n * 解压缩\n * @author wbw\n * @param zipFilePath 压缩文件路径\n * @param outputFolder 解压缩目录\n */\n public static void unzip(String zipFilePath, String outputFolder) throws IOException {\n byte[] buffer = new byte[1024];\n try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFilePath))) {\n ZipEntry zipEntry = zipInputStream.getNextEntry();\n while (zipEntry != null) {\n String entryName = zipEntry.getName();\n File newFile = new File(outputFolder, entryName);\n if (zipEntry.isDirectory()) {\n newFile.mkdirs();\n } else {\n new File(newFile.getParent()).mkdirs();\n try (FileOutputStream fileOutputStream = new FileOutputStream(newFile)) {\n int length;\n while ((length = zipInputStream.read(buffer)) > 0) {\n fileOutputStream.write(buffer, 0, length);\n }\n }\n }\n zipEntry = zipInputStream.getNextEntry();\n }\n }\n }\n\n\n /**\n * 遍历文件夹,寻找目标文件名,返回文件名\n * @author wbw\n * @param folderPath 文件夹路径\n * @param targetContent 目标文件内容\n * @return 目标文件名\n */\n public static String findTargetFileName(String folderPath, String targetContent) {\n File folder = new File(folderPath);\n File[] files = folder.listFiles();\n\n if (files != null) {\n for (File file : files) {\n if (file.isFile() && file.getName().endsWith(\".txt\")) {\n try (BufferedReader reader = new BufferedReader(new FileReader(file))) {\n String line;\n StringBuilder content = new StringBuilder();\n while ((line = reader.readLine()) != null) {\n content.append(line);\n }\n if (content.toString().equals(targetContent)) {\n // 找到对应文件\n return file.getName();\n }\n } catch (IOException e) {\n e.printStackTrace();\n }\n }\n }\n }\n // 未找到\n return null;\n }\n}\n\n```\n\n\n\n## 3 Spark 版本\n\n```scala\nimport org.apache.spark.{SparkConf, SparkContext}\n\nimport java.io._\nimport java.util.zip._\nimport java.nio.file.{Paths, Path}\n\nobject FindNameScala {\n def main(args: Array[String]): Unit = {\n val zipFilePath = \"src/main/demo/Files.zip\" // ZIP文件路径\n val unzipFolderPath = \"src/main/demo/\" // 解压后的输出文件夹(当前目录)\n val targetContent = \"MSC2023\" // 目标文件内容\n\n\n // 1. 解压文件\n unzip(zipFilePath, unzipFolderPath)\n\n\n // 2. 开始寻找\n val conf = new SparkConf().setMaster(\"local\").setAppName(\"ParallelFileSearch\")\n val sc = new SparkContext(conf)\n val folderPath = \"src/main/demo/Files\" // 文件夹路径\n val textFiles = sc.wholeTextFiles(folderPath) // 读取所有文件的内容,返回(文件名,内容)对\n val matchingFiles = textFiles.filter { case (_, content) => content.trim == targetContent }\n if (matchingFiles.isEmpty()) {\n println(\"Target file not found.\")\n } else {\n val (filePath, _) = matchingFiles.first() // 获取第一个匹配的文件名\n val outputFile = new java.io.PrintWriter(\"src/main/demo/target.txt\") // 创建目标文件\n val fileName = extractFileName(filePath) // 提取文件名\n outputFile.println(fileName) // 写入文件名\n outputFile.close()\n println(s\"Target file name written to target.txt: $fileName\")\n }\n sc.stop()\n\n }\n\n\n /**\n * @author wbw\n * @param zipFilePath 压缩文件路径\n * @param unzipFolderPath 解压缩目录\n */\n def unzip(zipFilePath: String, unzipFolderPath: String): Unit = {\n val buffer = new Array[Byte](1024)\n val zipFile = new ZipFile(zipFilePath)\n\n val entries = zipFile.entries()\n\n while (entries.hasMoreElements) {\n val entry = entries.nextElement()\n val entryName = entry.getName\n val entryPath = s\"$unzipFolderPath/$entryName\"\n\n if (!entry.isDirectory) {\n val inputStream = zipFile.getInputStream(entry)\n val outputStream = new BufferedOutputStream(new FileOutputStream(entryPath))\n\n var bytesRead = 0\n while ( {\n bytesRead = inputStream.read(buffer);\n bytesRead != -1\n }) {\n outputStream.write(buffer, 0, bytesRead) // 从输入流读取内容并写入到输出流\n }\n outputStream.close()\n inputStream.close()\n } else {\n new File(entryPath).mkdirs()\n }\n }\n zipFile.close()\n println(\"Unzip completed.\")\n }\n\n\n/**\n * 从文件路径中提取文件名\n * @param filePath 文件路径\n * @return 文件名\n */\n def extractFileName(filePath: String): String = {\n val lastIndex = filePath.lastIndexOf('/')\n if (lastIndex != -1) {\n filePath.substring(lastIndex + 1)\n } else {\n filePath\n }\n }\n\n}\n\n```\n","source":"_posts/武汉大学微软社招新2023笔试题.md","raw":"---\ntitle: 武汉大学微软社招新2023笔试题\ncover: >-\n https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/%E7%BC%96%E7%A8%8B.png\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: '微软社'\ncategories:\n - 微软社\ntags:\n - 微软社\nabbrlink: 33834cc9\ndate: 2023-08-14 01:50:45\n---\n\n## 1 题目\n\n{% note simple %}[点此下载 Files](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/Files.zip),并解压缩。Files 包含了 100 个具有随机名称的 .txt 文件,其中有且只有唯一一个 .txt 文件的内容是“MSC2023”,请尝试将其找出,得到文件名称。{% endnote %}\n\n\n\n{% link Github源码, https://github.com/binwenwu/Find-File, https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D1662322932%2C969135674%26fm%3D253%26fmt%3Dauto%26app%3D120%26f%3DJPEG %}\n\n\n\n## 2 Java 版本\n\n```Java\nimport java.io.*;\nimport java.util.zip.*;\n\n/**\n * @author wbw\n */\npublic final class FindNameJava {\n public static void main(String[] args) {\n\n // 压缩文件路径\n String zipFilePath = \"src/main/demo/Files.zip\";\n // 解压缩目录\n String unzipFolderPath = \"src/main/demo/\";\n // 目标文件内容\n String targetContent = \"MSC2023\";\n\n\n // 1. 解压文件\n try {\n unzip(zipFilePath, unzipFolderPath);\n System.out.println(\"Unzip operation successful.\");\n } catch (IOException e) {\n e.printStackTrace();\n }\n\n // 2. 开始遍历寻找\n String targetFileName = findTargetFileName(\"src/main/demo/Files\", targetContent);\n if (targetFileName != null) {\n String outputFileName = \"src/main/demo/target.txt\";\n try (PrintWriter writer = new PrintWriter(outputFileName)) {\n writer.println(targetFileName);\n System.out.println(\"Target file name written to \" + outputFileName + \": \" + targetFileName);\n } catch (IOException e) {\n System.out.println(\"Error writing to \" + outputFileName + \": \" + e.getMessage());\n e.printStackTrace();\n }\n } else {\n System.out.println(\"Target file not found.\");\n }\n\n\n }\n\n\n /**\n * 解压缩\n * @author wbw\n * @param zipFilePath 压缩文件路径\n * @param outputFolder 解压缩目录\n */\n public static void unzip(String zipFilePath, String outputFolder) throws IOException {\n byte[] buffer = new byte[1024];\n try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFilePath))) {\n ZipEntry zipEntry = zipInputStream.getNextEntry();\n while (zipEntry != null) {\n String entryName = zipEntry.getName();\n File newFile = new File(outputFolder, entryName);\n if (zipEntry.isDirectory()) {\n newFile.mkdirs();\n } else {\n new File(newFile.getParent()).mkdirs();\n try (FileOutputStream fileOutputStream = new FileOutputStream(newFile)) {\n int length;\n while ((length = zipInputStream.read(buffer)) > 0) {\n fileOutputStream.write(buffer, 0, length);\n }\n }\n }\n zipEntry = zipInputStream.getNextEntry();\n }\n }\n }\n\n\n /**\n * 遍历文件夹,寻找目标文件名,返回文件名\n * @author wbw\n * @param folderPath 文件夹路径\n * @param targetContent 目标文件内容\n * @return 目标文件名\n */\n public static String findTargetFileName(String folderPath, String targetContent) {\n File folder = new File(folderPath);\n File[] files = folder.listFiles();\n\n if (files != null) {\n for (File file : files) {\n if (file.isFile() && file.getName().endsWith(\".txt\")) {\n try (BufferedReader reader = new BufferedReader(new FileReader(file))) {\n String line;\n StringBuilder content = new StringBuilder();\n while ((line = reader.readLine()) != null) {\n content.append(line);\n }\n if (content.toString().equals(targetContent)) {\n // 找到对应文件\n return file.getName();\n }\n } catch (IOException e) {\n e.printStackTrace();\n }\n }\n }\n }\n // 未找到\n return null;\n }\n}\n\n```\n\n\n\n## 3 Spark 版本\n\n```scala\nimport org.apache.spark.{SparkConf, SparkContext}\n\nimport java.io._\nimport java.util.zip._\nimport java.nio.file.{Paths, Path}\n\nobject FindNameScala {\n def main(args: Array[String]): Unit = {\n val zipFilePath = \"src/main/demo/Files.zip\" // ZIP文件路径\n val unzipFolderPath = \"src/main/demo/\" // 解压后的输出文件夹(当前目录)\n val targetContent = \"MSC2023\" // 目标文件内容\n\n\n // 1. 解压文件\n unzip(zipFilePath, unzipFolderPath)\n\n\n // 2. 开始寻找\n val conf = new SparkConf().setMaster(\"local\").setAppName(\"ParallelFileSearch\")\n val sc = new SparkContext(conf)\n val folderPath = \"src/main/demo/Files\" // 文件夹路径\n val textFiles = sc.wholeTextFiles(folderPath) // 读取所有文件的内容,返回(文件名,内容)对\n val matchingFiles = textFiles.filter { case (_, content) => content.trim == targetContent }\n if (matchingFiles.isEmpty()) {\n println(\"Target file not found.\")\n } else {\n val (filePath, _) = matchingFiles.first() // 获取第一个匹配的文件名\n val outputFile = new java.io.PrintWriter(\"src/main/demo/target.txt\") // 创建目标文件\n val fileName = extractFileName(filePath) // 提取文件名\n outputFile.println(fileName) // 写入文件名\n outputFile.close()\n println(s\"Target file name written to target.txt: $fileName\")\n }\n sc.stop()\n\n }\n\n\n /**\n * @author wbw\n * @param zipFilePath 压缩文件路径\n * @param unzipFolderPath 解压缩目录\n */\n def unzip(zipFilePath: String, unzipFolderPath: String): Unit = {\n val buffer = new Array[Byte](1024)\n val zipFile = new ZipFile(zipFilePath)\n\n val entries = zipFile.entries()\n\n while (entries.hasMoreElements) {\n val entry = entries.nextElement()\n val entryName = entry.getName\n val entryPath = s\"$unzipFolderPath/$entryName\"\n\n if (!entry.isDirectory) {\n val inputStream = zipFile.getInputStream(entry)\n val outputStream = new BufferedOutputStream(new FileOutputStream(entryPath))\n\n var bytesRead = 0\n while ( {\n bytesRead = inputStream.read(buffer);\n bytesRead != -1\n }) {\n outputStream.write(buffer, 0, bytesRead) // 从输入流读取内容并写入到输出流\n }\n outputStream.close()\n inputStream.close()\n } else {\n new File(entryPath).mkdirs()\n }\n }\n zipFile.close()\n println(\"Unzip completed.\")\n }\n\n\n/**\n * 从文件路径中提取文件名\n * @param filePath 文件路径\n * @return 文件名\n */\n def extractFileName(filePath: String): String = {\n val lastIndex = filePath.lastIndexOf('/')\n if (lastIndex != -1) {\n filePath.substring(lastIndex + 1)\n } else {\n filePath\n }\n }\n\n}\n\n```\n","slug":"武汉大学微软社招新2023笔试题","published":1,"updated":"2023-10-21T05:16:08.660Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyru6004i2j3ufrpqd2xx","content":"

1 题目

\n

点此下载 Files,并解压缩。Files 包含了 100 个具有随机名称的 .txt 文件,其中有且只有唯一一个 .txt 文件的内容是“MSC2023”,请尝试将其找出,得到文件名称。

\n
\n\n

2 Java 版本

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import java.io.*;
import java.util.zip.*;

/**
* @author wbw
*/
public final class FindNameJava {
public static void main(String[] args) {

// 压缩文件路径
String zipFilePath = "src/main/demo/Files.zip";
// 解压缩目录
String unzipFolderPath = "src/main/demo/";
// 目标文件内容
String targetContent = "MSC2023";


// 1. 解压文件
try {
unzip(zipFilePath, unzipFolderPath);
System.out.println("Unzip operation successful.");
} catch (IOException e) {
e.printStackTrace();
}

// 2. 开始遍历寻找
String targetFileName = findTargetFileName("src/main/demo/Files", targetContent);
if (targetFileName != null) {
String outputFileName = "src/main/demo/target.txt";
try (PrintWriter writer = new PrintWriter(outputFileName)) {
writer.println(targetFileName);
System.out.println("Target file name written to " + outputFileName + ": " + targetFileName);
} catch (IOException e) {
System.out.println("Error writing to " + outputFileName + ": " + e.getMessage());
e.printStackTrace();
}
} else {
System.out.println("Target file not found.");
}


}


/**
* 解压缩
* @author wbw
* @param zipFilePath 压缩文件路径
* @param outputFolder 解压缩目录
*/
public static void unzip(String zipFilePath, String outputFolder) throws IOException {
byte[] buffer = new byte[1024];
try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFilePath))) {
ZipEntry zipEntry = zipInputStream.getNextEntry();
while (zipEntry != null) {
String entryName = zipEntry.getName();
File newFile = new File(outputFolder, entryName);
if (zipEntry.isDirectory()) {
newFile.mkdirs();
} else {
new File(newFile.getParent()).mkdirs();
try (FileOutputStream fileOutputStream = new FileOutputStream(newFile)) {
int length;
while ((length = zipInputStream.read(buffer)) > 0) {
fileOutputStream.write(buffer, 0, length);
}
}
}
zipEntry = zipInputStream.getNextEntry();
}
}
}


/**
* 遍历文件夹,寻找目标文件名,返回文件名
* @author wbw
* @param folderPath 文件夹路径
* @param targetContent 目标文件内容
* @return 目标文件名
*/
public static String findTargetFileName(String folderPath, String targetContent) {
File folder = new File(folderPath);
File[] files = folder.listFiles();

if (files != null) {
for (File file : files) {
if (file.isFile() && file.getName().endsWith(".txt")) {
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
StringBuilder content = new StringBuilder();
while ((line = reader.readLine()) != null) {
content.append(line);
}
if (content.toString().equals(targetContent)) {
// 找到对应文件
return file.getName();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
// 未找到
return null;
}
}

\n

3 Spark 版本

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import org.apache.spark.{SparkConf, SparkContext}

import java.io._
import java.util.zip._
import java.nio.file.{Paths, Path}

object FindNameScala {
def main(args: Array[String]): Unit = {
val zipFilePath = "src/main/demo/Files.zip" // ZIP文件路径
val unzipFolderPath = "src/main/demo/" // 解压后的输出文件夹(当前目录)
val targetContent = "MSC2023" // 目标文件内容


// 1. 解压文件
unzip(zipFilePath, unzipFolderPath)


// 2. 开始寻找
val conf = new SparkConf().setMaster("local").setAppName("ParallelFileSearch")
val sc = new SparkContext(conf)
val folderPath = "src/main/demo/Files" // 文件夹路径
val textFiles = sc.wholeTextFiles(folderPath) // 读取所有文件的内容,返回(文件名,内容)对
val matchingFiles = textFiles.filter { case (_, content) => content.trim == targetContent }
if (matchingFiles.isEmpty()) {
println("Target file not found.")
} else {
val (filePath, _) = matchingFiles.first() // 获取第一个匹配的文件名
val outputFile = new java.io.PrintWriter("src/main/demo/target.txt") // 创建目标文件
val fileName = extractFileName(filePath) // 提取文件名
outputFile.println(fileName) // 写入文件名
outputFile.close()
println(s"Target file name written to target.txt: $fileName")
}
sc.stop()

}


/**
* @author wbw
* @param zipFilePath 压缩文件路径
* @param unzipFolderPath 解压缩目录
*/
def unzip(zipFilePath: String, unzipFolderPath: String): Unit = {
val buffer = new Array[Byte](1024)
val zipFile = new ZipFile(zipFilePath)

val entries = zipFile.entries()

while (entries.hasMoreElements) {
val entry = entries.nextElement()
val entryName = entry.getName
val entryPath = s"$unzipFolderPath/$entryName"

if (!entry.isDirectory) {
val inputStream = zipFile.getInputStream(entry)
val outputStream = new BufferedOutputStream(new FileOutputStream(entryPath))

var bytesRead = 0
while ( {
bytesRead = inputStream.read(buffer);
bytesRead != -1
}) {
outputStream.write(buffer, 0, bytesRead) // 从输入流读取内容并写入到输出流
}
outputStream.close()
inputStream.close()
} else {
new File(entryPath).mkdirs()
}
}
zipFile.close()
println("Unzip completed.")
}


/**
* 从文件路径中提取文件名
* @param filePath 文件路径
* @return 文件名
*/
def extractFileName(filePath: String): String = {
val lastIndex = filePath.lastIndexOf('/')
if (lastIndex != -1) {
filePath.substring(lastIndex + 1)
} else {
filePath
}
}

}

\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":5316,"excerpt":"","more":"

1 题目

\n

点此下载 Files,并解压缩。Files 包含了 100 个具有随机名称的 .txt 文件,其中有且只有唯一一个 .txt 文件的内容是“MSC2023”,请尝试将其找出,得到文件名称。

\n
\n\n

2 Java 版本

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import java.io.*;
import java.util.zip.*;

/**
* @author wbw
*/
public final class FindNameJava {
public static void main(String[] args) {

// 压缩文件路径
String zipFilePath = "src/main/demo/Files.zip";
// 解压缩目录
String unzipFolderPath = "src/main/demo/";
// 目标文件内容
String targetContent = "MSC2023";


// 1. 解压文件
try {
unzip(zipFilePath, unzipFolderPath);
System.out.println("Unzip operation successful.");
} catch (IOException e) {
e.printStackTrace();
}

// 2. 开始遍历寻找
String targetFileName = findTargetFileName("src/main/demo/Files", targetContent);
if (targetFileName != null) {
String outputFileName = "src/main/demo/target.txt";
try (PrintWriter writer = new PrintWriter(outputFileName)) {
writer.println(targetFileName);
System.out.println("Target file name written to " + outputFileName + ": " + targetFileName);
} catch (IOException e) {
System.out.println("Error writing to " + outputFileName + ": " + e.getMessage());
e.printStackTrace();
}
} else {
System.out.println("Target file not found.");
}


}


/**
* 解压缩
* @author wbw
* @param zipFilePath 压缩文件路径
* @param outputFolder 解压缩目录
*/
public static void unzip(String zipFilePath, String outputFolder) throws IOException {
byte[] buffer = new byte[1024];
try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFilePath))) {
ZipEntry zipEntry = zipInputStream.getNextEntry();
while (zipEntry != null) {
String entryName = zipEntry.getName();
File newFile = new File(outputFolder, entryName);
if (zipEntry.isDirectory()) {
newFile.mkdirs();
} else {
new File(newFile.getParent()).mkdirs();
try (FileOutputStream fileOutputStream = new FileOutputStream(newFile)) {
int length;
while ((length = zipInputStream.read(buffer)) > 0) {
fileOutputStream.write(buffer, 0, length);
}
}
}
zipEntry = zipInputStream.getNextEntry();
}
}
}


/**
* 遍历文件夹,寻找目标文件名,返回文件名
* @author wbw
* @param folderPath 文件夹路径
* @param targetContent 目标文件内容
* @return 目标文件名
*/
public static String findTargetFileName(String folderPath, String targetContent) {
File folder = new File(folderPath);
File[] files = folder.listFiles();

if (files != null) {
for (File file : files) {
if (file.isFile() && file.getName().endsWith(".txt")) {
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
StringBuilder content = new StringBuilder();
while ((line = reader.readLine()) != null) {
content.append(line);
}
if (content.toString().equals(targetContent)) {
// 找到对应文件
return file.getName();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
// 未找到
return null;
}
}

\n

3 Spark 版本

\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import org.apache.spark.{SparkConf, SparkContext}

import java.io._
import java.util.zip._
import java.nio.file.{Paths, Path}

object FindNameScala {
def main(args: Array[String]): Unit = {
val zipFilePath = "src/main/demo/Files.zip" // ZIP文件路径
val unzipFolderPath = "src/main/demo/" // 解压后的输出文件夹(当前目录)
val targetContent = "MSC2023" // 目标文件内容


// 1. 解压文件
unzip(zipFilePath, unzipFolderPath)


// 2. 开始寻找
val conf = new SparkConf().setMaster("local").setAppName("ParallelFileSearch")
val sc = new SparkContext(conf)
val folderPath = "src/main/demo/Files" // 文件夹路径
val textFiles = sc.wholeTextFiles(folderPath) // 读取所有文件的内容,返回(文件名,内容)对
val matchingFiles = textFiles.filter { case (_, content) => content.trim == targetContent }
if (matchingFiles.isEmpty()) {
println("Target file not found.")
} else {
val (filePath, _) = matchingFiles.first() // 获取第一个匹配的文件名
val outputFile = new java.io.PrintWriter("src/main/demo/target.txt") // 创建目标文件
val fileName = extractFileName(filePath) // 提取文件名
outputFile.println(fileName) // 写入文件名
outputFile.close()
println(s"Target file name written to target.txt: $fileName")
}
sc.stop()

}


/**
* @author wbw
* @param zipFilePath 压缩文件路径
* @param unzipFolderPath 解压缩目录
*/
def unzip(zipFilePath: String, unzipFolderPath: String): Unit = {
val buffer = new Array[Byte](1024)
val zipFile = new ZipFile(zipFilePath)

val entries = zipFile.entries()

while (entries.hasMoreElements) {
val entry = entries.nextElement()
val entryName = entry.getName
val entryPath = s"$unzipFolderPath/$entryName"

if (!entry.isDirectory) {
val inputStream = zipFile.getInputStream(entry)
val outputStream = new BufferedOutputStream(new FileOutputStream(entryPath))

var bytesRead = 0
while ( {
bytesRead = inputStream.read(buffer);
bytesRead != -1
}) {
outputStream.write(buffer, 0, bytesRead) // 从输入流读取内容并写入到输出流
}
outputStream.close()
inputStream.close()
} else {
new File(entryPath).mkdirs()
}
}
zipFile.close()
println("Unzip completed.")
}


/**
* 从文件路径中提取文件名
* @param filePath 文件路径
* @return 文件名
*/
def extractFileName(filePath: String): String = {
val lastIndex = filePath.lastIndexOf('/')
if (lastIndex != -1) {
filePath.substring(lastIndex + 1)
} else {
filePath
}
}

}

\n"},{"title":"通过原始存储配置文件恢复数据库(简单粗暴)","cover":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D4220270129%2C1172462401%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG","top_img":"https://bu.dusays.com/2022/09/01/63103a65e883d.webp","keywords":"docker,数据库恢复,数据库,恢复,原始存储配置文件,MongoDB,MySQL,PostgreSQL","abbrlink":"add5de83","date":"2023-10-12T01:20:52.000Z","_content":"\n\n{% tip warning faa-horizontal animated %}本文方法为作者自己尝试得出,不一定有效,若失败,还请参考正规的解决方案{% endtip %}\n{% tip %}本文的三种数据库恢复都以Docker来进行恢复,即本文会用Docker创建相应的数据库容器来对需要恢复的数据库进行恢复,在删除配置文件时,需要查看一些配置文件内容是否与需要恢复的数据库相同,如K8S集群中创建的数据库与Docker中创建的pg数据库就不同,`postmaster.pid`等文件内容{% endtip %}\n\n## 1 MongoDB \n\n- 找到需要恢复的数据库的存储配置文件,如下图所示\n\n![image-20231012214612701](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231012214612701.png)\n\n- 拉取MongoDB镜像,版本最好要对应,这里就以安装最新版本为例\n\n```BASH\ndocker pull mongo\n```\n\n- 生成容器\n - `-d`:后台启动模式,不会占用终端\n - `-p`:主机端口:容器内端口\n - `--name`:容器名称\n - `-v`:指定了主机文件系统路径 `/mnt/storage/wbw-mongo/data` 和容器内部路径 `/data/db` 之间的卷映射。这个映射用于将 MongoDB 数据库数据存储在主机上,以便数据持久性。容器内的数据将被存储在主机的 `/mnt/storage/wbw-mongo/data` 目录中\n\n```BASH\ndocker run -d -p 31074:27017 --name wbw-mongo -v /mnt/storage/wbw-mongo/data:/data/db mongo:latest\n```\n\n- 删除刚刚生成的存储配置文件\n\n{% tip warning faa-horizontal animated %}注意,不要直接删除data文件夹,而是将data内的文件全部删除{% endtip %}\n\n```BASH\nrm -rf /mnt/storage/wbw-mongo/data/*\n```\n\n- 将需要恢复的数据库的存储配置文件复制到`/mnt/storage/wbw-mongo/data/`下,假设需要恢复的数据库的存储配置文件位置为`/mnt/storage/bak-mongo/data/`\n\n```BASH\ncp /mnt/storage/bak-mongo/data/* /mnt/storage/wbw-mongo/data/\n```\n\n- 重启容器\n\n```BASH\ndocker restart wbw-mongo\n```\n\n- 恢复结束\n\n\n\n---\n\n\n\n## 2 MySQL \n\n- 找到需要恢复的数据库的存储配置文件,如下图所示\n\n![image-20231012221503300](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231012221503300.png)\n\n- 拉取MySQL镜像,版本最好要对应,这里就以安装最新版本为例\n\n```BASH\ndocker pull mysql\n```\n\n- 生成容器\n\n```BASH\ndocker run -d -p 30491:3306 --name wbw-mysql -e MYSQL_ROOT_PASSWORD=123456 -v /mnt/storage/wbw-mysql/data:/var/lib/mysql mysql:latest\n```\n\n- 删除刚刚生成的存储配置文件\n\n```BASH\nrm -rf /mnt/storage/wbw-mysql/data/*\n```\n\n- 将需要恢复的数据库的存储配置文件复制到`/mnt/storage/wbw-mysql/data/`下,假设需要恢复的数据库的存储配置文件位置为`/mnt/storage/bak-mysql/data/`\n\n```BASH\ncp /mnt/storage/bak-mysql/data/* /mnt/storage/wbw-mysql/data/\n```\n\n- 重启容器\n\n```BASH\ndocker restart wbw-mysql\n```\n\n- 恢复结束\n\n\n\n---\n\n\n\n## 3 PostgreSQL\n\n- 找到需要恢复的数据库的存储配置文件,如下图所示\n\n![image-20231012225210135](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231012225210135.png)\n\n- 拉取PostgreSQL镜像,版本最好要对应,这里就以安装14为例\n\n```BASH\ndocker pull postgres:14\n```\n\n- 生成容器\n\n```BASH\ndocker run -d --name wbw-postgres -v /mnt/storage/wbw-postgres/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:14\n```\n\n- 删除刚刚生成的存储配置文件\n\n```BASH\nrm -rf /mnt/storage/wbw-postgres/data/*\n```\n\n- 将需要恢复的数据库的存储配置文件复制到`/mnt/storage/postgresql/data/`下,假设需要恢复的数据库的存储配置文件位置为`/mnt/storage/bak-postgresql/data/`\n\n```BASH\ncp /mnt/storage/bak-postgres/data/* /mnt/storage/wbw-postgres/data/\n```\n\n- 重启容器\n\n```BASH\ndocker restart wbw-postgres\n```\n\n- 恢复结束\n\n","source":"_posts/通过原始存储配置文件恢复数据库(简单粗暴).md","raw":"---\ntitle: 通过原始存储配置文件恢复数据库(简单粗暴)\ncover: https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/u%3D4220270129%2C1172462401%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG\ntop_img: https://bu.dusays.com/2022/09/01/63103a65e883d.webp\nkeywords: 'docker,数据库恢复,数据库,恢复,原始存储配置文件,MongoDB,MySQL,PostgreSQL'\ncategories:\n - 后端开发\ntags:\n - 后端\n - 数据库\n - 容器\n - Docker\nabbrlink: add5de83\ndate: 2023-10-12 09:20:52\n---\n\n\n{% tip warning faa-horizontal animated %}本文方法为作者自己尝试得出,不一定有效,若失败,还请参考正规的解决方案{% endtip %}\n{% tip %}本文的三种数据库恢复都以Docker来进行恢复,即本文会用Docker创建相应的数据库容器来对需要恢复的数据库进行恢复,在删除配置文件时,需要查看一些配置文件内容是否与需要恢复的数据库相同,如K8S集群中创建的数据库与Docker中创建的pg数据库就不同,`postmaster.pid`等文件内容{% endtip %}\n\n## 1 MongoDB \n\n- 找到需要恢复的数据库的存储配置文件,如下图所示\n\n![image-20231012214612701](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231012214612701.png)\n\n- 拉取MongoDB镜像,版本最好要对应,这里就以安装最新版本为例\n\n```BASH\ndocker pull mongo\n```\n\n- 生成容器\n - `-d`:后台启动模式,不会占用终端\n - `-p`:主机端口:容器内端口\n - `--name`:容器名称\n - `-v`:指定了主机文件系统路径 `/mnt/storage/wbw-mongo/data` 和容器内部路径 `/data/db` 之间的卷映射。这个映射用于将 MongoDB 数据库数据存储在主机上,以便数据持久性。容器内的数据将被存储在主机的 `/mnt/storage/wbw-mongo/data` 目录中\n\n```BASH\ndocker run -d -p 31074:27017 --name wbw-mongo -v /mnt/storage/wbw-mongo/data:/data/db mongo:latest\n```\n\n- 删除刚刚生成的存储配置文件\n\n{% tip warning faa-horizontal animated %}注意,不要直接删除data文件夹,而是将data内的文件全部删除{% endtip %}\n\n```BASH\nrm -rf /mnt/storage/wbw-mongo/data/*\n```\n\n- 将需要恢复的数据库的存储配置文件复制到`/mnt/storage/wbw-mongo/data/`下,假设需要恢复的数据库的存储配置文件位置为`/mnt/storage/bak-mongo/data/`\n\n```BASH\ncp /mnt/storage/bak-mongo/data/* /mnt/storage/wbw-mongo/data/\n```\n\n- 重启容器\n\n```BASH\ndocker restart wbw-mongo\n```\n\n- 恢复结束\n\n\n\n---\n\n\n\n## 2 MySQL \n\n- 找到需要恢复的数据库的存储配置文件,如下图所示\n\n![image-20231012221503300](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231012221503300.png)\n\n- 拉取MySQL镜像,版本最好要对应,这里就以安装最新版本为例\n\n```BASH\ndocker pull mysql\n```\n\n- 生成容器\n\n```BASH\ndocker run -d -p 30491:3306 --name wbw-mysql -e MYSQL_ROOT_PASSWORD=123456 -v /mnt/storage/wbw-mysql/data:/var/lib/mysql mysql:latest\n```\n\n- 删除刚刚生成的存储配置文件\n\n```BASH\nrm -rf /mnt/storage/wbw-mysql/data/*\n```\n\n- 将需要恢复的数据库的存储配置文件复制到`/mnt/storage/wbw-mysql/data/`下,假设需要恢复的数据库的存储配置文件位置为`/mnt/storage/bak-mysql/data/`\n\n```BASH\ncp /mnt/storage/bak-mysql/data/* /mnt/storage/wbw-mysql/data/\n```\n\n- 重启容器\n\n```BASH\ndocker restart wbw-mysql\n```\n\n- 恢复结束\n\n\n\n---\n\n\n\n## 3 PostgreSQL\n\n- 找到需要恢复的数据库的存储配置文件,如下图所示\n\n![image-20231012225210135](https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/image-20231012225210135.png)\n\n- 拉取PostgreSQL镜像,版本最好要对应,这里就以安装14为例\n\n```BASH\ndocker pull postgres:14\n```\n\n- 生成容器\n\n```BASH\ndocker run -d --name wbw-postgres -v /mnt/storage/wbw-postgres/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:14\n```\n\n- 删除刚刚生成的存储配置文件\n\n```BASH\nrm -rf /mnt/storage/wbw-postgres/data/*\n```\n\n- 将需要恢复的数据库的存储配置文件复制到`/mnt/storage/postgresql/data/`下,假设需要恢复的数据库的存储配置文件位置为`/mnt/storage/bak-postgresql/data/`\n\n```BASH\ncp /mnt/storage/bak-postgres/data/* /mnt/storage/wbw-postgres/data/\n```\n\n- 重启容器\n\n```BASH\ndocker restart wbw-postgres\n```\n\n- 恢复结束\n\n","slug":"通过原始存储配置文件恢复数据库(简单粗暴)","published":1,"updated":"2023-10-22T03:36:29.061Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clo5vyru6004j2j3u4fn801dq","content":"

本文方法为作者自己尝试得出,不一定有效,若失败,还请参考正规的解决方案

\n
\n

本文的三种数据库恢复都以Docker来进行恢复,即本文会用Docker创建相应的数据库容器来对需要恢复的数据库进行恢复,在删除配置文件时,需要查看一些配置文件内容是否与需要恢复的数据库相同,如K8S集群中创建的数据库与Docker中创建的pg数据库就不同,postmaster.pid等文件内容

\n
\n

1 MongoDB

\n
    \n
  • 找到需要恢复的数据库的存储配置文件,如下图所示
  • \n
\n

\"image-20231012214612701\"

\n
    \n
  • 拉取MongoDB镜像,版本最好要对应,这里就以安装最新版本为例
  • \n
\n
1
docker pull mongo
\n
    \n
  • 生成容器\n
      \n
    • -d:后台启动模式,不会占用终端
    • \n
    • -p:主机端口:容器内端口
    • \n
    • --name:容器名称
    • \n
    • -v:指定了主机文件系统路径 /mnt/storage/wbw-mongo/data 和容器内部路径 /data/db 之间的卷映射。这个映射用于将 MongoDB 数据库数据存储在主机上,以便数据持久性。容器内的数据将被存储在主机的 /mnt/storage/wbw-mongo/data 目录中
    • \n
    \n
  • \n
\n
1
docker run -d -p 31074:27017 --name wbw-mongo -v /mnt/storage/wbw-mongo/data:/data/db  mongo:latest
\n
    \n
  • 删除刚刚生成的存储配置文件
  • \n
\n

注意,不要直接删除data文件夹,而是将data内的文件全部删除

\n
\n
1
rm -rf /mnt/storage/wbw-mongo/data/*
\n
    \n
  • 将需要恢复的数据库的存储配置文件复制到/mnt/storage/wbw-mongo/data/下,假设需要恢复的数据库的存储配置文件位置为/mnt/storage/bak-mongo/data/
  • \n
\n
1
cp /mnt/storage/bak-mongo/data/* /mnt/storage/wbw-mongo/data/
\n
    \n
  • 重启容器
  • \n
\n
1
docker restart wbw-mongo
\n
    \n
  • 恢复结束
  • \n
\n
\n

2 MySQL

\n
    \n
  • 找到需要恢复的数据库的存储配置文件,如下图所示
  • \n
\n

\"image-20231012221503300\"

\n
    \n
  • 拉取MySQL镜像,版本最好要对应,这里就以安装最新版本为例
  • \n
\n
1
docker pull mysql
\n
    \n
  • 生成容器
  • \n
\n
1
docker run -d -p 30491:3306 --name wbw-mysql -e MYSQL_ROOT_PASSWORD=123456 -v /mnt/storage/wbw-mysql/data:/var/lib/mysql mysql:latest
\n
    \n
  • 删除刚刚生成的存储配置文件
  • \n
\n
1
rm -rf /mnt/storage/wbw-mysql/data/*
\n
    \n
  • 将需要恢复的数据库的存储配置文件复制到/mnt/storage/wbw-mysql/data/下,假设需要恢复的数据库的存储配置文件位置为/mnt/storage/bak-mysql/data/
  • \n
\n
1
cp /mnt/storage/bak-mysql/data/* /mnt/storage/wbw-mysql/data/
\n
    \n
  • 重启容器
  • \n
\n
1
docker restart wbw-mysql
\n
    \n
  • 恢复结束
  • \n
\n
\n

3 PostgreSQL

\n
    \n
  • 找到需要恢复的数据库的存储配置文件,如下图所示
  • \n
\n

\"image-20231012225210135\"

\n
    \n
  • 拉取PostgreSQL镜像,版本最好要对应,这里就以安装14为例
  • \n
\n
1
docker pull postgres:14
\n
    \n
  • 生成容器
  • \n
\n
1
docker run -d --name wbw-postgres -v /mnt/storage/wbw-postgres/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:14
\n
    \n
  • 删除刚刚生成的存储配置文件
  • \n
\n
1
rm -rf /mnt/storage/wbw-postgres/data/*
\n
    \n
  • 将需要恢复的数据库的存储配置文件复制到/mnt/storage/postgresql/data/下,假设需要恢复的数据库的存储配置文件位置为/mnt/storage/bak-postgresql/data/
  • \n
\n
1
cp /mnt/storage/bak-postgres/data/* /mnt/storage/wbw-postgres/data/
\n
    \n
  • 重启容器
  • \n
\n
1
docker restart wbw-postgres
\n
    \n
  • 恢复结束
  • \n
\n","site":{"data":{"bangumis":{"wantWatch":[],"watching":[{"title":"镇魂街 第三季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/dbf13f1b3a55d9adc9fe5dcfc095b9835aabdef2.jpg@220w_280h.webp","totalCount":"全16话","id":28340121,"follow":"951.5 万","view":"1.6 亿","danmaku":"33.5 万","coin":"45.1 万","score":9.8,"des":"【第2-4集大会员抢先1集,第5集起大会员专享】\n该季讲述了,拥有“武神躯”的少年镇魂将——曹焱兵为寻父母下落,与少女夏铃、北落师门等队友,闯入灵域禁地芦花古楼,并与守卫者“风花雪月”四王展开激烈交锋..."},{"title":"镇魂街 第一季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/9f3c32186c0779c17808c6a70648563943655af8.jpg@220w_280h.webp","totalCount":"全24话","id":3863,"follow":"459.9 万","view":"6.0 亿","danmaku":"383.1 万","coin":"73.5 万","score":9.1,"des":"普通的应届大学毕业生夏铃在求职之际,收到了一条奇怪的面试通知,因此误入罗刹街并遭到了危险,幸而被镇魂将曹焱兵搭救。然而接触中,曹焱兵却发现夏铃并非看起来那样普通,因为她的身体里也存在着灵力,并且寄宿着..."},{"title":"镇魂街 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/image/6a762ae614e567fc5c322c8cb240bcd4d1e06969.jpg@220w_280h.webp","totalCount":"全10话","id":5626,"follow":"843.0 万","view":"3.8 亿","danmaku":"198.2 万","coin":"132.4 万","score":7.4,"des":"罗刹街镇魂将曹焱兵和寄灵人夏铃踏上修复灵槐之路,羽林街镇魂将南御夫却受命缉拿曹焱兵,恰有菩提街镇魂将北落师门出面平息事态。但南御夫心怀鬼胎,北落师门与女孩水儿也暗藏秘密,曹焱兵和夏铃又将如何应对。菩提..."},{"title":"一人之下 第二季","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/f4e355ac82b4508e26f1883e92320879151453a7.jpg@220w_280h.webp","totalCount":"全24话","id":6402,"follow":"480.3 万","view":"4.6 亿","danmaku":"579.2 万","coin":"107.0 万","score":9.5,"des":"这个世界是存在异人的。张楚岚为了解开爷爷和自身的秘密,和冯宝宝一起前往龙虎山天师府参加异人界的盛会——罗天大醮,并与众多异人高手对战。\n..."},{"title":"一人之下","type":"国创","area":"中国大陆","cover":"https://i0.hdslb.com/bfs/bangumi/af334241d73ff092c5d78d0c9ee9ad893592f9c4.jpg@220w_280h.webp","totalCount":"全12话","id":5050,"follow":"447.8 万","view":"2.3 亿","danmaku":"208.7 万","coin":"51.8 万","score":9.3,"des":"这个世界是存在异人的。 张楚岚就是一个隐藏在普通人中的异人。在生命的前19年中,他一直小心隐藏着自己和别人的不同。直到有一天,神秘少女冯宝宝找上了他。从此他被活尸追,被怪人砍,被卷入了前所未见的麻烦之..."}],"watched":[{"title":"某科学的超电磁炮T","type":"番剧","area":"日本","cover":"https://i0.hdslb.com/bfs/bangumi/image/85c6e348a00a54d0b86d538efb186e006a027e21.png@220w_280h.webp","totalCount":"全25话","id":28224095,"follow":"653.4 万","view":"2.3 亿","danmaku":"281.7 万","coin":"311.5 万","score":9.8,"des":"有 230 万人口,其中八成人口为学生的「学园都市」,是比其他地区科技更为先进,并从事「超能力开发」的特殊地区。而整座学园都市中仅有七人的等级 5 超能力者之一御坂美琴,由于她的能力与个性使然,因而被..."}]},"games":[{"class_name":"游戏世界","description":"我的游戏世界","tip":"跟 石头 一起探索世界","top_background":"https://th.bing.com/th/id/R.13a97ef4830efa5e0b87134d622719f3?rik=G7RaJFpxg5PtkA&riu=http%3a%2f%2fupload.techweb.com.cn%2fs%2f640%2f2019%2f0530%2f1559208230699.jpg&ehk=j1G8rMX98TRX52EkLgI5jW1p7lIQp4I8Si1nqEggFRs%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1","buttonText":"Steam","buttonLink":"https://steamcommunity.com/","good_games":[{"title":"风景一绝","description":"不会错过的风景","games_list":[{"name":"怪物猎人:世界","specification":"CAPCOM Co., Ltd.","description":"在新建构的「Monster Hunter: World」中, 可以体验到你一直期盼的极致猎人生活。","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/94376ca41326836587a137d5999733e5.jpg","link":"https://www.xiaoheihe.cn/games/detail/582010"}]},{"title":"我的最爱","description":"我不能没有它了","games_list":[{"name":"GTA:5","specification":"Rockstar Games","description":"谁还在买GTA5","image":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/271590_dXCCk.jpg","link":"https://www.xiaoheihe.cn/games/detail/271590"}]}]}],"creativity":[{"class_name":"开启创造力","creativity_list":[{"name":"Photoshop","color":"#4082c3","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/photoshop.png"},{"name":"Node","color":"#333","icon":"https://npm.elemecdn.com/anzhiyu-blog@2.1.1/img/svg/node-logo.svg"},{"name":"Python","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/python.png"},{"name":"Java","color":"#fff","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/java.png"},{"name":"CSS3","color":"#2c51db","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/css3.png"},{"name":"JS","color":"#f7cb4f","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/JavaScript.png"},{"name":"HTML","color":"#e9572b","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/html5(1).png"},{"name":"Git","color":"#df5b40","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/git.png"},{"name":"C++","color":"#1a4574","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/cpp.png"},{"name":"Windows","color":"#01b8f2","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"},{"name":"Qt","color":"#41cd52","icon":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/qt.png"}]}],"link":[{"class_name":"我的朋友","flink_style":"flexcard","link_list":[{"name":"forDece","link":"https://www.fordece.cn/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.jpg","descr":"一枚优秀的学弟","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906200929.png"},{"name":"Zly","link":"http://www.zly7.top/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/deep_annimation_head.png","descr":"记录,让你的人生不后悔","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201155.png"}]},{"class_name":"推荐博客","flink_style":"flexcard","link_list":[{"name":"安知鱼","link":"https://blog.anheyu.com/","avatar":"https://npm.elemecdn.com/anzhiyu-blog-static@1.0.4/img/avatar.jpg","descr":"生活明朗,万物可爱","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/anzhiy.cn.jpg"},{"name":"张洪Heo","link":"https://blog.zhheo.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/zhheo.png","descr":"分享设计与科技生活","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/6311fc3959f82.webp"},{"name":"二兔","link":"https://blog.juanertu.com/","avatar":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/avatar.png","descr":"你真是一个美好的人类","siteshot":"https://cdn.jsdelivr.net/gh/binwenwu/picgo_demo/img/20230906201535.png"}]}]}},"length":1724,"excerpt":"","more":"

本文方法为作者自己尝试得出,不一定有效,若失败,还请参考正规的解决方案

\n
\n

本文的三种数据库恢复都以Docker来进行恢复,即本文会用Docker创建相应的数据库容器来对需要恢复的数据库进行恢复,在删除配置文件时,需要查看一些配置文件内容是否与需要恢复的数据库相同,如K8S集群中创建的数据库与Docker中创建的pg数据库就不同,postmaster.pid等文件内容

\n
\n

1 MongoDB

\n
    \n
  • 找到需要恢复的数据库的存储配置文件,如下图所示
  • \n
\n

\"image-20231012214612701\"

\n
    \n
  • 拉取MongoDB镜像,版本最好要对应,这里就以安装最新版本为例
  • \n
\n
1
docker pull mongo
\n
    \n
  • 生成容器\n
      \n
    • -d:后台启动模式,不会占用终端
    • \n
    • -p:主机端口:容器内端口
    • \n
    • --name:容器名称
    • \n
    • -v:指定了主机文件系统路径 /mnt/storage/wbw-mongo/data 和容器内部路径 /data/db 之间的卷映射。这个映射用于将 MongoDB 数据库数据存储在主机上,以便数据持久性。容器内的数据将被存储在主机的 /mnt/storage/wbw-mongo/data 目录中
    • \n
    \n
  • \n
\n
1
docker run -d -p 31074:27017 --name wbw-mongo -v /mnt/storage/wbw-mongo/data:/data/db  mongo:latest
\n
    \n
  • 删除刚刚生成的存储配置文件
  • \n
\n

注意,不要直接删除data文件夹,而是将data内的文件全部删除

\n
\n
1
rm -rf /mnt/storage/wbw-mongo/data/*
\n
    \n
  • 将需要恢复的数据库的存储配置文件复制到/mnt/storage/wbw-mongo/data/下,假设需要恢复的数据库的存储配置文件位置为/mnt/storage/bak-mongo/data/
  • \n
\n
1
cp /mnt/storage/bak-mongo/data/* /mnt/storage/wbw-mongo/data/
\n
    \n
  • 重启容器
  • \n
\n
1
docker restart wbw-mongo
\n
    \n
  • 恢复结束
  • \n
\n
\n

2 MySQL

\n
    \n
  • 找到需要恢复的数据库的存储配置文件,如下图所示
  • \n
\n

\"image-20231012221503300\"

\n
    \n
  • 拉取MySQL镜像,版本最好要对应,这里就以安装最新版本为例
  • \n
\n
1
docker pull mysql
\n
    \n
  • 生成容器
  • \n
\n
1
docker run -d -p 30491:3306 --name wbw-mysql -e MYSQL_ROOT_PASSWORD=123456 -v /mnt/storage/wbw-mysql/data:/var/lib/mysql mysql:latest
\n
    \n
  • 删除刚刚生成的存储配置文件
  • \n
\n
1
rm -rf /mnt/storage/wbw-mysql/data/*
\n
    \n
  • 将需要恢复的数据库的存储配置文件复制到/mnt/storage/wbw-mysql/data/下,假设需要恢复的数据库的存储配置文件位置为/mnt/storage/bak-mysql/data/
  • \n
\n
1
cp /mnt/storage/bak-mysql/data/* /mnt/storage/wbw-mysql/data/
\n
    \n
  • 重启容器
  • \n
\n
1
docker restart wbw-mysql
\n
    \n
  • 恢复结束
  • \n
\n
\n

3 PostgreSQL

\n
    \n
  • 找到需要恢复的数据库的存储配置文件,如下图所示
  • \n
\n

\"image-20231012225210135\"

\n
    \n
  • 拉取PostgreSQL镜像,版本最好要对应,这里就以安装14为例
  • \n
\n
1
docker pull postgres:14
\n
    \n
  • 生成容器
  • \n
\n
1
docker run -d --name wbw-postgres -v /mnt/storage/wbw-postgres/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:14
\n
    \n
  • 删除刚刚生成的存储配置文件
  • \n
\n
1
rm -rf /mnt/storage/wbw-postgres/data/*
\n
    \n
  • 将需要恢复的数据库的存储配置文件复制到/mnt/storage/postgresql/data/下,假设需要恢复的数据库的存储配置文件位置为/mnt/storage/bak-postgresql/data/
  • \n
\n
1
cp /mnt/storage/bak-postgres/data/* /mnt/storage/wbw-postgres/data/
\n
    \n
  • 重启容器
  • \n
\n
1
docker restart wbw-postgres
\n
    \n
  • 恢复结束
  • \n
\n"}],"PostAsset":[],"PostCategory":[{"post_id":"clo5vyrtm00012j3ugcub3tgw","category_id":"clo5vyrtp00042j3ug5q2edv0","_id":"clo5vyrts000i2j3u8bvtb7ma"},{"post_id":"clo5vyrts000f2j3uc2eo00x5","category_id":"clo5vyrtr000c2j3u2o2db3eq","_id":"clo5vyrtu000p2j3udw6ubfgz"},{"post_id":"clo5vyrto00032j3u9kfr9p8w","category_id":"clo5vyrtr000c2j3u2o2db3eq","_id":"clo5vyrtv000u2j3u1a07h3kf"},{"post_id":"clo5vyrts000h2j3u19u63umo","category_id":"clo5vyrtr000c2j3u2o2db3eq","_id":"clo5vyrtv000y2j3uh9hjajcl"},{"post_id":"clo5vyrtq00072j3u4p040k0p","category_id":"clo5vyrtr000c2j3u2o2db3eq","_id":"clo5vyrtw00142j3ub1jaajsb"},{"post_id":"clo5vyrtq00092j3uhtj2dyou","category_id":"clo5vyrtr000c2j3u2o2db3eq","_id":"clo5vyrtw00192j3ubgb6a096"},{"post_id":"clo5vyrtr000b2j3u2dxz2wpc","category_id":"clo5vyrtr000c2j3u2o2db3eq","_id":"clo5vyrtz001f2j3ueiwzgol2"},{"post_id":"clo5vyrty001b2j3u3dggfvw5","category_id":"clo5vyrtw00182j3uh9jf689t","_id":"clo5vyrtz001m2j3u8mjiffyh"},{"post_id":"clo5vyrtt000m2j3ueaymcnsd","category_id":"clo5vyrtw00182j3uh9jf689t","_id":"clo5vyru0001p2j3uefs78gbb"},{"post_id":"clo5vyrtu000o2j3u2x152fj6","category_id":"clo5vyrtw00182j3uh9jf689t","_id":"clo5vyru0001t2j3u95rlbfan"},{"post_id":"clo5vyrtu000t2j3uheml8yh3","category_id":"clo5vyrtw00182j3uh9jf689t","_id":"clo5vyru1001y2j3uacmscl94"},{"post_id":"clo5vyrtv000x2j3u9gw5b8gt","category_id":"clo5vyrtw00182j3uh9jf689t","_id":"clo5vyru100252j3u9golanxp"},{"post_id":"clo5vyrtw00132j3uhqbjbhjh","category_id":"clo5vyrtw00182j3uh9jf689t","_id":"clo5vyru1002b2j3uajwp0apg"},{"post_id":"clo5vyrtw00172j3uevcjce89","category_id":"clo5vyru100242j3u6haff69w","_id":"clo5vyru2002j2j3ubyx9bfss"},{"post_id":"clo5vyrty001e2j3uf6kf85ra","category_id":"clo5vyru1002d2j3u5smradhy","_id":"clo5vyru2002n2j3u1hui2de0"},{"post_id":"clo5vyrtz001i2j3ugs0lc92x","category_id":"clo5vyru2002k2j3ucx3r9ras","_id":"clo5vyru2002r2j3ughxy39ri"},{"post_id":"clo5vyrtz001l2j3u5o1pdrwi","category_id":"clo5vyru1002d2j3u5smradhy","_id":"clo5vyru2002u2j3u0k5n3uls"},{"post_id":"clo5vyru6004i2j3ufrpqd2xx","category_id":"clo5vyru7004k2j3u2eh5bfuu","_id":"clo5vyru7004p2j3u2y95eoxb"},{"post_id":"clo5vyru6004j2j3u4fn801dq","category_id":"clo5vyru7004m2j3uclbk7bik","_id":"clo5vyru7004s2j3u59eogpbi"}],"PostTag":[{"post_id":"clo5vyrtm00012j3ugcub3tgw","tag_id":"clo5vyrtp00052j3u20hxc5qt","_id":"clo5vyrtv000v2j3u6hpb4nxs"},{"post_id":"clo5vyrtm00012j3ugcub3tgw","tag_id":"clo5vyrtr000d2j3uapfs80hx","_id":"clo5vyrtw00102j3ub98paki7"},{"post_id":"clo5vyrtm00012j3ugcub3tgw","tag_id":"clo5vyrtt000k2j3uhhkb3ib8","_id":"clo5vyrtw00152j3ud7qfcnmk"},{"post_id":"clo5vyrto00032j3u9kfr9p8w","tag_id":"clo5vyrtu000r2j3uedp47nfe","_id":"clo5vyru1001z2j3uddce5iyd"},{"post_id":"clo5vyrto00032j3u9kfr9p8w","tag_id":"clo5vyrtw00112j3u47p32mpa","_id":"clo5vyru100212j3ud584fjhe"},{"post_id":"clo5vyrto00032j3u9kfr9p8w","tag_id":"clo5vyrty001c2j3ugf4q5utz","_id":"clo5vyru100262j3ue8pjg4k3"},{"post_id":"clo5vyrto00032j3u9kfr9p8w","tag_id":"clo5vyrtz001j2j3u4my2af96","_id":"clo5vyru100282j3u8t22gf53"},{"post_id":"clo5vyrto00032j3u9kfr9p8w","tag_id":"clo5vyru0001q2j3udl0j6dok","_id":"clo5vyru1002c2j3ugt6p3ykw"},{"post_id":"clo5vyrtq00072j3u4p040k0p","tag_id":"clo5vyrtu000r2j3uedp47nfe","_id":"clo5vyru2002f2j3u3ces8b5a"},{"post_id":"clo5vyrtq00072j3u4p040k0p","tag_id":"clo5vyrtw00112j3u47p32mpa","_id":"clo5vyru2002i2j3ufdmiemmz"},{"post_id":"clo5vyrtq00092j3uhtj2dyou","tag_id":"clo5vyrtu000r2j3uedp47nfe","_id":"clo5vyru2002m2j3u5agub573"},{"post_id":"clo5vyrtq00092j3uhtj2dyou","tag_id":"clo5vyrtw00112j3u47p32mpa","_id":"clo5vyru2002p2j3ueycz3oct"},{"post_id":"clo5vyrtr000b2j3u2dxz2wpc","tag_id":"clo5vyrtu000r2j3uedp47nfe","_id":"clo5vyru2002t2j3u5q14hnjd"},{"post_id":"clo5vyrtr000b2j3u2dxz2wpc","tag_id":"clo5vyrtw00112j3u47p32mpa","_id":"clo5vyru2002v2j3uehkz2l1r"},{"post_id":"clo5vyrts000f2j3uc2eo00x5","tag_id":"clo5vyru2002s2j3u65970znr","_id":"clo5vyru3002y2j3uawm194mn"},{"post_id":"clo5vyrts000f2j3uc2eo00x5","tag_id":"clo5vyru2002w2j3u0zis4jc8","_id":"clo5vyru3002z2j3u85m08t28"},{"post_id":"clo5vyrts000h2j3u19u63umo","tag_id":"clo5vyru2002s2j3u65970znr","_id":"clo5vyru300322j3ug16hf4qn"},{"post_id":"clo5vyrts000h2j3u19u63umo","tag_id":"clo5vyrtw00112j3u47p32mpa","_id":"clo5vyru300332j3u9yf58or0"},{"post_id":"clo5vyrtt000m2j3ueaymcnsd","tag_id":"clo5vyru300312j3ufhhj23qq","_id":"clo5vyru300362j3u8udee4dh"},{"post_id":"clo5vyrtt000m2j3ueaymcnsd","tag_id":"clo5vyru300342j3uacr4hqfu","_id":"clo5vyru300372j3ue43rfq87"},{"post_id":"clo5vyrtu000o2j3u2x152fj6","tag_id":"clo5vyru300312j3ufhhj23qq","_id":"clo5vyru3003a2j3uem52178g"},{"post_id":"clo5vyrtu000o2j3u2x152fj6","tag_id":"clo5vyru300382j3u9cqgbqm2","_id":"clo5vyru3003b2j3ubw441stt"},{"post_id":"clo5vyrtu000o2j3u2x152fj6","tag_id":"clo5vyrtt000k2j3uhhkb3ib8","_id":"clo5vyru3003d2j3u5dj0dj2b"},{"post_id":"clo5vyrtu000t2j3uheml8yh3","tag_id":"clo5vyru300312j3ufhhj23qq","_id":"clo5vyru4003g2j3u0gg14905"},{"post_id":"clo5vyrtu000t2j3uheml8yh3","tag_id":"clo5vyru3003c2j3ug4zgdwsx","_id":"clo5vyru4003h2j3u64gc9y9w"},{"post_id":"clo5vyrtu000t2j3uheml8yh3","tag_id":"clo5vyrtt000k2j3uhhkb3ib8","_id":"clo5vyru4003j2j3ugs7l7qde"},{"post_id":"clo5vyrtu000t2j3uheml8yh3","tag_id":"clo5vyru4003e2j3uhsj09r8c","_id":"clo5vyru4003k2j3uaxon7ckx"},{"post_id":"clo5vyrtv000x2j3u9gw5b8gt","tag_id":"clo5vyru300312j3ufhhj23qq","_id":"clo5vyru4003m2j3u3r807b7j"},{"post_id":"clo5vyrtv000x2j3u9gw5b8gt","tag_id":"clo5vyru4003i2j3u0m2r29gq","_id":"clo5vyru4003n2j3uckfs4ci2"},{"post_id":"clo5vyrtw00132j3uhqbjbhjh","tag_id":"clo5vyru4003l2j3ufh8d5212","_id":"clo5vyru4003r2j3uadai7d4o"},{"post_id":"clo5vyrtw00132j3uhqbjbhjh","tag_id":"clo5vyru4003o2j3uap341vfo","_id":"clo5vyru4003s2j3uh4wz31uu"},{"post_id":"clo5vyrtw00132j3uhqbjbhjh","tag_id":"clo5vyru4003p2j3uaxph9kul","_id":"clo5vyru4003u2j3u0e4tebso"},{"post_id":"clo5vyrtw00172j3uevcjce89","tag_id":"clo5vyrtt000k2j3uhhkb3ib8","_id":"clo5vyru4003w2j3u6lcg67cw"},{"post_id":"clo5vyrtw00172j3uevcjce89","tag_id":"clo5vyru4003q2j3u5qle2kuc","_id":"clo5vyru4003x2j3u1q7f77kl"},{"post_id":"clo5vyrtw00172j3uevcjce89","tag_id":"clo5vyru4003t2j3u9klsg0pv","_id":"clo5vyru5003z2j3u4q14bala"},{"post_id":"clo5vyrty001b2j3u3dggfvw5","tag_id":"clo5vyru4003l2j3ufh8d5212","_id":"clo5vyru500422j3ud4qz9dtu"},{"post_id":"clo5vyrty001b2j3u3dggfvw5","tag_id":"clo5vyru4003o2j3uap341vfo","_id":"clo5vyru500432j3u58rjdsq8"},{"post_id":"clo5vyrty001b2j3u3dggfvw5","tag_id":"clo5vyru500402j3u1pmb2hjt","_id":"clo5vyru500452j3ug73ve1im"},{"post_id":"clo5vyrty001e2j3uf6kf85ra","tag_id":"clo5vyru500412j3ua7q9a3z9","_id":"clo5vyru500482j3u2zkc22b5"},{"post_id":"clo5vyrty001e2j3uf6kf85ra","tag_id":"clo5vyru500442j3uh6mudkq4","_id":"clo5vyru500492j3u9ahlbdoe"},{"post_id":"clo5vyrty001e2j3uf6kf85ra","tag_id":"clo5vyru500462j3u29go25qe","_id":"clo5vyru5004b2j3ueneccpfe"},{"post_id":"clo5vyrtz001i2j3ugs0lc92x","tag_id":"clo5vyru500472j3ug2w0gf3l","_id":"clo5vyru5004d2j3u3v0gh9oj"},{"post_id":"clo5vyrtz001i2j3ugs0lc92x","tag_id":"clo5vyru5004a2j3ucwkp4z8m","_id":"clo5vyru5004e2j3u3evld6dh"},{"post_id":"clo5vyrtz001l2j3u5o1pdrwi","tag_id":"clo5vyru500442j3uh6mudkq4","_id":"clo5vyru5004g2j3u22qy3ynq"},{"post_id":"clo5vyrtz001l2j3u5o1pdrwi","tag_id":"clo5vyru5004f2j3u724ee1ob","_id":"clo5vyru5004h2j3u0f6b2odi"},{"post_id":"clo5vyru6004i2j3ufrpqd2xx","tag_id":"clo5vyru7004l2j3u1g060wbd","_id":"clo5vyru7004o2j3u4460332n"},{"post_id":"clo5vyru6004j2j3u4fn801dq","tag_id":"clo5vyru7004n2j3uad5uenp4","_id":"clo5vyru7004q2j3u7n7hbjpd"},{"post_id":"clo5vyru6004j2j3u4fn801dq","tag_id":"clo5vyru0001q2j3udl0j6dok","_id":"clo5vyru7004r2j3u4ftw516e"},{"post_id":"clo5vyru6004j2j3u4fn801dq","tag_id":"clo5vyrtu000r2j3uedp47nfe","_id":"clo5vyru7004t2j3ueju67iq1"},{"post_id":"clo5vyru6004j2j3u4fn801dq","tag_id":"clo5vyrtw00112j3u47p32mpa","_id":"clo5vyru7004u2j3udqrz4lym"}],"Tag":[{"name":"遥感","_id":"clo5vyrtp00052j3u20hxc5qt"},{"name":"GIS","_id":"clo5vyrtr000d2j3uapfs80hx"},{"name":"软件安装","_id":"clo5vyrtt000k2j3uhhkb3ib8"},{"name":"容器","_id":"clo5vyrtu000r2j3uedp47nfe"},{"name":"Docker","_id":"clo5vyrtw00112j3u47p32mpa"},{"name":"PostgreSQL","_id":"clo5vyrty001c2j3ugf4q5utz"},{"name":"PostGIS","_id":"clo5vyrtz001j2j3u4my2af96"},{"name":"数据库","_id":"clo5vyru0001q2j3udl0j6dok"},{"name":"K8S","_id":"clo5vyru2002s2j3u65970znr"},{"name":"Containerd","_id":"clo5vyru2002w2j3u0zis4jc8"},{"name":"Linux","_id":"clo5vyru300312j3ufhhj23qq"},{"name":"安装","_id":"clo5vyru300342j3uacr4hqfu"},{"name":"Pandoc","_id":"clo5vyru300382j3u9cqgbqm2"},{"name":"Clash","_id":"clo5vyru3003c2j3ug4zgdwsx"},{"name":"VPN","_id":"clo5vyru4003e2j3uhsj09r8c"},{"name":"存储","_id":"clo5vyru4003i2j3u0m2r29gq"},{"name":"VMware","_id":"clo5vyru4003l2j3ufh8d5212"},{"name":"虚拟机","_id":"clo5vyru4003o2j3uap341vfo"},{"name":"CentOS","_id":"clo5vyru4003p2j3uaxph9kul"},{"name":"Office","_id":"clo5vyru4003q2j3u5qle2kuc"},{"name":"Windows","_id":"clo5vyru4003t2j3u9klsg0pv"},{"name":"IP","_id":"clo5vyru500402j3u1pmb2hjt"},{"name":"Vue","_id":"clo5vyru500412j3ua7q9a3z9"},{"name":"前端","_id":"clo5vyru500442j3uh6mudkq4"},{"name":"组件","_id":"clo5vyru500462j3u29go25qe"},{"name":"并行计算","_id":"clo5vyru500472j3ug2w0gf3l"},{"name":"算法","_id":"clo5vyru5004a2j3ucwkp4z8m"},{"name":"打包","_id":"clo5vyru5004f2j3u724ee1ob"},{"name":"微软社","_id":"clo5vyru7004l2j3u1g060wbd"},{"name":"后端","_id":"clo5vyru7004n2j3uad5uenp4"}]}} \ No newline at end of file diff --git a/public/about/index.html b/public/about/index.html index 15949efaf..363fcf166 100644 --- a/public/about/index.html +++ b/public/about/index.html @@ -167,7 +167,7 @@ } detectApple() })(window)
-

关于

你好,很高兴认识你👋
是一名 大学生博主
追求

源于
热爱而去感受
学习生活程序体验

技能
开启创造力
Photoshop
Node
Python
Java
CSS3
JS
HTML
Git
C++
Windows
Qt
...
生涯
无限进步
广东省东莞市东华初级中学
广东省东莞市东华高级中学
武汉大学
数据
访问统计
统计信息来自51la网站统计
我现在住在中国,武汉市
生于2001
武汉大学遥感信息工程学院
现在职业大学生👨‍🎓
性格
调停者
INFP-T
16personalities 了解更多关于调停者
座右铭
人有悲欢离合月有阴晴圆缺
特长
脑回路新奇的酸菜鱼二次元指数MIN
爱好游戏
League of Legends
爱好番剧
某科学的超电磁炮
心路历程

Hi~欢迎来到我的博客。这里会有许多杂七杂八的文章,更新随缘,有的时候比鸽子还咕咕咕,有的时候比母猪还高产QAQ。有的时候会用做笔记吧,也算是屎山个人网页编写能力的垃圾堆体现了吧。写博确实是一种乐趣,我希望我可以坚持下来

为什么而搭建博客?

纯粹是处于分享欲,说实话我还是喜欢把自己的东西拿出去分享的,还可以做社交,自从我的OI步入正轨之后,就可以把文章扔到这上面了

为什么叫Tankenqi?

因为我喜欢LOL的塔姆这个英雄,wanwan的叫法是贪肯奇,所以就叫Tankenqi了

网站怎么加速的?

上了pjax和存储桶加速,虽然没有备案但速度还不错

啊对,请那些刷流量的耗子尾汁

文章统计

+

关于

你好,很高兴认识你👋
是一名 大学生博主
追求

源于
热爱而去感受
学习生活程序体验

技能
开启创造力
Photoshop
Node
Python
Java
CSS3
JS
HTML
Git
C++
Windows
Qt
...
生涯
无限进步
广东省东莞市东华初级中学
广东省东莞市东华高级中学
武汉大学
数据
访问统计
统计信息来自51la网站统计
我现在住在中国,武汉市
生于2001
武汉大学遥感信息工程学院
现在职业大学生👨‍🎓
性格
调停者
INFP-T
16personalities 了解更多关于调停者
座右铭
人有悲欢离合月有阴晴圆缺
特长
脑回路新奇的酸菜鱼二次元指数MIN
爱好游戏
League of Legends
爱好番剧
某科学的超电磁炮
心路历程

Hi~欢迎来到我的博客。这里会有许多杂七杂八的文章,更新随缘,有的时候比鸽子还咕咕咕,有的时候比母猪还高产QAQ。有的时候会用做笔记吧,也算是屎山个人网页编写能力的垃圾堆体现了吧。写博确实是一种乐趣,我希望我可以坚持下来

为什么而搭建博客?

纯粹是处于分享欲,说实话我还是喜欢把自己的东西拿出去分享的,还可以做社交,自从我的OI步入正轨之后,就可以把文章扔到这上面了

为什么叫Tankenqi?

因为我喜欢LOL的塔姆这个英雄,wanwan的叫法是贪肯奇,所以就叫Tankenqi了

网站怎么加速的?

上了pjax和存储桶加速,虽然没有备案但速度还不错

啊对,请那些刷流量的耗子尾汁

文章统计


评论
公告
本网站的Twikoo评论系统使用Cravatar头像系统,请自行绑定邮箱配置
最新文章
最新评论
正在加载中...
天气

评论
公告
本网站的Twikoo评论系统使用Cravatar头像系统,请自行绑定邮箱配置
最新文章
最新评论
正在加载中...
天气
那年今日
网站资讯
文章数目 :
18
已运行时间 :
本站总字数 :
19.3k
最后更新时间 :
评论总数 :
0
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
固定导航栏(未完工)

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Tankenqi Console v0.01
欢迎反馈!
那年今日
网站资讯
文章数目 :
19
已运行时间 :
本站总字数 :
19.9k
最后更新时间 :
评论总数 :
0
控制面板×

性能设置

禁用模糊效果
开启帧率检测(刷新后生效)

主题设置

显示aplayer
落樱特效
明暗模式自动切换
自动主题色(跟随文章封面)
固定导航栏(未完工)

主题色

背景设置

注意:切换背景功能仅在Acrylic主题中生效,在Simple主题中无效

图片(手机)

图片(电脑)

渐变色

纯色

访问统计显示不出来请刷新页面

关于

Hexo-theme-Acryple v1.0.100
Tankenqi Console v0.01
欢迎反馈!