Thursday, November 21, 2024

Cách triển khai Snipe IT bằng Docker và Docker Compose

-

1. Tổng quan.

Snipe-IT là một phần mềm quản lý tài sản mã nguồn mở, được thiết kế để giúp các tổ chức theo dõi, quản lý và bảo quản tài sản vật lý, như máy tính, thiết bị mạng, thiết bị điện tử và các tài sản khác. Đây là một hệ thống quản lý tài sản mạnh mẽ và linh hoạt, cung cấp các tính năng quan trọng như quản lý cấu hình, lịch sử sửa chữa, theo dõi mượn/trả, theo dõi vị trí và nhiều tính năng khác.

Snipe-IT có thể chạy trên nhiều hệ điều hành, bao gồm:

  • Hệ điều hành Windows: Snipe-IT có thể chạy trên các phiên bản Windows như Windows Server hoặc Windows 10.
  • Hệ điều hành Linux: Snipe-IT có thể chạy trên các phiên bản Linux như Ubuntu, CentOS, Debian và nhiều hệ điều hành Linux khác.
  • Hệ điều hành macOS: Snipe-IT cũng có thể chạy trên macOS, cho phép người dùng trên các thiết bị Mac sử dụng phần mềm này để quản lý tài sản.

Snipe-IT phù hợp cho nhiều loại doanh nghiệp và tổ chức, bao gồm:

  • Doanh nghiệp vừa và nhỏ: Snipe-IT cung cấp một giải pháp quản lý tài sản linh hoạt và dễ sử dụng cho các doanh nghiệp vừa và nhỏ.
  • Tổ chức giáo dục: Trường học, trung tâm đào tạo và các tổ chức giáo dục khác có thể sử dụng Snipe-IT để quản lý các tài sản công nghệ trong môi trường học tập.
  • Tổ chức công: Snipe-IT cũng phù hợp cho các tổ chức công, đơn vị chính phủ hoặc tổ chức phi lợi nhuận để quản lý tài sản và các thiết bị công cộng.

Ưu điểm của Snipe-IT bao gồm:

  • Mã nguồn mở: Snipe-IT là một phần mềm mã nguồn mở, cho phép người dùng tùy chỉnh và mở rộng theo nhu cầu cụ thể.
  • Giao diện người dùng thân thiện: Giao diện Snipe-IT dễ sử dụng, có thể được tùy chỉnh để phù hợp với yêu cầu của người dùng.
  • Quản lý toàn diện: Snipe-IT cung cấp các tính năng quản lý tài sản toàn diện, bao gồm theo dõi, bảo trì, mượn/trả, quản lý lịch sử và nhiều tính năng khác.
  • Theo dõi vị trí: Snipe-IT cho phép người dùng theo dõi vị trí vật lý của các tài sản và thiết bị.

Nhược điểm của Snipe-IT có thể bao gồm:

  • Yêu cầu cấu hình: Snipe-IT có thể yêu cầu một số yêu cầu cấu hình hệ thống nhất định để chạy một cách tốt nhất.
  • Hỗ trợ kỹ thuật: Do là một phần mềm mã nguồn mở, hỗ trợ kỹ thuật có thể hạn chế so với các sản phẩm thương mại.

Các tính năng nổi bật của Snipe-IT bao gồm:

  • Quản lý tài sản: Snipe-IT cung cấp khả năng quản lý tài sản vật lý từ việc gắn kết, cấu hình, đăng ký, kiểm kê, mượn/trả và báo cáo.
  • Theo dõi lịch sử: Snipe-IT theo dõi lịch sử của các tài sản, bao gồm thông tin sửa chữa, di chuyển và sử dụng.
  • Bảo trì và bảo dưỡng: Snipe-IT cho phép lập lịch bảo trì định kỳ và theo dõi trạng thái bảo trì của các tài sản.
  • Tích hợp API: Snipe-IT cung cấp API để tích hợp với các ứng dụng và hệ thống khác.
  • Giao diện đa ngôn ngữ: Snipe-IT hỗ trợ nhiều ngôn ngữ khác nhau, cho phép người dùng sử dụng trong môi trường đa quốc gia.

