1. Tổng quan.
Snipe-IT là một phần mềm quản lý tài sản mã nguồn mở (open source) được sử dụng để theo dõi và quản lý tài sản vật lý, như máy tính, thiết bị mạng, phần mềm, linh kiện, và nhiều hơn nữa. Snipe-IT giúp tổ chức có thể quản lý tài sản một cách hiệu quả, từ việc ghi nhận thông tin, trạng thái, địa điểm đến lịch sử sử dụng và bảo trì.
Docker là một nền tảng ảo hóa cấp cao (containerization platform) cho phép bạn đóng gói và chạy ứng dụng cùng với các phụ thuộc của chúng trong một môi trường độc lập gọi là container. Mỗi container hoạt động như một môi trường cô lập, đảm bảo tính nhất quán và độ tin cậy của ứng dụng khi chạy trên nhiều hệ điều hành và môi trường khác nhau.
Triển khai Snipe-IT bằng Docker mang lại một số lợi ích quan trọng như sau:
- Dễ dàng triển khai: Docker cho phép đóng gói ứng dụng Snipe-IT cùng với tất cả các phụ thuộc của nó vào một container duy nhất. Điều này giúp giảm thiểu các vấn đề liên quan đến cài đặt và cấu hình, và giúp bạn triển khai Snipe-IT nhanh chóng trên môi trường của mình.
- Độc lập với môi trường: Snipe-IT và các phụ thuộc của nó được đóng gói trong một container Docker, tách biệt hoàn toàn với hệ thống host. Điều này giúp đảm bảo rằng môi trường Snipe-IT hoạt động như mong muốn, không bị ảnh hưởng bởi các yếu tố khác trong hệ thống.
- Dễ dàng di động: Với Docker, bạn có thể di chuyển và triển khai Snipe-IT trên nhiều hệ thống và môi trường khác nhau một cách dễ dàng. Container Docker đảm bảo tính di động và khả năng nhất quán của ứng dụng, giúp bạn dễ dàng chuyển đổi giữa các môi trường phát triển, thử nghiệm và sản xuất.
- Quản lý tài nguyên hiệu quả: Docker cho phép bạn quản lý tài nguyên của Snipe-IT một cách hiệu quả. Bạn có thể chỉ định số lượng tài nguyên (bộ nhớ, CPU, lưu trữ) được cung cấp cho container Snipe-IT, điều này giúp tối ưu hóa hiệu suất và sử dụng tài nguyên.
- Cộng đồng sôi nổi: Snipe-IT và Docker đều có cộng đồng lớn, năng động và sôi nổi. Bạn có thể tìm thấy nhiều tài liệu hướng dẫn, tài nguyên, và hỗ trợ từ cộng đồng Docker và Snipe-IT để giúp bạn triển khai và quản lý Snipe-IT một cách dễ dàng và hiệu quả.
Như vậy việc triển khai Snipe-IT bằng Docker mang lại sự tiện lợi, di động, và quản lý tài nguyên hiệu quả. Đồng thời, nó giúp bạn dễ dàng triển khai và quản lý Snipe-IT trên nhiều môi trường khác nhau một cách nhất quán và tin cậy.
2. Triển khai.
Để triển khai Snipe-IT
bằng Docker, bạn cần thực hiện các bước sau:
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 script.
Mình sẽ dùng vi snipe-it.sh
và dán nội dung dưới vào file này.
#!/bin/bash
cat > docker-compose.yml << 'OEF'
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:
OEF
cat > ./.env << 'OEF'
# 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://localhost
APP_TIMEZONE=Asia/Ho_Chi_Minh
APP_LOCALE=vi
OEF
sed -i "s#APP_URL=.*#APP_URL=http://$1#" ./.env
docker-compose up -d
sleep 5
api_token=$(docker exec -it snipe-server sh -c 'php artisan key:generate --show' | sed -e 's/\x1b\[[0-9;]*m//g' | tr -d '\r')
sed -i "s#APP_KEY=.*#APP_KEY=$api_token#" ./.env
cat ./.env
docker-compose down && docker-compose up -d --build
Script trên là một tập tin shell script, được sử dụng để triển khai Snipe-IT bằng Docker thông qua việc tạo và cấu hình các container Docker và các biến môi trường cần thiết.
Dưới đây là giải thích ý nghĩa của từng phần trong script:
- Đoạn đầu tiên tạo file
docker-compose.yml
:- Tạo một file
docker-compose.yml
để định nghĩa cấu hình cho các service Snipe-IT và MySQL. - Service
snipe-mysql
sử dụng image MySQL phiên bản 5.6, định cấu hình biến môi trường từ file.env
, và lưu trữ dữ liệu MySQL trong một volume được gọi làsnipesql-vol
. - Service
snipe-it
sử dụng image Snipe-IT, định cấu hình biến môi trường từ file.env
, mở cổng 80 để truy cập vào Snipe-IT và phụ thuộc vào servicesnipe-mysql
.
- Tạo một file
- Tiếp theo, tạo file
.env
để định cấu hình các biến môi trường:- Điều chỉnh các giá trị trong file
.env
để cấu hình Snipe-IT và MySQL. - Các giá trị được lưu trữ trong file
.env
bao gồm thông tin cấu hình MySQL, thông tin cấu hình email, và các cài đặt Snipe-IT.
- Điều chỉnh các giá trị trong file
- Dòng lệnh
sed
thay đổi giá trịAPP_URL
trong file.env
:- Lệnh này sẽ thay thế giá trị
APP_URL
trong file.env
bằng giá trị được chuyển đến như một đối số khi chạy script.
- Lệnh này sẽ thay thế giá trị
- Dòng lệnh
docker-compose up -d
:- Lệnh này sẽ chạy các container Snipe-IT và MySQL từ file
docker-compose.yml
và các biến môi trường từ file.env
trong chế độ nền (-d
).
- Lệnh này sẽ chạy các container Snipe-IT và MySQL từ file
- Dòng lệnh
sleep 5
:- Lệnh này dừng script trong 5 giây để đảm bảo rằng container đã khởi động và sẵn sàng để thực hiện các lệnh tiếp theo.
- Dòng lệnh để tạo APP_KEY và cập nhật lại file
.env
:- Lệnh này sẽ thực thi lệnh
php artisan key:generate --show
bên trong containersnipe-server
để tạo ra APP_KEY (API Token) cho Snipe-IT. - Sau đó, giá trị APP_KEY mới này được cập nhật lại vào file
.env
để Snipe-IT có thể sử dụng.
- Lệnh này sẽ thực thi lệnh
- Dòng lệnh
cat ./.env
:- Lệnh này in ra nội dung của file
.env
sau khi đã cập nhật.
- Lệnh này in ra nội dung của file
- Dòng lệnh
docker-compose down && docker-compose up -d --build
:- Lệnh này dừng và xóa các container hiện tại và sau đó tạo lại và chạy lại các container từ đầu, bao gồm việc xây dựng lại image nếu có thay đổi trong Dockerfile hoặc các thành phần liên quan.
Tổng quan, script này tạo ra các container Docker Snipe-IT và MySQL, cấu hình biến môi trường, và cập nhật APP_KEY cho Snipe-IT, cho phép bạn triển khai Snipe-IT một cách tự động và dễ dàng sử dụng Docker Compose.
Bước 4 – Chạy script trên.
Đầu tiên hãy phân quyền thực thi cho file snipe-it.sh
.
chmod +x snipe-it.sh
Tiếp theo bạn hãy chạy script trên và truyền đối số đầu tiên là IP của server, ví dụ dưới IP 192.168.1.209 chính là IP của chính Server Snipe-IT mà bạn định triển khai.
./snipe-it.sh 192.168.1.209
Bước 5 – 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.