آپلود پروژه لاراول روی سرور به صورت گام به گام

آپلود پروژه لاراول روی سرور
اگر برای به نمایش گذاشتن مهارت های برنامه نویسی خود با لاراول در سطح وب هیجان زده هستید، یکی از مهم ترین اقداماتی که باید در نظر گرفته شود، آپلود پروژه روی سرور می باشد. با وجود اینکه هر یک از تیم های توسعه روش های متفاوتی برای آپلود پروژه ها دارند، اما ما ادعا می کنیم که دنبال کردن مراحل جامع زیر زمان بندی به نتیجه رسیدن شما را تا حدود زیادی کاهش می دهد. پس همراه ما باشید تا به ترتیب مراحل مستقر کردن یک پروژه Laravel بر سرور را پیش ببریم.
نحوه مستقر کردن یک پروژه Laravel بر سرور

مراحل آپلود پروژه لاراول روی سرور به صورت گام به گام

برای سهولت نحوه اجرا دستورات و مراحل موجود در این راهنما تیترهای زیر را با صبر و شکیبایی دنبال کنید تا به راحتی پروژه لاراول شما بر روی سرور آپلود شود:

1- آماده سازی سرور

آماده سازی سرور ابتدایی ترین اقدامی است که باید در این مراحل بررسی شود. بنابراین در این راستا شما به صورت خلاصه باید فاکتورهای زیر را بررسی کنید:
  • سرور اختصاصی خود را از یک میزبانی معتبر تهیه کنید.
  • LAMP را نصب کنید. بسیاری از توسعه دهندگان از Digital Ocean و چند کلیک ساده برای این کار استفاده می کنند.
مراحل آپلود پروژه Laravel روی Server
  • می توانید بدون نیاز به خرید لینوکس از Laravel Valet یا Laravel Sail برای شبیه سازی استفاده کنید.
  • دسترسی SSH را برای سرور خود پیکربندی کرده و آپلود را از طریق FTP انجام دهید.
  • اگر از لاراول نسخه 9 استفاده می کنید Extensionهای مقابل را در نظر داشته باشید: PHP >= 8.0 ،BCMath PHP ،Ctype PHP ،cURL PHP ،DOM PHP ،Fileinfo PHP ،JSON PHP ،Mbstring PHP ،OpenSSL PHP ،PCRE PHP PDO PHP ،Tokenizer PHP ،ML PHP
  • Composer را نصب و پیکربندی کنید. برای این کار به راحتی می توانید دستورات GetComposer.org را دنبال کنید.
  • git را نصب و پیکربندی کنید.
  • MySQL را پیکربندی کنید.
  • اکنون باید سرور را پیکربندی کنید که در ادامه نمونه ای از پیکربندی Nginx در لاراول آمده است.