Đây chỉ là một số tính năng và thông tin cơ bản về Snipe-IT. Có thể có nhiều tính năng khác tuỳ thuộc vào phiên bản và cấu hình được tùy chỉnh của người dùng.

2. Triển khai Snipe-IT sử dụng Container.

Bước 1 – Cài đặt Docker từ hướng dẫn https://wiki.hoanghd.com/cai-dat-docker-tren-ubuntu/.

Bước 2 – Cài đặt Docker Compose từ hướng dẫn https://wiki.hoanghd.com/cai-dat-docker-compose-tren-ubuntu/.

Bước 3 – Tạo file docker-compose.yml với nội dung bằng cách sử dụng vi docker-compose.yml.

version: '3'
services:
  snipe-mysql:
    container_name: snipe-mysql
    image: mysql:5.6
    env_file:
      - ./.env
    volumes:
      - snipesql-vol:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password
    expose:
      - "3306"
  snipe-it:
    container_name: snipe-server
    image: snipe/snipe-it
    env_file:
      - ./.env
    ports:
      - "80:80"
    depends_on:
      - snipe-mysql
volumes:
  snipesql-vol:

Trong file tin cấu hình docker-compose.yaml trên, đoạn mã định nghĩa hai dịch vụ được sử dụng để triển khai Snipe-IT:

  • snipe-mysql: Dịch vụ MySQL 5.6:
    • container_name: Tên của container chứa MySQL.
    • image: Image của MySQL 5.6 được sử dụng.
    • env_file: Đường dẫn đến file tin .env, chứa các biến môi trường được sử dụng để cấu hình MySQL (như đã giải thích trước đó).
    • volumes: Định nghĩa một khối dữ liệu (volume) có tên snipesql-vol để lưu trữ dữ liệu MySQL.
    • command: Tham số command được truyền khi khởi chạy container MySQL, trong trường hợp này là --default-authentication-plugin=mysql_native_password để sử dụng phương thức xác thực mặc định của MySQL 5.6.
    • expose: Mở cổng 3306 để cho phép kết nối đến MySQL từ các dịch vụ khác trong mạng nội bộ của Docker.
  • snipe-it: Dịch vụ Snipe-IT:
    • container_name: Tên của container chứa Snipe-IT.
    • image: Image của Snipe-IT được sử dụng.
    • env_file: Đường dẫn đến file tin .env, chứa các biến môi trường được sử dụng để cấu hình Snipe-IT (như đã giải thích trước đó).
    • ports: Mở cổng 80 của container để có thể truy cập Snipe-IT qua HTTP từ bên ngoài Docker.
    • depends_on: Chỉ định rằng dịch vụ Snipe-IT phụ thuộc vào dịch vụ snipe-mysql, tức là Snipe-IT chỉ được khởi chạy sau khi MySQL đã khởi chạy thành công.

Ngoài ra, file tin cấu hình docker-compose.yaml còn định nghĩa một volume có tên snipesql-vol được sử dụng để lưu trữ dữ liệu của MySQL. Volume này sẽ giữ cho dữ liệu không bị mất khi container MySQL bị xóa hoặc khởi động lại.

Bước 4 – Tạo file ./.env với nội dung bằng cách sử dụng vi ./.env.

# Mysql Parameters
MYSQL_PORT_3306_TCP_ADDR=snipe-mysql
MYSQL_PORT_3306_TCP_PORT=3306
MYSQL_ROOT_PASSWORD=Hoanghd164
MYSQL_DATABASE=snipeit
MYSQL_USER=hoanghd
MYSQL_PASSWORD=Hoanghd164

# Email Parameters
MAIL_PORT_587_TCP_ADDR=smtp.hoanghd.com
MAIL_PORT_587_TCP_PORT=587
MAIL_ENV_FROM_ADDR=hoanghd@hoanghd.com
MAIL_ENV_FROM_NAME=Ha Dang Hoang
MAIL_ENV_USERNAME=hoanghd
MAIL_ENV_PASSWORD=Hoanghd164

