Setting up LAMP stack and deployment on a VPS Setting up LAMP stack and deployment on a VPS

Setting up LAMP stack and deployment on a VPS

User ထည့်ပြီးရင် LAMP stack သွင်းလို့ရပါပြီ

LAMP Stack Setup

LAMP = Linux + Apache + MySQL + PHP ဆိုတဲ့ stack ကို ထည့်ပါမယ်။ ဒီစာအုပ်မှာ Laravel project ကို နမူနာအနေနဲ့ deploy လုပ်ကြည့်ပါမယ်။ Linux Server က VPS မှာတခါတည်းပါလာပြီးသားဖြစ်တာကြောင့် သွင်းစရာမလိုတော့ပါဘူး။

Apache Installation

Apache2 server, documentation နဲ့ utility program တွေသွင်းပါမယ်

Terminal window
sudo apt install apache2 apache2-doc apache2-utils -y

Install လုပ်တာပြီးတာနဲ့ apache2 service အလုပ် လုပ်/မလုပ် စစ်ကြည့်ပါမယ်

Terminal window
systemctl status apache2

Active (running) ဆိုရင် apache2 သွင်းတာအဆင်ပြေပါပြီ။

Apache configuration ဆက်မလုပ်ခင် Ubuntu ရဲ့ Uncomplicated Firewall (UFW) ကို အရင် setup လုပ်ပါမယ်။ ufw Firewall အလုပ်လုပ်နေလား အရင်စစ်ကြည့်ရအောင်

Terminal window
sudo ufw status
Terminal window
Status: inactive

စစချင်းမှာ inactive လို့ပြနေပါလိမ့်မယ်။ ဒါကြောင့် Firewall setup လုပ်ပေးရပါမယ်။ လက်ရှိရနိုင်တဲ့ Firewall option တွေ ဘာတွေရှိလဲအရင်ခေါ်ကြည့်ပါမယ်

Terminal window
sudo ufw app list
Terminal window
- Apache
- Apache Full
- Apache Secure
- OpenSSH
  • Apache က Port 80 (HTTP) ကို ဖွင့်ထားပေးတာ
  • Apache Full က Port 80 (HTTP) နဲ့ port 443 (HTTPS) နှစ်ခုလုံးကို ဖွင့်ထားပေးတာ
  • Apache Secure က Port 443 (HTTPS) ကိုပဲဖွင့်ထားပေးတာ
  • OpenSSH က Port 22 (SSH) ကို ဖွင့်ထားပေးတာ

လောလောဆယ်တော့ SSL certificate မသွင်းရသေးတာကြောင့် “Apache” (HTTP port 80 only) ကိုပဲဖွင့်ထားလိုက်ပါမယ်။ Terminal ကနေ SSH နဲ့ဝင်တာကိုလည်း ခွင့်ပြုပေးအောင် OpenSSH ကိုလည်းဖွင့်ထားပါမယ်။

Terminal window
sudo ufw allow in "Apache"
sudo ufw allow in "OpenSSH"

ပြီးရင် Firewall ကို enable လုပ်ပါမယ်

Terminal window
sudo ufw enable

အလုပ် လုပ်/မလုပ် စစ်ကြည့်ပါမယ်

Terminal window
sudo ufw status

Apache နဲ့ OpenSSH run နေတာကိုတွေ့နိုင်ပါတယ်။ ဒီအဆင့်ထိပြီးသွားရင် server ip ကို browser ကနေ ဝင်ကြည့်လို့ရပါပြီ။ Browser မှာ http://server_ip ရိုက်ထည့်ပြီးဝင်ကြည့်ပါ။ Apache2 Ubuntu Default Page မြင်ရပါမယ်။

server_ip ကို VPS panel နဲ့ Welcome email မှာပြန်ရှာကြည့်လို့ရပါတယ်။ SSL certificate မသွင်းရသေးလို့ HTTPS နဲ့ ဝင်လို့မရသေးပါဘူး

Apache Default Page

MySQL Installation

Terminal window
sudo apt install mysql-server -y

MySQL server သွင်းပြီးရင် root user password သတ်မှတ်ပေးရပါမယ်။ ဒီမှာပေးရတဲ့ password ဟာ VPS password နဲ့မဆိုင်ဘဲ mysql root user အတွက်သီးသန့် password ဖြစ်ပါတယ်။

VPS password နဲ့ MySQL root password ကိုမတူအောင်ပေးသင့်ပါတယ်။

Terminal window
sudo mysql

ဝင်ပြီးရင် root user ကို password အသစ်ထည့်ပါမယ်။ password မှာ လုံခြုံမှုရှိတဲ့ password တစ်ခုနဲ့အစားထိုးပေးပါ

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
exit

ပြီးရင် mysql_secure_installation script ကို run ပါမယ်။

Terminal window
sudo mysql_secure_installation

mysql_secure_installation run လိုက်ရင် password တောင်းပါမယ်။ ဒီမှာထည့်ရတဲ့ password က VPS password ဖြစ်ပါတယ်။ mysql password မဟုတ်ပါဘူး။ script သွင်းလိုက်ရင် VALIDATE PASSWORD PLUGIN ကိုသုံးမလားမေးပါလိမ့်မယ်။

  • Level 0 = Low အနည်းဆုံး စာလုံး ၈ လုံး
  • Level 1 = Medium အနည်းဆုံး စာလုံး ၈ လုံး၊ ဂဏန်းတွေပါ၊ စာလုံးအကြီးအသေးရော၊ special character ပါရမယ်
  • Level 2 = Strong level 1 နဲ့တူတူပဲ၊ တခုပိုသွားတာက dictionary ထဲက word ဖြစ်လို့မရဘူး

