پیش نیازها
به منظور تکمیل این آموزش، نیاز به یک سرور با سیستم عامل اوبونتو ۱۶.۰۴ با یک حساب کاربری غیر root
با سطح دسترسی sudo
و یک فایروال پایه دارید.
قدم اول: نصب آپاچی و به روز رسانی فایروال
آپاچی مشهورترین وب سرور در میان دیگر سرور های دنیا است. دارای مستندات جام و تاریخچه استفاده در وب به مدت زمان طولانی است،که میتواند انتخاب خوبی برای میزبانی یک سایت باشد .
با دستور زیر آپاچی را نصب کنید:
sudo apt-get update | |
sudo apt-get install apache2 |
از آنجایی که در این دستور از sudo
استفاده کردهایم،این عملیات در سطح root
انجام میشود.پس از اجرای دستور بالا از شماره رمز عبور کاربری خواسته می شود، با وارد کردن آن عملیات را به پیش ببرید. با وارد کردن رمز عبور سرور لیست پکیج هایی را که نصب خواهد کرد و همین طور فضایی که در اختیار خواهد گرفت را به شما اطلاع میدهد. با وارد کردن حرف Y
و فشردن کلید اینتر عملیات نصب آغاز میشود.
تنظیم ServerName سراسری برای جلوگیری از خطاهای دستوری
در اینجا با افزودن یک خط به فایل etc/apache2/apache2.conf
جلوی خطاهای احتمالی را خواهیم گرفت. اگر چه تنظیم نکردن آنها بیخطر است، اما اگر ServerName را بطور سراسری تنظیم نکنید، زمانی که دستور زیر را برای بررسی تنظیمات آپاچی اجرا کنید، خطای زیر را خواهید گرفت:
sudo apache2ctl configtest |
Output | |
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message | |
Syntax OK |
فایل اصلی تنظیمات را در ویرایشگر باز کنید:
sudo nano /etc/apache2/apache2.conf |
در پایین فایل، یک شاخص ServerName وجود دارد که به نام دامنه شما اشاره می کند. اگر نام دامنه برای این کار ندارید، میتوانید از آدرس آیپی عمومی سرور استفاده کنید:
ServerName server_domain_or_IP |
نکته: اگر آدرس آیپی عمومی سرور را ندارید، در ادامه میتوانید با روشهای معرفی شده آیپی را پیدا کنید.
فایل را ذخیره کنید و ببندید.
سپس با دستور زیر خطاهای دستوری را بررسی کنید:
sudo apache2ctl configtest |
از آنجایی که شاخص ServerName
را وارد کردهایم، باید خروجی زیر را مشاهده کنید:
Output | |
Syntax OK |
آپاچی برای اعمال تغییرات بروز کنید:
sudo systemctl restart apache2 |
تنظیم فایروال برای عبور ترافیک وب
با فرض اینکه شما مقدمات ابتدایی تنظیم سرور را انجام دادهاید و فایروال UFW
را فعال کردهاید، باید اطمینان پیدا کنید که ترافیک HTTP و HTTPS قابلیت انتقال دارند. میتوانید با دستور زیر پروفایل UFW را برای آپاچی بررسی کنید:
sudo ufw app list |
Output | |
Available applications: | |
Apache | |
Apache Full | |
Apache Secure | |
OpenSSH |
اگر به پروفایل Apache Full نگاه کنید، میتوانید از وجود پورت ۸۰
و ۴۴۳
میتوانید مطمئن شوید:
sudo ufw app info "Apache Full" |
Output | |
Profile: Apache Full | |
Title: Web Server (HTTP,HTTPS) | |
Description: Apache v2 is the next generation of the omnipresent Apache web | |
server. | |
Ports: | |
80,443/tcp |
با دستور زیر ترافیک HTTP
و HTTPS
را برای این پروفایل فعال کنید:
sudo ufw allow in "Apache Full" |
برای اینکه ببینید تنظیمات شما آیا اعمال شده است یا خیر میتوانید آدرس آیپی عمومی سرور خود را در مرورگر وارد کنید(اگر آدرس آیپی عمومی سرور خود را ندارید، میتوانید از روشی که در ادامه گفته میشود برای به دست آوردن آیپی استفاده کنید):
http://your_server_ip |
با وارد کردن آدرس صفحه پیش فرض آپاچی به نمایش در میآید. صفحهای مانند تصویر زیر:
اگر این صفحه را به درستی میبینید، وب سرور شما بطور صحیح نصب شده و از طریق فایروال قابل دسترسی است.
چطور آدرس IP عمومی سرور را پیدا کنیم
اگر آدرس آیپی عمومی سرور خود را نمیدانید، تعدادی راه برای پیدا کردن آن وجود دارد. بطور معمول آدرسی که برای اتصال از طریق SSH به سرور استفاده میکنید است.
اما راههایی هم برای انجام این کار از طریق خط فرمان وجود دارد. در اولین روش میتوانید با استفاده از ابزار iproute2
آدرس آیپی را دریافت کنید. پس دستور زیر را اجرا کنید:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//' |
خروجی این دستور دو یا سه خطی است که با آزمایش هر یک از آدرسها میتوانید آدرسی که به آن متصل میشوید را پیدا کنید.
روشی دیگر استفاده از curl
برای ارتباط با یک سیستم خارجی است. با این کار از یک سرور خاص میخواهید که آدرس آیپی شما را نشان دهد:
sudo apt-get install curl | |
curl http://icanhazip.com |
اکنون که آدرس آیپی خود را دارید، آن را در مرورگر وارد کنید تا صفحه پیش فرض آپاچی را مشاهده کنید.
قدم دوم: نصب MySQL
اکنون که وب سرور شما آماده است، باید به سراغ نصب MySQL رفت. MySQL سیستم مدیریت پایگاه داده است. اساسا وظیفه سازماندهی و فراهم کردن دسترسی به پایگاه داده سایت شما را دارد.
با استفاده از دستور زیر این نرمافزار را نصب کنید:
sudo apt-get install mysql-server |
نکته: در اینجا نیازی به اجرای دستور
sudo apt-get update
نیست. زیرا قبلا برای نصب آپاچی یک بار اجرا شده است. پکیجها از قبل بروز شدهاند.
با اجرای این دستور نیز لیست پکیجهایی که نصب خواهند شد و همینطور فضایی که اشغال خواهد شد به شما نمایش داده میشود. حرف Y را برای ادامه تایپ کنید و کلید اینتر را فشار دهید.
زمانی که نصب تکمیل شد، اسکریپت امنیتی که همراه با MySQL نصب شده است را اجرا کنید تا برخی پیش فرضهای خطرناک و دسترسیها به پایگاه داده حذف شود. با وارد کردن دستور زیر اسکریپت را اجرا کنید:
sudo mysql_secure_installation |
پس از اجرا از شما پرسیده میشود که آیا مایل به تنظیم VALIDATE PASSWORD PLUGIN
هستید یا خیر.
نکته: فعالسازی این قابلیت تا حدودی به نظر خودتان بستگی دارد. با فعالسازی، رمزعبورهایی که با معیارهای تعیین شده مطابقت نداشته باشند توسط MySQL همراه با نمایش پیغام خطا رد میشوند. این کار باعث ایجاد مشکلاتی برای نرمافزاهایی میشود که از رمز عبورهای ضعیف استفاده میکنند مانند پکیجهای اوبونتو برای
phpMyAdmin
. فعال نکردن آن مشکلی ایجاد نمیکند و بطور کلی امن است، اما شما همیشه باید از رمز عبورهای قوی و منحصر به فرد برای پایگاه داده خود استفاده کنید.
با تایپ حرف Y
فعالسازی را انجام دهید و یا با وارد کردن هر چیز دیگری بدون فعالسازی از این مرحله رد شوید.
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
یا yes
را وارد کردید، از شما سطح اعتبارسنجی رمز عبور پرسیده می شود. به یاد داشته باشید که با وارد کردن عدد ۲
برای قویترین سطح، در هنگام وارد کردن رمز عبور بدون عدد، حرف کوچک و بزرگ و یک کاراکتر خاص و یا رمز عبور های بسیار معمول خطا دریافت خواهید کرد.
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 |
پس از این مرحله از شما رمزعبوری برای کاربر root
در MySQL خواسته میشود. این حساب کاربری دارای امتیازات و دسترسیهای بسیار زیاد است. مثل حساب کاربری root
در سرور (اگر چه حسابی که در حال تنظیم آن هستید تنها مختص MySQL است). مطمئن شوید که رمز عبوری قوی و منحصر به فرد انتخاب میکنید و آن را خالی نمیگذارید.
در اینجا سیستم پایگاه داده تنظیم شده است و میتوانید به سراغ نصب PHP بروید، یعنی آخرین کامپوننت LAMP.
قدم سوم: نصب PHP
PHP کامپوننتیست که برای پردازش کدهای شما جهت نمایش محتوای پویا به کار میرود. PHP قادر به اجرای اسکریپتها و اتصال به پایگاههای داده برای دریافت اطلاعات و انتقال آنها به وب سرور جهت نمایش است.
با وارد کردن دستور زیر PHP و مشتقات مورد نیاز آن را نصب کنید:
sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql |
الان اگر کاربری درخواست نمایش یک دایرکتوری را بدهد، نام اولین فایلی که به وی نمایش داده میشود index.html
است. ما میخواهیم به وب سرور اطلاع دهیم که اولویت ما با فایلهای PHP است و بنابراین ابتدا فایل index.php
را به کاربر نمایش بده.
برای این کار دستور زیر را برای باز کردن فایل dir.conf
در ویرایشگر اجرا کنید:
sudo nano /etc/apache2/mods-enabled/dir.conf |
فایلی مشابه فایل زیر به شما نشان داده میشود:
<IfModule mod_dir.c> | |
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm | |
</IfModule> |
عبارت index.php
را به ابتدای خط و بعد از DirectoryIndex
منتقل کنید تا مانند فایل زیر شود:
<IfModule mod_dir.c> | |
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm | |
</IfModule> |
در پایان کلید CTRL+X
را فشرده و با تایپ حرف Y
و فشردن کلید اینتر آن را ذخیره کنید.
سپس با دستور زیر وب سرور آپاچی را برای اعمال تغییرات بروز کنید:
sudo systemctl restart apache2 |
همچنین با استفاده از دستور زیر میتوانید وضعیت سرویس apache2
با استفاده از systemctl
بررسی کنید:
sudo systemctl status apache2 |
Sample Output | |
● apache2.service - LSB: Apache2 web server | |
Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled) | |
Drop-In: /lib/systemd/system/apache2.service.d | |
└─apache2-systemd.conf | |
Active: active (running) since Wed 2016-04-13 14:28:43 EDT; 45s ago | |
Docs: man:systemd-sysv-generator(8) | |
Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS) | |
Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS) | |
Tasks: 6 (limit: 512) | |
CGroup: /system.slice/apache2.service | |
├─13623 /usr/sbin/apache2 -k start | |
├─13626 /usr/sbin/apache2 -k start | |
├─13627 /usr/sbin/apache2 -k start | |
├─13628 /usr/sbin/apache2 -k start | |
├─13629 /usr/sbin/apache2 -k start | |
└─13630 /usr/sbin/apache2 -k start | |
Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Stopped LSB: Apache2 web server. | |
Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Starting LSB: Apache2 web server... | |
Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]: * Starting Apache httpd web server apache2 | |
Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerNam | |
Apr 13 14:28:43 ubuntu-16-lamp apache2[13605]: * | |
Apr 13 14:28:43 ubuntu-16-lamp systemd[1]: Started LSB: Apache2 web server. |
نصب ماژولهای PHP
برای افزایش عملکرد PHP میتوانید ماژولهای بیشتری نصب کنید. برای نمایش ماژولها و کتابخانههای PHP با استفاده از دستور زیر جستجو کنید:
apt-cache search php- | less |
با استفاده از کلیدهای بالا و پایین لیست در لیست پیمایش انجام دهید و با کلید Q
خارج شوید.
نتیجه جستجو، کامپوننتهای اختیاری همراه با توضیح برای نصب است.
libnet-libidn-perl - Perl bindings for GNU Libidn | |
php-all-dev - package depending on all supported PHP development packages | |
php-cgi - server-side, HTML-embedded scripting language (CGI binary) (default) | |
php-cli - command-line interpreter for the PHP scripting language (default) | |
php-common - Common files for PHP packages | |
php-curl - CURL module for PHP [default] | |
php-dev - Files for PHP module development (default) | |
php-gd - GD module for PHP [default] | |
php-gmp - GMP module for PHP [default] | |
… | |
: |
برای اینکه کارایی هر ماژول را متوجه شوید، از اینترنت کمک بگیرید و یا با دستور زیر توضیحات پکیج را مطالعه کنید:
apt-cache show package_name |
در خروجی نمایش داده شده به دنبال فیلد Description-en
بگردید تا توضیحات بیشتر در مورد ماژول مورد نظر را مطالعه کنید.
مثلا برای ماژول php-cli
:
apt-cache show php-cli |
همراه با اطلاعات دیگر، چیزی شبیه توضیحات زیر خواهید دید:
Output | |
… | |
Description-en: 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 Debian's default | |
PHP version (currently 7.0). | |
… |
اگر بعد از بررسی تصمیم به نصب گرفتید، با استفاده از apt-get install
آن را نصب کنید.
بطور مثال برای نصب php-cli
از دستور زیر استفاده کنید:
sudo apt-get install php-cli |
اگر میخواهید بیش از یک ماژول را نصب کنید، نام هر ماژول را با فاصله از هم جدا کنید، نمونه:
sudo apt-get install package1 package2 ... |
اکنون LAMP برای شما نصب و تنظیم شده است. قبل از ایجاد هر تغییر یا راه اندازی نرم افزاری، بهتر است تنظیمات PHP را بررسی کنید تا به مشکل خاصی برنخورید.
قدم چهام: تست پردازش PHP بر روی وب سرور
جهت بررسی تنظیمات PHP، فایلی با نام info.php
ایجاد کنید. برای اینکه آپاچی بتواند فایل را سریعا پیدا کرده و به نمایش بگذارد، باید در یک مسیر خاصی که ریشه وب سرور شماست ذخیره شود.
در اوبونتو ۱۶.۰۴ این دایرکتوری در مسیر /var/www/html/
است. با دستور زیر فایل را در این مسیر ایجاد کنید:
sudo nano /var/www/html/info.php |
کد زیر وارد کنید:
<?php | |
phpinfo(); | |
?> |
فایل را ذخیره کنید و آن را ببندید.
اکنون میتوانید ببینید که آیا وب سرور فایل PHP را بطور صحیح به نمایش میگذارد یا خیر. مجددا به آدرس آیپی عمومی سرور خود نیاز دارید.
آدرس زیر را در مرورگر باز کنید:
http://your_server_ip/info.php |
اکنون صفحهای مشابه تصویر زیر باید ببینید:
این صفحه نشان دهنده برخی اطلاعات پایه درباره سرور از سمت PHP است. از این فایل میتوان برای دیباگ کردن و بررسی صحت تنظیمات استفاده کرد.
اگر میتوانید این صفحه را در مرورگر مشاهده کنید، پس PHP بطور صحیح عمل میکند.
در نهایت این فایل را به دلایل امنیتی حذف کنید تا اطلاعات مهم سرور شما به دست افراد غیر مجازی نرسد. برای این کار دستور زیر را اجرا کنید:
sudo rm /var/www/html/info.php |
در هر زمانی که به این فایل نیاز داشتید میتوانید به سادگی آن را ایجاد کنید.
نتیجهگیری
اکنون بسته نرم افزاری LAMP بر روی سرور شما نصب است. پلتفرمی که به شما اجاره نصب و راهاندازی اکثر سایتها و وباپلیکیشنها را میدهد.
در مرحله بعد باید مطمئن شوید که ارتباط شما با سرور امن است و محتوای شما از طریق HTTPS به نمایش درمیآید. آسانترین راه برای این کار استفاده از گواهی SSL از Let’s Encrypt است که بطور رایگان میتوانید نصب و راهاندازی کنید.