پشته “LAMP” گروهي از نرم افزارهاي منبع باز است كه به طور معمول به منظور فعال كردن سرور مجازي براي ميزباني وب سايتهاي پويا و برنامه هاي وب كه به زبان PHP نوشته شده است ، با هم نصب مي شوند. اين اصطلاح مخفف سيستم عامل لينوكس داراي سرور مجازي وب Apache است. داده هاي سايت در يك پايگاه داده MySQL ذخيره مي شوند و محتواي پويا توسط PHP پردازش مي شود.
در اين راهنما ، يك پشته LAMP را روي يك سرور مجازي Ubuntu 20.04 نصب خواهيم كرد.
پيش نيازها
براي تكميل اين آموزش ، نياز به داشتن يك سرور مجازي اوبونتو 20.04 با يك حساب كاربري غير ريشه فعال با sudo و يك فايروال پايه داريد كه مي توان با استفاده از راهنماي تنظيم اوليه سرور مجازي ما براي اوبونتو 20.04 اين كار را انجام داد.
مرحله 1 – نصب Apache و به روزرساني فايروال
وب سرور مجازي Apache از محبوب ترين سرور مجازي هاي وب در جهان است. به خوبي مستند شده است ، جامعه فعالي از كاربران دارد و در بيشتر تاريخ وب مورد استفاده گسترده قرار گرفته است ، و اين باعث مي شود آن را به عنوان يك گزينه پيش فرض عالي براي ميزباني وب سايت انتخاب كنيم.
Apache را با استفاده از مدير بسته Ubuntu يعني apt نصب كنيد:
⦁ $ sudo apt update

⦁ $ sudo apt install apache2

اگر اولين بار است كه در اين بخش از sudo استفاده مي كنيد ، از شما خواسته مي شود كه رمزعبور كاربر خود را ارائه كنيد تا تأييد كنيد كه از امتيازات مناسب براي مديريت بسته هاي سيستم با apt برخوردار هستيد. از شما خواسته مي شود كه با فشار دادن Y ، سپس enter نصب Apache را تأييد كنيد.
پس از اتمام نصب ، بايد تنظيمات فايروال خود را تنظيم كنيد تا ترافيك HTTP و HTTPS امكان پذير باشد. 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 20.04 Apache را مشاهده مي كنيد ، كه براي اهداف اطلاع رساني و آزمايشي ميباشد. بايد چيزي شبيه به اين باشد:

اگر اين صفحه را مشاهده كرديد ، اكنون سرور مجازي وب شما به درستي از طريق فايروال نصب شده و در دسترس است.
چگونه آدرس IP عمومي سرور مجازي خود را پيدا كنيد
اگر نمي دانيد آدرس IP عمومي سرور مجازي شما چيست ، روش هاي مختلفي براي يافتن آن وجود دارد. معمولاً آدرسي است كه براي اتصال به سرور مجازي خود از طريق SSH استفاده مي كنيد.
چند روش مختلف براي انجام اين كار از خط فرمان وجود دارد. ابتدا مي توانيد با تايپ دستور زير از ابزار iproute2 براي دريافت آدرس IP خود استفاده كنيد:
⦁ $ ip addr show eth0 | grep inet | awk ‘{ print $2; }’ | sed ‘s//.*$//’

اين دستور دو يا سه خط قبلي را به شما باز مي گرداند. همه آنها آدرس هاي صحيحي هستند ، اما رايانه شما فقط مي تواند از يكي از آنها استفاده كند ، بنابراين هر يك از آنها را امتحان كنيد.
روش ديگر استفاده از ابزار curl براي تماس با طرف خارجي است تا به شما بگويد سرور مجازي شما را چگونه مشاهده ميكند. اين كار با پرسيدن آدرس IP شما از يك سرور مجازي خاص انجام ميشود:
⦁ $ curl http://icanhazip.com

