Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

purestory/translation-service

Repository files navigation

λ²ˆμ—­ μ„œλΉ„μŠ€ (Translation Service)

AI 기반 닀쀑 μ—”μ§„ λ²ˆμ—­ μ›Ή μ„œλΉ„μŠ€ - GPU 가속 둜컬 AI λͺ¨λΈ νŠΉν™”

🌐 μ„œλΉ„μŠ€ 접속

πŸ—οΈ μ„œλΉ„μŠ€ ꡬ쑰

λ²ˆμ—­ μ„œλΉ„μŠ€
β”œβ”€β”€ ν”„λ‘ νŠΈμ—”λ“œ: React + Vite β†’ nginx (포트 80/443)
β”œβ”€β”€ λ°±μ—”λ“œ: Node.js Express β†’ systemd (포트 3501)
└── AI λͺ¨λΈ: Ollama Docker Container β†’ GPU 가속 (포트 11434)

πŸš€ λΉ λ₯Έ μ‹œμž‘

1. μ €μž₯μ†Œ 클둠

git clone https://github.com/purestory/translation-service.git
cd translation-service

2. ν™˜κ²½ λ³€μˆ˜ μ„€μ •

# backend/.env 파일 생성
cp backend/.env.example backend/.env
# ν•„μš”ν•œ API ν‚€ μ„€μ • (선택사항)
DEEPL_API_KEY=your_deepl_key
OPENAI_API_KEY=your_openai_key
ANTHROPIC_API_KEY=your_anthropic_key
GEMINI_API_KEY=your_gemini_key
GROQ_API_KEY=your_groq_key
OLLAMA_URL=http://localhost:11434

3. μ˜μ‘΄μ„± μ„€μΉ˜

# λ°±μ—”λ“œ μ˜μ‘΄μ„± μ„€μΉ˜
cd backend
npm install
# ν”„λ‘ νŠΈμ—”λ“œ μ˜μ‘΄μ„± μ„€μΉ˜
cd ../vite-frontend
npm install

4. Ollama μ„€μΉ˜ 및 μ‹€ν–‰

# Docker둜 Ollama μ‹€ν–‰
sudo docker run -d --name ollama \
 -p 11434:11434 \
 --gpus all \
 -v ollama_data:/root/.ollama \
 ollama/ollama
# ν•œκ΅­μ–΄ νŠΉν™” λͺ¨λΈ λ‹€μš΄λ‘œλ“œ
sudo docker exec ollama ollama pull gemma2:9b

5. μ„œλΉ„μŠ€ μ‹€ν–‰

# λ°±μ—”λ“œ μ‹€ν–‰
cd backend
npm start
# ν”„λ‘ νŠΈμ—”λ“œ λΉŒλ“œ 및 μ‹€ν–‰ (κ°œλ°œμ‹œ)
cd ../vite-frontend
npm run dev

πŸ€– 지원 λ²ˆμ—­ μ—”μ§„

GPU 가속 Ollama λͺ¨λΈ (μš°μ„ μˆœμœ„)

  1. ollama-gemma2-sapie (κΈ°λ³Έκ°’) - ν•œκ΅­μ–΄ νŠΉν™” Sapie λͺ¨λΈ
  2. ollama-kanana-1.5 - Kakao Corp. Kanana 1.5-8B (BF16+Q8_0, 9.5GB)
  3. ollama-exaone3.5 - LG AI Research Exaone 3.5 (ν•œκ΅­μ–΄ νŠΉν™”)
  4. ollama-gemma2 - Google Gemma2 9B
  5. ollama-hyperclovax - Naver HyperCLOVAX 3B (ν•œκ΅­μ–΄ νŠΉν™”)
  6. ollama-hyperclovax-1.5b - Naver HyperCLOVAX 1.5B (κ²½λŸ‰ν™”)

