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 --buildScript 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-mysqlsử 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-itsử 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
.envbao 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
sedthay đổi giá trịAPP_URLtrong file.env:- Lệnh này sẽ thay thế giá trị
APP_URLtrong file.envbằ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.ymlvà các biến môi trường từ file.envtrong 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 --showbê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
.envsau 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.shTiế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.209Bướ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.

