Cách cài đặt Shlink URL Shortener với Nginx trên Ubuntu 20.04

theanh

Administrator
Nhân viên
Shlink là một trình rút gọn URL mã nguồn mở và tự lưu trữ được viết bằng PHP. Nó được sử dụng để tạo và quản lý các URL ngắn từ dòng lệnh. Nó cho phép bạn theo dõi tất cả các lượt truy cập vào các URL ngắn của mình bao gồm vị trí, trình duyệt hoặc người giới thiệu. Nó có thể được tích hợp với các công cụ của bên thứ ba bằng API Shlink. Nó cung cấp giao diện dòng lệnh để rút gọn URL.

Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách cài đặt Shlink trên Ubuntu 20.04.

Điều kiện tiên quyết​

  • Máy chủ chạy Ubuntu 20.04.
  • Tên miền hợp lệ được trỏ bằng IP máy chủ của bạn.
  • Mật khẩu gốc được cấu hình trên máy chủ.

Bắt đầu​

Trước tiên, hãy cập nhật các gói hệ thống lên phiên bản đã cập nhật bằng cách chạy lệnh sau:
Mã:
apt-get update -y
Sau khi tất cả các gói được cập nhật, bạn có thể tiến hành bước tiếp theo.

Cài đặt LEMP Server​

Trước tiên, hãy cài đặt Nginx, PHP, MariaDB và các gói cần thiết khác bằng lệnh sau:
Mã:
apt-get install nginx mariadb-server php-apcu php7.4 php7.4-fpm php7.4-mysql php7.4-gd php7.4-common php7.4-curl php7.4-intl php7.4-gmp php7.4-xml php-dev php-pear unzip -y
Sau khi tất cả các gói được cài đặt, bạn có thể tiến hành bước tiếp theo.

Tạo cơ sở dữ liệu Shlink​

Shlink sử dụng MariaDB làm cơ sở dữ liệu phụ trợ. Vì vậy, bạn sẽ cần tạo một cơ sở dữ liệu và người dùng cho Shlink. Trước tiên, hãy kết nối với MariaDB bằng lệnh sau:
Mã:
mysql
Sau khi kết nối, hãy tạo một cơ sở dữ liệu và người dùng bằng lệnh sau:
Mã:
MariaDB [(none)]> CREATE DATABASE shlink;
MariaDB [(none)]> GRANT ALL ON shlink.* TO 'shlink'@'localhost' IDENTIFIED BY 'password';
Tiếp theo, xóa các đặc quyền và thoát khỏi MariaDB bằng lệnh sau:
Mã:
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT;

Tải xuống Shlink​

Trước tiên, hãy tải xuống phiên bản Shlink mới nhất từ trang tải xuống chính thức của họ:
Mã:
wget https://github.com/shlinkio/shlink/releases/download/v2.7.1/shlink2.7.1_php7.4_dist.zip
Sau khi tải xuống hoàn tất, hãy giải nén tệp đã tải xuống bằng lệnh sau:
Mã:
unzip shlink2.7.1_php7.4_dist.zip
Tiếp theo, di chuyển thư mục đã giải nén đến thư mục gốc web Nginx:
Mã:
mv shlink2.7.1_php7.4_dist /var/www/html/shlink
Tiếp theo, hãy thiết lập quyền và quyền sở hữu phù hợp bằng lệnh sau:
Mã:
chown -R www-data:www-data /var/www/html/shlink/
chmod -R 755 /var/www/html/shlink/

Cài đặt Shlink​

