پشته LAMP مجموعهای از نرمافزارهای متنباز است که معمولا با هم نصب میشوند تا سرور قادر به میزبانی از وبسایتها و اپلیکیشنهای داینامیک باشد که با PHP نوشته شدهاند. اصطلاح LAMP از ابتدای کلمات سیستمعامل لینوکس (Linux)، وبسرور آپاچی (Apache)، پایگاه داده MySQL و PHP گرفته شده است. دادههای وبسایت در پایگاهداده MySQL ذخیره میشوند و محتوای داینامیک توسط PHP پردازش میشود.
در این راهنما، به آموزش نصب LAMP روی سرور ابری Ubuntu 22.04 میپردازیم. این مراحل برای نسخههای Ubuntu 18.04 و بالاتر نیز یکسان هستند.
پیشنیازهای نصب LAMP در اوبونتو
برای نصب LAMP روی لینوکس، به یک سرور ابری با سیستمعامل Ubuntu به همراه یک کاربر غیرریشه (Non-root) با دسترسی sudo و یک فایروال فعال نیاز دارید.
اگر از نسخه 16.04 یا پایینتر Ubuntu استفاده میکنید، پیشنهاد میکنیم سیستمعامل خود را به نسخه جدیدتر ارتقا دهید؛ زیرا اوبونتو دیگر از این نسخهها پشتیبانی نمیکند.
1. نصب Apache و بهروزرسانی فایروال
وبسرور Apache یکی از محبوبترین وبسرورها در جهان است؛ زیرا مستندات زیادی درباره آن وجود دارد، جامعه فعالی از کاربران را پشتیبانی میکند و بهطور گستردهای در طول تاریخچه وب استفاده شده است. به همین خاطر آپاچی به گزینهای عالی برای میزبانی یک وبسایت به شمار میرود.
ابتدا با بهروزرسانی حافظه پنهان (Cache) مدیر بسته (Package) شروع کنید. اگر برای اولین بار است که در این جلسه (Session) از sudo استفاده میکنید، از شما خواسته میشود رمز عبور کاربر خود را وارد کنید تا تأیید شود که مجوزهای لازم برای مدیریت بستههای سیستم را با apt دارید:
sudo apt update
سپس، Apache را با این دستور نصب کنید:
sudo apt install apache2
از شما خواسته میشود تا نصب Apache را تأیید کنید. این کار را با فشردن Y و سپس ENTER انجام دهید.
پس از اتمام نصب، باید تنظیمات فایروال خود را برای اجازه دادن به ترافیک HTTP تنظیم کنید. ابزار پیکربندی پیشفرض فایروال اوبونتو Uncomplicated Firewall (UFW) نام دارد. این ابزار از پروفایلهای کاربردی مختلفی برخوردار است که میتوانید از آنها استفاده کنید. برای نمایش تمام پروفایلهای برنامه UFW موجود، این دستور را اجرا کنید:
sudo ufw app list
خروجی به شکل زیر نمایش داده خواهد شد:
Output
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
معنی هر یک از این پروفایلها در ادامه آورده شده است:
- Apache: این پروفایل فقط پورت 80 (ترافیک معمولی و بدون رمزگذاری وب) را باز میکند.
- Apache Full: این پروفایل هم پورت 80 (ترافیک معمولی و بدون رمزگذاری وب) و هم پورت 443 (ترافیک رمزگذاریشده TLS/SSL) را باز میکند.
- Apache Secure: این پروفایل فقط پورت 443 (ترافیک رمزگذاریشده TLS/SSL) را باز میکند.
در حال حاضر، بهتر است فقط اتصالها در پورت 80 را مجاز کنید؛ زیرا در این مرحله از نصب Apache هنوز گواهی TLS/SSL برای مجاز کردن ترافیک HTTPS روی سرور شما تنظیم نشده است.
برای مجاز کردن ترافیک فقط روی پورت 80، از پروفایل Apache استفاده کنید:
sudo ufw allow in "Apache"
تغییرات را با دستور زیر تایید کنید:
sudo ufw status
خروجی به شکل زیر خواهد بود:
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
اکنون ترافیک روی پورت 80 از طریق فایروال مجاز است.
شما میتوانید بلافاصله با مراجعه به آدرس IP عمومی سرور خود در مرورگر وب، صحت نصب را بررسی کنید (در بخش بعدی به شما آموزش میدهیم که چگونه آدرس IP عمومی سرورتان را پیدا کنید):
http://your_server_ip
صفحه پیشفرض وب Ubuntu Apache برای مقاصد اطلاعاتی و تستی وجود دارد. در زیر نمونهای از صفحه وب پیشفرض Apache برای اوبونتو 22.04 آمده است:
اگر میتوانید این صفحه را ببینید، وبسرور شما بهدرستی نصب شده و از طریق فایروال شما قابل دسترسی است.
چطور آدرس IP عمومی سرور خود را پیدا کنیم؟
اگر نمیدانید آدرس IP عمومی سرور شما چیست، روشهای مختلفی برای یافتن آن وجود دارد. آدرس IP عمومی سرور معمولا همان آدرسی است که برای اتصال به سرور از طریق SSH استفاده میکنید.
چند روش مختلف برای یافتن آدرس IP عمومی سرور از طریق خط دستور (Command line) وجود دارد. ابتدا میتوانید با نوشتن دستور زیر از ابزارهای iproute2 برای دریافت آدرس IP خود استفاده کنید:
ip addr show ens3 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
این دستور دو یا سه خط خروجی به شما میدهد که همه آنها آدرسهای صحیح هستند؛ اما کامپیوتر شما ممکن است فقط بتواند از یکی از آنها استفاده کند. بنابراین همه آنها را امتحان کنید.
یک روش جایگزین برای یافتن آدرس IP عمومی سرور استفاده از ابزار curl برای تماس با یک طرف خارجی است که به شما بگوید چگونه سرور شما را میبیند. این کار با درخواست از یک سرور خاص برای نمایش آدرس IP شما انجام میشود:
curl https://icanhazip.com
بعد از اینکه یکی از روشها را انجام دادید، آدرس IP خود را در مرورگر وب وارد کنید تا مطمئن شوید سرور شما در حال اجرا است.
2. نصب MySQL
حالا که وب سرور شما راهاندازی شده است، باید سیستم پایگاه داده را برای ذخیره و مدیریت دادههای سایتتان نصب کنید. MySQL یک سیستم مدیریت پایگاه داده محبوب است که در محیطهای PHP استفاده میشود و یکی از پیشنیازهای نصب وردپرس روی سرور مجازی نیز به شمار میرود.
دوباره از apt برای تهیه و نصب MySQL استفاده کنید:
sudo apt install mysql-server
هنگامی که از شما خواسته شد، با نوشتن Y و سپس فشردن دکمه ENTER نصب را تایید کنید.
پس از اتمام نصب، توصیه میشود یک اسکریپت امنیتی را که از قبل با MySQL نصب شده است، اجرا کنید. این اسکریپت برخی تنظیمات پیشفرض ناامن را حذف کرده و دسترسی به سیستم پایگاه داده شما را محدود میکند.
هشدار: از ژوئیه 2022، هنگام اجرای اسکریپت mysql_secure_installation بدون پیکربندی بیشتر، خطایی رخ میدهد؛ زیرا این اسکریپت تلاش میکند برای حساب کاربری ریشه در MySQL رمز عبور تنظیم کند، اما بهطور پیشفرض در نصبهای اوبونتو، این حساب برای اتصال با استفاده از رمز عبور پیکربندی نشده است.
قبل از ژوئیه 2022، این اسکریپت پس از تلاش برای تنظیم رمز عبور حساب ریشه، بیصدا با شکست مواجه میشد و بقیه دستورها را ادامه میداد. اما در حال حاضر، این اسکریپت پس از وارد کردن و تایید رمز عبور، خطای زیر را برمیگرداند:
Output
... Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.
New password:
این موضوع باعث میشود که اسکریپت وارد یک حلقه بازگشتی شود که تنها راه خروج از آن، بستن پنجره ترمینال است.
ازآنجاییکه اسکریپت mysql_secure_installation اقدامات دیگری را برای افزایش امنیت نصب MySQL انجام میدهد، هنوز توصیه میشود که آن را قبل از شروع استفاده از MySQL برای مدیریت دادههای خود اجرا کنید. برای جلوگیری از ورود به این حلقه بازگشتی، ابتدا باید نحوه احراز هویت کاربر ریشه MySQL را تنظیم کنید.
ابتدا با دستور زیر، اعلان MySQL را باز کنید:
sudo mysql
سپس دستور ALTER USER زیر را اجرا کنید تا روش احراز هویت کاربر ریشه را به روشی که از رمز عبور استفاده میکند، تغییر دهید. مثال زیر روش احراز هویت را به mysql_native_password تغییر میدهد:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
پس از انجام این تغییر، از اعلان MySQL خارج شوید:
exit
پس از آن، میتوانید اسکریپت mysql_secure_installation را بدون مشکل اجرا کنید.
با اجرای دستور زیر، اسکریپت تعاملی را شروع کنید:
sudo mysql_secure_installation
این اسکریپت از شما میپرسد که آیا میخواهید VALIDATE PASSWORD PLUGIN را پیکربندی کنید یا خیر.
نکته: در صورت فعال کردن این پلاگین، رمزهای عبوری که با معیارهای مشخصشده مطابقت ندارند، توسط MySQL با نمایش یک خطا رد میشوند. غیرفعال کردن اعتبارسنجی نیز بیخطر است، اما همیشه باید از رمزهای عبور قوی و منحصربهفرد برای اعتبار پایگاه داده استفاده کنید.
برای فعال کردن پلاگین، دکمه Y را بزنید و برای ادامه فرایند نصب LAMP در Ubuntu هر کلید دیگری را فشار دهید.
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:
درصورتیکه با «بله» (Y) پاسخ دهید، از شما خواسته میشود سطحی از اعتبارسنجی رمز عبور را انتخاب کنید. به خاطر داشته باشید اگر برای قویترین سطح عدد 2 را وارد کنید، باید رمز عبور شما حاوی اعداد، حروف کوچک و بزرگ و کاراکترهای خاص باشد؛ در غیر این صورت خطاهایی دریافت خواهید کرد:
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
صرفنظر از اینکه آیا VALIDATE PASSWORD PLUGIN را فعال کردهاید یا نه، سرور از شما میخواهد که یک رمز عبور برای کاربر ریشه MySQL انتخاب و تایید کنید. دقت داشته باشید که کاربر ریشه MySQL را با کاربر ریشه سیستم اشتباه نگیرید. کاربر ریشه پایگاه داده یک کاربر مدیریتی با امتیازهای کامل روی سیستم پایگاه داده است. اگر روش احراز هویت پیشفرض برای کاربر ریشه MySQL بهصورت استفاده از رمز عبور نباشد، حتی زمانی که یک رمز عبور تنظیم شده است، تعریف رمز عبور قوی بهعنوان یک اقدام امنیتی اضافه توصیه میشود.
در صورت فعالسازی اعتبارسنجی رمز عبور، قدرت رمز عبوری که وارد کردهاید، نمایش خواهد داد و سرور از شما میپرسد که آیا میخواهید با همین رمز عبور ادامه دهید یا خیر. اگر از رمز عبور فعلی خود راضی هستید، حرف Y را برای پاسخ «بله» وارد کنید:
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
برای سایر سوالات، کلید Y را بزنید و در هر اعلان، ENTER را فشار دهید. با این کار، برخی از کاربران ناشناس و پایگاه دادههای آزمایشی حذف میشوند، ورود از راه دور به حساب کاربری ریشه غیرفعال شده و این قوانین جدید بارگذاری میشود تا MySQL فوراً تغییرات شما را اعمال کند.
پس از اتمام این کار، با استفاده از دستور زیر تست کنید که آیا میتوانید به کنسول MySQL وارد شوید:
sudo mysql
این دستور شما را به سرور MySQL بهعنوان ریشه کاربر پایگاه داده مدیریتی متصل میکند که استفاده از sudo هنگام اجرای این دستور استنباط میشود. در زیر یک نمونه خروجی آورده شده است:
Output
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.28-0ubuntu4 (Ubuntu)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
برای خروج از کنسول MySQL دستور زیر را بنویسید:
Exit
توجه داشته باشید که برای اتصال بهعنوان کاربر ریشه نیازی به وارد کردن رمز عبور ندارید، حتی اگر هنگام اجرای اسکریپت mysql_secure_installation یک رمز عبور تعریف کرده باشید. زیرا unix_socket بهجای password، روش احراز هویت پیشفرض برای کاربر مدیریتی MySQL است. اگرچه این موضوع ممکن است یک نگرانی امنیتی به نظر برسد، اما unix_socket امنیت بیشتری را فراهم میآورد؛ زیرا تنها کاربرانی که اجازه ورود بهعنوان کاربر ریشه MySQL را دارند، کاربران سیستم با امتیازات sudo هستند که از کنسول یا از طریق برنامهای که با همان امتیازات اجرا میشود، متصل میشوند. یعنی شما نمیتوانید از کاربر ریشه مدیریتی پایگاه داده برای اتصال از برنامه PHP خود استفاده کنید. درصورتیکه روش احراز هویت پیشفرض از unix_socket به رمز عبور تغییر کند، تنظیم یک رمز عبور برای حساب کاربری ریشه MySQL بهعنوان یک تدبیر حفاظتی عمل خواهد کرد.
برای افزایش امنیت، بهتر است حسابهای کاربری اختصاصی با امتیازهای محدود برای هر پایگاه داده ایجاد کنید، بهویژه اگر قصد دارید چندین پایگاه داده را روی سرور خود میزبانی کنید.
توجه: برخی از نسخههای قدیمیتر PHP از caching_sha2_password که روش احراز هویت پیشفرض برای MySQL 8 است، پشتیبانی نمیکنند. به همین دلیل، هنگام ایجاد کاربران پایگاه داده برای برنامههای PHP در MySQL 8، ممکن است لازم باشد برنامه خود را برای استفاده از پلاگین mysql_native_password پیکربندی کنید.
اکنون سرور MySQL شما نصب و ایمن شده است. در مرحله بعدی از آموزش نصب LAMP روی سرور ابری اوبونتو، به نصب PHP بهعنوان آخرین مؤلفه در پشته LAMP خواهیم پرداخت.
3. نصب PHP
تا این قسمت از مقاله آموزش نحوه نصب LAMP روی سرور ابری، Apache را برای ارائه محتوای خود و MySQL را برای ذخیره و مدیریت دادههایتان نصب کردهاید. PHP مؤلفهای است که کد را برای نمایش محتوای پویا به کاربر نهایی پردازش میکند. علاوهبر بسته php، به php-mysql نیز نیاز دارید. این ماژول PHP به PHP اجازه میدهد با پایگاههای داده مبتنیبر MySQL ارتباط برقرار کند. همچنین به libapache2-mod-php نیاز دارید تا Apache را برای مدیریت فایلهای PHP فعال کنید. بستههای اصلی PHP بهطور خودکار بهعنوان وابستگیها نصب خواهند شد.
برای نصب بستههای PHP، دستور زیر را اجرا کنید:
sudo apt install php libapache2-mod-php php-mysql
پس از اتمام نصب، دستور زیر را برای تایید نسخه PHP خود اجرا کنید:
php -v
خروجی مشابه زیر خواهد بود:
Output
PHP 8.1.2 (cli) (built: Mar 4 2022 18:13:46) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies
تغییر Directory Index آپاچی (اختیاری)
در برخی موارد، ممکن است بخواهید روشی را که آپاچی فایلها را هنگام درخواست دایرکتوری ارائه میکند، تغییر دهید. در حال حاضر، اگر کاربری از سرور درخواست دایرکتوری کند، آپاچی ابتدا به دنبال فایلی به نام index.html میگردد. میخواهیم به وب سرور بگوییم که فایلهای PHP را بر سایرین ترجیح دهد تا آپاچی ابتدا به دنبال یک فایل index.php بگردد. اگر این کار را انجام ندهید، یک فایل index.html قرار داده شده در ریشه مستندات برنامه همیشه بر فایل index.php اولویت خواهد داشت.
برای انجام این تغییر، فایل پیکربندی dir.conf را در یک ویرایشگر متن باز کنید. در اینجا از nano استفاده خواهیم کرد:
sudo nano /etc/apache2/mods-enabled/dir.conf
خروجی مشابه زیر خواهد بود:
/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>
فایل PHP index را مانند زیر، به اولین موقعیت بعد از مشخصات DirectoryIndex منتقل کنید:
/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>
بعد از اتمام کار، با فشار دادن CTRL+X فایل را ذخیره کنید و ببندید. با تایپ Y ذخیره را تایید کنید و سپس برای تایید محل ذخیره فایل ENTER را بزنید.
پس از این، وب سرور آپاچی را مجددا راهاندازی (Restart) کنید تا تغییرات شما شناسایی شود. با دستور زیر میتوانید این کار را انجام دهید:
sudo systemctl restart apache2
همچنین میتوانید وضعیت سرویس apache2 را با استفاده از systemctl بررسی کنید:
sudo systemctl status apache2
خروجی مشابه زیر خواهد بود:
Sample Output
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Thu 2021-07-15 09:22:59 UTC; 1h 3min ago
Main PID: 3719 (apache2)
Tasks: 55 (limit: 2361)
CGroup: /system.slice/apache2.service
├─3719 /usr/sbin/apache2 -k start
├─3721 /usr/sbin/apache2 -k start
└─3722 /usr/sbin/apache2 -k start
Jul 15 09:22:59 ubuntu1804 systemd[1]: Starting The Apache HTTP Server...
Jul 15 09:22:59 ubuntu1804 apachectl[3694]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' di
Jul 15 09:22:59 ubuntu1804 systemd[1]: Started The Apache HTTP Server.
برای خروج از این وضعیت، Q را فشار دهید.
نصب افزونههای PHP (اختیاری)
برای گسترش عملکرد PHP، میتوانید چند ماژول اضافی را نصب کنید. جهت مشاهده گزینههای موجود برای ماژولها و کتابخانههای PHP، از دستور زیر استفاده کنید که خروجی جستوجوی apt را به less، که ابزاری برای پیمایش خروجی دستورات است، ارسال میکند:
apt search php- | less
از کلیدهای جهتدار برای حرکت به سمت بالا و پایین استفاده کنید و برای خروج دکمه Q را فشار دهید.
نتایج نشان داده شده همان اجزای اختیاری هستند که میتوانید نصب کنید.
bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64
Tracks usage of TCP/IP and builds html files with graphs
bluefish/bionic 2.2.10-1 amd64
advanced Gtk+ text editor for web and software development
cacti/bionic 1.1.38+ds1-1 all
web interface for graphing of monitoring systems
ganglia-webfrontend/bionic 3.6.1-3 all
cluster monitoring toolkit - web front-end
golang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all
PHP-like Compression and Archive Extensions in Go
haserl/bionic 0.9.35-2 amd64
CGI scripting program for embedded environments
kdevelop-php-docs/bionic 5.2.1-1ubuntu2 all
transitional package for kdevelop-php
kdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all
transitional package for kdevelop-php-l10n
…
:
برای کسب اطلاعات بیشتر در مورد عملکرد ماژولها در اینترنت جستوجو کنید. همچنین با تایپ دستور زیر میتوانید توضیحات هرکدام را بخوانید:
apt show package_name
با وارد کردن دستور بالا، خروجیهای زیادی دریافت خواهید کرد که از یک فیلد به نام Description میتوانید توضیح بیشتری از عملکرد ماژول به دست آورید.
بهعنوان مثال، برای اینکه بفهمید ماژول php-cli چه کاری انجام میدهد، میتوانید دستور زیر را بنویسید:
apt show php-cli
خروجی دستور بالا مشابه زیر خواهد بود:
Output
…
Description: command-line interpreter for the PHP scripting language (default)
This package provides the /usr/bin/php command interpreter, useful for
testing PHP scripts from a shell or performing general shell scripting tasks.
.
PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used
open source general-purpose scripting language that is especially suited
for web development and can be embedded into HTML.
.
This package is a dependency package, which depends on Ubuntu's default
PHP version (currently 7.2).
…
اگر پس از تحقیق، تصمیم به نصب یک بسته گرفتید، با استفاده از دستور apt install مانند سایر نرمافزارها این کار را انجام دهید.
بهعنوان مثال، برای نصب php-cli دستور زیر را تایپ کنید:
sudo apt install php-cli
برای نصب چند ماژول، میتوانید نام آنها را با یک فاصله در ادامه دستور apt install بنویسید؛ مانند زیر:
sudo apt install package1 package2 …
در این مرحله، پشته LAMP شما نصب و پیکربندی میشود. قبل از انجام هر کار دیگری، توصیه میکنیم یک میزبان مجازی آپاچی برای ذخیره جزئیات پیکربندی سرور خود راهاندازی کنید.
بهاینترتیب، پشته LAMP شما کاملا عملیاتی میشود، اما قبل از آزمایش تنظیمات خود با یک اسکریپت PHP، بهتر است یک میزبان مجازی آپاچی مناسب برای نگهداری فایلها و پوشههای وبسایت خود راهاندازی کنید.
4. ایجاد میزبان مجازی برای وبسایت
هنگام استفاده از وب سرور آپاچی، میتوانید میزبانهای مجازی (مشابه بلوکهای سرور در Nginx) ایجاد کنید تا جزئیات پیکربندی را کپسوله کرده و بیش از یک دامنه را از یک سرور واحد میزبانی کنید. در این راهنما، ما دامنهای به نام your_domain راهاندازی میکنیم، اما شما باید آن را با نام دامنه خود جایگزین کنید.
آپاچی در اوبونتو دارای یک میزبان مجازی است که بهطور پیشفرض فعال شده که برای ارائه اسناد از دایرکتوری /var/www/html پیکربندی شده است. این میزبان برای یک سایت بهخوبی کار میکند؛ اما در صورت میزبانی از چندین سایت، ممکن است با چالش مواجه شوید.
به همین دلیل، بهجای تغییر /var/www/html، یک ساختار دایرکتوری درون /var/www برای سایت your_domain ایجاد میکنیم و /var/www/html را بهعنوان دایرکتوری پیشفرض باقی میگذاریم. درصورتیکه درخواست مشتری با هیچکدام از سایتهای دیگر مطابقت نداشته باشد، این دایرکتوری ارائه خواهد شد.
دایرکتوری برای your_domain را بهصورت زیر ایجاد کنید:
sudo mkdir /var/www/your_domain
سپس، مالکیت دایرکتوری را به متغیر محیطی $USER، که به کاربر فعلی سیستم شما اشاره میکند، اختصاص دهید:
sudo chown -R $USER:$USER /var/www/your_domain
سپس، با استفاده از ویرایشگر خط فرمان دلخواهتان، یک فایل پیکربندی جدید را در دایرکتوری sites-available آپاچی باز کنید. در اینجا، از nano استفاده خواهیم کرد:
sudo nano /etc/apache2/sites-available/your_domain.conf
با این کار یک فایل خالی جدید ایجاد میشود. نام دامنه خود را به پیکربندی زیر اضافه کنید:
/etc/apache2/sites-available/your_domain.conf
<VirtualHost *:80>
ServerName your_domain
ServerAlias www.your_domain
ServerAdmin webmaster@localhost
DocumentRoot /var/www/your_domain
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
پس از اتمام کار، فایل را ذخیره کنید و ببندید. در صورت استفاده از nano، این کار را با فشار دادن CTRL+X، سپس Y و ENTER انجام دهید.
با این پیکربندی VirtualHost، به آپاچی میگوییم که your_domain را با استفاده از /var/www/your_domain بهعنوان دایرکتوری ریشه وب ارائه دهد. اگر میخواهید آپاچی را بدون نام دامنه آزمایش کنید، میتوانید گزینههای ServerName و ServerAlias را با اضافه کردن یک علامت پوند (#) به ابتدای خطوط هر گزینه، حذف یا تبدیل به کامنت کنید.
اکنون، از a2ensite برای فعال کردن میزبان مجازی جدید استفاده کنید:
sudo a2ensite your_domain
ممکن است بخواهید وبسایت پیشفرضی را که با آپاچی نصب شده است، غیرفعال کنید. چنانچه از نام دامنه سفارشی استفاده نمیکنید، غیرفعالسازی وبسایت پیشفرض ضروری است؛ زیرا در این مورد، تنظیمات پیشفرض آپاچی میزبان مجازی شما را لغو میکند. برای غیرفعال کردن وبسایت پیشفرض آپاچی، دستور زیر را بنویسید:
sudo a2dissite 000-default
برای اطمینان از اینکه فایل پیکربندی شما حاوی خطاهای نحوی (Syntax) نیست، دستور زیر را اجرا کنید:
sudo apache2ctl configtest
در نهایت، Apache را دوباره بارگیری کنید تا این تغییرات اعمال شوند:
sudo systemctl reload apache2
وبسایت جدید شما اکنون فعال است، اما ریشه وب /var/www/your_domain هنوز خالی است. برای آزمایش عملکرد میزبان مجازی، یک فایل index.html در آن مکان ایجاد کنید:
nano /var/www/your_domain/index.html
محتوای زیر را در این فایل قرار دهید:
/var/www/your_domain/index.html
<html>
<head>
<title>your_domain website</title>
</head>
<body>
<h1>Hello World!</h1>
<p>This is the landing page of <strong>your_domain</strong>.</p>
</body>
</html>
فایل را ذخیره کنید و ببندید؛ سپس وارد مرورگرتان شوید و به نام دامنه یا آدرس IP سرور خود دسترسی پیدا کنید:
http://server_domain_or_IP
صفحه وب شما باید محتویات فایلی را که بهتازگی ویرایش کردهاید، نمایش دهد:
شما میتوانید این فایل را بهعنوان یک صفحه لندینگ موقت برای برنامه خود نگه دارید تا زمانی که یک فایل index.php برای جایگزینی آن تنظیم کنید. پس از انجام این کار باید فایل index.html را از ریشه مستندات خود حذف کنید یا نام آن را تغییر دهید؛ زیرا بهطور پیشفرض بر فایل index.php ارجحیت دارد.
نکتهای درباره DirectoryIndex در آپاچی
با تنظیمات پیشفرض DirectoryIndex در آپاچی، فایلی با نام index.html همیشه بر فایل index.php اولویت دارد. این امر برای راهاندازی صفحات نگهداری در برنامههای PHP، با ایجاد یک فایل index.html موقت حاوی یک پیام اطلاعاتی برای بازدیدکنندگان مفید است.
ازآنجاییکه این صفحه بر صفحه index.php ارجحیت دارد، به صفحه لندینگ برنامه تبدیل خواهد شد. پس از پایان نگهداری، index.html تغییر نام داده یا از ریشه مستندات حذف شده و صفحه معمولی برنامه بازگردانده میشود.
اگر میخواهید این رفتار را تغییر دهید، باید فایل /etc/apache2/mods-enabled/dir.conf را ویرایش کنید و ترتیب فهرستبندی فایل index.php را در دستورالعمل DirectoryIndex تغییر دهید:
sudo nano /etc/apache2/mods-enabled/dir.conf
خروجی به شکل زیر خواهد بود:
/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>
پس از ذخیره و بستن فایل، باید Apache را مجدداً بارگیری کنید تا تغییرات اعمال شوند:
sudo systemctl reload apache2
در مرحله بعد از نصب LAMP Ubuntu، یک اسکریپت PHP ایجاد و صحت نصب و پیکربندی آن را روی سرور ابری امتحان میکنیم.
5. تست پردازش PHP روی وب سرور
اکنون که یک مکان سفارشی برای میزبانی فایلها و پوشههای وبسایتتان دارید، یک اسکریپت تست PHP بسازید تا تایید کنید که آپاچی قادر به مدیریت و پردازش درخواستها برای فایلهای PHP است.
یک فایل جدید با نام info.php در پوشه ریشه وب سفارشی خود ایجاد کنید:
nano /var/www/your_domain/info.php
با این کار، یک فایل خالی باز میشود. متن زیر را که کد معتبر PHP است، داخل فایل اضافه کنید:
<?php
phpinfo();
پس از اتمام کار، فایل را ذخیره کنید و ببندید.
برای آزمایش این اسکریپت، از طریق مرورگر وب خود به نام دامنه یا آدرس IP سرور خود دسترسی پیدا کنید. نام دامنه یا آدرس IP سرور قبل از نام اسکریپت (که در زیر info.php است) آمده شده است.
http://server_domain_or_IP/info.php
در اینجا نمونهای از صفحه وب پیشفرض PHP آمده است:
این صفحه اطلاعاتی در مورد سرور شما از دیدگاه PHP ارائه میدهد که برای اشکالزدایی (Debugging) و اطمینان از این صحت تنظیمات مفید است.
اگر این صفحه را در مرورگر خود میبینید، نصب PHP شما همانطور که انتظار میرود، کار میکند.
پس از بررسی اطلاعات مربوط به سرور PHP خود از طریق آن صفحه، بهتر است فایلی را که ایجاد کردهاید، حذف کنید. زیرا این فایل حاوی اطلاعات حساس در مورد محیط PHP و سرور اوبونتو شما است. برای حذف فایل مطابق دستور زیر از rm استفاده کنید:
sudo rm /var/www/your_domain/info.php
در صورت نیاز به دسترسی مجدد به اطلاعات، همیشه میتوانید این صفحه را دوباره ایجاد کنید.
6. تست اتصال پایگاه داده از PHP (اختیاری)
برای اطمینان از اتصال درست PHP به MySQL و اجرای کوئریهای پایگاه داده، یک جدول آزمایشی با دادههای آزمایشی و کوئری برای محتویات آن از یک اسکریپت PHP ایجاد کنید. قبل از انجام این کار، باید یک پایگاه داده آزمایشی و یک کاربر MySQL جدید بسازید که بهدرستی برای دسترسی به آن پیکربندی شده باشد.
یک پایگاه داده با نام example_database و یک کاربر با نام example_user بسازید. این نامها را میتوانید با مقادیر دلخواه جایگزین کنید.
ابتدا با استفاده از اکانت ریشه به کنسول MySQL متصل شوید:
sudo mysql
برای ایجاد یک پایگاه داده جدید، دستور زیر را از کنسول MySQL خود اجرا کنید:
CREATE DATABASE example_database;
اکنون یک کاربر جدید بسازید و امتیازهای کامل را در پایگاه داده سفارشی که بهتازگی ایجاد کردهاید، به آن بدهید.
دستور زیر یک کاربر جدید به نام example_user ایجاد میکند که با متد caching_sha2_password احراز هویت میشود. ما رمز عبور این کاربر را بهعنوان password تعریف میکنیم، اما شما باید این مقدار را با یک رمز عبور ایمن به انتخاب خود جایگزین کنید.
CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';
نکته: عبارت قبلی ALTER USER، کاربر ریشه MySQL را برای احراز هویت با افزونه caching_sha2_password تنظیم میکند. طبق اسناد رسمی MySQL، افزونه caching_sha2_password پلاگین احراز هویت ترجیحی MySQL است؛ زیرا رمزگذاری ایمنتری را نسبت به افزونه قدیمیتر، اما همچنان پرکاربرد mysql_native_password ارائه میکند.
بااینحال، برخی از نسخههای PHP با caching_sha2_password بهخوبی کار نمیکنند. PHP گزارش کرده است که این مشکل در PHP 7.4 برطرف شده است، اما اگر در تلاش برای ورود به phpMyAdmin بعداً با خطا مواجه شدید، ممکن است بخواهید بهجای آن، ریشه را برای احراز هویت با mysql_native_password تنظیم کنید:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
حالا با دستور زیر، به این کاربر مجوز پایگاه داده example_database را بدهید:
GRANT ALL ON example_database.* TO 'example_user'@'%';
با این کار، امتیازهای کامل پایگاه داده example_database را به کاربر example_user میدهد؛ درحالیکه از ایجاد یا تغییر سایر پایگاههای داده در سرور شما توسط کاربر جلوگیری میکند.
اکنون از MySQL shell خارج شوید:
exit
با ورود مجدد به کنسول MySQL، این بار با استفاده از اعتبار کاربر سفارشی، آزمایش کنید که آیا کاربر جدید مجوزهای مناسب را دارد یا خیر:
mysql -u example_user -p
به فلگ -p در این دستور توجه کنید که از شما رمز عبور استفاده شده هنگام ایجاد کاربر example_user را میخواهد. پس از ورود به کنسول MySQL، تایید کنید که به پایگاه داده example_database دسترسی دارید:
SHOW DATABASES;
این دستور خروجی زیر را به شما میدهد:
Output
+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)
سپس یک جدول آزمایشی با نام todo_list بسازید. از کنسول MySQL عبارت زیر را اجرا کنید:
CREATE TABLE example_database.todo_list (
item_id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(item_id)
);
چند ردیف از محتوا را در جدول آزمایشی درج کنید. دستور بعدی را چند بار تکرار کرده و مقادیر مختلفی را برای پر کردن جدول آزمایشی خود وارد کنید:
INSERT INTO example_database.todo_list (content) VALUES ("My first important item");
برای تایید اینکه دادهها با موفقیت در جدول شما ذخیره شدهاند، دستور زیر را اجرا کنید:
SELECT * FROM example_database.todo_list;
خروجی مشابه زیر خواهد بود:
Output
+---------+--------------------------+
| item_id | content |
+---------+--------------------------+
| 1 | My first important item |
| 2 | My second important item |
| 3 | My third important item |
| 4 | and this one more thing |
+---------+--------------------------+
4 rows in set (0.000 sec)
پس از تایید اینکه دادههای معتبری در جدول آزمایشی خود دارید، از کنسول MySQL خارج شوید:
exit
اکنون میتوانید اسکریپت PHP ایجاد کنید که به MySQL متصل میشود و برای محتوای شما درخواست میکند. با استفاده از ویرایشگر دلخواهتان، یک فایل PHP جدید در دایرکتوری ریشه وب سفارشی خود ایجاد کنید:
nano /var/www/your_domain/todo_list.php
اسکریپت PHP زیر به پایگاه داده MySQL متصل میشود، محتوای جدول todo_list را درخواست میکند و نتایج را در یک فهرست نمایش میدهد. اگر در اتصال پایگاه داده مشکلی وجود داشته باشد، یک استثنا ایجاد میکند.
این محتوا را به اسکریپت todo_list.php خود اضافه کرده و example_user و password را موارد خود جایگزین کنید:
<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";
try {
$db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
echo "<h2>TODO</h2><ol>";
foreach($db->query("SELECT content FROM $table") as $row) {
echo "<li>" . $row['content'] . "</li>";
}
echo "</ol>";
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
پس از اتمام ویرایش، فایل را ذخیره کنید و ببندید.
اکنون میتوانید با مراجعه به نام دامنه یا آدرس IP عمومی پیکربندیشده برای وبسایتتان به این صفحه در مرورگر وب خود دسترسی پیدا کنید:
http://your_domain_or_IP/todo_list.php
این صفحه وب باید محتوایی را که در جدول آزمایشی خود درج کردهاید، نمایش دهد:
نمایش تصویر بالا به این معناست که محیط PHP شما آماده اتصال و تعامل با سرور MySQL شما است.
در ادامه میتوانید با طی کردن مراحل نصب phpMyAdmin در اوبونتو، پایگاه داده خود را بهراحتی مدیریت کنید. چنانچه از سرور ابری دراک برای نصب LAMP و سپس phpMyAdmin یا سایر نرمافزارهای دلخواه استفاده میکنید، میتوانید سوالاتتان را از طریق ارسال تیکت در پنل کاربری از تیم پشتیبانی بپرسید.
منبع: DigitalOcean