byun 9f0f4326fe 기능 개선 — 사진 업로드, HEIC 지원, 재조치 흐름, 신고 순번, 모바일 UI
- 이미지 압축: 삼성/네이버 브라우저 호환, URL.createObjectURL 방식으로 메모리 절감,
  대용량 PNG/HEIC 처리, blob 유효성 검증, 순차 압축으로 모바일 OOM 방지
- HEIC/HEIF 지원: pillow-heif 서버사이드 변환, Pillow 12.2.0 업그레이드
- 조치 페이지: '조치 완료 저장' 단일 버튼으로 단순화
- 재조치 흐름: 관리자 재조치 요청 시 이전 조치 이력을 번호 카드로 순차 표시
- 신고 순번: 전체 기준 ROW_NUMBER(oldest=1) 순번 표시, 삭제 gap 제거
- 모바일 탭바: position:fixed 적용으로 nav 하단 흰 여백 제거

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 05:38:33 +09:00

EV 충전기 AS 관리 시스템

아키텍처 구성

인터넷
  ↓
cs.byunc.com (DNS)
  ↓
5825u 서버 ── Nginx 리버스 프록시 + Certbot SSL (HTTPS 443)
  ↓ 내부 포워딩 (127.0.0.1:5700)
Docker Compose (HTTP :5700)
  ├── ev_nginx    :5700 → 컨테이너 내부 :80
  ├── ev_backend  :8000 (내부)
  └── ev_db       :5432 (내부)

🚀 최초 설치 및 실행

1. .env 환경변수 수정 (필수)

cd /home/byun/ev-charger-as
nano .env

아래 두 가지 반드시 변경:

POSTGRES_PASSWORD=원하는_비밀번호
SECRET_KEY=아래_명령어로_생성한_값

SECRET_KEY 생성:

openssl rand -hex 32

DATABASE_URL 도 POSTGRES_PASSWORD 와 맞게 수정:

DATABASE_URL=postgresql://evuser:변경한_비밀번호@db:5432/evcharger

2. 빌드 및 실행

docker compose up -d --build

3. 동작 확인

docker compose ps
curl http://localhost:5700/api/health
# {"status":"ok"} 확인

🔑 초기 로그인

항목
URL https://cs.byunc.com/pages/login.html
아이디 admin
비밀번호 admin1234

⚠️ 로그인 후 즉시 비밀번호 변경 (설정 → 비밀번호 변경)


♻️ DB 초기화가 필요할 때 (재설치 시)

이미 한 번 실행했던 서버에서 init_db.sql 변경사항을 반영하려면 볼륨을 삭제하고 다시 올려야 합니다.

# 컨테이너 + 볼륨 완전 삭제 (DB 데이터 초기화됨 — 주의)
docker compose down -v

# 다시 빌드 및 실행
docker compose up -d --build

# 확인
docker compose logs db
docker compose logs backend

🌐 5825u Nginx 설정

기존 nginx 설정에 아래 파일 추가:

sudo nano /etc/nginx/sites-available/ev-charger
server {
    listen 80;
    server_name cs.byunc.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name cs.byunc.com;

    ssl_certificate     /etc/letsencrypt/live/cs.byunc.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cs.byunc.com/privkey.pem;

    client_max_body_size 20M;

    location / {
        proxy_pass          http://127.0.0.1:5700;
        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 https;
        proxy_read_timeout  60s;
    }
}
sudo ln -s /etc/nginx/sites-available/ev-charger /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

🗄️ DB 백업 / 복원

# 백업
docker exec ev_db pg_dump -U evuser evcharger > backup_$(date +%Y%m%d).sql

# 복원
docker exec -i ev_db psql -U evuser evcharger < backup_20240101.sql

# 업로드 파일 백업
tar -czf uploads_$(date +%Y%m%d).tar.gz uploads/

자동 백업 크론:

crontab -e
# 매일 새벽 3시
0 3 * * * cd ~/ev-charger-as && docker exec ev_db pg_dump -U evuser evcharger > ~/backups/db_$(date +\%Y\%m\%d).sql

🔄 코드 수정 후 재배포

# 백엔드 코드만 수정한 경우
docker compose build backend
docker compose up -d --no-deps backend

# 전체 재빌드
docker compose up -d --build

🛠 유용한 명령어

# 상태 확인
docker compose ps

# 로그 확인
docker compose logs -f backend
docker compose logs -f nginx

# DB 직접 접속
docker exec -it ev_db psql -U evuser evcharger

# 전체 재시작
docker compose restart

# 전체 중지 (데이터 보존)
docker compose down

🔒 보안 체크리스트

  • .env POSTGRES_PASSWORD, SECRET_KEY 변경
  • 초기 admin 비밀번호 변경
  • 방화벽: 5432(DB) 포트 외부 노출 차단
  • 정기 DB 백업 크론 설정
Description
CS 관리페이지
Readme 333 KiB
Languages
HTML 69.4%
Python 25.7%
JavaScript 3.1%
CSS 1.8%