AssetPilot OrangePi 5 Pluse Server-First Commit

This commit is contained in:
Wind
2026-02-10 12:23:22 +09:00
commit bf87175f51
45 changed files with 4060 additions and 0 deletions

View File

@@ -0,0 +1,227 @@
# 🐳 Asset Pilot Docker 빠른 시작
## 1⃣ 파일 전송 (Orange Pi로)
```bash
# Windows PowerShell 또는 Linux/Mac 터미널에서
scp asset_pilot_docker.tar.gz orangepi@192.168.1.100:~/
```
---
## 2⃣ Orange Pi에서 설치
```bash
# SSH 접속
ssh orangepi@192.168.1.100
# 압축 해제
tar -xzf asset_pilot_docker.tar.gz
cd asset_pilot_docker
# 자동 설치 (Docker가 없으면 자동으로 설치함)
bash start.sh
```
**설치 스크립트가 자동으로 처리:**
- ✅ Docker 설치 확인 및 설치
- ✅ 비밀번호 설정
- ✅ 컨테이너 빌드 및 실행
- ✅ 데이터베이스 초기화
---
## 3⃣ 접속
```
http://[Orange_Pi_IP]:8000
```
예: `http://192.168.1.100:8000`
---
## 📦 Docker 컨테이너 구조
```
┌─────────────────────────────────────────┐
│ Orange Pi 5 Plus (Ubuntu) │
│ │
│ ┌──────────────────────────────────┐ │
│ │ Docker Network │ │
│ │ │ │
│ │ ┌────────────┐ ┌────────────┐ │ │
│ │ │ PostgreSQL │ │ App │ │ │
│ │ │ Container │ │ Container │ │ │
│ │ │ │ │ │ │ │
│ │ │ Port 5432 │←→│ FastAPI │ │ │
│ │ │ │ │ Port 8000 │ │ │
│ │ └────────────┘ └────────────┘ │ │
│ │ ↓ ↓ │ │
│ │ [Volume] [Volume] │ │
│ │ postgres_data app_logs │ │
│ └──────────────────────────────────┘ │
│ ↑ │
│ Port 8000 (외부 접근) │
└─────────────────────────────────────────┘
```
---
## 🔧 주요 명령어
### 컨테이너 관리
```bash
# 전체 시작
docker compose up -d
# 전체 중지
docker compose down
# 상태 확인
docker compose ps
# 로그 보기 (실시간)
docker compose logs -f
```
### 특정 컨테이너만 제어
```bash
# 앱만 재시작
docker compose restart app
# DB만 재시작
docker compose restart postgres
# 앱 로그만 보기
docker compose logs -f app
```
---
## 💾 Windows 데이터 가져오기
기존 `user_assets.csv` 파일이 있다면:
```bash
# 1. CSV 파일을 컨테이너로 복사
docker cp user_assets.csv asset_pilot_app:/app/
# 2. 가져오기 실행
docker compose exec app python import_csv.py user_assets.csv
```
---
## 🔄 백업 및 복원
### 백업 생성
```bash
# 데이터베이스 백업
docker compose exec postgres pg_dump -U asset_user asset_pilot > backup_$(date +%Y%m%d).sql
```
### 백업 복원
```bash
# 백업 파일 복원
cat backup_20260210.sql | docker compose exec -T postgres psql -U asset_user -d asset_pilot
```
---
## 🛠️ 문제 해결
### 컨테이너가 시작되지 않음
```bash
# 로그 확인
docker compose logs
# 특정 서비스 로그
docker compose logs app
docker compose logs postgres
```
### Docker가 설치되지 않음
```bash
# Docker 자동 설치
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
newgrp docker # 또는 로그아웃 후 재로그인
```
### 포트가 이미 사용 중
```bash
# docker-compose.yml 파일 편집
nano docker-compose.yml
# ports 섹션 수정
# "8001:8000" # 8000 대신 8001 사용
```
---
## 🗑️ 완전 삭제
```bash
# 컨테이너 + 볼륨 모두 삭제
docker compose down -v
# 이미지도 삭제
docker rmi asset_pilot_docker-app postgres:16-alpine
```
---
## 📱 모바일/태블릿 접속
1. 같은 Wi-Fi에 연결
2. 브라우저에서 `http://[IP]:8000` 접속
3. **홈 화면에 추가** → 앱처럼 사용!
---
## 🔐 보안 팁
```bash
# .env 파일 권한 설정
chmod 600 .env
# 방화벽 설정
sudo ufw allow 8000/tcp
sudo ufw enable
# PostgreSQL 외부 접근 차단 (기본값 유지)
# docker-compose.yml에서 5432 포트를 127.0.0.1:5432:5432로 변경
```
---
## ✅ 설치 확인 체크리스트
- [ ] Docker 설치됨 (`docker --version`)
- [ ] 프로젝트 압축 해제됨
- [ ] `.env` 파일 비밀번호 설정됨
- [ ] `docker compose up -d` 실행됨
- [ ] 컨테이너 실행 중 (`docker compose ps`)
- [ ] DB 초기화 완료
- [ ] 웹 접속 가능 (`http://[IP]:8000`)
---
## 🎯 장점 요약
| 기능 | 일반 설치 | Docker 설치 |
|------|----------|------------|
| 설치 복잡도 | 중간 | 매우 쉬움 |
| 환경 격리 | 없음 | 완벽 |
| 백업/복원 | 수동 | 간단 |
| 업데이트 | 복잡 | 쉬움 |
| 이식성 | 낮음 | 높음 |
| 롤백 | 어려움 | 쉬움 |
---
**모든 준비 완료! 투자 모니터링을 시작하세요! 💰**
상세한 내용은 `DOCKER_GUIDE.md` 참조

