Docker와 Ansible을 활용한 날씨 알림 서비스 실행과 배포
Python으로 개발한 날씨 알림 서비스를 실행하고 배포하는 과정에서 Docker와 Ansible을 활용하여 효율성을 극대화했습니다. 이 글에서는 프로젝트 실행을 위한 Docker 환경 구성과 Ansible을 통한 서버 배포 과정, 그리고 실제 테스트 결과에 대해 정리하겠습니다.
Docker를 활용한 서비스 실행
프로젝트 구조를 보면 Dockerfile, docker-compose.yml 파일이 포함되어 있어 Docker를 사용한 흔적을 확인할 수 있습니다. 프로젝트의 실행과 관리를 쉽게 하기 위해 Docker를 선택했습니다. 특히 Synology NAS를 사용 중인데, 해당 NAS에서도 Docker를 지원하기 때문에 내 프로젝트와의 호환성이 높아 자연스럽게 도입하게 되었습니다.
Docker Compose를 활용한 프로젝트 실행
Docker Compose를 사용하여 번거로운 명령어 입력 없이 항상 동일한 방식으로 프로젝트를 실행할 수 있도록 구성했습니다. Python3 기반으로 작성된 코드와 의존성을 설정한 requirements.txt를 Docker 이미지에 포함하여 어디서든 쉽게 실행 가능한 환경을 만들었습니다.
프로젝트 실행 방법은 간단합니다. 다음 명령어 하나로 모든 설정과 컨테이너 실행이 완료됩니다:
docker-compose.yml
version: "3.8"
services:
weather-alert:
build:
context: . # Dockerfile이 있는 현재 디렉토리를 빌드
dockerfile: Dockerfile
volumes:
- ./logs:/app/logs # 로그를 외부로 마운트 (선택사항)
- ./data:/app/data # 데이터 폴더 마운트 (필요 시)
ports:
- "5000:5000" # Flask 또는 애플리케이션 포트를 매핑
environment:
- TZ=Asia/Seoul # 시간대 설정
restart: always # 컨테이너가 종료되면 자동 재시작
docker-compose up -d
이 명령어를 사용하면 프로젝트가 컨테이너 환경에서 실행되고, Python3 기반의 스크립트가 정상적으로 작동합니다. 테스트 결과, Docker Compose를 통해 효율적으로 실행과 관리가 가능하다는 것을 확인했습니다.
Ansible을 활용한 서버 배포
NAS 서버에 배포하기 위해 Ansible을 선택했습니다. Ansible은 널리 사용되는 자동화 도구로, 레드햇에 인수된 이후로 꾸준히 업데이트가 이루어지고 있어 안정적이고 정보를 찾기 쉬웠습니다.
배포 과정
Ansible을 통해 다음과 같은 작업을 수행했습니다:
- 필요 파일 복사: 프로젝트 구조에서 필요한 파일들(docker-compose.yml, Dockerfile, tokens.json, 등)을 나스 서버로 복사.
- Docker Compose 실행: 복사된 파일을 사용하여 서버에서 컨테이너 실행.
특히, Ansible의 playbook을 작성하여 배포 프로세스를 자동화했습니다. 아래는 간단한 예시입니다:
- name: Deploy weather service to NAS
hosts: nas_server
tasks:
- name: Copy project files
copy:
src: /path/to/project/
dest: /path/to/destination/
- name: Run docker-compose
command: docker-compose up -d
args:
chdir: /path/to/destination/
rsync 오류 해결 과정
배포 과정에서 rsync 명령어를 사용하려 했으나 다음과 같은 오류가 발생했습니다:
ansible error in rsync protocol data stream (code 12)
이 문제로 인해 rsync를 사용하지 못하고, 대신 Ansible의 copy 모듈을 사용하여 필요한 파일들을 수동으로 복사했습니다. 비록 시간이 더 걸렸지만, 문제를 해결하기 위한 최선의 방법이었습니다.
- name: Deploy application to NAS
hosts: localhost
gather_facts: no
tasks:
- name: Find files excluding specific patterns on local machine
ansible.builtin.find:
paths: "{{ playbook_dir }}/.."
# recurse: yes
excludes:
- ".*"
- "venv"
- "playbook"
- name: Ensure environment and copy files to NAS
hosts: nas
become: true
tasks:
- name: Copy project files to NAS
ansible.builtin.copy:
src: "{{ item.path }}"
dest: /volume2/docker/sendWeather
remote_src: no
loop: "{{ hostvars['localhost']['global_found_files'] }}"
테스트 결과
배포 후 Docker Compose를 사용하여 프로젝트를 실행한 결과, 정상적으로 카카오톡 알림이 발생하는 것을 확인했습니다. Python3 기반으로 작성된 날씨 알림 스크립트는 안정적으로 작동했으며, 사용자에게 날씨 정보를 전달하는 데 성공했습니다.
결론 및 향후 계획
- Docker Compose를 사용함으로써 프로젝트 실행이 단순화되고 반복적인 작업이 줄어들었습니다.
- Ansible을 활용하여 파일 복사와 배포 과정을 자동화했지만, rsync 문제를 해결하지 못한 점은 아쉬움으로 남았습니다. 향후 이 문제를 해결하기 위해 더 깊이 조사할 계획입니다.
- 향후 Docker Compose와 Ansible을 활용하여 더욱 확장 가능한 배포 프로세스를 만들 예정입니다.
Python3, Docker Compose와 같은 도구를 적극 활용하여 안정적이고 효율적인 서비스를 개발하고 배포할 수 있었습니다.
이를 통해 날씨 알림 서비스는 한층 더 개선된 사용자 경험을 제공하게 되었습니다.
'개인 플젝 뚜따 > 날씨 알림이 서비스' 카테고리의 다른 글
파이썬 스케쥴링: 외부 도구 크론탭 vs. 파이썬 내부 스케줄링 (1) | 2025.01.03 |
---|---|
날씨 알림 서비스 프로젝트 소개 1탄 - python3 , openai ai 활용기 (2) | 2025.01.01 |