چگونگی نصب lamp در آرچ لینوکس

2018-12-09
15 دقیقه مطالعه

هر برنامه نویس بک‌اند وب برای توسعه نیاز به یه سرور محلی داره. پی اچ پی یکی از معروف‌ترین و محبوب‌ترین زبان‌های توسعه بک‌اند وب هست که برای توسعه‌ی برنامه‌ها با زبان پی اچ پی قبل از هر چیز نیاز به یه سرور محلی و دیتابیس دارین. مجموعه‌ی سرور محلی، پلاگین پی اچ پی برای وب‌سرور و دیتایس mysql رو توی سیستم عامل گنو/لینوکس lamp میگن که برای بعضیا ممکنه روندش نصبش یکم سخت و پیچیده باشه و گاها خیلی‌ها به مشکل دسترسی می‌خورن و ساعت‌ها و روزها ممکنه باهاش سر و کله بزنن ! اما الان می‌خوام بهتون بگم که اصلا اینطور نیست. نصب و راه اندازی لمپ برای توسعه‌ی پی اچ پی کار خیلی سر راستیه که نیازی به گیج زدن نداره :)) بریم سر اصل مطلب …

خب قبل از هر چیز بهتره سیستم‌تون رو آپدیت کنین:

$ sudo pacman -Syu

بعدش وب سرور رو نصب می‌کنیم:

$ sudo pacman -S apache

حالا باید فایل پیکربندی آپاچی رو باز کنیم. با هر ادیتوری دوست دارین فایل زیر رو باز کنین (من از ایمکس استفاده می‌کنم) :

$ sudo emacs -nw /etc/httpd/conf/httpd.conf

توش دنبال خط زیر بگردین و مطمئن باشین که کامنت شده و اگه کامنت نشده بود خودتون با گذاشتن علامت # در ابتدای خط کامنتش کنین:

LoadModule unique_id_module modules/mod_unique_id.so

بعدش فایل رو ذخیره کنین و ازش خارج بشین.

حالا سرویس آپاچی رو فعال و ریستارتش کنین تا تغییرات اعمال بشه:

$ sudo systemctl enable httpd
$ sudo systemctl restart httpd

بعد هم با دستور زیر چک کنین ببینین آپاچی درست کار می‌کنه یا نه:

$ systemctl status httpd

اگه خروجی مشابه زیر داشتین یعنی همه چی درسته:

● httpd.service - Apache Web Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor >
   Active: active (running) since Sun 2018-12-09 13:18:12 +0330; 34min ago
  Process: 5332 ExecStop=/usr/bin/httpd -k graceful-stop (code=exited, sta>
 Main PID: 5343 (httpd)
    Tasks: 7 (limit: 4915)
   Memory: 17.4M
   CGroup: /system.slice/httpd.service
           ├─5343 /usr/bin/httpd -k start -DFOREGROUND
           ├─5344 /usr/bin/httpd -k start -DFOREGROUND
           ├─5345 /usr/bin/httpd -k start -DFOREGROUND
           ├─5346 /usr/bin/httpd -k start -DFOREGROUND
           ├─5347 /usr/bin/httpd -k start -DFOREGROUND
           ├─5348 /usr/bin/httpd -k start -DFOREGROUND
           └─5350 /usr/bin/httpd -k start -DFOREGROUND

Dec 09 13:18:12 mehran-pc systemd[1]: Started Apache Web Server.

برای تست کردن آپاچی هم بیاین یه فایل ایندکس بسازیم و مطمئن بشیم که کار می‌کنه:

$ sudo emacs -nw /srv/http/index.html

نیازی نیست حتما یه فایل اچ‌تی‌ام‌ال کامل و مرتب بنویسین فقط یه تگ h1 یا p بذارین و یه چیزی توش بنویسید مثل این:

<h1> I'm Working ! </h1>

فایل رو ذخیره کنین و توی مرورگرتون به آدرس 127.0.0.1 یا localhost برین. اگه همه چیز درست باشه باید متنی رو که نوشتین رو مشاهده کنین.

بعد از اینکه کار آپاچی تموم شد می‌تونیم بریم سراغ نصب دیتابیس. من از mariadb استفاده می‌کنم که انشعابی از mysql به شمار میاد و به صورت آزاد با پروانه‌ی همگانی گنو منتشر می‌شه. برای نصبش از مدیر بسته‌مون استفاده می‌کنیم:

$ sudo pacman -S mariadb

بعد از اینکه نصب شد (طبق ویکی آرچ لینوکس) باید قبل از راه اندازی دستور زیر رو بزنیم:

$ sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql

حالا بیاید سرویسش برای همیشه فعال و استارتش کنیم:

$ sudo systemctl enable mysqld
$ sudo systemctl start mysqld

بعدش هم می‌تونین با این دستور چک کنین که درست ران شده یا نه:

$ systemctl status mysqld

اگه همه چیز درست باشه خروجی مشابهی می‌گیرین:

● mariadb.service - MariaDB 10.1.37 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2018-12-09 13:12:56 +0330; 46min ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 4468 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 4388 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exit>
  Process: 4387 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
 Main PID: 4440 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 27 (limit: 4915)
   Memory: 65.3M
   CGroup: /system.slice/mariadb.service
           └─4440 /usr/bin/mysqld

Dec 09 13:12:55 mehran-pc mysqld[4440]: 2018-12-09 13:12:55 140255621910464 [Note] InnoDB: Highest supported file format is Barracuda.
Dec 09 13:12:55 mehran-pc mysqld[4440]: 2018-12-09 13:12:55 140255621910464 [Note] InnoDB: 128 rollback segment(s) are active.
Dec 09 13:12:55 mehran-pc mysqld[4440]: 2018-12-09 13:12:55 140255621910464 [Note] InnoDB: Waiting for purge to start
Dec 09 13:12:56 mehran-pc mysqld[4440]: 2018-12-09 13:12:56 140255621910464 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.41-84.1 started; log sequence number 1704592
Dec 09 13:12:56 mehran-pc mysqld[4440]: 2018-12-09 13:12:56 140255036438272 [Note] InnoDB: Dumping buffer pool(s) not yet started
Dec 09 13:12:56 mehran-pc mysqld[4440]: 2018-12-09 13:12:56 140255621910464 [Note] Plugin 'FEEDBACK' is disabled.
Dec 09 13:12:56 mehran-pc mysqld[4440]: 2018-12-09 13:12:56 140255621910464 [Note] Server socket created on IP: '::'.
Dec 09 13:12:56 mehran-pc mysqld[4440]: 2018-12-09 13:12:56 140255621910464 [Note] /usr/bin/mysqld: ready for connections.
Dec 09 13:12:56 mehran-pc mysqld[4440]: Version: '10.1.37-MariaDB'  socket: '/run/mysqld/mysqld.sock'  port: 3306  MariaDB Server
Dec 09 13:12:56 mehran-pc systemd[1]: Started MariaDB 10.1.37 database server.

خب بعد از این مرحله معمولا میایم و یه پسورد برای کاربر ریشه‌ی پایگاه داده تعیین می‌کنیم که با دستور زیر قابل انجامه:

$ sudo mysql_secure_installation

به همچین خروجی‌ای می‌رسید، طبق راهنمایی‌ای که مقابل هر خط نوشته شده عمل کنین:

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
 SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): ## Press Enter
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] ## Press Enter
New password: ## Enter password
Re-enter new password:  ## Re-enter password
Password updated successfully!
Reloading privilege tables..
 ... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] ## Press Enter
 ... Success!

Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] ## Press Enter
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n]  ## Press Enter
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] ## Press Enter
 ... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

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

