همواره استفاده از ترکیب سه گانه apache,mysql,php برای کدنویسی برنامه های php ضروری می باشد.apache به عنوان وب سروری قدرتمند،mysql به عنوان دیتابیس و php به عنوان مفسر زبان در کنار هم برای کدنویسان php لازم و ضروری هستند.

بسته های از پیش آماده ای از قبیل xampp تدارک دیده شده اند که این سه ابزار کلیدی را به همراه ابزارهای دیگری به صورت یکجا در اختیار توسعه دهنده قرار می دهند.اما از آنجایی که این ابزارهای اضافه شاید هیچ گاه به کار نیایند.سعی بر این کردم که آموزشی از نصب این سه ابزار در اختیارتون بگذارم.

در واقع قصد اصلی من حفظ مینیمال بودن سیستم با نصب حداقل نرم افزارها ست.پس شروع میکنیم..

مرحله 0:آپدیت/آپگرید سیستم

قبل از هرکاری باید مخازن خود را برای نصب آخرین نسخه های این سه نرم افزار به روز کنیم.این کار به سادگی زدن دستور زیر در ترمینال میسر خواهد بود:

[saeed@saeed ~]$ sudo pacman -Syu

مرحله 1:نصب وب سرور آپاچی

ابتدا apache را از مخازن دریافت میکنیم و سپس سرویس ش را فعال میکنیم.

$ sudo pacman -S apache 
$ sudo systemctl start httpd 
$ sudo systemctl status httpd

مرحله 2:نصب دیتابیس mysql

ابتداmysqlرا از مخازن دریافت میکنیم و سپس سرویس ش را فعال میکنیم.

$ sudo pacman -S mysql 
$ sudo systemctl start mysqld 
$ sudo systemctl status mysqld

پس از فراخوانی دستور دوم که سرویس mysql را استارت میکند ملاحظه میکنیم که اروری مبنی بر فعال نشدن این سرویس می دهد.دلیل آن هم این است که هنوز دیتابیسی ساخته نشده است.با دستور زیر دیتابیس db را میسازیم و سپس سرویس را از نو فعال سازی میکنیم.

[saeed@saeed ~]$ sudo mysql_install_db --user=mysql --basedir=/usr/ --ldata=/var/lib/mysql/

مرحله 3:نصب php

$ sudo pacman -S php php-apache

مرحله 1-3:نصب php7

برای نصب php7 بایستی از مخازن AUR فایل snapshot بسته php7 را بگیریم.سپس آرایه source را به مسیر فایل php-7.0.0.tar.xz که از اینجا دانلود شده است تغییر دهیم.همان طور که در آرایه pkgname می بینیم با نصب php7 تمامی بسته های زیر نصب خواهند شد؛

۱-php7
۲-php7-cgi

۳-php7-apache
۴-php7-fpm
۵-php7-embed
۶-php7-enchant
۷-php7-gd
۸-php7-intl
۹-php7-ldap
۱۰-php7-mcrypt
۱۱-php7-odbc
۱۲-php7-pear
۱۳-php7-pgsql
۱۴-php7-pspell
۱۵-php7-snmp
۱۶-php7-sqlite
۱۷-php7-tidy
۱۸-php7-xsl

که البته نصب تمامی این بسته ها الزامی نیست.شما فقط بایستی بسته های زیر را نصب کنید:

۱-php7

2-php7-cgi

۳-php7-apache

۴-php7-mcrypt

هر کدام از دستورات نصب بسته های بالا را که بزنید،پکمن ابتدا به شما هشداری در مورد کانفلیکت با بسته های قبلی را میدهد.ابتدا بسته های قدیمی تر را پاک کنید و سپس بسته های جدید را نصب کنید.پس از این کار کافی است ابتدا به فایل زیر می رویم:

sudo nano /etc/httpd/conf/mods-enabled/php.conf

