Rời bỏ Slack: Tự host Mattermost với Docker để kiểm soát dữ liệu hoàn toàn

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

Giành lại quyền kiểm soát dữ liệu của bạn

Slack và Microsoft Teams là những tiêu chuẩn của ngành đều có lý do, nhưng đóng vai trò là rào cản lớn khi đòi hỏi bạn phải đặt niềm tin tuyệt đối vào họ. Mọi tin nhắn, tệp riêng tư và tài liệu chiến lược nội bộ đều nằm trên một máy chủ mà bạn không hề kiểm soát. Mattermost cung cấp một giải pháp thay thế mã nguồn mở tinh tế, có giao diện và trải nghiệm tương tự Slack nhưng giữ cho dữ liệu của bạn nằm gọn trong tầm kiểm soát của chính mình.

Triển khai Mattermost là một cách tuyệt vời để nâng cao kỹ năng HomeLab. Nó đưa bạn vượt ra khỏi việc chạy các container đơn lẻ để bước vào thế giới ứng dụng đa tầng (multi-tier), nơi cơ sở dữ liệu và máy chủ ứng dụng phải hoạt động đồng bộ. Trong thực tế, một instance nhỏ cho 5-10 người dùng thường tiêu tốn khoảng 800MB RAM ở chế độ chờ, khiến nó trở thành ứng cử viên hoàn hảo cho một VPS khiêm tốn hoặc một chiếc laptop cũ.

Docker đơn giản hóa toàn bộ stack này. Thay vì phải tinh chỉnh PostgreSQL thủ công hoặc vật lộn với các phụ thuộc (dependencies) của Linux, chúng ta có thể định nghĩa toàn bộ môi trường trong một tệp duy nhất. Tính di động này là một cứu cánh thực sự. Nếu bạn nâng cấp phần cứng, toàn bộ trung tâm liên lạc của bạn sẽ di chuyển theo chỉ với một thao tác di chuyển thư mục duy nhất.

Những thứ bạn cần chuẩn bị

Trước khi tải bất kỳ image nào, hãy kiểm tra xem môi trường của bạn có đáp ứng các yêu cầu cơ bản sau không:

  • Một máy chủ Linux (Ubuntu 22.04 LTS hoặc 24.04 LTS hoạt động tốt nhất).
  • Docker Engine (v24.0+) và Docker Compose (v2.0+).
  • Ít nhất 2GB RAM để xử lý việc đánh chỉ mục tìm kiếm và xử lý tệp một cách thoải mái.
  • Kiến thức cơ bản về dòng lệnh (terminal) Linux.

Bước 1: Tổ chức thư mục tệp tin

Tổ chức là chìa khóa để quản lý HomeLab hiệu quả. Giữ dữ liệu cố định (persistent data) trong một thư mục tập trung giúp việc tự động hóa sao lưu trở nên dễ dàng hơn nhiều. Hãy tạo một không gian riêng cho Mattermost và cơ sở dữ liệu của nó.

mkdir -p ~/homelab/mattermost/volumes/app/mattermost/{data,logs,config,plugins,client-plugins}
mkdir -p ~/homelab/mattermost/volumes/db/data
cd ~/homelab/mattermost

Phân quyền thường là một trở ngại phổ biến. Container Mattermost chạy dưới quyền người dùng non-root với UID 2000. Chúng ta cần bàn giao quyền sở hữu các thư mục ứng dụng để container có thể thực sự ghi log và lưu trữ các tệp tải lên của bạn:

sudo chown -R 2000:2000 ~/homelab/mattermost/volumes/app/mattermost

Bước 2: Định nghĩa Stack

Mattermost cần một cơ sở dữ liệu đáng tin cậy để lưu trữ tin nhắn. Mặc dù MySQL là một lựa chọn, PostgreSQL vẫn là tiêu chuẩn vàng cho hiệu năng của Mattermost. Chúng sẽ sử dụng Docker Compose để kết nối cả hai một cách liền mạch.

Tạo tệp cấu hình của bạn:

nano docker-compose.yml

Dán cấu hình này vào trình soạn thảo. Lưu ý rằng tôi đã cập nhật cơ sở dữ liệu lên PostgreSQL 15 để có hiệu suất tốt hơn:

services:
  db:
    image: postgres:15-alpine
    restart: unless-stopped
    volumes:
      - ./volumes/db/data:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=mmuser
      - POSTGRES_PASSWORD=mmuser_password
      - POSTGRES_DB=mattermost

  mattermost:
    image: mattermost/mattermost-team-edition:latest
    restart: unless-stopped
    depends_on:
      - db
    environment:
      - MM_SQLSETTINGS_DRIVERNAME=postgres
      - MM_SQLSETTINGS_DATASOURCE=postgres://mmuser:mmuser_password@db:5432/mattermost?sslmode=disable&connect_timeout=10
    volumes:
      - ./volumes/app/mattermost/config:/mattermost/config
      - ./volumes/app/mattermost/data:/mattermost/data
      - ./volumes/app/mattermost/logs:/mattermost/logs
      - ./volumes/app/mattermost/plugins:/mattermost/plugins
      - ./volumes/app/mattermost/client-plugins:/mattermost/client/plugins
    ports:
      - "8065:8065"

