1. 为什么选择Trilium作为云笔记解决方案
在众多笔记软件中,Trilium以其独特的架构设计脱颖而出。作为一款开源的知识管理工具,它采用本地优先+可选同步的设计理念,数据以SQLite格式存储,完全掌握在用户手中。我选择在云服务器部署Trilium主要基于以下考量:
首先,Trilium支持完整的Markdown语法和富文本编辑,同时具备强大的笔记关系图谱功能。相比Notion等SaaS产品,它没有供应商锁定风险;对比Joplin等同类工具,其文档树结构和脚本扩展能力更为突出。实测在2核4G配置的云服务器上,可流畅支持10人左右的协同编辑。
其次,云服务器部署解决了多设备同步的痛点。通过将服务端部署在云端,任何设备只需浏览器即可访问,避免了本地部署的端口映射烦恼。我在阿里云轻量应用服务器上的实测显示,首次加载时间控制在1.5秒内(无CDN情况下),完全满足移动办公需求。
重要提示:选择云服务器时建议优先考虑国内厂商(如阿里云、华为云)的轻量应用服务器,不仅备案流程简单,而且带宽性价比更高。避免选择需要复杂网络配置的境外服务器。
2. 云服务器环境准备与基础配置
2.1 服务器选购建议
根据Trilium的官方文档和实际负载测试,推荐以下配置方案:
- 个人使用:1核2G内存,40GB SSD存储,带宽3-5Mbps(年费约300元)
- 团队使用(3-5人):2核4G内存,80GB SSD存储,带宽5Mbps(年费约800元)
- 企业级部署:4核8G内存+负载均衡,建议选择云数据库服务
我个人的阿里云实测数据如下表:
| 并发用户数 | CPU负载 | 内存占用 | 响应时间 |
|---|---|---|---|
| 1 | 12% | 560MB | 0.8s |
| 5 | 38% | 1.2GB | 1.3s |
| 10 | 72% | 2.4GB | 2.1s |
2.2 系统环境初始化
以Ubuntu 20.04为例,执行以下初始化操作:
bash复制# 更新软件源
sudo apt update && sudo apt upgrade -y
# 安装基础依赖
sudo apt install -y curl git python3-pip nginx
# 配置防火墙(仅开放必要端口)
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
这里有个容易踩坑的地方:部分云厂商(如华为云)需要同时在控制台和安全组中开放端口。我曾遇到过UFW配置正确但仍无法访问的情况,最终发现是控制台安全组未放行。
3. Trilium服务端详细部署流程
3.1 数据库准备与优化
虽然Trilium默认使用SQLite,但在生产环境建议配置MySQL/MariaDB:
bash复制# 安装MariaDB
sudo apt install -y mariadb-server
# 安全初始化
sudo mysql_secure_installation
# 创建专用数据库
mysql -u root -p
CREATE DATABASE trilium CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'trilium'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON trilium.* TO 'trilium'@'localhost';
FLUSH PRIVILEGES;
数据库配置建议:
- 字符集必须使用utf8mb4以支持emoji
- 修改InnoDB缓冲池大小(建议分配物理内存的50-60%)
- 定期备份策略可通过crontab实现
3.2 安装Node.js运行环境
Trilium需要Node.js 16+环境,推荐通过NVM安装:
bash复制curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
source ~/.bashrc
nvm install 16
nvm use 16
验证安装:
bash复制node -v # 应显示v16.x.x
npm -v # 应显示8.x.x
3.3 下载与配置Trilium
获取最新稳定版(当前为0.58.3):
bash复制wget https://github.com/zadam/trilium/releases/download/v0.58.3/trilium-linux-x64-0.58.3.tar.xz
tar xvf trilium-linux-x64-0.58.3.tar.xz
cd trilium-linux-x64
创建systemd服务(/etc/systemd/system/trilium.service):
code复制[Unit]
Description=Trilium Notes Service
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/path/to/trilium
ExecStart=/usr/bin/node /path/to/trilium/src/www
Environment=TRILIUM_DATA_DIR=/var/lib/trilium
Restart=always
[Install]
WantedBy=multi-user.target
启动服务:
bash复制sudo systemctl daemon-reload
sudo systemctl start trilium
sudo systemctl enable trilium
4. Nginx反向代理与HTTPS配置
4.1 基础代理配置
创建Nginx站点配置(/etc/nginx/sites-available/trilium):
nginx复制server {
listen 80;
server_name notes.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
启用配置:
bash复制sudo ln -s /etc/nginx/sites-available/trilium /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
4.2 SSL证书部署
使用Certbot获取Let's Encrypt证书:
bash复制sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d notes.yourdomain.com
配置自动续期:
bash复制sudo crontab -e
# 添加以下内容
0 3 * * * /usr/bin/certbot renew --quiet
5. 安全加固与性能优化
5.1 基础安全措施
- 修改默认监听端口(编辑config.ini):
ini复制port = 2389 # 改为非标准端口
- 启用访问密码(首次访问时设置)
- 配置定期备份:
bash复制# 每日凌晨备份
0 2 * * * tar -czf /backups/trilium-$(date +\%Y\%m\%d).tar.gz /var/lib/trilium
5.2 性能调优技巧
- 调整Node.js内存限制(在systemd服务文件中添加):
code复制Environment=NODE_OPTIONS=--max-old-space-size=2048
- 启用Gzip压缩(Nginx配置):
nginx复制gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
- 客户端缓存配置:
nginx复制location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
6. 常见问题排查指南
6.1 服务启动失败排查
- 检查端口冲突:
bash复制sudo netstat -tulnp | grep 8080
- 查看详细日志:
bash复制journalctl -u trilium -f
- 数据库连接问题:
bash复制# 测试数据库连接
mysql -u trilium -p -h 127.0.0.1 -e "SHOW DATABASES;"
6.2 性能问题处理
当出现卡顿时,可以:
- 检查内存使用:
bash复制free -h
top -o %MEM
- 优化SQLite数据库(如果使用):
bash复制sqlite3 ~/trilium-data/document.db "VACUUM; ANALYZE;"
- 限制历史版本数量(在设置中调整)
我在实际运维中发现,Trilium在长时间运行后可能出现内存泄漏,建议配置每日重启:
bash复制# 每天凌晨3点重启
0 3 * * * systemctl restart trilium
