Otu esi etinye Shlink URL Shortener na Nginx na Ubuntu 20.04

Shlink bụ ihe n'efu, onye na-emepe emepe URL shortener nke onwe nke edere na PHP nke na-enye ma REST na interface CLI iji soro ya na-emekọ ihe iji mepụta na jikwaa URL ndị dị mkpirikpi. Otu n'ime isi njirimara yana mkpirisi URL bụ na ị nwere ike soro nleta niile na URL ndị a emepụtapụtara dị ka ọnọdụ, ihe nchọgharị, onye na-ezo aka na ọtụtụ ndị ọzọ. Na mgbakwunye, onye ahịa webụ Shlink gọọmentị na-eji Shlink's REST API ma na-enye onye ọrụ WebUI nhọrọ.

Na njedebe nke ntuziaka, ị ga-ama otu esi etinye Shlink URL Shortner na sava Ubuntu 20.04 LTS Focal Fossa site na iji Nginx. Otu ụkpụrụ ahụ ga-arụ ọrụ maka ụdị ọhụrụ Ubuntu 21.04 (Hirsute Hippo) nkesa.

Ihe ndi choro

  • OS akwadoro: Ubuntu 20.04 - nhọrọ (Ubuntu 21.04 na Linux Mint 20).
  • Akaụntụ onye ọrụ: Akaụntụ onye ọrụ nwere sudo ma ọ bụ ohere mgbọrọgwụ.
  • Ngwungwu achọrọ: mariadb php7.4 ma ọ bụ php8.0 arụnyere na ahaziri.
  • Ngwungwu ndị ọzọ: curl wget unzip.

Lelee ma kwalite sistemụ arụmọrụ Ubuntu gị.

sudo apt update && sudo apt upgrade -y

Ọzọ, wụnye ngwugwu achọrọ maka ntuziaka a:

sudo apt install curl wget unzip

Advertisement


Budata Shlink Archive

Nzọụkwụ mbụ bụ ịga na ibe Shlink Github wee lelee ụdị kwụsiri ike kachasị ọhụrụ. N'oge ntuziaka a, ụdị kwụsiri ike ugbu a bụ 2.7.1. Agbanyeghị, nke a ga-agbanwe n'ọdịnihu. Shlink na-abịa na ụdị 3 maka PHP 7.4, PHP 8.0 na koodu isi mmalite.

Ka ibudata Shlink, 2.7.1, mebie iwu a:

PHP 7.4:

wget https://github.com/shlinkio/shlink/releases/download/v2.7.1/shlink2.7.1_php7.4_dist.zip

PHP 8.0:

wget https://github.com/shlinkio/shlink/releases/download/v2.7.1/shlink2.7.1_php8.0_dist.zip

Koodu Isi mmalite:

wget https://github.com/shlinkio/shlink/archive/refs/tags/v2.7.1.zip

Maka ebumnuche ntuziaka, ọ ga-agbaso ihe atụ nbudata PHP 7.4. Nzọụkwụ ọzọ bụ iji (kpọpuo ya) iwu ka wepụta Archive na gị (/var/www/html) ndekọ.

sudo unzip shlink2.7.1_php7.4_dist.zip -d /var/www/html

Ịkwesịrị ịnyegharị folda ewepụtara aha iji mee ka ndụ dịkwuo mfe site n'ime iwu na-esonụ:

sudo mv /var/www/html/shlink2.7.1_php7.4_dist/ /var/www/html/shlink

Tupu ịga n'ihu, a na-adụ ọdụ ka ịtọ ikike nke ndekọ aha na (www-data) onye ọrụ dị ka ọ dị ugbu a ka edobere ya (mgbọrọgwụ). Iji mee nke a, pịnye ma tinye ihe ndị a (chown) iwu:

sudo chown -R www-data:www-data /var/www/html/shlink/

Mepụta nchekwa data MariaDB ọhụrụ na onye ọrụ maka Shlink

Nzọụkwụ ọzọ bụ ịmepụta nchekwa data ọhụrụ yana onye ọrụ ọhụrụ raara onwe ya nye nwere naanị ikike ịnweta nchekwa data a. A naghị atụ aro ka iji mgbọrọgwụ ma ọ bụ otu akaụntụ onye ọrụ na ọtụtụ ọdụ data ma ọ bụrụ na otu onye na-emebi.

