各位老友们好,我是 Chlorine。继续水文章,讲讲最近摸鱼期间折腾的一些事情。

封面:用 AI 搓出来的(不太完善的)小氯酱

临时邮箱

继续薅 CloudFlare 活佛的羊毛。

大善人:别薅了别薅了我一年都亏好几个小目标了

插句话:为什么没有发现 CloudFlare 娘?按理说 CloudFlare 作为广大站长的好朋友,应该会有喜欢 ACG 的老友们做一个娘化的形象啊。很奇怪。

临时邮箱,字面意思,临时的邮箱(废话)。有时候我们突然需要一个服务,欢欢喜喜地找到一个网站,却发现需要注册才能使用。那注册就注册吧,又害怕来一堆垃圾邮件,或者是泄露隐私。这个时候就可以使用一个临时邮箱,用完即丢的那种。

基于 CloudFlare 的临时邮箱很多,我选择的是这个:

{{< github repo="dreamhunter2333/cloudflare_temp_email" >}}

功能基本上没有缺失的。由于我没兴趣配置 telegram bot 和发件,还会更简单一点。

官方文档比较简略,可能需要多读几遍。所幸开发大佬很热心,遇到问题可以去 issue 里面搜下。

我只补充一点:记得添加电子邮件路由,不仅是 catch-all 规则,还有一个已经被你创建的邮件地址规则,不然会收不到邮件

其他项目

包括但是不限于 emactions、文件中转站……

DeepLX 翻译服务

DeepL 大家都知道,非常出色的翻译提供商。虽然说可能比不上用 GPT-4 这种比较强的大模型去翻译,但是对付 Google 翻译、百度翻译这种厂商【一般情况下】还是手拿把掐的。

众所周知,如果想要在一些用户界面之外的地方(比如说第三方翻译软件、代码中)执行翻译,那么我们就需要 API。不过……API 需要注册账号,还需要绑卡,最难受的是还得是境外的银行卡,而且一个月只有 500k 的 token……

500k 听着还挺多,但是如果你经常翻译各种外语文章,比方说 BBC/Reuters/NYT 等外国媒体的报道,或者是英语的学术论文,那您就用吧,一用一个不吱声。

这时候就要再次求助万能的开源社区了。隆重请出今日主角——DeepLX

{{< github repo="OwO-Network/DeepLX" >}}

简单来说,DeepLX 就是一个通过模拟 DeepL iOS 客户端/DeepL Pro/DeepL 官方 API 来把 DeepL 免费服务转换为 DeepL API 的开源服务,免费,无限量,可以自部署,非常舒适。

唯一的要求应该就是需要服务器(有一个 CloudFlare Worker 版本的,但是已经不能用了。我自己写的 Vercel 版本在后面)。不过好在 DeepL 在大陆是能够顺利访问的,而且我也有一台虚拟机(不是阿里云的服务器,来自我光荣而伟大的孙哥),可以支持我部署这样的业务。

部署

[!important]
以下内容需要一台 Linux 机器,以及 docker 和 docker-compose 环境等。

随便找你个你喜欢的目录(比如 /home/yoghurtlee/deeplx,如果没有喜欢的就 mkdir yourdir && cd $_ 创建一个),编辑 docker-compose.yml 文件:

nano docker-compose.yml
# 使用你喜欢的编辑器,例如 Vim 也没问题

把下面的内容粘贴进去:

services:
    deeplx:
        image: ghcr.io/owo-network/deeplx:latest
        container_name: deeplx
        restart: always
        logging:
            options:
                max-size: 10m
        ports:
          - "1188:1188" # 如果端口被占用了就换个空闲的

        environment:
          # - AUTHKEY=your_offical_deepl_api_key # 如果你有 DeepL 官方的 key
          - TOKEN=your-token # 设置一个你喜欢的 token,防止被人滥用

然后启!动!

docker-compose up -d

如果一切顺利,在启动完成后访问 https://your-ip:1188(or your custom port) 应该可以看到:

{
    "code": 200,
    "message": "DeepL Free API, Developed by sjlleo and missuo. Go to /translate with POST. http://github.com/OwO-Network/DeepLX"
}

我们的 API 接口就是 <your IP and port>/translate。使用方法大概是:

curl --location 'your-API' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer your-key' \
--data '{
    "text": "你的内容",
    "source_lang": "你的源语言",
    "target_lang": "你的目标语言"
}'

由于我的虚拟机只有 IPv6 地址,还是动态的,每次都输入一串又臭又长的地址实在是难绷,所以我就用 DDNS-Go 和 Nginx Proxy Manager 绑定了个域名。这个事情应该难不倒各位老友,我就不赘述了。

绑定到翻译服务

这个事情简单,直接把你的 API 地址和 key 填进去就完事。像沉浸式翻译(Immersive Translate)和简约翻译(Kiss Translate)都可以用。

这个服务的稳定性还是不错的,不过有时候会 429,正常现象。

PaaS 版本?

我去翻了一下,感觉这个东西的原理很简单,那看起来完全可以用 Vercel 或者 Netlify 一类的部署。

找来找去只找到这个项目:

{{< github repo="LegendLeo/deeplx-serverless" >}}

不过这个是凉心云云函数版本的。于是我秉持着自己动手丰衣足食的理念,改了个 Vercel 版本的:

{{< github repo="yoghurtlee-thu/deeplx-paas" >}}

用法和普通版一样,不过 API 是 /api/translate

如各位所知,我是真不懂前端,连需要在 package.json 里面加 Vercel 的 dependency 都不知道。这个版本可用,不过也只保证基本可用性,连 Key 的功能都没有。等以后我知识丰富了慢慢加好了。我还写了个 Workers 版本,但是还不能用。没办法,菜就多练。

