Hướng dẫn deploy dự án laravel lên server

  • March 20, 2021
  • 3711

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é.

Các bước deploy

1. Ssh vào server

Đầ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

2. Kiểm tra thông tin server


// 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

3. Cài đặt các package hay dùng


sudo apt-get -y install curl zip unzip wget telnet mysql-client-core-5.7

4. Cài đặt nginx


sudo apt update
sudo apt upgrade
sudo apt install nginx -y
// Kiểm tra trạng thái cài đặt
systemctl status nginx

5. Cài đặt php


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

6. Cài đặt compoer


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

7. Cài đặt nvm, node, yarn


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

8. Cài đặt git


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 

9. Config nginx


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

10. Setup laravel


// 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

11. Config supervisor


// 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

12. Config schedule


// 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

13. Cài đặt laravel echo


// 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.

Auto deploy với jenkins

Cài đặt jenkins


# 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

Setup 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