最近 macOS 系统磁盘空间告急,之前就出现过因为磁盘空间不足导致系统卡顿还出现突然黑屏的状态,所以这次就看到还剩余几十个 GB 的时候就开始清理工作了。清理的同时顺便就整理一下常用的几个清理工具。
在清理之前首先要对本地磁盘文件做一个整体的了解,虽然 macOS 自带一个存储管理的查看面板,但是实在是太简陋,也只能提供非常简单地查找大文件的工具。
比如说从系统提供的 Storage 预览中能看到 Documents 占用的空间最多,可以点开后面的圆形 i 图标,可以看到其中占用空间很大的几个文件。
比如说对于我,就是我安装的两个虚拟机占用了比较多的空间,但这也是预想之内的。
上面的方式只能找出来系统中的大文件所在,如果我想知道每一个文件夹所占用的空间大小,我之前的文章中介绍过gdu ,这个时候就派上了用场。
brew install gdu
然后直接对想要统计的目录运行 sudo gdu ~/
PrettyClean 是一款 macOS 上的免费清理工具,界面非常简单。
App Cleaner 是一款可以用来快速卸载应用以及应用相关残留文件的应用,非常小巧,但是非常强大。
listmonk 是一个开源的,使用 Go 语言编写的,自托管的邮件列表订阅应用。目前已经在 GitHub 收获了超过 10000 颗星星,listmon 速度非常快,功能丰富,并且可以直接打包成一个二进制文件,和 PostgreSQL 数据库一起使用。
借助 listmonk 可以非常快速的搭建属于自己的 Newsletter,Newsletter 是一种基于邮件的时事通讯,企业或组织可以通过邮箱给其成员,客户,员工或其他订阅者发送活动的新闻及广告营销的方式,但最近也逐渐成为个人出版、自媒体的流行订阅形式,相比 RSS,它更加自主,有更好的阅读体验,并且可以有更灵活的付费方式。
特性:
具体的 docker-compose 可以看这里,listmonk 需要依赖一个配置文件,我一般习惯直接放在 HOME 目录中
git clone [email protected]:einverne/dockerfile.git
cd dockerfile/listmonk
cp env .env
# edit .env
# create config.toml
vi ~/listmonk/config.toml
然后填入一下内容。注意将配置文件中的内容填写,比如用户名和密码,数据库连接方式替换为自己的内容。
[app]
# Interface and port where the app will run its webserver.
address = "0.0.0.0:9000"
admin_username = "username"
admin_password = "password"
# Database.
[db]
host = "host"
port = 5432
user = "listmonk"
password = "pass"
database = "listmonk"
ssl_mode = "disable"
max_open = 25
max_idle = 25
max_lifetime = "300s"
当添加完配置文件之后,就可以使用 docker-compose up -d db
来启动数据库了,但是 listmonk 应用不回初始化数据库 Schema,所以还需要进行初始化数据库操作。
docker-compose run --rm app ./listmonk --install
等初始化数据操作完成,可以通过进入 PostgreSQL 容器查看表结构来验证。
docker exec -it listmonk_db /bin/bash
psql -d listmonk -U listmonk -W
\dt
最后就可以启动应用 docker-compose up -d
这部分内容已经在我上面提及的 docker-compose.yml
文件中存在。
app:
<<: *app-defaults
container_name: listmonk_app
depends_on:
- db
command: "./listmonk --static-dir=/listmonk/static"
volumes:
- "${LISTMONK_CONFIG}/config.toml:/listmonk/config.toml"
- "./static:/listmonk/static"
加入已经在 [[MailChimp]] 或者 [[Substack]] 上有一定的订阅用户,那么可以通过后台工具导入 csv 文件。但需要注意的是,导入的用户默认状态是 Unconfirmed,所以需要进入数据库手动更新用户的状态。
docker exec -it listmonk_db /bin/bash
psql -d listmonk -U listmonk -W
输入密码登录数据库,然后执行 \dt
查看表。然后查看表内容
SELECT * from subscriber_lists;
然后更新所有人
UPDATE subscriber_lists SET status='confirmed' WHERE list_id=4;
默认情况下 listmonk 运行在 HTTP,不提供 SSL,我们可以借助 Nginx 和 Let’s Encrypt 来生成证书提供更安全的访问。
有很多种方式可以完成
之前好几篇文章也介绍过 HestiaCP 面板中的模板文件,所以这里就简单再总结一下。
首先与进入 root 账户 sudo su -
然后进入如下的目录
cd /usr/local/hestia/data/templates/web/nginx/php-fpm/
这个目录中包含了 HestiaCP 默认的 Nginx 模板。
cp default.tpl listmonk.tpl
cp default.stpl listmonk.stpl
然后分别修改这两个新生成的 listmonk 配置文件。
将其中 location 部分修改
location / {
proxy_pass http://localhost:9001;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
然后最好把 stpl
文件中的 proxy_hide_header Upgrade;
删除。
再进入 HestiaCP 管理后台,创建用户,然后创建网站,填入域名。创建域名进入高级管理,在 Web Template(Nginx)中选择刚刚创建的 listmonk,保存。然后在高级设置中,配置 SSL,等待获取证书,保存之后就能通过域名来访问 listmonk 了。
因为电脑空间告警,所以用 Clean Me 这个应用对系统进行了一次清理,没想到的是,可能在我误操作的情况下把我系统的设置和全部软件的设置都给清空了。我所有的系统配置都恢复了初始的状态,让我使用起来非常变扭,我在之前有写过一篇 MacBook 初始化和应用安装 的文章,但是那篇文章写的比较啰嗦,索性就重新整理一下。
下面的内容会按照常用的功能来划分。
首先在 Input Sources 中添加 Rime 输入法。
Touch Bar 设置成默认 Fn 键
Touch Bar shows -> F1, F2, etc. Keys
在 Shortcut 中将 Spotlight 的快捷键取消,因为我使用 [[Raycast]]。
在设置 Desktop & Dock 设置的时候看到了一个新的设置 Stage Manager,查了一下是 macOS 最早在 iPad 上引入的多窗口管理方式。
Stage Manager 基本是一个单窗口模式,点击一个应用就会集中到该窗口上,其他的应用会被移动到左边。用户可以将应用拖入到当前的工作区中,然后形成多个应用窗口的组合。
说实话我不知道 Apple 在 macOS 桌面版引入这样的窗口管理模式的目的,只是为了配合 iPad 触摸屏的操作方式?虽然我承认 macOS 上的窗口切换本来就有很多问题,我是通过
过去的一个月里面 EV Hosting 陆陆续续更新了共享主机服务,域名注册服务,现在因为我自己使用域名邮箱一直也在使用域名邮箱,所以现在也推出了域名邮箱服务。
很早之前就想给自己的网站弄一个自定义的域名邮箱发发验证码,邮件通知之类的,就了解了一下域名邮箱的服务。我自己之前就尝试过国内的一系列的域名邮箱,但后来这种限制(绑定电话,限制发件)就不再使用了,之前的网站我是自己注册了一个 Gmail SMTP 发件,虽然没遇到什么大的问题,但 Gmail 还是有一些发件限制的(每 24 小时不能超过 500 封)一旦超过,可能 Gmail 收发件都会收到影响。另外我还调研 了其他的一些邮件发送服务,但是最开始的时候,我就没有想使用大公司的服务(虽然 AWS 好像提供一个月上万的邮件发送额度,我还是没有考虑)。中间还考虑过自建域名邮箱 Mailu, Mailcow 对于接受邮件来说没有任何问题,但是对于发信来说,还是依赖于服务器的 IP 地址的权重,所以最后我还是将发信迁移到了 MXRoute,我体验了一段时间之后觉得不错,所以也申请了一个转售,现在在 这里 购买使用 EV_MAIL 折扣码可以获得 6 折优惠,最低 30 元一年。后台使用的 DirectAdmin 面板,购买后配置几条 DNS 记录就能直接开始用了。注意不要发送垃圾邮件。另外每小时发送 300 封的限制只存在每个邮箱,也就是注册邮箱,通知邮箱可以单独开来以提升发件的限制,这对于我来说以及完全足够了。
为了让大家快速体验这个域名邮箱托管服务,现在设置了一个体验套餐 只需要 15 元就可以购买入门的套餐,包含 250 MB 空间,一个域名,一个子域名,每个邮箱可以享受每小时 300 封邮件的发信。
共享的域名邮箱服务由 [[MXRoute]] 提供服务,使用 [[DirectAdmin]] 控制面板,在购买之后会收到一封叫做「您的自定义域名邮箱帐号信息」其中包含了使用该邮箱的具体信息。
使用自定义域名邮箱一般需要设置几条 DNS 记录。
所有具体的配置教程 可以参考 EV Hosting 的知识库 所有配置的详情都可以从收到的邮件中获得。
当完成配置之后,就可以在 DirectAdmin 界面中创建邮箱,然后进行邮件的收发了。
在写这篇读书笔记的时候去豆瓣看了一眼,我才发现我已经将这一本书加入待看列表,将近 10 年了,早已经忘记了当时是怎么知道的这一本书,又是为何把这本书加入到了待看清单。
在进入《非暴力沟通》之前要先了解什么是暴力,认识暴力,有助于理解非暴力。
我们常常认识不到自身的暴力,常常以为只有打人、鞭挞、杀人以及战争才算是暴力。相比于身体上的暴力,造成精神伤害的,那就是「隐蔽的暴力」。而隐蔽的暴力往往更加伤害更大。
非暴力主张积极进取,而非消极无为。
非暴力意味着让爱融入生活。让尊重、理解、欣赏、感激、慈悲和友情,而非自私自利、贪婪、憎恨、偏见、怀疑和敌意,来主导生活。
非暴力生活的关键就是感激生活的赐予,而不贪心。
非暴力沟通让我们转变谈话和聆听的方式。
四个要素(表达自己):
当我们说「我觉得」,常常并不是在表达感受,而是在表达想法。
建立表达感受的词汇表。
一旦人们开始谈论需要,而不是指责对方,就可能找到办法来满足双方的需要。
请求和命令的区别在于,请求没有满足时,提出人如果批评和指责,那就是命令
如果一个人想要别人了解他的处境,听到的却是安慰和建议,那么就有可能觉得不舒服。
就像在看新闻的时候去区分事实和观点一样,看完这一本《非暴力沟通》,我对书中阐述的非暴力沟通四要素倒是没有太多的关心,但是作者在行文过程中将影响这四个要素的一些细微的差别说了出来。区分观察和评论,区分感受和想法,区分请求和命令
不懂得如何表达的人。
Drift 是一个可以自行架设的 Gist 代替。使用 [[Next.js]] 13 和 React Server Components 编写。
Drift 发布了一个官方的 Demo
分享的文件页面内容
目前官方还没有发布编译好的 Docker 镜像,需要自己编译部署。但是也非常简单。
拉取官方的代码
git clone https://github.com/MaxLeiter/Drift.git
cd Drift
docker-compose build
目前为止因为项目还在开发过程中,编译过程可能会出现一些问题。
编译完成直接运行下面的命令即可。
docker-compose up -d
虽然我把其他服务陆陆续续从 Google 迁移出来,但 Google Analytics 一直都运行良好所以也没有怎么管,但 Google Analytics 到今年年中的时候会强行升级 GA4,看了一下升级的过程和 Google Analytics 的操作实在太复杂,就诞生了迁移出 Google Analytics 的想法。简单地了解了一下目前的 Google Analytics 的代替品,收费的,自行架设的还很多选择。这篇文章就简单地对比一下。
主要还是分成两个部分来划分搜罗的产品,可以自行托管的,和商用的。看过我之前文章的小伙伴应该知道,我个人会偏向于开源,可自行托管的服务。即便这个服务还在初始阶段可能还比不上某个商业化的服务,但我依然会选择开源的那个,比如我会选择 [[Wallabag]] 更甚于 [[Pocket]] 和 [[Instapaper]],我会选择 [[miniflux]] 更甚于我过去常常推荐的 InoReader。如果实在找不到合适的开源的,我会优先选择数据归属权在于个人的服务(比如数据不联网,存在本地,可以使用纯文本或有格式的类型导出数据),比如 Obsidian 更甚于 [[Notion]] 和 [[Roam Research]] 以及一切基于网页的笔记应用。
可 Self-hosted:
不可自架,闭源
下面就重点介绍一下我准备去试试的几个服务。
Umami 是一个可以自托管的数据统计服务,可以用来代替 [[Google Analytics]]。 “Umami”,源于 “Umai”,在日语里是“美味、鲜味”的意思。
Matomo (原名 Piwik)是一款使用 PHP 编写的网站访问统计分析工具,开源,可自行架设,可以很好的代替 [[Google Analytics]] ,Matomo 使用 PHP 和 MySQL 实现,已经被超过 100 万网站所使用 。
Matomo 非常强大,并且只需要一来 PHP 和一个数据库,并且其报表分析非常强大。
Fathom Analytics 是一个 [[Google Analytics]] 的代替。Fathom Analytics 是一个基于加拿大的团队推出的服务。
Fathom Analytics 是一个官方推出的 SaaS 平台,是一个收费的商业服务。如果不想使用官方的,也可以利用 Fathom Lite 自己搭建服务。
Fathom Lite 主要是使用 Go 语言 和 JavaScript 编写。Fathom Lite 和 Analytics 的区别可以参考这里。
Plausible 是一个简单的 [[Google Analytics]] 代替。Plausible 是使用 [[Elixir]] 语言编写的,我最早知道这个服务是在 Twitter 上偶然之间看到了创始人分享如何想要找到一个 Google Analytics 代替,然后自己做,最后到如何打造成为一个 SaaS 产品,支撑自己的全部生活的成功故事。
shynet 是一款使用 Python 编写的网站流量分析工具。
Ackee 是一个关注隐私的开源(基于 MIT 协议)网页分析工具,采用轻量级的 Node.js 和 MongoDB 架构,接口使用 [[GraphQL]]。
Ackee 界面简洁美观,采用匿名数据采集的方式,分析你网站的流量并在最小的界面中提供有用的统计信息。对于不需要像 Google Analytics 或 Matomo 这样的全功能营销分析平台的个人来说,是一款非常不错的工具。
除了浏览了一下官网和 GitHub 页面,没有对这些产品更进一步的了解了,但是我个人感觉 Umami 还不错,页面简洁,功能也满足我的使用。然后后端数据库支持 PostgreSQL 和常用的 MySQL,并且浏览了一下帮助文档,发现还支持 PlanetScale ,并且资源消耗也比较小,所以立马 Docker 搞起,创建数据库连接字符串,然后直接拉取镜像就能起来,配合 HestiaCP 申请一个 SSL 证书很快就搞定了。
it-tools 是一个使用 [[Vue.js]] 和 TypeScript 编写的常用 IT 工具的集合。
it-tools 项目中集成了如下的工具:
使用 Docker 镜像可以很快的安装上。更加具体的 docker-compose.yml
可以见这里
git clone https://github.com/einverne/dockerfile.git
cd dockerfile/it-tools
docker-compose up -d
it-tools 也可以作为一个很好的学习 Vue 和 TypeScript 的项目,给这个项目贡献一个常用的工具库,用 Vue 绘制界面可以很好的上手 Vue 的使用。
EV Hosting 上线了域名注册服务,现在可以在 EV Hosting 选购超过 20 种的域名后缀,包括了常见的 .com, .org, .me, .info 等,还上线了 .fun, .life, .studio, .store 等等新的顶级域名。域名的价格在不同时期会略有不同。
在目前阶段,.fun, .pw, .life, .shop, pics, .studio, 等等域名只需要 20~30 元不等就可以购买一年。但是域名的续费一般会比较贵,可以酌情考虑不同的域名后缀。EV Hosting 也会在不同时间提供最优惠的域名注册服务。
请注意购买域名之前,保证自己的注册邮箱是能够接收邮件的,在注册完成之后会受到一封验证邮件,域名注册局在第一次购买时需要验证该邮箱的使用。
在下一个页面中进行支付。
完成付款之后在「我的域名」中就能看到购买的域名。
在 EV Hosting 中,点开对应的域名,可以在侧边栏中修改 NS 名称服务器(Name Server)。
本站提供的四个名称服务器可以在这里 查看(仅注册用户可见)。
更推荐将域名添加到 Cloudflare 后台进行管理,访问 Cloudflare 后台,然后将域名添加到 Cloudflare。使用 Cloudflare 可以免费享受其提供的 CDN,还能隐藏背后服务器的 IP 地址。现在就介绍一下如何将 EV Hosting 购买的域名添加到 Cloudflare 。
首先要有一个 Cloudflare 的账号,进入账号之后,点击 「Add a site」,然后输入自己购买的域名。
然后再下一步中选择 Free,使用免费套餐。然后 Cloudflare 会自动对域名进行扫描,自动找到域名的 DNS 记录,点击导入。然后 Cloudflare 会给出两个 Name server 的地址,将这两个服务器配置到 EV Hosting 域名管理后台的名称服务器中。
完成配置之后,等待一段时间 NameServer 生效,点击页面中的 「Done,check nameservers」。Cloudflare 会自动检查 DNS 是否生效,如果检查通过,会发一封邮件到 Cloudflare 的邮箱中。
添加到 Cloudflare 之后就可以使用 Cloudflare 的 DNS 管理,添加 [[A 记录]], [[TXT 记录]], [[CNAME 记录]] 等等了。
[[Ansible]] 是使用 Python 开发的自动化运维工具。它可以配置管理,部署软件并编排更高级的任务,例如持续部署或零停机滚动升级。Ansible 可以用来管理 crontab。[[Crontab]] 是一个用于在 Unix 和 Unix-like 操作系统上执行定期任务的工具,它允许用户在预定的时间间隔内自动运行命令或脚本。Crontab 是 Cron Table 的缩写,Cron 是一个用于定时执行任务的守护进程。
Crontab 使用一个称为 crontab 文件的特殊文件来定义定期任务的计划。每个用户都可以拥有自己的 crontab 文件,其中包含一系列命令或脚本以及与之关联的时间规则。更加详细的 cron 使用可以参考之前的文章
借助 Ansible,用户可以轻松地创建、修改和删除 crontab 条目,自动化 Crontab 任务的管理。
在没用使用 Ansible 之前,都是通过 crontab -e
手动对 cron 任务进行管理,通常的任务就是备份与同步。但是随着要管理的机器和需要定义的脚本内容越来越复杂,手工编辑 crontab 就无法维护了。
另外在学习 Ansible 之后,了解了「Infrastructure as Code」概念,通过配置文件来定义所有的配置修改是一个不错的解决方案。这样一方面不用自己备份所有的脚本内容,也不用每一次都临时创建。在系统初始化的时候,直接通过 Ansible 就能纳入管理。
首先,确保你的系统上已经安装了 Ansible。你可以使用包管理器来安装它。例如,在 Ubuntu 上,你可以运行以下命令:
sudo apt update
sudo apt install ansible
下面是一些使用 Ansible 管理 crontab 的常见任务示例:
使用 Ansible 创建 crontab 条目非常简单。你可以编写一个 Ansible playbook 文件,其中定义了你要创建的 crontab 条目。以下是一个示例 playbook 文件的内容:
---
- name: Manage crontab
hosts: your_target_hosts
tasks:
- name: Add crontab entry
cron:
name: "rsync backup"
minute: "0"
hour: "2"
job: "/path/to/your/backup_script.sh"
在这个示例中,your_target_hosts
是你要管理 crontab 的目标主机的列表。name
字段是 crontab 条目的名称,minute
和 hour
字段是定时任务的执行时间,job
字段是要执行的脚本或命令。
保存以上内容到一个 YAML 文件(比如 crontab.yml
),然后运行以下命令来执行 playbook:
ansible-playbook crontab.yml
将在目标主机上创建一个新的 crontab 条目。
要修改或删除现有的 crontab 条目,你可以使用 Ansible 的 cron
模块的 state
参数。以下是一个示例 playbook 文件,演示如何修改和删除 crontab 条目:
---
- name: Manage crontab
hosts: your_target_hosts
tasks:
- name: Modify crontab entry
cron:
name: "My cron job"
minute: "30"
hour: "3"
job: "/path/to/your/updated_script.sh"
state: present
- name: Remove crontab entry
cron:
name: "My cron job"
state: absent
在这个示例中,state: present
表示修改 crontab 条目,state: absent
表示删除 crontab 条目。保存以上内容到一个 YAML 文件,然后运行 ansible-playbook
命令来执行 playbook。