Mục lục bài viết

Linux

Hướng dẫn Cài đặt MinIO trên Ubuntu 24.04 với Nginx Proxy

phongdh
phongdh
Chia sẻ:
Zalo
Hướng dẫn Cài đặt MinIO trên Ubuntu 24.04 với Nginx Proxy

Bạn đang tìm kiếm một hướng dẫn thực tế về cách cài đặt MinIO trên Ubuntu 24.04 và cấu hình Nginx làm frontend proxy? Trong bài viết này, chúng ta sẽ cùng thiết lập máy chủ lưu trữ đối tượng (object storage server) MinIO trên máy Linux Ubuntu, chạy phía sau Nginx.

MinIO là một giải pháp lưu trữ cung cấp API tương thích hoàn toàn với Amazon S3 và hỗ trợ tất cả các tính năng cốt lõi của S3. Phần mềm này có thể được cài đặt trên private cloud (đám mây riêng), public cloud (đám mây công cộng) và thậm chí là trong các thiết lập cơ sở hạ tầng biên (edge infrastructure). Sản phẩm được phát hành dưới dạng giấy phép kép: GNU 3.0 và Giấy phép Thương mại MinIO.

Mặc dù chúng ta sẽ thực hiện cài đặt MinIO trên máy chủ Linux Ubuntu, quy trình tương tự cũng có thể áp dụng cho bất kỳ biến thể Linux dựa trên Debian nào khác vì gói minio được phân phối dưới dạng một tệp thực thi (binary).

Trong hướng dẫn này, địa chỉ IP của máy chủ MinIO là 103.110.85.111 và tên miền được sử dụng là minio.phongdinh.info.vn.

1. Tải xuống tệp thực thi (binary) MinIO

Các bước dưới đây áp dụng cho cả hệ thống sử dụng chip Intel và ARM. Hãy tải xuống bản phát hành binary mới nhất:

  • Dành cho bộ xử lý Intel / AMD 64-bit:
wget https://dl.min.io/server/minio/release/linux-amd64/minio
  • Dành cho bộ xử lý ARM 64-bit:
wget https://dl.min.io/server/minio/release/linux-arm64/minio

Sau khi tải xuống, hãy cấp quyền thực thi cho tệp bằng lệnh chmod:

chmod +x minio

Tiếp theo, hãy di chuyển tệp vào thư mục nằm trong biến môi trường PATH của bạn để có thể gọi lệnh từ bất cứ đâu:

sudo mv minio /usr/local/bin/

Kiểm tra xem phần mềm đã hoạt động chưa bằng cách xem phiên bản:

root@phongdh:~# minio --version
minio version RELEASE.2025-09-07T16-13-09Z (commit-id=07c3a429bfed433e49018cb0f78a52145d4bedeb)
Runtime: go1.24.6 linux/amd64
License: GNU AGPLv3 - https://www.gnu.org/licenses/agpl-3.0.html
Copyright: 2015-2025 MinIO, Inc.
MinIO

2. Cấu hình Máy chủ MinIO (Mô hình Single Node)

Đây là thiết lập cấu hình máy chủ lưu trữ MinIO trên một node duy nhất (single node). Sau khi tải xuống tệp thực thi, hãy tạo các thư mục để MinIO lưu trữ dữ liệu. Thông thường, đây nên là một ổ đĩa cứng chuyên dụng (ví dụ: thiết bị RAID) có khả năng tồn tại và an toàn dữ liệu ngay cả khi hệ điều hành gặp sự cố.

Trong ví dụ này, chúng tôi sử dụng thư mục /data/minio cho dữ liệu và /etc/minio cho các tệp cấu hình.

sudo mkdir -p /data/minio /etc/minio

Tạo một tài khoản người dùng hệ thống (system user) để cấp quyền sở hữu các thư mục này và dùng để chạy dịch vụ systemd. Đặt thư mục gốc (home directory) cho người dùng này trỏ về thư mục vừa tạo.

sudo useradd --system --shell /sbin/nologin --home-dir /data/minio minio

