静态网站托管服务
前言
上篇文章 介绍了在我们不注册域名、以及购买云服务器的基础上,利用现有的免费的云厂商托管平台搭建个人网站。并以 Hexo + Github Pages 为例,实现了个人博客的快速搭建和部署。
接下来分享其他常见的几种静态网站托管服务。
云产品Serverless 云产品
通过无服务器计算,将前端静态资源快速部署到云厂商提供的云平台进行托管,配置默认生成的域名,快速生成站点。需按量付费。经测验实际费用甚微,或无。
腾讯 Cloudbase
微信 云托管
阿里云 Devs
Github Pages
Github Pages 是 GitHub 提供的一个网页托管服务,于 2008 年推出。可以用于存放静态网页,包括博客、项目文档甚至整本书。
优点
Github 的东家是微软,Git 管理全部代码,永远不用担心文字丢失或者复原问题;
百度无法爬取存在 Github 上的网站内容;
自带域名可 https 访问,如 https://<你的 GitHub 用户名>.github.io
支持自定义域名
缺点
无法给自定义域名配置 SSL 证书
墙内访问速度缓慢
流量 ...
Linux小工具sshpass实现命令行密码验证功能
下载源码安装包
1curl -O -L http://downloads.sourceforge.net/project/sshpass/sshpass/1.05/sshpass-1.05.tar.gz && tar xvzf sshpass-1.05.tar.gz
编译安装
123cd sshpass-1.05./configuresudo make install
macOS也可使用brew安装
1brew install hudochenkov/sshpass/sshpass
使用
1234在二进制文件中使用,准备upload.sh文件,写入内容:#!/bin/bashsshpass -p 'pwd' scp -r ${sourceDir} ${username}@{IP}:${targetDir}
如何通过 Hexo + Github Page 快速搭建个人博客
技术选型
在传统认知里,搭建个人静态网站我们需要:
注册域名
购买云服务器
域名备案
构建静态网页
部署前端静态资源
DNS 解析
上诉方案作为技术小白或者初学者来说,上手较难,时间、金钱成本花费较大,不推荐。我们探讨的是如何在低成本的基础上,利用市面上现有的成熟的博客框架,搭建属于我们自己的个人博客。
前端框架
为了帮助开发者快速搭建所需的网站,这里提供的几种目前市面上比较火的博客框架,可以帮助我们快速的生成所需的静态网页。
Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。Hexo 的主题样式也有很多好看的,而且 github 都有 star 上万的。
Wordpress 是使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。有着许多第三方开发的免费模板,安装方式简单易用。
Vuepress 由两部分组成:一个以 Vue 驱动的主题系统的简约静态网站生成工具,和一个为编写技术文档而优化的默认主题。它是为了支持 Vue ...
K8s一主两从搭建
零 服务器准备
IP
类别
172.16.56.102
master
172.16.56.103
Node1
172.16.56.104
Node2
一 准备工作准备好一个主节点master的centos7.5以上的机器,准备相关相关环境的node节点机器
下载一个可以批量运维服务器的工具mobaXterm,这个工具暂时只支持windows,其下载地址为:
1https://mobaxterm.mobatek.net/download-home-edition.html
二 初始化机器的配置信息[9步]
检查操作系统版本,确保操作系统版本是一致,并且大于7.5版本;
1cat /etc/redhat-release
输出:
主机名解析
为了在集群环境中方便节点调用,配置主机解析功能,在企业内部应该使用DNS解析;
1234在 /etc/hosts 文件中,添加主机名解析,如下172.16.56.102 master172.16.56.103 node1172.16.56.104 node2
上面的地址,就是我们给每个主机分配的ip ...
The Go Memory Model
一 介绍 go的内存模型指定一种条件,在这种条件下,可以保证在一个goroutine中读取变量可以观测到不同goroutine对同一变量的写操作所产生的值。
二 忠告 多goroutine并发访问修改数据的程序必须串行化访问。
利用channel操作、sync包中的同步原语以及sync/atomic包中的原子操作保证串行化访问,保护数据。
如果你一定要阅读该文档的其余部分去理解你编程的行为,这是非常明智的。
但是不要自作聪明。
三 happens before 在单一的goroutine内部,读取和写入的行为必须和程序中代码指定的执行顺序保持一致。也就是说,在重排不会改变语言规范所定义的goroutine行为时,编译器和处理器才可以对单个goroutine进行读取、写入指令的重排。因为指令重排,一个goroutine所观测到的执行顺序可能和其他goroutine所感知到的执行顺序不同。例如,当一个goroutine执行a=1;b=2,其他goroutine可能观测到b的值比a的值 ...
IoC在Go中的应用
一 控制反转与依赖注入 IoC(Ioc—Inversion of Control)控制反转,是一种设计思想,控制反转意味着可以不用在内部进行业务对象的实例化,而是将控制逻辑进行高度抽象,抽象成为一种具有一定签名的协议,将业务对象进行注入,在内部消除了控制逻辑对某一种具体对象的依赖。
在这样的设计方式中,直接将业务对象中进行控制抽象,转化为业务对象对控制协议的依赖。而控制逻辑通过抽象成协议,将对具象业务对象的依赖进行解耦,控制协议不关心到底是什么样的业务对象,只要满足协议签名的任何对象,通过依赖注入的方式,进行具象业务控制。
二 Go中控制反转的案例分析
实现一个数据存放和获取的容器,这个容器具有获取(get)、存放(put)的方法,其实现代码如下。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849package mainimport ( "fmt" "sync")/*@Time ...
Go实现23种设计模式—模版方法模式
一 类别 行为型模式
二 概述 定义一个操作的基本框架,框架中的方法有基本方法和模版方法。模版方法是对基本方法的组装与调用,从而完成固定的逻辑,基本方法是其他子类对接口实现的重载,从而使用相同的模版,产生不同的结果。
三 使用场景 A. 多个子类有共有的方法,并且逻辑基本相同;
B. 很多依赖与某一核心算法,可以将该算法设为模版算法;
C. 重构中对于重复业务逻辑的代码通过设置模版方法如钩子函数、装饰器进行设计;
四 优点 A. 将共有的部分进行封装、减少代码的重复性,以便于系统的高可维护性。
B. 基本方法的实现延迟到子类进行具体实现,控制的行为由父类约束。
五 实现12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667package Templateimport ...
Go实现23种设计模式—门面模式(外观模式)
一 类别 门面模式又叫外观模式,是一种常用的封装模式
二 概述 给一系列具有关联性的子系统的集合提供对外访问的一组接口,调用者不用明确内部具体的业务逻辑,只需要调用这组接口达到目的即可。也就是要求子系统外部与内部不能直接进行通讯,必须通过一个统一的对象进行,而这个统一的对象就是门面。门面模式通过只提供高层次的接口,从而降低了外部与子系统调用的复杂性。
三 关系 门面角色: 了解子系统内部的全部业务逻辑与实现。
子系统角色: 被门面角色的实现对象所调用,等价于外界的客户端。
Client角色: 只需要传入相对应的签名,调用相关方法,就能得到目标结果。
子系统内部: 在实现Clinet调用方业务需求的同时,可以对具体业务进行功能拓展,对外不变,对内多变,增加额外的功能,比如说检验等。
四 门面模式的优点 A. 减少了系统的相互依赖性;在我看来通过门面的代理,直接切断了调用方与各个子系统内部的调用关系,降低了双方的耦合关系,从而降低了系统混乱、依赖。直接将两者的依赖关系转移到 ...
go应用性能分析工具
一 Go性能调优 Go语言的性能主要是体现在四个方面:
A. CPU profile :报告cpu的使用情况,使用一定频率采集程序在cpu和寄存器上的数据;
B. 内存 profile(heap profile):报告程序内存使用情况;
C. Block profiling: 报告goroutine阻塞,不再运行的情况;用来查找和分析死锁;
D. Groutine profling: 报告goroutine的使用情况,区分调用关系;
常用工具:
runtime/pprof:采集工具型应用的数据;
net/http/pprof:采集服务型应用运行数据信息;
二 工具型应用性能分析(runtime/pprof)A. CPU分析1234567891011import ( "runtime/pprof")f, err := os.Create("./cpu.pprof")err = p ...
Go可选参数的优雅使用技巧
前言 在Go语言中,是不支持类似Python的可选参数,在函数进行参数拓展或者配置参数的默认参数就比较麻烦。如果使用不当,会在将来接口拓展中造成很大的影响。
主要影响:
破坏兼容性
直接在函数定义处,添加拓展参数,会导致所以调用处都要进行修改,破坏了代码的完整性,因为有的逻辑中可能不需要该参数。
不破坏兼容性,重新添加一个新的初始化的函数,随着参数添加的越来越多,初始化函数越来越多,非常冗余。
因此使用可选参数配置的方式进行初始化和默认参数的设置就优雅的解决了参数拓展带来的一系列问题。
实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778package mainimport "fmt"// 本文是实现可选参数的最佳实现// 对于函数的可选参数和默认参数配置,通常要在不影响不破坏现 ...