This commit is contained in:
		
							
								
								
									
										53
									
								
								.drone-base-image.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								.drone-base-image.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| kind: pipeline | ||||
| type: docker | ||||
| name: Build Hexo-Images | ||||
|  | ||||
| trigger: | ||||
|   event: | ||||
|     include: | ||||
|     - custom | ||||
|  | ||||
| steps: | ||||
| - name: Build Hexo-Images | ||||
|   image: plugins/docker | ||||
|   pull: if-not-exists | ||||
|   settings: | ||||
|     registry: | ||||
|       from_secret: REGISTRY | ||||
|     username: | ||||
|       from_secret: DOCKER_USERNAME | ||||
|     password: | ||||
|       from_secret: DOCKER_PASSWORD | ||||
|     repo: | ||||
|       from_secret: REPO | ||||
|     dry_run: false | ||||
|     tags: | ||||
|     - hexo | ||||
|     context: ./ | ||||
|     dockerfile: ./Dockerfile-hexo | ||||
|     build_args: | ||||
|     # - IMAGENAME=node:alpine | ||||
|     - IMAGENAME=registry.cn-hangzhou.aliyuncs.com/offends/hexo:node-alpine | ||||
| - name: Build Hexo-Async-Images | ||||
|   image: plugins/docker | ||||
|   pull: if-not-exists | ||||
|   settings: | ||||
|     registry: | ||||
|       from_secret: REGISTRY | ||||
|     username: | ||||
|       from_secret: DOCKER_USERNAME | ||||
|     password: | ||||
|       from_secret: DOCKER_PASSWORD | ||||
|     repo: | ||||
|       from_secret: REPO | ||||
|     dry_run: false | ||||
|     tags: | ||||
|     - hexo-async | ||||
|     context: ./ | ||||
|     dockerfile: ./Dockerfile-hexo-async | ||||
|     build_args: | ||||
|     - IMAGENAME=registry.cn-hangzhou.aliyuncs.com/offends/hexo:hexo | ||||
| volumes: | ||||
|   - name: dockersock | ||||
|     host: | ||||
|       path: /var/run/docker.sock | ||||
							
								
								
									
										110
									
								
								.drone-sync-images.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								.drone-sync-images.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,110 @@ | ||||
| kind: pipeline | ||||
| type: docker | ||||
| name: Synchronization Nginx-Images | ||||
|  | ||||
| trigger: | ||||
|   event: | ||||
|     include: | ||||
|     - custom | ||||
|  | ||||
| steps: | ||||
| - name: 同步 Nginx-Images | ||||
|   image: docker:dind | ||||
|   volumes: | ||||
|   - name: dockersock | ||||
|     path: /var/run/docker.sock | ||||
|   environment: | ||||
|     DOCKER_USERNAME: | ||||
|       from_secret: DOCKER_USERNAME | ||||
|     DOCKER_PASSWORD: | ||||
|       from_secret: DOCKER_PASSWORD | ||||
|     REGISTRY: | ||||
|       from_secret: REGISTRY | ||||
|     REPO: | ||||
|       from_secret: REPO | ||||
|     BUILD: | ||||
|       from_secret: BUILD | ||||
|   commands: | ||||
|   - | | ||||
|     docker pull nginx:alpine-slim \ | ||||
|     && docker login $REGISTRY -u $DOCKER_USERNAME -p $DOCKER_PASSWORD \ | ||||
|     && docker tag nginx:alpine-slim $REPO:nginx-alpine-slim \ | ||||
|     && docker push $REPO:nginx-alpine-slim | ||||
| volumes: | ||||
| - name: dockersock | ||||
|   host: | ||||
|     path: /var/run/docker.sock | ||||
| --- | ||||
| kind: pipeline | ||||
| type: docker | ||||
| name: Synchronization Twikoo-Images | ||||
|  | ||||
| trigger: | ||||
|   event: | ||||
|     include: | ||||
|     - custom | ||||
|  | ||||
| steps: | ||||
| - name: 同步 Twikoo-Images | ||||
|   image: docker:dind | ||||
|   volumes: | ||||
|   - name: dockersock | ||||
|     path: /var/run/docker.sock | ||||
|   environment: | ||||
|     DOCKER_USERNAME: | ||||
|       from_secret: DOCKER_USERNAME | ||||
|     DOCKER_PASSWORD: | ||||
|       from_secret: DOCKER_PASSWORD | ||||
|     REGISTRY: | ||||
|       from_secret: REGISTRY | ||||
|     REPO: | ||||
|       from_secret: REPO | ||||
|     BUILD: | ||||
|       from_secret: BUILD | ||||
|   commands: | ||||
|   - | | ||||
|     docker pull imaegoo/twikoo:latest \ | ||||
|     && docker login $REGISTRY -u $DOCKER_USERNAME -p $DOCKER_PASSWORD \ | ||||
|     && docker tag imaegoo/twikoo:latest $REPO:twikoo \ | ||||
|     && docker push $REPO:twikoo | ||||
| volumes: | ||||
| - name: dockersock | ||||
|   host: | ||||
|     path: /var/run/docker.sock | ||||
| --- | ||||
| kind: pipeline | ||||
| type: docker | ||||
| name: Synchronization Node-Alpine-Image | ||||
|  | ||||
| trigger: | ||||
|   event: | ||||
|     include: | ||||
|     - custom | ||||
|  | ||||
| steps: | ||||
| - name: 同步 Node-Alpine-Image | ||||
|   image: docker:dind | ||||
|   volumes: | ||||
|   - name: dockersock | ||||
|     path: /var/run/docker.sock | ||||
|   environment: | ||||
|     DOCKER_USERNAME: | ||||
|       from_secret: DOCKER_USERNAME | ||||
|     DOCKER_PASSWORD: | ||||
|       from_secret: DOCKER_PASSWORD | ||||
|     REGISTRY: | ||||
|       from_secret: REGISTRY | ||||
|     REPO: | ||||
|       from_secret: REPO | ||||
|     BUILD: | ||||
|       from_secret: BUILD | ||||
|   commands: | ||||
|   - | | ||||
|     docker pull node:alpine \ | ||||
|     && docker login $REGISTRY -u $DOCKER_USERNAME -p $DOCKER_PASSWORD \ | ||||
|     && docker tag node:alpine $REPO:node-alpine \ | ||||
|     && docker push $REPO:node-alpine | ||||
| volumes: | ||||
| - name: dockersock | ||||
|   host: | ||||
|     path: /var/run/docker.sock | ||||
							
								
								
									
										112
									
								
								.drone.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								.drone.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,112 @@ | ||||