صرف نظر از روشي كه براي دريافت آدرس IP خود استفاده مي كنيد ، آن را در نوار آدرس مرورگر وب خود وارد كنيد تا صفحه پيش فرض Apache را مشاهده كنيد.
مرحله 2 – نصب MySQL
اكنون كه وب سرور خود را فعال و راه اندازي كرده ايد ، بايد سيستم پايگاه داده را نصب كنيد تا بتوانيد داده هاي سايت خود را ذخيره و مديريت كنيد. MySQL يك سيستم مديريت پايگاه داده محبوب است كه در محيط هاي PHP استفاده مي شود.
دوباره ، براي به دست آوردن و نصب اين نرم افزار از apt استفاده كنيد:
⦁ $ sudo apt install mysql-server

در صورت درخواست ، نصب را با تايپ Y و سپس ENTER تأييد كنيد.
پس از اتمام نصب ، توصيه مي شود اسكريپت امنيتي را اجرا كنيد كه از طريق MySQL از قبل نصب شده باشد. اين اسكريپت برخي از تنظيمات پيش فرض ناامن را حذف كرده و دسترسي به سيستم پايگاه داده شما را غيرفعال مي كند. اسكريپت تعاملي را با اجراي اين دستور شروع كنيد:
⦁ $ sudo mysql_secure_installation

با استفاده از اين گزينه مي توانيد پلاگين Validate PASSWORD را پيكربندي كنيد.
توجه: فعال كردن اين ويژگي چيزي مثل فراخواني قضاوت است. در صورت فعال بودن ، گذرواژهاي ناسازگار با معيارهاي مشخص توسط خطاي MySQL رد مي شوند. بهتر است اعتبارسنجي را غيرفعال رها كنيد ، اما هميشه بايد از رمز عبورهاي قوي و منحصر به فرد براي اعتبارات پايگاه داده استفاده كنيد.

براي بله yes را تايپ كنيد و يا هر چيز ديگري كه بدون فعال سازي كار را ادامه ميدهد.
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:

اگر yes را جواب بدهيد ، از شما خواسته مي شود يك سطح اعتبار گذرواژه را انتخاب كنيد. به خاطر داشته باشيد اگر 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

صرف نظر از اين كه شما تصميم به تنظيم PLUGIN VALIDATE PASSWORD گرفته ايد ، سرور مجازي از شما درخواست مي كند كه يك رمز عبور را براي كاربر ريشه MySQL انتخاب و تأييد كنيد. اين كاربر نبايد با كاربر ريشه سيستم اشتباه گرفته شود. كاربر ريشه بانك اطلاعاتي يك كاربر ادمين با امتيازات كامل براي دسترسي به سيستم ديتابيس است. حتي اگر روش احراز هويت پيش فرض براي كاربر ريشه MySQL ، استفاده از يك رمزعبور را ناديده مي گيرد ، حتي اگر پسوردي تنظيم شده باشد ، بايد يك رمزعبور قوي را در اينجا به عنوان يك اقدام امنيتي اضافي تعريف كنيد. به صورت مختصر به اين مورد خواهيم پرداخت.
اگر اعتبار سنجي رمز عبور را فعال كرده باشيد ، قدرت رمز عبور براي رمز ريشه كه تازه وارد كرده ايد به شما نشان داده مي شود و سرور مجازي تان از شما سؤال مي كند كه آيا مي خواهيد با آن رمز عبور ادامه دهيد يا خير. اگر از گذرواژه فعلي خود راضي هستيد ، “yes” را وارد كنيد:
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 22
Server version: 8.0.19-0ubuntu5 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

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 ، اين دستور را تايپ كنيد:
mysql> exit