تغییرات زیر را اعمال کنیم.(من تنها عدد 5 را که ورژن قبلی php من بود به عدد 7 که ورژن فعلی php من هست تغییر میدهم!):

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule php7_module modules/libphp7.so

Include conf/extra/php7_module.conf

حال کافی است وب سرور apache خود را ریستارت کنیم:

$ sudo systemctl restart httpd

مشکل php7 با mysql:وقتی php7 رو نصب میکنید دیگه به صفحه phpmyadmin دسترسی ندارن.برای اصلاح این مورد کافیه به بخش 11 از همین آموزش برید و تنظیمات اونو مجددا انجام بدید.

اینم بگم که این کار رو به صورت مشترک با حسین عزیز،یکی دیگه از فعالین آرچ ایران انجام دادیم.همین جا ازت تشکر میکنم حسین عزیز.:)

حالا می تونید از php7 لذت ببرید D:

مرحله 4:امن سازی mysql

دستور زیر را بزنید و عملیات ست کردن پسورد برای کاربر روت را انجام دهید.

$ sudo mysql_secure_installation

مرحله 5:ورود به mysql

$ mysql -u root -p

پس از این مرحله از شما پسورد کاربر روت را میخواهد و به محیط mysql وارد شوید.

مرحله 6:دستکاری فایل تنظیمات apache

ایتدا تکه کد زیر را برای باز کردن فایل تنظیمات در محیط ترمینال بزنید:

sudo nano /etc/httpd/conf/httpd.conf

دو خط زیر را به انتهای این فایل اضافه کرده و آنرا ذخیره کنید:

