Khi code xong dự án điều quan trọng nhất là deploy nó lên server cho người dùng sử dụng thực tế. Hôm nay tôi sẽ hướng dẫn các bạn deploy dự án sử dụng laravel nên server sử dụng hệ điều hành ubuntu nhé.
Đầu tiên cần ssh vào server để cài đặt, tham khảo bài viết cấu hình ssh config
// Kiểm tra thông tin os
cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.5 LTS (Bionic Beaver)"
Như vậy tôi đang config trên server ubuntu version 18.04, tuỳ từng hệ điều hành các command cài đặt có thể khác nhau, nhưng bước làm thì tương tự
// Thay đổi host name
sudo hostnamectl set-hostname dev-api-1
// Set time zone
sudo timedatectl set-timezone Asia/Tokyo
sudo apt-get -y install curl zip unzip wget telnet mysql-client-core-5.7
sudo apt update
sudo apt upgrade
sudo apt install nginx -y
// Kiểm tra trạng thái cài đặt
systemctl status nginx
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt install php7.3-fpm
sudo apt install php7.3-common php7.3-mysql php7.3-xml php7.3-xmlrpc php7.3-curl php7.3-gd php7.3-imagick php7.3-bcmath php7.3-cli php7.3-dev php7.3-imap php7.3-mbstring php7.3-opcache php7.3-soap php7.3-zip php7.3-intl -y
// Kiểm tra phiên bản php
php -v
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
// Kiểm tra phiên bản composer
composer -v
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
nvm --version
nvm install 14.15.4
nvm use 14.15.4
sudo npm install -g yarn
// Kiểm tra phiên bản node
node -v
// Kiểm tra phiên bản npm
npm -v
// Kiểm tra phiên bản yarn
yarn -v
sudo apt-get install git
// config ssh key
ssh-keygen
// Create folder code
sudo chown -R ubuntu:ubuntu /var/www
cd /var/www/html
// Clone code from git
git clone
cd /etc/nginx/sites-available
sudo vi demo.conf
##Content
server {
listen 80;
# Log files for Debugging
access_log /var/log/nginx/demo-access.log;
error_log /var/log/nginx/demo-error.log;
# Webroot Directory for Laravel project
root /var/www/html/demo/public;
index index.php;
# config max size upload
client_max_body_size 10M;
server_name demo.com;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# PHP-FPM Configuration Nginx
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
##End
sudo ln -s /etc/nginx/sites-available/demo.conf /etc/nginx/sites-enabled/
// Khởi động lại nginx
sudo systemctl restart nginx
// Test tinker
php artisan tinker
// Fix error don't run command php artisan tinker
sudo chown -R $USER:$(id -gn $USER) /home/ubuntu/.config
cd /var/www/html/demo
cp .env.example .env
php artisan key:generate
composer install
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
chmod -R 777 storage
php artisan config:clear
php artisan migrate
php artisan db:seed
yarn install
yarn run production
Làm đến đây là ứng dụng có thể chạy rồi nhé :D
// Install supervisor
sudo apt install supervisor
// Config supervisor
cd /etc/supervisor/conf.d/
sudo vi api-worker.conf
##Content
[program:api-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/demo/artisan queue:work --sleep=3 --tries=3 --timeout=3600
autostart=true
autorestart=true
user=ubuntu
numprocs=4
redirect_stderr=true
stdout_logfile=/var/www/html/demo/storage/logs/worker.log
##End
// Read config
sudo supervisorctl reread
// Load config
sudo supervisorctl update
// Sart supervisor
sudo supervisorctl start api-worker:*
// check supervisor
sudo supervisorctl status
// Install crontab
sudo apt install cron
sudo systemctl enable cron
// create crontab
crontab -e
##Content
* * * * * cd /var/www/html/demo && php artisan schedule:run >> /dev/null 2>&1
##End
// Kiểm tra crontab
crontab -l
// Install laravel echo
npm install -g laravel-echo-server
// Config env
BROADCAST_DRIVER=redis
APP_URL_SOCKET=
LARAVEL_ECHO_BROADCASTER=socket.io
LARAVEL_ECHO_SERVER_REDIS_HOST="${REDIS_HOST}"
LARAVEL_ECHO_SERVER_REDIS_PORT="${REDIS_PORT}"
LARAVEL_ECHO_SERVER_DEBUG=true
LARAVEL_ECHO_SERVER_PROTO=http
LARAVEL_ECHO_SERVER_PORT=6001
MIX_LARAVEL_ECHO_BROADCASTER="${LARAVEL_ECHO_BROADCASTER}"
MIX_LARAVEL_ECHO_SERVER_PORT="${LARAVEL_ECHO_SERVER_PORT}"
MIX_APP_URL_SOCKET="${APP_URL_SOCKET}"
// config supervisor for laravel echo
[program:demo-echo]
process_name=%(program_name)s_%(process_num)02d
directory=/var/www/html/demo
command=/home/ubuntu/.nvm/versions/node/v14.15.4/lib/node_modules/laravel-echo-server/bin/server.js start
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/html/demo/storage/logs/echo.log
Làm hết các bước trên là chúng ta đã cài đặt server thực tế thành công để chạy 1 ứng dụng laravel.
# Ssh to server jenkins
# Install jenkins
sudo apt update
sudo apt install openjdk-8-jdk
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \
/etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins
# SSH to jenkins server
# Switch current user to root
sudo su
# Switch root user to jenkins user
su jenkins
# Setup ssh từ server jenkins đến server api
ssh-keygen
# Upload file to server jenkins
scp key.pen <ssh-host>:<path_file>
# Copy key pem server api to server jenkins
cp key.pem ~/.ssh
# Chmod ssh key pem
chmod 600 ~/.ssh/key.pem
# Setup ssh config to api server
## content
Host demo-api-1
HostName 100.10.11.101
User ubuntu
Port 22
IdentityFile ~/.ssh/key.pem
## end content
# Setup project in jenkins
Tạo Item chọn option: Freestyle project
# Connect to bitbucket repo
# Execute shell để chạy deploy
ssh [host_name] << EOF
cd /var/www/html/demo
git pull origin develop
rm composer.log
composer install
php artisan config:clear
php artisan migrate
export PATH=/home/ubuntu/.nvm/versions/node/v14.15.4/bin:/usr/bin:/bin
yarn install
yarn run production
EOF