| kind: pipeline | ||||
| type: docker | ||||
| name: Build Hexo-Async-Offends-Blog | ||||
|  | ||||
| trigger: | ||||
|   event: | ||||
|     include: | ||||
|     - custom | ||||
|  | ||||
| steps: | ||||
| - name: Hexo-Async-Offends-Blog | ||||
|   image: docker:dind | ||||
|   volumes: | ||||
|   - name: dockersock | ||||
|     path: /var/run/docker.sock | ||||
|   - name: kubectl | ||||
|     path: /usr/local/bin/kubectl | ||||
|   - name: config | ||||
|     path: /root/.kube/config | ||||
|   environment: | ||||
|     DOCKER_USERNAME: | ||||
|       from_secret: DOCKER_USERNAME | ||||
|     DOCKER_PASSWORD: | ||||
|       from_secret: DOCKER_PASSWORD | ||||
|     REGISTRY: | ||||
|       from_secret: REGISTRY | ||||
|     REPO: | ||||
|       from_secret: REPO | ||||
|     BUILD: | ||||
|       from_secret: BUILD | ||||
|   commands: | ||||
|   - docker login $REGISTRY -u $DOCKER_USERNAME -p $DOCKER_PASSWORD | ||||
|   - | | ||||
|     if [ -z "$BUILD" ]; then | ||||
|       echo -e "\e[31m变量未指定,请检查Secret\e[0m" | ||||
|       exit 1 | ||||
|     else | ||||
|       if [ -n "$BUILD" ] && { [ "$BUILD" = Hexo-async-offends ] || [ "$BUILD" = "All" ]; }; then | ||||
|         echo -e "\033[32m开始构建\033[0m" | ||||
|         cd /drone/src/ \ | ||||
|         && docker build --build-arg IMAGENAME=registry.cn-hangzhou.aliyuncs.com/offends/hexo:hexo-async -t $REPO:hexo-async-offends -f Dockerfile-hexo-async-offends --no-cache . \ | ||||
|         && docker push $REPO:hexo-async-offends \ | ||||
|         && kubectl -n blog rollout restart deployment blog | ||||
|       else | ||||
|           echo -e "\033[33m不构建,跳过\033[0m" | ||||
|       fi | ||||
|       if [ -n "$BUILD" ] && { [ "$BUILD" = Gateway-kubernetes ] || [ "$BUILD" = "All" ]; }; then | ||||
|         echo -e "\033[32m开始构建\033[0m" | ||||
|         cd /drone/src/gateway \ | ||||
|         && docker build --build-arg IMAGENAME=registry.cn-hangzhou.aliyuncs.com/offends/hexo:nginx-alpine-slim -t $REPO:gateway-kubernetes -f Dockerfile-kubernetes --no-cache . \ | ||||
|         && docker push $REPO:gateway-kubernetes | ||||
|       else | ||||
|           echo -e "\033[33m不构建,跳过\033[0m" | ||||
|       fi | ||||
|     fi | ||||
| volumes: | ||||
| - name: dockersock | ||||
|   host: | ||||
|     path: /var/run/docker.sock | ||||
| - name: kubectl | ||||
|   host: | ||||
|     path: /usr/local/bin/kubectl | ||||
| - name: config | ||||
|   host: | ||||
|     path: /root/.kube/config | ||||
| --- | ||||
| kind: pipeline | ||||
| type: docker | ||||
| name: Build Gateway-docker | ||||
|  | ||||
| trigger: | ||||
|   event: | ||||
|     include: | ||||
|     - custom | ||||
|  | ||||
| steps: | ||||
| - name: Gateway-docker | ||||
|   image: docker:dind | ||||
|   volumes: | ||||
|   - name: dockersock | ||||
|     path: /var/run/docker.sock | ||||
|   environment: | ||||
|     DOCKER_USERNAME: | ||||
|       from_secret: DOCKER_USERNAME | ||||
|     DOCKER_PASSWORD: | ||||
|       from_secret: DOCKER_PASSWORD | ||||
|     REGISTRY: | ||||
|       from_secret: REGISTRY | ||||
|     REPO: | ||||
|       from_secret: REPO | ||||
|     BUILD: | ||||
|       from_secret: BUILD | ||||
|   commands: | ||||
|   - | | ||||
|     if [ -z "$BUILD" ]; then | ||||
|       echo -e "\e[31m变量未指定,请检查Secret\e[0m" | ||||
|       exit 1 | ||||
|     else | ||||
|       if [ -n "$BUILD" ] && [ "$BUILD" = Gateway-docker ]; then | ||||
|         echo -e "\033[32m开始构建\033[0m" | ||||
|         cd /drone/src/gateway \ | ||||
|         && docker login $REGISTRY -u $DOCKER_USERNAME -p $DOCKER_PASSWORD \ | ||||
|         && docker build --build-arg IMAGENAME=registry.cn-hangzhou.aliyuncs.com/offends/hexo:nginx-alpine-slim -t $REPO:gateway-docker -f Dockerfile-docker --no-cache . \ | ||||
|         && docker push $REPO:gateway-docker | ||||
|       else | ||||
|           echo -e "\033[33m不构建,跳过\033[0m" | ||||
|       fi | ||||
|     fi     | ||||
| volumes: | ||||
| - name: dockersock | ||||
|   host: | ||||
|     path: /var/run/docker.sock | ||||
							
								
								
									
										28
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| # ---> macOS | ||||
| # General | ||||
| .DS_Store | ||||
| .AppleDouble | ||||
| .LSOverride | ||||
|  | ||||
| # Icon must end with two \r | ||||
| Icon | ||||
|  | ||||
|  | ||||
| # Thumbnails | ||||
| ._* | ||||
|  | ||||
| # Files that might appear in the root of a volume | ||||
| .DocumentRevisions-V100 | ||||
| .fseventsd | ||||
| .Spotlight-V100 | ||||
| .TemporaryItems | ||||
| .Trashes | ||||
| .VolumeIcon.icns | ||||
| .com.apple.timemachine.donotpresent | ||||
|  | ||||
| # Directories potentially created on remote AFP share | ||||
| .AppleDB | ||||
| .AppleDesktop | ||||
| Network Trash Folder | ||||
| Temporary Items | ||||
| .apdisk | ||||
							
								
								
									
										20
									
								
								Dockerfile-hexo
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Dockerfile-hexo
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| ARG IMAGENAME | ||||
|  | ||||
| FROM ${IMAGENAME} | ||||
|  | ||||
| LABEL maintainer="Offends <offends4@163.com>" | ||||
|  | ||||
| # 开启国内加速 | ||||
| RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \ | ||||
|     && npm config set registry https://registry.npmmirror.com \ | ||||
|     && apk update | ||||
|  | ||||
| RUN npm install -g hexo-cli \ | ||||
|     && hexo init hexo \ | ||||
|     && npm install --prefix /hexo/ | ||||
|  | ||||
| WORKDIR /hexo | ||||
|  | ||||
| EXPOSE 4000 | ||||
|  | ||||
| CMD ["hexo", "server"] | ||||
							
								
								
									
										7
									
								
								Dockerfile-hexo-async
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Dockerfile-hexo-async
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| ARG IMAGENAME | ||||
|  | ||||
| FROM ${IMAGENAME} | ||||
|  | ||||
| RUN npm install --save hexo-renderer-less hexo-renderer-ejs \ | ||||
|     && npm install --save hexo-theme-async@latest \ | ||||
|     && sed -i 's/theme: landscape/theme: async/g' _config.yml | ||||
							
								
								
									
										10
									
								
								Dockerfile-hexo-async-offends
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								Dockerfile-hexo-async-offends
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| ARG IMAGENAME | ||||
|  | ||||
| FROM ${IMAGENAME} | ||||
|  | ||||
| COPY ./app/* /app/ | ||||
|  | ||||
| RUN apk update && apk add --no-cache --virtual .build-deps curl bash git \ | ||||
|     && bash /app/init.sh \ | ||||
|     && rm -rf /app \ | ||||
|     && apk del .build-deps | ||||
							
								
								
									
										20
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| # Hexo-Async-Offends | ||||
|  | ||||
| ## 基础变量配置 | ||||
|  | ||||
| |     变量名      |                        变量值                         |      备注      | | ||||
| | :-------------: | :---------------------------------------------------: | :------------: | | ||||
| | DOCKER_USERNAME |                                                       |  镜像仓库账号  | | ||||
| | DOCKER_PASSWORD |                                                       |  镜像仓库密码  | | ||||
| |    REGISTRY     |           registry.cn-hangzhou.aliyuncs.com           |  镜像仓库地址  | | ||||
| |      REPO       | registry.cn-hangzhou.aliyuncs.com/<命名空间>/<镜像名> | 镜像的仓库名称 | | ||||
|  | ||||
| ## 管理构建变量配置 | ||||
|  | ||||
| | 变量名 |       变量值       |               备注                | | ||||
| | :----: | :----------------: | :-------------------------------: | | ||||
| | BUILD  | Hexo-async-offends | 构建 Async-Offends 初始化环境镜像 | | ||||
| | BUILD  | Gateway-kubernetes |     构建 kubernetes 网关镜像      | | ||||
| | BUILD  |   Gateway-docker   |       构建 docker 网关镜像        | | ||||
| | BUILD  |        All         |      构建跟博客有关所有构建       | | ||||
|  | ||||
							
								
								
									
										3
									
								
								app/404.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								app/404.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| --- | ||||
| layout: 404 | ||||
| --- | ||||
							
								
								
									
										282
									
								
								app/_config.async.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										282
									
								
								app/_config.async.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,282 @@ | ||||
| # 默认主题配置, 开启切换主题功能 | ||||
| theme: | ||||
|     switch: true | ||||
|     default: style-light # style-light style-dark | ||||
|  | ||||
| # 网站图标 Favicon | ||||
| favicon: | ||||
|   logo: /img/favicon-16x16.png | ||||
|   icon16: /img/favicon-16x16.png | ||||
|   icon32: /img/favicon-32x32.png | ||||
|   appleTouchIcon: /img/favicon-16x16.png | ||||
|   webmanifest: /site.webmanifest | ||||
|   visibilitychange: true | ||||
|   hidden: /img/favicon-32x32.png | ||||
|   showText: 打咩~ | ||||
|   hideText: 咿呀哒~ | ||||
|  | ||||
| # 字体图标 Icon | ||||
| assets: | ||||
|   third_party_provider: https://npm.elemecdn.com | ||||
|   icons:  | ||||
|     type: symbol  | ||||
|     css: | ||||
|     js: //at.alicdn.com/t/c/font_3637590_i4hyyea14ur.js | ||||
|  | ||||
| # 用户信息 User | ||||
| user: | ||||
|   name: Offends | ||||
|   first_name: 辉 | ||||
|   last_name: 阿 | ||||
|   email: offends4@163.com | ||||
|   domain: https://blog.offends.cn | ||||
|   avatar: /img/avatar.png | ||||
|   describe: 现充爆炸吧 | ||||
|   ruleText: 尊重原创足矣。 | ||||
|  | ||||
| # 导航栏 TopBars | ||||
| top_bars: | ||||
|   - title: 首页 | ||||
|     url: / | ||||
|   - title: 分类 | ||||
|     url: /categories/ | ||||
|   # - title: 标签 | ||||
|   #   url: /tags/ | ||||
|   - title: 其它 | ||||
|     url: '#' | ||||
|     children: | ||||
|       - title: 关于 | ||||
|         url: /about/ | ||||
|       - title: 留言 | ||||
|         url: /comment/ | ||||
|       - title: 友链 | ||||
|         url: /links/ | ||||
|  | ||||
| # 侧栏 Sidebar | ||||
| sidebar: | ||||
|   social: | ||||
|     - name: github | ||||
|       icon: icon-github | ||||
|       url: https://github.com/dinghui40 | ||||
|     - name: gitee | ||||
|       icon: icon-gitee | ||||
|       url: https://gitee.com/offends | ||||
|  | ||||
| # 打字动画 | ||||
|   typedTextPrefix: [' '] | ||||
|   typedText: [ 'I`m Ding Hui','Welcome Back'] | ||||
|   info: | ||||
|     - key: 地址 | ||||
|       val: 银河系 | ||||
|     - key: 年龄 | ||||
|       val: 不清楚 | ||||
|     - key: 实力 | ||||
|       val: 上升期 | ||||
|     # - key: <div><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=260 height=86 src="//music.163.com/outchain/player?type=2&id=466808591&auto=0&height=66"></iframe></div> | ||||
|  | ||||
| # 横幅 Banner | ||||
| banner: | ||||
|   use_cover: false | ||||
|   default: | ||||
|     type: img | ||||
|     bgurl: /img/desktop.png | ||||
|     bannerText: | ||||
|     position: top | ||||
|     fit: cover | ||||
|   index: | ||||
|     bannerTitle: 业精于勤,荒于嬉。 | ||||
|     bannerText: | ||||
|   archive: | ||||
|     bannerTitle: 积土而为山,积水而为海。 | ||||
|     bannerText: | ||||
|   links: | ||||
|     bannerTitle: 渚寒烟淡,棹移人远,飘渺行舟如叶。 | ||||
|     bannerText: | ||||
|   comment: | ||||
|     bannerTitle: 天下兴亡,咱们有责,嘿嘿。 | ||||
|     bannerText: | ||||
|   about: | ||||
|     bannerTitle: 四顾山光接水光,<br>凭栏十里芰荷香。 | ||||
|     bannerText: | ||||
|  | ||||
| # 页脚 Footer | ||||
| footer: | ||||
|   # 起始年份 | ||||
|   copyrightYear: 2020 | ||||
|   # 显示框架 | ||||
|   powered: | ||||
|     enable: true | ||||
|   # 显示备案号 | ||||
|   beian: | ||||
|     enable: true | ||||
|     icp: 京ICP备2022021046号 | ||||
|   # 运行时间 | ||||
|   live_time: | ||||
|     enable: true | ||||
|     prefix: footer.tips | ||||
|     start_time: 01/3/2022 00:00:00 | ||||
|   # 其他信息 | ||||
|   custom_text: <a href="https://beian.mps.gov.cn/#/query/webSearch" rel="noopener" target="_blank">京公网安备11010502052505号</a> | ||||
|  | ||||
| # 打赏 Reward | ||||
| reward: | ||||
|   enable: true | ||||
|   comment: I'm so cute. Please give me money. | ||||
|   methods: | ||||
|     - name: 支付宝 | ||||
|       path: /img/zfb.png | ||||
|     - name: 微信 | ||||
|       path: /img/wx.png | ||||
|  | ||||
| # 文章目录 | ||||
| toc: | ||||
|   enable: true | ||||
|   list_number: true | ||||
|   max_depth: 3 | ||||
|   min_depth: 1 | ||||
|  | ||||
| # 图片懒加载 | ||||
| lazyload: | ||||
|   enable: true | ||||
|  | ||||
| # 归档页 | ||||
| archive: | ||||
|   type: less | ||||
|  | ||||
| # 版权信息 | ||||
| creative_commons: | ||||
|   license: by-nc-sa | ||||
|   language: deed.zh | ||||
|   post: true | ||||
|   clipboard: false | ||||
|  | ||||
| # 自定义封面图 | ||||
| cover: | ||||
|   default: /img/block.png | ||||
|   type: img | ||||
|  | ||||
| # 上下篇文章 | ||||
| post_pagination: | ||||
|   enable: true | ||||
|   type: small | ||||
|  | ||||
| # 文章过期提醒 | ||||
| notice_outdate: | ||||
|   enable: false | ||||
|   style: flat | ||||
|   limit_day: 365 | ||||
|   position: top | ||||
|  | ||||
| # 文章破图时默认图片 | ||||
| error_img: | ||||
|   flink: /img/404.gif | ||||
|   post_page: /img/404.jpg | ||||
|  | ||||
| # 分类卡片 | ||||
| categorie_card: | ||||
|   enable: true | ||||
|   len: 2 | ||||
|   list: ["已完成", "待验证"] | ||||
|  | ||||
| # 固定按钮块 | ||||
| rightside: | ||||
|   readmode: true | ||||
|   aside: true | ||||
|  | ||||
| # 日期格式化 Date Format | ||||
| datetime_foramt: | ||||
|   post_card: | ||||
|     date: YY/MM/DD | ||||
|     time: HH:mm | ||||
|   post_info: | ||||
|     type: updated | ||||
|     date: MM/DD | ||||
|     time: HH:mm | ||||
|   archive: | ||||
|     date: MM/DD | ||||
|     time: HH:mm | ||||
|  | ||||
| # 代码高亮 Highlight | ||||
| highlight: | ||||
|   theme: true | ||||
|   title: mac | ||||
|   copy: true | ||||
|   lang: true | ||||
|   code_word_wrap: true | ||||
|   height_limit: 200 # 超出时,显示折叠按钮 | ||||
|  | ||||
| # 自定义图标 Icon | ||||
| icons: | ||||
|   # 主题切换图标 | ||||
|   sun: icon-sun | ||||
|   moon: icon-moon | ||||
|   # 首页视频播放 | ||||
|   play: icon-yunhang | ||||
|   # 邮箱 | ||||
|   email: icon-email | ||||
|   # 分类进入图标 | ||||
|   next: icon-arrow-right | ||||
|   # 文章详情 日期 | ||||
|   calendar: icon-rili | ||||
|   # 文章详情 时间 | ||||
|   clock: icon-shijian | ||||
|   # 文章详情 作者 | ||||
|   user: icon-yonghu | ||||
|   # 返回顶部 v1.1.3+ | ||||
|   back_top: icon-backtop | ||||
|   # 查询 v1.1.5+ | ||||
|   search: icon-chaxun | ||||
|   # 关闭 v1.1.5+ | ||||
|   close: icon-guanbi | ||||
|   # 打赏 v1.1.7+ | ||||
|   reward: icon-qiandai | ||||
|   # 用户信息和文章目录切换 v1.2.10+ | ||||
|   user_tag: icon-yonghu1 | ||||
|   toc_tag: icon-liebiao | ||||
|   # 右下角固定按钮 v1.2.11+ | ||||
|   read: icon-yuedu | ||||
|   arrows: icon-arrows-h | ||||
|   # 代码块 | ||||
|   double_arrows: icon-angle-double-down | ||||
|   copy: icon-copy | ||||
|  | ||||
| # 关于 About | ||||
| about: | ||||
|   insert: none # 插入规则 before(插入在内容前) | after(插入在内容后) | none(不插入) | ||||
|   title: 温故而知新,可以为师矣。 | ||||
|   introduction: 大家好,我是 Offends,很高兴您能在浩瀚如烟的互联网世界里发现这个博客,更感谢您能够饶有兴致地浏览这个页面。建立这个 Blog 是出于兴趣爱好,我将在此分会分享一些学习笔记,可能还会分享少许图片、视频以及其他有趣东西的链接。 | ||||
|   blog: | ||||
|     <ul class="trm-list"> | ||||
|       <li>程序:Hexo </li> | ||||
|       <li>主题:Hexo-theme-async </li> | ||||
|     </ul> | ||||
|   privacy: 本网站不会追踪访客行为,且不要求访客提供任何敏感信息(比如真实姓名、身份证号码、手机号等),因而也不存在任何隐私泄漏问题。访客参与评论,必须遵守法律法规和基本道德规范,文明礼貌。严禁发布任何有关淫秽、反动、暴力、博彩、恐吓、低俗的内容或违法信息,在尊重言论自由的同时请保持和平与理性。请勿对他人采取不友好的评论或其它过激行为。 | ||||
|  | ||||
| # 评论 Comment | ||||
| comment: | ||||
|   twikoo: | ||||
|     enable: true | ||||
|     envId: https://blog.offends.cn/twikoo | ||||
|  | ||||
| # 本地搜索 | ||||
| search: | ||||
|   enable: true | ||||
|   type: local | ||||
|  | ||||
| # 百度自动推送 | ||||
| baidu_push: true | ||||
|  | ||||
| # 字数统计 | ||||
| wordcount: | ||||
|   enable: true | ||||
|   count: true | ||||
|   time: true | ||||
|  | ||||
| # 数学公式 | ||||
| katex: | ||||
|   copy_tex: true | ||||
|   global: false | ||||
|   options: {} | ||||
|  | ||||
| # 渐入式应用 | ||||
| sw: true | ||||
							
								
								
									
										16
									
								
								app/index.less
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								app/index.less
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| .var-primary(@primary: #afb42b; @primary-weak: #c0ca33) { | ||||
|     --primary        : @primary; | ||||
|     --primary-70     : fade(@primary, 70%); | ||||
|     --primary-50     : fade(@primary, 50%); | ||||
|     --primary-30     : fade(@primary, 30%); | ||||
|     --primary-weak   : @primary-weak; | ||||
|     --primary-weak-50: fade(@primary-weak, 50%); | ||||
| } | ||||
|  | ||||
| :root { | ||||
|     .var-primary(#5a5df0, #697be2); | ||||
|  | ||||
|     &.dark { | ||||
|         .var-primary(#a4ce60, #82df7a); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										163
									
								
								app/init.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								app/init.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,163 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| ############################################################################################# | ||||
| # 用途: Hexo-Async-Deployer 项目初始化脚本 | ||||
| # 作者: 丁辉 | ||||
| # 编写日期: 2021-10-1 | ||||
| # 更新日期: 2024-07-09 | ||||
| ############################################################################################# | ||||
|  | ||||
| # 加载检测脚本 | ||||
| source <(curl -sS https://gitee.com/offends/Linux/raw/main/File/Shell/Check_command.sh) | ||||
|  | ||||
| # 初始化基础信息 | ||||
| function INIT_BASE_INFO() { | ||||
|     # 修改基础模版 | ||||
|     sed -i "s#language: en#language: zh-Hans#g" /hexo/_config.yml | ||||
|     sed -i "s#author: John Doe#author: Offends#g" /hexo/_config.yml | ||||
|  | ||||
|     SEND_INFO "初始化基础信息" | ||||
|     # 本地搜索 | ||||
|     CHECK_COMMAND_NULL npm install hexo-generator-searchdb | ||||
|     # 数字统计 | ||||
|     CHECK_COMMAND_NULL npm install hexo-wordcount | ||||
|     # 初始化基础信息 | ||||
|     CHECK_COMMAND_NULL mv /app/_config.async.yml /hexo/_config.async.yml | ||||
|     CHECK_DIR /hexo/source/_data/ | ||||
|     CHECK_COMMAND_NULL mv /app/links.yml /hexo/source/_data/links.yml | ||||
|     CHECK_COMMAND_NULL mv /app/404.md /hexo/source/404.md | ||||
|     CHECK_COMMAND_NULL mv /app/site.webmanifest /hexo/source/site.webmanifest | ||||
|     CHECK_DIR /hexo/source/_data/style/ | ||||
|     CHECK_COMMAND_NULL mv /app/index.less /hexo/source/_data/style/index.less | ||||
| } | ||||
|  | ||||
| # 初始化页面 | ||||
| function INIT_PAGE() { | ||||
|     # 分类 | ||||
|     CHECK_COMMAND_NULL npm install hexo-generator-category | ||||
|     # 页面名称 | ||||
|     PAGE_NAME=( | ||||
|         "categories" | ||||
|         "links" | ||||
|         "about" | ||||
|         "comment" | ||||
|     ) | ||||
|     # 循环创建页面 | ||||
|     for name in ${PAGE_NAME[@]}; do | ||||
|         # 创建页面 | ||||
|         CHECK_COMMAND_NULL hexo new page $name | ||||
|         if [ $? -eq 0 ]; then | ||||
|             # 创建页面成功 | ||||
|             SEND_INFO "创建页面 $name 成功" | ||||
|         else | ||||
|             # 创建页面失败 | ||||
|             SEND_WARN "创建页面 $name 失败" | ||||
|         fi | ||||
|     done | ||||
|  | ||||
|     # 修改页面内容 | ||||
|     # 友情链接 | ||||
|     sed -i 's#title: links#title: 友情链接#g' /hexo/source/links/index.md | ||||
|     sed -i '3a\layout: links' /hexo/source/links/index.md | ||||
|     # 关于 | ||||
|     sed -i 's#title: about#title: 关于#g' /hexo/source/about/index.md | ||||
|     sed -i '3a\layout: about' /hexo/source/about/index.md | ||||
|     sed -i '4a\single_column: false' /hexo/source/about/index.md | ||||
|     sed -i '5a\comments: false' /hexo/source/about/index.md | ||||
|     # 留言 | ||||
|     sed -i 's#title: comment#title: 留言#g' /hexo/source/comment/index.md | ||||
|     sed -i '3a\layout: comment' /hexo/source/comment/index.md | ||||
|     # 分类 | ||||
|     sed -i 's#title: categories#title: 分类#g' /hexo/source/categories/index.md | ||||
|     sed -i '3a\layout: category' /hexo/source/categories/index.md | ||||
|     sed -i '4a\single_column: true' /hexo/source/categories/index.md | ||||
|     sed -i '5a\comments: false' /hexo/source/categories/index.md | ||||
| } | ||||
|  | ||||
| # 初始化图片 | ||||
| function INIT_IMAGE() { | ||||
|     # 存储地址 | ||||
|     MINIO_URL="https://minio.offends.cn:9000/offends/hexo-async" | ||||
|     IMAGE_NAME=( | ||||
|         "avatar.png" | ||||
|         "favicon-16x16.png" | ||||
|         "favicon-32x32.png" | ||||
|         "block.png" | ||||
|         "desktop.png" | ||||
|         "wx.png" | ||||
|         "zfb.png" | ||||
|         "demo.png" | ||||
|         "404.gif" | ||||
|         "404.jpg" | ||||
|     ) | ||||
|     CHECK_DIR /hexo/source/img | ||||
|     # 循环下载页面 | ||||
|     for name in ${IMAGE_NAME[@]}; do | ||||
|         # 下载图片 | ||||
|         CHECK_COMMAND_NULL curl -so /hexo/source/img/$name $MINIO_URL/$name | ||||
|          | ||||
|     done | ||||
|  | ||||
|     SEND_INFO "初始化图片成功" | ||||
| } | ||||
|  | ||||
| # 收录配置 | ||||
| function INIT_BAIDU_SITEMAP() { | ||||
|     SEND_INFO "初始化收录配置" | ||||
|     ################################## 百度Sitemap 和 Google Sitemap ################################## | ||||
|     CHECK_COMMAND_NULL npm install hexo-generator-sitemap | ||||
|     CHECK_COMMAND_NULL npm install hexo-generator-baidu-sitemap | ||||
|     sed -i "s#url: http://example.com#url: https://blog.offends.cn#g" /hexo/_config.yml | ||||
|     sed -i '/^url:/ {N; s/\n/\nroot: \/\n/;}' /hexo/_config.yml | ||||
|     sed -i 's/permalink: :year\/:month\/:day\/:title\//permalink: :title.html/' /hexo/_config.yml | ||||
|     cat << EOF >> /hexo/_config.yml | ||||
| sitemap: | ||||
|   path: sitemap.xml | ||||
| baidusitemap: | ||||
|   path: baidusitemap.xml | ||||
| EOF | ||||
|     sed -i '1i<meta name="google-site-verification" content="V1iIzgHls93z_BAPofTvRD8jwh01u4Ls0fqXgGo86Ro" />' /hexo/node_modules/hexo-theme-async/layout/_partial/head.ejs | ||||
|     sed -i '1i<meta name="baidu-site-verification" content="codeva-MZXYU3JS1x" />' /hexo/node_modules/hexo-theme-async/layout/_partial/head.ejs | ||||
|     ################################## 百度主动推送 ################################## | ||||
|     CHECK_COMMAND_NULL npm install hexo-baidu-url-submit | ||||
|     sed -i '/deploy:/!b;n;s/  type: \x27\x27/- type: baidu_url_submitter/' /hexo/_config.yml | ||||
| cat << EOF >> /hexo/_config.yml | ||||
| baidu_url_submit: | ||||
|   count: 200 | ||||
|   host: blog.offends.cn | ||||
|   token: CRBfMzmp8EjAnQCl | ||||
|   path: baidu_urls.txt | ||||
| EOF | ||||
| } | ||||
|  | ||||
| # 添加看板娘 | ||||
| function ADD_TOUCH_ICON() { | ||||
|     SEND_INFO "添加看板娘" | ||||
|     git clone https://githubfast.com/stevenjoezhang/live2d-widget.git /hexo/node_modules/hexo-theme-async/source/live2d-widget | ||||
|     sed -i '1i<script src="/live2d-widget/autoload.js"></script>' /hexo/node_modules/hexo-theme-async/layout/_partial/head.ejs | ||||
|     sed -i '1i<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/font-awesome/css/font-awesome.min.css">' /hexo/node_modules/hexo-theme-async/layout/_partial/head.ejs | ||||
|     sed -i '2s/^/\/\/ /; 3s/^\/\///' /hexo/node_modules/hexo-theme-async/source/live2d-widget/autoload.js | ||||
|     sed -i 's/z-index: 1;/z-index: 9999;/g' /hexo/node_modules/hexo-theme-async/source/live2d-widget/waifu.css | ||||
|     sed -i 's/e=1/e=5/g' /hexo/node_modules/hexo-theme-async/source/live2d-widget/waifu-tips.js | ||||
| } | ||||
|  | ||||
| # 音乐位置 : 符号去除 | ||||
| # function INIT_MUSIC() { | ||||
| #     sed -i 's/<%- __(item.key) %>:/<%- __(item.key) %>/g' /hexo/node_modules/hexo-theme-async/layout/_partial/sidebar/card/info.ejs | ||||
| # } | ||||
|  | ||||
| # 执行全部初始化 | ||||
| function INIT_ALL() { | ||||
|     # 初始化基础信息 | ||||
|     INIT_BASE_INFO | ||||
|     # 初始化页面 | ||||
|     INIT_PAGE | ||||
|     # 初始化图片 | ||||
|     INIT_IMAGE | ||||
|     # 收录配置 | ||||
|     INIT_BAIDU_SITEMAP | ||||
|     # 添加看板娘 | ||||
|     ADD_TOUCH_ICON | ||||
| } | ||||
|  | ||||
| INIT_ALL | ||||
							
								
								
									
										3
									
								
								app/languages.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								app/languages.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| zh-Hans: | ||||
|   site: | ||||
|     title: 本站信息 | ||||
							
								
								
									
										8
									
								
								app/links.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								app/links.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| - name: 31100Cafe | ||||
|   url: https://www.biuling.top | ||||
|   image: https://jsd.cdn.zzko.cn/gh/CheckingChen/image-hosting@master/avatar.6awsc8i38s80.webp | ||||
|   desc: Creativity,起飞! | ||||
| - name: 白云苍狗 | ||||
|   url: https://www.imalun.com | ||||
|   image: https://www.imalun.com/images/avatar.jpg?v=1 | ||||
|   desc: 醒,亦在人间;梦,亦在人间。 | ||||
							
								
								
									
										20
									
								
								app/site.webmanifest
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								app/site.webmanifest
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| { | ||||
|     "name": "Offends", | ||||
|     "short_name": "Offends", | ||||
|     "icons": [ | ||||
|         { | ||||
|             "src": "/img/favicon-16x16.png", | ||||
|             "sizes": "192x192", | ||||
|             "type": "image/png" | ||||
|         }, | ||||
|         { | ||||
|             "src": "/img/favicon-32x32.png", | ||||
|             "sizes": "512x512", | ||||
|             "type": "image/png" | ||||
|         } | ||||
|     ], | ||||
|     "theme_color": "#fff", | ||||
|     "background_color": "#fff", | ||||
|     "display": "standalone", | ||||
|     "start_url": "/" | ||||
| } | ||||
							
								
								
									
										23
									
								
								chart/.helmignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								chart/.helmignore
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| # Patterns to ignore when building packages. | ||||
| # This supports shell glob matching, relative path matching, and | ||||
| # negation (prefixed with !). Only one pattern per line. | ||||
| .DS_Store | ||||
| # Common VCS dirs | ||||
| .git/ | ||||
| .gitignore | ||||
| .bzr/ | ||||
| .bzrignore | ||||
| .hg/ | ||||
| .hgignore | ||||
| .svn/ | ||||
| # Common backup files | ||||
| *.swp | ||||
| *.bak | ||||
| *.tmp | ||||
| *.orig | ||||
| *~ | ||||
| # Various IDEs | ||||
| .project | ||||
| .idea/ | ||||
| *.tmproj | ||||
| .vscode/ | ||||
							
								
								
									
										24
									
								
								chart/Chart.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								chart/Chart.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| apiVersion: v2 | ||||
| name: blog-chart | ||||
| description: A Helm chart for Kubernetes | ||||
|  | ||||
| # A chart can be either an 'application' or a 'library' chart. | ||||
| # | ||||
| # Application charts are a collection of templates that can be packaged into versioned archives | ||||
| # to be deployed. | ||||
| # | ||||
| # Library charts provide useful utilities or functions for the chart developer. They're included as | ||||
| # a dependency of application charts to inject those utilities and functions into the rendering | ||||
| # pipeline. Library charts do not define any templates and therefore cannot be deployed. | ||||
| type: application | ||||
|  | ||||
| # This is the chart version. This version number should be incremented each time you make changes | ||||
| # to the chart and its templates, including the app version. | ||||
| # Versions are expected to follow Semantic Versioning (https://semver.org/) | ||||
| version: 0.1.0 | ||||
|  | ||||
| # This is the version number of the application being deployed. This version number should be | ||||
| # incremented each time you make changes to the application. Versions are not expected to | ||||
| # follow Semantic Versioning. They should reflect the version the application is using. | ||||
| # It is recommended to use it with quotes. | ||||
| appVersion: "1.16.0" | ||||
							
								
								
									
										17
									
								
								chart/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								chart/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| > 本文作者:丁辉 | ||||
|  | ||||
| # Helm部署 | ||||
|  | ||||
| 开始部署 | ||||
|  | ||||
| ```bash | ||||
| helm install blog ./chart \ | ||||
|   --namespace blog --create-namespace | ||||
| ``` | ||||
|  | ||||
| 卸载 | ||||
|  | ||||
| ```bash | ||||
| helm uninstall blog -n blog | ||||
| ``` | ||||
|  | ||||
							
								
								
									
										7
									
								
								chart/templates/NOTES.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								chart/templates/NOTES.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
|  | ||||
|  | ||||
| Please visit this URL after startup: | ||||
|  | ||||
| {{ if .Values.ingress.host }} | ||||
|   https://{{ .Values.ingress.host }} | ||||
| {{ end }} | ||||
							
								
								
									
										17
									
								
								chart/templates/_helpers.tpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								chart/templates/_helpers.tpl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| {{/* | ||||
| Startup parameter | ||||
| */}} | ||||
| {{- define "argument" -}} | ||||
| progressDeadlineSeconds: 200 | ||||
| replicas: 1 | ||||
| revisionHistoryLimit: 1 | ||||
| strategy: | ||||
|   rollingUpdate: | ||||
|     maxSurge: 25% | ||||
|     maxUnavailable: 25% | ||||
|   type: RollingUpdate | ||||
| {{- end }} | ||||
|  | ||||
| {{- define "imagePullPolicy" -}} | ||||
| imagePullPolicy: IfNotPresent | ||||
| {{- end }} | ||||
							
								
								
									
										87
									
								
								chart/templates/deployment.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								chart/templates/deployment.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,87 @@ | ||||