ν΄λΌμš°λ“œ API λͺ¨λΈ (λŒ€μ²΄ μ—”μ§„)

  • Google Gemini - κ³ ν’ˆμ§ˆ λ‹€κ΅­μ–΄ λ²ˆμ—­
  • Groq Llama - 고속 μΆ”λ‘ 
  • OpenAI GPT - μžμ—°μŠ€λŸ¬μš΄ λ²ˆμ—­
  • Anthropic Claude - λ¬Έλ§₯ 이해 우수
  • DeepL - μ „λ¬Έ λ²ˆμ—­ μ„œλΉ„μŠ€

πŸ”§ ν•˜λ“œμ›¨μ–΄ 사양

GPU 정보

  • λͺ¨λΈ: NVIDIA RTX 3090
  • VRAM: 24GB
  • CUDA: 12.8
  • μ»΄ν“¨νŠΈ λŠ₯λ ₯: 8.6 (BF16 지원)

AI λͺ¨λΈ ν˜„ν™©

# μ„€μΉ˜λœ λͺ¨λΈ 확인
curl -s http://localhost:11434/api/tags | jq '.models[].name'
# GPU μ‚¬μš©λŸ‰ 확인
nvidia-smi

πŸ”§ μ„œλΉ„μŠ€ 관리

μƒνƒœ 확인

# λ²ˆμ—­ μ„œλΉ„μŠ€ μƒνƒœ
sudo systemctl status translation-service
# Ollama μ»¨ν…Œμ΄λ„ˆ μƒνƒœ
sudo docker ps | grep ollama
# GPU μ‚¬μš©λŸ‰
nvidia-smi
# μ„œλΉ„μŠ€ 둜그
sudo journalctl -u translation-service -f --no-pager

μ„œλΉ„μŠ€ μ œμ–΄

# λ²ˆμ—­ μ„œλΉ„μŠ€ μž¬μ‹œμž‘
sudo systemctl restart translation-service
# Ollama μ»¨ν…Œμ΄λ„ˆ μž¬μ‹œμž‘
sudo docker restart ollama
# 전체 μ‹œμŠ€ν…œ μž¬μ‹œμž‘
sudo systemctl restart translation-service
sudo docker restart ollama
sudo nginx -s reload

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

translation-service/
β”œβ”€β”€ README.md # ν”„λ‘œμ νŠΈ λ¬Έμ„œ
β”œβ”€β”€ package.json # 루트 νŒ¨ν‚€μ§€ μ„€μ •
β”œβ”€β”€ .gitignore # Git λ¬΄μ‹œ 파일
β”œβ”€β”€ backend/ # Node.js λ°±μ—”λ“œ
β”‚ β”œβ”€β”€ server.js # 메인 μ„œλ²„
β”‚ β”œβ”€β”€ package.json # λ°±μ—”λ“œ μ˜μ‘΄μ„±
β”‚ β”œβ”€β”€ .env.example # ν™˜κ²½λ³€μˆ˜ 예제
β”‚ β”œβ”€β”€ routes/ # API 라우트
β”‚ β”‚ └── translation.js # λ²ˆμ—­ API μ—”λ“œν¬μΈνŠΈ
β”‚ β”œβ”€β”€ services/ # λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
β”‚ β”‚ └── translationService.js # 메인 λ²ˆμ—­ μ„œλΉ„μŠ€
β”‚ β”œβ”€β”€ utils/ # μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜
β”‚ β”œβ”€β”€ uploads/ # μ—…λ‘œλ“œ 파일 μž„μ‹œ μ €μž₯
β”‚ └── debug.log # μ„œλ²„ 둜그
β”œβ”€β”€ vite-frontend/ # React ν”„λ‘ νŠΈμ—”λ“œ
β”‚ β”œβ”€β”€ src/ # μ†ŒμŠ€ μ½”λ“œ
β”‚ β”‚ β”œβ”€β”€ App.tsx # 메인 React μ»΄ν¬λ„ŒνŠΈ
β”‚ β”‚ β”œβ”€β”€ components/ # React μ»΄ν¬λ„ŒνŠΈλ“€
β”‚ β”‚ └── types/ # TypeScript νƒ€μž… μ •μ˜
β”‚ β”œβ”€β”€ public/ # 정적 파일
β”‚ β”œβ”€β”€ dist/ # λΉŒλ“œ κ²°κ³Ό (nginx μ„œλΉ™)
β”‚ β”œβ”€β”€ package.json # ν”„λ‘ νŠΈμ—”λ“œ μ˜μ‘΄μ„±
β”‚ └── vite.config.ts # Vite μ„€μ •
└── tmp/ # μž„μ‹œ 파일 (nginx μ„€μ • λ“±)

πŸ› οΈ 개발 및 배포

1. ν”„λ‘ νŠΈμ—”λ“œ μˆ˜μ •μ‹œ

cd vite-frontend
# μ½”λ“œ μˆ˜μ • ν›„
npm run build
# 배포 μ„œλ²„μ—μ„œλŠ” nginx μž¬λ‘œλ“œ
sudo nginx -s reload

2. λ°±μ—”λ“œ μˆ˜μ •μ‹œ

cd backend
# μ½”λ“œ μˆ˜μ • ν›„
npm start # κ°œλ°œμ‹œ
# λ˜λŠ”
sudo systemctl restart translation-service # μš΄μ˜μ‹œ

3. AI λͺ¨λΈ μΆ”κ°€μ‹œ

# μƒˆ λͺ¨λΈ λ‹€μš΄λ‘œλ“œ
sudo docker exec ollama ollama pull <model_name>
# μ»€μŠ€ν…€ λͺ¨λΈ 등둝
sudo docker exec ollama ollama create <custom_name> -f /path/to/Modelfile
# λ°±μ—”λ“œμ—μ„œ μ—”μ§„ μΆ”κ°€ ν›„ μž¬μ‹œμž‘ ν•„μš”

πŸ“Š API λ¬Έμ„œ

μ£Όμš” μ—”λ“œν¬μΈνŠΈ

ν…μŠ€νŠΈ λ²ˆμ—­

POST /translation-api/translation/text
Content-Type: application/json
{
 "text": "λ²ˆμ—­ν•  ν…μŠ€νŠΈ",
 "targetLang": "ko",
 "sourceLang": "en", // 선택사항 (auto 감지)
 "engine": "ollama-gemma2-sapie" // 선택사항
}

파일 λ²ˆμ—­ (μžλ§‰)

POST /translation-api/subtitle/translate
Content-Type: multipart/form-data
- file: SRT/VTT 파일
- targetLang: ko
- engine: ollama-gemma2-sapie
- chunkSize: 10

μ‚¬μš© κ°€λŠ₯ν•œ μ—”μ§„ λͺ©λ‘

GET /translation-api/translation/engines

지원 μ–Έμ–΄ λͺ©λ‘

GET /translation-api/translation/languages

🚨 문제 ν•΄κ²°

λ²ˆμ—­μ΄ μ•ˆλ  λ•Œ

  1. μ„œλΉ„μŠ€ μƒνƒœ 확인: sudo systemctl status translation-service
  2. Ollama μƒνƒœ 확인: sudo docker ps | grep ollama
  3. GPU λ©”λͺ¨λ¦¬ 확인: nvidia-smi
  4. 둜그 확인: sudo journalctl -u translation-service -n 20
  5. μ„œλΉ„μŠ€ μž¬μ‹œμž‘: sudo systemctl restart translation-service

일반적인 λ¬Έμ œλ“€

Ollama μ»¨ν…Œμ΄λ„ˆκ°€ 정지됨

# 원인: GPU λ©”λͺ¨λ¦¬ λΆ€μ‘±, CUDA 였λ₯˜ λ“±
# ν•΄κ²°: μ»¨ν…Œμ΄λ„ˆ μž¬μ‹œμž‘
sudo docker start ollama
# 둜그 확인
sudo docker logs ollama --tail 50

500 Internal Server Error

# 원인: λ°±μ—”λ“œ 였λ₯˜, Ollama μ—°κ²° μ‹€νŒ¨
# ν•΄κ²°: μ„œλΉ„μŠ€ μƒνƒœ 확인 ν›„ μž¬μ‹œμž‘
sudo systemctl status translation-service
sudo docker ps | grep ollama

