Bạn sẽ gặp một số URL (Uniform Resource Locators) rất dài trên internet. Nhiều site nhét thông tin visit của bạn vào URL: thứ như language, location, identification, reference code cho specials, và nhiều thứ khác. Điều này tạo ra URL rất dài.



Premium URL Shortener trên Code Canyon là cách làm URL dài thành ngắn. Trong tutorial này, tôi sẽ chỉ cách setup URL shortener riêng trên hệ thống và cách dùng nó.
URL Shortener là gì?
Bạn dùng URL mỗi khi lướt web. Nó xác định trang web và nội dung cụ thể. Vì có thể chứa tham số form hoặc search engine, URL có thể khá lớn.
https://tutsplus.com/tutorials/search/How%20to%20Draw%20Animals:%20Horses,%20Their%20Anatomy%20and%20Poses
URL này tìm trên Tuts+ chuỗi "How to Draw Animals: Horses, Their Anatomy and Poses". Chuỗi này 74 ký tự. Tôi thấy URL dài hơn 200 ký tự.
https://bit.ly/2oO8BqO
Khi dùng dịch vụ rút gọn URL như bit.ly, bạn nhận URL ngắn hơn nhiều. Cùng URL giờ 15 ký tự. Khi ai đó truy cập link, server bit.ly redirect browser đến URL đầy đủ. Lookup thêm trên URL khác delay load time, nhưng không nhiều.
Cài đặt Docker
Cách dễ nhất tạo local server là dùng môi trường ảo hóa. Nhưng chạy full system virtualizer tốn resource. Docker là virtualizer tối giản cho hệ thống terminal-based. Bạn có thể chạy Docker container (unix server nhỏ) dùng ít resource hệ thống.
Để chạy container trên hệ thống, bạn cần cài Docker. Chọn download phù hợp OS từ website Docker.
Với Docker cài xong, bạn cần chuẩn bị hệ thống tìm web service bạn sẽ tạo. Để làm vậy, bạn cần thay đổi file hệ thống. Trong file /etc/hosts cho Linux/macOS và c:\windows\System32\drivers\etc\lmhosts cho Windows, thêm dòng:
127.0.0.1 s.dev
Thay đổi này làm mọi tham chiếu https://s.dev trỏ về local system. Làm để service có hostname proper trước khi config.
Để tạo development area, tạo thư mục và đặt file zip Premium URL Shortener vào và giải nén. Bạn nên có cấu trúc thư mục:



Đây là documentation với file main.zip. Giải nén file này nữa. Sau khi giải nén, bạn nên có cấu trúc:



