优雅地暴露Docker远程API

起因 最近在使用 portainer 管理多个机器上的 Docker 的时候,需要开启 docker 的远程 api 访问,但是如果直接开启的话会直接暴露到公网,容易被扫端口然后入侵机器,而自己生成 tls 证书什么的又比较麻烦,于是在 Google 搜索中发现了一个项目,https://github.com/kekru/docker-remote-api-tls。 简介 简单看了一下项目的介绍,其实就是通过容器内部的 nginx 对挂载进容器的docker.sock做了反代,并且提供了自动生成证书的功能,还不错,虽然只有几十颗星,不过正是我想要的。 部署 项目本身是一个 docker 项目,使用docker-compose就可以启动,并且项目里面也提供了示例。 version: "3.4" services: remote-api: image: kekru/docker-remote-api-tls:v0.4.0 ports: - 2376:443 environment: - CREATE_CERTS_WITH_PW=supersecret - CERT_HOSTNAME=remote-api.example.com volumes: - <local cert dir>:/data/certs - /var/run/docker.sock:/var/run/docker.sock:ro CREATE_CERTS_WITH_PW: 证书密码,随便设置一个就行。 CERT_HOSTNAME:证书的域名,需要和 portainer 里面的域名保持一直,不过好像不支持 ip,只能用域名。 然后执行docker compose up -d就启动了。 证书 启动后会在<local cert dir>生成证书文件,使用client子目录下面的文件就可以通过 api 连接了。 目录结构大概是这样: ❯ tree certs/ certs/ ├── ca-cert.pem ├── ca-key.pem ├── client │ ├── ca.pem │ ├── cert.pem │ └── key.pem ├── server-cert.pem └── server-key.pem 1 directory, 7 files

August 28, 2022

Awesome项目搜索网站

简介 项目地址:https://awesome.long2ice.io 最近突发奇想开发了一个 Awesome 项目搜索网站,整个网站看起来样子长这样。 为什么要开发一个这个呢?因为 Github 上有很多 Awesome 类型的项目,其实就是针对某一种类型的项目做一个聚合,然后使用 markdown 展示出来。但是感觉这样的话其实并不友好,也不能够搜索什么的,于是就有了这个项目,随便又学习了一下 React Mui 和 Go 异步队列。 项目架构 整个项目也是前后端分离的,前端主要使用 React + Mui。 而后端主要使用: Fibers,一个我自己基于 Fiber+Swagger 封装的提供类似 FastAPI 开发体验的框架。 Asynq,一个 Go 的异步任务队列,也自带了 WEB 界面和命令行工具。 ent,一个 Go 的 ORM 框架,由 Facebook 开发。 部署 整个项目后端是直接使用 Docker 部署的,而前端是使用 CloudFlare 的 Pages 服务,不得不说很好用,主要还是不限流量。

July 8, 2022

Google AdSense接入流程

起因 最近把博客接入到AdSense了,看能不能赚一点服务器维护的费用,另外就是想以利益驱使自己多写一些博客吧,没有利益的事情确实很难坚持做下去。确实自己虽然感觉肚子学的东西很多很杂,但是却很少去输出。很多时候输出的过程就是一个对自己所学习的知识进行一个系统性整理的过程。 账号申请 首先肯定得有一个Google账号,这个不用说了,然后登录到AdSense官网,添加一个网站。 添加完网站之后,需要将一些代码添加到网站之中。 然后点击提交审核就可以了,整个流程下来还是比较简单的。 提高审核成功率 虽然提交审核比较简单,但是想要审核成功还是需要做一些事情的,下面是需要注意的几点 不得包含色情、赌博之类的内容。 网站需要填充内容,最好是原创内容,如果是博客的话最好不要少于20篇。 不要频繁删除网站然后再次提交审核,最好做足准备然后提交,不然后面会越来越慢。 官方也有对此详细的解释:https://support.google.com/adsense/answer/10502938?hl=zh-Hans&ref_topic=1250104# 审核时间 我的博客审核下来还是比较快的,好像一两天就审核通过了,也许是因为我的博客都是原创内容吧。审核成功后,会收到一封成功邮件。 之后如果开启了自动广告,你的网站就会出现广告了。不过要注意一点的是,不要尝试自己去点击广告和想要刷广告之类的,不然很容易被封号,官方的这方面的检测还是很完善的。 收益 当你的广告被用户点击之后,你就可以得到收益了,看情况一般零点几美元一次点击吧。 当余额达到100美元之后,会需要添加收款银行卡,然后会进行自动打款,这个我暂时还没有达到,后续我会在写一篇有关的博客,敬请期待。