# Snipe-IT Settings
APP_ENV=production
APP_DEBUG=false
APP_KEY={{INSERT_API_TOKEN}}
APP_URL=http://192.168.13.209
APP_TIMEZONE=Asia/Ho_Chi_Minh 
APP_LOCALE=vi

Nhớ thay thế các tham số cho phù hợp với thông tin của bạn. Dưới đây là các giải thích cho các tham số cấu hình trong file tin môi trường (.env) của Snipe-IT:

  • MYSQL_PORT_3306_TCP_ADDR: Địa chỉ IP hoặc tên máy chủ của MySQL.
  • MYSQL_PORT_3306_TCP_PORT: Cổng kết nối MySQL.
  • MYSQL_ROOT_PASSWORD: Mật khẩu của người dùng root trong MySQL.
  • MYSQL_DATABASE: Tên cơ sở dữ liệu MySQL mà Snipe-IT sẽ sử dụng.
  • MYSQL_USER: Tên người dùng MySQL được sử dụng bởi Snipe-IT.
  • MYSQL_PASSWORD: Mật khẩu của người dùng MySQL.
  • MAIL_PORT_587_TCP_ADDR: Địa chỉ IP hoặc tên máy chủ của SMTP server (máy chủ email).
  • MAIL_PORT_587_TCP_PORT: Cổng kết nối SMTP.
  • MAIL_ENV_FROM_ADDR: Địa chỉ email nguồn (người gửi).
  • MAIL_ENV_FROM_NAME: Tên người gửi trong email.
  • MAIL_ENV_USERNAME: Tên người dùng (username) để xác thực với SMTP server.
  • MAIL_ENV_PASSWORD: Mật khẩu để xác thực với SMTP server.
  • APP_ENV: Môi trường ứng dụng của Snipe-IT, trong trường hợp này là production (triển khai thực tế).
  • APP_DEBUG: Có bật chế độ gỡ lỗi (debug mode) cho ứng dụng hay không (true hoặc false).
  • APP_KEY: Khóa ứng dụng, thường được tạo tự động và không nên thay đổi thủ công (riêng trường này ở bước này bạn hãy để trống, chúng ta sẽ lấy token và điền vào nó ở các bước tiếp theo).
  • APP_URL: URL gốc của ứng dụng Snipe-IT.
  • APP_TIMEZONE: Múi giờ của ứng dụng, ở đây là Asia/Ho_Chi_Minh (Giờ chuẩn Đông Á).
  • APP_LOCALE: Ngôn ngữ và vùng địa lý được sử dụng trong ứng dụng, ở đây là tiếng Việt (vi).

Các thông số này được sử dụng để cấu hình Snipe-IT để kết nối với cơ sở dữ liệu MySQL và gửi email thông qua máy chủ SMTP.

Bước 5 – Chạy Docker Compose.

sudo docker-compose up -d

Quá trình lệnh docker-compose up -d diễn ra như sau:

