Deploy Laravel Application توسط وب سرور Nginx

Deploy Laravel Application توسط وب سرور Nginx

مقدمه

در این مقاله قصد داریم که تمام پیکربندی های که هنگام راه اندازی اپلیکیشن لاراول، بر روی سرور Ubuntu 18.04 توسط وب سرور Nginx به آن ها نیاز دارید را آموزش دهیم.

نصب پیش نیازها بر روی سرور

۱. Nginx

2. PHP8

3. MySQL

این مقاله برای کسانی مفید می باشد که درک خوبی از مباحث شبکه و تجربه کافی برای کار با سرور را داشته باشند.

هنگامی که شما یک سرور اشتراکی یا سرور VPS خریداری می کنید میتوانید از طریق telnet یا ssh به سرور خود ورود کنید، قبل از اجرای دستورات بر روی سرور می توانید برای telnet یا ssh کردن اگر سیستم عامل شما لینوکس است از دستورات زیر استفاده کنید :

نکته: البته سرور اشتراکی به شما پنل مدیریتی می دهد و میتوانید از طریق پنل خود هاستینگ به DirectAdmin یا Cpanel ورود کنید.

ssh -p 22 userserver@ipserver
telnet ipserver

 

پس از ورود اولین دستور که اجرا می کنید به این صورت می باشد :‌ apt-get update، این دستور تمام مخزن های خود را بر روی سرور لینوکس بروز رسانی می کند

۱. Nginx

Nginx یکی از محبوب ترین وب سرور ها در جهان می باشد که وظیفه میزبانی برخی از بزرگترین و پر بازیدترین سایت های اینترنتی را برعهده دارد. در حال حاضر انتخاب بین Apache و Nginx بوده ولی بخاطر عملکرد و سرعت و امنیت و مدیریت منابع میتوان Nginx را به عنوان وب سرور و یا پروکسی معکوس معرفی کرد.

۱.۱ نصب Nginx

 apt-get install nginx

۱.۲ تنظیم فایروال

قبل از راه اندازی Nginx باید تنظیمات مربوط به فایروال انجام شود تا دسترسی به ان امکان پذیر باشد. Nginx هنگام نصب خود را به عنوان یک سرویس به ufw معرفی می کند و این امر دسترسی به آن را ساده می کند.

تنظیمات برنامه فایروال را که ufw می داند با تایپ کردن دستور زیر لیست کنید :

ufw app list

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

//Output
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH

حال می توانید HTTP را با تایپ فعال کنید .

ufw allow Nginx HTTP

حال می توانید لیست وضعیت تغییرات انجام شده را به این شکل ببنید، ما با این عمل اجازه عبور ترافیک بر روی HTTP را صادر کردیم.

ufw status

خروجی :

//Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

۱.۳ برسی وضعیت وب سرور

در پایان انجام این فرایند ها باید چک کنیم توسط دستور زیر که وب سرور در حالت فعال قرار گرفته باشد.

systemctl status nginx

خروجی :‌

//Output
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-06-09 00:00:00 ; 3h 33min ago
     Docs: man:nginx(8)
  Process: 2062 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 1803 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 2064 (nginx)
    Tasks: 5 (limit: 4915)
   CGroup: /system.slice/nginx.service
           ├─2064 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ├─2066 nginx: worker process
           ├─2068 nginx: worker process
           ├─2071 nginx: worker process
           └─2072 nginx: worker process

اکنون اگر از طریق مرورگر خود IP سرور یا دامنه مورد نظر را تایپ کنید باید خروجی به شکل ذیل مشاهده کنید :

 

2.MySQL

اگر از اوبنوتو 18.04 استفاده می کنید به صورت پیش فرض در مخرن بسته APT موجود است، برای نصب آن از دستور زیر استفاده کنید.

apt-get install mysql-server

 

پس از نصب MySQL بر روی سرور خود از شما گذرواژه را نمی خواهد یا تغییرات پیکربندی دیگر را انجام دهید، اکنون این امر باعث می شود نصب MySQL ناامن باشد، برای همین امر دستور بعدی اجرا کنید.

 mysql_secure_installation

این امر ما را از طریق مجموعی از درخواست راهنمایی می کند که در آن می توانیم تغییراتی در گزینه های امنیتی نصب MySQL خود ایجاد کنیم. مانند تعیین رمزعبور برای کاربر اصلی و غیره. از طریق دستور زیر میتوانید برای کاربر اصلی یک رمزعبور تعیین کنید با دستورات SQL خود را جرا کنید.

mysql -u root -p

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

systemctl status mysql

خروجی :

// Output
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-06-09 00:00:00; 3h 53min ago
  Process: 1948 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid (code=exited, status=0/SUCCESS)
  Process: 1792 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 Main PID: 1950 (mysqld)
    Tasks: 28 (limit: 4915)
   CGroup: /system.slice/mysql.service
           └─1950 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid

و در آخر شما باید یک کاربر و دیتابیس ایجاد کنید بر روی سرویس MySQL خود که به ترییب دستورات زیر را وارد کنید .

۲.۱ ورود به MySQL

mysql -u root -p

۲.۲ تعریف کاربر جدید و اعمال دسترسی ها

mysql> GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

پس از ایجاد کاربر با دستور \q از سرویس MySQL خود خارج شوید و بعد با دستور بعدی با کاربر جدید وارد شوید.

mysql -u username -p

۲.۳ ایجاد دیتابیس

CREATE DATABASE dbname;

۳. PHP

اگر از اوبنوتو 18.04 استفاده می کنید به صورت پیش فرض در مخرن بسته APT موجود است، برای نصب آن از دستور زیر استفاده کنید.

sudo apt install php8.0

با دستور زیر از ورژن PHP نصب شده مطما شوید.

php -v

برای نصب PHP در کنار Nginx باید بسته FPM را نصب کنید .

sudo apt install php8.0-fpm

سپس تمام php-extensions های مورد نیاز را نصب کنید.

sudo apt install php8.0-common php8.0-mysql php8.0-xml php8.0-curl php8.0-gd php8.0-imagick php8.0-cli php8.0-dev php8.0-imap php8.0-mbstring php8.0-opcache php8.0-soap php8.0-zip -y

همانطور که می دانید توسط Composer تمام بسته های PHP مدیریت می شود، اکنون بعد از نصب موارد بالا حال می خواهیم Composer را هم نصب کنیم. دستورات زیر را به ترتیب اجرا کنید در بالا لینک نصب و پیکربندی از از روی سایت composer هم لینک داده شده است.

cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php

و بعد از آن توسط دستور زیر شروع به نصب کنید.

php composer-setup.php --install-dir=/usr/local/bin --filename=composer

در آخر با زدن دستور زیر شما composer را نصب دارید.

composer

پیکربندی و راه اندازی برنامه

پس از انجام تمام موارد بالا مسیری که برای میزبانی برنامه های خود در نظر گرفته می شود در این مسیر /var/www/html می باشد. من با در نظر گرفتن اینکه شما Git را میدانید بقیه مقاله را ادامه می دهم، البته در یک مقاله دیگ سعی میکنم راه اندازی FTP سرور راه هم پوشش بدهم ولی فعلا مبنا Git می باشد .

با رفتن به مسیر /var/www/html مخزن خود را با دستور زیر clone کنید.

git clone https://github.com/username/project-name.git

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

cp .env.example .env
nano .env

باز کردن فایل .env میتوانید تمام تنظیمات خود را نسبت به سروری که پیکربندی کردین تغییر دهید.

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

composer update

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

composer dump-autoload
php artisan config:clear
php artisan key:generate
php artisan migrate
php artisan db:seed

اکنون موقع آن رسیده است که پیکربندی لاراول را بر روی Nginx انجام دهیم که وب سرور ما درخواست ها به درستی مدیریت کند مسیری که به صورت پیش فرض خود Nginx تعیین کرده است این /etc/nginx/sites-available/default.conf مسیر می باشد. اولین دستور که باید تایپ کنید به شکل زیر می باشد :

nano /etc/nginx/sites-available/default.conf

 

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

// /etc/nginx/sites-available/default.conf file
server {
    listen 80;
    listen [::]:80;

    root /var/www/html/public;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name <our.application.name>;

    location / {
    try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
      try_files $uri /index.php =404;
      fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

به جای کلمه server_name در تنظمیات باید دامنه یا IP سرور خود را قرار دهید.

حال فقط کافی است که یک symbolic link به مسیر /etc/nginx/sites-enabled/ ایجاد کنیم.

ln -S /etc/nginx/sites-available/default.conf /etc/nginx/sites-enabled/

اکنون میتوانیم پیکربندی که انجام دادیم را با دستور زیر از صحت آن بر روی nginx مطما شویم و اگر پیغام زیر را دریافت کردید یعنی همچی به درستی انجام شده است.

nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

آخرین گامی که باید انجام دهید ریستارت کردن nginx است و اگر همچی به درستی انجام داده باشید سایت شما رور دامنه و یا IP بالا امده و میتوانید خدمات خود را به کابرانتان ارایه دهید.

systemctl restart nginx

کلام آخر

در این پست سعی کردم راهنمای کاملی به شما بدهم که چگونه می توانید برنامه Laravel خود را با Nginx در Ubuntu 18.04 در سرور به کار بگیرید. امیدوارم این مقاله به همه شما کمک کند.

 

نظرات
اگر login نکردی برامون ایمیلت رو بنویس: