在知识爆炸的时代,思维导图已成为现代人整理思路、规划项目的必备工具。作为一名长期使用思维导图进行技术方案设计的开发者,我一直在寻找一款能够兼顾隐私安全、部署灵活且功能完善的开源解决方案。TeamMapper作为一款新兴的开源思维导图工具,以其简洁的界面和丰富的协作功能吸引了我的注意。而华为openEuler作为国产操作系统的代表,其安全稳定的特性正好满足了企业对数据自主可控的需求。
这个部署方案特别适合以下场景:
首先需要准备一台满足以下最低配置的服务器:
openEuler 20.03 LTS的安装过程与常见Linux发行版类似,但有几个关键点需要注意:
bash复制sudo dnf update -y
sudo systemctl disable firewalld
sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
注意:生产环境不建议完全关闭防火墙,应根据实际需求配置放行规则
TeamMapper基于Node.js开发,需要以下基础组件:
bash复制# 安装Node.js 16.x
sudo dnf module install nodejs:16 -y
# 安装MySQL 8.0
sudo dnf install mysql-server -y
sudo systemctl start mysqld
sudo systemctl enable mysqld
# 安装Git和构建工具
sudo dnf install git gcc-c++ make -y
数据库初始化配置:
bash复制# 安全初始化MySQL
sudo mysql_secure_installation
# 创建数据库和用户
mysql -u root -p
CREATE DATABASE teammapper CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'teammapper'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON teammapper.* TO 'teammapper'@'localhost';
FLUSH PRIVILEGES;
推荐使用Git克隆最新稳定版代码:
bash复制git clone -b v1.2.0 https://github.com/teammapper/teammapper.git
cd teammapper
# 安装依赖
npm install --registry=https://registry.npmmirror.com
# 构建前端资源
npm run build
构建过程中常见问题处理:
bash复制npm rebuild node-sass
bash复制sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
修改配置文件config/production.json:
json复制{
"db": {
"host": "localhost",
"port": 3306,
"database": "teammapper",
"username": "teammapper",
"password": "StrongPassword123!"
},
"server": {
"host": "0.0.0.0",
"port": 3000,
"maxUploadSize": "50MB"
},
"jwt": {
"secret": "生成一个32位随机字符串",
"expiresIn": "7d"
}
}
关键参数说明:
openssl rand -base64 32生成高强度密钥创建systemd服务文件/etc/systemd/system/teammapper.service:
ini复制[Unit]
Description=TeamMapper Service
After=network.target mysqld.service
[Service]
Type=simple
User=node
WorkingDirectory=/opt/teammapper
ExecStart=/usr/bin/node /opt/teammapper/server.js
Restart=always
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
启用并启动服务:
bash复制sudo systemctl daemon-reload
sudo systemctl enable teammapper
sudo systemctl start teammapper
安装Nginx:
bash复制sudo dnf install nginx -y
配置/etc/nginx/conf.d/teammapper.conf:
nginx复制server {
listen 80;
server_name mind.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
# 静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 1y;
add_header Cache-Control "public";
}
}
启用HTTPS(使用Let's Encrypt):
bash复制sudo dnf install certbot python3-certbot-nginx -y
sudo certbot --nginx -d mind.yourdomain.com
数据库优化:
sql复制ALTER TABLE documents ADD INDEX idx_user_id (user_id);
ALTER TABLE revisions ADD INDEX idx_document_id (document_id);
Node.js内存限制调整:
bash复制# 在service文件中修改
Environment=NODE_OPTIONS=--max-old-space-size=4096
启用Redis缓存会话:
bash复制sudo dnf install redis -y
npm install connect-redis express-session
然后在配置文件中添加:
json复制"session": {
"store": "redis",
"host": "127.0.0.1",
"port": 6379
}
建议的备份脚本/usr/local/bin/backup_teammapper.sh:
bash复制#!/bin/bash
BACKUP_DIR="/backups/teammapper"
DATE=$(date +%Y%m%d)
# 备份数据库
mysqldump -u teammapper -p'StrongPassword123!' teammapper > $BACKUP_DIR/teammapper_db_$DATE.sql
# 备份上传文件
tar -czf $BACKUP_DIR/teammapper_uploads_$DATE.tar.gz /opt/teammapper/public/uploads
# 保留最近7天备份
find $BACKUP_DIR -type f -mtime +7 -exec rm {} \;
添加到crontab:
bash复制0 2 * * * /usr/local/bin/backup_teammapper.sh
服务无法启动:
sudo ss -tulnp | grep 3000journalctl -u teammapper -n 50 --no-pager上传文件失败:
chown -R node:node /opt/teammapper/public/uploads性能问题排查:
bash复制# 查看Node.js进程状态
top -p $(pgrep -d',' node)
# MySQL慢查询分析
sudo mysqldumpslow -s t /var/log/mysql/mysql-slow.log
定期更新组件:
bash复制sudo dnf update -y
cd /opt/teammapper && npm update
配置适当的防火墙规则:
bash复制sudo dnf install firewalld -y
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
安全审计建议:
/var/log/nginx/access.log中的异常请求npm audit检查依赖漏洞这套部署方案在我们团队已经稳定运行8个月,支撑了超过200名员工的日常思维导图使用需求。最大的收获是数据完全自主可控,可以根据业务需求灵活定制功能。特别是在与内部OA系统集成时,开源方案的优势体现得淋漓尽致。