본문 바로가기
서버구축 (WEB,DB)

서버 설정 및 배포 작업을 자동화하는 파이썬 라이브러리 pyinfra

by 날으는물고기 2024. 6. 16.

서버 설정 및 배포 작업을 자동화하는 파이썬 라이브러리 pyinfra

How to Deploy Python App on a Remote Server with Pyinfra by Senhaji Rhazi hamza - Python in Plain English

pyinfra는 서버 설정 및 배포 작업을 자동화하는 파이썬 라이브러리입니다. 다수의 서버에 접속하여 명령을 실행하거나 설정을 변경하기 위해 pyinfra를 사용하려면 다음과 같은 단계를 따르면 됩니다.

  1. pyinfra 설치
    파이썬의 패키지 관리자인 pip를 사용하여 설치할 수 있습니다.
    pip install pyinfra
  2. 인벤토리 파일 생성
    pyinfra는 인벤토리 파일을 통해 대상 서버를 정의합니다. 인벤토리 파일은 각 서버의 IP 주소나 호스트명을 포함할 수 있습니다. 예를 들어, inventory.py 파일에 다음과 같이 작성할 수 있습니다.
    web_servers = ['192.168.1.1', '192.168.1.2']
    db_servers = ['192.168.1.3']
  3. 작업 스크립트 작성
    배포하거나 실행할 작업을 정의하는 스크립트를 작성합니다. 이 스크립트는 pyinfra의 API를 사용하여 작성되며, 예를 들어 서버에 파일을 업로드하거나 패키지를 설치하는 작업을 포함할 수 있습니다. 예를 들어, deploy.py 파일을 생성하고 다음과 같이 작성할 수 있습니다.
    from pyinfra.operations import server, apt
    
    server.shell(
        name="Update package list",
        commands='sudo apt-get update'
    )
    
    apt.packages(
        name="Install Vim",
        packages=['vim'],
        update=True,
        cache_time=3600
    )
  4. pyinfra 실행
    인벤토리 파일과 작업 스크립트를 사용하여 pyinfra를 실행합니다. 다음과 같은 명령어를 사용할 수 있습니다:여기서 @local은 로컬 환경에서 실행하라는 의미이며, 원격 서버 그룹을 대상으로 하려면 인벤토리 파일에서 정의한 그룹명을 사용하면 됩니다.
    pyinfra @inventory.py web_servers deploy.py
    pyinfra @local deploy.py

이 단계를 통해 pyinfra를 사용하여 여러 서버에 접속하고 원하는 작업을 자동화할 수 있습니다. 추가적인 설정이나 보다 복잡한 배포 시나리오에 대해서는 pyinfra의 공식 문서를 참고하는 것이 좋습니다.

 

pyinfra를 사용할 때, 접속 대상 계정이나 SSH 키를 서버마다 다르게 지정하고 싶다면 인벤토리 파일에서 이를 설정할 수 있습니다. 여기에는 여러 가지 방법이 있습니다.

1. 인벤토리 파일에서 계정 및 SSH 키 지정

인벤토리 파일에 각 서버에 대한 사용자 이름과 SSH 키를 지정할 수 있습니다. 예를 들어, 다음과 같이 서버마다 다른 사용자 이름과 SSH 키를 설정할 수 있습니다.

from pyinfra.api import Inventory

# 서버별로 다른 사용자 및 키를 사용하는 예
inventory = Inventory(
    hosts={
        'server1.domain.com': {'ssh_user': 'user1', 'ssh_key': '/path/to/user1_key'},
        'server2.domain.com': {'ssh_user': 'user2', 'ssh_key': '/path/to/user2_key'},
    },
)

이렇게 설정하면 pyinfra가 해당 서버에 접속할 때 지정된 사용자 이름과 SSH 키를 사용하여 접속합니다.

2. 그룹별로 계정 및 SSH 키 설정

서버를 그룹별로 분류하고, 각 그룹별로 다른 계정이나 SSH 키를 지정할 수도 있습니다.

from pyinfra.api import Inventory

# 그룹별 설정 예
web_servers = {
    'web1.domain.com': {'ssh_user': 'webuser', 'ssh_key': '/path/to/webuser_key'},
    'web2.domain.com': {'ssh_user': 'webuser', 'ssh_key': '/path/to/webuser_key'},
}

db_servers = {
    'db1.domain.com': {'ssh_user': 'dbuser', 'ssh_key': '/path/to/dbuser_key'},
}

inventory = Inventory(
    groups={
        'web_servers': web_servers,
        'db_servers': db_servers,
    },
)

3. 실행 시 인자로 계정 및 키 지정

커맨드라인 인자로 특정 사용자 이름과 SSH 키를 지정할 수 있습니다.

pyinfra @inventory.py deploy.py --user anotheruser --key /path/to/another_key

이 명령은 모든 서버에 대해 anotheruser 사용자와 /path/to/another_key 키를 사용하여 접속하려고 시도합니다.

 

이처럼 pyinfra를 사용하면 각 서버 또는 서버 그룹별로 다른 사용자 이름과 SSH 키를 설정하여 유연하게 접속 설정을 관리할 수 있습니다. 구체적인 설정 방법은 배포 요구사항과 환경에 따라 다를 수 있으므로, 자신의 필요에 맞게 조정하는 것이 중요합니다.

728x90

댓글