File main.zip chứa tất cả source code và resource cho service. Đây sẽ là thư mục bạn add vào Docker instance.
Bây giờ bạn cần Docker LAMP stack từ fauria. Với Docker chạy, gõ sau vào terminal:
docker pull fauria/lamp
Điều này download Fauria LAMP (Linux, Apache, MySQL, PHP) stack vào Docker. Sau khi download, tạo container với:
docker run --rm --name linkshort -p 80:80 -e LOG\_STDOUT=true -e LOG\_STDERR=true -e LOG\_LEVEL=debug -v {{service source directory}}:/var/www/html fauria/lamp Thay {{service source directory}} bằng đường dẫn đầy đủ đến thư mục chứa source file và resource. Lệnh này tạo container tên linkshort chạy port 80 và đưa error/log ra standard out.
Ngay bây giờ, mỗi lần stop và relaunch container, bạn mất tất cả info. Bạn cần chuyển database info vào source code directory để preserve nó mỗi reboot. Trong terminal, chạy lệnh:
docker exec -i -t linkshort bash mkdir /var/www/html/data cp -R /var/lib/MySQL/* /var/www/html/data exit
Lệnh đầu mở bash shell vào container. Lệnh hai tạo thư mục data trong source code directory. Container thấy source code directory như /var/www/html. Lệnh ba copy database info vào thư mục đó. Lệnh exit thoát container.
Bây giờ stop container bằng:
docker stop linkshort
Bạn dùng lệnh này mỗi lần muốn stop container.
Bây giờ, restart container với data directory đúng, dùng lệnh:
docker run --rm --name linkshort -p 80:80 -e LOG\_STDOUT=true -e LOG\_STDERR=true -e LOG\_LEVEL=debug -v {{service source directory}}:/var/www/html -v {{service source directory}}/data:/var/lib/mysql fauria/lamp Lần này bạn tạo container với MarianDB server dùng database data lưu trên máy bạn. Đây là lệnh bạn dùng launch service. Tôi dùng keyboard expander Typinator gõ giúp.
Bây giờ, database cho URL shortener cần tạo. Bạn cần mở shell vào container. Trong terminal mới, gõ:
docker exec -i -t linkshort bash
Lệnh này tạo bash shell vào container. Nếu cần adjust gì trong container, đây là lệnh bạn dùng. Tiếp, mở command shell vào MarianDB:
mysql -u root
Bây giờ, bạn tạo database trong MarianDB và cấp quyền cho web server truy cập:
create database urlshort; create user 'www-data'@'localhost' identified by '{{password}}'; grant all on urlshort.\* to 'www-data'@'localhost'; quit; {{password}} cần set thành password bạn muốn cho user database. Nhớ nó để config service.
Với service chạy trong container, mở trình duyệt tới https://s.dev.



Nếu bạn config đúng, bạn sẽ thấy trang này. Trang này show requirement cho URL Shortener và status setup. Vì dùng fauria container trong Docker, bạn đã có tất cả dependency. Bấm nút xanh dưới trang.



Trang tiếp là configuration file creator cho service. Trang cho bạn đặt tên và password cho database bạn tạo trước.



Bạn điền field như trên. Database Host là localhost cho container. Database Name là urlshort, bạn tạo ở setup. Database User là www-data, và password là cái bạn gán ở setup database ban đầu. Database Prefix là tiền tố cho mỗi database tạo cho service. Tôi dùng short_. Chương trình cài đặt set Security Key. Giữ bản sao key để tham khảo sau.
Nếu cài trên VPS (Virtual Private Server), giá trị sẽ theo service đó. Một số giống, một số khác.
Với info đúng, bấm nút xanh dưới trang đến step 3.



Màn hình Basic Configuration cho bạn set admin username, email, password. Set theo giá trị của bạn. Site URL cần set https://s.dev như bạn setup trong file hosts trước. Xong, bấm nút xanh dưới màn hình.



Màn hình sau báo service đã setup xong. Bấm nút xanh ghi Delete install.php. Đây là security feature cho real web server, nhưng không cần cho local install. Tuy nhiên, cài đặt không xong cho đến khi bạn làm.



Chúc mừng—service hoạt động! Bạn nên thấy màn hình trên. Nếu bạn đưa URL dài vào field Paste a long url và bấm nút xanh Shorten, bạn nhận shortened URL dùng. URL cũng trong database để tham khảo sau. Tính năng này làm bookmarker tuyệt vời.
Sử dụng API
Bây giờ bạn có URL shortener chạy, bạn muốn dùng tốt nó. Nhưng luôn mở web page, kể cả local, làm chậm. Bạn cần nhanh hơn. Đó là lúc dùng API (Application Programming Interface) giúp. Bạn tham khảo full documentation cho API.
Với service chạy, mở trang https://s.dev/user/settings.



Bạn phải login để thấy trang. Góc dưới phải sidebar, bạn thấy Your API Key: với số alpha-numeric. Copy số đó lưu lại. Số này cho quyền truy cập API.
Để dùng API, bạn có thể tạo chương trình Ruby truy cập. Trên macOS và Linux, Ruby thường pre-installed. Trên Windows, bạn cài.
Chương trình Ruby tối thiểu tạo short link:
require 'net/http' require 'json' API = '{YourAPIKey}' short = JSON.parse(Net::HTTP.get('s.dev', '/api?api=' + API + '&url=' + ARGV[0])) if short["error"] == 0 then print short["short"] else print "An error happened: " print short["error"] print "\n" end Lưu script vào file shortener.rb, thay {YourAPIKey} bằng API key bạn copy, và chạy command line:
ruby shortener.rb 'google.com'
Bạn nhận shortened link cho URL đó. Tạo shortened URL, nhưng vẫn chưa tiện.
Tạo PopClip Extension
Trên Mac, PopClip là chương trình nhỏ tuyệt vời xử lý text highlight. Để tạo shortened link dễ hơn, bạn tạo PopClip extension. Tôi không giải thích tất cả về làm extension, nhưng bạn đọc tutorial PopClip: Scripting Extensions của tôi.
Tạo PopClip extension tên PremiumURLShortener.popclipext. Dùng sau cho file Config.plist trong extension directory:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Actions</key> <array> <dict> <key>After</key> <string>paste-result</string> <key>Image File</key> <string>PremiumURLShortener.png</string> <key>Script Interpreter</key> <string>/usr/bin/ruby</string> <key>Shell Script File</key> <string>PremiumURLShortener.rb</string> <key>Title</key> <string>Shortener</string> </dict> </array> <key>Options</key> <array> <dict> <key>Option Identifier</key> <string>apikey</string> <key>Option Type</key> <string>string</string> <key>Option Label</key> <string>API Key: </string> </dict> </array> <key>Credits</key> <array> <dict> <key>Name</key> <string>Richard Guay</string> <key>Link</key> <string>https://customct.com</string> </dict> </array> <key>Extension Description</key> <string>Create shortened URLs with PremiumURLShortener locally</string> <key>Extension Identifier</key> <string>com.customct.popclip.extension.premiumurlshortener</string> <key>Extension Name</key> <string>Shortener</string> <key>Required Software Version</key> <integer>701</integer> </dict> </plist> Sau đó tạo script file extension tên PremiumURLShortener.rb và đặt code này:
#!/usr/bin/ruby require 'net/http' require 'json' Encoding.default_internal = Encoding::UTF_8 Encoding.default_external = Encoding::UTF_8 input = ENV['POPCLIP_TEXT'].to_s.strip() API = ENV['POPCLIP_OPTION_APIKEY'].to_s.strip() short = JSON.parse(Net::HTTP.get('s.dev', '/api?api=' + API + '&url=' + input)) if short["error"] == 0 then print short["short"] else print "An error happened: " print short["error"] print "\n" end Khi load extension mới, nó hỏi API key. Khi bạn đưa key và bấm Okay, nó dùng được trong PopClip.



Khi bạn select link, PopClip mở với list option. Bạn chọn Shortener. Nó suy nghĩ một chút rồi paste shortened URL đúng. Full extension trong download tutorial. Bây giờ bạn sẵn sàng làm nhiều hơn!
Kết luận
Không chỉ bạn có private URL shortener, bạn cũng biết dùng Docker chạy local container, cách dễ dàng track URL bạn dùng, và cách tạo shortened link.
Bạn có thể dùng Ruby script với Alfred 3 hoặc Keyboard Maestro cũng được. Thưởng thức service mới và experiment các feature khác!