Cài đặt Umami cho Docker LCMP Multisite

Bài viết về Umami thì mình cũng đã có 1 bài viết khá lâu tại đây, thực tế thèng bibica.net vẫn dùng phiên bản Umami Cloud miễn phí của họ, chủ yếu vì thấy tự cài ăn tài nguyên khá nhiều (~ 200MB – 300MB RAM), nhu cầu hiện tại dùng bản miễn phí của họ cũng thừa, dùng ổn định 1 năm nay, thi thoảng server của họ downtime 1-2 phút gì đó không ảnh hưởng lắm, vì mục đích chính các tool analytics dạng này thường là theo dõi số liệu theo nhiều tháng, nhiều năm, coi bài viết nào khách coi nhiều, truy cập tới từ đâu, hay là dùng thiết bị, độ phân giải gì ….

Không rõ nay bị làm sao, mà không truy cập được vào domain cloud.umami.is 😀 nên thôi, chuyển sang dùng self host luôn cho đỡ lằng nhằng lệ thuộc, phần vì giờ thèng bibica.net đang chạy Oracle 24GB RAM, cấu hình phần cứng quá là khỏe

Do mình đang dùng Docker LCMP Multisite, đã chạy qua docker và dùng Caddy làm proxy, nên viết nhanh gọn là đủ, bạn nào thích có thể xem lại bài cấu hình gốc, về cơ bản cũng không khác nhau là mấy

Cài đặt Umami

Do đang cài đặt mọi thứ bên trong thư mục home, nên mình tạo thêm 1 thư mục umami bên trong, có backup thư mục home là tự copy đầy đủ umami

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mkdir /home/umami
cd /home/umami
nano compose.yml
mkdir /home/umami cd /home/umami nano compose.yml
mkdir /home/umami
cd /home/umami
nano compose.yml

Nội dung bên trong điền vào

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
services:
umami:
image: ghcr.io/umami-software/umami:postgresql-latest
container_name: umami
env_file: ./.env
environment:
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@umami-database:5432/${POSTGRES_DB}
depends_on:
- umami-database
restart: always
networks:
- reverse_proxy
umami-database:
image: postgres:15-alpine
container_name: umami-database
env_file: ./.env
volumes:
- ./data:/var/lib/postgresql/data
restart: always
networks:
- reverse_proxy
networks:
reverse_proxy:
external: true
services: umami: image: ghcr.io/umami-software/umami:postgresql-latest container_name: umami env_file: ./.env environment: DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@umami-database:5432/${POSTGRES_DB} depends_on: - umami-database restart: always networks: - reverse_proxy umami-database: image: postgres:15-alpine container_name: umami-database env_file: ./.env volumes: - ./data:/var/lib/postgresql/data restart: always networks: - reverse_proxy networks: reverse_proxy: external: true
services:
  umami:
    image: ghcr.io/umami-software/umami:postgresql-latest
    container_name: umami
    env_file: ./.env
    environment:
      DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@umami-database:5432/${POSTGRES_DB}    
    depends_on:
      - umami-database
    restart: always
    networks:
      - reverse_proxy

  umami-database:
    image: postgres:15-alpine
    container_name: umami-database
    env_file: ./.env
    volumes:
      - ./data:/var/lib/postgresql/data
    restart: always
    networks:
      - reverse_proxy

networks:
  reverse_proxy:
    external: true
  • Xóa phần port đi, do chạy qua reverse_proxy
  • Đặt lại container_name tên gọi cho chính xác để dễ quan sát, theo dõi
  • DATABASE_URL: mặc định đúng ra khi dùng reverse_proxy là không cần phải điền vào, mà không rõ Umami cấu hình sao đó, vẫn phải thêm vào, không thì 1 số file check không được database???

Tiếp theo tạo file cấu hình các biến .env

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
nano .env
nano .env
nano .env