$ sudo docker-compose up -d
[+] Running 44/44
 ⠿ snipe-mysql Pulled                                                                                                                                                                                            38.3s
   ⠿ 35b2232c987e Pull complete                                                                                                                                                                                  25.6s
   ⠿ fc55c00e48f2 Pull complete                                                                                                                                                                                  25.7s
   ⠿ 0030405130e3 Pull complete                                                                                                                                                                                  26.0s
   ⠿ e1fef7f6a8d1 Pull complete                                                                                                                                                                                  26.3s
   ⠿ 1c76272398bb Pull complete                                                                                                                                                                                  26.6s
   ⠿ f57e698171b6 Pull complete                                                                                                                                                                                  27.8s
   ⠿ f5b825b269c0 Pull complete                                                                                                                                                                                  28.1s
   ⠿ dcb0af686073 Pull complete                                                                                                                                                                                  28.2s
   ⠿ 27bbfeb886d1 Pull complete                                                                                                                                                                                  32.6s
   ⠿ 6f70cc868145 Pull complete                                                                                                                                                                                  34.0s
   ⠿ 1f6637f4600d Pull complete                                                                                                                                                                                  34.2s
 ⠿ snipe-it Pulled                                                                                                                                                                                               45.3s
   ⠿ 6b851dcae6ca Pull complete                                                                                                                                                                                   4.9s
   ⠿ cbbd533a8158 Pull complete                                                                                                                                                                                  23.3s
   ⠿ 74783b11fee9 Pull complete                                                                                                                                                                                  23.5s
   ⠿ 258a445e87d7 Pull complete                                                                                                                                                                                  23.6s
   ⠿ b23b890384ca Pull complete                                                                                                                                                                                  23.7s
   ⠿ 05c8ee495844 Pull complete                                                                                                                                                                                  23.8s
   ⠿ fe4a682d46aa Pull complete                                                                                                                                                                                  23.9s
   ⠿ aa853f31ef78 Pull complete                                                                                                                                                                                  24.0s
   ⠿ 1bb109b419e7 Pull complete                                                                                                                                                                                  24.1s
   ⠿ 79ea795ab7ad Pull complete                                                                                                                                                                                  24.2s
   ⠿ 44d4fe0ec77d Pull complete                                                                                                                                                                                  24.2s
   ⠿ 2129d832cdc6 Pull complete                                                                                                                                                                                  24.3s
   ⠿ a91bc8ea7d40 Pull complete                                                                                                                                                                                  24.4s
   ⠿ 92f1a2bc890c Pull complete                                                                                                                                                                                  24.5s
   ⠿ 0e883498e236 Pull complete                                                                                                                                                                                  24.6s
   ⠿ b0677e9272ae Pull complete                                                                                                                                                                                  24.7s
   ⠿ 7e4786ffc7ce Pull complete                                                                                                                                                                                  24.7s
   ⠿ 117eeb2d949b Pull complete                                                                                                                                                                                  24.8s
   ⠿ dc2310e76cb2 Pull complete                                                                                                                                                                                  24.9s
   ⠿ 93991ac326eb Pull complete                                                                                                                                                                                  28.7s
   ⠿ 56a6a53c4938 Pull complete                                                                                                                                                                                  28.8s
   ⠿ 40884347234f Pull complete                                                                                                                                                                                  28.8s
   ⠿ 4f4fb700ef54 Pull complete                                                                                                                                                                                  28.9s
   ⠿ 8cc944f4b5f4 Pull complete                                                                                                                                                                                  29.3s
   ⠿ 6832bf933c83 Pull complete                                                                                                                                                                                  33.9s
   ⠿ c69748b31f84 Pull complete                                                                                                                                                                                  34.3s
   ⠿ c2571b2e4806 Pull complete                                                                                                                                                                                  34.4s
   ⠿ 27310da0ae1c Pull complete                                                                                                                                                                                  41.0s
   ⠿ d30123fae3f3 Pull complete                                                                                                                                                                                  41.1s
   ⠿ 2b8e74d18921 Pull complete                                                                                                                                                                                  41.2s
   ⠿ 904471d89b38 Pull complete                                                                                                                                                                                  41.2s
[+] Running 4/4
 ⠿ Network root_default        Created                                                                                                                                                                            0.1s
 ⠿ Volume "root_snipesql-vol"  Created                                                                                                                                                                            0.0s
 ⠿ Container snipe-mysql       Started                                                                                                                                                                            5.5s
 ⠿ Container snipe-server      Started                                                                                                                                                                            1.8s

Chờ tiến trình pull image và deploy container xong, bạn hãy sử dụng lệnh docker ps hoặc docker-compose ps để xác nhận các container đã triển khai thành công.

– Với Docker Compose.

$ sudo docker-compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
snipe-mysql         "docker-entrypoint.s…"   snipe-mysql         running             3306/tcp
snipe-server        "/startup.sh"            snipe-it            running             0.0.0.0:80->80/tcp, :::80->80/tcp

Hoặc Docker.

$ sudo docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED              STATUS              PORTS                                        NAMES
cf0a0abf1d25   snipe/snipe-it   "/startup.sh"            About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp   snipe-server
78ef2c61eca4   mysql:5.6        "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp                                     snipe-mysql

Mặc dù đã triển khai xong các container nhưng các bạn vẫn chưa truy cập được, bằng chứng là đây.

Lý do là trong file ./.env các bạn chưa lấy được token và truyền vào biến APP_KEY cho nó.