| apiVersion: apps/v1 | ||||
| kind: Deployment | ||||
| metadata: | ||||
|   name: {{ .Values.deployment.blog.name }} | ||||
|   labels: | ||||
|     app: {{ .Values.deployment.blog.labels.app }} | ||||
| spec: | ||||
|   {{- include "argument" . | nindent 2 }} | ||||
|   selector: | ||||
|     matchLabels: | ||||
|       app: {{ .Values.deployment.blog.labels.app }} | ||||
|   template: | ||||
|     metadata: | ||||
|       labels: | ||||
|         app: {{ .Values.deployment.blog.labels.app }} | ||||
|     spec: | ||||
|       {{- if .Values.global.enabled }} | ||||
|       volumes: | ||||
|         - name: data | ||||
|           persistentVolumeClaim: | ||||
|             claimName: blog-pvc | ||||
|       {{- end }} | ||||
|       containers: | ||||
|       - name: {{ .Values.deployment.blog.name }} | ||||
|         image: {{ .Values.deployment.blog.image }}:{{ .Values.deployment.blog.tag }} | ||||
|         {{- include "imagePullPolicy" . | nindent 8 }} | ||||
|         ports: | ||||
|         - containerPort: {{ .Values.blog.targetPort }} | ||||
|           protocol: TCP | ||||
|         {{- if .Values.global.enabled }} | ||||
|         volumeMounts: | ||||
|           {{- range .Values.deployment.blog.volumeMounts }} | ||||
|           - name: {{ .name }} | ||||
|             mountPath: {{ .mountPath }} | ||||
|           {{- end }} | ||||
|         {{- end }} | ||||
|         readinessProbe: | ||||
|           failureThreshold: 3 | ||||
|           initialDelaySeconds: 5 | ||||
|           periodSeconds: 3 | ||||
|           successThreshold: 1 | ||||
|           tcpSocket: | ||||
|             port: {{ .Values.blog.targetPort }} | ||||
|           timeoutSeconds: 10 | ||||
|         resources: | ||||
|           limits: | ||||
|             memory: {{ .Values.deployment.blog.limits.memory }} | ||||
| --- | ||||
| apiVersion: apps/v1 | ||||
| kind: Deployment | ||||
| metadata: | ||||
|   name: {{ .Values.deployment.blog_gateway.name }} | ||||
|   labels: | ||||
|     app: {{ .Values.deployment.blog_gateway.labels.app }} | ||||
| spec: | ||||
|   {{- include "argument" . | nindent 2 }} | ||||
|   selector: | ||||
|     matchLabels: | ||||
|       app: {{ .Values.deployment.blog_gateway.labels.app }} | ||||
|   template: | ||||
|     metadata: | ||||
|       labels: | ||||
|         app: {{ .Values.deployment.blog_gateway.labels.app }} | ||||
|     spec: | ||||
|       containers: | ||||
|       - name: {{ .Values.deployment.blog_gateway.name }} | ||||
|         image: {{ .Values.deployment.blog_gateway.image }}:{{ .Values.deployment.blog_gateway.tag }} | ||||
|         {{- include "imagePullPolicy" . | nindent 8 }} | ||||
|         env: | ||||
|         {{- range .Values.deployment.blog_gateway.env }} | ||||
|         - name: {{ .name }} | ||||
|           value: {{ .value }} | ||||
|         {{- end }} | ||||
|         ports: | ||||
|         - containerPort: {{ .Values.blog_gateway.targetPort }} | ||||
|           protocol: TCP | ||||
|         readinessProbe: | ||||
|           failureThreshold: 3 | ||||
|           initialDelaySeconds: 5 | ||||
|           periodSeconds: 3 | ||||
|           successThreshold: 1 | ||||
|           tcpSocket: | ||||
|             port: {{ .Values.blog_gateway.targetPort }} | ||||
|           timeoutSeconds: 10 | ||||
|         resources: | ||||
|           limits: | ||||
|             memory: {{ .Values.deployment.blog_gateway.limits.memory }} | ||||
							
								
								
									
										36
									
								
								chart/templates/ingress.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								chart/templates/ingress.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| {{- if .Values.ingress.enabled -}} | ||||
| apiVersion: networking.k8s.io/v1 | ||||
| kind: Ingress | ||||
| metadata: | ||||
|   {{- if .Values.ingress.redirection.enabled}} | ||||
|   annotations: | ||||
|     kubernetes.io/tls-acme: "true" | ||||
|     nginx.ingress.kubernetes.io/permanent-redirect-code: "301" | ||||
|     #kubernetes.io/ingress.class: "nginx" | ||||
|     ingress.kubernetes.io/ssl-redirect: "true"  | ||||
|     ingress.kubernetes.io/secure-backends: "true"     | ||||
|     ingress.kubernetes.io/force-ssl-redirect: "true" | ||||
|   {{- end }} | ||||
|   name: {{ .Values.ingress.name }} | ||||
| spec: | ||||
|   ingressClassName: nginx | ||||
|   rules: | ||||
|     - host: {{ .Values.ingress.host }} | ||||
|       http: | ||||
|         paths: | ||||
|           - pathType: Prefix | ||||
|             backend: | ||||
|               service: | ||||
|                 name: {{ .Values.ingress.service.name }} | ||||
|                 port: | ||||
|                   number: {{ .Values.ingress.service.port.number }} | ||||
|             path: / | ||||
|   {{- if .Values.ingress.tls.enabled}} | ||||
|   tls: | ||||
|     - hosts: | ||||
|       {{- range $.Values.ingress.tls.hosts }} | ||||
|         - {{ . | quote }} | ||||
|       {{- end }} | ||||
|       secretName: {{ .Values.ingress.tls.secretName }} | ||||
|   {{- end }} | ||||
| {{- end }} | ||||
							
								
								
									
										18
									
								
								chart/templates/pvc.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								chart/templates/pvc.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| {{- if .Values.global.enabled -}} | ||||
| apiVersion: v1 | ||||
| kind: List | ||||
| items: | ||||
|   {{- range .Values.global.pvcConfigs }} | ||||
|   - apiVersion: v1 | ||||
|     kind: PersistentVolumeClaim | ||||
|     metadata: | ||||
|       name: {{ .name }} | ||||
|     spec: | ||||
|       accessModes: | ||||
|         - {{ .accessModes }} | ||||
|       storageClassName: {{ .storageClass }} | ||||
|       resources: | ||||
|         requests: | ||||
|           storage: {{ .storage }} | ||||
|   {{- end }} | ||||
| {{- end }} | ||||
							
								
								
									
										41
									
								
								chart/templates/service.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								chart/templates/service.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | ||||
| apiVersion: v1 | ||||
| kind: Service | ||||
| metadata: | ||||
|   name: {{ .Values.deployment.blog.name }} | ||||
| spec: | ||||
|   selector: | ||||
|     app: {{ .Values.deployment.blog.labels.app }} | ||||
|   ports: | ||||
|   - name: {{ .Values.deployment.blog.name }} | ||||
|     protocol: TCP | ||||
|     port: {{ .Values.blog.port }} | ||||
|     targetPort: {{ .Values.blog.targetPort }} | ||||
|   type: {{ .Values.blog.type }} | ||||
| --- | ||||
| apiVersion: v1 | ||||
| kind: Service | ||||
| metadata: | ||||
|   name: {{ .Values.deployment.blog_gateway.name }} | ||||
| spec: | ||||
|   selector: | ||||
|     app: {{ .Values.deployment.blog_gateway.labels.app }} | ||||
|   ports: | ||||
|   - name: {{ .Values.deployment.blog_gateway.name }} | ||||
|     protocol: TCP | ||||
|     port: {{ .Values.blog_gateway.port }} | ||||
|     targetPort: {{ .Values.blog_gateway.targetPort }} | ||||
|   type: {{ .Values.blog_gateway.type }} | ||||
| --- | ||||
| apiVersion: v1 | ||||
| kind: Service | ||||
| metadata: | ||||
|   name: {{ .Values.statefulset.blog_twikoo.name }} | ||||
| spec: | ||||
|   selector: | ||||
|     app: {{ .Values.statefulset.blog_twikoo.labels.app }} | ||||
|   ports: | ||||
|   - name: {{ .Values.statefulset.blog_twikoo.name }} | ||||
|     protocol: TCP | ||||
|     port: {{ .Values.blog_twikoo.port }} | ||||
|     targetPort: {{ .Values.blog_twikoo.targetPort }} | ||||
|   type: {{ .Values.blog_twikoo.type }} | ||||
							
								
								
									
										54
									
								
								chart/templates/statefulset.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								chart/templates/statefulset.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| apiVersion: apps/v1 | ||||
