Deploy ứng dụng Laravel sử dụng Gitlab CI và Fabric

Posted by Giap Nguyen on 2020-03-02

Giới thiệu

Chào các bạn! Bài viết này mình sẽ hướng dẫn các bạn phương pháp để deploy ứng dụng Laravel+VueJS lên server sử dụng GitlabCI và Fabric.

Deploy ứng dụng Laravel sử dụng Fabric

Fabric là một thư viện viết bằng Python để thực thi các câu lệnh trên server từ xa (remotely) thông qua kết nối ssh.

Cài đặt Fabric

Trước tiên cần cài đặt python3 + pip, sau đó có thể cài đặt fabric bằng pip:

1
$ pip install fabric

Tạo fabfile và deploy ứng dụng

Tạo file fabfile.py với nội dung như dưới đây.

1
2
3
4
5
6
7
8
9
10
11
12
from fabric2 import task, Connection
import os

HOST = 'YOUR_HOST_DOMAIN'
USER = 'root'
host = Connection(host=HOST, user=USER , port=22)
@task
def deploy(c):
with host.cd('/var/www/your_project'):
host.run('git checkout master')
host.run('git pull origin master')
host.run('php artisan migrate --seed --no-interaction')

Task deploy sẽ thực hiện các việc sau:

  • Pull code mới nhất từ branch master
  • Thực hiện migrate databse và seeding dữ liệu.

Để thực thi được task deploy trên server thì bạn cần cài đặt ssh để từ local có thể truy cập được vào HOST thông qua kết nối ssh.

1
ssh USER@HOST

Sau đó chạy lệnh fab2 deploy như vậy là task deploy đã được thực hiện trên server. Bạn có thể tham khảo thêm docs để hiểu rõ hơn cách viết deploy task nhé. https://www.fabfile.org/

Deploy thông qua Gitlab CI

Thêm file .gitlab-ci.yml với nội dung như dưới đây:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
image: circleci/python:3.7

before_script:
- sudo apt install python3-pip
- pip install fabric2
##
## Install ssh-agent if not already installed, it is required by Docker.
## (change apt-get to yum if you use an RPM-based image)
##
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'

##
## Run ssh-agent (inside the build environment)
##
- eval $(ssh-agent -s)

##
## Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
## We're using tr to fix line endings which makes ed25519 keys work
## without extra base64 encoding.
## https://gitlab.com/gitlab-examples/ssh-private-key/issues/1#note_48526556
##
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -

##
## Create the SSH directory and give it the right permissions
##
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh

job:
script:
- fab2 deploy
only:
- master
  • image: circleci/python:3.7 thay vì phải cài đặt python thì chúng ta có thể sử dụng một image đã cài đặt sẵn python:3.7. Sau đó cài đặt pip, fabric.
  • Cài đặt biến mối trường SSH_PRIVATE_KEY với value là private key bạn dùng để ssh đến server trong phần 1.
    https://docs.gitlab.com/ee/ci/variables/

Đến đây thì mọi thứ đã sẵn sàng để ứng dụng của bạn có thể được tự động deploy lên server mỗi khi bạn push code lên branch master.

Trên đây chỉ là một tut đơn giản giúp bạn cài đặt và sử dụng fabric để deploy ứng dụng Laravel lên server ở local và trên Gitlab CI. Bạn nên đọc thêm tài liệu để có thể customize task cho phù hợp với ứng dụng của bạn.