licensing-cotton/QUICKSTART.md
2025-11-01 15:19:24 +08:00

6.4 KiB
Raw Blame History

快速启动指南

在服务器上运行

1. 上传代码到服务器

# 上传整个项目目录到服务器
scp -r licensing-cotton user@your-server:/path/to/

2. 在服务器上编译

cd /path/to/licensing-cotton
go build -o licensing-cotton cmd/server/main.go

注意:首次启动会自动生成密钥对,无需手动创建 keys/ 目录!

3. 启动服务

方式一:后台运行(简单)

# 创建日志目录
mkdir -p /var/log

# 后台运行
nohup ./licensing-cotton > /var/log/licensing-cotton.out 2>&1 &

# 查看日志
tail -f /var/log/licensing-cotton.out

方式二:使用 systemd推荐用于生产环境

创建服务文件:

sudo vi /etc/systemd/system/licensing-cotton.service

内容:

[Unit]
Description=Licensing Cotton License Management System
After=network.target

[Service]
Type=simple
User=your-username
WorkingDirectory=/path/to/licensing-cotton
ExecStart=/path/to/licensing-cotton/licensing-cotton
Restart=always
RestartSec=5
StandardOutput=append:/var/log/licensing-cotton.out
StandardError=append:/var/log/licensing-cotton.err

[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable licensing-cotton
sudo systemctl start licensing-cotton

# 查看状态
sudo systemctl status licensing-cotton

# 查看日志
sudo journalctl -u licensing-cotton -f

4. 配置防火墙

如果使用了防火墙,需要开放 8895 端口:

# 使用 firewalld
sudo firewall-cmd --permanent --add-port=8895/tcp
sudo firewall-cmd --reload

# 使用 ufw
sudo ufw allow 8895/tcp

访问系统

浏览器访问

打开浏览器访问:

http://your-server-ip:8895

登录

默认管理员账号:

  • 用户名admin
  • 密码admin123

⚠️ 重要:首次登录后请修改密码!

基本使用流程

1. 首次配置 - 开启自动续期

登录后:

  1. 点击 "系统设置" 标签
  2. 开启 "自动续期所有设备" 开关
  3. 点击刷新确认状态

2. 创建设备

  1. 点击 "设备管理" 标签
  2. 在"创建/更新设备"表单中:
    • 输入设备 ID例如dev-001
    • 选择到期时间默认为1年后
    • 点击 "保存设备"
  3. 在设备列表中确认设备已创建

3. 签发 License

  1. 点击 "签发License" 标签
  2. 输入设备 ID
  3. 点击 "签发License"
  4. 复制返回的完整 License JSON包含签名

4. 续期请求审批(如果关闭了自动续期)

  1. 点击 "续期审批" 标签
  2. 查看待审批的续期请求
  3. 点击 "批准""拒绝"

常用操作

查看服务状态

# 如果使用 systemd
sudo systemctl status licensing-cotton

# 如果使用 nohup
ps aux | grep licensing-cotton

停止服务

# systemd
sudo systemctl stop licensing-cotton

# nohup
pkill licensing-cotton

重启服务

sudo systemctl restart licensing-cotton

查看日志

# systemd 日志
sudo journalctl -u licensing-cotton -f

# 或者查看输出文件
tail -f /var/log/licensing-cotton.out

数据库位置

数据库文件位于项目目录:

/path/to/licensing-cotton/mydb.db

定期备份此文件!

密钥位置

密钥文件位于项目目录:

/path/to/licensing-cotton/keys/
├── licensing-key        # 私钥(加密,权限 600
└── licensing-key.pub    # 公钥(权限 644

⚠️ 非常重要:请备份整个 keys/ 目录!丢失私钥将无法签发新 License

# 备份密钥
tar -czf keys-backup-$(date +%Y%m%d).tar.gz keys/

故障排查

服务无法启动

  1. 检查端口是否被占用:
netstat -tlnp | grep 8895
lsof -i :8895
  1. 检查日志文件查看错误信息

  2. 检查文件权限:

chmod +x licensing-cotton

前端无法访问

  1. 检查服务是否运行
  2. 检查防火墙设置
  3. 检查云服务器安全组规则(阿里云、腾讯云等)

数据库错误

删除并重建数据库:

cd /path/to/licensing-cotton
rm mydb.db
# 重启服务,会自动重新创建数据库

密钥错误

如果遇到密钥相关错误,可以重新生成(注意:这会丢失所有已签发的 License

cd /path/to/licensing-cotton
rm -rf keys/
# 重启服务,会自动重新生成密钥对

⚠️ 警告:删除密钥后,之前签发的所有 License 将无法验证!

安全建议

  1. 修改默认密码:首次登录后立即创建新管理员账号,删除或修改默认 admin 账号
  2. 使用 HTTPS:生产环境建议配置 Nginx 反向代理并使用 HTTPS
  3. 定期备份:备份 mydb.db 数据库文件和 keys/ 密钥目录
  4. 限制访问:使用防火墙限制访问来源 IP
  5. 保护密钥:确保 keys/ 目录权限为 700私钥文件权限为 600

Nginx 反向代理配置(可选)

如果想让服务运行在 80/443 端口并使用 HTTPS

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:8895;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

日志管理

查看实时日志

# 查看当前日志
tail -f logs/licensing-cotton.log

# 查看最近的错误
grep ERROR logs/licensing-cotton.log

# 查看特定设备的日志
grep "dev-001" logs/licensing-cotton.log

日志文件说明

日志会自动轮转和保留:

  • logs/licensing-cotton.log - 当前日志文件
  • logs/licensing-cotton.log.1 - 上次轮转的日志
  • logs/licensing-cotton.log.2-5 - 更早的日志

当日志文件达到 10MB 时自动轮转,保留 5个 历史文件。

日志级别

系统当前使用的日志级别:

  • INFO 及以上系统启动、密钥加载、License 签发等
  • WARN:可恢复的错误
  • ERROR:严重错误
  • FATAL:致命错误(程序终止)

性能监控

查看内存使用

ps aux | grep licensing-cotton

查看磁盘使用

du -sh /path/to/licensing-cotton

支持

如有问题,请查看:

  • README.md - 完整文档
  • 服务器日志文件(logs/licensing-cotton.log
  • Issue Tracker