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


اکنون پس از وارد کردن کد، باید مخزن Github به شکل زیر باشد:

سرور شما باید به مخزن دسترسی کامل داشته باشد، پس در صورتی که سرور Public نیست لازم است تا نام کاربری و رمز دسترسی شخصی Github را در هر بار وارد کنید. اکنون بعد از Cloning باید فایل هایی که در سرور دانلود شده است را مشاهده نمایید.

نکته مهم! باید اطمینان حاصل کنید که پیکربندی وب سرور به فایل Public اشاره کند.
در ادمه می توانید از دستور زیر برای پیکربندی Nginx کمک بگیرید:
اگر مقادیر برای سرور شما متفاوت نمایش داده شد یا از دستور زیر فایل مثال را به عنوان فایل env اصلی با این دستور کپی کنید و یا مرحله بعدی را انجام دهید:
در این مرحله نیز می توانید فایل .env جدید را با ویرایشگر لینوکس Vim ویرایش کنید:
متغیرهای زیادی برای ویرایش وجود دارد، اما چهار نمونه از اصلی ترین آن ها عبارت اند از:
حال App URL و اعتبار پایگاه داده خود را بررسی کنید.

کلید Application را با دستور زیر اجرا کنید و در نظر داشته باشید که این کلید تصادفی به شکل خودکار به متغیر APP_KEY فایل .env اضافه خواهد شد:
اگر می خواهید سریع تر به جواب برسید می توانید از دستور زیر به جای مراحل طولانی استفاده کنید:

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

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


اما به خاطر داشته باشید که باید حداقل دو Branche مانند Main/Master و Develop در مخزن موجود باشد که تنها یکی از آن ها LIVE است و کدها را از Git pull origin main main استخراج می کند. در این حالیت دیگر هیچ توسعه دهنده ای اجازه دسترسی به Branch اصلی را نخواهد داشت. همچنین اگر تمایل به انتشار برخی از عملکردها به نسخه Live را دارید، باید این کار را با Develop Branch تست شده انجام دهید و در مخزن Pull Request را در نظر بگیرید تا به main تبدیل شود.
به خاطر داشته باشید که نباید APP_ENV را به عنوان Local رها کنید و لازم است تا متفاوت باشد ولی نه از نوع production. در APP_DEBUG=true تمام خطاها همراه با ردیابی کامل را نمایش خواهد داد، اما نباید فراموش کرد که از طرف دیگر باید APP_DEBUG=false در سرور Live اجرا شود:
با دستور زیر می توانید یک دیتابیس جدا برای Staging Server داشته باشید:
به عنوان مرحله پایانی اگر سرویسی مانند Stripe دارید، Sandbox/Testing آن را در فایل env قرار دهید.

مراحل آپلود پروژه لاراول روی سرور به صورت گام به گام
برای سهولت نحوه اجرا دستورات و مراحل موجود در این راهنما تیترهای زیر را با صبر و شکیبایی دنبال کنید تا به راحتی پروژه لاراول شما بر روی سرور آپلود شود:1- آماده سازی سرور
آماده سازی سرور ابتدایی ترین اقدامی است که باید در این مراحل بررسی شود. بنابراین در این راستا شما به صورت خلاصه باید فاکتورهای زیر را بررسی کنید:- سرور اختصاصی خود را از یک میزبانی معتبر تهیه کنید.
- LAMP را نصب کنید. بسیاری از توسعه دهندگان از Digital Ocean و چند کلیک ساده برای این کار استفاده می کنند.

- می توانید بدون نیاز به خرید لینوکس از 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;}}- اکنون می توانید دامنه را بر روی سرور خود قرار دهید.
2- راه اندازی اولیه
اکنون سرور شما اماده دریافت مراحل راه اندازی اولیه می باشد، بنابراین باید دو قسمت زیر را با دقت اجرا کنید:- کد را در مخزن قرار دهید.
git initgit add README.mdgit commit -m "first commit"git branch -M maingit remote add origin https://github.com/LaravelDaily/Deployment-Demo.gitgit push -u origin mainاکنون پس از وارد کردن کد، باید مخزن Github به شکل زیر باشد:

- مخزن را به سرور شبیه سازی کنید.
git clone https://github.com/LaravelDaily/Deployment-Demo.سرور شما باید به مخزن دسترسی کامل داشته باشد، پس در صورتی که سرور Public نیست لازم است تا نام کاربری و رمز دسترسی شخصی Github را در هر بار وارد کنید. اکنون بعد از Cloning باید فایل هایی که در سرور دانلود شده است را مشاهده نمایید.

