Docker로 Ackee Analytics 자체 호스팅하는 방법
Source: Dev.to
번역할 텍스트를 제공해 주시면 한국어로 번역해 드리겠습니다.
Ackee란?
Ackee는 셀프‑호스팅, 프라이버시‑중심 분석 도구로, 쿠키 없이 페이지 조회수, 리퍼러, 브라우저 및 운영 체제를 추적합니다.
MongoDB에 데이터를 저장하고, GraphQL API를 제공하며, 깔끔한 싱글‑페이지 대시보드를 제공합니다.
Ackee는 Matomo의 복잡성이나 Google Analytics의 클라우드 의존성 없이 기본 트래픽 메트릭을 원하는 개발자를 위한 도구입니다.
Source: …
사전 요구 사항
| 요구 사항 | 세부 정보 |
|---|---|
| OS | Linux 서버 (Ubuntu 22.04 + 권장) |
| Docker | Docker 및 Docker Compose 설치 – [Docker guide] 참조 |
| Memory | 512 MB 사용 가능한 RAM |
| Disk | 2 GB 사용 가능한 디스크 공간 |
| Domain | 도메인 이름 (CORS 및 HTTPS를 위해 권장) |
Docker‑Compose 설정
Create a docker-compose.yml file:
services:
ackee:
image: electerious/ackee:3.5.1
container_name: ackee
restart: unless-stopped
ports:
- "3000:3000"
environment:
ACKEE_MONGODB: "mongodb://mongo:27017/ackee"
ACKEE_USERNAME: "admin" # CHANGE: dashboard login username
ACKEE_PASSWORD: "change-this-password" # CHANGE: use a strong password
ACKEE_ALLOW_ORIGIN: "https://example.com" # CHANGE: your website's domain (CORS)
depends_on:
- mongo
networks:
- analytics
mongo:
image: mongo:7.0.16
container_name: ackee-mongo
restart: unless-stopped
volumes:
- ackee-data:/data/db
networks:
- analytics
networks:
analytics:
driver: bridge
volumes:
ackee-data:
환경 변수
| 변수 | 목적 |
|---|---|
ACKEE_MONGODB | MongoDB 연결 문자열 |
ACKEE_USERNAME | 대시보드 로그인 사용자 이름 |
ACKEE_PASSWORD | 대시보드 로그인 비밀번호 |
ACKEE_ALLOW_ORIGIN | CORS 출처 – 웹사이트 도메인으로 설정 (여러 개일 경우 쉼표로 구분) |
ACKEE_AUTO_ORIGIN | true 로 설정하면 모든 출처를 허용 (보안에 취약함) |
스택 시작하기
docker compose up -d
http://:3000에서 대시보드 열기- 환경 변수에 정의된 사용자 이름과 비밀번호로 로그인
- Settings → Domains → Add Domain → 사이트 이름과 도메인 입력
추적 스크립트
생성된 스니펫을 복사하여 웹사이트의 “ 안에 삽입하세요:
- 스크립트 크기는 약 2 KB이며, 비동기 로드되고 쿠키를 전혀 설정하지 않습니다.
- Ackee는 하나의 인스턴스에서 여러 사이트를 추적할 수 있으며, 각 사이트마다 고유한 도메인 ID와 스니펫을 가집니다.
상세 모드 활성화 (선택 사항)
상세 모드는 방문당 화면 크기, 언어, 리퍼러 정보를 수집합니다. 쿠키는 사용하지 않지만 더 세밀한 데이터를 제공합니다.
GraphQL API
{
domains {
id
title
statistics {
views {
id
count
}
}
}
}
- 엔드포인트:
https://your-ackee-instance.com/api - 인증: Bearer token (Settings → Tokens에서 영구 토큰을 생성)
Production Deployment Behind HTTPS (Reverse Proxy)
server {
listen 443 ssl;
server_name analytics.example.com;
location / {
proxy_pass http://localhost:3000;
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;
}
}
Tip: HTTPS는 강력히 권장됩니다.
ACKEE_ALLOW_ORIGIN은 HTTPS 출처와 가장 잘 작동하며, 브라우저가 혼합‑콘텐츠 페이지에서 트래커를 차단할 수 있습니다. 전체 구성을 보려면 Reverse Proxy Setup 가이드를 참조하세요.
MongoDB 데이터 백업
# Dump the database inside the container
docker exec ackee-mongo mongodump --out /tmp/backup --db ackee
# Copy the dump to the host
docker cp ackee-mongo:/tmp/backup ./ackee-backup-$(date +%Y%m%d)
또는 Restic이나 BorgBackup과 같은 도구를 사용하여 전체 ackee-data Docker 볼륨을 백업할 수 있습니다. Backup Strategy 문서를 참고하세요.
일반적인 문제 및 해결 방법
| 증상 | 해결 방법 |
|---|---|
| Dashboard shows zero views after adding the script | 브라우저 콘솔에서 CORS 오류를 확인하세요. ACKEE_ALLOW_ORIGIN은 사이트의 origin(프로토콜, 서브‑도메인, 포트)과 정확히 일치해야 합니다. |
| Login returns 401 or dashboard is blank | ACKEE_USERNAME 및 ACKEE_PASSWORD가 올바른지 확인하세요. 변경 후 컨테이너를 재시작합니다: docker compose restart ackee |
Logs show MongoNetworkError: connect ECONNREFUSED | MongoDB 컨테이너가 실행 중이며 동일한 Docker 네트워크에 있는지 확인하세요: docker compose ps & docker network ls |
리소스 사용량 (일반적인 경우)
| 리소스 | 대략 사용량 |
|---|---|
| RAM | 150‑300 MB (Ackee 약 50 MB + MongoDB 약 100‑200 MB) |
| CPU | 최소 |
| Disk | 1‑5 GB (트래픽 양 및 보존 기간에 따라 다름) |
Ackee를 언제 사용(또는 사용하지) 않을까
장점
- 극도로 가볍고 기본적인 것만 제공: 페이지 조회수, 리퍼러, 브라우저, 화면 크기.
- GDPR 친화적이며 기본적으로 익명 모드 제공.
- 맞춤형 통합을 위한 GraphQL API.
단점
- 퍼널, 목표, 맞춤 이벤트, 캠페인 추적 기능이 없음.
- 고급 분석이 필요하면 빠르게 한계에 도달함.
대안:
- Plausible 또는 Umami – 목표 및 맞춤 이벤트 추가.
- Matomo – 기능이 풍부하지만 무거움.
GDPR 및 쿠키‑프리 운영
- 익명 모드 (기본): 개인 식별 정보 없음, 쿠키 없음, 집계 메트릭만 제공. 동의 배너 필요 없음.
- 상세 모드: 화면 크기, 언어, 리퍼러 등 약간 더 수집하지만 여전히 쿠키 없이 동작하며 지문 인식을 피함.
여러 웹사이트 추적
- Ackee 대시보드에서 Settings → Domains → Add Domain 로 이동합니다.
- 각 도메인마다 고유한 Domain ID와 추적 스니펫이 제공됩니다.
- 해당 스니펫을 각 사이트의 “에 삽입합니다.
Overview
단일 Ackee 인스턴스가 추적할 수 있는 도메인 수에 엄격한 제한은 없습니다—주된 제약은 트래픽 양에 따라 증가하는 MongoDB 저장소입니다.
- Ackee – 가장 최소한의 옵션: 기본 페이지 뷰, 리퍼러, 브라우저, 화면 크기와 GraphQL API 제공.
- Plausible – 목표, 맞춤 이벤트, 캠페인 추적을 깔끔한 대시보드에 추가.
- Umami – 두 옵션 사이에 위치하며, Plausible보다 간단한 설정으로 맞춤 이벤트 제공.
Ackee를 선택하세요. API와 함께 정말 최소한의 분석만 필요할 때 적합합니다.
Tracker Blocking
프라이버시 중심의 광고 차단기는 알려진 분석 도메인 목록을 유지하므로 Ackee의 트래커 스크립트가 차단될 수 있습니다. 자체 호스팅을 하면 Ackee 인스턴스가 자신의 도메인에서 실행되므로 차단기가 식별하기가 어려워집니다. 트래커 스크립트를 메인 웹사이트 도메인을 통해 프록시하면 차단을 더욱 줄일 수 있습니다.
Resource Requirements
- Ackee 자체는 약 50 MB의 RAM만 사용합니다.
- 병목 현상은 MongoDB이며, 최소 100–200 MB가 필요합니다.
2 GB RAM을 장착한 Raspberry Pi 4는 저‑중간 트래픽 사이트에 대해 Ackee를 충분히 처리할 수 있습니다. ARM64 MongoDB 이미지를 사용하세요:
docker pull mongo:7.0.16
이 이미지는 Pi 4/5에서 네이티브로 실행됩니다.
Data Retention
Ackee에는 내장된 데이터 보존 정책이 없습니다. 데이터는 MongoDB에 무기한으로 누적됩니다. 저장소 관리를 위해 다음 방법을 사용할 수 있습니다:
- MongoDB 쿼리를 통해 오래된 레코드를 수동으로 삭제합니다.
- 오래된 항목을 삭제하는 cron 작업을 설정합니다.
- 해당 컬렉션에 TTL 인덱스를 설정하여 자동 만료를 구현합니다.
Topics & Guides
- 최고의 자체 호스팅 분석
- Plausible 자체 호스팅 방법
- Umami 자체 호스팅 방법
- Plausible vs Umami
- Google Analytics 대체
- Docker Compose 기본
- 리버스 프록시 설정
- 백업 전략