پیش نیازها

به منظور تکمیل این آموزش، نیاز به یک سرور با سیستم عامل اوبونتو ۱۶.۰۴ با یک حساب کاربری غیر 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
view raw Output.sh hosted with ❤ by GitHub

فایل اصلی تنظیمات را در ویرایشگر باز کنید:

sudo nano /etc/apache2/apache2.conf

در پایین فایل، یک شاخص ServerName وجود دارد که به نام دامنه شما اشاره می کند. اگر نام دامنه برای این کار ندارید، میتوانید از آدرس آی‌پی عمومی سرور استفاده کنید:

ServerName server_domain_or_IP

نکته: اگر آدرس آی‌پی عمومی سرور را ندارید، در ادامه می‌توانید با روش‌های معرفی شده آی‌پی را پیدا کنید.

فایل را ذخیره کنید و ببندید.
سپس با دستور زیر خطاهای دستوری را بررسی کنید:

sudo apache2ctl configtest

از آنجایی که شاخص ServerName را وارد کرده‌ایم، باید خروجی زیر را مشاهده کنید:

Output
Syntax OK
view raw Output.sh hosted with ❤ by GitHub

آپاچی برای اعمال تغییرات بروز کنید:

sudo systemctl restart apache2

تنظیم فایروال برای عبور ترافیک وب

با فرض اینکه شما مقدمات ابتدایی تنظیم سرور را انجام داده‌اید و فایروال UFW را فعال کرده‌اید، باید اطمینان پیدا کنید که ترافیک HTTP و HTTPS قابلیت انتقال دارند. میتوانید با دستور زیر پروفایل UFW را برای آپاچی بررسی کنید:

sudo ufw app list
view raw ufw list hosted with ❤ by GitHub

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
view raw dir.conf hosted with ❤ by GitHub

فایلی مشابه فایل زیر به شما نشان داده می‌شود:

<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]
:
view raw php- hosted with ❤ by GitHub

برای اینکه کارایی هر ماژول را متوجه شوید، از اینترنت کمک بگیرید و یا با دستور زیر توضیحات پکیج را مطالعه کنید:

apt-cache show package_name
view raw show hosted with ❤ by GitHub

در خروجی نمایش داده شده به دنبال فیلد Description-en بگردید تا توضیحات بیشتر در مورد ماژول مورد نظر را مطالعه کنید.
مثلا برای ماژول php-cli:

apt-cache show php-cli
view raw show hosted with ❤ by GitHub

همراه با اطلاعات دیگر، چیزی شبیه توضیحات زیر خواهید دید:

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).
view raw Output hosted with ❤ by GitHub

اگر بعد از بررسی تصمیم به نصب گرفتید، با استفاده از 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();
?>
view raw info.php hosted with ❤ by GitHub

فایل را ذخیره کنید و آن را ببندید.
اکنون میتوانید ببینید که آیا وب سرور فایل PHP را بطور صحیح به نمایش میگذارد یا خیر. مجددا به آدرس آی‌پی عمومی سرور خود نیاز دارید.
آدرس زیر را در مرورگر باز کنید:

http://your_server_ip/info.php

اکنون صفحه‌ای مشابه تصویر زیر باید ببینید:

پی اچ پی

این صفحه نشان دهنده برخی اطلاعات پایه درباره سرور از سمت PHP است. از این فایل میتوان برای دیباگ کردن و بررسی صحت تنظیمات استفاده کرد.
اگر میتوانید این صفحه را در مرورگر مشاهده کنید، پس PHP بطور صحیح عمل می‌کند.
در نهایت این فایل را به دلایل امنیتی حذف کنید تا اطلاعات مهم سرور شما به دست افراد غیر مجازی نرسد. برای این کار دستور زیر را اجرا کنید:

sudo rm /var/www/html/info.php

در هر زمانی که به این فایل نیاز داشتید می‌توانید به سادگی آن را ایجاد کنید.

نتیجه‌گیری

اکنون بسته نرم افزاری LAMP بر روی سرور شما نصب است. پلتفرمی که به شما اجاره نصب و راه‌اندازی اکثر سایت‌ها و وب‌اپلیکیشن‌ها را می‌دهد.
در مرحله بعد باید مطمئن شوید که ارتباط شما با سرور امن است و محتوای شما از طریق HTTPS به نمایش درمی‌آید. آسان‌ترین راه برای این کار استفاده از گواهی SSL از Let’s Encrypt است که بطور رایگان میتوانید نصب و راه‌اندازی کنید.