Saturday, January 18, 2025

Cài đặt Snipe It trên Ubuntu 22.04

-

1. Tổng quan.

Snipe It là một phần mềm mã nguồn mở được sử dụng để quản lý tài sản. Nó giúp các tổ chức và doanh nghiệp theo dõi, quản lý và bảo trì các tài sản vật lý của họ như máy tính, thiết bị, công cụ, phương tiện di chuyển và nhiều thứ khác.

Phần mềm Snipe It cung cấp một giao diện dễ sử dụng để nhập liệu và lưu trữ thông tin về tài sản, cho phép người dùng:

  • Đăng ký các tài sản mới: Người dùng có thể thêm thông tin về các tài sản mới, bao gồm tên, mô tả, số lượng, giá trị, ngày mua, và nhiều thông tin khác.
  • Theo dõi lịch sử bảo trì: Snipe It cho phép người dùng ghi chép các hoạt động bảo trì và sửa chữa của từng tài sản, đảm bảo chúng luôn trong tình trạng hoạt động tốt.
  • Xác định vị trí: Người dùng có thể gán vị trí và địa điểm của từng tài sản, giúp dễ dàng tìm kiếm và kiểm tra chúng.
  • Xem lịch sử tài sản: Snipe It cho phép người dùng xem lịch sử di chuyển và sử dụng của tài sản, giúp quản lý tài sản một cách hiệu quả.
  • Tạo báo cáo: Phần mềm cung cấp tính năng tạo các báo cáo thống kê và phân tích về tình trạng tài sản và việc quản lý chúng.

Với giao diện thân thiện và tính năng mạnh mẽ, Snipe It là một công cụ hữu ích cho việc quản lý tài sản của các tổ chức và doanh nghiệp.

2. Cài đặt Snipe-IT trên Ubuntu 22.04.

Bước 1 – Cài đặt PHP7.4 (Yêu cầu phải PHP 7.x trở lên nhé).

Cập nhật danh sách các gói phần mềm trên hệ thống của bạn từ các kho lưu trữ được cấu hình.

sudo apt-get update

Cài đặt gói software-properties-common, cho phép bạn quản lý các kho lưu trữ PPA trên hệ thống của bạn.

sudo apt -y install software-properties-common

Thêm PPA của Ondřej Surý vào hệ thống của bạn. Ondřej Surý là một người duy trì các phiên bản PHP mới và cũ cho Ubuntu. Việc thêm PPA này sẽ cho phép bạn cài đặt PHP từ PPA của ông.

sudo add-apt-repository ppa:ondrej/php

Cập nhật danh sách các gói phần mềm trên hệ thống sau khi đã thêm PPA mới.

sudo apt-get update

Cài đặt gói PHP 7.4 từ PPA của Ondřej Surý. Khi bạn chạy lệnh này, hệ thống sẽ tải xuống và cài đặt PHP 7.4 cùng với các gói phụ thuộc liên quan.

sudo apt -y install php7.4

Kiểm tra phiên bản của PHP đã cài đặt trên hệ thống.

php -v

Đầu ra kết quả.

$ php -v
PHP 7.4.33 (cli) (built: Jun  8 2023 15:23:32) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.33, Copyright (c), by Zend Technologies

Bước 2 – Cài đặt các gói phụ thuộc PHP 7.4 cần thiết để chạy các ứng dụng PHP trên hệ thống Ubuntu của bạn.

Chúng ta thực hiện cài đặt một số gói phần mềm liên quan đến PHP và PHP-FPM.

sudo apt-get install -y php7.4-cli php7.4-json php7.4-common php7.4-mysql php7.4-zip php7.4-gd php7.4-mbstring php7.4-curl php7.4-xml php7.4-bcmath php7.4-fpm

Các lệnh trên được sử dụng để cài đặt các gói phụ thuộc PHP 7.4 cần thiết để chạy một ứng dụng PHP trên hệ thống Ubuntu. Dưới đây là mô tả ngắn gọn về tác dụng của từng lệnh:

  • sudo apt-get install -y php7.4-cli: Cài đặt PHP 7.4 CLI (Command Line Interface) – phiên bản dùng cho dòng lệnh và script.
  • sudo apt-get install -y php7.4-json: Cài đặt gói hỗ trợ JSON cho PHP 7.4.
  • sudo apt-get install -y php7.4-common: Cài đặt các file chung cho PHP 7.4.
  • sudo apt-get install -y php7.4-mysql: Cài đặt gói hỗ trợ MySQL cho PHP 7.4.
  • sudo apt-get install -y php7.4-zip: Cài đặt gói hỗ trợ ZIP cho PHP 7.4.
  • sudo apt-get install -y php7.4-gd: Cài đặt gói hỗ trợ GD (thư viện xử lý hình ảnh) cho PHP 7.4.
  • sudo apt-get install -y php7.4-mbstring: Cài đặt gói hỗ trợ mbstring (Multibyte String) cho PHP 7.4.
  • sudo apt-get install -y php7.4-curl: Cài đặt gói hỗ trợ CURL (Client URL Library) cho PHP 7.4.
  • sudo apt-get install -y php7.4-xml: Cài đặt gói hỗ trợ XML cho PHP 7.4.
  • sudo apt-get install -y php7.4-bcmath: Cài đặt gói hỗ trợ BCMath (thư viện toán học) cho PHP 7.4.
  • sudo apt-get install -y php7.4-fpm: Cài đặt PHP 7.4 FPM (FastCGI Process Manager) – phiên bản dùng cho máy chủ web như Nginx hoặc Apache.

Bước 3 – Cài đặt MariaDB.

Cài đặt gói software-properties-common để có thể sử dụng lệnh add-apt-repository và các chức năng liên quan khác.

sudo apt install software-properties-common -y

Tải xuống file mariadb_repo_setup từ trang web của MariaDB. File này chứa các chỉ thị để thêm kho lưu trữ MariaDB vào hệ thống.

sudo curl -LsS -O https://downloads.mariadb.com/MariaDB/mariadb_repo_setup

Chạy file mariadb_repo_setup vừa tải xuống với thông số --mariadb-server-version=10.6 để thêm kho lưu trữ chứa MariaDB Server 10.6 vào hệ thống.

sudo bash mariadb_repo_setup --mariadb-server-version=10.6

Cập nhật danh sách các gói phần mềm trên hệ thống từ các kho lưu trữ đã được thêm vào.

sudo apt update

Cài đặt các gói phần mềm liên quan đến MariaDB, bao gồm mariadb-common (gói chung), mariadb-server-10.6 (phiên bản MariaDB Server 10.6) và mariadb-client-10.6 (phiên bản MariaDB Client 10.6).

sudo apt -y install mariadb-common mariadb-server-10.6 mariadb-client-10.6 

Khởi động dịch vụ MariaDB Server sau khi cài đặt và cấu hình MariaDB Server để tự động khởi động cùng hệ thống khi khởi động lại.

sudo systemctl start mariadb
sudo systemctl enable mariadb

Bước 4 – Cấu hình MariaDB.

Thay đổi mật khẩu cho tài khoản người dùng “root” của MariaDB (hoặc MySQL) tại máy chủ “localhost”. Sau khi chạy lệnh này, mật khẩu của tài khoản “root” sẽ được đặt thành “hoanghd”.

sudo mysql -u root -e  "ALTER USER 'root'@'localhost' IDENTIFIED BY 'hoanghd';"

Đăng nhập vào cơ sở dữ liệu MariaDB (hoặc MySQL) bằng tài khoản “root” có mật khẩu “hoanghd” và sau đó tạo một cơ sở dữ liệu mới có tên là “snipeit_db”. Cơ sở dữ liệu này sẽ sử dụng bộ ký tự utf8mb4 để hỗ trợ lưu trữ các ký tự đa byte như tiếng Việt.

sudo mysql -u root -phoanghd -e "create database snipeit_db character set utf8mb4 collate utf8mb4_bin;"

Cấp quyền truy cập cho người dùng “root” vào cơ sở dữ liệu “snipeit_db”. Người dùng “root” có thể đăng nhập từ localhost và sử dụng mật khẩu là “hoanghd”. Đồng thời, người dùng này sẽ có toàn quyền (“all privileges”) trên tất cả các bảng trong cơ sở dữ liệu “snipeit_db”.

sudo mysql -u root -phoanghd -e "grant all privileges on snipeit_db.* to root@localhost identified by 'hoanghd';"

Sử dụng lệnh này để đảm bảo rằng các thay đổi được áp dụng ngay lập tức.

sudo mysql -u root -phoanghd -e "FLUSH PRIVILEGES;"

Bước 5 – Cài đặt công cụ Composer.

Composer là một công cụ mã nguồn mở rất phổ biến trong cộng đồng phát triển PHP. Nó cho phép người phát triển xác định các gói phụ thuộc của dự án trong file composer.json. Khi thực hiện lệnh composer install hoặc composer update, Composer sẽ tải xuống và cài đặt các gói phụ thuộc này từ các kho lưu trữ trực tuyến. Điều này giúp giảm thiểu công việc quản lý và giải quyết các gói phụ thuộc, và đảm bảo dự án PHP của bạn có thể hoạt động một cách đáng tin cậy với các phiên bản phù hợp của các gói phụ thuộc.