server {
listen 80;
listen [::]:80;
server_name example.com;
root /srv/example.com/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_ log off; log_not_found off; }
location = /robots.txt { access_ log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
  • اکنون می توانید دامنه را بر روی سرور خود قرار دهید.
نکته مهم! دقت کنید که در صورت وجود برخی از آدرس های IP که از Digital Ocean نشات می گیرد، باید رکوردهای DNS آن ها را تغییر دهید.

2- راه اندازی اولیه

اکنون سرور شما اماده دریافت مراحل راه اندازی اولیه می باشد، بنابراین باید دو قسمت زیر را با دقت اجرا کنید:
  • کد را در مخزن قرار دهید.
یکی از سیستم های GitHub، Bitbucket یا Gitlab را انتخاب کرده و مخزنی را در آن ایجاد کنید. سپس کدهای خود را از سیستم Local به این مخزن انتقال دهید. اگر به راهنمایی بیشتری در این زمینه نیاز دارید می توانید از دستورات زیر که برای Github در مخزن Git ساخته شده است استفاده کنید:

git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/LaravelDaily/Deployment-Demo.git
git push -u origin main

اکنون پس از وارد کردن کد، باید مخزن Github به شکل زیر باشد:
مراحل آپلود پروژه Laravel روی Server
  • مخزن را به سرور شبیه سازی کنید.
برای این که در این مرحله بتوانیم مخزن را به سرور تشبیه کنیم باید SSH را وارد سرور کرده و در پوشه ای که برای پروژه لاراول آماده کرده ایم، Git Clone را اضافه کنیم:

git clone https://github.com/LaravelDaily/Deployment-Demo.

سرور شما باید به مخزن دسترسی کامل داشته باشد، پس در صورتی که سرور Public نیست لازم است تا نام کاربری و رمز دسترسی شخصی Github را در هر بار وارد کنید. اکنون بعد از Cloning باید فایل هایی که در سرور دانلود شده است را مشاهده نمایید.
مراحل آپلود پروژه Laravel روی Server
نکته مهم! باید اطمینان حاصل کنید که پیکربندی وب سرور به فایل Public اشاره کند.
در ادمه می توانید از دستور زیر برای پیکربندی Nginx کمک بگیرید:
server {
...
server_name deploymentdemo.laraveldaily.com;
root /home/forge/deploymentdemo.laraveldaily.com/public;
...
  • فایل env را تنظیم کنید.
برای تنظیمات در خصوص فایل env باید ابتدا محیط را پیکربندی کنیم که خوشبختانه لاراول با فایلی به نام .env.example و تمام نکات پیکربندی ارائه می گردد:

APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="[email protected]"
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_HOST=
PUSHER_PORT=443
PUSHER_SCHEME=https
PUSHER_APP_CLUSTER=mt1
VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
VITE_PUSHER_HOST="${PUSHER_HOST}"
VITE_PUSHER_PORT="${PUSHER_PORT}"
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

اگر مقادیر برای سرور شما متفاوت نمایش داده شد یا از دستور زیر فایل مثال را به عنوان فایل env اصلی با این دستور کپی کنید و یا مرحله بعدی را انجام دهید:

cp .env.example .env

در این مرحله نیز می توانید فایل .env جدید را با ویرایشگر لینوکس Vim ویرایش کنید:

vi .env
متغیرهای زیادی برای ویرایش وجود دارد، اما چهار نمونه از اصلی ترین آن ها عبارت اند از:

APP_URL=http://localhost
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

حال App URL و اعتبار پایگاه داده خود را بررسی کنید.
  • Composer را نصب کنید.
در حالتی که برخی از بسته ها با نسخه PHP یا افزونه های شما سازگار باشد پیامی مانند دستور زیر را مشاهده می کنید:
مراحل آپلود پروژه Laravel روی Server
کلید Application را با دستور زیر اجرا کنید و در نظر داشته باشید که این کلید تصادفی به شکل خودکار به متغیر APP_KEY فایل .env اضافه خواهد شد:

php artisan key: generate

  • تنظیمات DB Schema را انجام دهید.
برای تنظیم این مورد باید از دستور زیر استفاده کنید و مطمئن شوید که Credentials درستی از پایگاه داده را در در فایل env وارد کرده اید:

php artisan migrate

  • Seeding data را اجرا کنید.
در صورتی که Database / Seeds را تنظیم کرده باشید اکنون باید با دستور زیر آن را به اجرا در بیاورید:

php artisan db:seed

اگر می خواهید سریع تر به جواب برسید می توانید از دستور زیر به جای مراحل طولانی استفاده کنید:

php artisan migrate --seed

  • راه اندازی نهایی را انجام دهید.
حال می توانید با مشاهده تصویر زیر مطمئن شوید که راه اندازی نهایی انجام شده است.
مراحل آپلود پروژه Laravel روی Server

3- نحوه اعمال تغییرات

پس از اینکه دو مرحله بالا را به نحوه احسن سپری کردید می توان گفت اولین نسخه از پروژه مستقر شده است. پس باید مراحل زیر باید در نظر گرفت:
  • Artisan down
دستور Artisan را وارد کنید تا وب سایت Down شود:

php artisan down

در حالتی که آن را روی سرور راه‌اندازی کرده باشید، کل وب‌سایت از دسترس خارج می‌شود و باید اقدامات امنیتی مخصوصی را انجام دهید تا در معرض تغییر داده های دیتابیس در حالت زنده نباشید. اما اکنون این صفحه در لاراول 9 برای بازدیدکنندگان نمایش داده خواهد شد:
مراحل آپلود پروژه Laravel روی Server
جهت راه اندازی محدد وب سایت و اقداماتی که انجام شده است، دستور زیر را وارد کنید:

php artisan up

  • Git pull
برای کشیدن آخرین نسخه کد به پوشه از دستور زیر کمک بگیرید:

git pull

  • Composer
اگر تغییرات جدیدی در Composer.lock رخ داده باید Composer install را اجرا کنید که هر دو مورد از Composer.json و Composer.lock را تغییر خواهد داد. پس باید به یاد داشته باشید که اگر Composer را بر روی سرور نصب کرده باشید تنها تغییرات لازم را در Composer.lock بدون بررسی همه نسخه ها را برای همه بسته را انجام خواهد داد. 
  • DB Migrations
اگر تغییراتی در دیتابیس و یا Migrationها در نظر داشتید، اجرا کردن دستور زیر از واجبات است. در غیر این صورت فقط با پیامی مواجه می شوید که اقدامی برای انجام دادن وجود ندارد:

php artisan migrate

  • Restart FPM (اختیاری)
این مرحله ضرورتی ندارد اما می تواند PHP را مجدد راه اندازی کند. پس برای آخرین نسخه PHP 8.1 در اوبونتو دستور زیر کافیست:

sudo service php8.1-fpm restart

  • Clearing cache (اختیاری)
اگر به دنبال دستوری برای پاک کردن کش لاراول می گردید، این دستور دقیقاً همین کار را برای شما انجام خواهد داد:

php artisan cache: clear

  • راه اندازی مجدد
برای راه اندازی مجدد، خط زیر جوابی سریع به شما خواهد داد:

php artisan up

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

cd /home/forge/deploymentdemo.laraveldaily.com
php artisan down
git pull origin main
composer install
php artisan migrate
php artisan cache: clear
php artisan queue: restart
php artisan up

4- انتقال در Zero downtime

یک پوشه جدید در سرور ایجاد کرده و جدیدترین نسخه کد را از مخزن Clone کنید. اکنون دو پوشه دارید، فقط باید لینوکس را به یک Symbolic Link متصل کنید، زیرا این مرحله تجربه زمان خرابی مطلقاً صفر را به بازدیدکنندگان وب سایت شما به دنبال خواهد داشت. از بهترین ابزارهایی که می توانید برای این کار در نظر بگیرید استفاده از Laravel Envoyer است.
مراحل آپلود پروژه Laravel روی Server

5- بررسی ویژگی های Team work ،Server stage و branch

اگر یک قدم جلوتر برویم می توانیم ویژگی های کار تیمی در زمان اعمال تغییرات را بررسی کنیم که در تصویر زیر نمونه ای از این SourceTree با کمک Git آورده ایم:
مراحل آپلود پروژه Laravel روی Server
اما به خاطر داشته باشید که باید حداقل دو Branche مانند Main/Master و Develop در مخزن موجود باشد که تنها یکی از آن ها LIVE است و کدها را از Git pull origin main main استخراج می کند. در این حالیت دیگر هیچ توسعه دهنده ای اجازه دسترسی به Branch اصلی را نخواهد داشت. همچنین اگر تمایل به انتشار برخی از عملکردها به نسخه Live را دارید، باید این کار را با Develop Branch تست شده انجام دهید و در مخزن Pull Request را در نظر بگیرید تا به main تبدیل شود.
  • ایجاد فایل env در Staging Server
در این مرحله دقیقاً همان سرور که مشتری برای تأیید آماده بودن Feature آزمایش می کند را وارد خواهیم کرد. پس یک محیط جداگانه برای این کار تهیه کنید:
APP_ENV=staging
APP_DEBUG=true
APP_URL=http://test-something.yourdomain.com

به خاطر داشته باشید که نباید APP_ENV را به عنوان Local رها کنید و لازم است تا متفاوت باشد ولی نه از نوع production. در APP_DEBUG=true تمام خطاها همراه با ردیابی کامل را نمایش خواهد داد، اما نباید فراموش کرد که از طرف دیگر باید APP_DEBUG=false در سرور Live اجرا شود:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=user
DB_PASSWORD=password


با دستور زیر می توانید یک دیتابیس جدا برای Staging Server داشته باشید:

STRIPE_API_KEY=sk_test_N9voB......
PUB_STRIPE_API_KEY=pk_test_pIaGo.....

به عنوان مرحله پایانی اگر سرویسی مانند Stripe دارید، Sandbox/Testing آن را در فایل env قرار دهید. 

6- تست (اختیاری)

این مرحله اختیاری است اما توصیه می کنیم برای اطمینان بیشتر آن را انجام دهید، بنابراین اگر می خواهید تست های خودکار را روی یک سرور آزمایشی جداگانه اجرا کنید، تنظیمات دستی و یا ابزار GitHub Actions برای شما مناسب خواهد بود.
  • تست خودکار
اگر تست های خودکاری مانند Unit ،Feature ،Behavior یا Other type of tests را نوشتید، اکنون Database Seeders برای اجرا آزمایش های شما آماده است. به این صورت که در هر بار که کد Develop Branch را Commit می کنید، سرور آزمایشی آن را بررسی کرده و به شما اطلاع می دهد که آیا کد Safe است یا خیر؟
  • تست دستی
برای بررسی دستی ابتدا باید تست های خودکار اولیه را داشته باشید و PHP Artisan Test را تایپ کنید. سپس در قسمت Staging Server کدها را به صورت دستی وارد نمایید. تنها نکته ای که باید در نظر داشته باشید این است که پایگاه داده را به کمک Seeders و fake data (recommended) یا Some testing semi-real data (be REALLY careful about it) آماده این تست کنید. 

سخن آخر

شاید دور از انتظار باشد که بگویم این راهنما و مراحل موجود در این آموزش نه تنها می تواند در سریع ترین حالت، پروژه Laravel شما را در سرور آپلود کند، بلکه می تواند در فریم ورک و زبان های برنامه نویسی دیگر نیز مورد استفاده قرار بگیرد، اما در هر حالت تهیه نسخه پشتیبان از سرور خود را پیش از آپلود پروژه روی سرور فراموش نکنید. از همراهی شما در این بلاگ سپاس گزاریم.
چقدر این پست مفید بود؟ روی یک ستاره کلیک کنید تا به آن امتیاز دهید!
پست های پیشنهادی
php چیست
متوسط

php چیست و چه استفاده ای دارد: بررسی جامع

مفهوم کامل زبان php و مزیت های آن نسبت به سایر زبان ها!
تیم محتوا
1403/03/02
پیش نیازهای لازم برای طراحی سایت با لاراول
حرفه‌ای

پیش نیازهای لازم برای طراحی سایت با لاراول

بررسی آموزش پیش نیازهای لازم طراحی سایت با لاراول را به طور ...
تیم محتوا
1403/03/21
آموزش نصب npm در لاراول
حرفه‌ای

آموزش نصب npm در لاراول

دد
تیم محتوا
1403/03/23