Setting up LAMP stack and deployment on a VPS
Laravel Deployment Setup
ပြီးခဲ့တဲ့အဆင့်တွေအတိုင်းလုပ်ပြီးပြီဆိုရင် PHP, MySQL သုံးတဲ့ ပရောဂျက်တွေ deploy လုပ်လို့ရပါပြီ။ Laravel project တွေအတွက်ဆိုရင်တော့ configure ဆက်လုပ်ရမှာလေးတွေရှိပါတယ်။
Laravel သုံးဖို့လိုအပ်တဲ့ PHP modules တွေ ထပ်ထည့်ပါမယ်။ အသုံးများတဲ့ PHP module တွေထည့်ထားပြီးသားဆိုရင် ထပ်ထည့်ဖို့မလိုတော့ပါဘူး။
sudo apt install php-bcmath php-xml php-fpm php-zip php-intl php-mbstring php-curl php-mysql php-cli unzip -yPHP ရဲ့ package manager ဖြစ်တဲ့ Composer သွင်းပါမယ်။
curl -sS https://getcomposer.org/installer | phpsudo mv composer.phar /usr/local/bin/composerGit Installation
Project repo ကို clone လုပ်ဖို့ Git လိုအပ်ပါတယ်။
sudo apt install git -yEnable Apache rewrite module
Apache server ရဲ့ rewrite module ကိုဖွင့်ပေးပါမယ်။ ပြီးရင် ဆားဗစ် restart လုပ်ပေးပါ
sudo a2enmod rewritesudo systemctl restart apache2Cloning your Laravel project
ဒီနမူနာမှာတော့ မိမိ Github က ရှိပြီးသား Laravel project တစ်ခုကို clone လုပ်တဲ့အပိုင်းကိုဖော်ပြသွားပါမယ်။
Document root ကိုသွားပြီး clone လုပ်ပါ။ yourusername နဲ့ your-repo.git မှာ မိမိ git username နဲ့ repo address အစားထိုးပေးပါ။
cd /var/www/yourdomain.comgit clone https://github.com/yourusername/your-repo.git public_htmlGit repo က public မဟုတ်ဘဲ private ဖြစ်နေမယ်ဆိုရင် HTTPS နဲ့ clone တဲ့အခါ email နဲ့ password တောင်းပါလိမ့်မယ်။ အဲဒီအခါ password မှာ github account ရဲ့ password မဟုတ်ဘဲ github account authentication token ကိုထည့်ပေးရမှာပါ
Git repo ကို SSH နဲ့ clone မယ်ဆိုရင်တော့ git operation တိုင်းမှာ login လုပ်ဖို့မလိုတော့ပါဘူး။ SSH နဲ့ clone လို့ရအောင် ကိုယ့်ကွန်ပြူတာမှာ SSH key pair generate လုပ်တုန်းကလိုပဲ VPS ပေါ်မှာ generate လုပ်လို့ရပါတယ်။ VPS ရဲ့ public key ကို github account settings ထဲက SSH and GPG keys မှာသွားထည့်လိုက်ရင် နောက်ပိုင်းအလုပ်မရှုပ်တော့ပါဘူး။
Environment setup
Laravel ပရောဂျက်ရဲ့ .gitignore ထဲကအတိုင်းပဲ Git repo မှာတင်ထားလိုက်ပြီဆိုရင် .env၊ node_modules နဲ့ vendor folder တွေမပါလာတော့ပါဘူး။ clone လုပ်ယူလိုက်တဲ့နေရာအသစ်မှာ ပြန် install လုပ်ယူရပါမယ်။
အရင်ဆုံး .env.example ကို .env အဖြစ် ကော်ပီယူပါမယ်။
cd /var/www/yourdomain.com/public_htmlcp .env.example .envပြီးရင် .env file ကိုဖွင့်ပြီး database settings တွေပြင်ဆင်ပါမယ်။
nano .envအဓိကပြောင်းရမှာတွေက အောက်ပါအတိုင်းဖြစ်ပါတယ်။ ကိုယ့်ဆာဗာရဲ့တန်ဖိုးတွေနဲ့ပြန်အစားထိုးပေးပါ။ လောလောဆယ် MySQL မှာ Laravel project အတွက်သီးသန့် database နဲ့ user မလုပ်ပေးရသေးပေမယ့် database နာမည်အသစ်နဲ့ user, password အသစ်တစ်ခုစီအရင်ထည့်ပေးထားပါ။ ခဏနေရင် mysql cli မှာဆက်လုပ်ပါမယ်။
APP_NAME="Your App Name"APP_ENV=productionAPP_DEBUG=falseAPP_URL=https://yourdomain.com
DB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=yourdatabaseDB_USERNAME=dbusernameDB_PASSWORD=dbpasswordCreating a database and user for Laravel project
Laravel project သုံးဖို့ database တစ်ခုတည်ဆောက်ပေးပါမယ်။ အဲဒီ database အတွက်လည်း db user တစ်ယောက်ထပ်လုပ်ပေးပါမယ်။ mysql root db user ရှိပြီးသားဆိုပေမယ့် best practice တွေအရ နေရာတိုင်းမှာ root user မသုံးဘဲ database တစ်လုံးကို user တစ်ယောက်စီထားတာ ပိုကောင်းပါတယ်။
အရင်ဆုံး MySQL login ဝင်ပါမယ်။
sudo mysql -u root -ppassword တောင်းရင် myql root user password ထည့်ပေးပါ။ VPS root user password မဟုတ်ပါဘူး။
ပြီးရင် database နဲ့ user တွေလုပ်ပါမယ်။ yourdatabase, dbusername, dbpassword တွေမှာ တန်ဖိုးအသစ်တွေထည့်ပေးပါ။
CREATE DATABASE yourdatabase;CREATE USER 'dbusername'@'localhost' IDENTIFIED BY 'dbpassword';GRANT ALL PRIVILEGES ON yourdatabase.* TO 'dbusername'@'localhost';FLUSH PRIVILEGES;EXIT;Installing composer dependencies
cd /var/www/yourdomain.com/public_htmlcomposer install --no-dev --optimize-autoloaderGenerate App key
php artisan key:generatePrapare Laravel storage
php artisan storage:linkDatabase Migration
php artisan migrateLaravel Permissions
Laravel project ရဲ့ asset file ၊ cache file တွေကို apache server ကခေါ်သုံးခွင့်ရှိအောင် permission ဖွင့်ပေးရပါမယ်။
sudo chown -R www-data:www-data /var/www/yourdomain.com/public_html/storagesudo chown -R www-data:www-data /var/www/yourdomain.com/public_html/bootstrap/cachesudo chmod -R 775 /var/www/yourdomain.com/public_html/storagesudo chmod -R 775 /var/www/yourdomain.com/public_html/bootstrap/cacheConfigure Apache to serve public folder
လောလောဆယ်မှာ project folder တစ်ခုလုံးကို public_html နာမည်နဲ့ clone ထားတာဖြစ်ပါတယ်။ ဒါပေမယ့် browser မှာဖွင့်လိုက်မယ်ဆိုရင် public folder ထဲက ဖိုင်တွေကိုပဲ serve လုပ်ပေးချင်တာဖြစ်ပါတယ်။ ဒါကြောင့် apache configuration မှာ project ထဲက public folder ကို serve လုပ်ပေးဖို့ညွှန်ပြပေးရပါမယ်။
sudo nano /etc/apache2/sites-available/yourdomain.com.confပြီးရင် public ဖိုလ်ဒါကို point လုပ်အောင် ပြင်ဆင်ပါမယ်။
<VirtualHost *:80> ServerName yourdomain.com ServerAlias www.yourdomain.com DocumentRoot /var/www/yourdomain.com/public_html/public
<Directory /var/www/yourdomain.com/public_html/public> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
ErrorLog /var/www/yourdomain.com/log/error.log CustomLog /var/www/yourdomain.com/log/access.log combined</VirtualHost>ပြီးရင် Apache ကို reload လုပ်ပါမယ်။
sudo systemctl reload apache2Laravel Caching
Optimization အတွက် caching လုပ်ပါမယ်။
php artisan config:cachephp artisan route:cachephp artisan view:cacheSet server timezone
နောက်ပိုင်းမှာ cron job တွေ run ဖို့ရှိတာ၊ time-sensitive ဖြစ်တဲ့စာမျက်နှာတွေထည့်ချင်တာမျိုးမှာ ဆာဗာနာရီကို မိမိ target user အများစုသုံးတဲ့ timezone အတိုင်းချိန်ညှိပေးဖို့လိုပါတယ်။
sudo timedatectl set-timezone Asia/Yangon← Back to blog