# Asset Pilot - Docker 설치 가이드 ## 🐳 Docker 방식의 장점 - ✅ 독립된 컨테이너로 깔끔한 환경 관리 - ✅ PostgreSQL과 애플리케이션 분리 - ✅ 한 번의 명령으로 전체 시스템 실행 - ✅ 쉬운 백업 및 복구 - ✅ 포트 충돌 없음 - ✅ 업데이트 및 롤백 간편 --- ## 📋 사전 준비 ### 1. Docker 설치 #### Orange Pi (Ubuntu/Debian) ```bash # Docker 설치 스크립트 curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # 현재 사용자를 docker 그룹에 추가 sudo usermod -aG docker $USER # 로그아웃 후 재로그인 또는 newgrp docker # Docker 서비스 시작 sudo systemctl start docker sudo systemctl enable docker ``` #### Docker Compose 설치 (이미 포함되어 있을 수 있음) ```bash # Docker Compose 버전 확인 docker compose version # 없다면 설치 sudo apt-get update sudo apt-get install docker-compose-plugin ``` ### 2. 설치 확인 ```bash docker --version docker compose version ``` --- ## 🚀 설치 및 실행 ### 1단계: 파일 업로드 Orange Pi에 `asset_pilot_docker.tar.gz` 파일을 전송: ```bash # Windows에서 (PowerShell) scp asset_pilot_docker.tar.gz orangepi@192.168.1.100:~/ # Linux/Mac에서 scp asset_pilot_docker.tar.gz orangepi@192.168.1.100:~/ ``` ### 2단계: 압축 해제 ```bash # SSH 접속 ssh orangepi@192.168.1.100 # 압축 해제 tar -xzf asset_pilot_docker.tar.gz cd asset_pilot_docker ``` ### 3단계: 환경 설정 ```bash # .env 파일 편집 (비밀번호 변경) nano .env ``` `.env` 파일 내용: ```env DB_PASSWORD=your_secure_password_here # 여기를 변경하세요! ``` 저장: `Ctrl + X` → `Y` → `Enter` ### 4단계: Docker 컨테이너 실행 ```bash # 백그라운드에서 실행 docker compose up -d # 실행 상태 확인 docker compose ps ``` 출력 예시: ``` NAME IMAGE STATUS PORTS asset_pilot_app asset_pilot_docker-app Up 30 seconds 0.0.0.0:8000->8000/tcp asset_pilot_db postgres:16-alpine Up 30 seconds 0.0.0.0:5432->5432/tcp ``` ### 5단계: 데이터베이스 초기화 ```bash # 앱 컨테이너 내부에서 초기화 스크립트 실행 docker compose exec app python init_db.py ``` ### 6단계: 접속 확인 웹 브라우저에서: ``` http://[Orange_Pi_IP]:8000 ``` 예: `http://192.168.1.100:8000` --- ## 🔧 Docker 관리 명령어 ### 컨테이너 관리 ```bash # 전체 시작 docker compose up -d # 전체 중지 docker compose down # 전체 재시작 docker compose restart # 특정 서비스만 재시작 docker compose restart app # 앱만 docker compose restart postgres # DB만 # 상태 확인 docker compose ps # 로그 확인 (실시간) docker compose logs -f # 특정 서비스 로그만 docker compose logs -f app docker compose logs -f postgres ``` ### 데이터베이스 관리 ```bash # PostgreSQL 컨테이너 접속 docker compose exec postgres psql -U asset_user -d asset_pilot # SQL 쿼리 실행 예시 # \dt # 테이블 목록 # \d assets # assets 테이블 구조 # SELECT * FROM assets; # \q # 종료 ``` ### 애플리케이션 관리 ```bash # 앱 컨테이너 내부 접속 docker compose exec app /bin/bash # 컨테이너 내부에서 Python 스크립트 실행 docker compose exec app python init_db.py ``` --- ## 📊 데이터 관리 ### 백업 #### 데이터베이스 백업 ```bash # 백업 생성 docker compose exec postgres pg_dump -U asset_user asset_pilot > backup_$(date +%Y%m%d).sql # 또는 docker compose exec -T postgres pg_dump -U asset_user asset_pilot > backup.sql ``` #### 전체 볼륨 백업 ```bash # 볼륨 백업 (고급) docker run --rm -v asset_pilot_docker_postgres_data:/data \ -v $(pwd):/backup alpine tar czf /backup/postgres_backup.tar.gz /data ``` ### 복원 ```bash # 백업 파일 복원 cat backup.sql | docker compose exec -T postgres psql -U asset_user -d asset_pilot ``` ### CSV 데이터 가져오기 (Windows 앱에서) ```bash # 1. CSV 파일을 컨테이너로 복사 docker cp user_assets.csv asset_pilot_app:/app/ # 2. import_csv.py 생성 (아래 스크립트 참고) docker compose exec app python import_csv.py user_assets.csv ``` --- ## 🔄 업데이트 ### 애플리케이션 업데이트 ```bash # 1. 새 코드 받기 (파일 업로드 또는 git pull) # 2. 이미지 재빌드 docker compose build app # 3. 재시작 docker compose up -d app ``` ### PostgreSQL 업데이트 ```bash # 주의: 데이터 백업 필수! # 1. 백업 생성 docker compose exec -T postgres pg_dump -U asset_user asset_pilot > backup.sql # 2. docker-compose.yml에서 버전 변경 (예: postgres:17-alpine) # 3. 컨테이너 재생성 docker compose down docker compose up -d ``` --- ## 🗑️ 완전 삭제 ```bash # 컨테이너 중지 및 삭제 docker compose down # 볼륨까지 삭제 (데이터 완전 삭제!) docker compose down -v # 이미지도 삭제 docker rmi asset_pilot_docker-app postgres:16-alpine ``` --- ## 🛠️ 문제 해결 ### 컨테이너가 시작되지 않음 ```bash # 로그 확인 docker compose logs # 특정 서비스 로그 docker compose logs app docker compose logs postgres # 컨테이너 상태 확인 docker compose ps -a ``` ### 데이터베이스 연결 오류 ```bash # PostgreSQL 컨테이너 헬스체크 docker compose exec postgres pg_isready -U asset_user -d asset_pilot # 연결 테스트 docker compose exec postgres psql -U asset_user -d asset_pilot -c "SELECT 1;" ``` ### 포트 충돌 ```bash # 8000번 포트 사용 확인 sudo lsof -i :8000 # docker-compose.yml에서 포트 변경 (예: 8001:8000) ``` ### 디스크 공간 부족 ```bash # 사용하지 않는 Docker 리소스 정리 docker system prune -a # 볼륨 확인 docker volume ls ``` --- ## 📱 원격 접근 설정 ### Nginx 리버스 프록시 (선택적) ```bash # Nginx 설치 sudo apt install nginx # 설정 파일 생성 sudo nano /etc/nginx/sites-available/asset_pilot ``` 설정 내용: ```nginx server { listen 80; server_name your_domain.com; # 또는 IP 주소 location / { proxy_pass http://localhost:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /api/stream { proxy_pass http://localhost:8000/api/stream; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_buffering off; proxy_cache off; } } ``` 활성화: ```bash sudo ln -s /etc/nginx/sites-available/asset_pilot /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx ``` --- ## 🔐 보안 권장사항 ### 1. .env 파일 보호 ```bash chmod 600 .env ``` ### 2. 방화벽 설정 ```bash # 8000번 포트만 허용 (외부 접근 시) sudo ufw allow 8000/tcp # PostgreSQL 포트는 외부 차단 (기본값) sudo ufw deny 5432/tcp ``` ### 3. 정기 백업 ```bash # cron으로 매일 자동 백업 crontab -e # 추가 (매일 새벽 3시) 0 3 * * * cd /home/orangepi/asset_pilot_docker && docker compose exec -T postgres pg_dump -U asset_user asset_pilot > backup_$(date +\%Y\%m\%d).sql ``` --- ## 📊 시스템 리소스 모니터링 ```bash # 컨테이너 리소스 사용량 docker stats # 특정 컨테이너만 docker stats asset_pilot_app asset_pilot_db ``` --- ## ✅ 설치 체크리스트 - [ ] Docker 설치 완료 - [ ] Docker Compose 설치 완료 - [ ] 프로젝트 파일 압축 해제 - [ ] .env 파일 비밀번호 설정 - [ ] `docker compose up -d` 실행 - [ ] 컨테이너 상태 확인 (`docker compose ps`) - [ ] 데이터베이스 초기화 (`docker compose exec app python init_db.py`) - [ ] 웹 브라우저 접속 확인 (`http://[IP]:8000`) - [ ] 데이터 수집 동작 확인 --- ## 🎉 완료! 모든 과정이 완료되면 다음 URL로 접속하세요: ``` http://[Orange_Pi_IP]:8000 ``` 문제가 발생하면 로그를 확인하세요: ```bash docker compose logs -f ```