Thiết lập quyền sở hữu cho người dùng minio:

sudo chown -R minio:minio /data/minio /etc/minio

Tạo tệp systemd service (unit file) cho dịch vụ MinIO:

sudo vi /etc/systemd/system/minio.service

Thêm đoạn cấu hình sau vào tệp:

[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio
AssertFileNotEmpty=/etc/default/minio

[Service]
Type=notify
WorkingDirectory=/usr/local/
User=minio
Group=minio
ProtectProc=invisible
EnvironmentFile=/etc/default/minio
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# Để systemd luôn tự động khởi động lại dịch vụ này
Restart=always

# Chỉ định số lượng bộ mô tả tệp (file descriptor) tối đa có thể được mở bởi tiến trình này
LimitNOFILE=1048576

# Chỉ định số lượng luồng (threads) tối đa mà tiến trình này có thể tạo
TasksMax=infinity

# Vô hiệu hóa logic hết giờ (timeout) và đợi cho đến khi tiến trình dừng hoàn toàn
TimeoutSec=infinity

# Ngăn chặn kernel OOM killer tiêu diệt MinIO khi đầy RAM
OOMScoreAdjust=-1000
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

Chúng ta cũng cần tạo một tệp cấu hình môi trường /etc/default/minio chứa tên người dùng và mật khẩu:

sudo vi /etc/default/minio

Thiết lập tên người dùng (admin), mật khẩu, và đường dẫn thư mục dữ liệu:

# MINIO_ROOT_USER và MINIO_ROOT_PASSWORD thiết lập tài khoản gốc (root/admin) cho máy chủ MinIO.
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=Str0ngAdmP@ssw0rD

# MINIO_VOLUMES chỉ định volume lưu trữ hoặc đường dẫn thư mục cho MinIO.
MINIO_VOLUMES="/data/minio"

# Địa chỉ Listen của máy chủ - Dành cho API và Console
MINIO_OPTS="-C /etc/minio --address :9000 --console-address :9001"

MINIO_SERVER_URL="https://minio.phongdinh.info.vn"
MINIO_BROWSER_REDIRECT_URL="https://minio.phongdinh.info.vn/minio/ui"

Lưu ý: Port :9000:9001 sẽ mở các dịch vụ ra IP công cộng. Đối với việc truy cập cục bộ (local access) trong cùng một máy chủ, đặc biệt nếu bạn dùng Nginx ở phía trước, hãy đặt địa chỉ API và console lần lượt thành 127.0.0.1:9000127.0.0.1:9001 để bảo mật tốt hơn. Đừng quên thay thế /data/minio bằng thư mục dữ liệu thực tế của bạn nếu cần.

Tải lại cấu hình systemd và khởi chạy dịch vụ MinIO. Kiểm tra trạng thái để đảm bảo dịch vụ đang chạy:

sudo systemctl daemon-reload
sudo systemctl enable --now minio
sudo systemctl status minio

Thiết lập này sẽ khởi chạy MinIO như một dịch vụ nền (background service) trên cổng 9000 (cho API) và cổng 9001 (cho Web Console).

3. Truy cập Bảng điều khiển Web MinIO (Web Console)

Mở trình duyệt web của bạn và truy cập địa chỉ URL http://<IP_May_Chu>:9000, hệ thống sẽ tự động chuyển hướng bạn đến trang đăng nhập.

Sử dụng thông tin đăng nhập mà bạn vừa khai báo trong tệp /etc/default/minio (ví dụ: user: admin / pass: Str0ngAdmP@ssw0rD) để truy cập.

minio

Sau khi đăng nhập thành công, bạn sẽ thấy giao diện Bảng điều khiển MinIO. Tại đây, bạn có thể thực hiện hầu hết các tác vụ quản trị, tạo bucket, cấp quyền,… đối với máy chủ MinIO.

4. Cấu hình Nginx Proxy cho MinIO (Tùy chọn)

Nếu bạn muốn cấu hình Nginx đứng trước MinIO để ẩn port cũng như hỗ trợ SSL, hãy cài đặt Nginx nếu máy chủ chưa có:

sudo apt install nginx

Tiếp theo, tạo tệp cấu hình Virtual Host Nginx cho MinIO:

sudo vi /etc/nginx/sites-available/minio.conf

Thêm và điều chỉnh nội dung bên dưới (thay đổi IP và Domain tương ứng):

Hãy nhớ thay thế DOMAIN-CUA-BAN bằng tên miền (domain/sub-domain) thực tế của bạn, và IP_SERVER bằng địa chỉ IP máy chủ của bạn.

upstream minio_s3 {
   least_conn;
   server IP_SERVER:9000;
}

upstream minio_console {
   least_conn;
   server IP_SERVER:9001;
}

server {
   listen       80;
   server_name  DOMAIN-CUA-BAN;

   # Cho phép các ký tự đặc biệt trong headers
   ignore_invalid_headers off;
   # Cho phép tải lên các tệp có kích thước bất kỳ.
   # Thay giá trị 0 thành ví dụ 1000m; nếu muốn giới hạn ở mức 1000 MB.
   client_max_body_size 0;
   # Tắt buffering proxy
   proxy_buffering off;
   proxy_request_buffering off;

   location / {
      proxy_set_header Host $http_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;

      proxy_connect_timeout 300;
      # Mặc định là HTTP/1, tuy nhiên keepalive chỉ được bật trong HTTP/1.1
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      chunked_transfer_encoding off;

      proxy_pass http://minio_s3; # Load balance thông qua upstream
   }

   location /minio/ui/ {
      rewrite ^/minio/ui/(.*) /$1 break;
      proxy_set_header Host $http_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;
      proxy_set_header X-NginX-Proxy true;

      # Rất cần thiết để pass đúng IP tĩnh khi hash
      real_ip_header X-Real-IP;

      proxy_connect_timeout 300;

      # Để hỗ trợ websocket cho các phiên bản MinIO sau tháng 1/2023
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";

      # Một số môi trường có thể bị lỗi CORS (VD: Kubernetes + Nginx Ingress)
      # Hãy bỏ chú thích dòng dưới để set header Origin thành chuỗi rỗng:
      # proxy_set_header Origin '';

      chunked_transfer_encoding off;

      proxy_pass http://minio_console; # Load balance thông qua upstream
   }
}

Kích hoạt trang web MinIO trên Nginx:

sudo ln -s /etc/nginx/sites-available/minio.conf /etc/nginx/sites-enabled/

Kiểm tra cú pháp cấu hình Nginx có hợp lệ không:

root@phongdh:~# sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Khởi động lại dịch vụ Nginx để áp dụng thay đổi. Kiểm tra trạng thái Nginx:

sudo systemctl restart nginx
sudo systemctl status nginx

Truy cập Web Console thông qua Nginx

Tên miền bạn đã dùng để cấu hình trong Nginx (ví dụ minio.phongdinh.info.vn) cần phải được trỏ bản ghi A (A Record) từ máy chủ DNS về đúng IP máy chủ MinIO. Với môi trường thử nghiệm ở local (máy tính cá nhân), bạn chỉ cần mở tệp /etc/hosts và thêm dòng ánh xạ IP với tên miền ảo của bạn như sau:

192.168.20.11 minio.example.com

Bây giờ bạn đã có thể truy cập thẳng bảng điều khiển web thông qua HTTP bằng tên miền trên trình duyệt http://<ten_mien_cua_ban>.

Cài đặt SSL cho hostname truy cập Minio

Bước 1: Cài đặt Certbot và Nginx plugin

Đầu tiên, bạn cần cập nhật danh sách gói phần mềm và cài đặt công cụ Certbot cùng với plugin dành riêng cho Nginx.

sudo apt update
sudo apt install certbot python3-certbot-nginx -y

Bước 2: Cho phép HTTPS qua tường lửa (Nếu có dùng UFW)

Nếu máy chủ của bạn đang bật tường lửa UFW, bạn cần đảm bảo đã mở cổng cho HTTPS.

sudo ufw allow 'Nginx Full'

(Lệnh này sẽ mở cả port 80 (HTTP) và 443 (HTTPS) cho Nginx).

Bước 3: Kích hoạt SSL bằng Certbot

Bây giờ, bạn chạy lệnh sau để Certbot tự động xin cấp phát chứng chỉ và cấu hình thẳng vào file Nginx của bạn.

Lưu ý: Hãy thay minio.phongdinh.info.vn bằng tên miền thực tế của bạn (tên miền mà bạn đã trỏ về IP và đã cấu hình trong mục server_name ở file /etc/nginx/sites-available/minio.conf).

sudo certbot --nginx -d minio.phongdinh.info.vn

Trong quá trình chạy, hệ thống sẽ hỏi bạn một số thông tin:

  1. Enter email address: Nhập địa chỉ email của bạn để nhận thông báo khi SSL sắp hết hạn.
  2. Terms of Service: Nhấn YEnter để đồng ý với điều khoản dịch vụ.
  3. Share email: Nhấn Y hoặc N tùy ý (chia sẻ email với tổ chức EFF).
  4. Redirect: Nếu Certbot hỏi bạn có muốn tự động chuyển hướng (Redirect) tất cả traffic từ HTTP sang HTTPS hay không, hãy chọn tùy chọn 2 (Redirect). Việc này đảm bảo mọi truy cập đều an toàn.

Bước 4: Kiểm tra lại cấu hình và khởi động lại Nginx

Certbot thường sẽ tự động tải lại Nginx, nhưng để chắc chắn mọi thứ hoạt động trơn tru, bạn nên kiểm tra lại cú pháp cấu hình:

sudo nginx -t

Nếu kết quả báo syntax is oktest is successful, hãy khởi động lại Nginx:

sudo systemctl restart nginx
sudo systemctl status nginx

Bước 5: Kiểm tra gia hạn tự động (Auto-renewal)

Chứng chỉ Let’s Encrypt có thời hạn 90 ngày, nhưng Certbot đã tự động tạo một lịch trình (cron job/systemd timer) để tự động gia hạn trước khi hết hạn. Bạn có thể kiểm tra xem tính năng gia hạn tự động có hoạt động đúng không bằng lệnh giả lập:

sudo certbot renew --dry-run

Nếu lệnh chạy mà không báo lỗi gì, bạn hoàn toàn có thể yên tâm sử dụng mà không cần lo việc cấp lại SSL thủ công sau này.

Kiểm tra thành quả:

Bây giờ, hãy mở trình duyệt và truy cập vào tên miền của bạn: https://minio.tenmien.com. Bạn sẽ thấy biểu tượng ổ khóa an toàn hiển thị cạnh thanh địa chỉ, và kết nối tới bảng điều khiển của MinIO giờ đây đã được mã hóa hoàn toàn!

Chia sẻ:
Zalo
phongdh

phongdh

Content Creator

Chào mọi người, mình là Phong - hiện đang công tác tại Phòng Kỹ thuật AZDIGI. Trong quá trình làm việc mình có cơ hội được tiếp xúc với khá nhiều các vấn đề liên quan đến Website/Email/Hosting/VPS/Server, do đó mình viết lại các hướng dẫn này nhằm chia sẻ kiến thức, cũng như tạo một môi trường để chúng ta giao lưu và học hỏi lẫn nhau.

Kết nối:

Bài viết liên quan

Những bài viết bạn có thể quan tâm

Thảo luận

0 bình luận cho bài viết này

* Địa chỉ email của bạn sẽ được bảo mật và không hiển thị công khai.

Chưa có bình luận nào

Hãy là người đầu tiên chia sẻ góc nhìn của bạn về bài viết này nhé!

Zalo

Nhập từ khóa để tìm kiếm...

0 kết quả

CHUYÊN MỤC LIÊN QUAN