Nội dung bên trong điền vào

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
APP_SECRET=9+ASoGrrkmxhX0TQe5DKJZS4veal4/wqK0PEcbqSz1ePQEgP+otWV48/ubpSnFrcQ==
TRACKER_SCRIPT_NAME=aloha
COLLECT_API_ENDPOINT=/api/aloha
POSTGRES_DB=umami
POSTGRES_USER=umami
POSTGRES_PASSWORD=umami_p3JhoTs282228Cg58Fk
APP_SECRET=9+ASoGrrkmxhX0TQe5DKJZS4veal4/wqK0PEcbqSz1ePQEgP+otWV48/ubpSnFrcQ== TRACKER_SCRIPT_NAME=aloha COLLECT_API_ENDPOINT=/api/aloha POSTGRES_DB=umami POSTGRES_USER=umami POSTGRES_PASSWORD=umami_p3JhoTs282228Cg58Fk
APP_SECRET=9+ASoGrrkmxhX0TQe5DKJZS4veal4/wqK0PEcbqSz1ePQEgP+otWV48/ubpSnFrcQ==
TRACKER_SCRIPT_NAME=aloha
COLLECT_API_ENDPOINT=/api/aloha
POSTGRES_DB=umami
POSTGRES_USER=umami
POSTGRES_PASSWORD=umami_p3JhoTs282228Cg58Fk

Tinh gọn lại các biến môi trường, để chỉ phải thêm, sửa 1 lần duy nhất từ đây, đỡ phải sửa ở nhiều chỗ (do cấu hình cũ tác giả viết cần sửa nhiều chỗ quá)

  • Cấu hình thêm 2 biến mới là TRACKER_SCRIPT_NAMECOLLECT_API_ENDPOINT

Mặc định Umami dùng tên script là script.js và API là api/collect hoặc /api/send, một số plugin chặn quảng cáo như uBlock Origin thậm chí chặn cả các tên gọi này 😀 để giải quyết vấn đề này, Umami bổ xung 2 biến mới, giúp người dùng có thể tự thêm các tên tủy chỉnh vào theo ý thích

Cá nhân mình không quan tâm chuyện này lắm, có điều tùy biến lại nhìn cái tên file nó đẹp hơn, thêm vào cho đẹp là chính :]]

Tiếp theo chạy lệnh bên dưới để hoàn thành cài đặt

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker compose up -d --build --remove-orphans --force-recreate
docker compose up -d --build --remove-orphans --force-recreate
docker compose up -d --build --remove-orphans --force-recreate

Cấu hình reverse_proxy trên Docker LCMP Multisite

Mở file cấu hình Caddy của domain muốn dùng ra

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
nano /home/bibica.net/config/bibica.net.conf
nano /home/bibica.net/config/bibica.net.conf
nano /home/bibica.net/config/bibica.net.conf

Thêm vào 1 sub domain mới analytics.bibica.net

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
analytics.bibica.net {
tls /data/bibica.net/ssl/bibica.net.pem /data/bibica.net/ssl/bibica.net.key.pem
reverse_proxy umami:3000 {
header_up X-Forwarded-For {header.X-Forwarded-For}
}
}
analytics.bibica.net { tls /data/bibica.net/ssl/bibica.net.pem /data/bibica.net/ssl/bibica.net.key.pem reverse_proxy umami:3000 { header_up X-Forwarded-For {header.X-Forwarded-For} } }
analytics.bibica.net {
  tls /data/bibica.net/ssl/bibica.net.pem /data/bibica.net/ssl/bibica.net.key.pem
  reverse_proxy umami:3000 {
    header_up X-Forwarded-For {header.X-Forwarded-For}
  }
}

Quản lý proxy qua container_name rất tiện, dù hơi lú khoản cấu hình ban đầu, nhưng sau khi làm xong là gần như không phải quan tâm tới cái này nữa

Xong xuôi thì khởi động lại Caddy

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker restart caddy
docker restart caddy
docker restart caddy

Việc login, cấu hình mọi thứ thì tương tự bài viết gốc, không có gì đặc biệt

Cài đặt Umami cho Docker LCMP Multisite

Lượng RAM khi idle Umami dùng không hẳn là ít, ~ 200MB theo mình là con số rất cao, VPS nào ít RAM nên hạn chế cài các tool dạng Analytics như này vào, vì tốn tài nguyên lắm


Related Posts

Chính sách bình luận: Chúng tôi rất trân trọng các bình luận của bạn và cảm ơn thời gian bạn dành để chia sẻ ý tưởng và phản hồi.
Ghi chú: Những bình luận được xác định là spam hoặc chỉ mang tính quảng cáo sẽ bị xóa.

• Để cải thiện trải nghiệm bình luận, chúng tôi khuyến khích bạn tạo một tài khoản Gravatar. Thêm avatar vào tài khoản Gravatar sẽ giúp bình luận của bạn dễ nhận diện hơn đối với các thành viên khác.

✂️ Sao chép và 📋 Dán Emoji 💪 giúp bình luận thêm sinh động và thú vị!

Artalk ErrorFailed to load comments
TypeError: Failed to fetch


Retry