Countly统计平台部署踩坑记录
项目需要一个自托管的统计平台,选了Countly。部署过程踩了不少坑,记录一下。
环境准备
Countly依赖MongoDB和Node.js,对系统配置有一定要求。
服务器配置建议:
| 规模 |
CPU |
内存 |
磁盘 |
| 测试环境 |
2核 |
4GB |
50GB |
| 中等流量 |
4核 |
8GB |
200GB SSD |
| 高流量 |
8核+ |
16GB+ |
1TB+ SSD |
坑1:SELinux冲突
Countly和SELinux有冲突,会导致服务启动失败。建议直接关闭:
1 2 3 4 5
| sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
|
MongoDB安装
Countly需要MongoDB 6.0,安装过程还算顺利。
1 2 3 4 5 6 7 8 9 10 11 12
| sudo tee /etc/yum.repos.d/mongodb-org-6.0.repo <<EOF [mongodb-org-6.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/6.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://pgp.mongodb.com/server-6.0.asc EOF
sudo yum install -y mongodb-org
|
数据目录配置:
1 2 3 4 5
| sudo mkdir -p /data/db/mongo sudo mkdir -p /data/log/mongodb sudo chown -R mongod:mongod /data/db/ sudo chown -R mongod:mongod /data/log/
|
配置文件 /etc/mongod.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| storage: dbPath: /data/db/mongo journal: enabled: true wiredTiger: engineConfig: cacheSizeGB: 2
systemLog: destination: file logAppend: true path: /data/log/mongodb/mongod.log
net: port: 27017 bindIp: 127.0.0.1
|
启动并设置开机自启:
1 2
| sudo systemctl start mongod sudo systemctl enable mongod
|
Node.js安装
Countly需要Node.js 18.x:
1 2 3 4 5 6
| curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash - sudo yum install -y nodejs
node --version npm --version
|
坑2:npm镜像慢
国内访问npm官方源很慢,建议换淘宝镜像:
1
| npm config set registry https://registry.npmmirror.com
|
Countly安装
下载源码
1 2 3 4 5 6 7 8
| sudo mkdir -p /data/software cd /data/software
sudo wget https://github.com/Countly/countly-server/releases/download/23.11.15/countly-server-23.11.15.zip sudo unzip countly-server-23.11.15.zip sudo mv countly-server-23.11.15 countly cd countly
|
修改安装脚本
坑3:Node.js重复安装
Countly安装脚本会尝试安装Node.js,但我们已经装过了,需要跳过:
1
| sudo vim bin/countly.install_rhel.sh
|
注释掉Node.js安装部分:
运行安装
1 2 3
| sudo su - cd /data/software/countly/bin bash countly.install.sh
|
安装过程会自动:
- 检查系统依赖
- 安装Nginx
- 安装Node.js依赖
- 配置Countly服务
- 初始化数据库
npm安装比较耗时,耐心等待。
坑4:argon2报错
安装过程中可能会遇到这个错误:
1
| symbol lookup error: argon2.node: undefined symbol: argon2_ctx
|
解决方案:
1 2 3 4 5 6 7 8 9
| cd /data/software/countly sudo rm -rf node_modules
sudo vim package.json
sudo npm install countly restart
|
服务管理
Countly装好后有一些常用命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| countly status
countly restart
countly stop
countly version
bash bin/scripts/detect.init.sh
|
日志查看:
1 2 3 4 5 6 7 8
| sudo tail -n 500 /data/software/countly/log/countly-api.log
sudo tail -n 500 /data/software/countly/log/countly-dashboard.log
sudo tail -f /data/software/countly/log/countly-api.log
|
检查HTTP访问:
1 2 3 4 5
| wget -O- 127.0.0.1:6001
wget -O- 127.0.0.1:3001/i
|
创建管理员
1
| countly add_user admin yourpassword
|
Nginx配置
Countly使用Nginx做反向代理,配置文件在 /etc/nginx/conf.d/countly.conf。
SSL配置示例:
1 2 3 4 5 6 7 8 9 10 11 12 13
| server { listen 443 ssl http2; server_name stats.yourdomain.com;
ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem;
location / { proxy_pass http://127.0.0.1:6001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
|
SDK集成示例
Cocos Creator
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| const Countly = require('countly-sdk-cocos2d-x');
Countly.init({ app_key: 'YOUR_APP_KEY', url: 'https://stats.yourdomain.com', debug: false });
Countly.begin_session();
Countly.add_event({ key: 'level_complete', count: 1, segmentation: { level: 1, score: 1000 } });
|
iOS
1 2 3 4 5 6
| #import "Countly.h"
CountlyConfig *config = [[CountlyConfig alloc] init]; config.appKey = @"YOUR_APP_KEY"; config.host = @"https://stats.yourdomain.com"; [[Countly sharedInstance] startWithConfig:config];
|
Android
1 2 3 4 5 6
| import ly.count.android.sdk.Countly;
Countly.sharedInstance() .init(this, "https://stats.yourdomain.com", "YOUR_APP_KEY");
Countly.sharedInstance().onStart(this);
|
数据库备份脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #!/bin/bash
BACKUP_DIR="/backup/countly" DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
mongodump --out $BACKUP_DIR/$DATE
cd $BACKUP_DIR tar -czf $DATE.tar.gz $DATE rm -rf $DATE
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
echo "Backup completed: $DATE.tar.gz"
|
坑5:日志文件过大
Countly日志如果不清理会占满磁盘,配置logrotate:
1 2 3 4 5 6 7 8 9 10 11
| sudo tee /etc/logrotate.d/countly <<EOF /data/software/countly/log/*.log { daily rotate 30 compress delaycompress missingok notifempty create 0644 root root } EOF
|
总结
Countly部署整体还算顺利,主要注意这几个坑:
- SELinux要关闭,否则服务起不来
- npm换国内镜像,不然安装慢死
- argon2报错时删除node_modules重新装
- 记得配置日志轮转,防止磁盘占满
- 定期备份MongoDB数据
自托管统计平台数据隐私性好,但需要自己运维。如果数据量不大,Countly社区版完全够用。