| kind: StatefulSet | ||||
| metadata: | ||||
|   name: {{ .Values.statefulset.blog_twikoo.name }} | ||||
| spec: | ||||
|   podManagementPolicy: OrderedReady | ||||
|   replicas: 1 | ||||
|   revisionHistoryLimit: 0 | ||||
|   selector: | ||||
|     matchLabels: | ||||
|       app: {{ .Values.statefulset.blog_twikoo.labels.app }} | ||||
|   serviceName: {{ .Values.statefulset.blog_twikoo.name }} | ||||
|   minReadySeconds: 5 | ||||
|   template: | ||||
|     metadata: | ||||
|       labels: | ||||
|         app: {{ .Values.statefulset.blog_twikoo.labels.app }} | ||||
|     spec: | ||||
|       terminationGracePeriodSeconds: 5 | ||||
|       containers: | ||||
|       - name: {{ .Values.statefulset.blog_twikoo.name }} | ||||
|         image: {{ .Values.statefulset.blog_twikoo.image }}:{{ .Values.statefulset.blog_twikoo.tag }} | ||||
|         env: | ||||
|         {{- range .Values.statefulset.blog_twikoo.env }} | ||||
|         - name: {{ .name }} | ||||
|           value: "{{ .value }}" | ||||
|         {{- end }} | ||||
|         ports: | ||||
|         - containerPort: {{ .Values.blog_twikoo.targetPort }} | ||||
|           protocol: TCP | ||||
|         resources: | ||||
|           limits: | ||||
|             memory: {{ .Values.statefulset.blog_twikoo.limits.memory }} | ||||
|         livenessProbe: | ||||
|           failureThreshold: 3 | ||||
|           initialDelaySeconds: 5 | ||||
|           periodSeconds: 3 | ||||
|           successThreshold: 1 | ||||
|           tcpSocket: | ||||
|             port: {{ .Values.blog_twikoo.targetPort }} | ||||
|           timeoutSeconds: 20 | ||||
|         {{- if .Values.global.enabled }} | ||||
|         volumeMounts: | ||||
|           {{- range .Values.statefulset.blog_twikoo.volumeMounts }} | ||||
|           - name: {{ .name }} | ||||
|             mountPath: {{ .mountPath }} | ||||
|           {{- end }} | ||||
|         {{- end }} | ||||
|       {{- if .Values.global.enabled }} | ||||
|       volumes: | ||||
|         - name: data | ||||
|           persistentVolumeClaim: | ||||
|             claimName: twikoo-pvc | ||||
|       {{- end }} | ||||
							
								
								
									
										86
									
								
								chart/values.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								chart/values.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | ||||
