1. 项目概述
DumbAssets 是一款轻量级的资产跟踪管理系统,特别适合中小团队或个人开发者管理硬件设备、软件授权等数字资产。最近我在帮一个10人左右的游戏工作室部署这套系统时,发现官方文档对本地化部署和外网访问的说明比较简略,于是决定把完整实施过程记录下来。
这个方案的核心价值在于:用最简配置实现安全可靠的外网访问,无需复杂的内网穿透工具。我们选择Docker部署保证环境一致性,再配合路由侠实现外网映射,整个过程从安装到调试完成不超过1小时。下面我会详细拆解每个环节的技术要点和避坑指南。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与Docker部署
2.1 基础环境配置
推荐使用Ubuntu 20.04 LTS作为宿主系统,这个版本对Docker的支持最稳定。如果是Windows环境,建议通过WSL2运行Ubuntu子系统而非直接使用Docker Desktop,后者经常出现虚拟化支持异常的问题(表现为"virtualisation support not detected"错误)。
内存建议至少2GB,磁盘空间10GB以上。如果资产数量超过500项,需要考虑单独挂载数据卷。以下是基础环境检查命令:
bash复制# 检查系统版本
lsb_release -a
# 检查内存和磁盘
free -h && df -h
2.2 Docker安装与优化
使用官方脚本安装Docker CE版本:
bash复制curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
安装后需要配置国内镜像源加速拉取。新建/etc/docker/daemon.json文件:
json复制{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
重启服务使配置生效:
bash复制sudo systemctl restart docker
docker info | grep Mirrors -A 2 # 验证镜像源
注意:如果遇到"docker desktop failed to start"类错误,需检查BIOS中虚拟化支持是否开启(Intel VT-x/AMD-V),Windows系统还需启用Hyper-V和WSL2功能。
2.3 DumbAssets镜像部署
官方提供了预构建的Docker镜像,直接拉取最新版:
bash复制docker pull dumbassets/standalone:latest
启动容器时需要特别注意端口映射和数据持久化。推荐使用docker-compose管理服务,创建docker-compose.yml文件:
yaml复制version: '3'
services:
dumbassets:
image: dumbassets/standalone:latest
container_name: dumbassets
ports:
- "8080:8080"
volumes:
- ./data:/var/lib/dumbassets
restart: unless-stopped
environment:
- DA_ADMIN_EMAIL=admin@yourdomain.com
- DA_ADMIN_PWD=YourSecurePassword123
启动服务:
bash复制docker-compose up -d
docker logs -f dumbassets # 查看实时日志
首次启动约需1-2分钟初始化数据库。当看到"Server started on port 8080"日志时,即可通过http://localhost:8080 访问系统。
3. 外网访问方案实现
3.1 路由侠配置详解
路由侠是一款国产的内网穿透工具,相比frp/ngrok等方案,它的优势在于:
- 提供固定的子域名(无需每次变更地址)
- 免费版支持HTTP/HTTPS协议
- 配置简单,适合非专业人员使用
注册路由侠账号后,在控制台创建隧道:
- 隧道类型:HTTP
- 本地地址:127.0.0.1:8080
- 本地端口:8080(与Docker映射端口一致)
- 域名类型:使用路由侠提供的二级域名
下载对应系统的客户端(Linux选择amd64版本),解压后运行:
bash复制chmod +rx route-xiake-linux-amd64
./route-xiake-linux-amd64 -token=你的令牌
重要提示:如果本地防火墙开启(如ufw),需放行路由侠客户端端口:
bash复制sudo ufw allow 8080/tcp sudo ufw allow 4000/tcp # 路由侠默认通信端口
3.2 安全加固措施
外网暴露服务必须考虑安全性:
- 修改默认管理员密码(首次登录后立即修改)
- 在路由侠控制台开启HTTPS加密
- 配置DumbAssets的IP访问限制(编辑config/production.yml):
yaml复制security:
allowed_ips: ["192.168.1.0/24"] # 仅允许内网段访问管理接口
建议设置Nginx反向代理增加基础防护,安装Nginx后配置/etc/nginx/conf.d/dumbassets.conf:
nginx复制server {
listen 80;
server_name your-subdomain.routexiake.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 基础防护
client_max_body_size 10m;
limit_req zone=one burst=5 nodelay;
}
# 禁止敏感路径访问
location ~* ^/(admin|api|debug) {
deny all;
return 403;
}
}
启用配置前测试语法:
bash复制sudo nginx -t
sudo systemctl reload nginx
4. 系统配置与使用技巧
4.1 初始化设置最佳实践
首次登录后建议按以下顺序配置:
- 【系统设置】→【邮件服务】配置SMTP(用于密码重置和通知)
- 【用户管理】创建各团队成员账号(避免共享管理员账号)
- 【资产分类】建立符合业务逻辑的层级(如:硬件/软件/授权)
- 【自定义字段】添加特有属性(如采购日期、维保期限)
对于游戏工作室这类场景,特别建议:
- 为每台设备添加"最后使用时间"字段
- 设置软件授权到期提醒
- 启用资产变更审计日志
4.2 批量导入技巧
DumbAssets支持CSV导入,但需要注意:
- 表头必须包含"name"字段作为主键
- 日期格式统一为YYYY-MM-DD
- 分类路径用"/"分隔(如"硬件/服务器")
推荐先用少量数据测试导入,确认字段映射正确后再全量导入。遇到编码问题时,先用iconv转换文件编码:
bash复制iconv -f GBK -t UTF-8 legacy_data.csv > import_ready.csv
4.3 定期备份方案
虽然Docker卷已经持久化数据,但仍需额外备份。创建备份脚本/usr/local/bin/backup_dumbassets.sh:
bash复制#!/bin/bash
BACKUP_DIR=/opt/backups/dumbassets
mkdir -p $BACKUP_DIR
docker exec dumbassets pg_dump -U postgres > $BACKUP_DIR/db_$(date +%Y%m%d).sql
tar czf $BACKUP_DIR/full_$(date +%Y%m%d).tar.gz -C /var/lib/docker/volumes/dumbassets_data .
find $BACKUP_DIR -type f -mtime +30 -delete
添加到crontab每周自动运行:
bash复制0 3 * * 1 /usr/local/bin/backup_dumbassets.sh
5. 常见问题排查指南
5.1 容器启动失败排查
现象:docker-compose up后容器立即退出
解决方法:
bash复制# 查看详细日志
docker logs dumbassets
# 常见原因及修复:
# 1. 端口冲突 → 修改docker-compose.yml的端口映射
# 2. 卷权限问题 → sudo chown -R 1000:1000 ./data
# 3. 环境变量未设置 → 检查DA_ADMIN_EMAIL等必填项
5.2 外网访问异常处理
现象:路由侠显示在线但无法访问
排查步骤:
- 本地测试是否正常:
bash复制
curl -v http://localhost:8080/api/health - 检查路由侠客户端日志是否有连接错误
- 测试其他设备在同一内网能否访问(排除浏览器缓存问题)
- 联系路由侠客服确认服务器状态
5.3 性能优化方案
当资产数量超过1万条时可能出现延迟:
- 数据库索引优化:
sql复制CREATE INDEX idx_asset_name ON assets(name); CREATE INDEX idx_asset_category ON assets(category_id); - 调整JVM参数(编辑config/jvm.options):
code复制-Xms512m -Xmx2g -XX:MaxMetaspaceSize=512m - 启用缓存(config/production.yml):
yaml复制cache: enabled: true type: redis host: redis-container port: 6379
6. 扩展应用场景
这套方案不仅适用于资产跟踪,经过简单改造还能用于:
- 企业内部知识库(替换为Wiki.js等镜像)
- 项目管理系统(如Redmine)
- IoT设备监控面板(如Grafana)
关键调整点:
- 更换docker-compose.yml中的镜像名称
- 根据应用需求调整端口映射
- 部分系统需要额外数据库容器(如MySQL for Redmine)
我在实际部署中发现,路由侠对WebSocket协议的支持有限,如果需要实时通信功能(如在线协作编辑),建议改用专业级内网穿透方案或自建frp服务器。不过对于90%的常规Web应用,当前方案已经足够稳定可靠。
