背景:之前不小心把手机的安全中心冻结了,导致加了安全锁的笔记软件麻雀记不能正常使用,然后就在找替代软件,最后综合考虑选择了Obsidian+Gitea的方案
推荐先在C:\Dev\中新建一个目录Obsidian Notes存储所有Obsidian仓库
这里主仓库我就叫ObsidianNote了
Obsidian插件
参考https://www.bilibili.com/video/BV1w6421F7pC
[
"dataview",
"obsidian-excalidraw-plugin",
"obsidian-icon-folder",
"obsidian-style-settings",
"file-explorer-note-count",
"obsidian-git"
]
git插件配置https://www.bilibili.com/video/BV1fZCyBYEuT
停止编写文件1min之后自动向远端提交一次

每次启动的时候都先拉取一下远程仓库

.gitignore
/.obsidian/workspace.json
/.obsidian/workspace-mobile.json
/.obsidian/community-plugins.json补充知识,前面带/表示只忽略当前根目录的,不带表示匹配所有目录的此路径
如果在设置.gitignore之前不小心提交过一次,那么提交过的文件会忽视.gitignore,进行管理,那么需要
移除Git跟踪,但保留本地文件(关键步骤):
在仓库根目录打开终端(命令行),针对每个你想忽略的文件执行:
git rm --cached /.obsidian/community-plugins.json
git commit -m “停止跟踪community-plugins.json本地配置文件”
git push重要:--cached 参数意味着只从Git的跟踪列表里删除,但本地文件原封不动。如果漏了这个参数,会真的删除你的本地文件!
docker搭建gitea
docker-compose简单配置
docker-compose.yml
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1.21.1
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=mysql
- GITEA__database__HOST=db:3306
- GITEA__database__NAME=【自行修改】
- GITEA__database__USER=【自行修改】
- GITEA__database__PASSWD=【自行修改】
# ★★★ 要想仓库ssh里链接不显示ip,添加这些 ↓↓↓ ★★★
- GITEA__server__DOMAIN=git.example.com【自行修改】
- GITEA__server__SSH_DOMAIN=git.example.com【自行修改】
- GITEA__server__ROOT_URL=https://git.example.com/【自行修改】
- GITEA__server__SSH_PORT=2221
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- ./timezone:/etc/timezone:ro
- ./localtime:/etc/localtime:ro
ports:
- "8084:3000"
- "2221:22"
depends_on:
- db
db:
image: mysql:8
restart: always
environment:
- MYSQL_ROOT_PASSWORD=【自行修改】
- MYSQL_USER=【自行修改】
- MYSQL_PASSWORD=【自行修改】
- MYSQL_DATABASE=【自行修改】
networks:
- gitea
volumes:
- ./mysql:/var/lib/mysqldocker-compose更安全的配置方式
.env
# MySQL root用户密码(请改为强密码)
MYSQL_ROOT_PASSWORD=YourStrongRootPassword123!
# Gitea数据库用户密码(请改为强密码)
MYSQL_PASSWORD=YourStrongGiteaPassword456!
# Gitea连接数据库的密码(与上面一致)
GITEA_DATABASE_PASSWORD=YourStrongGiteaPassword456!
# 数据库名和用户名(可以保持不变)
DB_NAME=gitea
DB_USER=gitea最后设置一下文件权限
chmod 600 .envdocker-compose.yml
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1.21.1
container_name: gitea
# ★ 新增这一行
env_file:
- .env
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=mysql
- GITEA__database__HOST=db:3306
# 修改这里,使用环境变量
- GITEA__database__NAME=${DB_NAME}
- GITEA__database__USER=${DB_USER}
- GITEA__database__PASSWD=${GITEA_DATABASE_PASSWORD}
# ★★★ 要想仓库ssh里链接不显示ip,添加这些 ↓↓↓ ★★★
- GITEA__server__DOMAIN=git.example.com【自行修改】
- GITEA__server__SSH_DOMAIN=git.example.com【自行修改】
- GITEA__server__ROOT_URL=https://git.example.com/【自行修改】
- GITEA__server__SSH_PORT=2221
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- ./timezone:/etc/timezone:ro
- ./localtime:/etc/localtime:ro
ports:
- "8084:3000"
- "2221:22"
depends_on:
- db
db:
image: mysql:8
restart: always
environment:
# 修改为使用环境变量
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_DATABASE=${DB_NAME}
networks:
- gitea
volumes:
- ./mysql:/var/lib/mysql注意与解释
.env文件权限设置
对于包含数据库密码等敏感信息的 .env 文件,最安全且标准的权限是 600(即 -rw-------),这意味着只有文件的所有者(Owner)可以进行读取和写入,其他任何用户均无权访问。
这个设置的核心原则是:在保证Docker Compose能正常读取的前提下,权限尽可能最小化。
密码特殊符号注意
设置的密码尽量不要带$ ,不然docker compose 解析时:
MYSQL_PASSWORD=abc$123会被解析成:
abc+ 环境变量${123}
导致错误警告"The "123" variable is not set"
❗解决方法 1(推荐):对 $ 进行转义
在 .env 里写成:
MYSQL_PASSWORD=abc$$123一个 $ → $$
❗解决方法 2:给密码加引号(compose v3 可用)
MYSQL_PASSWORD="abc$$123"env_file在yml中位置
报错:additional properties 'env_file' not allowed
原因:
把 env_file: 写在 version: "3" 的同级位置,但这是不允许的。
env_file 只能写在 service 下(per-service),不能全局使用。
下面写法是错误结构:
version: "3"
# ❌错误:env_file 在这里是非法的
env_file:
- .env✅ 正确写法应该是:service 下使用 env_file
例如:
services:
server:
env_file:
- .env
或者在 db 下也加:
db:
env_file:
- .envNPM的Advanced配置
# 在NPM的Advanced选项卡中添加
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;它的作用是:
proxy_set_header Host $host;:确保 Gitea 接收到的是原始域名(如git.example.com),而不是 NPM 转发时使用的内部主机名或 IP。这样 Gitea 才能生成正确的仓库克隆 URL。proxy_set_header X-Forwarded-Proto $scheme;:告诉 Gitea 用户最初访问使用的是http还是https协议。这能保证 Gitea 在生成网页链接和重定向时,都使用正确的协议(尤其是 HTTPS)。
修改现有 MySQL 密码(重要步骤)
如果docker-compose.yml中使用的账号密码需要修改,但是由于已经有数据了,不能直接删除容器,需要手动修改密码:
步骤1:获取容器ID
docker ps找到MySQL容器的ID或名称(应该是 gitea_db 或类似名称)。
步骤2:进入MySQL容器修改密码
# 进入MySQL命令行(使用旧密码 gitea)
docker exec -it gitea-db-1 mysql -u root -p输入旧密码
步骤3:执行SQL修改密码
在MySQL命令行中依次执行:
-- 修改root密码(使用.env文件中的新密码)
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的强密码_123';
-- 修改gitea用户密码(使用.env文件中的新密码)
ALTER USER 'gitea'@'%' IDENTIFIED BY '另一个强密码_456';
-- 刷新权限使修改生效
FLUSH PRIVILEGES;
-- 退出
exit📌 补充一个非常实用的小知识(以后不会踩坑)
MySQL 用户匹配规则是优先匹配最具体的 host:
'root'@'localhost''root'@'127.0.0.1''root'@'%'
当你用:
mysql -u root -p它默认尝试 socket 连接 → host = localhost
所以 MySQL 使用的其实是:
root@localhost而不是 root@% 或 root@127.0.0.1。
⭐ 想避免以后类似问题,你可以统一 root 用户权限:
你可以让 root 对所有 host 都用同一个密码:
ALTER USER 'root'@'%' IDENTIFIED BY 'xxxx';
ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxx';
ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY 'xxxx';
FLUSH PRIVILEGES;这样无论你从哪里登录都不会出问题。
步骤4:重启服务
# 停止服务
docker-compose down
# 重新启动(使用新的.env配置)
docker-compose up -d4. 验证是否成功
# 查看日志,确认无错误
docker-compose logs -f
# 测试Gitea是否能正常访问
curl http://localhost:8084.env文件的查看
.env文件创建后属于隐藏文件,所以查看需要一些步骤
ssh中,Xshell
# 查看所有文件,包含隐藏文件
ls -a
# 显示内容(不包括隐藏文件)权限类型、所有者、文件大小等关键信息
ls -l [文件名]
# 显示内容包括隐藏文件、权限类型、所有者、文件大小等关键信息
ls -al
# 同上,条件分开写
la -a -lXftp中
在标准按钮中找到齿轮图标(选项),

