Docker로 Ackee Analytics 자체 호스팅하는 방법

발행: (2026년 3월 19일 PM 05:03 GMT+9)
10 분 소요
원문: Dev.to

Source: Dev.to

번역할 텍스트를 제공해 주시면 한국어로 번역해 드리겠습니다.

Ackee란?

Ackee는 셀프‑호스팅, 프라이버시‑중심 분석 도구로, 쿠키 없이 페이지 조회수, 리퍼러, 브라우저 및 운영 체제를 추적합니다.
MongoDB에 데이터를 저장하고, GraphQL API를 제공하며, 깔끔한 싱글‑페이지 대시보드를 제공합니다.
Ackee는 Matomo의 복잡성이나 Google Analytics의 클라우드 의존성 없이 기본 트래픽 메트릭을 원하는 개발자를 위한 도구입니다.

Source:

사전 요구 사항

요구 사항세부 정보
OSLinux 서버 (Ubuntu 22.04 + 권장)
DockerDocker 및 Docker Compose 설치 – [Docker guide] 참조
Memory512 MB 사용 가능한 RAM
Disk2 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_MONGODBMongoDB 연결 문자열
ACKEE_USERNAME대시보드 로그인 사용자 이름
ACKEE_PASSWORD대시보드 로그인 비밀번호
ACKEE_ALLOW_ORIGINCORS 출처 – 웹사이트 도메인으로 설정 (여러 개일 경우 쉼표로 구분)
ACKEE_AUTO_ORIGINtrue 로 설정하면 모든 출처를 허용 (보안에 취약함)

스택 시작하기

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 blankACKEE_USERNAMEACKEE_PASSWORD가 올바른지 확인하세요. 변경 후 컨테이너를 재시작합니다: docker compose restart ackee
Logs show MongoNetworkError: connect ECONNREFUSEDMongoDB 컨테이너가 실행 중이며 동일한 Docker 네트워크에 있는지 확인하세요: docker compose ps & docker network ls

리소스 사용량 (일반적인 경우)

리소스대략 사용량
RAM150‑300 MB (Ackee 약 50 MB + MongoDB 약 100‑200 MB)
CPU최소
Disk1‑5 GB (트래픽 양 및 보존 기간에 따라 다름)

Ackee를 언제 사용(또는 사용하지) 않을까

장점

  • 극도로 가볍고 기본적인 것만 제공: 페이지 조회수, 리퍼러, 브라우저, 화면 크기.
  • GDPR 친화적이며 기본적으로 익명 모드 제공.
  • 맞춤형 통합을 위한 GraphQL API.

단점

  • 퍼널, 목표, 맞춤 이벤트, 캠페인 추적 기능이 없음.
  • 고급 분석이 필요하면 빠르게 한계에 도달함.

대안:

  • Plausible 또는 Umami – 목표 및 맞춤 이벤트 추가.
  • Matomo – 기능이 풍부하지만 무거움.

GDPR 및 쿠키‑프리 운영

  • 익명 모드 (기본): 개인 식별 정보 없음, 쿠키 없음, 집계 메트릭만 제공. 동의 배너 필요 없음.
  • 상세 모드: 화면 크기, 언어, 리퍼러 등 약간 더 수집하지만 여전히 쿠키 없이 동작하며 지문 인식을 피함.

여러 웹사이트 추적

  1. Ackee 대시보드에서 Settings → Domains → Add Domain 로 이동합니다.
  2. 각 도메인마다 고유한 Domain ID와 추적 스니펫이 제공됩니다.
  3. 해당 스니펫을 각 사이트의 “에 삽입합니다.

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에 무기한으로 누적됩니다. 저장소 관리를 위해 다음 방법을 사용할 수 있습니다:

  1. MongoDB 쿼리를 통해 오래된 레코드를 수동으로 삭제합니다.
  2. 오래된 항목을 삭제하는 cron 작업을 설정합니다.
  3. 해당 컬렉션에 TTL 인덱스를 설정하여 자동 만료를 구현합니다.

Topics & Guides

  • 최고의 자체 호스팅 분석
  • Plausible 자체 호스팅 방법
  • Umami 자체 호스팅 방법
  • Plausible vs Umami
  • Google Analytics 대체
  • Docker Compose 기본
  • 리버스 프록시 설정
  • 백업 전략
0 조회
Back to Blog

관련 글

더 보기 »