ساخت سایت کوتاه‌کننده‌ی لینک با yourls در اوبونتو

چه جوری می شه یه سایت «لینک کوتاه ساز» (URL Shortener) ساخت؟ مثل bit.ly (یا مرحوم goo.gl یا سایت ایرانی b2n.ir). سایتی که بتونیم لینک های بلندمون رو بهش بدیم و اون لینک کوتاهش رو بهمون بده؟ سایتی که نگران تعطیل شدنش هم نباشیم و مال خودمون باشه (مثل vrgl.ir که مال خود ویرگوله) و بتونیم به صورت خودکار برای صفحات سایتمون لینک کوتاه بسازیم.خب الان اگه در گیتهاب بگردید، شاید هزاران مخزن «لینک کوتاه ساز» وجود داشته باشه. من سراغ یکی از معروف ترین هاش رفتم: YOURLS که مخفف Your Own URL Shortener است. از این به بعد دوستمون رو یورلز (با این که تلفظ سختی پیدا می کنه) صدا می کنیم. مخزن یورلز خوب به روز می شه و آدمای زیادی توش مشارکت داشتند و خلاصه با استانداردهای گیتهابی، کد خوبی محسوب می شه. و طبیعتن متن باز و رایگانه. یورلز با php نوشته شده.من این جا می خوام تجربه ی خودم از نصب یورلز روی اوبونتوی 16.04 (که البته مشابه نصب روی اوبونتوی 18.04 و 22.04ه) از روی این منبع بگم و البته چیزایی رو بهش اضافه کنم.نکته: فرض بر اینه که شما به command line اوبونتوی خودتون به صورت ادمین دسترسی دارید. اما اگه دسترسی ندارید، می تونید اول هر کدوم از این دستورها از کلمه ی جادویی sudo استفاده کنید (و البته که باید پسورد sudo رو داشته باشید).گام صفر: خرید یک دامنه ی کوتاه و تنظیم دامنه روی سرورقاعدتا اول باید یک دامنه ی کوتاه بخرید و وصلش کنید به سرورتون که ربطی به این آموزش نداره. من از ابرآروان سرور گرفتم و دامنه رو هم از طلاهاست خریدم (اینا تبلیغ نیست! تجربه است). دامنه ی s1f.ir که کوتاه و خوشگل باشه!گام اول: به روز کردن و نصب چیزایی که لازمهبیایم اول مخازنمون رو آپدیت کنیم و افزونه های لازم php و cURL رو هم نصب کنیم:apt update apt install -y php php-fpm php-cli php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmathگام دوم: نصب ماریا دی بیتوی این آموزش برای مدیریت دیتابیس از MariaDB استفاده می شه. شما می تونید از mySQL یا هر سیستم مدیریت پایگاه داده ی رابطه ای دیگه هم استفاده کنید. روش نصب ماریا این جا توضیح داده شده و به طور خلاصه این جوریه:apt-get install software-properties-common apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 add-apt-repository &quotdeb [arch=amd64,arm64,ppc64el] http://mariadb.mirror.liquidtelecom.com/repo/10.4/ubuntu $(lsb_release -cs) main&quot apt -y install mariadb-server mariadb-clientبعدش از شما یه گذرواژه (پسورد) می خواد که دو بار می زنید و ست می شه اما اگه نخواست، باید این دستور رو بزنید:mysql_secure_installationو همون اول root password رو تعیین کنید. بقیه ی بخش های این دستور رو هم با زدن y می تونید رد کنید (که باعث می شه دیتابیس شما امن تر بشه).NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!حالا با دستور زیر می تونید وارد محیط مدیریت دیتابیس بشید (که بعد از زدن این دستور، ازتون پسورد mariaDB رو می خواد):mysql -u root -pو بعد دیتابیس مربوط به یورلز رو نصب کنید، یک کاربر با دسترسی کامل به این دیتابیس ایجاد کنید و برای این کاربر، یه رمز قوی انتخاب کنید:CREATE DATABASE yourls; GRANT ALL PRIVILEGES ON yourls.* TO 'yourls'@'localhost' IDENTIFIED BY &quotStrongPassword&quot FLUSH PRIVILEGES; QUITدقت کنید که می تونید اسم دیتابیس رو چیز دیگه ای بذارید، کاربر دیتابیس رو هم چیزی جز یورلز بنویسید و پسورد رو هم چیز دیگه ای بذارید.گام سوم: دانلود و تنظیم یورلزحالا وقتشه که اصل کاری رو نصب کنیم. توی این آموزش، یورلز رو توی پوشه ی srv گذاشته اما شما می تونید هر جای دیگه ای بذارید یا بذارید همون جای همیشگی: /var/www.cd /srv git clone https://github.com/YOURLS/YOURLS.gitحالا فایل کانفیگ اصلی خودمون رو از روی فایل نمونه می سازیم:cd YOURLS/user cp config-sample.php config.phpبا دستور زیر می تونیم فایل تنظیمات رو باز کنیم (من از ویرایشگر nano استفاده کردم که برای ما معمولیا ساده تره. شما اگه حرفه ای و خفن و گیک‌نما هستید از vi یا vim استفاده کنید).nano config.phpاز https://www.reddit.com/r/ProgrammerHumor/comments/838if8/nano_vs_vim/ توی این فایل، نام دیتابیس، نام کاربر دیتابیس، گذرواژه ی کاربر و پیشوند جداول دیتابیس رو می تونید تنظیم کنید. یعنی موارد زیر رو ویرایش کنید. * ** MySQL settings - You can get this info from your web host */ /** MySQL database username */ define( 'YOURLS_DB_USER', 'yourls' ); /** MySQL database password */ define( 'YOURLS_DB_PASS', 'StrongPassword' ); /** The name of the database for YOURLS */ define( 'YOURLS_DB_NAME', 'yourls' ); /** MySQL hostname. ** If using a non standard port, specify it like 'hostname:port', eg. 'localhost:9999' or '127.0.0.1:666' */ define( 'YOURLS_DB_HOST', 'localhost' ); /** MySQL tables prefix */ define( 'YOURLS_DB_PREFIX', 'yourls_' );در ادامه ی همین فایل باید اسم دامنه تون رو (همون دامنه ی کوتاه) بنویسید:/** YOURLS installation URL -- all lowercase, no trailing slash at the end. ** If you define it to &quothttp://sho.rt&quot, don't use &quothttp://www.sho.rt&quot in your browser (and vice-versa) */ define( 'YOURLS_SITE', 'http://xmp.ir' );در ادامه ی فایل می تونید ساعت محلی رو تنظیم کنید (نسبت به ساعت گرینویچ). این بخش زیاد مهم نیست. فقط توی نمایش زمان توی پنل ادمین یورلز (و طبیعتن در ثبت در دیتابیس) اهمیت داره. این بخش ممکنه توی فایل تنظیمات نباشه و خودتون مجبور شید اضافه اش کنید:** Server timezone GMT offset */ define( 'YOURLS_HOURS_OFFSET', '+3:30' );و در ادامه ی فایل، چند تا نام کاربری و گذرواژه برای دسترسی به پنل ادمین یورلز بسازید:/** Username(s) and password(s) allowed to access the site. Passwords either in plain text or as encrypted hashes ** YOURLS will auto encrypt plain text passwords in this file ** Read http://yourls.org/userpassword for more information */ $yourls_user_passwords = array( 'admin' => 'AdminPassword', 'jmutai' => 'MyStrongPassword', // You can have one or more 'login'=>'password' lines );پسورد رو می تونید به صورت هش شده هم بنویسید اما اگه ننویسید هم خود یورلز بعدن تبدیلش می کنه (البته که «لا تبدیل لخلق الله»!)گام چهارم: نصب وب سرور انجین ایکسحالا باید یه وب سرور هم نصب کنید. می تونید از apache هم استفاده کنید اما توی این آموزش از nginx استفاده شده.sudo apt install -y nginxفایل تنظیمات مربوط به یورلز در انجین ایکس رو بسازید و بازش کنید:nano /etc/nginx/conf.d/yourls.confو توی فایل این ها رو بنویسید:server { listen 80; server_name example.com www.xmp.ir; root /srv/YOURLS; index index.php index.html index.htm; listen [::]:80; location / { try_files $uri $uri/ /yourls-loader.php$is_args$args; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; include fastcgi_params; } }مشخصه که داریم به انجین ایکس می گیم روی پورت 80 وب سرور رو راه بنداز و پوشه ی /srv/YOURLS رو وصل کن به دامنه ی xmp.ir.حالا چک می کنیم که انجین ایکس درست کار کنه:nginx -tکه باید این پاسخ رو بده:nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successfulحالا مالک پوشه ی یورلز رو وب سرور (www-data) قرار می دیم:sudo chown -R www-data:www-data /srv/YOURLSو nginx رو ریستارت می کنیم:sudo systemctl restart nginxگام پنجم: نصب یورلزخب دیگه کار تمومه. باید به آدرس xmp.ir/admin بریم، روی install YOURLS بزنیم:بذاریم پیش نیازها رو چک کنه: و بعد صفحه ی ورود رو بهمون نشون بده:حالا با یکی از همون نام کاربری و گذرواژه ها که توی فایل تنظیمات ست کردیم، وارد می شیم.و تمام!از این به بعد می تونید با این پنل لینک های کوتاه بسازید و آمار کلیک روی این لینک ها رو هم ببینید.