본문 바로가기
개발 이야기/Python

Fabric 을 이용하여 쉽고 편한 배포하기

by _ppuing 2020. 12. 10.
반응형

파이썬 프로젝트를 배포할 때 우분투 서버에 직접 접속하여 git pull, 서비스 종료, 서비스 시작 등의 커맨드를 일일이 치는 것보다, 뭔가 스크립트 하나로 쉽게 배포하면 얼마나 좋을까를 고민할 때 쓸 수 있는 파이썬 패키지로 fabric이 있다.

fabric을 사용하면 서버에 ssh 접속을 하지 않아도, 스크립트가 알아서 ssh 접속을 한 뒤 미리 정의해둔 명령어들을 자동으로 입력해준다. 

 

from fabric.api import *

env.roledefs = {
    'dev': ['user@dev-example.com',],
    'release' : ['user@example.com',]
}

@roles('dev')
def dev():
    deploy("dev")

@roles('release')
def release():
    deploy("release")
    
def restart_uwsgi():
    with warn_only():
        sudo('service my_service stop')
        sudo('rm /tmp/tb*')
    sudo('service my_service start')

def deploy(mode="release"):
    with cd("/my-project/"):
        run("git pull -f git@my-example-git.git")
        run("sudo pip install -r requirements.txt")
        run("echo yes | python my-project/manage.py collectstatic -c")
        restart_uwsgi()


 

위 코드에서 roledefs는 배포할 환경(서버)을 정의하는 것이며, restart_uwsgi 함수는 uwsgi 서비스를 껐다 켜는 함수이다. deploy 함수는 fab dev / fab real 같은 명령어를 쳤을 때 환경에 맞게 서버에 ssh 접속을 한 후에 my-project 디렉토리에 찾아간 후에 git pull, pip install, collectstatic  등의 명령어를 자동으로 처리해주는 함수이다. 

이렇게 스크립트를 짠 후에 커맨드라인에 fab dev, fab real만 치면 서버에 직접 들어가지 않아도 편하게 배포할 수 있다.

반응형

댓글