此外,如果有现成的项目已经实现了这个功能,请一定要在评论区嘲笑我。

阿里云服务器

前言

上次我分享我备案注销的经历后,有许多热心的老友都建议我:把一个子域名解析到阿里云的服务器上,然后保证其至少有一些流量,这样阿里云就不会把域名识别为未接入了。

我首先花了一点时间弄明白了这条建议是什么意思 🤣 然后我找到阿里云的售后工程师咨询了一下,得到了肯定的答复。

An image to describe post

这倒是个好方法,不过这里还有一个关键的问题:我没有服务器。当时备案的服务器是用高校优惠白嫖的,而阿里云正常的服务器是什么价格大家应该都清楚。作为一个穷学生,我是断然不会花这么多钱只挂一个网站的。

服务器你唯唯诺诺,买域名你重拳出击

于是,我想到了合租。偶然的机会,我联系到了大一上写沟课的一位同学(无系的)。在经过沟通后,我们达成了合租的协议。具体细节就不多说了,反正今天上午,我购入了一台阿里云的 ECS,2H2G 配置,经典的 99 元款。希望能以这个价格多续费几年。

开荒

然后需要简单开一下荒。

重置密码

99 元的服务器默认不能远程登录(应该是),需要在 ECS 控制台重置密码。

随后就可以通过 SSH 命令进行登录了。

创建 sudo 用户

由于我的机器有两个人用,我们需要创建两个用户。

# 在 root 模式下
adduser liyao
# 输入相关信息
usermod -aG sudo liyao
# 另一个同理

安装 ufw

ufw 是我们 Ubuntu server 用户的好朋友。不过注意,由于云服务器的特殊性,光是用 ufw 开放端口是不够的,还得在云服务器控制台的安全组里面编辑规则。也可以一次性打开所有端口,但是不推荐,有亿点危险。

sudo apt update # 以后这个步骤我就不写了
sudo apt install ufw
sudo ufw enable
# 假设你要开放 114514 号端口——当然实际上没有这个端口
sudo ufw allow 114514

可能是因为阿里云服务器的缘故,已经配置好了阿里云镜像源。速度极其可观,我就没动。

更改默认 SSH 端口

改 SSH 端口这个事情我是从光荣而伟大的孙哥那里学来的。据说可以有效防止一部分宵小之辈的攻击。

编辑器选一个你喜欢的:

sudo nano /etc/ssh/sshd_config

Port 22 那一行取消注释,再改成你喜欢的端口,比方说 20022。

注意此处有被锁在外面的风险,建议开两个终端同时 SSH。以及别忘记添加防火墙放行。

免密 SSH

又是来自光荣而伟大的孙哥。

本机执行:

ssh-copy-id -p your-ssh-port username@address

(如果没有 SSH 密钥记得生成一个)

安装 1Panel

1Panel,著名的开源 Linux 服务器面板,界面清爽,功能全面,非常推荐大家用。我知道可能有老友认为自己命令行耍得贼 6,完全不需要面板。没关系,我之前也是那么觉得的。

直接一键安装:

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

跟随向导安装即可。

安装完成,进入面板后,就可以随意发挥了。

配置反代服务器

这件事情让我几乎红温。原因是,我之前用的是 Nginx Proxy Manager,但其功能似乎和我的这个要求不太吻合,考虑到 Nginx 实在是太抽象了,我打算用 Caddy。

没想到的是 Caddy 更抽象,一直给我报 403,怎么调都没用。

于是我放弃了 Caddy。想到之前有个老哥用宝塔面板完成的配置,那我有 1Panel,是不是可以照猫画虎?

于是我去下载了应用商店的 OpenResty,一次通过。

赞美可视化界面。

配置网站

我们接着上面的 OpenResty 说。

由于我只是想挂一个网站,因此直接把 Hugo 构建出来的产物扔到一个文件夹下就可以了。

先复制一份文件夹,把大部分多余的东西删掉,然后用我写好的 Makefile 跑一下得到 public 文件夹。记得把 http://localhost:1313 替换成你的域名(血的教训 qaq)。

1Panel 默认在一个挺长的地方创建网站文件夹:

/opt/1panel/apps/openresty/openresty/www/sites

所以在 1Panel 的主机-文件选项卡中找到这个地方,创建一个文件夹,名字推荐就写网站的域名。然后把 public 上传上去,并更名为 index。然后创建 logs 文件夹并在其中创建 access.log 文件即可。

做好 DNS 解析后点击网站-创建网站-静态网站,选择你的目录,创建即可。

然后还可以申请个 SSL 证书,和 Nginx Proxy Manager 一样是可视化、自动续期的。不过需要 DNS 服务商的 API token。

然后访问域名,就可以看到一个纯静态网站了。可以设置个定时任务,隔一段时间访问下。这样就会有流量了。

虚拟机改造

在尝到了 OpenResty 的甜头后,我打算把我日用的虚拟机也改成 OpenResty。不过这里有一个问题:OR 需要通过 1Panel 安装,而 1Panel 不能通过 IP 直接访问,需要 Nginx Proxy Manager 的反代。这就成了死循环了。

然后我发现只要这样就可以了:

1pctl listen-ip ipv6

因为我的虚拟机是纯 IPv6,所以默认不能访问(小碘-认清现实の小曲.mp4)。

然后的事情就没什么新意了。由于我的网站不多,手动迁移就完事。

现在我的虚拟机大概跑了这么几个容器:

  • OpenResty(建站工具、反代服务器)
  • Stirling PDF(PDF 处理)
  • Memos(备忘录)
  • DeepLX(翻译接口)
  • DDNS Go(DDNS)
  • AList(网盘)
  • Domain Admin(域名控制台)

里面 Stirling PDF 内存占用最大(大概 8%),但是用得却是最少的。