이번 블로그 포스트에서는 Python의 Fabric 라이브러리를 사용하여 서버 그룹을 관리하는 방법에 대해 알아보겠습니다. Fabric은 SSH를 통해 리모트 서버를 관리할 수 있는 도구로, 서버 구성 변경, 배포 작업 등을 자동화할 수 있습니다.
Fabric 설치하기
먼저 Fabric을 설치해야 합니다. 다음 명령어를 사용하여 Fabric을 설치합니다:
pip install fabric
서버 그룹 정의하기
Fabric을 사용하여 서버 그룹을 관리하기 위해서는 먼저 서버 그룹을 정의해야 합니다. Fabric은 fabfile.py
라는 파일을 사용하여 작업을 정의하고 실행합니다. fabfile.py
파일을 생성하고 다음과 같이 서버 그룹을 정의합니다:
from fabric import Connection, task
servers = {
'web': ['web1.example.com', 'web2.example.com'],
'db': ['db1.example.com', 'db2.example.com']
}
@task
def uptime(ctx, group):
for host in servers[group]:
conn = Connection(host)
with conn:
result = conn.run('uptime')
print(f"{host}: {result.stdout.strip()}")
위 코드에서 servers
변수에는 서버 그룹의 이름과 해당 그룹에 속하는 서버 목록을 딕셔너리 형태로 정의합니다. uptime
task는 특정 그룹에 속하는 모든 서버의 uptime을 출력하는 역할을 합니다.
서버 그룹 실행하기
이제 Fabric을 사용하여 서버 그룹을 실행해보겠습니다. 터미널에서 다음 명령어를 실행합니다:
fab -H username@host uptime:group=web
username
: SSH 연결에 사용할 사용자 이름host
: SSH 연결할 서버 호스트 주소group
: 실행할 서버 그룹 이름 (web
또는db
)
위 명령어를 실행하면 web
그룹에 속하는 서버의 uptime이 출력됩니다.
추가 작업 정의하기
Fabric을 사용하여 다양한 작업을 자동화할 수 있습니다. 예를 들어, 서버에 소스 코드를 배포하는 작업을 추가해보겠습니다. fabfile.py
파일에 다음 코드를 추가합니다:
@task
def deploy(ctx, group):
for host in servers[group]:
conn = Connection(host)
with conn:
conn.run('git pull')
conn.run('restart_application')
위 코드에서 deploy
task는 특정 그룹에 속하는 모든 서버에 대해 git pull
명령어와 restart_application
명령어를 실행합니다.
이제 터미널에서 다음 명령어를 실행하여 배포 작업을 실행해보세요:
fab -H username@host deploy:group=web
결론
Fabric을 사용하면 Python 스크립트를 통해 SSH를 통해 리모트 서버를 관리할 수 있습니다. 서버 그룹 정의, 작업 실행 등 다양한 작업을 자동화하여 서버 관리를 효율적으로 할 수 있습니다.
관련 참고 문서:
- Fabric 공식 문서: https://docs.fabfile.org/
다음 포스트에서는 Fabric을 사용하여 실제로 서버 관리 작업을 자동화하는 예제에 대해 알아보겠습니다.