| # Default values for blog. | ||||
| global: | ||||
|   enabled: true | ||||
|   pvcConfigs: | ||||
|     - name: blog-pvc | ||||
|       storageClass: "" # 指定存储卷, 不指定则需要集群内存在默认的存储卷 | ||||
|       storage: "10Gi" | ||||
|       accessModes: ReadWriteOnce | ||||
|     - name: twikoo-pvc | ||||
|       storageClass: "" # 指定存储卷, 不指定则需要集群内存在默认的存储卷 | ||||
|       storage: "10Gi" | ||||
|       accessModes: ReadWriteOnce | ||||
|  | ||||
| deployment: | ||||
|   blog: | ||||
|     name: blog | ||||
|     labels: | ||||
|       app: blog | ||||
|     image: registry.cn-hangzhou.aliyuncs.com/offends/hexo | ||||
|     tag: hexo-async-offends | ||||
|     limits: | ||||
|       memory: 512Mi | ||||
|     volumeMounts: | ||||
|     - name: data | ||||
|       mountPath: /hexo/source/_posts | ||||
|  | ||||
|   blog_gateway: | ||||
|     name: blog-gateway | ||||
|     labels: | ||||
|       app: blog-gateway | ||||
|     image: registry.cn-hangzhou.aliyuncs.com/offends/hexo | ||||
|     tag: gateway-kubernetes | ||||
|     limits: | ||||
|       memory: 512Mi | ||||
|     env: | ||||
|     - name: localhost | ||||
|       value: "blog.offends.cn" | ||||
|  | ||||
| statefulset: | ||||
|   blog_twikoo: | ||||
|     name: blog-twikoo | ||||
|     labels: | ||||
|       app: blog-twikoo | ||||
|     image: registry.cn-hangzhou.aliyuncs.com/offends/hexo | ||||
|     tag: twikoo | ||||
|     limits: | ||||
|       memory: 128Mi | ||||
|     env: | ||||
|     - name: TWIKOO_THROTTLE | ||||
|       value: "1000" | ||||
|     volumeMounts: | ||||
|     - name: data | ||||
|       mountPath: /app/data | ||||
|        | ||||
| blog: | ||||
|   port: 4000 | ||||
|   targetPort: 4000 | ||||
|   type: ClusterIP | ||||
|  | ||||
| blog_gateway: | ||||
|   port: 80 | ||||
|   targetPort: 80 | ||||
|   type: ClusterIP | ||||
|  | ||||
| blog_twikoo: | ||||
|   port: 8080 | ||||
|   targetPort: 8080 | ||||
|   type: ClusterIP | ||||
|  | ||||
|  # kubectl create secret tls blog-tls --key nginx.key --cert nginx.pem -n blog | ||||
|  | ||||
| ingress: | ||||
|   enabled: true | ||||
|   name: blog-ingress | ||||
|   host: blog.offends.cn | ||||
|   service: | ||||
|     name: blog-gateway | ||||
|     port: | ||||
|       number: 80 | ||||
|   tls: | ||||
|     enabled: true | ||||
|     hosts: | ||||
|       - blog.offends.cn | ||||
|     secretName: blog-tls | ||||
|   redirection: #是否开启http重定向到https | ||||
|     enabled: true | ||||
							
								
								
									
										50
									
								
								docker-compose.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								docker-compose.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | ||||
