Hot For Coding
  • Rust交叉编译Mac编译Linux平台

    full Rust cross compiler

    关于交叉编译

    绝大部分的Rust程序员都会有跟我我一样的需求,写代码用的是Windows或者Mac,部署平台是Linux,这种情况下就需要使用Cross-Compiler交叉编译,意思是可以在当前平台Host下编译出目标平台target的可执行文件,尤其是做ARM平台开发的同学对这个更为熟悉。

    Rust交叉编译在Github上有一个文档Rust核心员工Jorge Aparicio提供的一份文档https://github.com/japaric/rust-cross,推荐大家仔细的读一读。

    ...

    READ ALL

  • Rust actix-web框架跨域请求配置

    full actix cors set-up

    在做静态博客评论系统时使用的是与主站www.qttc.net不同的域cume.qttc.net,这会造成一个跨域问题。在浏览器下使用XML Http Request或者fetch发出一个HTTP请求,假如这个HTTP的协议、主机名或者端口任意一个与当前网页地址有不一致时,为了安全浏览器会限制响应结果,通常这类问题就是所谓的跨域问题。

    解决跨域问题的方式有很多,比如jsonpiframe等等。但在这里,我使用HTTP协议里约定的字段来解决这个问题,这也是最干净完美的解决方案。为了处理有跨域请求的特殊场景,HTTP协议里有一个特殊的响应头字段Access-Control-Allow-Origin,意思允许访问的Origin,值可以是通配符*,允许所有,或者写上一个具体的Origin值。

    ...

    READ ALL

  • Rust发送SMTP邮件例子

    full rust smtp example

    今天需要做一个功能特性,利用Rust发送SMTP邮件,SMTP是非常成熟通用的发送邮件通讯协议,在Python,NodeJS,Golang,Java里都有比较好用稳定的类库,自然想着Rust里也一定很容易找到相关类库。

    可惜Rust里却没有找到比较好用的类库,在Rust的官方类库网页crates.io搜一下SMTP,排名第一个是smtp,描述写着Simple SMTP client,觉得就是它了,我就想要一个简单的SMTP客户端发送文本文件,不需要附件,回执等其它功能。本想用它,结果发现它的文档页面404,再一看Last Updated是4年之前。

    ...

    READ ALL

  • 关于HTTP Response响应头字段X-Frame-Options

    X-Frame-Options

    什么是X-Frame-Options

    HTTP有一个特殊的Response响应头字段X-Frame-Options,它可以指示是否允许浏览器在<iframe><frame><embed><object>里渲染。许多站点可以利用这个头字段避免clickjacking的攻击,这是一个浏览器安全问题,简单来说就是可以使用程序模拟用户恶意点击页面相关的DOM元素,比如在登录页面点击登录按钮等等,造成页面短时间内登录动作频繁造成服务器有压力从而达到攻击目的。所以才会有[CSRF: Cross-site request forgery](https://en.wikipedia.org/wiki/Cross-site_request_forgery)出现,当然这不是今天讨论的话题,感兴趣的朋友可以去看看。

    ...

    READ ALL

  • Cume静态博客评论系统发布

    full cume a comment server for all the static blog

    19年年底博客改版成纯静态页之后,博客评论系统一直找不到合适的,之前国内比较流行的那几个也都关闭服务了。没办法只能使用Disqus,Disqus的确做的很好,唯一的缺点就是国内用不了。于是决定自己写一个静态页博客评论系统,经过一周时间的开发,今天正式上线替换Disqus。

    Cume是我用Rust编写的一款静态页博客评论系统,数据库使用NoSQL方案,选用MongoDB。采用Rust编写虽然费时,不过一旦编译好了之后就非常稳定,编译后的二进制文件一共15M,非常容易部署。使用跑分特别猛的Actix作为WebServer,本来想使用Rocket,因为它的首页特别漂亮,最后还是用了Actix。

    ...

    READ ALL

  • Docker启动Web应用容器外无法访问

    full docker app cannot access

    今天像往常一样准备利用Docker启动一个Web应用docker run -d -p 80:80 --name nginx nginx,结果发现无法访问,docker ps看了一下,容器已经启动了,日志也正常。

    $ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    c0e3ec43f5d3        nginx               "nginx -g 'daemon of…"   5 seconds ago       Up 4 seconds        0.0.0.0:80->80/tcp   nginx
    

    ...

    READ ALL

  • Debian apt install Could not get lock 错误

    full debian apt could not get lock

    我在Debian10安装Mariadb时遇到一个错误

    $ apt install mariadb-server
    E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
    E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
    

    ...

    READ ALL

  • Etcd took too long 问题

    full etcd disk sync duration

    Kubernetes集群在跑几天之后总会有一两个Etcd节点的系统负载特别高,甚至高达27,ssh进去半天才有响应,之前图省事每当负载高到离谱的时候我就reboot又能坚持几天。

    然而这个问题始终反复困扰着我,还是得花点时间彻底解决一下这个系统负载高的问题,通过top命令我得知CPU资源被百分之百占用的程序是Etcd。

    这有点奇怪,Kubernetes用Etcd来存储它的一些配置信息,以及ConfigMap等。我的集群目前只有20个节点,所有的Pods加一起也就250个左右,按理说这么点数据量对于三个节点构成高可用集群的Etcd来说不应该存在瓶颈的。

    ...

    READ ALL

  • Docker run iptables No chain/target/match by that name 错误

    full docker animals

    我使用Docker运行一个HAProxy到多个Kubernetes API Server作为高可用,但经常性的发现某一个Node处于NotReady状态,通过查看kubelet日志发现连接不到Kubernetes API Server。于是赶紧查看以下HAProxy容器,发现HAProxy容器居然已经挂掉了,虽然我设置了--restart=always,但不知道什么原因还能挂掉。

    我打算先把容器启动之后再排查,结果发现启动不了

    ...

    READ ALL

  • 如何在CentOS7上通过kubeadm快速安装k8s集群

    full k8s install on CentOS7

    本文介绍一下如何在CentOS7上通过kubeadm快速安装k8s集群,以下每一步骤我都亲自测试过,现在要搭建一个k8s集群相比前两年太容易了,只需要使用官方推荐的kubeadm工具即可快速初始化出一个k8s集群

    准备

    • CentOS7系统,记得是7
    • 内存不小于2G
    • CPU双核以上
    • 所有机器直接网络互通
    • 唯一的Hostname
    • 防火期推荐关闭,使用外层的防火墙策略
    • Swap关闭

    本文机器例子

    HostnameIPOS
    cp1172.16.11.199CentOS7
    worker1172.16.11.198CentOS7
    worker2172.16.11.197CentOS7

    ...

    READ ALL