توجه كنيد كه لازم نيست براي اتصال به عنوان كاربر اصلي ، گذرواژه ارائه كنيد ، حتي اگر هنگام اجراي اسكريپت mysql_secure_installation ، پسوردي تعريف كرده باشيد. اين بدان دليل است كه روش تأييد اعتبار پيش فرض براي كاربر MySQL ادمين به جاي رمز عبور، روش unix_socket است. حتي اگر ممكن است اين مسئله در ابتدا يك نگراني امنيتي به نظر برسد ، باعث مي شود سرور مجازي پايگاه داده ايمن تر شود زيرا تنها كاربراني كه اجازه ورود به عنوان كاربر ريشه MySQL را دارند ، كاربران سيستم با امتيازات sudo هستند كه از طريق كنسول يا برنامه اي با همان امتيازات ، وارد سيستم مي شوند. در عمل ، اين بدان معناست كه شما قادر نخواهيد بود از كاربر ريشه پايگاه داده ادمين براي اتصال به برنامه PHP خود استفاده كنيد. در صورت تغيير روش احراز هويت پيش فرض از unix_socket به رمز عبور، تنظيم گذرواژه براي حساب ريشه MySQL به عنوان محافظ عمل مي كند.
براي افزايش امنيت ، بهتر است براي هر بانك اطلاعاتي ، حسابهاي كاربري اختصاصي با امتيازات گسترده تري تنظيم كنيد ، به خصوص اگر قصد داريد چندين پايگاه داده را در سرور مجازي خود داشته باشيد.
توجه: در زمان نوشتن اين راهنما، كتابخانه بومي MySQL PHP ، يعني mysqlnd از caching_sha2_authentication، روش احراز هويت پيش فرض براي MySQL 8، پشتيباني نمي كند. به همين دليل ، هنگام ايجاد كاربران ديتابيس براي برنامه هاي PHP در MySQL 8 ، بايد مطمئن باشيد كه به گونه اي پيكربندي كرده ايد كه به جاي آن از mysql_native_password استفاده كنند. ما در مرحله 6 نحوه انجام اين كار را نشان خواهيم داد.

سرور مجازي MySQL شما اكنون نصب و ايمن شده است. در مرحله بعد ، PHP ، مؤلفه نهايي را در پشته LAMP نصب خواهيم كرد.
مرحله 3 – نصب PHP
شما Apache را براي ارائه خدمات خود و MySQL را براي ذخيره سازي و مديريت داده هاي خود نصب كرده ايد. PHP مؤلفه اي از ستاپ ما است كه كد را براي نمايش محتواي پويا به كاربر نهايي پردازش مي كند. علاوه بر بسته php ، به php-mysql ، يك ماژول PHP نياز خواهيد داشت كه به PHP اجازه مي دهد تا با بانكهاي اطلاعاتي مبتني بر MySQL ارتباط برقرار كند. براي فعال سازي Apache براي مديريت فايل هاي PHP ، به libapache2-mod-php نيز نياز خواهيد داشت. بسته هاي اصلي PHP بصورت خودكار به عنوان متعلقات نصب مي شوند.
براي نصب اين بسته ها ، اين دستور را اجرا كنيد:
⦁ $ sudo apt install php libapache2-mod-php php-mysql

پس از اتمام نصب ، مي توانيد دستور زير را براي تأييد نسخه PHP خود اجرا كنيد:
⦁ $ php -v

