Cách host máy chủ bit.ly của riêng bạn với Shlink trong Linux

Shlink là dịch vụ rút ngắn liên kết tự host mạnh mẽ dành cho Linux. Nó cung cấp một framework đơn giản nhưng hiệu quả, nơi bạn có thể sử dụng tên miền của riêng mình làm root cho các liên kết rút gọn của mình. Bài viết này sẽ hướng dẫn bạn cách cài đặt phiên bản Shlink của riêng bạn trên Ubuntu Linux bằng Docker và Nginx.

Tải Docker cho Shlink

Bài viết này giả định rằng bạn đang cài đặt Shlink trên VPS Ubuntu 22.04 và hiện bạn đang sở hữu một tên miền.

Bước đầu tiên trong việc triển khai Shlink trên Linux là tải bản sao Docker. Để thực hiện việc này, hãy lấy signing key của dự án Docker từ trang web của họ:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

Tạo file kho lưu trữ cho các file nhị phân Docker của bạn:

sudo nano /etc/apt/sources.list.d/docker.list

Dán dòng code sau vào file kho lưu trữ mới của bạn:

deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable

Load lại danh sách kho lưu trữ hệ thống của bạn bằng cách thực thi lệnh apt update:

sudo apt update && sudo apt upgrade

Cài đặt dependency cho Shlink

Khi kho Docker được thiết lập và chạy, giờ đây bạn có thể sử dụng apt để lấy các dependency cho Shlink:

sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-buildx-plugin nginx

Đảm bảo rằng gói snap “lõi” có sẵn trong hệ thống của bạn:

sudo snap install core

Tìm nạp và cài đặt gói snap “certbot” từ Electronic Frontier Foundation:

sudo snap install certbot --classic

Lấy khóa cấp phép Geolite2

Một tính năng nổi bật khác của Shlink là nó có thể theo dõi vị trí chung của người dùng đã nhấp vào liên kết của bạn. Để sử dụng tính năng này, hãy mở trang Geolite2 Licensing Sign Up.

Trang đăng ký giấy phép GeoLite.
Trang đăng ký giấy phép GeoLite.

Điền vào biểu mẫu thông tin chi tiết của bạn, sau đó nhấn Continue.

Mở hộp thư đến email, sau đó tìm email xác nhận từ MaxMind.

Nhấp vào liên kết từ email, sau đó cung cấp mật khẩu cho tài khoản MaxMind mới của bạn.

Link tạo mật khẩu cho MaxMind.
Link tạo mật khẩu cho MaxMind.

Đăng nhập vào tài khoản MaxMind của bạn, sau đó nhấp vào Manage License Keys trên bảng điều khiển.

Menu Manage License Keys trên thanh bên trái của bảng điều khiển.
Menu Manage License Keys trên thanh bên trái của bảng điều khiển.

Nhấp vào Generate new license key, sau đó nhấn vào Confirm để tạo key Geolite2 của bạn.

Nút Confirm trên lời nhắc đăng ký khóa cấp phép.
Nút Confirm trên lời nhắc đăng ký khóa cấp phép.

Sao chép code cấp phép Geolite2 vào một file văn bản trên máy của bạn rồi lưu nó.

Tải và cài đặt Shlink

Để cài đặt Shlink, trước tiên bạn cần tạo mạng Docker ảo. Mạng này sẽ đóng vai trò là mạng riêng của ứng dụng, nơi ứng dụng có thể giao tiếp với các container khác mà bạn sẽ triển khai:

sudo docker network create -d bridge \
    --subnet=10.0.0.0/24 \
    --gateway=10.0.0.1 \
    shlink-network

Triển khai cơ sở dữ liệu PostgreSQL và liên kết nó với mạng Docker ảo mới của bạn:

sudo docker run -d \
    --name shlink-db \
    -e POSTGRES_PASSWORD=!REPLACE_ME! \
    -e POSTGRES_USER=postgres \
    -e POSTGRES_DB=shlink \
    -p 127.0.0.1:5432:5432 \
    --restart always \
    --network="shlink-network" \
    postgres:12.1