| version: "3" | ||||
|  | ||||
| networks: | ||||
|   blog_network: | ||||
|     driver: bridge | ||||
|   file_network: | ||||
|     driver: bridge | ||||
|  | ||||
| services: | ||||
|   blog: | ||||
|     depends_on:  | ||||
|       - blog-twikoo | ||||
|     image: registry.cn-hangzhou.aliyuncs.com/offends/hexo:hexo-async-offends | ||||
|     container_name: blog | ||||
|     restart: always | ||||
|     volumes: | ||||
|       - /data/blog/data:/hexo/source/_posts | ||||
|     networks: | ||||
|       - blog_network | ||||
|  | ||||
|   blog-twikoo: | ||||
|     image: imaegoo/twikoo:latest | ||||
|     container_name: blog-twikoo | ||||
|     restart: always | ||||
|     volumes: | ||||
|       - /data/blog/twikoo:/app/data | ||||
|     environment: | ||||
|       - TWIKOO_THROTTLE=1000 | ||||
|       # - TWIKOO_PORT=4444 | ||||
|     networks: | ||||
|       - blog_network | ||||
|  | ||||
|   nginx-https: | ||||
|     depends_on:  | ||||
|       - blog-twikoo | ||||
|       - blog | ||||
|     image: registry.cn-hangzhou.aliyuncs.com/offends/hexo:gateway-docker | ||||
|     container_name: blog-nginx | ||||
|     restart: always | ||||
|     # network_mode: "host" | ||||
|     volumes: | ||||
|       - /data/blog/cert:/etc/nginx/conf.d/cert | ||||
|     environment: | ||||
|       - DOMAIN_NAME=blog.offends.cn | ||||
|     ports: | ||||
|       - "80:80" | ||||
|       - "443:443" | ||||
|     networks: | ||||
|       - blog_network | ||||
|       - file_network | ||||
							
								
								
									
										13
									
								
								gateway/Dockerfile-docker
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								gateway/Dockerfile-docker
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| ARG IMAGENAME | ||||
|  | ||||
| FROM ${IMAGENAME} | ||||
|  | ||||
| ENV DOMAIN_NAME=default | ||||
|  | ||||
| EXPOSE 80 443 | ||||
|  | ||||
| COPY ./ssl.conf.template /etc/nginx/conf.d/ssl.conf.template | ||||
|  | ||||
| VOLUME ["/etc/nginx/conf.d/cert/"] | ||||
|  | ||||
| CMD /bin/sh -c "envsubst '\$DOMAIN_NAME' < /etc/nginx/conf.d/ssl.conf.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'" | ||||
							
								
								
									
										11
									
								
								gateway/Dockerfile-kubernetes
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								gateway/Dockerfile-kubernetes
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| ARG IMAGENAME | ||||
|  | ||||
| FROM ${IMAGENAME} | ||||
|  | ||||
| ENV DOMAIN_NAME=default | ||||
|  | ||||
| EXPOSE 80 | ||||
|  | ||||
| COPY ./default.conf.template /etc/nginx/conf.d/default.conf.template | ||||
|  | ||||
| CMD /bin/sh -c "envsubst '\$localhost' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'" | ||||
							
								
								
									
										16
									
								
								gateway/default.conf.template
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								gateway/default.conf.template
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| server { | ||||
|     listen       80; | ||||
|     server_name  ${DOMAIN_NAME}; | ||||
|  | ||||
|     location / { | ||||
|         proxy_pass http://blog:4000; | ||||
|         proxy_set_header Host $host; | ||||
|         proxy_set_header X-Real-IP $remote_addr; | ||||
|     } | ||||
|  | ||||
|     location /twikoo { | ||||
|         proxy_pass http://blog-twikoo:8080; | ||||
|         proxy_set_header Host $host; | ||||
|         proxy_set_header X-Real-IP $remote_addr; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										32
									
								
								gateway/ssl.conf.template
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								gateway/ssl.conf.template
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| server{ | ||||
|     listen 80; | ||||
|      | ||||
|     server_name ${DOMAIN_NAME}; | ||||
|      | ||||
|     #(第一种)把http的域名请求转成https | ||||
|     #return 301 https://$host$request_uri; | ||||
|      | ||||
|     #(第二种)强制将http的URL重写成https | ||||
|     rewrite ^(.*) https://$server_name$1 permanent; | ||||
| } | ||||
|  | ||||
| server { | ||||
|     listen       443 ssl; | ||||
|     listen  [::]:443 ssl; | ||||
|  | ||||
|     ssl_certificate     /etc/nginx/conf.d/cert/nginx.pem;  | ||||
|     ssl_certificate_key /etc/nginx/conf.d/cert/nginx.key; | ||||
|  | ||||
|     location / { | ||||
|         proxy_pass http://blog:4000; | ||||
|         proxy_set_header Host $host; | ||||
|         proxy_set_header X-Real-IP $remote_addr; | ||||
|     } | ||||
|  | ||||
|     location /twikoo { | ||||
|         proxy_pass http://blog-twikoo:8080; | ||||
|         proxy_set_header Host $host; | ||||
|         proxy_set_header X-Real-IP $remote_addr; | ||||
|     } | ||||
|  | ||||
| } | ||||
							
								
								
									
										78
									
								
								kubernetes/blog.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								kubernetes/blog.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | ||||
| apiVersion: v1 | ||||
| kind: PersistentVolumeClaim | ||||
| metadata: | ||||
|   name: blog-pvc | ||||
|   namespace: blog | ||||
| spec: | ||||
|   accessModes: | ||||
|     - ReadWriteOnce | ||||
|   storageClassName: "" | ||||
|   resources: | ||||
|     requests: | ||||
|       storage: 10Gi | ||||
| --- | ||||
| apiVersion: apps/v1 | ||||
| kind: Deployment | ||||
| metadata: | ||||
|   namespace: blog | ||||
|   name: blog-deployment | ||||
|   labels: | ||||
|     app: blog | ||||
| spec: | ||||
|   progressDeadlineSeconds: 200 | ||||
|   replicas: 1 | ||||
|   revisionHistoryLimit: 1 | ||||
|   strategy: | ||||
|     rollingUpdate: | ||||
|       maxSurge: 25% | ||||
|       maxUnavailable: 25% | ||||
|     type: RollingUpdate | ||||
|   selector: | ||||
|     matchLabels: | ||||
|       app: blog | ||||
|   template: | ||||
|     metadata: | ||||
|       labels: | ||||
|         app: blog | ||||
|     spec: | ||||
|       volumes: | ||||
|         - name: data | ||||
|           persistentVolumeClaim: | ||||
|             claimName: blog-pvc | ||||
|       containers: | ||||
|       - name: blog | ||||
|         image: registry.cn-hangzhou.aliyuncs.com/offends/hexo:hexo-async-offends | ||||
|         imagePullPolicy: IfNotPresent | ||||
|         ports: | ||||
|         - containerPort: 4000 | ||||
|           protocol: TCP | ||||
|         volumeMounts: | ||||
|           - name: data | ||||
|             mountPath: /hexo/source/_posts | ||||
|         readinessProbe: | ||||
|           failureThreshold: 3 | ||||
|           initialDelaySeconds: 5 | ||||
|           periodSeconds: 3 | ||||
|           successThreshold: 1 | ||||
|           tcpSocket: | ||||
|             port: 4000 | ||||
|           timeoutSeconds: 10 | ||||
|         resources: | ||||
|           limits: | ||||
|             memory: 512Mi | ||||
| --- | ||||
| apiVersion: v1 | ||||
| kind: Service | ||||
| metadata: | ||||
|   namespace: blog | ||||
|   name: blog | ||||
| spec: | ||||
|   selector: | ||||
|     app: blog | ||||
|   ports: | ||||
|   - name: blog | ||||
|     protocol: TCP | ||||
|     port: 4000 | ||||
|     targetPort: 4000 | ||||
|   type: LoadBalancer | ||||
|   allocateLoadBalancerNodePorts: false | ||||
							
								
								
									
										59
									
								
								kubernetes/gateway.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								kubernetes/gateway.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| apiVersion: apps/v1 | ||||
| kind: Deployment | ||||
| metadata: | ||||
|   namespace: blog | ||||
|   name: blog-gateway | ||||
|   labels: | ||||
|     app: blog-gateway | ||||
| spec: | ||||
|   progressDeadlineSeconds: 200 | ||||
|   replicas: 1 | ||||
|   revisionHistoryLimit: 1 | ||||
|   strategy: | ||||
|     rollingUpdate: | ||||
|       maxSurge: 25% | ||||
|       maxUnavailable: 25% | ||||
|     type: RollingUpdate | ||||
|   selector: | ||||
|     matchLabels: | ||||
|       app: blog-gateway | ||||
|   template: | ||||
|     metadata: | ||||
|       labels: | ||||
|         app: blog-gateway | ||||
|     spec: | ||||
|       containers: | ||||
|       - name: blog-gateway | ||||
|         image: registry.cn-hangzhou.aliyuncs.com/offends/hexo:gateway-kubernetes | ||||
|         imagePullPolicy: IfNotPresent | ||||
|         env: | ||||
|         - name: localhost | ||||
|           value: "blog.offends.cn" | ||||
|         ports: | ||||
|         - containerPort: 80 | ||||
|           protocol: TCP | ||||
|         readinessProbe: | ||||
|           failureThreshold: 3 | ||||
|           initialDelaySeconds: 5 | ||||
|           periodSeconds: 3 | ||||
|           successThreshold: 1 | ||||
|           tcpSocket: | ||||
|             port: 80 | ||||
|           timeoutSeconds: 10 | ||||
|         resources: | ||||
|           limits: | ||||
|             memory: 512Mi | ||||
| --- | ||||
| apiVersion: v1 | ||||
| kind: Service | ||||
| metadata: | ||||
|   namespace: blog | ||||
|   name: blog-gateway | ||||
| spec: | ||||
|   selector: | ||||
|     app: blog-gateway | ||||
|   ports: | ||||
|   - name: blog-gateway | ||||
|     protocol: TCP | ||||
|     port: 80 | ||||
|     targetPort: 80 | ||||
							
								
								
									
										30
									
								
								kubernetes/ingress-nginx.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								kubernetes/ingress-nginx.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| apiVersion: networking.k8s.io/v1 | ||||
| kind: Ingress | ||||
| metadata: | ||||
|   annotations: | ||||
|     kubernetes.io/tls-acme: "true" | ||||
|     nginx.ingress.kubernetes.io/permanent-redirect-code: "301" | ||||
|     kubernetes.io/ingress.class: "nginx" | ||||
|     ingress.kubernetes.io/ssl-redirect: "true"  | ||||
|     ingress.kubernetes.io/secure-backends: "true"     | ||||
|     ingress.kubernetes.io/force-ssl-redirect: "true" | ||||
|   name: blog-ingress | ||||
|   namespace: blog | ||||
| spec: | ||||
|   ingressClassName: nginx | ||||
|   rules: | ||||
|     - host: blog.offends.cn | ||||
|       http: | ||||
|         paths: | ||||
|           - pathType: Prefix | ||||
|             backend: | ||||
|               service: | ||||
|                 name: blog-gateway | ||||
|                 port: | ||||
|                   number: 80 | ||||
|             path: / | ||||
|   # 只有在启用 TLS 时才需要此部分 | ||||
|   tls: | ||||
|     - hosts: | ||||
|       - blog.offends.cn | ||||
|       secretName: blog-tls | ||||
							
								
								
									
										23
									
								
								kubernetes/ingress-traefik.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								kubernetes/ingress-traefik.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| apiVersion: networking.k8s.io/v1 | ||||
| kind: Ingress | ||||
| metadata: | ||||
|   name: blog-ingress | ||||
|   namespace: blog | ||||
|   annotations: | ||||
|     kubernetes.io/ingress.class: traefik | ||||
| spec: | ||||
|   rules: | ||||
|     - host: blog.offends.cn | ||||
|       http: | ||||
|         paths: | ||||
|           - path: / | ||||
|             pathType: Prefix | ||||
|             backend: | ||||
|               service: | ||||
|                 name: blog-gateway | ||||
|                 port: | ||||
|                   number: 80 | ||||
|   tls: | ||||
|     - hosts: | ||||
|       - blog.offends.cn | ||||
|       secretName: blog-tls | ||||
							
								
								
									
										4
									
								
								kubernetes/namespace.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								kubernetes/namespace.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| apiVersion: v1 | ||||
| kind: Namespace | ||||
| metadata: | ||||
|   name: blog | ||||
							
								
								
									
										63
									
								
								kubernetes/twikoo.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								kubernetes/twikoo.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | ||||
| apiVersion: apps/v1 | ||||
| kind: StatefulSet | ||||
| metadata: | ||||
|   namespace: blog | ||||
|   name: twikoo | ||||
| spec: | ||||
|   podManagementPolicy: OrderedReady | ||||
|   replicas: 1 | ||||
|   revisionHistoryLimit: 0 | ||||
|   selector: | ||||
|     matchLabels: | ||||
|       app: twikoo | ||||
|   serviceName: blog-twikoo | ||||
|   minReadySeconds: 5 | ||||
|   template: | ||||
|     metadata: | ||||
|       labels: | ||||
|         app: twikoo | ||||
|     spec: | ||||
|       terminationGracePeriodSeconds: 5 | ||||
|       containers: | ||||
|       - name: twikoo | ||||
|         image: registry.cn-hangzhou.aliyuncs.com/offends/hexo:twikoo | ||||
|         env: | ||||
|         - name: TWIKOO_THROTTLE | ||||
|           value: "1000" | ||||
|         # - name: TWIKOO_PORT | ||||
|         #   value: "4444" | ||||
|         ports: | ||||
|         - containerPort: 8080 | ||||
|           protocol: TCP | ||||
|         resources: | ||||
|           limits: | ||||
|             memory: 128Mi | ||||
|         livenessProbe: | ||||
|           failureThreshold: 3 | ||||
|           initialDelaySeconds: 5 | ||||
|           periodSeconds: 3 | ||||
|           successThreshold: 1 | ||||
|           tcpSocket: | ||||
|             port: 8080 | ||||
|           timeoutSeconds: 20 | ||||
|         volumeMounts: | ||||
|           - name: host-path-volume | ||||
|             mountPath: /app/data | ||||
|       volumes: | ||||
|       - name: host-path-volume | ||||
|         hostPath: | ||||
|           path: /data/blog/twikoo      | ||||
| --- | ||||
| apiVersion: v1 | ||||
| kind: Service | ||||
| metadata: | ||||
|   namespace: blog | ||||
|   name: blog-twikoo | ||||
| spec: | ||||
|   selector: | ||||
|     app: twikoo | ||||
|   ports: | ||||
|   - port: 8080 | ||||
|     targetPort: 8080 | ||||
|     protocol: TCP | ||||
|   type: ClusterIP | ||||
		Reference in New Issue
	
	Block a user