Sử dụng công cụ curl để tải xuống file installer từ trang web của Composer. Tùy chọn -sS tắt hiển thị thông báo tiến trình và hiển thị lỗi nếu có. Sau khi file installer được tải xuống, nó sẽ được đưa vào luồng đầu vào của trình thông dịch PHP (php), cho phép trình thông dịch PHP thực thi mã bên trong file installer.

sudo curl -sS https://getcomposer.org/installer | php

Di chuyển file composer.phar đến đường dẫn /usr/local/bin/composer. Thư mục /usr/local/bin/ đã được thiết lập trong biến môi trường $PATH, điều này cho phép bạn gọi Composer từ bất kỳ vị trí nào trong hệ thống thông qua lệnh composer.

sudo mv composer.phar /usr/local/bin/composer

Bước 6 – Cài đặt Git, tải sourcode của Snipe-IT về máy.

Để cài đặt Git sử dụng lệnh dưới.

sudo apt -y install git

Vào thư mục /var/www/ để clone source code của Snipe-IT về thư mục này và di chuyển vào thư mục source code vừa clone về.

sudo cd /var/www/
sudo git clone https://github.com/snipe/snipe-it.git
sudo cd snipe-it

Trong thư mục này có file .env.example, chúng ta đổi tên file này thành file .env để sử dụng.

sudo mv /var/www/snipe-it/.env.example /var/www/snipe-it/.env

Bước 7 – Thiết lập các thông tin trong file .env vừa đổi tên ở bước trên:

  • Thay thế giá trị của biến APP_TIMEZONE trong file .env bằng Asia/Ho_Chi_Minh. Điều này sẽ thiết lập múi giờ của ứng dụng Snipe-IT là Asia/Ho_Chi_Minh.
sudo sed -i 's|APP_TIMEZONE=.*|APP_TIMEZONE=Asia/Ho_Chi_Minh|' /var/www/snipe-it/.env

Thay thế giá trị của biến APP_URL trong file .env bằng https://snipeit.hoanghd.com. Điều này sẽ cấu hình URL truy cập ứng dụng Snipe-IT thành https://snipeit.hoanghd.com.

sudo sed -i 's|APP_URL=.*|APP_URL=https://snipeit.hoanghd.com|' /var/www/snipe-it/.env

Thay thế giá trị của biến DB_DATABASE trong file .env bằng snipeit_db. Điều này sẽ đặt tên cơ sở dữ liệu của ứng dụng Snipe-IT là snipeit_db.

sudo sed -i 's|DB_DATABASE=.*|DB_DATABASE=snipeit_db|' /var/www/snipe-it/.env

Thay thế giá trị của biến DB_USERNAME trong file .env bằng root. Điều này sẽ đặt tên DB Name của ứng dụng Snipe-IT là root.

sudo sed -i 's|DB_USERNAME=.*|DB_USERNAME=root|' /var/www/snipe-it/.env

Thay thế giá trị của biến DB_PASSWORD trong file .env bằng hoanghd. Điều này sẽ đặt mật khẩu cho người dùng cơ sở dữ liệu của ứng dụng Snipe-IT là hoanghd.

sudo sed -i 's|DB_PASSWORD=.*|DB_PASSWORD=hoanghd|' /var/www/snipe-it/.env

Kết quả là sau khi thực hiện chuỗi các lệnh này, file .env của ứng dụng Snipe-IT đã được cấu hình với các giá trị mới cho múi giờ, URL truy cập, DB Name, tên người dùng và mật khẩu.

Bước 8 – Cài đặt Nginx.

sudo sudo apt install -y nginx

Bạn hãy sao lưu file nginx.conf trước khi cấu hình tránh trường hợp cấu hình lỗi thì chúng ta rollback lại.

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

Chạy đoạn Script dưới để thay đổi nội dung file /etc/nginx/nginx.conf.

sudo cat > /etc/nginx/nginx.conf << 'OEF'
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
	worker_connections 768;
}