Thay đổi giá trị của biến môi trường “POSTGRES_PASSWORD” bằng một chuỗi văn bản ngẫu nhiên.

Terminal hiển thị mật khẩu DB PostgreSQL ngẫu nhiên.
Terminal hiển thị mật khẩu DB PostgreSQL ngẫu nhiên.

Lưu ý: Bạn có thể tạo chuỗi văn bản ngẫu nhiên này bằng cách sử dụng “/dev/urandom”:

cat /dev/urandom | tr -dc 'A-Za-z0-9' | fold -w 32 | head -n 1

Dán lệnh sau vào phiên terminal mới:

sudo docker run -d \
    --name shlink-stable \
    -p 8081:8080 \
    -e DEFAULT_DOMAIN=YOUR-ROOT.DOMAIN \
    -e IS_HTTPS_ENABLED=true \
    -e GEOLITE_LICENSE_KEY=!REPLACE_ME! \
    -e DB_DRIVER=postgres \
    -e DB_USER=postgres \
    -e DB_PASSWORD=!REPLACE_ME! \
    -e DB_HOST=shlink-db \
    --network="shlink-network" \
    shlinkio/shlink:stable

Thay thế giá trị của biến DEFAULT_DOMAIN bằng tên miền của bạn.

Terminal hiển thị giá trị domain mặc định cho máy chủ demo.
Terminal hiển thị giá trị domain mặc định cho máy chủ demo.

Lưu ý: Đảm bảo rằng domain của bạn có bản ghi A trỏ đến địa chỉ IP của máy.

Thay đổi giá trị của biến “GEOLITE_LICENSE_KEY” bằng key cấp phép cá nhân của bạn.

Terminal hiển thị giấy phép Geolite cho máy chủ Shlink demo.
Terminal hiển thị giấy phép Geolite cho máy chủ Shlink demo.

Thay thế biến “DB_PASSWORD” bằng mật khẩu cơ sở dữ liệu PostgreSQL của bạn.

Terminal hiển thị mật khẩu PostegreSQL DB cho máy chủ demo.
Terminal hiển thị mật khẩu PostegreSQL DB cho máy chủ demo.

Nhấn Enter để bắt đầu phiên bản Shlink của bạn.

Cài đặt và liên kết giao diện Shlink của bạn

Tìm nạp key API từ container Shlink của bạn, sau đó sao chép nó vào clipboard:

sudo docker exec -it shlink-stable shlink api-key:generate

Dán lệnh sau vào phiên terminal mới:

sudo docker run -d \
    --name shlink-client \
    -p 8080:8080 \
    -e SHLINK_SERVER_URL=https://YOUR-ROOT.DOMAIN \
    -e SHLINK_SERVER_API_KEY=!REPLACE-ME! \
    --network="shlink-network" shlinkio/shlink-web-client

Thay thế “SHLINK_SERVER_URL” bằng giá trị từ biến “DEFAULT_DOMAIN” trên container backend.

Terminal hiển thị URL hoàn chỉnh cho phiên bản backend Shlink.
Terminal hiển thị URL hoàn chỉnh cho phiên bản backend Shlink.

Dán key API của bạn làm giá trị cho “SHLINK_SERVER_API_KEY”.

Terminal hiển thị key API backend Shlink.
Terminal hiển thị key API backend Shlink.

Nhấn Enter để bắt đầu giao diện frontend Shlink của bạn.

Xác nhận rằng cơ sở dữ liệu, backend Shlink và giao diện người dùng Shlink của bạn đang hoạt động bình thường bằng cách liệt kê tất cả các container hiện đang hoạt động trong hệ thống:

sudo docker container list
Terminal hiển thị 3 container xây dựng ứng dụng web Shlink hoàn chỉnh.
Terminal hiển thị 3 container xây dựng ứng dụng web Shlink hoàn chỉnh.

Tạo SSL Reverse Proxy bằng Nginx