Ntuziaka ahụ etinyere MariaDB ma mara nkọwa okwu dị n'okpuru.

Tinye MariaDB/MySQL njikwa njedebe site na ịme iwu mgbọrọgwụ:

sudo mysql -u root

Na-esote, mepụta nchekwa data ọhụrụ maka Shlink site na iji iwu njedebe ndị a:

CREATE DATABASE shlink;

Mgbe ịmepụtara nchekwa data ahụ, mepụta akaụntụ onye ọrụ ọhụrụ wee nye ya ohere ịnweta nchekwa data Shlink. Ọ bụrụ na ị na-akwado Nginx, PHP na MariaDB n'otu ihe nkesa, debe ya (localhost). Ọ bụrụ na ị na-eji ihe nkesa nke abụọ iji kwado MariaDB na ime ma ọ bụ mpụga, tinye ya (adreesị IP) na ebe (localhost).

GRANT ALL ON shlink.* TO 'shlinkuser'@'localhost' IDENTIFIED BY 'password';

Iji mee mgbanwe ndụ, ị ga-ekpochapụ ihe ùgwù ndị a:

FLUSH PRIVILEGES;

Iji pụọ na njedebe MariaDB mebie iwu a:

EXIT;

Advertisement


Wụnye ụdị PHP 7.4 kacha ọhụrụ & ndọtị

Dịka akụkụ nke ihe achọrọ, PHP 7.4 ma ọ bụ 8.0 chọrọ. Shlink chọrọ ndọtị ụfọdụ maka sọftụwia ahụ iji PHP rụọ ọrụ. Ọ dị mma maka ijide n'aka na PHP dị ọhụrụ. PPA omenala nke Ondrej, onye na-elekọta na PHP maka Debian, ka akwadoro nke ukwuu.

N'okpuru ebe a, ntuziaka ahụ ga-agbakwunye ebe nchekwa ahụ wee wụnye ndọtị PHP achọrọ maka PHP 7.4. Ọ bụrụ na ịchọrọ ịwụnye PHP 8.0, gbanwee 7.4 ka ọ bụrụ 8.0 ma ọ bụ gaa na onye ọrụ anyị Otu esi etinye PHP 8.0 na nkuzi Ubuntu 20.04.

Wụnye omenala PHP PPA site ondrey:

sudo apt install software-properties-common && sudo add-apt-repository ppa:ondrej/php -y

Mgbe ịgbakwunye ebe nchekwa ahụ, mebie iwu a ka imelite ma ọ bụ wụnye ngwa PHP 7.4 kachasị ọhụrụ:

sudo apt install php7.4-apcu php7.4-fpm php7.4-mysql php7.4-gd php7.4-common php7.4-curl php7.4-intl php7.4-gmp php7.4-xml php7.4-json -y

Iji jide n'aka na PHP 7.4 na-agba ọsọ nke ọma mgbe echichi ma ọ bụ melite, tinye ihe ndị a:

sudo systemctl status php7.4-fpm

Ihe atụ mmepụta:

PHP-FPM 7.4 na-agba ọsọ na Ubuntu 20.04 tinye Shlink

Ịwụnye Shlink

Ugbu a ị nwere ike ịga n'ihu na ịwụnye PHP Shlink script dị ka nke (www-onye ọrụ) site na ime iwu PHP ndị a na ọdụ Ubuntu gị:

sudo -u www-data php7.4 /var/www/html/shlink/bin/install

Ozugbo, ị ga-ahụ onwe gị na-ele anya na ihuenyo ọhụrụ nke ga-ajụ gị ka ịbanye nkọwa nchekwa data.

otu esi etinye shlink na ubuntu na nginx

database

Na ntuziaka, ị ga-ahọrọ MariaDB; Otú ọ dị, ọ bụrụ na ị na-ahọrọ ịla azụ na ịtọ ọzọ nhọrọ nchekwa data software, ị nwere ike ime nke a n'ezie.

Dị ka ọ dị n'okpuru, ihe atụ nke ịmepụta Shlink iji MariaDB:

otu esi etinye shlink na ubuntu na nginx