نکته مهم! باید اطمینان حاصل کنید که پیکربندی وب سرور به فایل Public اشاره کند.
در ادمه می توانید از دستور زیر برای پیکربندی Nginx کمک بگیرید:
server {...server_name deploymentdemo.laraveldaily.com;root /home/forge/deploymentdemo.laraveldaily.com/public;...- فایل env را تنظیم کنید.
APP_NAME=LaravelAPP_ENV=localAPP_KEY=APP_DEBUG=trueAPP_URL=http://localhostLOG_CHANNEL=stackLOG_DEPRECATIONS_CHANNEL=nullLOG_LEVEL=debugDB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=laravelDB_USERNAME=rootDB_PASSWORD=BROADCAST_DRIVER=logCACHE_DRIVER=fileFILESYSTEM_DISK=localQUEUE_CONNECTION=syncSESSION_DRIVER=fileSESSION_LIFETIME=120MEMCACHED_HOST=127.0.0.1REDIS_HOST=127.0.0.1REDIS_PASSWORD=nullREDIS_PORT=6379MAIL_MAILER=smtpMAIL_HOST=mailhogMAIL_PORT=1025MAIL_USERNAME=nullMAIL_PASSWORD=nullMAIL_ENCRYPTION=nullMAIL_FROM_ADDRESS="[email protected]"MAIL_FROM_NAME="${APP_NAME}"AWS_ACCESS_KEY_ID=AWS_SECRET_ACCESS_KEY=AWS_DEFAULT_REGION=us-east-1AWS_BUCKET=AWS_USE_PATH_STYLE_ENDPOINT=falsePUSHER_APP_ID=PUSHER_APP_KEY=PUSHER_APP_SECRET=PUSHER_HOST=PUSHER_PORT=443PUSHER_SCHEME=httpsPUSHER_APP_CLUSTER=mt1VITE_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 .envAPP_URL=http://localhostDB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=laravelDB_USERNAME=rootDB_PASSWORD=حال App URL و اعتبار پایگاه داده خود را بررسی کنید.
- Composer را نصب کنید.

کلید Application را با دستور زیر اجرا کنید و در نظر داشته باشید که این کلید تصادفی به شکل خودکار به متغیر APP_KEY فایل .env اضافه خواهد شد:
php artisan key: generate- تنظیمات DB Schema را انجام دهید.
php artisan migrate- Seeding data را اجرا کنید.
php artisan db:seedاگر می خواهید سریع تر به جواب برسید می توانید از دستور زیر به جای مراحل طولانی استفاده کنید:
php artisan migrate --seed- راه اندازی نهایی را انجام دهید.

3- نحوه اعمال تغییرات
پس از اینکه دو مرحله بالا را به نحوه احسن سپری کردید می توان گفت اولین نسخه از پروژه مستقر شده است. پس باید مراحل زیر باید در نظر گرفت:- Artisan down
php artisan downدر حالتی که آن را روی سرور راهاندازی کرده باشید، کل وبسایت از دسترس خارج میشود و باید اقدامات امنیتی مخصوصی را انجام دهید تا در معرض تغییر داده های دیتابیس در حالت زنده نباشید. اما اکنون این صفحه در لاراول 9 برای بازدیدکنندگان نمایش داده خواهد شد:

جهت راه اندازی محدد وب سایت و اقداماتی که انجام شده است، دستور زیر را وارد کنید:
php artisan up- Git pull
git pull- Composer
- DB Migrations
php artisan migrate- Restart FPM (اختیاری)
sudo service php8.1-fpm restart- Clearing cache (اختیاری)
php artisan cache: clear- راه اندازی مجدد
php artisan upهمچنین می توانید یک جمع بندی با دستور زیر داشته باشید:
cd /home/forge/deploymentdemo.laraveldaily.comphp artisan downgit pull origin maincomposer installphp artisan migratephp artisan cache: clearphp artisan queue: restartphp artisan up4- انتقال در Zero downtime
یک پوشه جدید در سرور ایجاد کرده و جدیدترین نسخه کد را از مخزن Clone کنید. اکنون دو پوشه دارید، فقط باید لینوکس را به یک Symbolic Link متصل کنید، زیرا این مرحله تجربه زمان خرابی مطلقاً صفر را به بازدیدکنندگان وب سایت شما به دنبال خواهد داشت. از بهترین ابزارهایی که می توانید برای این کار در نظر بگیرید استفاده از Laravel Envoyer است.
5- بررسی ویژگی های Team work ،Server stage و branch
اگر یک قدم جلوتر برویم می توانیم ویژگی های کار تیمی در زمان اعمال تغییرات را بررسی کنیم که در تصویر زیر نمونه ای از این SourceTree با کمک Git آورده ایم:
اما به خاطر داشته باشید که باید حداقل دو Branche مانند Main/Master و Develop در مخزن موجود باشد که تنها یکی از آن ها LIVE است و کدها را از Git pull origin main main استخراج می کند. در این حالیت دیگر هیچ توسعه دهنده ای اجازه دسترسی به Branch اصلی را نخواهد داشت. همچنین اگر تمایل به انتشار برخی از عملکردها به نسخه Live را دارید، باید این کار را با Develop Branch تست شده انجام دهید و در مخزن Pull Request را در نظر بگیرید تا به main تبدیل شود.
- ایجاد فایل env در Staging Server
APP_ENV=stagingAPP_DEBUG=trueAPP_URL=http://test-something.yourdomain.comبه خاطر داشته باشید که نباید APP_ENV را به عنوان Local رها کنید و لازم است تا متفاوت باشد ولی نه از نوع production. در APP_DEBUG=true تمام خطاها همراه با ردیابی کامل را نمایش خواهد داد، اما نباید فراموش کرد که از طرف دیگر باید APP_DEBUG=false در سرور Live اجرا شود:
DB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=database_nameDB_USERNAME=userDB_PASSWORD=passwordبا دستور زیر می توانید یک دیتابیس جدا برای Staging Server داشته باشید:
STRIPE_API_KEY=sk_test_N9voB......PUB_STRIPE_API_KEY=pk_test_pIaGo.....به عنوان مرحله پایانی اگر سرویسی مانند Stripe دارید، Sandbox/Testing آن را در فایل env قرار دهید.
6- تست (اختیاری)
این مرحله اختیاری است اما توصیه می کنیم برای اطمینان بیشتر آن را انجام دهید، بنابراین اگر می خواهید تست های خودکار را روی یک سرور آزمایشی جداگانه اجرا کنید، تنظیمات دستی و یا ابزار GitHub Actions برای شما مناسب خواهد بود.- تست خودکار
- تست دستی