Tại thời điểm này, bạn đã có bộ phần mềm Shlink đang hoạt động trên máy chủ của mình. Tuy nhiên, để truy cập nó, bạn vẫn cần tạo SSL web proxy để ủy quyền hai container của bạn trên các domain khác nhau.

Để bắt đầu, hãy tạo bản ghi A mới cho giao diện frontend Shlink của bạn. Trong trường hợp này, ví dụ sẽ đặt bản ghi A cho giao diện người dùng của mình là “admin”.

2 bản ghi DNS cho máy chủ Shlink demo.
2 bản ghi DNS cho máy chủ Shlink demo.

Tạo file cấu hình trang web cho phiên bản Shlink bằng trình soạn thảo văn bản yêu thích của bạn:

sudo nano /etc/nginx/sites-available/shlink

Dán block code sau vào file cấu hình của bạn:

server {
 
        server_name YOUR-ROOT.DOMAIN;
 
        location / {
                proxy_pass http://127.0.0.1:8081;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
        }
}
 
server {
 
        server_name SUBDOMAIN.YOUR-ROOT.DOMAIN;
 
        location / {
                proxy_pass http://127.0.0.1:8080;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
        }
}

Thay thế biến “YOUR-ROOT.DOMAIN” bằng root domain của bạn và thay thế “SUBDOMAIN.YOUR-ROOT.DOMAIN” bằng subdomain cho giao diện frontend của bạn.

Lưu file cấu hình của bạn, sau đó kích hoạt ứng dụng web của bạn trong Nginx:

sudo ln -s /etc/nginx/sites-available/shlink /etc/nginx/sites-enabled/

Load lại daemon Nginx của bạn để áp dụng cài đặt mới của bạn:

sudo systemctl reload nginx

Đăng ký máy chủ của bạn với Electronic Frontier Foundation:

sudo certbot register --agree-tos -m YOUR@EMAIL.ADDRESS

Yêu cầu chứng chỉ SSL multi-domain mới cho phiên bản Shlink của bạn:

sudo certbot --nginx -d YOUR-ROOT.DOMAIN -d SUBDOMAIN.YOUR-ROOT.DOMAIN

Xác nhận rằng máy chủ Shlink đang hoạt động bình thường bằng cách điều hướng tới bảng điều khiển dành cho quản trị viên phiên bản của bạn. Trong trường hợp này, đó là “https://admin.helloserver.top”.

Landing page mặc định cho phiên bản Shlink.
Landing page mặc định cho phiên bản Shlink.

Tạo liên kết đầu tiên bằng Shlink

Để sử dụng phiên bản mới của bạn, hãy nhấp vào mục menu Shlink trên landing page.

Menu Shlink trên landing page của phiên bản.
Menu Shlink trên landing page của phiên bản.

Dán URL dài của bạn vào hộp văn bản URL to be shortened trong danh mục Create a short URL.

Cung cấp một số siêu dữ liệu cho liên kết ngắn của bạn, sau đó nhấp vào Save để tạo liên kết của bạn.

Biểu mẫu tạo liên kết ngắn trong Shlink.
Biểu mẫu tạo liên kết ngắn trong Shlink.

Mở URL ngắn mới của bạn trên tab trình duyệt mới, sau đó nhấp vào nút Visits trên bảng điều khiển Shlink của bạn để kiểm tra xem nó có hoạt động bình thường hay không.

Số liệu phân tích cơ bản về liên kết mẫu trên Shlink.
Số liệu phân tích cơ bản về liên kết mẫu trên Shlink.

Cài đặt và triển khai dịch vụ rút ngắn liên kết riêng chỉ là bước đầu tiên để lấy lại quyền riêng tư trực tuyến của bạn. Tìm hiểu cách Linux có thể giúp bạn lấy lại quyền riêng tư hơn nữa bằng cách host trang web ẩn danh của riêng bạn trong Ubuntu bằng Tor.

Thứ Tư, 03/04/2024 17:25
51 👨 197
0 Bình luận
Sắp xếp theo
    ❖ Linux