Nhọrọ ndị etinyere na nchịkọta:

  • Họrọ ụdị nchekwa data: 1 (MariaDB)
  • Aha ọdụ data: shlink
  • ọdụ ụgbọ mmiri: 3306
  • Aha njirimara database: shlinkuser
  • Okwuntughe nchekwa data:
  • oghere Unix:

URL Shorter

Na ihuenyo ọzọ, ị ga-ahụ ibe nhọrọ ọzọ. Ebe a, ị ga-ahụ kpọmkwem HTTP ma ọ bụ HTTPS, ngalaba aha, na ụfọdụ Shlink URL nhọrọ. Ntọala ihe atụ n'okpuru:

otu esi etinye shlink na ubuntu na nginx

Nhọrọ ndị etinyere na nchịkọta:

  • Ngalaba ndabara maka URL mkpirisi emepụtara:
  • Họrọ atụmatụ maka URL mkpirisi emepụtara: HTTPS (Jiri HTTP ma ọ bụrụ na ị naghị eji SSL)
  • Ị chọrọ iji koodu ọkwa HTTP 200 kwado ogologo url na nzaghachi? (ee/ mba): ee
  • Kedu ogologo ndabara nke ịchọrọ iwepụta koodu mkpụmkpụ ka ọ nwee? (Ị ka ga-enwe ike ịkagbu nke a na URL ọ bụla emepụtara): 5
  • Ịchọrọ ka Shlink dozie aha URL dị mkpụmkpụ dabere na mkpado aha URL ogologo (ọ bụrụ na ọ bụla)? Ma ọ bụghị ya, a ga-edobe ya ma ọ bụrụ na enyereghị ya nke ọma. (ee/ mba): ee
  • Nye igodo ikike GeoLite2. (Hapụ ihe efu iji jiri nke ndabara, mana a na-atụ aro ka ị nweta nke gị. Gaa na https://shlink.io/documentation/geolite-license-key ka ịmata ka esi enweta ya): igodo ikike

Ọ bụrụ na ịchọrọ iji GeoLite2, ị ga-achọ mepụta akaụntụ na MaxMind wee mepụta igodo. Enwere ike ịchọta ntuziaka maka ime nke a na MaxMind GeoLite2's akwụkwọ. Ozugbo emechara, dochie ma tinye igodo gị na nhazi Shlink.

Na-esote, ị ga-enwe nhọrọ ịtọ 301 ma ọ bụ 302 re-direct. Ị ga-eji 301, ma ọ bụ ọzọ gị SEO, dị ka software na-atụ aro, n'ezie nwere ike imerụ ahụ n'ụzọ dị iche iche.

otu esi etinye shlink na ubuntu na nginx

Ndepụta

Mgbe ịtọlitechara 301 dị ka ntụgharị aka gị na-adịgide adịgide, ibe na-esote ị ga-ahụ bụ nsuso. Ọtụtụ n'ime ntọala ndabara dị mma, ma ọ bụrụ na ịnọ na EU ma ọ bụ nwee ndị ọbịa EU, ị ga-ewepụrịrị data gị nke ọma Shlink nwere ike imere gị.

Ntọala ihe atụ n'okpuru:

otu esi etinye shlink na ubuntu na nginx

Nhọrọ ndị etinyere na nchịkọta:

  • Ị chọrọ soro nleta ụmụ mgbei? (nleta na URL isi, URL ndị na-adịghị mma ma ọ bụ URL ndị ọzọ "ahụghị"): ee
  • Nye aha oke nke ị ga-enwe ike iji gbanyụọ nsochi na arịrịọ kpọmkwem maka URL ndị dị mkpụmkpụ (hapụ ihe efu na njirimara a agaghị enwe ike):
  • Ịchọrọ ịkwụsị kpam kpam nsuso nleta?: Ee e
  • Ị chọrọ gbanyụọ nsuso adreesị IP ndị ọbịa?: Ee e
  • Ịchọrọ gbanyụọ nsochi "ndị ọrụ ọrụ" ndị ọbịa?: ee
  • Ịchọrọ ka akọwapụta adreesị IP ndị ọbịa nke dịpụrụ adịpụ tupu ị nọgide na ya na nchekwa data?: ee
  • Ị chọrọ gbanyụọ nsochi nke ndị ọbịa '' ndị ọrụ ọrụ'?: mba
  • Ị chọrọ gbanyụọ nsuso "Referrers" ọbịa? (ee/ mba): mba

Redirects

Ntọlite ​​​​redirect dị mfe. Nhọrọ kacha mma bụ ijikọ ihe niile azụ na ibe ụlọ gị maka njehie 404 ọ bụla / ahụghị nke nwere ike ime na weebụsaịtị gị. Ọmụmaatụ n'okpuru:

otu esi etinye shlink na ubuntu na nginx

Nhọrọ ndị etinyere na nchịkọta:

  • URL omenala ka ibugharị gaa na mgbe onye ọrụ kụrụ URL isi Shlink (Ọ bụrụ na enweghị uru ọ bụla, onye ọrụ ga-ahụ ibe "404 ahụghị" ndabara): https://www.example.com
  • URL omenala ka ibugharị gaa na mgbe onye ọrụ kụrụ URL dị mkpụmkpụ na-ezighi ezi (Ọ bụrụ na enweghị uru ọ bụla, onye ọrụ ga-ahụ ibe "ahụghị 404" ndabara): https://www.example.com
  • URL omenala ka ibugharị gaa na mgbe onye ọrụ kụrụ URL ahụghị URL na-abụghị URL dị mkpụmkpụ na-ezighi ezi (Ọ bụrụ na enweghị uru ọ bụla, onye ọrụ ga-ahụ ibe "404 ahụghị" ndabara): https://www.example.com

ngwa

Na nhọrọ ngwa, ị nwere ike mee ka nlele nchekwa, nke ga-ekwe ka ihichapụ URL ndị dị mkpirikpi mgbe nleta ole na ole gasịrị, yana ịtọ ụzọ nke Shlink ga-esi na ya rụọ ọrụ ma ọ bụrụ na ọ bụghị ụzọ mgbọrọgwụ:

otu esi etinye shlink na ubuntu na nginx

Nhọrọ ndị etinyere na nchịkọta:

  • Ịchọrọ ịme ka nlele nchekwa nke na-agaghị ekwe ka ihichapụ URL ndị dị mkpirikpi mgbe ị nwetasịrị ọnụọgụ nleta?: ee
  • Kedu ọnụọgụ nleta nke sistemu ahụ agaghị ekwe ka ihichapụ URL dị mkpụmkpụ?: 15
  • Kedu ụzọ a ga-esi nweta shlink? (Hapụ ihe efu ma ọ bụrụ na ị na-eme atụmatụ ijere shlink site na mgbọrọgwụ nke ngalaba):

Mara, ị nwere ike gbanwee 15 ka ọ bụrụ ihe buru ibu ma ọ bụ obere dabere na saịtị gị, ọkachasị gburugburu okporo ụzọ.

Mmekọrịta

Shlink nwere naanị otu njikọta: Redis, nke ị nwere ike hazie n'okpuru otu ma ọ bụ ụyọkọ. A na-atụ aro ka iji otu ihe nkesa maka Redis ruo mgbe ị maara nke ọma na nchịkọta Redis, sharding na replication dị ka ọ dị omimi, na nkezi obere na ebe nrụọrụ weebụ na-ajụ ekwesịghị ịchọ nke a ọ gwụla ma ịnweta nnukwu okporo ụzọ.

otu esi etinye shlink na ubuntu na nginx

N'ime ntuziaka ahụ, anyị hapụrụ ya oghere, mana ọ bụrụ na ị ga-eji ya na localhost, pịnye 127.0.1.1: 6379.

Ekele, ị tinyela Shlink na Ubuntu 20.04.

otu esi etinye shlink na ubuntu na nginx

Advertisement


Nginx Server ngọngọ Ihe atụ

Iji jiri Shlink na Nginx, ị ga-achọ ịhazi ngọngọ nkesa gị. Ị nwere ike ime nke a site na iṅomi na mado nhazi ndị a na imezi ya ka ọ dabara na mkpa gị na HTTPS ma ọ bụ:

server {
   listen 80;
   listen [::]:80;
   server_name www.linuxcapable.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 / {
     # try to serve file directly, fallback to app.php
     try_files $uri /index.php$is_args$args;
   }

   # redirect some entire folders
     rewrite ^/(vendor|translations|build)/.* /index.php break;

   location ~ \.php$ {
     fastcgi_split_path_info ^(.+\.php)(/.+)$;
     fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
     fastcgi_index index.php;
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
     include fastcgi_params;
   }

}

Tupu ịmalitegharị ihe nkesa Nginx gị, mee ọsọ ọsọ site na itinye koodu ndị a:

sudo nginx -t

Ị ga-enweta ihe mmepụta ndị a:

nginx: the configuration file /etc/nginx/my-server.conf syntax is ok
nginx: configuration file /etc/nginx/my-server.conf test is successful

Ọ bụrụ na ihe niile dị mma, malitegharịa ihe nkesa Nginx gị dị ka n'okpuru:

sudo systemctl restart nginx

Mepụta Short Links

Iji mepụta njikọ dị mkpirikpi na Shlink, ị ga-ebu ụzọ mepụta igodo API site na ịme iwu PHP:

sudo -u www-data php7.4 /var/www/shlink/html/bin/cli api-key:generate

Ozugbo ị nwere igodo API gị, ị ga-aga Shlink.io ka ịdebanye aha ihe nkesa gị.

otu esi etinye shlink na ubuntu na nginx

Tinye aha nkesa, URL nke ihe nkesa na igodo API dịka ọmụmaatụ n'okpuru:

otu esi etinye shlink na ubuntu na nginx

Ugbu a ị nwere ike tinye njikọ dị mkpirikpi site na iji Shlink's WebUI ma ọ bụrụ na ịchọrọ. Cheta na echekwara ihe ndị a na sava gị:

otu esi etinye shlink na ubuntu na nginx

Nhọrọ a na-ahụkarị bụ iji iwu ọnụ iji mepụta URL dị mkpụmkpụ.

Iji mee nke a, mebie iwu a:

sudo -u www-data /var/www/html/shlink/bin/cli short-url:generate

Iji depụta URL ndị dị mkpụmkpụ emepụtara, na-eji iwu a:

sudo -u www-data /var/www/html/shlink/bin/cli short-url:list

Iji chọọ enyemaka, mee iwu a:

sudo -u www-data php /var/www/html/shlink/bin/cli

Ihe atụ mmepụta:

Usage:
  command [options] [arguments]

Options:
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable ANSI output
  -n, --no-interaction  Do not ask any interactive question
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  help                Displays help for a command
  list                Lists commands
 api-key
  api-key:disable     Disables an API key.
  api-key:generate    Generates a new valid API key.
  api-key:list        Lists all the available API keys.
 db
  db:create           Creates the database needed for shlink to work. It will do nothing if the database already exists
  db:migrate          Runs database migrations, which will ensure the shlink database is up to date.
 short-url
  short-url:delete    Deletes a short URL
  short-url:generate  Generates a short URL for provided long URL and returns it
  short-url:list      List all short URLs
  short-url:parse     Returns the long URL behind a short code
  short-url:visits    Returns the detailed visits information for provided short code
 tag
  tag:create          Creates one or more tags.
  tag:delete          Deletes one or more tags.
  tag:list            Lists existing tags.
  tag:rename          Renames one existing tag.
 visit
  visit:locate        Resolves visits origin locations.

Advertisement


Okwu na mmechi

Ị mụtala otu esi etinye Shlink na Ubuntu 20.04 na nbudata ebe nchekwa, wepụ, ịmepụta nchekwa data na onye ọrụ na MariaDB, na-agba ọsọ site na Shlink installer, Ịmepụta ma ọ bụ Mgbanwe Nginx nkesa ngọngọ na n'ikpeazụ, ịmụta otú e si emepụta URL dị mkpirikpi na nkuzi a. .

N'ozuzu, Shlink bụ otu n'ime nhọrọ URL kachasị mma ugbu a na ekwesịrị ịtụle ma ọ bụrụ na ịchọrọ idobe URL dị mkpirikpi na ngalaba na njikwa gị. Maka ozi ndị ọzọ, gaa na akwụkwọ akwụkwọ sitere na Shlink.

Ọ bụrụ na ị nwere ajụjụ, nweere onwe gị ịhapụ ikwu okwu n'okpuru.

Ahapụ a Comment