1. 环境准备从零搭建云笔记基础平台在开始部署Leanote云笔记之前我们需要先准备好运行环境。我推荐使用腾讯云轻量应用服务器2核2G3M配置作为基础平台操作系统选择CentOS 7.x版本。这个配置对于个人云笔记服务来说完全够用而且性价比很高。我自己就用了三年同款配置稳定运行着包含5000笔记的实例。系统基础配置建议在服务器初始化时就完成更新系统软件包yum update -y yum upgrade -y安装常用工具包yum install -y vim wget curl net-tools关闭不必要的防火墙规则后续会用宝塔面板统一管理systemctl stop firewalld systemctl disable firewalld特别提醒如果你使用的是其他云服务商需要注意默认安全组规则可能会阻止外部访问。我在阿里云上第一次部署时就遇到过这个问题明明服务启动了却无法访问排查了半天才发现是安全组没放行端口。建议提前在云服务商控制台放行以下端口8888宝塔面板默认端口9000Leanote默认端口27017MongoDB默认端口内存管理也很关键MongoDB比较吃内存。2G内存的服务器建议配置1GB的swap空间避免内存不足导致服务崩溃。创建swap的命令如下dd if/dev/zero of/swapfile bs1M count1024 chmod 600 /swapfile mkswap /swapfile swapon /swapfile echo /swapfile swap swap defaults 0 0 /etc/fstab2. 宝塔面板安装与配置2.1 一键安装宝塔面板宝塔面板绝对是Linux运维小白的救星它把复杂的命令行操作变成了可视化的点击操作。安装过程非常简单只需要一行命令yum install -y wget wget -O install.sh https://download.bt.cn/install/install_6.0.sh sh install.sh ed8484bec执行后会提示确认安装输入y回车即可。安装过程大约需要3-5分钟取决于你的网络速度。我第一次安装时因为服务器在国外下载速度很慢后来发现加上--no-check-certificate参数可以跳过证书验证加速下载。安装完成后会显示面板的访问地址、用户名和密码务必把这些信息保存好。如果忘记密码也不用慌SSH连接服务器后执行bt default就能重新显示默认信息。2.2 安全加固宝塔面板默认安装的宝塔面板存在一些安全隐患建议立即进行以下加固操作修改默认的8888端口在面板设置→面板端口中修改为其他端口如5888开启BasicAuth认证增加一层HTTP基础认证绑定访问域名限制只能通过特定域名访问设置IP白名单只允许自己的IP访问面板我吃过亏有一次服务器被暴力破解尝试登录宝塔面板虽然没成功但产生了大量垃圾日志。后来加了fail2ban防护就好多了配置方法yum install -y fail2ban systemctl enable fail2ban systemctl start fail2ban然后在/etc/fail2ban/jail.local中添加[bt-panel] enabled true filter bt-panel action iptables[namebt-panel, port8888, protocoltcp] logpath /www/server/panel/logs/request.log maxretry 5 findtime 600 bantime 36002.3 开放必要端口在宝塔面板的安全页面需要放行以下端口9000Leanote服务端口27017MongoDB端口你修改后的面板端口注意如果在云服务商那里有安全组/防火墙设置需要两边都放行才能生效。我就犯过这个错误只在宝塔放了端口但忘记在腾讯云控制台设置结果死活连不上。3. MongoDB数据库部署3.1 安装MongoDB 4.0虽然官方仓库有更新的版本但经过测试MongoDB 4.0与Leanote的兼容性最好。先配置yum源vim /etc/yum.repos.d/mongodb-org-4.0.repo添加以下内容[mongodb-org-4.0] nameMongoDB Repository baseurlhttps://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/ gpgcheck0 enabled1然后安装MongoDByum makecache yum -y install mongodb-org3.2 关键配置调整编辑配置文件/etc/mongod.conf有几个关键修改点将bindIp: 127.0.0.1改为bindIp: 0.0.0.0注意冒号后有个空格在#security:下方添加security: authorization: enabled建议修改默认端口非必须port: 27017改为其他端口启动服务并设置开机自启systemctl start mongod systemctl enable mongod3.3 创建数据库用户Leanote需要专用的数据库用户先连接MongoDBmongo然后执行以下命令创建管理员账号密码请自行修改use admin db.createUser({ user: leanote, pwd: StrongPassword123, roles: [{role: readWrite, db: leanote}] })测试连接是否正常mongo -u leanote -p StrongPassword123 --authenticationDatabase admin4. Leanote服务部署4.1 下载与解压推荐使用2.6.1版本稳定性经过验证wget https://nchc.dl.sourceforge.net/project/leanote-bin/2.6.1/leanote-linux-amd64-v2.6.1.bin.tar.gz tar -zxvf leanote-linux-amd64-v2.6.1.bin.tar.gz -C /opt我习惯把这类自建服务放在/opt目录下方便统一管理。解压后会得到一个leanote目录里面包含以下重要子目录bin/可执行文件conf/配置文件public/静态资源mongodb_backup/初始数据4.2 配置文件修改编辑/opt/leanote/conf/app.conf重点关注这些配置项app.secret替换为随机字符串 # 用于加密会话 http.port9000 # 服务端口 site.urlhttp://你的域名或IP:9000 # 必须设置正确否则附件无法上传 db.host127.0.0.1 # MongoDB地址 db.port27017 # MongoDB端口 db.dbnameleanote # 数据库名 db.usernameleanote # 数据库用户 db.passwordStrongPassword123 # 数据库密码特别提醒app.secret一定要修改我就因为偷懒用了默认值结果被扫描工具发现了漏洞。可以用这个命令生成随机字符串cat /dev/urandom | tr -dc a-zA-Z0-9 | fold -w 32 | head -n 14.3 初始化数据库导入初始数据注意路径要正确mongorestore -h localhost -d leanote --dir /opt/leanote/mongodb_backup/leanote_install_data/ --username leanote --password StrongPassword123 --authenticationDatabase admin检查导入是否成功mongo -u leanote -p StrongPassword123 --authenticationDatabase admin use leanote db.notes.count()如果返回数字大于0说明导入成功。5. 服务启动与优化5.1 启动Leanote服务最简单的启动方式nohup bash /opt/leanote/bin/run.sh /opt/leanote/run.log 21 但更推荐用systemd管理创建/etc/systemd/system/leanote.service[Unit] DescriptionLeanote Service Afternetwork.target mongod.service [Service] Typesimple Userroot WorkingDirectory/opt/leanote ExecStart/bin/bash /opt/leanote/bin/run.sh Restartalways RestartSec10 [Install] WantedBymulti-user.target然后启用服务systemctl daemon-reload systemctl start leanote systemctl enable leanote5.2 Nginx反向代理直接用IP:端口访问不够优雅建议配置Nginx反向代理。在宝塔面板创建网站后修改Nginx配置server { listen 80; server_name note.yourdomain.com; location / { proxy_pass http://127.0.0.1:9000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }然后申请SSL证书开启HTTPS既安全又专业。宝塔面板可以一键申请Lets Encrypt证书。5.3 定期备份策略数据无价建议设置自动备份。创建备份脚本/opt/backup_leanote.sh#!/bin/bash DATE$(date %Y%m%d) BACKUP_DIR/opt/leanote_backup mkdir -p $BACKUP_DIR/$DATE # 备份MongoDB mongodump -h 127.0.0.1 --port 27017 -u leanote -p StrongPassword123 --authenticationDatabase admin -d leanote -o $BACKUP_DIR/$DATE # 备份配置文件 cp /opt/leanote/conf/app.conf $BACKUP_DIR/$DATE/ # 打包压缩 tar -zcf $BACKUP_DIR/leanote_$DATE.tar.gz $BACKUP_DIR/$DATE # 删除7天前的备份 find $BACKUP_DIR -name leanote_*.tar.gz -mtime 7 -exec rm -f {} \;添加定时任务每天凌晨3点执行chmod x /opt/backup_leanote.sh (crontab -l ; echo 0 3 * * * /opt/backup_leanote.sh) | crontab -6. 常见问题排查6.1 服务无法启动查看日志是最直接的排查方式journalctl -u leanote -n 50 --no-pager # 对于systemd管理的服务 cat /opt/leanote/run.log # 对于直接启动的服务常见错误及解决方案address already in use端口被占用修改app.conf中的http.portfailed to connect to MongoDB检查MongoDB服务状态和连接信息permission denied确保leanote目录有读写权限6.2 忘记管理员密码如果忘记admin密码默认admin/abc123可以通过MongoDB重置mongo -u leanote -p StrongPassword123 --authenticationDatabase admin use leanote db.users.update({Username: admin}, {$set: {Password: 202cb962ac59075b964b07152d234b70}}) # 这是abc123的MD5值6.3 性能优化建议当笔记数量增多后可以采取以下优化措施增加MongoDB索引db.notes.createIndex({UserId: 1}) db.notebooks.createIndex({UserId: 1})修改Leanote配置session.gclifetime3600 http.timeout30升级服务器配置特别是内存容量我在实际使用中发现当笔记超过1万条时2G内存的服务器会开始出现响应延迟。这时候要么升级配置要么可以考虑启用Redis缓存需要修改Leanote源码。