μ™œ μ ˆλŒ€ κ²½λ‘œκ°€ ν•„μš”ν•œκ°€? πŸ€”
μ›Ή μ„œλ²„ ν”„λ‘œκ·Έλž¨(Passenger, Apache, Nginx λ“±)은 μ‹œμŠ€ν…œ μˆ˜μ€€μ—μ„œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ— μ‚¬μš©μžμ˜ ν™˜κ²½ λ³€μˆ˜λ‚˜ μƒλŒ€ 경둜λ₯Ό μΈμ‹ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. λ”°λΌμ„œ μ •ν™•ν•œ Python 인터프리터 μœ„μΉ˜λ₯Ό μ ˆλŒ€ 경둜둜 지정해야 ν•©λ‹ˆλ‹€.

μ ˆλŒ€ κ²½λ‘œλž€ λ¬΄μ—‡μΌκΉŒμš”?

μ ˆλŒ€ κ²½λ‘œλŠ” 파일 μ‹œμŠ€ν…œμ˜ μ΅œμƒμœ„ 디렉토리뢀터 μ‹œμž‘ν•˜λŠ” 경둜λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, /var/www/vhosts/mysite.com/venv/bin/pythonκ³Ό 같이 전체 경둜λ₯Ό λͺ…μ‹œν•˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€.

특히 μ›Ή μ„œλ²„ ν”„λ‘œκ·Έλž¨(Passenger, Apache, Nginx λ“±)은 λ‹€μŒκ³Ό 같은 이유둜 μ ˆλŒ€ κ²½λ‘œκ°€ ν•„μš”ν•©λ‹ˆλ‹€:


1️⃣ Passenger의 μž‘λ™ 방식 πŸš€

  • PassengerλŠ” μ›Ή μ„œλ²„ (Apache/Nginx)의 λͺ¨λ“ˆλ‘œ λ™μž‘ν•©λ‹ˆλ‹€.
  • μ‹œμŠ€ν…œ κΆŒν•œμœΌλ‘œ μ‹€ν–‰λ˜λ―€λ‘œ, μ‚¬μš©μžμ˜ ν™˜κ²½λ³€μˆ˜λ‚˜ μƒλŒ€ 경둜λ₯Ό μΈμ‹ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€.
  • λ”°λΌμ„œ μ •ν™•ν•œ Python 인터프리터 μœ„μΉ˜λ₯Ό μ ˆλŒ€ 경둜둜 지정해야 ν•©λ‹ˆλ‹€.

2️⃣ Nginx μ„€μ • 파일의 μ œν•œμ‚¬ν•­ πŸ”§

  • Nginx μ„€μ • 파일 (nginx.conf)μ—μ„œλŠ” μ ˆλŒ€ 경둜만 μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • μƒλŒ€ 경둜 (~)λ₯Ό μ‚¬μš©ν•˜λ©΄ μ„€μ • 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

3️⃣ λ³΄μ•ˆ 및 μ•ˆμ •μ„± πŸ›‘οΈ

  • μ ˆλŒ€ κ²½λ‘œλŠ” μ‹€ν–‰ ν™˜κ²½κ³Ό 관계없이 항상 λ™μΌν•œ μœ„μΉ˜λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
  • μ‚¬μš©μž ν™ˆ 디렉토리 λ³€κ²½μ΄λ‚˜ μ‹œμŠ€ν…œ μ„€μ • 변경에도 영ν–₯을 받지 μ•Šμ•„ μ•ˆμ •μ„±μ΄ λ†’μ•„μ§‘λ‹ˆλ‹€.
  • μƒλŒ€ 경둜의 문제점: μƒλŒ€ κ²½λ‘œλŠ” μ‹€ν–‰λ˜λŠ” μœ„μΉ˜μ— 따라 달라지기 λ•Œλ¬Έμ— μ›Ή μ„œλ²„ ν™˜κ²½μ—μ„œ μ˜ˆμƒμΉ˜ λͺ»ν•œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ’‘ μ ˆλŒ€ 경둜 μ„€μ • 방법

1️⃣ which python μ‹€ν–‰ν•˜κΈ° πŸ”
which python λͺ…령은 ν˜„μž¬ μ‚¬μš© 쀑인 Python μΈν„°ν”„λ¦¬ν„°μ˜ μœ„μΉ˜λ₯Ό μ°ΎλŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

(venv) -bash-4.1$ which python
~/python.shop2world.info/venv/bin/python

2️⃣ ~ 뢀뢄을 /var/www/vhosts/[μ‚¬μš©μžλ„λ©”μΈ]으둜 λ³€κ²½ν•˜κΈ° 🏠

  • ~λŠ” μ‚¬μš©μžμ˜ ν™ˆ 디렉토리λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄, Shop2World ν˜ΈμŠ€νŒ…μ—μ„œλŠ” ν™ˆ 디렉토리가 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:
    /var/www/vhosts/[μ‚¬μš©μžλ„λ©”μΈ]

✏️ μ˜ˆμ‹œ

  • μ‚¬μš©μžμ˜ 도메인이 mysite.com이라면:
~/[μ„œλΈŒλ„λ©”μΈ]/venv/bin/python
↓
/var/www/vhosts/[μ‚¬μš©μžλ„λ©”μΈ]/[μ„œλΈŒλ„λ©”μΈ]/venv/bin/python

3️⃣ passenger_wsgi.py에 μ„€μ •ν•˜κΈ° ✍️

  • μ˜ˆμ‹œ:
    도메인이 mysite.com, μ„œλΈŒλ„λ©”μΈμ΄ python.mysite.com일 경우:
# μ˜ˆμ‹œ: 도메인이 mysite.com이고 μ„œλΈŒλ„λ©”μΈμ΄ python.mysite.com인 경우
INTERP = "/var/www/vhosts/mysite.com/python.mysite.com/venv/bin/python"

4️⃣ μ„€μ • 확인 방법 βœ…

  • κ²½λ‘œκ°€ μ˜¬λ°”λ₯Έμ§€ ν™•μΈν•˜λ €λ©΄
ls -l /var/www/vhosts/[μ‚¬μš©μžλ„λ©”μΈ]/[μ„œλΈŒλ„λ©”μΈ]/venv/bin/python
# ν•΄λ‹Ή 파일이 μ‘΄μž¬ν•œλ‹€λ©΄, κ²½λ‘œκ°€ μ •ν™•ν•©λ‹ˆλ‹€! πŸŽ‰

μš”μ•½ 🌈

  • Passenger 및 NginxλŠ” μ ˆλŒ€ 경둜λ₯Ό ν•„μš”λ‘œ ν•©λ‹ˆλ‹€.
  • λ³΄μ•ˆ, μ•ˆμ •μ„±, μ„€μ • 였λ₯˜ 방지λ₯Ό μœ„ν•΄ μ ˆλŒ€ 경둜λ₯Ό μ •ν™•νžˆ μ§€μ •ν•˜μ„Έμš”.
  • passenger_wsgi.py에 Python 경둜λ₯Ό μΆ”κ°€ν•˜κ³ , 파일 경둜λ₯Ό κΌ­ ν™•μΈν•˜μ„Έμš”! πŸš€