IncludeOptional conf/sites-enabled/*.conf
IncludeOptional conf/mods-enabled/*.conf

سپس دایرکتوری های زیر را بسازید:

$ sudo mkdir /etc/httpd/conf/sites-available
$ sudo mkdir /etc/httpd/conf/sites-enabled
$ sudo mkdir /etc/httpd/conf/mods-enabled

مرحله 6:ساخت دستورات a2eniste و a2diste

ابتدا فایل زیر را باز کرده:

$ sudo nano a2ensite

سپس دستورات زیر را به آن اضافه کنید

#!/bin/bash
if test -d /etc/httpd/conf/sites-available && test -d /etc/httpd/conf/sites-enabled  ; then
echo "-------------------------------"
else
mkdir /etc/httpd/conf/sites-available
mkdir /etc/httpd/conf/sites-enabled
fi

avail=/etc/httpd/conf/sites-available/$1.conf
enabled=/etc/httpd/conf/sites-enabled
site=`ls /etc/httpd/conf/sites-available/`

if [ "$#" != "1" ]; then
        echo "Use script: n2ensite virtual_site"
        echo -e "\nAvailable virtual hosts:\n$site"
        exit 0
else
if test -e $avail; then
sudo ln -s $avail $enabled
else
echo -e "$avail virtual host does not exist! Please create one!\n$site"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Success!! Now restart Apache server: sudo systemctl restart httpd"
else
echo  -e "Virtual host $avail does not exist!\nPlease see avail virtual hosts:\n$site"
exit 0
fi
fi

سپس فایل زیر را باز کنید:

$ sudo nano a2dissite

کدهای زیر را وارد کنید:

#!/bin/bash
avail=/etc/httpd/conf/sites-enabled/$1.conf
enabled=/etc/httpd/conf/sites-enabled
site=`ls /etc/httpd/conf/sites-enabled`

if [ "$#" != "1" ]; then
        echo "Use script: n2dissite virtual_site"
        echo -e "\nAvailable virtual hosts: \n$site"
        exit 0
else
if test -e $avail; then
sudo rm  $avail
else
echo -e "$avail virtual host does not exist! Exiting"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Error!! Could not remove $avail virtual host!"
else
echo  -e "Success! $avail has been removed!\nsudo systemctl restart httpd"
exit 0
fi
fi

سپس به آنها مجوز اجرا داده و آنها را در متغیر path سیستم خود قرار دهید:

$ sudo chmod +x a2ensite a2dissite
$ sudo cp a2ensite a2dissite /usr/local/bin/

مرحله 7:ساخت میزبان مجازی در apache

فایل زیر را باز کنید:

$ sudo nano /etc/httpd/conf/sites-available/localhost.conf

دستورات زیر را به آن اضافه کنید:

<VirtualHost *:80>
        DocumentRoot "/srv/http"
        ServerName localhost
        ServerAdmin you@example.com
        ErrorLog "/var/log/httpd/localhost-error_log"
        TransferLog "/var/log/httpd/localhost-access_log"

<Directory />
    Options +Indexes +FollowSymLinks +ExecCGI
    AllowOverride All
    Order deny,allow
    Allow from all
Require all granted
</Directory>

</VirtualHost>

لوکال هاست شما آماده ست،آنرا فعال و سرویس httpd را برای اعمال تغییرات ریستارت کنید:

$ sudo a2ensite localhost
$ sudo systemctl restart httpd

مرحله 9:فعال کردن ssl روی میزبان مجازی

فایل زیر را باز کنید:

$ sudo nano /etc/httpd/conf/mods-enabled/ssl.conf

محتوای زیر را آن بیافزایید:

LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

Listen 443

SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLPassPhraseDialog  builtin
SSLSessionCache        "shmcb:/run/httpd/ssl_scache(512000)"
SSLSessionCacheTimeout  300

حال فایل زیر را باز کنید:

$ sudo nano /etc/httpd/conf/sites-available/localhost-ssl.conf

و محتوای زیر را به آن اضافه کنید:

<VirtualHost *:443>
        DocumentRoot "/srv/http"
        ServerName localhost
        ServerAdmin you@example.com
        ErrorLog "/var/log/httpd/localhost-ssl-error_log"
        TransferLog "/var/log/httpd/localhost-ssl-access_log"

SSLEngine on

SSLCertificateFile "/etc/httpd/conf/ssl/localhost.crt"
SSLCertificateKeyFile "/etc/httpd/conf/ssl/localhost.key"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>

<Directory "/srv/http/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog "/var/log/httpd/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

<Directory />

    Options +Indexes +FollowSymLinks +ExecCGI
    AllowOverride All
    Order deny,allow
    Allow from all
Require all granted
</Directory>

</VirtualHost>

برای ساخت مجوز های ssl نیاز دارید که بسته openssl رو نصب کنید.به این صورت:

$ sudo pacman -S openssl

سپس فایل زیر را باز کرده:

$ sudo nano apache_gen_ssl

و اسکریپت زیر را وارد آن کنید:

#!/bin/bash
mkdir /etc/httpd/conf/ssl
cd /etc/httpd/conf/ssl

echo -e "Enter your virtual host FQDN: \nThis will generate the default name for Nginx  SSL certificate!"
read cert

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out $cert.key
chmod 600 $cert.key
openssl req -new -key $cert.key -out $cert.csr
openssl x509 -req -days 365 -in $cert.csr -signkey $cert.key -out $cert.crt

echo -e " The certificate "$cert" has been generated!\nPlease link it to Apache SSL available website!"

ls -all /etc/httpd/conf/ssl
exit 0

و در نهایت به آن دسترسی اجرا داده و آنرا وارد متغیرهای محلی خود کنید:

$ sudo chmod +x apache_gen_ssl
$ sudo cp /apache_gen_ssl  /usr/local/bin/

حالا کد زیر را برای تولید certificate key وارد کنید:

sudo ./apache_gen_ssl

حالا کافی ست کدهای زیر را بزنید:

$ sudo a2ensite localhost-ssl
$ sudo systemctl restart httpd

مرحله 10:فعال کردن php روی apache

ابتدا فایل زیر را باز کنید:

$ sudo nano /etc/httpd/conf/httpd.conf

با کلید های ترکیبی ctrl+w دنبال عبارت زیر میگردیم و آنرا کامنت میکنیم:

#LoadModule mpm_event_module modules/mod_mpm_event.so

سپس فایل زیر را می سازیم:

sudo nano /etc/httpd/conf/mods-enabled/php.conf

و کدهای زیر را به آن می افزاییم:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule php5_module modules/libphp5.so

Include conf/extra/php5_module.conf

سپس در مسیر /srv/http/ فایلی به نام info.php می سازیم و درنهایت این آدرس را در مرورگرمان فراخوانی میکنیم:

https://localhost/info.php

کدی که باید داخل فایل info.php زده شود به شرح زیر است:

<?php

phpinfo();

?>

در نهایت apache را ریست میکنیم:

$ sudo systemctl restart httpd

تبریک!!!

شما توانستید میزبان مجازی خود را به درستی بالا آورده و اولین صفحه php خود را در آن دیپلوی کنید.

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

$ sudo apachectl configtest
$ sudo apachectl -M

مرحله 11:نصب و راه اندازی PhpMyAdmin

ابتدا بسته های مورد نیاز را از مخازن دریافت کنید:

$ sudo pacman -S phpmyadmin php-mcrypt

حالا بایستی برخی از ماژول های پرکاربرد php را فعال کنید.ابتدا فایل زیر را باز کنید:

$ sudo nano /etc/php/php.ini

بوسیله ctrl+w دنبال اکتنشن های زیر بگردید و آنها را آن کامنت کنید:

extension=mcrypt.so
extension=mssql.so
extension=mysqli.so
extension=openssl.so
extension=iconv.so
extension=imap.so
extension=zip.so
extension=bz2.so

سپس دنبال عبارت open_basedir در همین فایل بگردید.ملاحظه میکنید دایرکتوری های php شما را نشان میدهد.به صورت پیش فرض میتوانید آدرس را از  /srv/http/  به هر جایی که خواستید منتقل کنید.این یک آدرس دهی معمولی برای دایکتوری های open_basedir می باشد:

open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/usr/share/webapps/phpMyAdmin

همان طور که ملاحظه می کنید من مقدار :/usr/share/webapps/phpMyAdmin را به انتهای این عنصر افزوده ام.در واقع آدرس دایرکتوری phpmyadmin خودمو بهش دادم.اگه این کار رو نکنید با خطای زیر هنگام دسترسی به صفحه phpmyadmin مواجه می شوید:

تنظیمات ssl:

در این مرحله باید تنظیمات ssl را برای phpmyadmin انجام دهیم.ابتدا فایل زیر را باز می کنیم:(البته اگر دقت کنید در این مسیر:/etc/httpd/conf/sites-enabled دو فایل یکی برای تنظیمات ssl و یکی دیگر برای تنظیمات عادی وجود دارد.بسته به تنظیمات مورد دلخواه تان تنظیمات زیر را در آن فایل اعمال کنید.)

$ sudo nano /etc/httpd/conf/sites-enabled/localhost-ssl.conf

و تکه کد زیر را به انتهای آن قبل از تک انتهایی virtual host وارد میکنیم:

Alias /phpmyadmin "/usr/share/webapps/phpMyAdmin"

<Directory "/usr/share/webapps/phpMyAdmin">
    DirectoryIndex index.html index.php
    AllowOverride All
    Options FollowSymlinks
    Require all granted
</Directory>

حالا کافی است آدرس زیر را در مروگر خود وارد کنید:

https://localhost/phpmyadmin 

با ارور blowfish_secret مواجه می شوید.کافی است ابتدا به مسیر زیر بروید:

/etc/webapps/phpmyadmin/config.inc.php

سپس کد زیر را به جای متغیر blowfish_secret قرار دهید:

$cfg['blowfish_secret'] = ‘{^QP+-(3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V’ ;

مرحله 12:فعال کردن سرویس های apache,mysql هنگام راه اندازی سیستم به صورت خودکار

کافی ست سرویس های آنها را enable کنیم:

$ sudo systemctl enable httpd mysqld

این مقاله برگردان ساده ای از اینجا بود.