အခုတော့ 1 ရိုက်ထည့်ပါမယ်။

လက်ရှိ password strength ကို 0 ကနေ 100 scale နဲ့ပြပေးပါမယ်။ Y နှိပ်ပြီးဆက်သွားပါ။

anonymous user remove လုပ်မလားမေးရင် y နှိပ်ပါ။

disable root login remotely မှာ y နှိပ်ပါ။

remove test database မှာ y နှိပ်ပါ။

reload privilege table မှာ y နှိပ်ပါ။

ဒါဆိုရင် MySQL server setup ပြီးပါပြီ။

PHP Installation

Terminal window
sudo apt install php libapache2-mod-php php-mysql -y

အသုံးများတဲ့ PHP extension တွေထပ်ထည့်ထားချင်ရင်

Terminal window
sudo apt install php-curl php-json php-cgi php-gd php-mbstring php-xml php-xmlrpc php-zip -y

php install လုပ်ပြီးပြီဆိုရင် အောက်ပါ command နဲ့ version စစ်ကြည့်လို့ရပါတယ်။

Terminal window
php -v

Apache Virtual Host Setup

Apache က default အနေနဲ့ /var/www/html directory ကို serve လုပ်ပေးပါတယ်။ ဥပမာ index.html ကို /var/www/html/index.html ဆိုပြီးထားလိုက်ရင် website စာမျက်နှာအနေနဲ့မြင်ရပါပြီ။ Website တစ်ခုထဲအတွက်ဆိုရင် အဆင်ပြေပေမယ့် website အများအပြားအတွက်ဆိုရင် virtual hosting ဆိုတဲ့ Apache ရဲ့ feature ကိုသုံးရပါမယ်။

ပထမဆုံး ကိုယ့် website folder ကိုလုပ်ပါမယ်။ yourdomain.com နေရာမှာ ကိုယ့် website domain ထည့်နိုင်ပါတယ်။ လောလောဆယ် domain name မရှိသေးဘူး၊ ဒါမှမဟုတ် DNS record မထည့်ရသေးဘူးဆိုရင်တောင်မှ ရည်ရွယ်ထားတဲ့ domain name အတိုင်း folder ဆောက်လို့ရပါတယ်။

Terminal window
sudo mkdir -p /var/www/yourdomain.com/public_html

တချို့က directory name မှာ period . ပါနေတာမကြိုက်ကြဘဲ /var/www/domaincom လို့ပေးတတ်ကြပါတယ်။ အလုပ်လုပ်ပုံချင်းအတူတူပဲမို့ ကိုယ့်အကြိုက်နဲ့ကိုယ် နာမည်ပေးလို့ရပါတယ်။

Log နဲ့ backups folder တွေလည်းလုပ်ထားပါမယ်။

Terminal window
sudo mkdir -p /var/www/yourdomain.com/log
sudo mkdir -p /var/www/yourdomain.com/backups

ပြီးရင် folder ownership ကို ပြောင်းပါမယ်။

Terminal window
sudo chown -R $USER:$USER /var/www/yourdomain.com

ဒါဆိုရင် ဒီ folder ထဲမှာ run တဲ့ command တွေကို sudo အမြဲထည့်ဖို့မလိုတော့ပါဘူး။ ဆက်ပြီး Apache ရဲ့ sites-available မှာ yourdomain.com.conf ဆိုတဲ့ file ကိုလုပ်ပါမယ်။

Terminal window
sudo nano /etc/apache2/sites-available/yourdomain.com.conf

အောက်ပါအတိုင်းထည့်ပါ။ yourdomain.com တွေမှာ ကိုယ့် domain name အစားထိုးပေးပါ။ လောလောဆယ် domain name နဲ့မချိတ်ရသေးလည်း ထည့်ထားလို့ရပါတယ်။

<VirtualHost *:80>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
DocumentRoot /var/www/yourdomain.com/public_html
ErrorLog /var/www/yourdomain.com/log/error.log
CustomLog /var/www/yourdomain.com/log/access.log combined
</VirtualHost>

အခုဖန်တီးလိုက်တဲ့ Virtual host ကို enable လုပ်ပါမယ်။

Terminal window
sudo a2ensite yourdomain.com.conf

မူလ default site ကိုပိတ်ပါမယ်။ Apache သွင်းပြီးပြီးချင်း browser မှာ server ipaddress ရိုက်ထည့်လိုက်ရင် တွေ့ရတဲ့ default စာမျက်နှာကို ပိတ်ဖို့ဖြစ်ပါတယ်။

Terminal window
sudo a2dissite 000-default.conf

ကျွန်တော်တို့ လက်ရှိလုပ်ပြီးသလောက် Apache config တွေမှာ error ရှိမရှိ test လုပ်ပါမယ်။

Terminal window
sudo apache2ctl configtest
Terminal window
Syntax OK

Error မရှိရင် apache ကို reload ပြန်လုပ်ပေးပါမယ်။

Terminal window
sudo systemctl reload apache2

ဒီအဆင့်ရောက်ပြီဆို html ရေးပြီးစမ်းကြည့်လို့ရပါပြီ။ document root မှာ HTML ဖိုင်တစ်ခုထည့်လိုက်ပါမယ်။

Terminal window
echo '<h1>Hello</h1>' > /var/www/yourdomain.com/public_html/index.html

Browser ကနေ server IP address ကိုဝင်ကြည့်ရင် Hello ဆိုတာကိုမြင်ရပါလိမ့်မယ်။ လောလောဆယ် SSL certificate မသွင်းရသေးလို့ HTTPS နဲ့ဖွင့်လို့ရမှာမဟုတ်သေးပါဘူး။


← Back to blog