http {
	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	include /etc/nginx/mime.types;
	default_type application/octet-stream;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_prefer_server_ciphers on;
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;
	gzip on;
	include /etc/nginx/conf.d/*.conf;
}
OEF

Hãy phân quyền cho phép Nginx có thể thực thi các thư mục của Snipe-IT.

sudo chmod -R 755 storage 
sudo chmod -R 755 public/uploads
sudo chown -R www-data:www-data storage public/uploads
sudo chown -R www-data:www-data /var/www/snipe-it/public

Khởi động dịch vụ Nginx sau khi cài đặt và cấu hình Nginx để tự động khởi động cùng hệ thống khi khởi động lại.

sudo systemctl start nginx.service
sudo systemctl enable nginx.service

Bước 9 – Cài đặt các gói phụ thuộc của Laravel và đã được cấu hình bảo mật với khóa ứng dụng mới được tạo

Sử dụng Composer để cài đặt các phụ thuộc (dependencies) của ứng dụng Laravel từ file composer.lock. Tùy chọn --no-dev giúp bỏ qua việc cài đặt các gói phụ thuộc dành cho môi trường phát triển (ví dụ như các gói kiểm tra, debug, v.v.), điều này thường thực hiện trong môi trường Prod để giảm kích thước và tối ưu hiệu suất ứng dụng. Tùy chọn --prefer-source ưu tiên sử dụng mã nguồn từ các kho lưu trữ của các gói phụ thuộc nếu có.

sudo composer install --no-dev --prefer-source

Đầu ra của nó sẽ kiểu thế này.

$ composer install --no-dev --prefer-source
Installing dependencies from lock file
Verifying lock file contents can be installed on current platform.
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. It is recommended that you run `composer update` or `composer update <package name>`.
Package operations: 168 installs, 0 updates, 0 removals
  - Installing symfony/deprecation-contracts (v2.5.2): Cloning e8b495ea28
  - Installing psr/http-message (1.0.1): Cloning f6561bf28d
  - Installing psr/http-client (1.0.1): Cloning 2dfb5f6c5e
  - Installing ralouphie/getallheaders (3.0.3): Cloning 120b605dfe

< để làm gọn nên đầu ra này đã lược bỏ bớt >

  - Installing rollbar/rollbar (v2.1.0): Cloning ff3db5739d
  - Installing rollbar/rollbar-laravel (v7.2.0): Cloning d7647ffabf
  - Installing spatie/temporary-directory (1.3.0): Cloning f517729b37
  - Installing spatie/db-dumper (2.21.1): Cloning 05e5955fb8
  - Installing spatie/laravel-backup (6.16.5): Cloning 332fae80b1
  - Installing tecnickcom/tc-lib-color (1.14.14): Cloning f9e45c5949
  - Installing tecnickcom/tc-lib-barcode (1.17.14): Cloning 4907ef1e38
  - Installing unicodeveloper/laravel-password (1.0.4): Cloning 806e345ae9
  - Installing watson/validating (6.1.1): Cloning fda4daaf80
Package doctrine/reflection is abandoned, you should avoid using it. Use roave/better-reflection instead.
Package fruitcake/laravel-cors is abandoned, you should avoid using it. No replacement was suggested.
Package laravelcollective/html is abandoned, you should avoid using it. Use spatie/laravel-html instead.
Package swiftmailer/swiftmailer is abandoned, you should avoid using it. Use symfony/mailer instead.
Package phpunit/php-token-stream is abandoned, you should avoid using it. No replacement was suggested.
Generating optimized autoload files
Class ParsedownTest located in ./vendor/erusev/parsedown/test/ParsedownTest.php does not comply with psr-0 autoloading standard. Skipping.
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: arietimmerman/laravel-scim-server
Discovered Package: barryvdh/laravel-debugbar
Discovered Package: barryvdh/laravel-dompdf
Discovered Package: eduardokum/laravel-mail-auto-embed
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: fruitcake/laravel-cors
Discovered Package: intervention/image
Discovered Package: laravel/passport
Discovered Package: laravel/slack-notification-channel
Discovered Package: laravel/socialite
Discovered Package: laravel/tinker
Discovered Package: laravel/ui
Discovered Package: laravelcollective/html
Discovered Package: livewire/livewire
Discovered Package: maatwebsite/excel
Discovered Package: mediconesystems/livewire-datatables
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Discovered Package: pragmarx/google2fa-laravel
Discovered Package: spatie/laravel-backup
Discovered Package: unicodeveloper/laravel-password
Package manifest generated successfully.
> @php artisan vendor:publish --force --tag=livewire:assets --ansi
Copied Directory [/vendor/livewire/livewire/dist] To [/public/vendor/livewire]
Publishing complete.
84 packages you are using are looking for funding.
Use the `composer fund` command to find out more!

Tạo và ghi vào file .env giá trị cho appkey. Appkey là một chuỗi ký tự bảo mật được sử dụng để mã hóa thông tin nhạy cảm trong ứng dụng Laravel, như phiên đăng nhập và cookie. Khi chạy lệnh này, Laravel sẽ tạo ngẫu nhiên một khóa ứng dụng mới và cập nhật vào file .env.

sudo php artisan key:generate

Đầu ra sẽ như dưới, do bạn đang cài mới nên hãy xác nhận yes để đồng ý ghi đè Appkey trong file .env.

$ sudo php artisan key:generate
**************************************
*     Application In Production!     *
**************************************

 Do you really wish to run this command? (yes/no) [no]:
 >yes

Lúc này bạn kiểm tra file .env se thấy thông tin APP_KEY đã được gán một key mới mà trước đó không có.

$ sudo cat .env | grep APP_KEY
APP_KEY=base64:Vxcqa6w1kH3SdbWxA8zo6dvhVSCQjAh0SR+PGvigfV8=

Bước 10 – Cấu hình php-fpm.

Sử dụng một công cụ mà bạn thích để chỉnh sửa một số thông tin trong file /etc/php/7.4/fpm/pool.d/www.conf như sau:

user = www-data
group = www-data
listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

Khởi động dịch vụ php7.4-fpm sau khi cài đặt và cấu hình php-fpm để tự động khởi động cùng hệ thống khi khởi động lại.

sudo systemctl restart php7.4-fpm.service
sudo systemctl enable php7.4-fpm.service

Bước 11 – Tạo ra file SSL để chuyển hướng nó sang HTTPs.

Tạo thư mục chứa SSL.

sudo mkdir -p /etc/ssl/snipeit.hoanghd.com

Nếu bạn chưa biết lấy SSL thì hãy đọc lại bài https://wiki.hoanghd.com/openssl-la-gi/ và làm theo nó để lấy được 1 file SSL tự xác thực hoặc sử dụng đoạn SSL của mình ở dưới cho nhanh cũng được.

sudo cat > /etc/ssl/snipeit.hoanghd.com/fullchain.pem << 'OEF'
-----BEGIN CERTIFICATE-----
MIIEXjCCA0agAwIBAgISA9J9cS0lyFI8sqVKPyvOmLgGMA0GCSqGSIb3DQEBCwUA
MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD
EwJSMzAeFw0yMzAxMTMwODA5MTVaFw0yMzA0MTMwODA5MTRaMB0xGzAZBgNVBAMT
EnJlc3VtZS5ob2FuZ2hkLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABD/J
saTy8i3AK0KX1krHicysPFTa86UklWQhtZZnN8LGcAEI3N9gjooPedpfHU3tOPKS
keiiql+Ju/yP8hbf8rijggJMMIICSDAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYw
FAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFIrK
Agu7mwx9biyqElDasVhV5HMcMB8GA1UdIwQYMBaAFBQusxe3WFbLrlAJQOYfr52L
FMLGMFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL3IzLm8ubGVu
Y3Iub3JnMCIGCCsGAQUFBzAChhZodHRwOi8vcjMuaS5sZW5jci5vcmcvMB0GA1Ud
EQQWMBSCEnJlc3VtZS5ob2FuZ2hkLmNvbTBMBgNVHSAERTBDMAgGBmeBDAECATA3
BgsrBgEEAYLfEwEBATAoMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNy
eXB0Lm9yZzCCAQMGCisGAQQB1nkCBAIEgfQEgfEA7wB2ALc++yTfnE26dfI5xbpY
9Gxd/ELPep81xJ4dCYEl7bSZAAABhapj8+EAAAQDAEcwRQIhAKOvHbdPcUWFi56s
qKwrWCs0e9hSqTbNvMbBv7xhMkoKAiADtjoT7JN9sVjeIpkL1Ma8N62b2Ck9zKzV
dRkOzP5clAB1AOg+0No+9QY1MudXKLyJa8kD08vREWvs62nhd31tBr1uAAABhapj
890AAAQDAEYwRAIgbIrao/X4ANKr8yh+MltCN6vC+cTNondn9IKtHyz7VcQCIEci
dPzm5mPaBIvBBKa7QfuYWcXdE229y0dUpsKoUBmcMA0GCSqGSIb3DQEBCwUAA4IB
AQB42Vf3q+uY3BWMObVZv3p5kdR7FTZWvUsiMB08467dlK1EbJJldwlWTxBPUGKt
Hp7sEf1ywVTSkDbXu1xbE1VJzqb/qzsVPflyyTkgzrzuG+OMgFgmMXhK7bTgfp95
riMapE5X5jcQsK113Etgq0HS4+5zeWIr3cRScZ/lbJs4BqfB9bSHopw/5C3Bc4iK
Jyvj8p8NW5BBmheMIWHlRfnuY6CbDf2sVsLwoBeq32ASABn3DiXjenU+btfILpUn
eT0tnAwDN06Z6eDFYX/JfcUdXwLX6Bb7lB/6JnVIcphj6qdAbkTGY5Il5BCInNNh
0D1PkVmacHoNxKo8veS3tzsf
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw
WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP
R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx
sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm
NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg
Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG
/kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC
AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB
Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA
FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw
AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw
Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB
gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W
PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl
ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz
CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm
lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq/yFOGwXD9RiX8F6sw6W4
avAuvDszue5L3sz85K+EC4Y/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2
yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O
yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids
hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN/lxPFin+
HlUjr8gRsI3qfJOQFy/9rKIJR0Y/8Omwt/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv
MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX
nLRbwHOoq7hHwg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFYDCCBEigAwIBAgIQQAF3ITfU6UK47naqPGQKtzANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTIxMDEyMDE5MTQwM1oXDTI0MDkzMDE4MTQwM1ow
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwggIiMA0GCSqGSIb3DQEB
AQUAA4ICDwAwggIKAoICAQCt6CRz9BQ385ueK1coHIe+3LffOJCMbjzmV6B493XC
ov71am72AE8o295ohmxEk7axY/0UEmu/H9LqMZshftEzPLpI9d1537O4/xLxIZpL
wYqGcWlKZmZsj348cL+tKSIG8+TA5oCu4kuPt5l+lAOf00eXfJlII1PoOK5PCm+D
LtFJV4yAdLbaL9A4jXsDcCEbdfIwPPqPrt3aY6vrFk/CjhFLfs8L6P+1dy70sntK
4EwSJQxwjQMpoOFTJOwT2e4ZvxCzSow/iaNhUd6shweU9GNx7C7ib1uYgeGJXDR5
bHbvO5BieebbpJovJsXQEOEO3tkQjhb7t/eo98flAgeYjzYIlefiN5YNNnWe+w5y
sR2bvAP5SQXYgd0FtCrWQemsAXaVCg/Y39W9Eh81LygXbNKYwagJZHduRze6zqxZ
Xmidf3LWicUGQSk+WT7dJvUkyRGnWqNMQB9GoZm1pzpRboY7nn1ypxIFeFntPlF4
FQsDj43QLwWyPntKHEtzBRL8xurgUBN8Q5N0s8p0544fAQjQMNRbcTa0B7rBMDBc
SLeCO5imfWCKoqMpgsy6vYMEG6KDA0Gh1gXxG8K28Kh8hjtGqEgqiNx2mna/H2ql
PRmP6zjzZN7IKw0KKP/32+IVQtQi0Cdd4Xn+GOdwiK1O5tmLOsbdJ1Fu/7xk9TND
TwIDAQABo4IBRjCCAUIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
SwYIKwYBBQUHAQEEPzA9MDsGCCsGAQUFBzAChi9odHRwOi8vYXBwcy5pZGVudHJ1
c3QuY29tL3Jvb3RzL2RzdHJvb3RjYXgzLnA3YzAfBgNVHSMEGDAWgBTEp7Gkeyxx
+tvhS5B1/8QVYIWJEDBUBgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEEAYLfEwEB
ATAwMC4GCCsGAQUFBwIBFiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2VuY3J5cHQu
b3JnMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmwuaWRlbnRydXN0LmNvbS9E
U1RST09UQ0FYM0NSTC5jcmwwHQYDVR0OBBYEFHm0WeZ7tuXkAXOACIjIGlj26Ztu
MA0GCSqGSIb3DQEBCwUAA4IBAQAKcwBslm7/DlLQrt2M51oGrS+o44+/yQoDFVDC
5WxCu2+b9LRPwkSICHXM6webFGJueN7sJ7o5XPWioW5WlHAQU7G75K/QosMrAdSW
9MUgNTP52GE24HGNtLi1qoJFlcDyqSMo59ahy2cI2qBDLKobkx/J3vWraV0T9VuG
WCLKTVXkcGdtwlfFRjlBz4pYg1htmf5X6DYO8A4jqv2Il9DjXA6USbW1FzXSLr9O
he8Y4IWS6wY7bCkjCWDcRQJMEhg76fsO3txE+FiYruq9RUWhiF1myv4Q6W+CyBFC
Dfvp7OOGAN6dEOM4+qR9sdjoSYKEBpsr6GtPAQw4dy753ec5
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEXjCCA0agAwIBAgISA9J9cS0lyFI8sqVKPyvOmLgGMA0GCSqGSIb3DQEBCwUA
MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD
EwJSMzAeFw0yMzAxMTMwODA5MTVaFw0yMzA0MTMwODA5MTRaMB0xGzAZBgNVBAMT
EnJlc3VtZS5ob2FuZ2hkLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABD/J
saTy8i3AK0KX1krHicysPFTa86UklWQhtZZnN8LGcAEI3N9gjooPedpfHU3tOPKS
keiiql+Ju/yP8hbf8rijggJMMIICSDAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYw
FAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFIrK
Agu7mwx9biyqElDasVhV5HMcMB8GA1UdIwQYMBaAFBQusxe3WFbLrlAJQOYfr52L
FMLGMFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL3IzLm8ubGVu
Y3Iub3JnMCIGCCsGAQUFBzAChhZodHRwOi8vcjMuaS5sZW5jci5vcmcvMB0GA1Ud
EQQWMBSCEnJlc3VtZS5ob2FuZ2hkLmNvbTBMBgNVHSAERTBDMAgGBmeBDAECATA3
BgsrBgEEAYLfEwEBATAoMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNy
eXB0Lm9yZzCCAQMGCisGAQQB1nkCBAIEgfQEgfEA7wB2ALc++yTfnE26dfI5xbpY
9Gxd/ELPep81xJ4dCYEl7bSZAAABhapj8+EAAAQDAEcwRQIhAKOvHbdPcUWFi56s
qKwrWCs0e9hSqTbNvMbBv7xhMkoKAiADtjoT7JN9sVjeIpkL1Ma8N62b2Ck9zKzV
dRkOzP5clAB1AOg+0No+9QY1MudXKLyJa8kD08vREWvs62nhd31tBr1uAAABhapj
890AAAQDAEYwRAIgbIrao/X4ANKr8yh+MltCN6vC+cTNondn9IKtHyz7VcQCIEci
dPzm5mPaBIvBBKa7QfuYWcXdE229y0dUpsKoUBmcMA0GCSqGSIb3DQEBCwUAA4IB
AQB42Vf3q+uY3BWMObVZv3p5kdR7FTZWvUsiMB08467dlK1EbJJldwlWTxBPUGKt
Hp7sEf1ywVTSkDbXu1xbE1VJzqb/qzsVPflyyTkgzrzuG+OMgFgmMXhK7bTgfp95
riMapE5X5jcQsK113Etgq0HS4+5zeWIr3cRScZ/lbJs4BqfB9bSHopw/5C3Bc4iK
Jyvj8p8NW5BBmheMIWHlRfnuY6CbDf2sVsLwoBeq32ASABn3DiXjenU+btfILpUn
eT0tnAwDN06Z6eDFYX/JfcUdXwLX6Bb7lB/6JnVIcphj6qdAbkTGY5Il5BCInNNh
0D1PkVmacHoNxKo8veS3tzsf
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw
WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP
R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx
sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm
NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg
Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG
/kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC
AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB
Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA
FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw
AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw
Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB
gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W
PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl
ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz
CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm
lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq/yFOGwXD9RiX8F6sw6W4
avAuvDszue5L3sz85K+EC4Y/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2
yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O
yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids
hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN/lxPFin+
HlUjr8gRsI3qfJOQFy/9rKIJR0Y/8Omwt/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv
MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX
nLRbwHOoq7hHwg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFYDCCBEigAwIBAgIQQAF3ITfU6UK47naqPGQKtzANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTIxMDEyMDE5MTQwM1oXDTI0MDkzMDE4MTQwM1ow
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwggIiMA0GCSqGSIb3DQEB
AQUAA4ICDwAwggIKAoICAQCt6CRz9BQ385ueK1coHIe+3LffOJCMbjzmV6B493XC
ov71am72AE8o295ohmxEk7axY/0UEmu/H9LqMZshftEzPLpI9d1537O4/xLxIZpL
wYqGcWlKZmZsj348cL+tKSIG8+TA5oCu4kuPt5l+lAOf00eXfJlII1PoOK5PCm+D
LtFJV4yAdLbaL9A4jXsDcCEbdfIwPPqPrt3aY6vrFk/CjhFLfs8L6P+1dy70sntK
4EwSJQxwjQMpoOFTJOwT2e4ZvxCzSow/iaNhUd6shweU9GNx7C7ib1uYgeGJXDR5
bHbvO5BieebbpJovJsXQEOEO3tkQjhb7t/eo98flAgeYjzYIlefiN5YNNnWe+w5y
sR2bvAP5SQXYgd0FtCrWQemsAXaVCg/Y39W9Eh81LygXbNKYwagJZHduRze6zqxZ
Xmidf3LWicUGQSk+WT7dJvUkyRGnWqNMQB9GoZm1pzpRboY7nn1ypxIFeFntPlF4
FQsDj43QLwWyPntKHEtzBRL8xurgUBN8Q5N0s8p0544fAQjQMNRbcTa0B7rBMDBc
SLeCO5imfWCKoqMpgsy6vYMEG6KDA0Gh1gXxG8K28Kh8hjtGqEgqiNx2mna/H2ql
PRmP6zjzZN7IKw0KKP/32+IVQtQi0Cdd4Xn+GOdwiK1O5tmLOsbdJ1Fu/7xk9TND
TwIDAQABo4IBRjCCAUIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
SwYIKwYBBQUHAQEEPzA9MDsGCCsGAQUFBzAChi9odHRwOi8vYXBwcy5pZGVudHJ1
c3QuY29tL3Jvb3RzL2RzdHJvb3RjYXgzLnA3YzAfBgNVHSMEGDAWgBTEp7Gkeyxx
+tvhS5B1/8QVYIWJEDBUBgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEEAYLfEwEB
ATAwMC4GCCsGAQUFBwIBFiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2VuY3J5cHQu
b3JnMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmwuaWRlbnRydXN0LmNvbS9E
U1RST09UQ0FYM0NSTC5jcmwwHQYDVR0OBBYEFHm0WeZ7tuXkAXOACIjIGlj26Ztu
MA0GCSqGSIb3DQEBCwUAA4IBAQAKcwBslm7/DlLQrt2M51oGrS+o44+/yQoDFVDC
5WxCu2+b9LRPwkSICHXM6webFGJueN7sJ7o5XPWioW5WlHAQU7G75K/QosMrAdSW
9MUgNTP52GE24HGNtLi1qoJFlcDyqSMo59ahy2cI2qBDLKobkx/J3vWraV0T9VuG
WCLKTVXkcGdtwlfFRjlBz4pYg1htmf5X6DYO8A4jqv2Il9DjXA6USbW1FzXSLr9O
he8Y4IWS6wY7bCkjCWDcRQJMEhg76fsO3txE+FiYruq9RUWhiF1myv4Q6W+CyBFC
Dfvp7OOGAN6dEOM4+qR9sdjoSYKEBpsr6GtPAQw4dy753ec5
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgYVa/Edoza70iN7Cz
h1rS+1B3zf7dQ8zOurT5zaVLtaGhRANCAAQ/ybGk8vItwCtCl9ZKx4nMrDxU2vOl
JJVkIbWWZzfCxnABCNzfYI6KD3naXx1N7TjykpHooqpfibv8j/IW3/K4
-----END PRIVATE KEY-----
OEF

Mình copy một file fullchain.pem thành file privkey.pem, nếu bạn hiểu config của mình ở dưới thì cái này nhìn cho nó vui chứ cũng chẳng quan trọng lắm.

sudo cp /etc/ssl/snipeit.hoanghd.com/fullchain.pem /etc/ssl/snipeit.hoanghd.com/privkey.pem

Bước 12 – Cấu hình Nginx để Snipe-IT có thể sử dụng nó làm Webserver.

Chạy script dưới để tạo file /etc/nginx/conf.d/snipeit.conf, file fullchain.pem và privkey.pem mình truyền xuống đoạn config dưới như bạn đã thấy.

Bài https://wiki.hoanghd.com/huong-dan-can-bang-tai-webserver-su-dung-nginx-va-keepalive/ mình nói khá kỹ về cấu hình Nginx, các bạn có thể đọc lại cho hiểu chứ mình không giải thích lại ở phần này nữa vì nó dài dòng lắm.

sudo cat > /etc/nginx/conf.d/snipeit.conf << 'OEF'
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name snipeit.hoanghd.com;
    ssl_certificate /etc/ssl/snipeit.hoanghd.com/fullchain.pem;
    ssl_certificate_key /etc/ssl/snipeit.hoanghd.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    root /var/www/snipe-it/public;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri $uri/ =404;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
OEF

Tạo một liên kết file snipeit.conf đã tạo ở trên đến thư mục /etc/nginx/modules-available.

sudo ln -s /etc/nginx/conf.d/snipeit.conf /etc/nginx/modules-available/snipeit.conf

Chạy lệnh sudo nginx -t để kiểm tra lỗi cú pháp, nếu kết quả trả về như dưới coi như là bạn đã làm đúng.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Nếu cấu hình đã đúng thì sử dụng lệnh dưới để reload lại cấu hình Nginx.

sudo nginx -s reload

Bạn cũng có thể khởi động lại Nginx.

sudo systemctl restart nginx.service

Và kiểm tra trạng thái của Nginx bằng lệnh systemctl status nginx.service.

$ sudo systemctl status nginx.service
● nginx.service - The nginx HTTP and reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-07-29 02:38:45 UTC; 15min ago
       Docs: man:nginx(8)
    Process: 31860 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 31861 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 31862 (nginx)
      Tasks: 5 (limit: 4646)
     Memory: 9.0M
        CPU: 83ms
     CGroup: /system.slice/nginx.service
             └─31862 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"

Jul 29 02:38:45 flask-1 systemd[1]: Starting A high performance web server and a reverse proxy server...
Jul 29 02:38:45 flask-1 systemd[1]: Started A high performance web server and a reverse proxy server.

Bước 13 – Kiểm tra kết quả.

Sử dụng trình duyệt login vào domain https://snipeit.hoanghd.com/ mà bạn đã khai báo ở các bước trên chúng ta có kết quả.

2 COMMENTS

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories