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

grtsinry43
5/4/2025(更新于 5/4/2025
60 views
预计阅读时长 15 分钟

AI Summary

Powered By DeepSeek-R1
|

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

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

传送门

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

shell
1sudo apt update
2sudo apt install ca-certificates curl
3sudo install -m 0755 -d /etc/apt/keyrings
4sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
5sudo chmod a+r /etc/apt/keyrings/docker.asc
6
7echo \
8  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
9  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
10  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装好了首先启动服务:

shell
1sudo systemctl enable docker
2sudo systemctl start docker

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

shell
1sudo usermod -aG docker <username>

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

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

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

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

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

它的部署极其简单:

shell
1docker 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

首先创建一个 .env

shell
1APP_BASE_URL = https://example.com/joplin
2APP_PORT = 22300
3 
4DB_CLIENT = pg
5POSTGRES_PASSWORD = joplin
6POSTGRES_DATABASE = joplin
7POSTGRES_USER = joplin
8POSTGRES_PORT = 5432
9POSTGRES_HOST = localhost

先改一下 APP_BASE_URL 就好,其他先注释掉,我们先用内置的 sqlite 测试。

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

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

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

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

shell
1sudo apt install postgresql

然后自启动和开启服务

shell
1sudo systemctl enable postgresql
2sudo systemctl start postgresql

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

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

修改监听端口和验证策略

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

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

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

之后重启服务就好了

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

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

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

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

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

yaml
1services:
2  wiki:
3    image: ghcr.io/requarks/wiki:2
4    environment:
5      DB_TYPE: postgres
6      DB_HOST: 172.17.0.1 #具体看你docker0ip
7      DB_PORT: 5432
8      DB_USER: username
9      DB_PASS: password
10      DB_NAME: wiki

然后初始化就 ok 了。

Gitea:轻量的自建 git 代码库解决方案

gitea 是一个类似 gitlab 的自建 git 代码库,但不同于 gitlab 的高占用和高硬件要求,gitea 使用 go 语言开发,极其轻量,可以在性能很低的服务器上流畅运行。

部署依然还是 Docker Compose

yaml
1networks:
2  gitea:
3    external: false
4
5services:
6  server:
7    image: docker.gitea.com/gitea:1.23.7
8    container_name: gitea
9    environment:
10      - USER_UID=1000

跑起来可以设置下邮件服务,网站基本信息,然后咱们的重要任务到了 SSH

这里我将 22 映射到了外部的 222 端口,并且全程使用 git over ssh

在你使用的主力机上生成 ssh 密钥并在 gitea 上传公钥

shell
1ssh-keygen -t rsa -b 4096 -C name@example.com

然后编辑你的 .ssh/config

shell
1Host mygitea
2    HostName your_url
3    Port 222                    
4    User git                      
5    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)

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

相关推荐

登山节微信网页实现思路简述 | 实现定位和数据处理

去年 10 月份左右,学校组织活动需要,要求 7 天内实现一个登山节打卡用微信网页,包含定位打卡,排...

grtsinry43
3/23/2025
240
1
3
使用 BeautifulSoup 配合请求库实现简单的爬虫程序

使用 BeautifulSoup 配合请求库实现简单的爬虫程序

事情起源于课内的课程实验作业...因为要求要用爬虫,~~不必说课内讲的一言难尽,更不必说就算讲了我也...

grtsinry43
1/7/2025
181
0
1
快速搭建专属域名邮箱服务,简单整合邮箱消息推送功能至 Spring Boot 应用程序

快速搭建专属域名邮箱服务,简单整合邮箱消息推送功能至 Spring Boot 应用程序

作为即时通信的重要方式,邮件在互联网互动中起到举足轻重的作用,而搭建邮件推送服务不仅可以做到实时的消...

grtsinry43
1/2/2025
334
2
0
使用 pf4j-spring 实现插件注入和 api 接口动态注册 | 插件系统构建(上)

使用 pf4j-spring 实现插件注入和 api 接口动态注册 | 插件系统构建(上)

哪个男孩不想拥有一个自己的插件系统?(x)话说回来,这个我已经计划好久了,不过一直在学其他的东西,刚...

grtsinry43
1/26/2025
655
0
6
现代安卓开发之 Jetpack Compose、Xposed Hook 与 Kotlin Multiplatform

现代安卓开发之 Jetpack Compose、Xposed Hook 与 Kotlin Multiplatform

emm上来堆三个技术名词太劝退,每个部分开始之前我都会写一段简短的介绍,用很通俗的语言讲解下这是个什...

grtsinry43
4/23/2025
252
0
2
COMMENT 7324717155344322560

发表评论

来这里畅所欲言吧!
支持 Markdown 语法 0 / 3000

网站运行时间

0
0
0
0

在风雨飘摇之中

感谢陪伴与支持

愿我们不负热爱,继续前行