Tiếp theo, chạy lệnh sau để bắt đầu cài đặt:
Mã:
sudo -u www-data php7.4 /var/www/html/shlink/bin/install
Bạn sẽ được yêu cầu chọn cơ sở dữ liệu như hiển thị bên dưới:
Mã:
Chào mừng đến với Shlink!! Công cụ này sẽ hướng dẫn bạn trong suốt quá trình cài đặt.CƠ SỞ DỮ LIỆU======= Chọn loại cơ sở dữ liệu [MySQL]: [0] MySQL [1] MariaDB [2] PostgreSQL [3] MicrosoftSQL [4] SQLite > 1
Chọn bất kỳ tùy chọn nào và nhấn Enter. Bạn sẽ được yêu cầu cung cấp tên cơ sở dữ liệu như hiển thị bên dưới:
Mã:
Tên cơ sở dữ liệu [shlink]: >
Cung cấp tên cơ sở dữ liệu của bạn hoặc nhấn Enter để chọn mặc định. Bạn sẽ được yêu cầu cung cấp máy chủ cơ sở dữ liệu:
Mã:
Máy chủ cơ sở dữ liệu [localhost]: >
Cung cấp máy chủ cơ sở dữ liệu của bạn hoặc nhấn Enter để chọn mặc định. Bạn sẽ được yêu cầu cung cấp cổng cơ sở dữ liệu:
Mã:
Cổng cơ sở dữ liệu [3306]: >
Cung cấp cổng cơ sở dữ liệu của bạn hoặc nhấn Enter để chọn mặc định. Bạn sẽ được yêu cầu cung cấp tên người dùng cơ sở dữ liệu của mình:
Mã:
Tên người dùng cơ sở dữ liệu: > shlink
Cung cấp tên người dùng cơ sở dữ liệu của bạn và nhấn Enter. Bạn sẽ được yêu cầu cung cấp mật khẩu người dùng cơ sở dữ liệu của mình:
Mã:
Mật khẩu cơ sở dữ liệu: > mật khẩu
Cung cấp mật khẩu người dùng cơ sở dữ liệu của bạn và nhấn Enter. Bạn sẽ được yêu cầu cung cấp socket Unix.
Mã:
Socket Unix (để trống để không sử dụng socket): >
Để trống và nhấn Enter. Bạn sẽ được yêu cầu cung cấp tên miền:
Mã:
URL SHORTENER============= Tên miền mặc định cho các URL ngắn được tạo: > shlink.linuxbuz.com
Cung cấp tên miền của bạn và nhấn Enter. Bạn sẽ được yêu cầu chọn Schema:
Mã:
Chọn schema cho các URL ngắn được tạo [http]: [0] http [1] https > 0
Chọn một tùy chọn và nhấn Enter. Bạn sẽ được yêu cầu xác thực các URL dài:
Mã:
Bạn có muốn xác thực các URL dài bằng mã trạng thái HTTP 200 khi phản hồi không? (có/không) [có]: >
Chọn tùy chọn mặc định và nhấn Enter. Bạn sẽ được yêu cầu cung cấp độ dài của các mã ngắn được tạo:
Mã:
Độ dài mặc định bạn muốn mã ngắn được tạo ra là bao nhiêu? (Bạn vẫn có thể ghi đè giá trị này trên mọi URL ngắn đã tạo) [5]: >
Chọn giá trị mặc định và nhấn Enter. Bạn sẽ thấy đầu ra sau:
Mã:
Bạn có muốn Shlink giải quyết tiêu đề URL ngắn dựa trên thẻ tiêu đề của URL dài (nếu có) không? Nếu không, tiêu đề sẽ được để trống trừ khi được cung cấp rõ ràng. (có/không) [không]: >
Chọn câu trả lời mặc định và nhấn Enter. Bạn sẽ thấy đầu ra sau:
Mã:
Cung cấp khóa cấp phép GeoLite2. (Để trống để sử dụng khóa mặc định, nhưng bạn nên lấy khóa riêng. Truy cập https://shlink.io/documentation/geolite-license-key để biết cách lấy khóa): >
Để trống và nhấn Enter. Bạn sẽ thấy đầu ra sau:
Mã:
Bạn muốn URL ngắn của mình có loại chuyển hướng nào? [Tất cả các lượt truy cập sẽ luôn được theo dõi. Không tốt cho SEO.]: [302] Tất cả các lượt truy cập sẽ luôn được theo dõi. Không tốt cho SEO. [301] Tùy chọn tốt nhất cho SEO. Chuyển hướng sẽ được lưu trong bộ nhớ đệm trong một khoảng thời gian ngắn, khiến một số lượt truy cập không được theo dõi. > 301
Chọn bất kỳ tùy chọn nào và nhấn Enter. Bạn sẽ thấy đầu ra sau:
Mã:
Bạn muốn khách truy cập lưu các lượt chuyển hướng của mình trong bộ nhớ đệm trong bao lâu (tính bằng giây)? [30]: >
Chọn các giá trị mặc định và nhấn Enter. Bạn sẽ thấy đầu ra sau:
Mã:
THEO DÕI======== Bạn có muốn theo dõi các lượt truy cập mồ côi không? (lượt truy cập đến URL cơ sở, URL ngắn không hợp lệ hoặc các URL "không tìm thấy" khác) (có/không) [có]: >
Chọn tùy chọn mặc định và nhấn Enter. Bạn sẽ thấy kết quả đầu ra sau:
Mã:
Cung cấp tên tham số mà bạn có thể sử dụng để tắt theo dõi theo yêu cầu cụ thể đối với URL ngắn (để trống và tính năng này sẽ không được bật): >
Chỉ cần nhấn Enter. Bạn sẽ thấy kết quả đầu ra sau:
Mã:
Bạn có muốn tắt hoàn toàn theo dõi lượt truy cập không? (có/không) [không]: >
Chọn tùy chọn mặc định và nhấn Enter. Bạn sẽ thấy kết quả đầu ra sau:
Mã:
Bạn có muốn tắt theo dõi địa chỉ IP của khách truy cập không? (có/không) [không]: >
Chọn tùy chọn mặc định và nhấn Enter. Bạn sẽ thấy kết quả đầu ra sau:
Mã:
Bạn có muốn ẩn danh địa chỉ IP từ xa của khách truy cập trước khi lưu vào cơ sở dữ liệu không? (có/không) [có]: >
Chọn tùy chọn mặc định và nhấn Enter. Bạn sẽ thấy kết quả đầu ra sau:
Mã:
Bạn có muốn tắt theo dõi "User Agents" của khách truy cập không? (có/không) [không]: >
Chọn tùy chọn mặc định và nhấn Enter. Bạn sẽ thấy kết quả đầu ra sau:
Mã:
Bạn có muốn tắt theo dõi "Referrers" của khách truy cập không? (có/không) [không]: >
Chọn tùy chọn mặc định và nhấn Enter. Bạn sẽ thấy kết quả đầu ra sau:
Mã:
REDIRECTS========= URL tùy chỉnh để chuyển hướng đến khi người dùng truy cập URL cơ sở của Shlink (Nếu không cung cấp giá trị nào, người dùng sẽ thấy trang "404 not found" mặc định): > http://shlink.linuxbuz.com
Cung cấp tên miền của bạn và nhấn Enter. Bạn sẽ thấy đầu ra sau:
Mã:
URL tùy chỉnh để chuyển hướng đến khi người dùng truy cập vào URL ngắn không hợp lệ (Nếu không cung cấp giá trị, người dùng sẽ thấy trang "404 not found" mặc định): > http://shlink.linuxbuz.com
Cung cấp tên miền của bạn và nhấn Enter. Bạn sẽ thấy đầu ra sau:
Mã:
URL tùy chỉnh để chuyển hướng đến khi người dùng truy cập vào URL không tìm thấy khác với URL ngắn không hợp lệ (Nếu không cung cấp giá trị, người dùng sẽ thấy trang "404 not found" mặc định): > http://shlink.linuxbuz.com
Cung cấp tên miền của bạn và nhấn Enter. Bạn sẽ thấy đầu ra sau:
Mã:
ỨNG DỤNG=========== Bạn có muốn bật kiểm tra an toàn để không cho phép xóa URL ngắn sau khi nhận được một lượng truy cập cụ thể không? (có/không) [có]: >
Chọn tùy chọn mặc định và nhấn Enter. Bạn sẽ thấy kết quả đầu ra sau:
Mã:
Số lượt truy cập mà hệ thống không cho phép xóa URL ngắn là bao nhiêu? [15]: >
Chọn tùy chọn mặc định và nhấn Enter. Bạn sẽ thấy kết quả đầu ra sau:
Mã:
Đường dẫn nào sẽ phục vụ shlink? (Để trống nếu bạn định phục vụ shlink từ gốc của tên miền) []: >
Chọn tùy chọn mặc định và nhấn Enter. Bạn sẽ thấy kết quả đầu ra sau:
Mã:
TÍCH HỢP============ Cung cấp danh sách các URI máy chủ redis được phân tách bằng dấu phẩy sẽ được sử dụng cho mục đích lưu trữ đệm chia sẻ trong bối cảnh nhiều phiên bản shlink (Để trống nếu bạn không muốn sử dụng bộ đệm redis): > Cấu hình tùy chỉnh được tạo đúng cách!Đang khởi tạo cơ sở dữ liệu... Thành công!Đang cập nhật cơ sở dữ liệu... Thành công!Đang tạo proxy... Thành công!Đang tải xuống tệp db GeoLite2... Thành công! [OK] Cài đặt hoàn tất!

Cấu hình Nginx cho Shlink​

Tiếp theo, bạn sẽ cần tạo tệp máy chủ ảo Nginx cho Shlink. Bạn có thể tạo tệp này bằng lệnh sau:
Mã:
nano /etc/nginx/conf.d/shlink.conf
Thêm các dòng sau:
Mã:
server { listen 80; server_name shlink.example.com; root /var/www/html/shlink/public; error_log /var/log/nginx/shlink.error; access_log /var/log/nginx/shlink.access; index index.php index.html index.htm index.nginx-debian.html; location / { # thử phục vụ tệp trực tiếp, chuyển sang app.php try_files $uri /index.php$is_args$args; } # chuyển hướng toàn bộ một số thư mục rewrite ^/(vendor|translations|build)/.* /index.php break; location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }}
Lưu và đóng tệp, sau đó xác minh Nginx xem có lỗi nào không bằng lệnh sau:
Mã:
nginx -t
Bạn sẽ nhận được kết quả sau:
Mã:
nginx: cú pháp tệp cấu hình /etc/nginx/nginx.conf là oknginx: thử nghiệm tệp cấu hình /etc/nginx/nginx.conf thành công
Tiếp theo, khởi động lại dịch vụ Nginx để áp dụng các thay đổi:
Mã:
systemctl restart nginx
Bạn cũng có thể xác minh trạng thái của Nginx bằng lệnh sau:
Mã:
systemctl status nginx
Bạn sẽ nhận được kết quả sau:
Mã:
? nginx.service - Máy chủ web hiệu suất cao và máy chủ proxy ngược Đã tải: đã tải (/lib/systemd/system/nginx.service; đã bật; cài đặt trước của nhà cung cấp: đã bật) Đang hoạt động: đang hoạt động (đang chạy) kể từ Thứ 4, 2021-06-02 05:28:30 UTC; 4 giây trước Tài liệu: man:nginx(8) Quy trình: 25639 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Quy trình: 25653 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) PID chính: 25655 (nginx) Nhiệm vụ: 2 (giới hạn: 2353) Bộ nhớ: 2,6M CGroup: /system.slice/nginx.service ??25655 nginx: tiến trình chính /usr/sbin/nginx -g daemon on; master_process on; ??25656 nginx: tiến trình công nhân02/06 05:28:29 ubuntu2004 systemd[1]: Đang khởi động Một máy chủ web hiệu suất cao và một máy chủ proxy ngược...02/06 05:28:30 ubuntu2004 systemd[1]: Đã khởi động Một máy chủ web hiệu suất cao và một máy chủ proxy ngược.
Bây giờ bạn có thể cài đặt máy khách Shlink để rút gọn URL.

Bạn cũng có thể tạo URL rút gọn trên máy chủ của mình từ dòng lệnh:
Mã:
sudo -u www-data php7.4 /var/www/html/shlink/bin/cli short-url:generate
Để liệt kê tất cả các URL rút gọn, hãy chạy lệnh sau:
Mã:
sudo -u www-data php7.4 /var/www/html/shlink/bin/cli short-url:list
Để hiển thị bất kỳ thông tin trợ giúp nào, hãy chạy lệnh sau lệnh:
Mã:
sudo -u www-data php7.4 /var/www/html/shlink/bin/cli

Kết luận​

Xin chúc mừng! bạn đã cài đặt thành công trình rút gọn URL Shlink trên Ubuntu 20.04. Bây giờ bạn có thể rút gọn URL bằng giao diện CLI hoặc ứng dụng khách dựa trên web.
 
Back
Bên trên