개발 이야기/Python
Fabric 을 이용하여 쉽고 편한 배포하기
_ppuing
2020. 12. 10. 23:18
반응형
파이썬 프로젝트를 배포할 때 우분투 서버에 직접 접속하여 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만 치면 서버에 직접 들어가지 않아도 편하게 배포할 수 있다.
반응형