勾选显示隐藏的文件 ,确定后就可以看到隐藏文件了

手机端
手机端不推荐使用git插件进行同步,git插件本身也这么说的
这里使用了第三方软件Git Sync
obsidian + git sync + gitea实现
受下面文章启发https://www.cnblogs.com/Pkernel/p/19114666
主要mgit确实挺久没维护了
谷歌商城:https://play.google.com/store/apps/details?id=com.viscouspot.gitsync
GitHub仓库:https://github.com/ViscousPot/GitSync
推荐先在Documents中新建一个目录Obsidian Notes存储所有Obsidian仓库
这里主仓库我就叫ObsidianNote了
在pc端配置好插件等等内容后,push到远程私有仓库
然后在Git Sync中配置远程仓库信息
先选择认证
选择https,Git Sync好像不支持ssh来着?
去gitea申请一个令牌
点击右上角头像(个人信息与配置)
点击设置
点击应用
在
管理Access Token中生成一个令牌,给个repository权限
填写信息并拉取远端仓库
然后在手机端填写
提交昵称与 刚刚获取到的令牌接着点击设置,完善
提交邮箱然后设置目录
目录为空文件夹或没有被git管理,需要点击克隆
输入要克隆的仓库https的git地址,选择要克隆到的文件夹
点击克隆就可以拉下来远端仓库,私有仓库的克隆通常比较慢,耐心等待
开启插件
因为我们手机端不需要开启git插件,但电脑端需要,所以为了避免冲突,就在.gitignore中忽视了管理插件启用停用的配置文件/.obsidian/community-plugins.json ,插件会同步在手机端,但默认是关闭的,我们需要手动打开除了git插件以外的插件。
设置左边的立即同步 建议 换成手动同步,每次手动拉取远程仓库,定时同步也尽量不要用吧
尽量避免手机与电脑端同时编辑,以免冲突,冲突的时候需要手动处理
最后打开Obsidian 选择Open folder as vault,选择具体的仓库目录,例如ObsidianNote,不要选择Obsidian Notes
添加错了,就点击上面,点击管理仓库,点击要删除的仓库,选择Forget vault ,这个只是从列表中删除,不删除源文件
参考
使用 Docker 安装 | Gitea Documentation
Obsidia Git同步方法(偏安卓) - Pkernel - 博客园
Obsidian邪修用法,免费云同步,AI,手机端,进阶技巧_哔哩哔哩_bilibili