July 3, 2022

MeiliSearch,一个轻量级搜索引擎

起因 很早之前就知道了这个开源搜索引擎,也一直想用在实际项目中,但是一直没有机会。最近终于有机会可以用上了,这里简单记录一下接入流程。 选型 搜索引擎的选型有很多方案,最常见的就是 ES,但是 ES 确实太重了,对于小项目来说不仅增加的硬件成本,也增加了运维成本,对于个人开发者来说确实不太合适。另外一个就是使用关系型数据库自带的全文检索功能,比如 MySQL 和 PostgreSQL 等,都有对应的功能,但是对于性能,中文分词等支持来说确实不太好。所以对于中小型项目来说,MeiliSearch确实是一个不错的选择。 简介 MeiliSearch是一个使用 Rust 开发的项目,目前 github 上有27.7KStar 了,也是 Rust 语言 Star 最多的几个项目之一了,介于 Rust 语言最近越来越流行,很多 Rust 项目都有了越来越多的关注。看官方博客,https://blog.meilisearch.com/meilisearch-raised-5meu-seed-fundraising/,最近还得到了 500 万美元的融资,不得不感慨开源项目的出来也许就是先慢慢做大,然后寻求融资,好的项目总是会被慧眼识珠。另外,官方好像还在招聘远程开发,不过好像得熟练使用 Rust,地址在这里:https://jobs.lever.co/meili。 部署 MeiliSearch的部署非常简单,也没有什么其他的组件,使用 docker 可以很容易的部署起来。官方也提供了很多种部署方式:https://docs.meilisearch.com/learn/getting_started/quick_start.html#setup-and-installation,包括部署脚本、docker、homebrew 等等。 这里的话就使用docker-compose来进行部署。 version: "3" services: meilisearch: image: getmeili/meilisearch network_mode: host restart: always volumes: - ./data:/meili_data 然后直接运行:docker-compose up -d,然后就成功地运行起来了。 使用 WEB 界面 当MeiliSearch运行起来后,默认会在7700端口暴露 http 接口,后续所有的访问,包括新增数据、搜索数据等都是通过这个 http 接口。另外启动之后,官方还自带了一个 web 界面,不过这个界面只是用来测试的,在生产环境会被关闭掉。然后你可以在这个界面试用MeiliSearch强大的搜索功能。 SDK 当然在实际项目中,通常会用 SDK 来使用对应的一些功能。官方也提供了很多语言的 SDK,包括 Python、PHP、Java、Go 等等流行语言。对应的地址在这里:https://docs.meilisearch.com/learn/getting_started/quick_start.html#add-documents。 增加文档 增加文档可以通过调用对应的接口,这里以 Python 为例: ...

July 3, 2022

从vercel迁移到cloudflare Pages

最近网站流量比之前大了一些,然后发现vercel的每个月100G流量可能不够用了,于是决定迁移到cloudflare pages。 虽然vercel界面更好看一些,然后自动部署也很方便,但是还是没有cloudflare pages不限流量香,并且自动部署github项目的操作流程也跟vercel一样。 然后把dns服务器也迁到cloudflare了,之前用的是porkbun,用porkbun主要是因为买域名便宜,然后api太拉了,还不知道为什么封了我的服务器ip,发邮件说被流量攻击了? 然后果断迁移,还是大一些的服务商稳定一些。

June 24, 2022