View File

@@ -0,0 +1,368 @@
# Asset Pilot - Windows → Orange Pi 5 Plus 전환 가이드
## 📋 개요
**목적**: Windows PyQt5 데스크톱 애플리케이션을 Orange Pi 5 Plus (Ubuntu 24.04) 기반 웹 애플리케이션으로 전환
**주요 변경사항**:
- PyQt5 GUI → FastAPI + HTML/JavaScript 웹 인터페이스
- CSV 파일 저장 → PostgreSQL 데이터베이스
- Windows 토스트 알림 → 웹 푸시 알림 (선택적)
- 로컬 실행 → 네트워크 기반 접근 가능
---
## 🔧 시스템 요구사항
### 하드웨어
- Orange Pi 5 Plus (ARM64 아키텍처)
- 최소 2GB RAM (4GB 권장)
- 최소 8GB 저장공간
### 소프트웨어
- Ubuntu 24.04 LTS (Joshua Riek 버전)
- PostgreSQL 14+
- Python 3.10+
- Nginx (선택적, 프로덕션 배포용)
---
## 📦 설치 단계
### 1단계: 시스템 패키지 설치
```bash
# 시스템 업데이트
sudo apt update && sudo apt upgrade -y
# PostgreSQL 설치
sudo apt install -y postgresql postgresql-contrib
# Python 및 개발 도구 설치
sudo apt install -y python3 python3-pip python3-venv python3-dev
sudo apt install -y build-essential libpq-dev
# Nginx 설치 (선택적)
sudo apt install -y nginx
```
### 2단계: PostgreSQL 설정
```bash
# PostgreSQL 서비스 시작
sudo systemctl start postgresql
sudo systemctl enable postgresql
# 데이터베이스 및 사용자 생성
sudo -u postgres psql << EOF
CREATE DATABASE asset_pilot;
CREATE USER asset_user WITH ENCRYPTED PASSWORD 'your_secure_password';
GRANT ALL PRIVILEGES ON DATABASE asset_pilot TO asset_user;
\q
EOF
```
### 3단계: 애플리케이션 설치
```bash
# 작업 디렉토리 생성
mkdir -p ~/asset_pilot_web
cd ~/asset_pilot_web
# 제공된 파일 압축 해제
unzip asset_pilot_orangepi.zip
cd asset_pilot_orangepi
# Python 가상환경 생성
python3 -m venv venv
source venv/bin/activate
# 의존성 패키지 설치
pip install --upgrade pip
pip install -r requirements.txt
```
### 4단계: 환경 변수 설정
`.env` 파일 생성:
```bash
cat > .env << 'EOF'
# 데이터베이스 설정
DATABASE_URL=postgresql://asset_user:your_secure_password@localhost/asset_pilot
# 서버 설정
APP_HOST=0.0.0.0
APP_PORT=8000
DEBUG=False
# 데이터 수집 간격 (초)
FETCH_INTERVAL=5
EOF
```
### 5단계: 데이터베이스 초기화
```bash
# 가상환경 활성화 상태에서
python init_db.py
```
### 6단계: 서비스 등록 (자동 실행)
```bash
# systemd 서비스 파일 복사
sudo cp asset_pilot.service /etc/systemd/system/
# 서비스 파일 편집 (경로 확인)
sudo nano /etc/systemd/system/asset_pilot.service
# 서비스 활성화
sudo systemctl daemon-reload
sudo systemctl enable asset_pilot.service
sudo systemctl start asset_pilot.service
# 상태 확인
sudo systemctl status asset_pilot.service
```
---
## 🌐 웹 인터페이스 접근
### 로컬 네트워크에서 접근
1. Orange Pi의 IP 주소 확인:
```bash
ip addr show | grep inet
```
2. 웹 브라우저에서 접속:
```
http://[Orange_Pi_IP]:8000
```
예: `http://192.168.1.100:8000`
### Nginx 리버스 프록시 설정 (선택적)
프로덕션 환경에서는 Nginx를 통한 접근 권장:
```bash
sudo nano /etc/nginx/sites-available/asset_pilot
```
다음 내용 입력:
```nginx
server {
listen 80;
server_name your_domain_or_ip;
location / {
proxy_pass http://127.0.0.1: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://127.0.0.1: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
```
---
## 📊 데이터 마이그레이션
### Windows 앱에서 데이터 내보내기
기존 Windows 앱의 `user_assets.csv` 파일을 Orange Pi로 복사:
```bash
# Windows에서 SCP로 전송 (예시)
scp user_assets.csv orangepi@192.168.1.100:~/asset_pilot_web/
```
### 데이터 가져오기
```bash
cd ~/asset_pilot_web/asset_pilot_orangepi
source venv/bin/activate
python import_csv.py ../user_assets.csv
```
---
## 🔍 모니터링 및 관리
### 로그 확인
```bash
# 실시간 로그 보기
sudo journalctl -u asset_pilot.service -f
# 최근 100줄 로그
sudo journalctl -u asset_pilot.service -n 100
```
### 서비스 관리
```bash
# 시작
sudo systemctl start asset_pilot.service
# 중지
sudo systemctl stop asset_pilot.service
# 재시작
sudo systemctl restart asset_pilot.service
# 상태 확인
sudo systemctl status asset_pilot.service
```
### 데이터베이스 백업
```bash
# 백업 생성
pg_dump -U asset_user -h localhost asset_pilot > backup_$(date +%Y%m%d).sql
# 복원
psql -U asset_user -h localhost asset_pilot < backup_20260210.sql
```
---
## 🔐 보안 권장사항
1. **방화벽 설정**:
```bash
sudo ufw allow 8000/tcp # 또는 Nginx 사용 시 80/tcp
sudo ufw enable
```
2. **PostgreSQL 외부 접근 차단**: 기본 설정 유지 (localhost만 허용)
3. **강력한 비밀번호 사용**: `.env` 파일의 데이터베이스 비밀번호 변경
4. **HTTPS 설정** (선택적):
- Let's Encrypt 인증서 사용
- Nginx SSL 설정
---
## 🆘 문제 해결
### 서비스가 시작되지 않음
```bash
# 로그 확인
sudo journalctl -u asset_pilot.service -n 50
# 수동 실행으로 오류 확인
cd ~/asset_pilot_web/asset_pilot_orangepi
source venv/bin/activate
python main.py
```
### 데이터베이스 연결 오류
```bash
# PostgreSQL 상태 확인
sudo systemctl status postgresql
# 연결 테스트
psql -U asset_user -h localhost -d asset_pilot
```
### 포트 충돌
```bash
# 8000번 포트 사용 중인 프로세스 확인
sudo lsof -i :8000
```
---
## 📱 모바일 접근
### 홈 화면에 추가 (PWA 스타일)
1. 모바일 브라우저에서 접속
2. 브라우저 메뉴 → "홈 화면에 추가"
3. 앱처럼 사용 가능
---
## 🔄 업데이트 절차
```bash
cd ~/asset_pilot_web/asset_pilot_orangepi
source venv/bin/activate
# 최신 코드 적용
git pull # 또는 새 파일 복사
# 의존성 업데이트
pip install -r requirements.txt --upgrade
# 데이터베이스 마이그레이션 (필요시)
python migrate_db.py
# 서비스 재시작
sudo systemctl restart asset_pilot.service
```
---
## 📞 지원
문제 발생 시:
1. 로그 확인: `sudo journalctl -u asset_pilot.service -n 100`
2. 데이터베이스 상태 확인: `sudo systemctl status postgresql`
3. 네트워크 연결 확인: `ping 8.8.8.8`
---
## 🎯 주요 차이점 요약
| 기능 | Windows 앱 | Orange Pi 웹앱 |
|------|-----------|---------------|
| UI | PyQt5 | HTML/JavaScript |
| 저장소 | CSV 파일 | PostgreSQL |
| 접근성 | 로컬 실행 | 네트워크 접근 |
| 알림 | Windows 토스트 | 브라우저 알림 |
| 멀티 기기 | 불가 | 가능 |
| 자동 시작 | Windows 작업 스케줄러 | systemd |
---
## ✅ 체크리스트
설치 완료 확인:
- [ ] PostgreSQL 설치 및 실행
- [ ] 데이터베이스 생성
- [ ] Python 가상환경 생성
- [ ] 의존성 패키지 설치
- [ ] 환경 변수 설정
- [ ] 데이터베이스 초기화
- [ ] 서비스 등록 및 시작
- [ ] 웹 브라우저 접속 확인
- [ ] 데이터 수집 동작 확인
- [ ] 기존 데이터 마이그레이션 (선택적)
모든 항목 완료 시 시스템 사용 준비 완료! 🎉

