مقدمه
در این مقاله قصد داریم که تمام پیکربندی های که هنگام راه اندازی اپلیکیشن لاراول، بر روی سرور 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 در سرور به کار بگیرید. امیدوارم این مقاله به همه شما کمک کند.
