Grtsinry43的前端札记 | 大三技术成长实录 & 学习笔记 | 「岁月漫长,值得等待」
文章
折腾不止

构建一站式个人数字平台:在 2C2G 服务器上自建 Memos、Joplin、Gitea 与 Wiki.js

2025年5月4日 12 分钟阅读 浏览 0 喜欢 0 评论 0

前段时间课内作业需要,学校和华为云合作并给我们发放了代金券,由此我第一次使用华为云平台。

对于我这种前几年游击于各个云平台限时活动的“大冤种老用户”,虽然近几年云服务商都降价推广,活动频繁,但是来到一个新平台肯定还是要搞一波新用户福利嘛,所以我盯上了:

传送门 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

shell
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

安装好了首先启动服务:

shell
sudo systemctl enable docker
sudo systemctl start docker

将你的用户添加到 docker 用户组:

shell
sudo usermod -aG docker <username>

修改镜像源 /etc/docker/daemon.json

json
{
 "registry-mirrors": [
   "https://docker.1panel.live"
 ]
}

修改完直接 sudo systemctl restart docker 重启服务就 ok 了

Memos: 随时随地记录想法,便签式记录

Memos 算是 flomo 的开源替代,除了 AI 分析什么的其他功能都是有的,唯一就是以网页作为载体,可能比不上全平台客户端,但是自建我的数据更安全,自己也可以随时二次开发。

它的部署极其简单:

shell
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 写的。

还是在官方仓库找到部署教程:

joplin/packages/server/README.md at dev · laurent22/joplin https://github.com/laurent22/joplin/blob/dev/packages/server/README.md Link

首先创建一个 .env

shell
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 测试。

shell
docker run --env-file .env -p 22300:22300 joplin/server:latest

嗯,又是一句命令就部署好了,反代好直接进去,默认用户名 admin@localhost 密码 admin

在客户端中设置——同步——选择 Joplin Server(Beta),然后输入地址用户名密码就好了。

测试没问题了之后,我们来搞好 postgresql

shell
sudo apt install postgresql

然后自启动和开启服务

shell
sudo systemctl enable postgresql
sudo systemctl start postgresql

之后改密码和建新用户,新库:

shell
sudo -i -u postgres
psql
sql
ALTER USER postgres PASSWORD '你的强密码';
CREATE ROLE 你的用户名 WITH LOGIN PASSWORD '用户的密码';
CREATE DATABASE 你的数据库名 OWNER 你的用户名;

修改监听端口和验证策略

shell
sudo vim /etc/postgresql/16/main/pg_hba.conf

添加你的 docker 容器网段,例如:

shell
host    all             all             172.17.0.0/24            scram-sha-256
host    all             all             172.18.0.0/24            scram-sha-256
shell
sudo vim /etc/postgresql/16/main/pg_hba.conf
shell
listen_addresses = 'localhost,172.17.0.1'      

之后重启服务就好了

随后改好刚才的 .env,重启容器就好了。

Wikijs:开源的强大协作知识库

Wikijs 是知名的知识库软件,没什么介绍的了,这个用的人很多,权限管理和协作功能十分完善。

先用 psql 建好数据库,这里我们还是 postgresql

我们使用 Docker Compose,创建好 docker-compose.yml

yaml
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

yaml
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 上传公钥

shell
ssh-keygen -t rsa -b 4096 -C [email protected]

然后编辑你的 .ssh/config

shell
Host mygitea
    HostName your_url
    Port 222                    
    User git                      
    IdentityFile ~/.ssh/gitea

其中的 mygitea 是个别名,这样你可以通过 ssh mygiteagit 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)

就这些,如果你恰好手上有这样的服务器,并且想要构建一套开源的文字代码记录平台,不妨试试这些!

分享此文
评论区在赶来的路上...