Output
PHP 7.4.3 (cli) (built: Mar 26 2020 20:24:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

در اين مرحله ، پشته LAMP شما كاملاً عملياتي است ، اما قبل از اينكه بتوانيد تنظيمات خود را با يك اسكريپت PHP تست كنيد ، بهتر است يك هاست مناسب Apache Virtual را براي نگهداري فايل ها و پوشه هاي وب سايت خود تنظيم كنيد. ما اين كار را در مرحله بعدي انجام خواهيم داد.
مرحله 4 – ايجاد يك هاست مجازي براي وب سايت خود
هنگام استفاده از وب سرور مجازي Apache ، مي توانيد هاست هاي مجازي (مشابه بلوك هاي سرور مجازي در Nginx) ايجاد كنيد تا جزئيات پيكربندي را كپسوله كنيد و هاست بيش از يك دامنه از يك سرور واحد باشيد. در اين راهنما دامنه اي به نام your_domain تنظيم خواهيم كرد ، اما شما بايد آن را با نام دامنه خود جايگزين كنيد.
Apache در Ubuntu 20.04 داراي يك بلوك سرور مجازي است كه بصورت پيش فرض فعال شده است تا براي ارائه اسناد از ديركتوري / 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 Apache باز كنيد. در اينجا ، ما از nano استفاده خواهيم كرد:
⦁ $ sudo nano /etc/apache2/sites-available/your_domain.conf

با اين كار يك فايل جديد خالي ايجاد مي شود. پيكربندي بدون اسكلت زير را در آن قرار دهيد:
/etc/apache2/sites-available/your_domain.conf

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

پس از اتمام كار فايل را ذخيره كنيد و ببنديد. اگر از nano استفاده ميكنيد ميتوانيد با فشردن CTRL+X سپس Yو ENTERاين كار را انجام دهيد.
با استفاده از اين پيكربندي VirtualHost ، به Apache مي گوييم تا با استفاده از / var / www / your_domain به عنوان دايركتوري ريشه وب ، به your_domain سرويس دهي كند. اگر مي خواهيد Apache را بدون نام دامنه تست كنيد ، مي توانيد با اضافه كردن يك كاراكتر # در ابتداي خطوط هر گزينه ، گزينه هاي ServerName و ServerAlias ​​را حذف يا اضافه كنيد.
اكنون مي توانيد از a2ensite براي فعال كردن هاست مجازي جديد استفاده كنيد:
⦁ $ sudo a2ensite your_domain

ممكن است بخواهيد وب سايت پيش فرض نصب شده با Apache را غيرفعال كنيد. در صورت عدم استفاده از نام دامنه سفارشي لازم نيست زيرا در اين حالت پيكربندي پيش فرض Apache باعث مي شود هاست مجازي شما بازنويسي شود. براي غيرفعال كردن وب سايت پيش فرض Apache ، اين دستور را تايپ كنيد:
⦁ $ sudo a2dissite 000-default

براي اطمينان از اينكه فايل پيكربندي شما حاوي خطاهاي نحوي نيست ، اجرا كنيد:
⦁ $ 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


your_domain website


Hello World!

This is the landing page of your_domain.



اكنون به مرورگر خود برويد و يك بار ديگر به نام دامنه يا آدرس IP سرور مجازي خود دسترسي پيدا كنيد:
http://server_domain_or_IP

صفحه اي را به اين شكل مشاهده خواهيد كرد:

اگر اين صفحه را مشاهده كرديد ، به اين معني است كه هاست مجازي Apache شما مطابق آنچه انتظار مي رود كار مي كند.
مي توانيد تا زماني كه يك فايل index.php تنظيم كنيد تا جايگزين آن شود ، اين فايل را به صورت يك صفحه فرود موقت براي برنامه خود باقي بگذاريد. پس از انجام اين كار ، به ياد داشته باشيد كه فايل index.html را از ريشه سند خود حذف يا تغيير نام دهيد ، زيرا به طور پيش فرض بر يك فايل index.php پيشي مي گيرد.
نكته اي درباره DirectoryIndex در Apache
با تنظيمات پيش فرض DirectoryIndex در Apache ، فايلي با نام 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

DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm

پس از ذخيره و بستن فايل ، بايد Apache را مجدد لود كنيد تا تغييرات به مرحله اجرا در بيايند:
⦁ $ sudo systemctl reload apache2

در مرحله بعد ، ما يك اسكريپت PHP ايجاد خواهيم كرد تا آزمايش كنيم كه PHP به درستي روي سرور مجازي شما نصب شده و پيكربندي شده است.
مرحله 5 – تست پردازش PHP در وب سرور مجازي خود
اكنون كه يك مكان سفارشي براي ميزباني فايل ها و پوشه هاي وب سايت خود داريد ، يك اسكريپت تست PHP ايجاد خواهيم كرد تا تأييد كند كه Apache قادر به مديريت و پردازش درخواست هاي فايل هاي PHP است.
يك فايل جديد با نام info.php را در پوشه ريشه وب سفارشي خود ايجاد كنيد:
⦁ $ nano /var/www/your_domain/info.php

اين دستور يك فايل خالي را باز مي كند. متن زير را كه كد PHP معتبر است ، داخل فايل اضافه كنيد:
/var/www/your_domain/info.php
phpinfo();

پس از اتمام ، فايل را ذخيره كنيد و ببنديد.
براي تست اين اسكريپت ، به مرورگر وب خود برويد و به نام دامنه يا آدرس IP سرور مجازي خود ، كه پس از آن نام اسكريپت وجود دارد دسترسي پيدا كنيد ، كه در اين حالت info.php است:
http://server_domain_or_IP/info.php
صفحه اي شبيه به اين را مشاهده خواهيد كرد:

اين صفحه اطلاعاتي را در مورد سرور مجازي شما از منظر PHP ارائه مي دهد كه براي اشكال زدايي مفيد است و اطمينان حاصل ميكند كه تنظيمات شما به درستي اعمال مي شوند.
اگر مي توانيد اين صفحه را در مرورگر خود مشاهده كنيد ، نصب PHP شما مطابق آنچه انتظار مي رود كار مي كند.
پس از بررسي اطلاعات مربوط به سرور مجازي PHP خود از طريق آن صفحه ، بهتر است فايل ايجاد شده را حذف كنيد زيرا حاوي اطلاعات حساسي در مورد محيط PHP شما و سرور مجازي Ubuntu شماست. براي اين كار مي توانيد از rm استفاده كنيد:
⦁ $ sudo rm /var/www/your_domain/info.php

در صورت نياز به دسترسي مجدد به اطلاعات ، هميشه مي توانيد اين صفحه را مجدداً ايجاد كنيد.
مرحله 6 – آزمايش اتصال به بانك اطلاعاتي از PHP (اختياري)
اگر مي خواهيد تست كنيد كه آيا PHP قادر به اتصال به MySQL و اجراي پرس و جوهاي پايگاه داده است، مي توانيد يك جدول آزمايشي با داده هاي ساختگي و جستجوي مطالب آن از يك اسكريپت PHP ايجاد كنيد. قبل از اينكه بتوانيم اين كار را انجام دهيم ، بايد يك پايگاه داده آزمايشي و يك كاربر جديد MySQL براي دسترسي به آن را به درستي پيكربندي كنيم.
در زمان نوشتن اين مقاله، كتابخانه بومي MySQL PHP ، mysqlnd از caching_sha2_authentication، روش تأييد اعتبار پيش فرض براي MySQL 8 پشتيباني نمي كند. براي اينكه بتوانيم از PHP به آن متصل شويم ، نياز به ايجاد كاربر جديد با تاييد اعتبار mysql_native_password داريم.
يك ديتابيس با نام example_database و كاربري با نام example_user ايجاد خواهيم كرد ، اما مي توانيد اين نام ها را با مقادير مختلف جايگزين كنيد.
ابتدا با استفاده از حساب ريشه به كنسول MySQL وصل شويد:
⦁ $ sudo mysql

براي ايجاد يك پايگاه داده جديد ، دستور زير را از كنسول MySQL خود اجرا كنيد:
⦁ mysql> CREATE DATABASE example_database;

اكنون مي توانيد يك كاربر جديد ايجاد كنيد و در پايگاه داده سفارشي كه اخيراً ايجاد كرده ايد ، به آنها امتياز دهيد.
دستور زير با استفاده از mysql_native_password به عنوان يك روش تأييد اعتبار پيش فرض كاربر جديدي به نام example_user ايجاد مي كند. ما رمزعبور اين كاربر را به عنوان PASWORD تعريف مي كنيم ، اما شما بايد اين مقدار را با يك رمز عبور مطمئن به انتخاب خود جايگزين كنيد.
⦁ mysql> CREATE USER ‘example_user’@’%’ IDENTIFIED WITH mysql_native_password BY ‘password’;

اكنون بايد به اين كاربر اجازه به پايگاه داده example_database را بدهيم:
⦁ mysql> GRANT ALL ON example_database.* TO ‘example_user’@’%’;

اين كار به كاربر example_user دسترسي كامل به بانك اطلاعاتي example_database را مي دهد ، در حالي كه از ايجاد يا تغيير ساير پايگاه هاي داده روي سرور مجازي شما جلوگيري مي كند.
اكنون از پوسته MySQL خارج شويد:
⦁ Mysql> exit

با ورود دوباره به كنسول MySQL ، اين بار با استفاده از اعتبار كاربر سفارشي مي توانيد آزمايش كنيد كه آيا كاربر جديد داراي مجوزهاي مناسب است.
⦁ $ mysql -u example_user -p

در اين دستور ، به پرچم -p توجه كنيد ، كه رمز عبوري كه در هنگام ايجاد كاربر example_user استفاده كرديد را از شما ميخواهد. پس از ورود به كنسول MySQL ، تأييد كنيد كه به بانك اطلاعاتي example_database دسترسي داريد:
⦁ Mysql> SHOW DATABASES;

اين كار خروجي زير را به شما مي دهد:
Output
+——————–+
| Database |
+——————–+
| example_database |
| information_schema |
+——————–+
2 rows in set (0.000 sec)

در مرحله بعد ، يك جدول آزمايشي با نام todo_list ايجاد خواهيم كرد. از كنسول MySQL عبارت زير را اجرا كنيد:
⦁ Mysql> CREATE TABLE example_database.todo_list (

⦁ Mysql> item_id INT AUTO_INCREMENT,

⦁ Mysql> content VARCHAR(255),

⦁ Mysql> PRIMARY KEY(item_id)

⦁ Mysql> );

چند رديف محتوا را در جدول آزمون وارد كنيد. ممكن است بخواهيد با استفاده از مقادير مختلف دستور بعدي را چند بار تكرار كنيد:
⦁ Mysql> INSERT INTO example_database.todo_list (content) VALUES (“My first important item”);

براي تأييد اينكه داده ها با موفقيت در جدول شما ذخيره شده اند ، اجرا كنيد:
⦁ Mysql> 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 خارج شويد:
Mysql> exit
اكنون مي توانيد اسكريپت PHP را ايجاد كنيد كه به MySQL متصل شود و محتواي شمار را پرس و جو كنيد. با استفاده از ويرايشگر مورد نظر خود ، يك فايل PHP جديد را در ديركتوري ريشه وب خود ايجاد كنيد. ما براي اين كار از nano استفاده خواهيم كرد:
⦁ $ nano /var/www/your_domain/todo_list.php

اسكريپت PHP زير به پايگاه داده MySQL متصل ميشود و براي محتواي جدول todo_list پرس و جو ميكند و نتايج را در يك ليست نمايش مي دهد. اگر در ارتباط با بانك اطلاعاتي مشكلي وجود داشته باشد ، يك استثنا به وجود مي آورد.
اين محتوا را در متن todo_list.php كپي كنيد:
/var/www/your_domain/todo_list.php
$user = “example_user”;
$password = “password”;
$database = “example_database”;
$table = “todo_list”;

try {
$db = new PDO(“mysql:host=localhost;dbname=$database”, $user, $password);
echo “

TODO

    ”;
    foreach($db->query(“SELECT content FROM $table”) as $row) {
    echo “
  1. ” . $row[‘content’] . “
  2. ”;
    }
    echo “
”;
} catch (PDOException $e) {
print “Error!: ” . $e->getMessage() . “
”;
die();
}

پس از پايان ويرايش ، فايل را ذخيره كنيد و ببنديد.
اكنون مي توانيد با مراجعه به نام دامنه يا آدرس IP عمومي كه براي وب سايت شما پيكربندي شده و پس از آن /todo_list.php نوشته شده، به اين صفحه در مرورگر وب خود دسترسي پيدا كنيد :
http://your_domain_or_IP/todo_list.php

بايد صفحه اي مانند اين را مشاهده كنيد ، كه محتوياتي را كه در جدول آزمايش خود وارد كرده ايد نشان دهد:

اين بدان معناست كه محيط PHP شما آماده اتصال و تعامل با سرور مجازي MySQL است.
نتيجه
در اين راهنما ، ما با استفاده از Apache به عنوان سرور مجازي وب و MySQL به عنوان سيستم پايگاه داده ، پايه اي انعطاف پذير براي ارائه وب سايت ها و برنامه هاي PHP به بازديد كنندگان شما ايجاد كرده ايم.
به عنوان مرحله فوري بعدي ، بايد با ارائه اتصالات از طريق HTTPS اطمينان حاصل كنيد كه اتصالات به سرور مجازي وب شما ايمن هستند. به منظور تحقق اين امر ، مي توانيد از Let’s Encrypt براي امنيت سايت خود با مجوز TLS / SSL رايگان استفاده كنيد.