Mẹo bảo mật: Thay thế mmuser_password bằng một mật khẩu phức tạp hơn. Ngay cả khi đây chỉ là mục đích sử dụng gia đình, việc sử dụng mật khẩu mặc định là một thói quyen bạn nên bỏ sớm.

Bước 3: Khởi chạy

Sau khi lưu tệp, đã đến lúc tải các image và khởi động dịch vụ. Chạy lệnh này từ thư mục Mattermost của bạn:

docker compose up -d

Docker bây giờ sẽ tải xuống khoảng 300MB image và khởi tạo cơ sở dữ liệu. Bạn có thể xác minh trạng thái bằng cách chạy:

docker compose ps

Nếu cột trạng thái hiển thị “Up” cho cả hai container, phần khó khăn nhất đã xong.

Bước 4: Đăng nhập lần đầu

Truy cập vào địa chỉ http://your-server-ip:8065 trên trình duyệt của bạn. Người đầu tiên truy cập sẽ trở thành Quản trị viên hệ thống (System Administrator).

  1. Tạo tài khoản Admin: Thiết lập tên người dùng và mật khẩu mạnh. Tài khoản này sẽ kiểm soát toàn bộ máy chủ.
  2. Bắt đầu một Team: Mattermost sử dụng “Teams” làm đơn vị tổ chức cấp cao nhất. Bạn có thể đặt tên là “HomeLab” hoặc “Gia đình”.
  3. Cấu hình URL: Đi tới System Console > Environment > Web Server. Đặt Site URL thành IP máy chủ của bạn (ví dụ: http://192.168.1.50:8065) để các liên kết trong email hoạt động chính xác.

Bước 5: Bảo trì và Giám sát

Một máy chủ mà bạn không thể giám sát là một máy chủ sớm muộn gì cũng sẽ gặp lỗi. Tôi khuyên bạn nên kiểm tra log ngay sau khi khởi chạy lần đầu để đảm bảo không có vấn đề ẩn nào về phân quyền.

Theo dõi log trong thời gian thực bằng lệnh này:

docker compose logs -f mattermost

Nếu bạn thấy dòng “Server is listening on :8065,” nghĩa là bạn đã thành công. Nếu thấy lỗi “permission denied”, hãy chạy lại lệnh chown ở Bước 1.

Kiểm tra tính cố định của dữ liệu

Đừng bao giờ tin tưởng một volume cho đến khi bạn đã kiểm tra nó. Hãy đăng một vài tin nhắn thử nghiệm, sau đó khởi động lại stack:

docker compose down
docker compose up -d

Nếu tin nhắn của bạn vẫn còn đó khi bạn đăng nhập lại, dữ liệu của bạn đã được lưu trữ an toàn trên ổ cứng máy chủ, chứ không chỉ nằm bên trong container tạm thời.

Các bước tiếp theo: Bảo mật

Hiện tại, lưu lượng truy cập của bạn chưa được mã hóa. Nếu bạn có kế hoạch truy cập Mattermost qua internet hoặc sử dụng ứng dụng di động, bạn phải thiết lập HTTPS. Cách dễ nhất để thực hiện việc này là đặt Mattermost đằng sau một reverse proxy như Nginx Proxy Manager hoặc Traefik với chứng chỉ Let’s Encrypt.

Kinh nghiệm vận hành lâu dài

Khi bạn bắt đầu sử dụng Mattermost hàng ngày, hãy ghi nhớ ba lời khuyên sau:

  • Tự động hóa sao lưu: Sử dụng các công cụ như Restic hoặc một script cron job đơn giản để sao lưu thư mục ~/homelab/mattermost/volumes hàng đêm.
  • Cập nhật dễ dàng: Khi có phiên bản mới, chỉ cần chạy docker compose pulldocker compose up -d. Docker sẽ thay thế file thực thi trong khi vẫn giữ nguyên dữ liệu của bạn.
  • Tích hợp: Mattermost tỏa sáng nhất khi được kết nối. Hãy thử thiết lập một incoming webhook để nhận thông báo từ GitHub hoặc các cảm biến Home Assistant của bạn.

Bạn vừa xây dựng xong một trung tâm liên lạc riêng tư và bảo mật. Bạn không còn chỉ là một người dùng nữa; bạn chính là chủ sở hữu của nền tảng đó.

Share: