Hướng dẫn tạo Object Storage Server với Minio


Chắc các bạn đã từng nghe nói tới dịch vụ Amazon S3 nổi tiếng của AWS (Amazon Web Services). Đây là dịch vụ lưu trữ cloud (Object Storage) nổi tiếng nhất thế giới hiện nay. Bài viết này, mình sẽ hướng dẫn các bạn tạo một Object Storage Server riêng cho mình để lưu trữ hình ảnh, video, file sử dụng Minio.

Minio là gì?

Minio là mã nguồn mở Object Storage, tương thích với Amazon S3, Kubernetes và được thiết kế để phục vụ lưu trữ dữ liệu như ảnh, video, file….

  • Phát triển bởi: MinIO, Inc
  • Phiên bản ổn định: 18/10/2020
  • Repository: github.com/minio/minio
  • Được viết bằng Go
    Loại: Object storage
  • License Apache License 2.0
  • Website: min.io

Minio có thể cài đặt trên nhiều hệ điều hành như: Windows, Linux, MacOS hoặc môi trường ảo hóa như Docker.

Hướng dẫn cài đặt Object Storage Server bằng Minio (Trên CentOS 7)

Việc cài đặt được thực hiện đơn giản với các bước sau đây:

Bước 1: Download minio script về

wget https://dl.min.io/server/minio/release/linux-amd64/minio

Bước 2: Thêm quyền thực thi cho script

sudo chmod +x minio

Bước 3: Tạo thư mục và gán chủ sở hữu là user mà bạn đang sử dụng

sudo mkdir /opt/data
sudo chown -R $USER:$USER /opt/data

Bước 4: Cài đặt Object Storage Server

MINIO_ACCESS_KEY=<access_key> MINIO_SECRET_KEY=<secret_key> ./minio server /opt/data &
  • <access_key>: Access Key
  • <secret_key>: Secret Key

Bạn cần lưu 2 key này để đăng nhập vào Server. Các bạn có thể coi đó như là 2 key như là user/password. hoặc tự động gen thông qua website: https://randomkeygen.com/

Bước 5: Đăng nhập

Sau đó chúng ta truy cập mino server với đường dẫn: https://<server_ip>:9000

Nhập thông tin <access_key> và <secret_key> để đăng nhập

Sau khi đăng nhập thành công, chúng ta vào được trang quản lý của Minio Server

Chúng ta có thể thực hiện upload và quản lý files thông qua trình duyệt. Hoặc có thể sử dụng api tương thích với Amazon S3 để upload file.

Vui lòng tham khảo bài viết sau:

Thiết lập tên miền + HTTPS cho Minio Server

Các bước thực hiện bao gồm:

  1. Cấu hình DNS trỏ về Minio Server
  2. Cài đặt Let’s Encrypt (SSL Miễn phí)
  3. Chạy Minio Server với PM2
  4. Cài đặt và cấu hình Nginx Server
  5. Tạo bucket và public bucket ra ngoài

1. Cấu hình DNS trỏ về Minio Server

Để sử dụng tên miền với Minio Server, chúng ta truy cập vào trang quản trị DNS của tên miền => Tạo bản ghi A => Trỏ về địa chỉ IP của Server

VD: Mình tạo bản ghi A và trỏ về địa chỉ IP sử dụng CloudFlare

2. Cài đặt Let’s Encrypt trên server (CentOS 7)

Hầu hết các trang web đều đang sử dụng https và các trình duyệt sẽ cảnh báo bảo mật nếu website của bạn không sử dụng kết nối bảo mật https nên chúng ta cài đặt chứng chỉ SSL miễn phí từ Let’s Encrypt. Bài viết này sẽ hướng dẫn cài đặt Let’s Encrypt trên CentOS 7. Nếu các bạn sử dụng Debian hay Ubuntu thì vui lòng tham khảo bài viết sau: “Hướng dẫn cài đặt SSL miễn phí Let’s Encrypt” hoặc chuyên nghiệp hơn là mua chứng chỉ tại Namecheap.

Để cài Let’s Encrypt trên CentOS 7 chúng ta thực hiện các lệnh bên dưới để cài đặt Certbot

sudo yum install epel-release
sudo yum update
sudo yum install certbot-nginx

Tiếp theo là phát hành SSL cho domain của chúng ta

certbot certonly --standalone -d <your_domain> --staple-ocsp -m <your_email> --agree-tos
  • <your_domain>: Là tên miền của bạn. VD: test.vinasupport.com
  • <your_email>: Email của bạn

Sau khi chạy lệnh trên, SSL sẽ được phát hành được lưu tại đường dẫn: /etc/letencrypt/live/<your_domain>

3. Chạy Minio Server với PM2

PM2 là gì?  Mặc định Minio sẽ chạy dưới dạng command line. Nhưng mình muốn chạy nó như 1 server có thể start/stop/restart được nên mình sử dụng PM2 để giữ nó chạy online 24/7. Để cài đặt PM2 các bạn vui lòng tham khảo bài viết: “Giữ ứng dụng chạy online 24/7 với PM2

Mình tạo 1 script là: start_minio.sh với nội dung như sau:

#!/bin/bash
export MINIO_DOMAIN=<your_domain>
export MINIO_ACCESS_KEY=<access_key>
export MINIO_SECRET_KEY=<secret_key>
/opt/minio server /opt/data --console-address 127.0.0.1:9000

Sau đó chạy các lệnh sau để PM2 sử dụng các script này quản lý Minio

sudo pm2 start /opt/scripts/start_minio.sh
sudo pm2 save
sudo pm2 startup systemd

4. Cài đặt và cấu hình Nginx Server

Mình có thử chạy command của Minio cung cấp để bind tới  cổng của 443 của máy chủ để chạy HTTPS nhưng không hiểu sao mình không thể truy cập tên miền kiểu https://domain.com mà phải truy cập kiểu http://domain.com:443 mới vào được. Chinh vì vậy mình setup Minio Server ở địa chỉ http://127.0.0.1:9000 và setup 1 Nginx Server và proxy pass tới địa chỉ của Minio Server.

Cài đặt Nginx Server (CentOS 7)

sudo yum install nginx

Cấu hình 1 https server, sửa file: /etc/nginx/nginx.conf

Sửa phần block server https như sau:

# Settings for a TLS enabled server.
#
    server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  _;
        root         /usr/share/nginx/html;
        ssl_certificate /etc/letsencrypt/live/test.vinasupport.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/test.vinasupport.com/privkey.pem; # managed by Certbot
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
        location / {
                proxy_pass      http://127.0.0.1:9000;
        }
#
#        error_page 404 /404.html;
#        location = /404.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#        location = /50x.html {
#        }
    }

Sau đó khởi động lại nginx server

5. Tạo bucket và public bucket ra ngoài

Mặc định các file, ảnh, … trong bucket của Minio các bạn chỉ có thể share và download chứ ko có link trực tiếp. Để tạo link trực tiếp (Direct Link) chúng ta cần thực hiện public bucket.

Các bạn cần 1 công cụ có tên là mc, được Mino cung cấp miễn phí tạo đây:  https://docs.min.io/docs/minio-client-complete-guide.html

Trên Linux Server các bạn có thể tải về bằng command wget và đưa nó vào thư mục /usr/bin để nó hoạt động như 1 command.

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo cp mc /usr/bin

Sau đó chúng ta sử dụng mc để tạo và public bucket ra ngoài

# add your host: mc config host add {hostName} {url} {apiKey} {apiSecret}
mc config host add minio http://127.0.0.1:9000 <access_key> <secret_key>

# create bucket: mc mb {host}/{bucket}
mc mb minio/uploads

# change bucket policy: mc policy {policy} {host}/{bucket}
mc policy set public minio/uploads

Ở đây mình tạo 1 alias name là “minio” và public bucket “uploads

Bạn có thể kiểm tra lại bằng lệnh sau:

mc config host ls

 

 

Nguồn vinasupport.com

             
SHARE

Bài viết liên quan

mode_edit Bình luận của bạn

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

account_circle
web