View File

@@ -0,0 +1,126 @@
# Asset Pilot - Orange Pi 빠른 시작 가이드
## 🚀 5분 안에 시작하기
### 1⃣ 파일 전송
Orange Pi에 `asset_pilot_orangepi.tar.gz` 파일을 전송:
```bash
# Windows에서 (PowerShell)
scp asset_pilot_orangepi.tar.gz orangepi@192.168.1.100:~/
# Linux/Mac에서
scp asset_pilot_orangepi.tar.gz orangepi@192.168.1.100:~/
```
### 2⃣ Orange Pi에서 설치
```bash
# SSH 접속
ssh orangepi@192.168.1.100
# 압축 해제
tar -xzf asset_pilot_orangepi.tar.gz
cd asset_pilot_orangepi
# 자동 설치 스크립트 실행
bash install.sh
```
스크립트가 다음을 자동으로 처리합니다:
- PostgreSQL 설치 및 설정
- Python 가상환경 생성
- 필요한 패키지 설치
- 데이터베이스 초기화
- 서비스 등록
### 3⃣ 접속
웹 브라우저에서:
```
http://[Orange_Pi_IP]:8000
```
예: `http://192.168.1.100:8000`
---
## 📱 스마트폰에서 접속
1. 같은 Wi-Fi 네트워크에 연결
2. 브라우저에서 `http://[IP]:8000` 접속
3. "홈 화면에 추가" → 앱처럼 사용!
---
## 🔧 주요 명령어
```bash
# 서비스 상태 확인
sudo systemctl status asset_pilot
# 로그 실시간 보기
sudo journalctl -u asset_pilot -f
# 서비스 재시작
sudo systemctl restart asset_pilot
# 서비스 중지
sudo systemctl stop asset_pilot
```
---
## 📊 Windows 데이터 가져오기
기존 `user_assets.csv` 파일이 있다면:
```bash
# CSV 파일을 Orange Pi로 복사
scp user_assets.csv orangepi@192.168.1.100:~/
# Orange Pi에서 가져오기
cd ~/asset_pilot_orangepi
source venv/bin/activate
python import_csv.py ../user_assets.csv
```
---
## ❓ 문제 해결
### 접속이 안 될 때
1. 서비스 확인:
```bash
sudo systemctl status asset_pilot
```
2. 방화벽 확인:
```bash
sudo ufw allow 8000/tcp
```
3. IP 주소 확인:
```bash
ip addr show
```
### 데이터가 수집되지 않을 때
로그 확인:
```bash
sudo journalctl -u asset_pilot -n 100
```
---
## 📚 더 자세한 정보
- **전체 가이드**: MIGRATION_GUIDE.md
- **프로젝트 문서**: README.md (프로젝트 내)
---
**준비 완료! 이제 자산을 모니터링하세요! 💰**

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

View File

@@ -0,0 +1,130 @@
이걸 postgresql 도커 따로 개발프로그램 실행 도커 따로 이렇게 설치하고 싶은데 과정알려줘
오전 8:10
4개의 파일 생성됨, 명령 4개 실행함
이제 다시 파일들을 생성하겠습니다.
명령 3개 실행함
좋습니다! 이제 Docker 관련 파일들을 추가하겠습니다.
9개의 파일 생성됨, 명령 실행함
이제 프로젝트를 압축하여 제공하겠습니다.
명령 2개 실행함, 파일 생성됨
완벽합니다! 이제 모든 파일을 제공하겠습니다.
Presented 2 files
완료했습니다! 🐳
📦 Docker 버전 제공 완료
제공된 파일
asset_pilot_docker.tar.gz - Docker 기반 전체 패키지
DOCKER_QUICKSTART.md - Docker 빠른 시작 가이드
🐳 Docker 설치 방식의 장점
독립된 컨테이너 구조
PostgreSQL Container (DB) ←→ App Container (FastAPI)
↓ ↓
Volume (postgres_data) Volume (app_logs)
주요 이점:
✅ PostgreSQL과 앱이 별도 컨테이너로 완전 격리
✅ 한 번의 명령으로 전체 시스템 실행
✅ 컨테이너별 독립적 재시작 가능
✅ 볼륨으로 데이터 영구 저장
✅ 백업/복원 매우 간단
✅ 이식성 최고 (다른 서버로 쉽게 이동)
🚀 설치 과정
초간단 설치 (3단계)
bash
# 1. 압축 해제
tar -xzf asset_pilot_docker.tar.gz
cd asset_pilot_docker
# 2. 자동 설치 실행
bash start.sh
# 3. 완료! 접속
# http://[IP]:8000
start.sh 스크립트가 자동으로:
Docker 설치 확인 (없으면 자동 설치)
Docker Compose 확인 (없으면 자동 설치)
비밀번호 입력 받아 .env 파일 생성
PostgreSQL 컨테이너 시작
App 컨테이너 빌드 및 시작
데이터베이스 자동 초기화
접속 URL 안내
🔧 주요 관리 명령어
컨테이너 관리
bash
docker compose up -d # 시작 (백그라운드)
docker compose down # 중지
docker compose ps # 상태 확인
docker compose logs -f # 로그 실시간
docker compose restart app # 앱만 재시작
데이터 관리
bash
# 백업
docker compose exec postgres pg_dump -U asset_user asset_pilot > backup.sql
# 복원
cat backup.sql | docker compose exec -T postgres psql -U asset_user -d asset_pilot
# CSV 가져오기
docker cp user_assets.csv asset_pilot_app:/app/
docker compose exec app python import_csv.py user_assets.csv
📊 컨테이너 구성 상세
PostgreSQL 컨테이너
이미지: postgres:16-alpine (경량)
포트: 5432 (내부 네트워크만)
볼륨: postgres_data (데이터 영구 저장)
헬스체크: 자동 상태 확인
App 컨테이너
이미지: 자체 빌드 (Python 3.11)
포트: 8000 (외부 접근 가능)
의존성: PostgreSQL 준비 완료 후 시작
헬스체크: /health 엔드포인트 확인
🔄 업데이트 방법
bash
# 코드 업데이트 후
docker compose build app # 이미지 재빌드
docker compose up -d app # 앱만 재시작
🔐 보안 설정
PostgreSQL: 내부 네트워크만 접근
.env 파일: 권한 600 (소유자만 읽기/쓰기)
방화벽: 8000번 포트만 개방
비루트 사용자: 컨테이너 내부에서 appuser로 실행
💡 일반 설치 vs Docker 설치
항목 일반 설치 Docker 설치
설치 난이도 중간 (여러 단계) 쉬움 (3단계)
의존성 관리 수동 설치 필요 자동 처리
환경 격리 없음 완벽
백업 수동 (복잡) 간단
업데이트 복잡 쉬움
롤백 어려움 쉬움
이식성 낮음 높음
리소스 가벼움 약간 더 사용
📚 포함된 문서
프로젝트 내부 (압축 해제 후):
README.md - 프로젝트 개요
DOCKER_GUIDE.md - 상세 설치/관리 가이드
docker-compose.yml - 컨테이너 설정
Dockerfile - 앱 이미지 빌드 설정
start.sh - 자동 설치 스크립트
🎯 권장 사용 시나리오
Docker 설치 추천:
✅ 깔끔한 환경 원할 때
✅ 쉬운 백업/복원 필요할 때
✅ 여러 서버에 배포할 때
✅ 컨테이너 기술 선호할 때
일반 설치 추천:
✅ Docker 없는 환경
✅ 최소 리소스 사용
✅ 직접 제어 선호

View File

@@ -0,0 +1,21 @@
# 프로그램 수정후
docker compose up -d --build
# 실행을 터미널 에서 보고 싶으면
docker compose logs -f app
# AssetPilot의 오렌지 파이 리소스 부하 확인하고 싶으면
docker stats asset_pilot_app asset_pilot_db
# docker compose down 해야 하는 경우
보통의 코드 수정(Python 파일 수정 등)에는 up --build만으로 충분하지만, 아래 상황에서는 down을 먼저 하는 것이 깔끔합니다.
포트 변경: docker-compose.yml에서 ports 설정을 바꿨을 때.
네트워크 구조 변경: 서비스 간의 네트워크 연결 방식을 크게 수정했을 때.
완전 초기화: volumes에 쌓인 데이터까지 싹 지우고 새로 시작하고 싶을 때 (이때는 docker compose down -v).
좀비 컨테이너: 가끔 도커 엔진의 버그로 컨테이너가 정상적으로 교체되지 않고 꼬여있을 때.