本文原来拟定的标题为:《墙,墙,又是墙!》,以显示我的愤怒。

故事背景是由于 Google Workspace 放弃了白嫖用户,我转付费了其中若干套,放弃了若干套。放弃的订阅可以导出全部数据到 GCP 存储桶。

大概是这样的:

在 gsutil 工具主页上看到安装方式的文档链接,文档首选通过自定义 repo 的方式安装:

sudo tee -a /etc/yum.repos.d/google-cloud-sdk.repo << EOM
[google-cloud-cli]
name=Google Cloud CLI
baseurl=https://packages.cloud.google.com/yum/repos/cloud-sdk-el8-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
       https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOM

sudo dnf install google-cloud-cli

经测试,由于众所周知的原因,这个方案在国内主机上是行不通的。

知天朝者,Google 也。他们还提供了通过归档包的方式进行安装的方案。目前可以下载到的最新的版本归档是:google-cloud-sdk-377.0.0-linux-x86_64.tar.gz。

这里要感谢仁慈的 TG,没有赶尽杀绝,留了 dl.google.com 活口:

# wget -c https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-377.0.0-linux-x86_64.tar.gz
# tar xzf google-cloud-sdk-377.0.0-linux-x86_64.tar.gz
# cd google-cloud-sdk
# ./install.sh

安装完成后提示:

To update your SDK installation to the latest version [381.0.0], run:
  $ gcloud components update

作为精神强迫症患者,必须来一波:

# gcloud components update

到这里身心还较为愉悦,尝试列出 GCP 存储桶的文件:

# gsutil ls gs://takeout-export-xxxx

我就猜到会报错:

ServiceException: 401 Anonymous caller does not have storage.objects.list access to the Google Cloud Storage bucket.

- 阅读剩余部分 -

穷人的孩子早当家是有一定道理的。由于用不起某里云的 OSS (对象存储)服务,自己折腾了一番。期间踩坑若干,故自行记录聊以慰籍。

技术选型是采用 MinIO 与 Thumbor 无疑,网上相关的文章也很多。我的故事分为 5 个节点:

0x00、最初的记忆——Docker 安装

是的,我一开始打算以 Docker 方式部署。

MinIO 的 Docker 部署方式可以完全参照官方文档进行:

docker run \
  -d \
  -p 9000:9000 \
  -p 9001:9001 \
  --name minio \
  -e MINIO_ROOT_USER='xxx' \
  -e MINIO_ROOT_PASSWORD='xxx' \
  minio/minio server /data --console-address ':9001'

MINIO_ROOT_USER 与 MINIO_ROOT_PASSWORD 是登录 MinIO Console 的账号密码,记得替换。

而 Thumbor 则是选择了一个叫做 Minimal Compact Thumbor 的镜像,真的是简单:

docker run -p 8888:80 minimalcompact/thumbor

一行搞定。

搞到这里,MinIO 已通过 Docker 方式跑起来了,本地测试 Thumbor 发现无法处理 MinIO 提供的私有地址,比如以下这种情况。

通过调用 MinIO 的 getPresignedObjectUrl 接口获取的私有地址:

http://127.0.0.1:9000/test/test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=348201GIYPQI49I606RF%2F20210713%2Fxxx%2Fs3%2Faws4_request&X-Amz-Date=20210713T042509Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=xxx

Thumbor 处理的地址:

http://127.0.0.1:8888/unsafe/500x0/http://127.0.0.1:9000/test/test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=348201GIYPQI49I606RF%2F20210713%2Fxxx%2Fs3%2Faws4_request&X-Amz-Date=20210713T042509Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=xxx

结果报 400 错误。

- 阅读剩余部分 -

今天通过 acme.sh 给新域名申请 SSL 证书,遇到报错:

[Mon Jul 12 15:53:31 CST 2021] Using CA: https://acme.zerossl.com/v2/DV90
[Mon Jul 12 15:53:31 CST 2021] No EAB credentials found for ZeroSSL, let's get one
[Mon Jul 12 15:53:31 CST 2021] acme.sh is using ZeroSSL as default CA now.
[Mon Jul 12 15:53:31 CST 2021] Please update your account with an email address first.
[Mon Jul 12 15:53:31 CST 2021] acme.sh --register-account -m [email protected]
[Mon Jul 12 15:53:31 CST 2021] See: https://github.com/acmesh-official/acme.sh/wiki/ZeroSSL.com-CA
[Mon Jul 12 15:53:31 CST 2021] Please add '--debug' or '--log' to check more details.
[Mon Jul 12 15:53:31 CST 2021] See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh
Error: Create Let's Encrypt SSL Certificate failed!

有人说需要在 ~/.acme.sh/account.conf 中添加:

ACCOUNT_EMAIL='[email protected]'

但是需要邮箱地址终究是麻烦,希望切换回 Let's Encrypt,可以这样:

# .acme.sh/acme.sh --set-default-ca --server letsencrypt
[Mon Jul 12 15:54:19 CST 2021] Changed default CA to: https://acme-v02.api.letsencrypt.org/directory

官方文档上也都写了,可以猛戳此处

不过据说 ZeroSSL 支持泛域名比较爽,有空再折腾一下,先学党国维稳。

好久没有参加娱乐活动了,今天遇到“偷鸡”趣事一则,随笔记录,聊以慰藉。

起因是早上看到昨天后半夜收到钉钉通知一则:

那行猥琐的代码深深地吸引了我,直接请求了一下。好家伙,XSS 代码:

有点不开心,你好歹专业一点。往这里插入 XSS 代码叫怎么回事嘛。再一看网站,还有这么个玩意儿:

- 阅读剩余部分 -

我们的宣传口号是:与墙斗,其乐无穷。

1、墙内服务器

1.1、需求与掣肘

需要对服务器数据进行异地备份,数据量级:GB 级。收费的阿里云 OSS 等用不起,土豪请自便。免费的 Google Drive 连不上。

1.2、方案选型

一番折腾后最终选定七牛云免费 10G 对象存储。不够用就建多个账号,用不同的 butket 来备份。

1.3、准备工具

  • 七牛云账号一枚
  • 安装 qshell
  • 本地备份脚本,若无可参考本文 2.4 部分

1.4、实施细节

下载并设置脚本:

wget -c http://devtools.qiniu.com/qshell-linux-x64-v2.4.1.zip
unzip qshell-linux-x64-v2.4.1.zip
mv qshell-linux-x64-v2.4.1 qshell
chmod +x qshell

前往七牛云密钥管理,找到 AccessKey 与 SecretKey:

添加七牛云账号鉴权:

/path/to/qshell account <AccessKey> <SecretKey> <账户标识>

确认一下:

/path/to/qshell user ls
Name: xxxx
AccessKey: xxxx
SecretKey: xxxx

七牛官方建议大于 100MB 的文件使用 rput 来代替 fput 来实现上传。由于备份文件普通较大,这里统一使用 rput:

/path/to/qshell rput xxxx qshell-linux-x64-v2.4.1.zip /root/qshell-linux-x64-v2.4.1.zip
Uploading /root/qshell-linux-x64-v2.4.1.zip => xxxx : qshell-linux-x64-v2.4.1.zip ...

Put file /root/qshell-linux-x64-v2.4.1.zip => xxxx : qshell-linux-x64-v2.4.1.zip success!
Hash: lhKbzJ8255w0m4BKgtYpPthvU5Mc
Fsize: 9739680 ( 9.29 MB )
MimeType: application/zip
Last time: 23.54 s, Average Speed: 413.8 KB/s

上传多个备份文件,我的思路是:

  • 用 bash 脚本跑批
  • 事先 tar 到一个文件中,再用 qshell 上传

- 阅读剩余部分 -