🚒 Openship 뢄석: μ°¨μ„ΈλŒ€ ν”Œλž«νΌ μ—”μ§€λ‹ˆμ–΄λ§μ„ μœ„ν•œ μ˜¬μΈμ› 자체 ν˜ΈμŠ€νŒ… 배포 μ†”λ£¨μ…˜

Openship (oblien/openship)은 μ˜€ν”ˆμ†ŒμŠ€ 기반의 자체 ν˜ΈμŠ€νŒ…(Self-hosted) 배포 ν”Œλž«νΌμž…λ‹ˆλ‹€. μ‰½κ²Œ 말해 κ°œμΈμ΄λ‚˜ νŒ€μ΄ 직접 μ„œλ²„μ— μ„€μΉ˜ν•΄μ„œ μ‚¬μš©ν•  수 μžˆλŠ” β€˜λ‚˜λ§Œμ˜ Vercel’ λ˜λŠ” 'λ‚˜λ§Œμ˜ Heroku’λ₯Ό λ§Œλ“€μ–΄μ£ΌλŠ” 도ꡬ라고 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

μ €μž₯μ†Œ(Repository)의 README λ¬Έμ„œλ₯Ό λ°”νƒ•μœΌλ‘œ λΆ„μ„ν•œ 핡심 λ‚΄μš©μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

1. μ£Όμš” νŠΉμ§• 및 λͺ©μ 

  • μ˜¬μΈμ›(All-in-One) 배포 μžλ™ν™”: GitHub μ €μž₯μ†Œλ‚˜ 둜컬 폴더λ₯Ό μ—°κ²°ν•˜λ©΄ μ½”λ“œλ₯Ό κ°μ§€ν•˜κ³ , λΉŒλ“œν•˜κ³ , λ°°ν¬ν•˜λ©°, 도메인 λΌμš°νŒ…κ³Ό SSL(TLS) μΈμ¦μ„œ λ°œκΈ‰κΉŒμ§€ λͺ¨λ“  과정을 μ•Œμ•„μ„œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  • λ‹€μ–‘ν•œ μΈν„°νŽ˜μ΄μŠ€ 지원: λ³΄ν†΅μ˜ 배포 도ꡬ듀이 CLIλ‚˜ μ›Ή λŒ€μ‹œλ³΄λ“œλ§Œ μ œκ³΅ν•˜λŠ” 것과 달리, Openship은 λ°μŠ€ν¬ν†± μ•±(macOS, Windows, Linux), μ›Ή λŒ€μ‹œλ³΄λ“œ, CLI의 3κ°€μ§€ 방식을 λͺ¨λ‘ μ§€μ›ν•©λ‹ˆλ‹€.
  • λ‹€μ–‘ν•œ ν™˜κ²½ 지원: Node, Python, Go, Rust, PHP, Ruby, Java, .NET 같은 μ–Έμ–΄λŠ” λ¬Όλ‘  Docker 및 λͺ¨λ…Έλ ˆν¬(Monorepo) ν™˜κ²½λ„ μ™„λ²½νžˆ μ§€μ›ν•©λ‹ˆλ‹€.
  • μ˜¬μΈμ› 인프라 관리: λ‹¨μˆœ μ•± 배포뿐만 μ•„λ‹ˆλΌ Postgres, MySQL, MongoDB, Redis λ“±μ˜ λ°μ΄ν„°λ² μ΄μŠ€μ™€ λ‚΄μž₯ 메일 μ„œλ²„(SMTP), μŠ€μΌ€μ€„λ§ λ°±μ—… κΈ°λŠ₯κΉŒμ§€ ν”Œλž«νΌ λ‚΄μ—μ„œ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

2. μž‘λ™ 방식 (νŒŒμ΄ν”„λΌμΈ)

λ”°λ‘œ λ³΅μž‘ν•œ μ„€μ • 파일(openship.json으둜 μ»€μŠ€ν…€λ„ κ°€λŠ₯)을 λ§Œλ“€μ§€ μ•Šμ•„λ„ λ‹€μŒ 과정을 κ±°μΉ©λ‹ˆλ‹€.

  1. 감지(Detect): package.jsonμ΄λ‚˜ docker-compose.yml, 락(lock) 파일 등을 읽어 μ–΄λ–€ μŠ€νƒμΈμ§€, νŒ¨ν‚€μ§€ λ§€λ‹ˆμ €λŠ” 무엇인지, λΉŒλ“œ/μ‹œμž‘ λͺ…령어와 포트λ₯Ό μžλ™ μœ μΆ”ν•©λ‹ˆλ‹€.
  2. λΉŒλ“œ(Build): νƒ€κ²Ÿ μ„œλ²„λ‚˜ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„° λ‘œμ»¬μ—μ„œ Docker 이미지 λ˜λŠ” λ² μ–΄(bare) 릴리슀둜 λΉŒλ“œν•˜κ³  이 μƒνƒœλ₯Ό μŠ€λƒ…μƒ·μœΌλ‘œ κ³ μ •ν•˜μ—¬ 둀백을 μš©μ΄ν•˜κ²Œ ν•©λ‹ˆλ‹€.
  3. μ‹€ν–‰(Run): μ™ΈλΆ€λ‘œ 직접 λ…ΈμΆœλ˜μ§€ μ•ŠλŠ” 루프백 포트둜 μ»¨ν…Œμ΄λ„ˆλ‚˜ 호슀트 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
  4. λΌμš°νŒ… 및 λ³΄μ•ˆ(Route + Secure): OpenResty(Nginx) 기반의 μ—£μ§€ μ„œλ²„κ°€ 도메인에 λ¦¬λ²„μŠ€ ν”„λ‘μ‹œλ₯Ό μ„€μ •ν•˜κ³  Let’s Encryptλ₯Ό 톡해 μΈμ¦μ„œλ₯Ό μžλ™ λ°œκΈ‰λ°›μŠ΅λ‹ˆλ‹€.

3. μ„€μΉ˜ 및 운영 λͺ¨λ“œ

μ‚¬μš©μžμ˜ ν™˜κ²½μ— 맞좰 λ‹€μ–‘ν•œ μ‹€ν–‰ 방식을 μ§€μ›ν•©λ‹ˆλ‹€.

  • λ°μŠ€ν¬ν†± μ•± (Solo): κ°€μž₯ λ…νŠΉν•œ νŠΉμ§• 쀑 ν•˜λ‚˜λ‘œ, 둜컬 PC에 앱을 κΉ”κ³  SSH둜 원격 μ„œλ²„μ— 접속해 배포λ₯Ό λͺ…λ Ήν•©λ‹ˆλ‹€. μ„œλ²„ μžμ²΄μ— 무거운 κ΄€λ¦¬μš© 데λͺ¬(Control Plane)을 λ„μšΈ ν•„μš”κ°€ μ—†μ–΄ 개인 κ°œλ°œμžμ—κ²Œ μ ν•©ν•©λ‹ˆλ‹€.
  • 자체 ν˜ΈμŠ€νŒ… μ„œλ²„ (Team/CI-CD): openship up λͺ…λ Ήμ–΄ ν•˜λ‚˜λ‘œ μ„œλ²„μ— Docker 기반의 전체 μŠ€νƒ(Postgres, Redis, API, λŒ€μ‹œλ³΄λ“œ, OpenResty μ—£μ§€)을 λ„μ›λ‹ˆλ‹€. νŒ€ λ‹¨μœ„λ‘œ μ‚¬μš©ν•˜κ±°λ‚˜ GitHub Webhook을 ν†΅ν•œ μžλ™ 배포(CI/CD)κ°€ ν•„μš”ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • Docker Compose (Raw): CLI λ§ˆλ²•μ‚¬ 없이 docker-compose.yml을 μ΄μš©ν•΄ 인프라λ₯Ό 직접 κ΅¬μ„±ν•˜κ³  μ œμ–΄ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

4. 기술 μŠ€νƒ (μ•„ν‚€ν…μ²˜ ꡬ성)

  • λΌμš°νŒ… / ν”„λ‘μ‹œ: OpenResty (Nginx ν™˜κ²½μ— Lua 슀크립트λ₯Ό 더해 동적 λΌμš°νŒ… 처리)
  • λ°μ΄ν„°λ² μ΄μŠ€ & μΊμ‹œ: PostgreSQL (메인 DB), Redis (캐싱 및 μž‘μ—… 큐)
  • 인프라: Docker 기반 μ»¨ν…Œμ΄λ„ˆ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ (호슀트의 Docker Socket을 λ§ˆμš΄νŠΈν•˜μ—¬ 앱듀을 μ»¨ν…Œμ΄λ„ˆλ‘œ λΉŒλ“œ 및 μ‹€ν–‰)
  • 개발 ν™˜κ²½: 둜컬 개발 및 λΉŒλ“œ 툴둜 Bun을 μ‚¬μš©ν•˜κ³  μžˆλŠ” 것이 λˆˆμ— λ•λ‹ˆλ‹€.

[좜처] Openship - λ‚΄μž₯ CI/CDλ₯Ό κ°–μΆ˜ μ…€ν”„ ν˜ΈμŠ€νŒ… 배포 ν”Œλž«νΌ | GeekNews

1개의 μ’‹μ•„μš”