Bước 6 – Lấy Token.

Sử dụng lệnh docker exec -it <snipe_container_name> sh để truy cập vào container snipe_container_name.

sudo docker exec -it snipe-server sh

Sau khi vào được container bạn hãy sử dụng lệnh php artisan key:generate --show để lấy token. Theo thông tin ở dưới, token chúng ta lấy được sẽ là base64:zQivEm5BOA2vMLRkvCuITWsKR9p/LGZ1TpQKn9u+/m8=.

$ sudo docker exec -it snipe-server sh
# sudo php artisan key:generate --show
base64:zQivEm5BOA2vMLRkvCuITWsKR9p/LGZ1TpQKn9u+/m8=

Lưu ý quan trọng là mỗi lần chúng ta chạy lại lệnh php artisan key:generate --show thì hệ thống sẽ cho bạn một token khác nhau nhé, hãy chắc chắn bạn sử dụng token cuối cùng để gắn cho biến APP_KEY.

Sau khi lấy được token, bạn hãy sử dụng lệnh exit để thoát khỏi container.

Bước 7 – Truyền token vừa lấy vào biến APP_KEY.

Hãy mở file ./.env và truyền token vào biến APP_KEY và lưu lại.

# Mysql Parameters
MYSQL_PORT_3306_TCP_ADDR=snipe-mysql
MYSQL_PORT_3306_TCP_PORT=3306
MYSQL_ROOT_PASSWORD=Hoanghd164
MYSQL_DATABASE=snipeit
MYSQL_USER=hoanghd
MYSQL_PASSWORD=Hoanghd164

# Email Parameters
MAIL_PORT_587_TCP_ADDR=smtp.hoanghd.com
MAIL_PORT_587_TCP_PORT=587
MAIL_ENV_FROM_ADDR=hoanghd@hoanghd.com
MAIL_ENV_FROM_NAME=Ha Dang Hoang
MAIL_ENV_USERNAME=hoanghd
MAIL_ENV_PASSWORD=Hoanghd164

# Snipe-IT Settings
APP_ENV=production
APP_DEBUG=false
APP_KEY=base64:zQivEm5BOA2vMLRkvCuITWsKR9p/LGZ1TpQKn9u+/m8=
APP_URL=http://192.168.13.209
APP_TIMEZONE=Asia/Ho_Chi_Minh 
APP_LOCALE=vi

Bước 8 – Build lại container.

Ssau khi mọi thứ đã hoàn thành, bạn hãy build lại container đang chạy bằng lệnh sudo docker-compose down && docker-compose up -d --build.

$ sudo docker-compose down && docker-compose up -d --build
[+] Running 3/3
 ⠿ Container snipe-server  Removed                                                                                                                                                                                0.8s
 ⠿ Container snipe-mysql   Removed                                                                                                                                                                                2.2s
 ⠿ Network root_default    Removed                                                                                                                                                                                0.1s
[+] Running 3/3
 ⠿ Network root_default    Created                                                                                                                                                                                0.1s
 ⠿ Container snipe-mysql   Started                                                                                                                                                                                1.0s
 ⠿ Container snipe-server  Started                                                                                                                                                                                1.7s

Bước 9 – Truy cập Snipe-IT bằng trình duyệt.

Sử dụng url chúng ta đã khai báo ở biến APP_URL=http://192.168.13.209 để truy cập vào GUI của Snipe-IT. Bấm Next: Create Database Tables để chuyển qua trang kế tiếp.

Phần này thiết lập Database nhưng cấu hình container của mình đã thiết lập cho các bạn sẵn rồi nên chúng ta bấm Next: Create User để chuyển sang trang kết tiếp.

Hãy khai báo thông tin mà bạn mong muốn và bấm Next: Save User để kết thúc.

Kết quả cuối cùng.

Lưu ý là phần mềm Snipe-IT do nhiều bạn mong muốn có một hướng dẫn cài đặt trên Linux nên mình chỉ hướng dẫn cài đặt thôi chứ mình không biết dùng nó.

Cách dùng nó như thế nào các bạn tự tìm hiểu nhé.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories