{"id":5229,"date":"2025-12-18T08:11:28","date_gmt":"2025-12-17T23:11:28","guid":{"rendered":"https:\/\/secondlife.lol\/?p=5229"},"modified":"2025-12-18T08:35:17","modified_gmt":"2025-12-17T23:35:17","slug":"chemicloud-python-3-12-django-setup","status":"publish","type":"post","link":"https:\/\/secondlife.lol\/zh\/chemicloud-python-3-12-django-setup\/","title":{"rendered":"Chemicloud Python 3.12 \ud658\uacbd\ubd80\ud130 \uc7a5\uace0 \uc900\ube44\uae4c\uc9c0, \uc9c4\uc9dc \uc0bd\uc9c8 \uae30\ub85d 2\ud3b8"},"content":{"rendered":"<style>.kb-image5229_993fe3-f5 .kb-image-has-overlay:after{opacity:0.3;}<\/style>\n<div class=\"wp-block-kadence-image kb-image5229_993fe3-f5\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"600\" height=\"427\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-36-600x427.jpg\" alt=\"Chemicloud Python 3.12\" class=\"kb-img wp-image-5255\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-36-600x427.jpg 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-36-300x214.jpg 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-36-768x547.jpg 768w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-36-18x12.jpg 18w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-36.jpg 812w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u201c\uc65c \uc790\uafb8 3.6\uc774\uc57c\u2026\u201d <a href=\"http:\/\/chemicloud.com\" target=\"_blank\" rel=\"noopener\">Chemicloud<\/a> Python 3.12 \uc804\uc7c1\uc758 \uc2dc\uc791<\/h2>\n\n\n\n<p><a href=\"http:\/\/studymate.secondlife.lol\">secondlife.lol<\/a> \ub3c4\uba54\uc778\uae4c\uc9c0 \uc5f0\uacb0\ud588\uc73c\ub2c8,<br>\uc774\uc81c \u201c\uc7a5\uace0\ub9cc \uc62c\ub9ac\uba74 \ub05d!\u201d\uc774\ub77c\uace0 \uc0dd\uac01\ud588\uc8e0.<\/p>\n\n\n\n<p>\ud558\uc9c0\ub9cc SSH\ub97c \ub531 \uc5f4\uace0 <code>python3 --version<\/code>\uc744 \uccd0\ubcf4\ub2c8\u2026<br><strong>3.6.x<\/strong> \ud83e\udd2f<\/p>\n\n\n\n<p>\ub0b4 \ub9c8\uc74c \uc18d \uacc4\ud68d\uc740 \u201cChemicloud Python 3.12 \ud658\uacbd + \ucd5c\uc2e0 \uc7a5\uace0 + AI \ud655\uc7a5\u201d\uc778\ub370,<br>\uc11c\ubc84\ub294 \ubb35\uc9c1\ud558\uac8c \uc608\uc804 \ubc84\uc804 Python\uc744 \ub4e4\uace0 \ubc84\ud2f0\uace0 \uc788\ub294 \uac81\ub2c8\ub2e4.<br>\ucc98\uc74c\uc5d4 <code>python3 -m venv virtualenv\/studymate_venv<\/code>\ub85c \uc9c1\uc811 venv\ub97c \ub9cc\ub4e4\ub2e4\uac00<br><code>get-pip.py<\/code> \ubc84\uc804 \uc5d0\ub7ec\uc5d0 \uce58\uc774\uace0, \uacbd\ub85c \ud5f7\uac08\ub9ac\uace0,<br>\u201c\ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12\ub294 \uc5c6\ub294 \uac74\uac00?\u201d\ub77c\ub294 \uba58\ubd95\uae4c\uc9c0 \uc654\uc8e0.<\/p>\n\n\n\n<p>\uacb0\ub860\ubd80\ud130 \ub9d0\ud558\uba74,<br>\uc815\ub2f5\uc740 \u201cSSH\uc5d0\uc11c \uc5b5\uc9c0\ub85c \ub9cc\ub4e4\uc9c0 \ub9d0\uace0, cPanel\uc758 Setup Python App\ub97c \ud65c\uc6a9\ud558\uc790\u201d\uc600\uc2b5\ub2c8\ub2e4.<br>\uc774 2\ud3b8\uc5d0\uc11c\ub294 \uadf8 \uacfc\uc815\uc744 <strong>\ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12<\/strong> \uae30\uc900\uc73c\ub85c \uc815\ub9ac\ud574\ubd05\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Use cases: \uc65c \uad73\uc774 \ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12\uc5ec\uc57c \ud588\ub098?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. \ucd5c\uc2e0 \uc7a5\uace0 + AI \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc4f0\ub824\uba74<\/h3>\n\n\n\n<p>\uc694\uc998 \ub098\uc624\ub294<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Django \ucd5c\uc2e0 \ubc84\uc804<\/li>\n\n\n\n<li>OpenAI\u00b7Anthropic\u00b7Groq \uac19\uc740 LLM \ud074\ub77c\uc774\uc5b8\ud2b8<\/li>\n\n\n\n<li>FastAPI, LangChain, Pydantic \uacc4\uc5f4 \ub77c\uc774\ube0c\ub7ec\ub9ac<\/li>\n<\/ul>\n\n\n\n<p>\ub2e4\ub4e4 \ucd5c\uc18c \uc694\uad6c \ubc84\uc804\uc774 <code>Python 3.10<\/code> \uc774\uc0c1\uc778 \uacbd\uc6b0\uac00 \ub9ce\uc544\uc694.<br>\uc0ac\ub0b4\ubca4\ucc98\uc5d0\uc11c <strong>AI \uae30\ubc18 \uc6f9\uc11c\ube44\uc2a4<\/strong>\ub97c \ub9cc\ub4e4\ub824\uba74,<br>\ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12 \ud658\uacbd\uc774 \uc0ac\uc2e4\uc0c1 <strong>\uae30\ubcf8 \uc2a4\ud399<\/strong>\uc774 \ub418\uc5b4\ubc84\ub9b0 \uac70\uc8e0.<\/p>\n\n\n\n<p>\uadf8\ub798\uc11c<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ub85c\uceec \uac1c\ubc1c: Python 3.12<\/li>\n\n\n\n<li>\uc11c\ubc84: \ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12<\/li>\n\n\n\n<li>\uc7a5\uace0: dev \/ prod \uc124\uc815 \ubd84\ub9ac<\/li>\n<\/ul>\n\n\n\n<p>\uc774\ub807\uac8c \ub9de\ucdb0\ub450\uba74, \ub098\uc911\uc5d0 AI \uae30\ub2a5\uc744 \ubd99\uc774\ub4e0 \ubb58 \ud558\ub4e0<br>\ubc84\uc804 \ucda9\ub3cc \uc5c6\uc774 \ud655\uc7a5\ud558\uae30\uac00 \ud6e8\uc52c \uc218\uc6d4\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. \uc0ac\ub0b4\ubca4\ucc98 \ub370\ubaa8\ub97c \u201c\ube60\ub974\uac8c\u201d \ub3cc\ub9ac\uace0 \uc2f6\uc744 \ub54c<\/h3>\n\n\n\n<p>\uc0ac\ub0b4\ubca4\ucc98\ub294 \uc18d\ub3c4 \uc2f8\uc6c0\uc774\ub2c8\uae4c\uc694.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\uc11c\ubc84 OS \uc9c1\uc811 \uad00\ub9ac X<\/li>\n\n\n\n<li>docker-compose \ubcf5\uc7a1\ud55c \uc138\ud305 X<\/li>\n\n\n\n<li>\uadf8\ub0e5 <strong>Chemicloud Python 3.12+ Setup Python App<\/strong> \u81f3<br>\u201cURL\ub9cc \uc788\uc73c\uba74 \uc5b4\ub514\uc11c\ub4e0 \uc811\uc18d\ub418\ub294 \ub370\ubaa8\u201d\ub97c \ube68\ub9ac \ub9cc\ub4dc\ub294 \uac8c \ud575\uc2ec.<\/li>\n<\/ul>\n\n\n\n<p>LLM \uae30\ubc18 \uae30\ub2a5\uc744 \ucd94\uac00\ud574\ub3c4,<br>\uc774\ubbf8 \ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12 \uac00\uc0c1\ud658\uacbd \uc548\uc5d0 \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\ub4e4\uc744 \uc124\uce58\ud574 \ub450\uba74<br>\ubc14\ub85c \uc7a5\uace0 \ubdf0\uc5d0\uc11c \ubd88\ub7ec \uc4f0\uba74 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. \uc5ec\ub7ec \ud504\ub85c\uc81d\ud2b8\ub97c \ud55c \uc11c\ubc84\uc5d0\uc11c \ub098\ub220 \ub3cc\ub9ac\uace0 \uc2f6\uc744 \ub54c<\/h3>\n\n\n\n<p>\uae30\uc874 \ud504\ub85c\uc81d\ud2b8\ub3c4 \uac19\uc740 \uc11c\ubc84\uc5d0 \uc788\uc5c8\uae30 \ub54c\ubb38\uc5d0,<\/p>\n\n\n\n<p>\uc774\ub807\uac8c \uc5ec\ub7ec \uc0ac\uc774\ud2b8\ub97c \ud558\ub098\uc758 ChemiCloud \uacc4\uc815\uc5d0\uc11c \ub3cc\ub824\uc57c \ud588\uc8e0.<br>\uc774\ub54c <strong>\uac01 \ub3c4\uba54\uc778\ubcc4\ub85c Setup Python App + \ubcc4\ub3c4 venv<\/strong> \uad6c\uc870\ub97c \uc4f0\uba74,<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12 \ud658\uacbd\uc744 \ud504\ub85c\uc81d\ud2b8\ubcc4\ub85c<br>\ub3c5\ub9bd(venv) + \ub3c5\ub9bd(Document Root) \uc2dc\ud0ac \uc218 \uc788\uc5b4\uc11c<\/li>\n\n\n\n<li>\ub098\uc911\uc5d0 \ud328\ud0a4\uc9c0 \ubc84\uc804\uc774 \ub2ec\ub77c\ub3c4 \uc11c\ub85c \uc601\ud5a5\uc744 \uac70\uc758 \uc8fc\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Organizing: \ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12 + \uc7a5\uace0 \uc138\ud305 \ub2e8\uacc4\ubcc4 \uac00\uc774\ub4dc<\/h2>\n\n\n<style>.kb-image5229_f97e55-95 .kb-image-has-overlay:after{opacity:0.3;}<\/style>\n<div class=\"wp-block-kadence-image kb-image5229_f97e55-95\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"600\" height=\"273\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-37-600x273.jpg\" alt=\"studymate_project image\" class=\"kb-img wp-image-5259\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-37-600x273.jpg 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-37-300x137.jpg 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-37-768x350.jpg 768w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-37-18x8.jpg 18w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-37.jpg 812w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/figure><\/div>\n\n\n\n<p>\uc774\uc81c \uc2e4\uc81c\ub85c \ud588\ub358 \uc21c\uc11c\ub97c<br>\u201c\ub2e4\uc2dc \ud574\ub3c4 \uadf8\ub300\ub85c \ub530\ub77c\ud560 \uc218 \uc788\uac8c\u201d \ub2e8\uacc4\ubcc4\ub85c \uc815\ub9ac\ud574\ubcfc\uac8c\uc694.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1\ub2e8\uacc4. Application root \ub9cc\ub4e4\uae30 \u2013 studymate_project<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>cPanel \ub85c\uadf8\uc778 \u2192 <strong>File Manager<\/strong><\/li>\n\n\n\n<li>\ud648 \ub514\ub809\ud1a0\ub9ac \uc544\ub798\uc5d0 <code>studymate_project<\/code> \ud3f4\ub354 \uc0dd\uc131<\/li>\n\n\n\n<li>\ub85c\uceec\uc5d0\uc11c \uac1c\ubc1c\ud558\ub358 \uc7a5\uace0 \ud504\ub85c\uc81d\ud2b8\ub97c \uc774 \ud3f4\ub354\ub85c \uc5c5\ub85c\ub4dc<\/li>\n<\/ol>\n\n\n\n<p>\uc774\uc81c \ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12 \ud658\uacbd\uc774 \ubd99\uc744 \u201c\uc9d1\u201d\uc774 \uc0dd\uacbc\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u203b \uae30\uc874\uc5d0 <code>public_html<\/code>\uc774\ub098 \ub2e4\ub978 \ud504\ub85c\uc81d\ud2b8 \ud3f4\ub354\uac00 \uc788\uc5b4\ub3c4 \uc0c1\uad00 \uc5c6\uc74c.<br><code>studymate.secondlife.lol<\/code> \ub3c4\uba54\uc778\uc740 <code>\/home2\/secondlife\/<code>studymate.secondlife.lol<\/code><\/code> \ub97c Document Root\ub85c \uc4f0\uace0,<br>\uac70\uae30\uc11c <code>passenger_wsgi.py<\/code> \"(\u300a\u4e16\u754c\u4eba\u6743\u5ba3\u8a00\u300b) <code><code><code>studymate<\/code><\/code>_project<\/code>\ub97c \ubc14\ub77c\ubcf4\uac8c \ud560 \uc218\ub3c4 \uc788\uace0,<br>Application root \uc790\uccb4\ub97c <code><code><code>studymate<\/code><\/code>_project<\/code>\ub85c \uc9c0\uc815\ud558\ub294 \ubc29\uc2dd\ub3c4 \uac00\ub2a5\ud569\ub2c8\ub2e4.<br>\uc5ec\uae30\uc11c\ub294 Setup Python App\uc5d0\uc11c <strong>Application root\ub97c <code><code><code>studymate<\/code><\/code>_project<\/code>\ub85c \uc124\uc815\ud558\ub294 \ucf00\uc774\uc2a4<\/strong>\ub85c \uc124\uba85\ud569\ub2c8\ub2e4.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">2\ub2e8\uacc4. Setup Python App\uc5d0\uc11c <strong>Chemicloud Python 3.12<\/strong> \u521b\u5efa\u5e94\u7528\u7a0b\u5e8f<\/h3>\n\n\n<style>.kb-image5229_5e4fa0-ae .kb-image-has-overlay:after{opacity:0.3;}<\/style>\n<div class=\"wp-block-kadence-image kb-image5229_5e4fa0-ae\"><figure class=\"aligncenter size-medium_large\"><img decoding=\"async\" width=\"768\" height=\"294\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-38-768x294.jpg\" alt=\"Chemicloud Python 3.12 setup image\" class=\"kb-img wp-image-5261\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-38-768x294.jpg 768w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-38-300x115.jpg 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-38-600x230.jpg 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-38-18x7.jpg 18w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-38.jpg 1200w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><\/figure><\/div>\n\n\n\n<ol class=\"wp-block-list\">\n<li>cPanel\uc5d0\uc11c <strong>Setup Python App<\/strong> \u70b9\u51fb<\/li>\n\n\n\n<li><code>Create Application<\/code> \u70b9\u51fb\u6309\u94ae<\/li>\n\n\n\n<li>\ub2e4\uc74c\ucc98\ub7fc \uc785\ub825:\n<ul class=\"wp-block-list\">\n<li><strong>Python version:<\/strong> <code>3.12.11<\/code> (\ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12)<\/li>\n\n\n\n<li><strong>Application root:<\/strong> <code><code><code>studymate<\/code><\/code>_project<\/code><\/li>\n\n\n\n<li><strong>Application URL:<\/strong> <code>secondlife.lol \/<\/code><\/li>\n\n\n\n<li><strong>Application startup file:<\/strong> <code>passenger_wsgi.py<\/code><\/li>\n\n\n\n<li><strong>Application Entry point:<\/strong> <code>application<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\uc800\uc7a5\ud558\uba74, \uc0c1\ub2e8\uc5d0 \uc774\ub7f0 \uc548\ub0b4 \ubb38\uad6c\uac00 \ub098\uc635\ub2c8\ub2e4\n<ul class=\"wp-block-list\">\n<li><code>source \/home2\/secondlife\/virtualenv\/studymate_project\/3.12\/bin\/activate &amp;&amp; cd \/home2\/<code>secondlife<\/code>\/<code>studymate<\/code>_project <\/code><\/li>\n\n\n\n<li>\uc774\uac8c \ubc14\ub85c <strong>Chemicloud Python 3.12 \uac00\uc0c1\ud658\uacbd \uc9c4\uc785\uc6a9 \uba85\ub839\uc5b4<\/strong>\u4f8b\u5982<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>\uc774 \ub2e8\uacc4\uac00 \ub05d\ub098\uba74:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>\/home2\/secondlife\/virtualenv\/studymate_project\/3.12\/<\/code><br>\uacbd\ub85c\uc5d0 <strong><strong>Chemicloud Python 3.12<\/strong> \uae30\ubc18 venv<\/strong>\uac00 \uc790\ub3d9\uc73c\ub85c \uc0dd\uc131\ub429\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3\ub2e8\uacc4. SSH\uc5d0\uc11c venv \uc9c4\uc785 + \ud328\ud0a4\uc9c0 \uc124\uce58<\/h3>\n\n\n\n<p>\ub85c\uceec \ud130\ubbf8\ub110\uc774\ub098 ChemiCloud \uc6f9 \ud130\ubbf8\ub110\uc5d0\uc11c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/home2\/secondlife\nsource virtualenv\/studymate_project\/3.12\/bin\/activate\ncd studymate_project\n\npython --version<\/code><\/pre>\n\n\n\n<p>\u5176\u4e2d<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Python 3.12.11<\/code><\/pre>\n\n\n\n<p>\uc774 \ub098\uc624\uba74,<br>\u201c\uc9c0\uae08 \uc774 \uc258\uc740 Chemicloud Python 3.12 \uac00\uc0c1\ud658\uacbd \uc704\uc5d0 \uc788\ub2e4\u201d\ub294 \ub73b\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc774\uc81c \uc7a5\uace0\uc640 \uac01\uc885 \ud328\ud0a4\uc9c0\ub97c \uc124\uce58\ud574 \uc90d\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install --upgrade pip\npip install -r requirements.txt\n# requirements.txt\uac00 \uc5c6\ub2e4\uba74 \ucd5c\uc18c\ud55c\n# pip install django\n# \uc815\ub3c4\ub294 \uc124\uce58<\/code><\/pre>\n\n\n\n<p>\u73b0\u5728 <code>python manage.py check<\/code> \ub97c \uc2e4\ud589\ud588\uc744 \ub54c<br>\ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12 \ud658\uacbd \uae30\uc900\uc73c\ub85c \uc5d0\ub7ec\uac00 \uc5c6\ub294\uc9c0 \ud655\uc778\ud560 \uc218 \uc788\uc5b4\uc694.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DJANGO_SETTINGS_MODULE=config.settings.prod python manage.py check<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4\ub2e8\uacc4. passenger_wsgi.py\ub97c \uc7a5\uace0\uc6a9\uc73c\ub85c \uc815\ub9ac<\/h3>\n\n\n\n<p>\ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc Setup Python App\ub294<br>\uae30\ubcf8 \ud15c\ud50c\ub9bf <code>passenger_wsgi.py<\/code>\ub97c \ub9cc\ub4e4\uc5b4 \uc8fc\ub294\ub370,<br>\uc774\uac78 \uadf8\ub300\ub85c \uc4f0\uba74 <code>load_source<\/code> \uac19\uc740 \ucf54\ub4dc \ub54c\ubb38\uc5d0<br>\uc790\uae30 \uc790\uc2e0\uc744 \uc7ac\uadc0 import \ud558\ub294 \ubb38\uc81c\uac00 \uc0dd\uae38 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ucd5c\uc885\uc801\uc73c\ub85c \uc815\ub9ac\ub41c \ubc84\uc804\uc740 \uc774\ub807\uac8c \uc2ec\ud50c\ud588\uc5b4\uc694:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \/home2\/secondlife\/studymate_project\/passenger_wsgi.py\nimport os\nimport sys\nfrom pathlib import Path\n\n# \ud504\ub85c\uc81d\ud2b8 \ub8e8\ud2b8 (manage.py\uac00 \uc788\ub294 \ud3f4\ub354)\nBASE_DIR = Path(__file__).resolve().parent\n\n# \ud504\ub85c\uc81d\ud2b8 \ub8e8\ud2b8\ub97c PYTHONPATH\uc5d0 \ucd94\uac00\nif str(BASE_DIR) not in sys.path:\n    sys.path.insert(0, str(BASE_DIR))\n\n# \uc6b4\uc601\uc6a9 settings \ubaa8\ub4c8 \uc9c0\uc815\nos.environ.setdefault(\"DJANGO_SETTINGS_MODULE\", \"config.settings.prod\")\n\n# Django WSGI application \uc0dd\uc131\nfrom django.core.wsgi import get_wsgi_application\napplication = get_wsgi_application()\n<\/code><\/pre>\n\n\n\n<p>\uc774\ub807\uac8c \ud574\ub450\uba74<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12 venv\uc5d0\uc11c<\/li>\n\n\n\n<li><code>config\/settings\/prod.py<\/code>\ub97c \uae30\uc900\uc73c\ub85c<\/li>\n\n\n\n<li>\uc7a5\uace0 \uc571\uc774 \uae54\ub054\ud558\uac8c \uc62c\ub77c\uc635\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">5\ub2e8\uacc4. .env + base.py\ub85c \ud658\uacbd\ubcc0\uc218 \uad00\ub9ac<\/h3>\n\n\n<style>.kb-image5229_e1ee43-95 .kb-image-has-overlay:after{opacity:0.3;}<\/style>\n<div class=\"wp-block-kadence-image kb-image5229_e1ee43-95\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"600\" height=\"328\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-35-600x328.jpg\" alt=\"env + base.py image\" class=\"kb-img wp-image-5251\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-35-600x328.jpg 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-35-300x164.jpg 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-35-768x419.jpg 768w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-35-18x10.jpg 18w, https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-35.jpg 1024w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/figure><\/div>\n\n\n\n<p>\uc7a5\uace0 \uc124\uc815\uc740<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>config\/settings\/base.py<\/code><\/li>\n\n\n\n<li><code>config\/settings\/dev.py<\/code><\/li>\n\n\n\n<li><code>config\/settings\/prod.py<\/code><\/li>\n<\/ul>\n\n\n\n<p>\uc774\ub807\uac8c \ub098\ub220\uc11c \uad00\ub9ac\ud588\uc5b4\uc694.<br>\ud575\uc2ec\uc740 <strong>BASE_DIR\uc5d0 <code>.env<\/code>\ub97c \ub450\uace0, base.py\uc5d0\uc11c \ub531 \ud55c \ubc88 load_dotenv()\ub97c \ud638\ucd9c<\/strong>\ud558\ub294 \uac83.<\/p>\n\n\n\n<p><code>base.py<\/code> \uc0c1\ub2e8\uc740 \uc774\ub807\uac8c \ub9de\ucdc4\uc2b5\ub2c8\ub2e4:<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>import os\nfrom pathlib import Path\nfrom dotenv import load_dotenv\n\nBASE_DIR = Path(__file__).resolve().parent.parent.parent\nenv_path = BASE_DIR \/ \".env\"\nload_dotenv(env_path)<\/code><\/pre>\n\n\n\n<p><code>.env<\/code> \uc608\uc2dc\ub294:<\/p>\n\n\n\n<pre class=\"wp-block-code language-python\"><code>SECRET_KEY=\ub79c\ub364_\uc601\ubb38_\uc22b\uc790_\uae30\ud638_\ud0a4\nDEBUG=False\nALLOWED_HOSTS=secondlife.lol,www.secondlife.lol\n\nDATABASE_URL=sqlite:\/\/\/\/home2\/secondlife\/studymate_project\/db.sqlite3\n\nSECURE_SSL_REDIRECT=True\nSECURE_HSTS_SECONDS=31536000<\/code><\/pre>\n\n\n\n<p>\uc5ec\uae30\uc11c \ud558\ub098 \ud06c\uac8c \ubc30\uc6b4 \uc810:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>.env \uac12\uc5d0\ub294 \ud55c\uae00 \uc4f0\uba74 \uc548 \ub41c\ub2e4<\/strong>!!<br>(\ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12 \ud658\uacbd\uc758 <code>os.environ<\/code>\uc774 ASCII \ub85c\ucf00\uc77c\uc774\ub77c<br>\ud55c\uae00\uc774 \ub4e4\uc5b4\uac00\uba74 <code>UnicodeEncodeError<\/code>\ub85c 500 \uc5d0\ub7ec\ud83d\udd25)<\/p>\n<\/blockquote>\n\n\n\n<p>\uadf8\ub798\uc11c \uc124\uba85\uc740 \uc804\ubd80 <code>#<\/code> \uc8fc\uc11d\uc73c\ub85c \ube7c\uace0,<br>\uc2e4\uc81c \uac12\uc5d0\ub294 \uc601\ubb38\u00b7\uc22b\uc790\u00b7\uae30\ud638\ub9cc \uc0ac\uc6a9\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc815\ub9ac\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6\ub2e8\uacc4. migrate, collectstatic, \uadf8\ub9ac\uace0 Restart<\/h3>\n\n\n\n<p>\ub9c8\uc9c0\ub9c9\uc740 \ub8e8\ud2f4\uc774\uc5d0\uc694.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python manage.py migrate\npython manage.py collectstatic\npython manage.py createsuperuser  # \ucc98\uc74c \ud55c \ubc88<\/code><\/pre>\n\n\n\n<p>\uadf8\ub9ac\uace0 cPanel \u2192 <strong>Setup Python App \u2192 secondlife.lol \uc571 \u2192 Restart<\/strong> \ubc84\ud2bc \ud074\ub9ad.<\/p>\n\n\n\n<p>\u73b0\u5728\uff0c\u5728\u6d4f\u89c8\u5668\u4e2d\u952e\u5165 <code>https:\/\/studymate.secondlife.lol<\/code>\uc5d0 \uc811\uc18d\ud558\uba74,<br><strong>\ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12 \uae30\ubc18\uc758 \uc7a5\uace0 \uc11c\ube44\uc2a4<\/strong>\uac00 \ub4dc\ub514\uc5b4 \uc0b4\uc544\ub0a9\ub2c8\ub2e4 \ud83c\udf89<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\uc815\ub9ac: \ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12 \uc138\ud305, \ud55c \uc904 \uc694\uc57d<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SSH\ub85c \uc9c1\uc811 venv \ub9cc\ub4e4\ub824\uace0 \uc560\uc4f0\uae30\ubcf4\ub2e4,<br><strong>Setup Python App\uc5d0\uc11c \ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12 \uc571\uc744 \uba3c\uc800 \ub9cc\ub4e4 \uac83<\/strong><\/li>\n\n\n\n<li>\uc0dd\uc131\ub41c venv \uacbd\ub85c<br><code>\/home2\/\uacc4\uc815\uba85\/virtualenv\/\uc571\uc774\ub984\/3.12\/<\/code><br>\ub97c \uadf8\ub300\ub85c \uc0ac\uc6a9<\/li>\n\n\n\n<li><code>passenger_wsgi.py<\/code>\ub294 \ub531 \uc138 \uc904\ub9cc \uae30\uc5b5:\n<ol class=\"wp-block-list\">\n<li><code>sys.path<\/code>\uc5d0 BASE_DIR \ucd94\uac00<\/li>\n\n\n\n<li><code>DJANGO_SETTINGS_MODULE=config.settings.prod<\/code><\/li>\n\n\n\n<li><code>get_wsgi_application()<\/code> \u81f4\u7535<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li><code>.env<\/code>\ub294 BASE_DIR\uc5d0 \ub450\uace0,<br><strong>\uac12\uc5d0\ub294 \ud55c\uae00 \uae08\uc9c0, \uc124\uba85\uc740 \uc8fc\uc11d\uc5d0\ub9cc<\/strong><\/li>\n<\/ul>\n\n\n\n<p>\uc774 \uad6c\uc870\ub9cc \uc7a1\uc544\ub450\uba74,<br>\uc55e\uc73c\ub85c \ub2e4\ub978 \ud504\ub85c\uc81d\ud2b8\ub97c \uc62c\ub9b4 \ub54c\ub3c4<br>\u201c\ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12 \uc138\ud305 \u2192 \uc7a5\uace0 \ubd99\uc774\uae30\u201d\ub294<br>\uac70\uc758 \ud15c\ud50c\ub9bf\ucc98\ub7fc \uc7ac\uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ub2e4\uc74c 3\ud3b8\uc5d0\uc11c\ub294<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>dev \/ prod \uc124\uc815\uc744 \ubd84\ub9ac\ud558\ub294 \ubc29\ubc95,<br><code>.env<\/code> \uc124\uacc4 \ud301,<br>\uadf8\ub9ac\uace0 \uc0ac\ub0b4\ubca4\ucc98 \ud658\uacbd\uc5d0\uc11c \u201c\uc2e4\uc218\ud574\ub3c4 \ubcf5\uad6c \uc26c\uc6b4 \uad6c\uc870\u201d\ub97c \uc5b4\ub5bb\uac8c \ub9cc\ub4dc\ub294\uc9c0<\/p>\n<\/blockquote>\n\n\n\n<p>\ub97c \uc774\uc57c\uae30\ud574 \ubcfc\uac8c\uc694.<\/p>","protected":false},"excerpt":{"rendered":"<p>\u201c\uc65c \uc790\uafb8 3.6\uc774\uc57c\u2026\u201d Chemicloud Python 3.12 \uc804\uc7c1\uc758 \uc2dc\uc791 secondlife.lol \ub3c4\uba54\uc778\uae4c\uc9c0&#8230;<\/p>","protected":false},"author":3,"featured_media":5255,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[15],"tags":[979,812,988,984,985,987,989,977,986,983],"class_list":["post-5229","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-it-jewel","tag-ai-","tag-django","tag-naxdax","tag-python-3-12","tag-setup-python-app","tag-987","tag-989","tag-977","tag-986","tag---3-12"],"taxonomy_info":{"category":[{"value":15,"label":"D \ubcf4\ubb3c\ucc3d\uace0(Jewel)"}],"post_tag":[{"value":979,"label":"AI \uc6f9\uc11c\ube44\uc2a4"},{"value":812,"label":"Django"},{"value":988,"label":"Naxdax"},{"value":984,"label":"Python 3.12"},{"value":985,"label":"Setup Python App"},{"value":987,"label":"\uac00\uc0c1\ud658\uacbd"},{"value":989,"label":"\uc11c\ubc84\uc14b\uc5c5"},{"value":977,"label":"\uc7a5\uace0 \ubc30\ud3ec"},{"value":986,"label":"\ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc"},{"value":983,"label":"\ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12"}]},"featured_image_src_large":["https:\/\/secondlife.lol\/wp-content\/uploads\/2025\/12\/image-36-600x427.jpg",600,427,true],"author_info":{"display_name":"TERE","author_link":"https:\/\/secondlife.lol\/zh\/author\/tere\/"},"comment_info":0,"category_info":[{"term_id":15,"name":"D \ubcf4\ubb3c\ucc3d\uace0(Jewel)","slug":"it-jewel","term_group":0,"term_taxonomy_id":15,"taxonomy":"category","description":"","parent":0,"count":55,"filter":"raw","cat_ID":15,"category_count":55,"category_description":"","cat_name":"D \ubcf4\ubb3c\ucc3d\uace0(Jewel)","category_nicename":"it-jewel","category_parent":0}],"tag_info":[{"term_id":979,"name":"AI \uc6f9\uc11c\ube44\uc2a4","slug":"ai-%ec%9b%b9%ec%84%9c%eb%b9%84%ec%8a%a4","term_group":0,"term_taxonomy_id":979,"taxonomy":"post_tag","description":"","parent":0,"count":4,"filter":"raw"},{"term_id":812,"name":"Django","slug":"django","term_group":0,"term_taxonomy_id":812,"taxonomy":"post_tag","description":"","parent":0,"count":10,"filter":"raw"},{"term_id":988,"name":"Naxdax","slug":"naxdax","term_group":0,"term_taxonomy_id":988,"taxonomy":"post_tag","description":"","parent":0,"count":4,"filter":"raw"},{"term_id":984,"name":"Python 3.12","slug":"python-3-12","term_group":0,"term_taxonomy_id":984,"taxonomy":"post_tag","description":"","parent":0,"count":3,"filter":"raw"},{"term_id":985,"name":"Setup Python App","slug":"setup-python-app","term_group":0,"term_taxonomy_id":985,"taxonomy":"post_tag","description":"","parent":0,"count":2,"filter":"raw"},{"term_id":987,"name":"\uac00\uc0c1\ud658\uacbd","slug":"%ea%b0%80%ec%83%81%ed%99%98%ea%b2%bd","term_group":0,"term_taxonomy_id":987,"taxonomy":"post_tag","description":"","parent":0,"count":4,"filter":"raw"},{"term_id":989,"name":"\uc11c\ubc84\uc14b\uc5c5","slug":"%ec%84%9c%eb%b2%84%ec%85%8b%ec%97%85","term_group":0,"term_taxonomy_id":989,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":977,"name":"\uc7a5\uace0 \ubc30\ud3ec","slug":"%ec%9e%a5%ea%b3%a0-%eb%b0%b0%ed%8f%ac","term_group":0,"term_taxonomy_id":977,"taxonomy":"post_tag","description":"","parent":0,"count":4,"filter":"raw"},{"term_id":986,"name":"\ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc","slug":"%ec%bc%80%eb%af%b8%ed%81%b4%eb%9d%bc%ec%9a%b0%eb%93%9c","term_group":0,"term_taxonomy_id":986,"taxonomy":"post_tag","description":"","parent":0,"count":4,"filter":"raw"},{"term_id":983,"name":"\ucf00\ubbf8\ud074\ub77c\uc6b0\ub4dc \ud30c\uc774\uc36c 3.12","slug":"%ec%bc%80%eb%af%b8%ed%81%b4%eb%9d%bc%ec%9a%b0%eb%93%9c-%ed%8c%8c%ec%9d%b4%ec%8d%ac-3-12","term_group":0,"term_taxonomy_id":983,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"}],"_links":{"self":[{"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/posts\/5229","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/comments?post=5229"}],"version-history":[{"count":9,"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/posts\/5229\/revisions"}],"predecessor-version":[{"id":5520,"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/posts\/5229\/revisions\/5520"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/media\/5255"}],"wp:attachment":[{"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/media?parent=5229"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/categories?post=5229"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/tags?post=5229"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}