前段时间课内作业需要,学校和华为云合作并给我们发放了代金券,由此我第一次使用华为云平台。
对于我这种前几年游击于各个云平台限时活动的“大冤种老用户”,虽然近几年云服务商都降价推广,活动频繁,但是来到一个新平台肯定还是要搞一波新用户福利嘛,所以我盯上了:
传送门 https://activity.huaweicloud.com/discount_area_v5/index.html Link
emm 并非推广,因为似乎从去年开始各家都在推 38/y 的轻量服务器。
不过话说回来,别看华为命名什么 Flexus L,本质就是轻量应用服务器,性能差,共享抢占式,开大服务直接有卡死的风险。并且这玩意儿我实测上行慢也就算了,下行还慢的要死,加上这种国内服务器要天天换源,体验算是相当差了。不过一分钱一分货嘛…吐槽归吐槽,这几年真的比 21/22 年那会儿活动多多了。
计划
这种 2c2g 的服务器,跑个 php 博客或者搭个静态页面也就差不多了,不过我们如果已经有了博客,那除去这个,还有什么折腾的呢?
首先是前几天我又经历了一次数据丢失 🥹,我已经麻木了,不过还好的是我重要的开源代码都在 github,写的文章都在软路由上有备份,开发环境可以重来
总结一下是这样的 😰
截止目前,我搞机生涯中,搞崩了 2 次 ntfs 一次 hfs+ 5 次 ext4 不计其数的 btrfs 一次 xfs 一次 apfs
累计丢数据 3T-5T 左右,战功赫赫
不过平时尝试写的一点小东西,小项目,还有摘抄的代码段,平时记的小笔记,以及随笔的记录,折腾的重要文件,都随着 btrfs 分区的损坏灰飞烟灭了
其次,我目前常用的 flomo,typora,notion,要么是得开高级版才有很多功能,要么是没有云同步,要么是全云上,折腾了这么久,自己的笔记和知识库还是杂乱无章。
所以之前搁置很久的计划又继续了,利用开源替代构建自己的数字平台,而选择上,由于硬件性能的限制,我选择了两个 node 两个 go 的项目,低内存占用高性能,保证在小服务器上也可以流畅运行~,而恰好他们都是开源的比较不错的选择
都跑起来占用大概这样:
前置工作:Docker 中跑一切
这篇文章所有的服务全是在 Docker 中运行的,便捷管理,无需配环境,即开即用,快速升级
[!NOTES] 提示
对了,我们一直使用 Ubuntu Server 24.04 举例,如果你偏好其他发行版,使用其对应的包管理器就好啦
我们先把 docker 本体弄好:
看官方教程就好啦,当然我也复制好了你可以直接粘过去用:
Install Docker Engine on Ubuntu https://docs.docker.com/engine/install/ubuntu/ Link
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安装好了首先启动服务:
sudo systemctl enable docker
sudo systemctl start docker
将你的用户添加到 docker 用户组:
sudo usermod -aG docker <username>
修改镜像源 /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.1panel.live"
]
}
修改完直接 sudo systemctl restart docker 重启服务就 ok 了
Memos: 随时随地记录想法,便签式记录
Memos 算是 flomo 的开源替代,除了 AI 分析什么的其他功能都是有的,唯一就是以网页作为载体,可能比不上全平台客户端,但是自建我的数据更安全,自己也可以随时二次开发。
它的部署极其简单:
docker run -d --name memos -p 5230:5230 -v ~/.memos/:/var/opt/memos neosmemo/memos:stable
嗯,就结束了,其中 ~/.memos/ 是数据文件存放的位置,你可以自定义。
因为它的数据库存在 sqlite,所以启动本体之后什么都不用管了,你就轻松反代,申请证书,然后就能用了。
看到这里就有帅的发光的你问了:
TMD 你们这些人是不是没事找事啊,好好的产品不用,一天天搞什么开源替代,丑的要死,那么简陋,是不是没苦硬吃啊
emm 怎么说,开源替代一个是自建为了数据的完全持有,保证自己数据的安全,还有就是通常开源产品有较高的自定义空间。
在设置——系统——自定义 CSS,就可以让他们变成自己喜欢的样子了。
怎么说,有点像 Win11 开了云母一样()
Joplin:记录笔记,全平台同步
如果说 Memos 是每日想法的记录,那么 Joplin 就是较长笔记的解决方案,其提供了开源服务端和全平台的应用,不过…,桌面端其实全是 electron 写的。
还是在官方仓库找到部署教程:
首先创建一个 .env
APP_BASE_URL = https://example.com/joplin
APP_PORT = 22300
DB_CLIENT = pg
POSTGRES_PASSWORD = joplin
POSTGRES_DATABASE = joplin
POSTGRES_USER = joplin
POSTGRES_PORT = 5432
POSTGRES_HOST = localhost
先改一下 APP_BASE_URL 就好,其他先注释掉,我们先用内置的 sqlite 测试。
docker run --env-file .env -p 22300:22300 joplin/server:latest
嗯,又是一句命令就部署好了,反代好直接进去,默认用户名 admin@localhost 密码 admin
在客户端中设置——同步——选择 Joplin Server(Beta),然后输入地址用户名密码就好了。
测试没问题了之后,我们来搞好 postgresql
sudo apt install postgresql
然后自启动和开启服务
sudo systemctl enable postgresql
sudo systemctl start postgresql
之后改密码和建新用户,新库:
sudo -i -u postgres
psql
ALTER USER postgres PASSWORD '你的强密码';
CREATE ROLE 你的用户名 WITH LOGIN PASSWORD '用户的密码';
CREATE DATABASE 你的数据库名 OWNER 你的用户名;
修改监听端口和验证策略
sudo vim /etc/postgresql/16/main/pg_hba.conf
添加你的 docker 容器网段,例如:
host all all 172.17.0.0/24 scram-sha-256
host all all 172.18.0.0/24 scram-sha-256
sudo vim /etc/postgresql/16/main/pg_hba.conf
listen_addresses = 'localhost,172.17.0.1'
之后重启服务就好了
随后改好刚才的 .env,重启容器就好了。
Wikijs:开源的强大协作知识库
Wikijs 是知名的知识库软件,没什么介绍的了,这个用的人很多,权限管理和协作功能十分完善。
先用 psql 建好数据库,这里我们还是 postgresql
我们使用 Docker Compose,创建好 docker-compose.yml
services:
wiki:
image: ghcr.io/requarks/wiki:2
environment:
DB_TYPE: postgres
DB_HOST: 172.17.0.1 #具体看你docker0ip
DB_PORT: 5432
DB_USER: username
DB_PASS: password
DB_NAME: wiki
restart: unless-stopped
ports:
- "3001:3000"
volumes:
db-data:
然后初始化就 ok 了。
Gitea:轻量的自建 git 代码库解决方案
gitea 是一个类似 gitlab 的自建 git 代码库,但不同于 gitlab 的高占用和高硬件要求,gitea 使用 go 语言开发,极其轻量,可以在性能很低的服务器上流畅运行。
部署依然还是 Docker Compose
networks:
gitea:
external: false
services:
server:
image: docker.gitea.com/gitea:1.23.7
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=172.17.0.1:5432 # 看你docker0ip
- GITEA__database__NAME=gitea
- GITEA__database__USER=username
- GITEA__database__PASSWD=password
- GITEA__server__ROOT_URL=your_url
- GITEA__server__DOMAIN=your_domain
- GITEA__server__SSH_DOMAIN=your_domain
- GITEA__server__SSH_PORT=222
- GITEA__server__APP_DATA_PATH=/data/gitea
restart: always
networks:
- gitea
volumes:
- ./:/data # 将宿主机当前目录挂载到容器 /data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000" # Gitea Web UI
- "222:22" # Gitea SSH
跑起来可以设置下邮件服务,网站基本信息,然后咱们的重要任务到了 SSH
这里我将 22 映射到了外部的 222 端口,并且全程使用 git over ssh
在你使用的主力机上生成 ssh 密钥并在 gitea 上传公钥
ssh-keygen -t rsa -b 4096 -C [email protected]
然后编辑你的 .ssh/config
Host mygitea
HostName your_url
Port 222
User git
IdentityFile ~/.ssh/gitea
其中的 mygitea 是个别名,这样你可以通过 ssh mygitea 和 git remote add mygitea:username/repo.git 来使用 ssh 和 git
简要总结
这是一份在资源有限(如 2 核 CPU、2GB 内存)的云服务器上,通过自建方式搭建个人数字平台的用户准备的实践指南。出于对数据所有权、隐私安全以及对现有云笔记服务(如 Flomo, Notion)不满的考虑,决定利用开源软件 Memos、Joplin、Wiki.js 和 Gitea 来构建替代方案。
这些的前提还是得有时间慢慢折腾,并且对 docker linux 足够熟悉,当然你也可以向 AI 询问获得非常好的解决方案。
其中,所有平台都支持通过 css 进行美化,你可以查询相关的文档以获取进一步方法,我接下来有时间的话也会写一份 css 来美化各个平台并放在 github 上,到时候大家可以自取hh。(挖坑.jpg)
就这些,如果你恰好手上有这样的服务器,并且想要构建一套开源的文字代码记录平台,不妨试试这些!