GPU λ©”λͺ¨λ¦¬ λΆ€μ‘±μ‹œ

# GPU λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ 확인
nvidia-smi
# Ollama μ»¨ν…Œμ΄λ„ˆ μž¬μ‹œμž‘ (λͺ¨λΈ μ–Έλ‘œλ“œ)
sudo docker restart ollama
# 무거운 λͺ¨λΈ 제거
sudo docker exec ollama ollama rm <heavy_model>

μ›Ήμ‚¬μ΄νŠΈκ°€ μ•ˆ 열릴 λ•Œ

  1. nginx μƒνƒœ 확인: sudo systemctl status nginx
  2. λΉŒλ“œ 파일 확인: ls -la vite-frontend/dist/
  3. 포트 확인: lsof -i :80,443,3501
  4. nginx μž¬λ‘œλ“œ: sudo nginx -s reload

πŸ“Š ν˜„μž¬ 운영 상황

🎯 ν™œμ„± μ„€μ •

  • κΈ°λ³Έ μ—”μ§„: ollama-gemma2-sapie (ν•œκ΅­μ–΄ νŠΉν™”)
  • κΈ°λ³Έ 청크 크기: 10
  • κΈ°λ³Έ λ²ˆμ—­ λͺ¨λ“œ: srt_direct
  • μ΅œλŒ€ 파일 크기: 10MB
  • λŒ€μ²΄ μ—”μ§„: ν™œμ„±ν™” (μžλ™ 폴백)

πŸš€ μ„±λŠ₯ μ΅œμ ν™”

  • GPU 가속: RTX 3090 (24GB VRAM)
  • BF16 정밀도: 지원됨
  • λ™μ‹œ λ²ˆμ—­: 청크 λ‹¨μœ„ 병렬 처리
  • μ‹€μ‹œκ°„ μ§„ν–‰λ₯ : WebSocket μŠ€νƒ€μΌ 폴링

πŸ“ˆ λͺ¨λΈ μ„±λŠ₯ μˆœμœ„ (ν•œκ΅­μ–΄)

  1. Kanana 1.5 - Kakao (μ½”λ”©/μˆ˜ν•™/ν•¨μˆ˜ν˜ΈμΆœ νŠΉν™”)
  2. Sapie - ν•œκ΅­μ–΄ νŠΉν™” Gemma2 νŠœλ‹
  3. Exaone 3.5 - LG AI Research (ν•œκ΅­μ–΄)
  4. HyperCLOVAX - Naver (ν•œκ΅­μ–΄)

πŸ”‘ 지원 κΈ°λŠ₯

λ²ˆμ—­ κΈ°λŠ₯

  • 닀쀑 μ—”μ§„: 6개 둜컬 AI + 5개 ν΄λΌμš°λ“œ API
  • μžλ™ λŒ€μ²΄: μ—”μ§„ μ‹€νŒ¨μ‹œ μžλ™ 폴백
  • μ‹€μ‹œκ°„ μ§„ν–‰λ₯ : 청크별 진행상황 ν‘œμ‹œ
  • 배치 λ²ˆμ—­: λŒ€μš©λŸ‰ 파일 μ•ˆμ • 처리

μžλ§‰ 지원

  • 파일 ν˜•μ‹: SRT, VTT, ASS
  • λ²ˆμ—­ λͺ¨λ“œ: μžλ™, SRT 직접, κ΅¬λΆ„μž
  • νƒ€μž„μŠ€νƒ¬ν”„: 원본 μœ μ§€
  • 인코딩: UTF-8 μžλ™ λ³€ν™˜

API κΈ°λŠ₯

  • RESTful API: ν‘œμ€€ HTTP API
  • μ‹€μ‹œκ°„ μ§„ν–‰λ₯ : κΈ΄ λ²ˆμ—­ μž‘μ—… λͺ¨λ‹ˆν„°λ§
  • 였λ₯˜ 처리: μƒμ„Έν•œ 였λ₯˜ λ©”μ‹œμ§€
  • CORS 지원: 크둜슀 도메인 μš”μ²­