$ sudo pacman -S php php-apache

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

$ sudo emacs -nw /etc/httpd/conf/httpd.conf

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

LoadModule mpm_event_module modules/mod_mpm_event.so

حالا به آخر فایل برین و خط‌های زیر رو بهش اضافه کنین:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule php7_module modules/libphp7.so
AddHandler php7-script php
Include conf/extra/php7_module.conf

بعد کافیه فایل رو ذخیره کنین و سرویس آپاچی رو ری‌استارت کنین:

$ sudo systemctl restart httpd

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

$ sudo emacs -nw /srv/http/test.php

خب حالا داخل فایل پی اچ پی از تابع phpinfo استفاده می‌کنیم که مشخصات پی اچ پی نصب شده روی سیستم‌مون رو باید نمایش بده:

<?php
    phpinfo();
?>

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

fx file explorer

خب تا اینجا همه چیز اوکیه و lamp ما داره کار می‌کنه، اما یه مشکلی وجود داره و اون هم این هست که دایرکتوری /srv دسترسی خوندن و نوشتن رو برای هر کاربری به جز ریشه نداره. راهی که ممکنه خیلی از تازه واردا به ذهنشون برسه تغییر دسترسی با دستور chmod هست که به هیچ عنوان توصیه نمی‌شه همچین بلایی سر یه دایرکتوری سیستمی بیارین ! چرا که علاوه بر به خطر افتادن امنیت‌تون می‌تونه باعث به وجود اومدن مشکل برای سیستم‌عامل‌تون بشه. چاره‌ی این مشکل دسترسی اینه که دایرکتوری فایل‌های وب‌سرورمون رو به یه دایرکتوری توی هوم یوزر خودمون تغییر بدیم. اما به این کار هم نیازی نیست :)) آپاچی به صورت پیش‌فرض فایل‌های موجود توی دایرکتوری public_html واقع در هوم شما رو در آدرس localhost/~username بررسی می‌کنه. فقط کافیه این دایرکتوری رو بسازین:

$ mkdir public_html

و بعدش دسترسی اجرایی به دایرکتوری هوم کاربر خودتون، public_html و تمام فایل‌های موجود توی public_html بدین که به سادگی با سه دستور زیر قابل انجامه:

$ chmod o+x ~
$ chmod o+x ~/public_html
$ chmod -R o+r ~/public_html

از این به بعد می‌تونین فایل‌هاتون رو توی دایرکتوری public_html واقع در هوم کاربر خودتون قرار بدین و در آدرس localhost/~username بهش دسترسی داشته باشین. (توجه کنین که به جای username باید اسم کاربر خودتون رو بذارین مثلا اسم کاربر من mehran هست پس آدرس برای من به این صورت میشه: localhost/~mehran)

برای تستش هم می‌تونین مثل قبل عمل کنین و یه فایل html یا php بسازین و بعدش به اون آدرس برین و چک کنین درست کار می‌کنه یا نه.

امیدوارم به دردتون بخوره :))


سورس این پست رو می‌تونین از اینجا ببینین :)