⚠️ μ€‘μš” 운영 κ·œμΉ™

βœ… ν•΄μ•Ό ν•  것

  • μ½”λ“œ μˆ˜μ • ν›„ λ°˜λ“œμ‹œ ν…ŒμŠ€νŠΈ
  • μ ˆλŒ€ 경둜 μ‚¬μš© (/home/purestory/...)
  • systemd둜 μ„œλΉ„μŠ€ 관리
  • Docker둜 Ollama 관리
  • GPU λ©”λͺ¨λ¦¬ λͺ¨λ‹ˆν„°λ§

❌ ν•˜μ§€ 말 것

  • ~ 경둜 μ‚¬μš© (μ˜λ„μΉ˜ μ•Šμ€ 폴더 생성)
  • pm2 μ‚¬μš© (systemd μ‚¬μš© 쀑)
  • 포트 번호 μž„μ˜ λ³€κ²½
  • Ollama λͺ¨λΈμ„ 직접 μ‚­μ œ
  • GPU μ˜€λ²„ν΄λŸ­ (μ•ˆμ •μ„± μš°μ„ )

πŸ”„ μ—…λ°μ΄νŠΈ νžˆμŠ€ν† λ¦¬

2025εΉ΄06月12ζ—₯ (μ΅œμ‹ )

  • βœ… Ollama μ—°κ²° μ•ˆμ •μ„± κ°œμ„ 
  • βœ… 500 Internal Server Error 문제 ν•΄κ²°
  • βœ… μ„œλΉ„μŠ€ μƒνƒœ λͺ¨λ‹ˆν„°λ§ κ°•ν™”
  • βœ… README.md κ°œμ„  및 μ„€μΉ˜ κ°€μ΄λ“œ μΆ”κ°€

2025εΉ΄06月07ζ—₯

  • βœ… Kakao Kanana 1.5-8B λͺ¨λΈ μΆ”κ°€ (BF16+Q8_0, 9.5GB)
  • βœ… κΈ°λ³Έ 엔진을 sapie둜 λ³€κ²½
  • βœ… GPU BF16 지원 확인 및 μ΅œμ ν™”
  • βœ… μ—”μ§„ μš°μ„ μˆœμœ„ μž¬μ‘°μ • (ν•œκ΅­μ–΄ νŠΉν™” λͺ¨λΈ μš°μ„ )
  • βœ… λŒ€μ²΄ μ—”μ§„ μ‹œμŠ€ν…œ κ°œμ„ 

2025εΉ΄06月06ζ—₯

  • βœ… Ollama GPU λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μ™„λ£Œ
  • βœ… 볡수 ν•œκ΅­μ–΄ νŠΉν™” λͺ¨λΈ μΆ”κ°€
  • βœ… μ‹€μ‹œκ°„ λ²ˆμ—­ μ§„ν–‰λ₯  ν‘œμ‹œ
  • βœ… 청크 λ‹¨μœ„ μ•ˆμ •μ  λ²ˆμ—­ μ‹œμŠ€ν…œ

🀝 κΈ°μ—¬ν•˜κΈ°

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

πŸ“„ λΌμ΄μ„ μŠ€

이 ν”„λ‘œμ νŠΈλŠ” MIT λΌμ΄μ„ μŠ€λ‘œ λ°°ν¬λ©λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ LICENSE νŒŒμΌμ„ μ°Έμ‘°ν•˜μ„Έμš”.

πŸ“ž μ—°λ½μ²˜


λ§ˆμ§€λ§‰ μ—…λ°μ΄νŠΈ: 2025εΉ΄06月12ζ—₯
버전: 2.1.0
μ„œλ²„: itsmyzone.iptime.org
GPU: RTX 3090 24GB (CUDA 12.8)

About

🌐 AI-powered multi-engine translation service with React frontend

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /