์๋ ํ์ธ์ gunicorn ์ ์ง ๋ณด์์,
ํ๊ฒฝ:
python 3.6.1
pyramid==1.9.2
2019๋
9์ 12์ผ, ์ด ์คํ ์ค๋ฒํ๋ก ์ ์์ ๋ฐ๋ผ waitress
๋ฅผ gunicorn
๋ก ๊ต์ฒดํ์ฌ ๋ด๋ถ pyramid
์๋ฒ๊ฐ ๋ฐฐํฌ๋๋ ๋ฐฉ์์ ๋ฆฌํฉํ ๋งํ์ต๋๋ค.
https://stackoverflow.com/a/26872261/10491481
๋ด๋ถ PR์ด ์์ฑ๋์์ ๋ gunicorn
์ ์ต์ ๋ฆด๋ฆฌ์ค๋ 19.9.0์ด์์ต๋๋ค.
์ ๋ ์ค๋ ๊ตฌํ์ ๋ค์ ๊ฒํ ํ๋ผ๋ ์์ฒญ์ ๋ฐ์์ต๋๋ค. ํนํ ๊ฐ๋ฐ ๋ฐ ํ๋ก๋์
CentOS 6.5
์๋ฒ์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ํ
์คํธํ๊ธฐ ์ํ ๊ฒ์
๋๋ค. ๋๋ ์ฐ๋ฆฌ ์ฝ๋๋ฒ ์ด์ค์ ์๋ก์ด git clone
๋ก ์ด๊ฒ์ ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
PRํ ๋ setup.py
์ gunicorn
์ ๋ฒ์ ์ ์ง์ ํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ค๋ pip install
์ ์คํํ์ ๋ (์์์น ์๊ฒ) gunicorn==20.0.0
์(๋ฅผ) ๋ค์ด๋ก๋ํ์ฌ ์ค์นํ์ต๋๋ค.
[server:main]
development.ini
์ ์๋ ์ค์ ์ด ์์ ์ ๋ฐ์๋์ง ์๋ ์ด์ ๋ ๋ช
ํํ์ง ์์์ต๋๋ค.
๋ช
ํํ๊ฒ ํ๊ธฐ ์ํด development.ini
์ ๋ค์ ์ค์ ์ ์ฌ์ฉํฉ๋๋ค.
[server:main]
use = egg:gunicorn#main
host = 0.0.0.0
port = 9090
workers = 1
worker_class = gevent
certfile=/etc/ssl/certs/current/webserver.cer
keyfile=/etc/ssl/certs/current/private.key.u
ca_certs=/etc/ssl/certs/current/intermediate.cert
gunicorn 19.9.0
:
$ gunicorn --version
gunicorn (version 19.9.0)
$ gunicorn --paste development.ini
[2019-11-12 12:42:59 -0800] [16733] [INFO] Starting gunicorn 19.9.0
[2019-11-12 12:42:59 -0800] [16733] [INFO] Listening at: https://0.0.0.0:9090 (16733)
[2019-11-12 12:42:59 -0800] [16733] [INFO] Using worker: gevent
[2019-11-12 12:42:59 -0800] [16744] [INFO] Booting worker with pid: 16744
gunicorn 20.0.0
$ gunicorn --version
gunicorn (version 20.0.0)
$ gunicorn --paste development.ini
[2019-11-12 12:45:28 -0800] [17295] [INFO] Starting gunicorn 20.0.0
[2019-11-12 12:45:28 -0800] [17295] [INFO] Listening at: http://127.0.0.1:8000 (17295)
[2019-11-12 12:45:28 -0800] [17295] [INFO] Using worker: sync
[2019-11-12 12:45:28 -0800] [17300] [INFO] Booting worker with pid: 17300
๋ ์ถ๋ ฅ ๊ฐ์ ์ฐธ๊ณ ์ฌํญ:
gunicorn 20.0.0
์ ๋ํ ์ถ๋ ฅ์ด http
$์์ ์ฐธ๊ณ ํ์ญ์์ค).host
์ธ์๊ฐ ๋ ์ด์ ์ ํํ์ง ์์( 0.0.0.0
127.0.0.1
$ ์ฌ์ฉ)port
์ธ์๊ฐ ๋ ์ด์ ์ ํํ์ง ์์( 9090
8000
$ ์ฌ์ฉ)gunicorn 20.0.0
์ ๋ํ ๋ณ๊ฒฝ ๋ก๊ทธ๋ฅผ ์ดํด๋ณด์์ต๋๋ค.
http://docs.gunicorn.org/en/stable/news.html
๊ทธ๋ฌ๋ --paste
์ธ์์ ๋ํ ์๋์ ์ธ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ์ธ๊ธ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฐ์น๋ฅผ ์ํด gunicorn 20.0.0
๋ช
๋ น์ค์์ ์ด๋ค ์ธ์๋ฅผ ์ ๋ฌํ ์ ์์ผ๋ฉด ์๋ฒ๊ฐ ์๋ํ ๋๋ก ์์๋ฉ๋๋ค.
$ gunicorn \
--paste development.ini \
-b 0.0.0.0:9090
--workers 1 \
--certfile /etc/ssl/certs/current/webserver.cer \
--keyfile /etc/ssl/certs/current/private.key.u
[2019-11-12 12:54:08 -0800] [18979] [INFO] Starting gunicorn 20.0.0
[2019-11-12 12:54:08 -0800] [18979] [INFO] Listening at: https://0.0.0.0:9090 (18979)
[2019-11-12 12:54:08 -0800] [18979] [INFO] Using worker: sync
[2019-11-12 12:54:08 -0800] [18985] [INFO] Booting worker with pid: 18985
์ด ๋ฌธ์ ๋ฅผ ์ดํดํ๋ ๋ฐ ๋์์ ์ฃผ์๋ฉด ๋๋จํ ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
์ด๋ฅผ ์ฌํํ ์ ์๋๋ก ๋ด ํ๊ฒฝ์ ๋ํด ์ ๊ณตํ ์ ์๋ ์์ธํ ์ ๋ณด๊ฐ ์์ผ๋ฉด ์๋ ค์ฃผ์ธ์.
๊ฐ์ฌ ํด์,
์ฝ๋ฆฌ
์ฃ์กํฉ๋๋ค. ๋ณ๊ฒฝ ๋ก๊ทธ ํญ๋ชฉ์๋ "Simplify Paste Deployment documentation"๋ง ํ์๋๋ฉฐ ์ฌ๊ธฐ์์ ๋ ๋์ ๋ด์ค ํญ๋ชฉ์ ์ค๋นํ๋ ๋ฐ ๋์์ด ๋์์ ๊ฒ์ ๋๋ค.
์ด์ ๋ํ PR์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. https://github.com/benoitc/gunicorn/pull/1957
์ด์ ์๋ use = egg:gunicorn#main
๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ง๋ง ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ Paste Deploy ํธํ ํ๊ฒฝ์์ Gunicorn์ ์ญํ ์ ๋ช
ํํ ํ๊ธฐ ์ํ ๊ฒ์
๋๋ค.
์ด ์คํ์ผ์ .ini
ํ์ผ๊ณผ ํจ๊ป Gunicorn์ ์ฌ์ฉํ๋ ๋ ๊ฐ์ง ์ต์
์ด ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ์ต์
์ gunicorn
CLI๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ์ด ์์
์ ์ํํ ๋ Gunicorn์ ์์ฒด CLI ํ๋๊ทธ ๋๋ Gunicorn์ ์์ฒด ๊ตฌ์ฑ ๋ชจ๋(๊ธฐ๋ณธ๊ฐ gunicorn.conf.py
)์ ์ฌ์ฉํ์ฌ ์๋ฒ ์ธ์๋ฅผ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. Gunicorn ๋ฐ์ธ๋์ ์์ผ์ ์ฌ๋ก๋ฉ์ ๊ด๋ฆฌํ๊ณ PID ํ์ผ์ ์์ฑํ๋ ๋ฑ์ ์์
์ ์ํํฉ๋๋ค. Gunicorn์ $ .ini
์ app
์น์
์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
ํธ์ถ ๊ฐ๋ฅ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
๋ ๋ฒ์งธ ์ต์
์ pserve
์ ๊ฐ์ ์คํฌ๋ฆฝํธ ๋ถ์ฌ๋ฃ๊ธฐ ์คํ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ์ด ๊ฒฝ์ฐ ์ด ์คํฌ๋ฆฝํธ ๋ฌ๋๋ ๋ค์ ๋ก๋๋ฅผ ๊ด๋ฆฌํ๊ณ PID ํ์ผ์ ์์ฑํ๋ ๋ฑ์ ์์
์ ์ํํฉ๋๋ค. ๋๋ถ๋ถ์ ๋ค๋ฅธ ์ต์
์ ์ฌ์ ํ โโ์๋ํ์ง๋ง .ini
ํ์ผ์ server
๋ธ๋ก์ ์ฌ์ฉํ๋ ค๋ฉด ๋ถ์ฌ๋ฃ๊ธฐ์ ํธํ๋๋ ์คํฌ๋ฆฝํธ ์คํ๊ธฐ๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค. Gunicorn์ ๋ ์ด์ ๊ทธ๋ฐ ์คํฌ๋ฆฝํธ ์คํ์๊ฐ ์๋๋๋ค.
๋ ๋ช ํ์ฑ์ ์ถ๊ฐํ ์ ์๋์ง ์๋ ค์ฃผ์ญ์์ค.
๊ทํ์ ๊ฒฝ์ฐ ์ด์ ๊ณผ ๊ฐ์ด ๊ณ์ํ ์ ์์ด์ผ ํ์ง๋ง $ gunicorn
#$ ๋์ pserve
๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ํ์ญ์์ค. Gunicorn์ ๋ชจ๋ ์๋ฒ ๊ตฌ์ฑ์ ์ด๋ฏธ ์๋ฃํ ๊ฒ์ฒ๋ผ server
๋ธ๋ก์ ์์ ์ ์์ต๋๋ค.
์ด์ ๋์์ ํ์ผ๊ณผ ์ถฉ๋ํ ์ ์๋ ๋ช
๋ น์ค์ ์ต์
์ ์ง์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ์ฌ์ ์ผ๋ก ํผ๋์ค๋ฌ์ ์ต๋๋ค. ๋ํ .ini
ํ์ผ์ ๋ณด๊ฐ์ ์ํ ๊ตฌ์ฑ ๋ณ์๋ฅผ ์ง์ ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ๋ค๋ฅธ server
๋ธ๋ก(๋ค๋ฅธ app
๋ธ๋ก ์ธ์)์ ์ง์ ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํด ๋ฌ๋ผ๋ ์์ฒญ๋ ์์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด๋ฌํ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ํ ์ง์์ ์ถ๊ฐํ๊ธฐ๋ณด๋ค Gunicorn์ ๋ถ์ฌ๋ฃ๊ธฐ _server_ ์คํ๊ธฐ๋ก ์ฌ์ฉํ์ง ์๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ด์ Gunicorn CLI๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ฑํ๊ธฐ ์ํด Paste Deploy .ini
ํ์ผ ์ฝ๊ธฐ๋ฅผ ์ง์ํ์ง๋ง server
๋ธ๋ก์ ์ฌ์ฉํ๋ ๊ฒ์ ํด๋น ์ํ๊ณ์ ์ ์ฉ ๋๊ตฌ์ ๋งก๊ฒจ์ง๋๋ค.
๊ทํ์ ๊ฒฝ์ฐ ์ด์ ๊ณผ ๊ฐ์ด ๊ณ์ํ ์ ์์ด์ผ ํ์ง๋ง $
gunicorn
#$ ๋์pserve
๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํ์ญ์์ค.
@tilgovi ๋น ๋ฅธ ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค!
๊ทํ์ ์ถ์ฒ์ ๋ฐ๋ผ:
$ pserve development.ini
# ...
Starting server in PID 40148.
[2019-11-12 14:26:30 -0800] [40148] [INFO] Starting gunicorn 20.0.0
[2019-11-12 14:26:30 -0800] [40148] [INFO] Listening at: https://0.0.0.0:9090 (40148)
[2019-11-12 14:26:30 -0800] [40148] [INFO] Using worker: gevent
[2019-11-12 14:26:30 -0800] [40263] [INFO] Booting worker with pid: 40263
๋ด๊ฐ ์ด์๋ ๋ด๋ถ PR์ ์ผ๋ถ๊ฐ pserve
๋ช
๋ น์ gunicorn
๋ก ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒ๊ณผ ๊ด๋ จ์ด ์๊ธฐ ๋๋ฌธ์ ์ ๋ ์ฐ๋ฆฌ์ ์๋ ๊ฐ๋ฐ์๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ ์กฐ์ฌํ์ต๋๋ค. ๋ด๋ถ API ์๋ฒ.
๊ทธ๋ฌ๋ฉด ๋ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์์ ๋กญ๊ฒ ์ข ๋ฃํ์ธ์ =)
๊ฐ์ฌ ํด์,
์ฝ๋ฆฌ
๋ง์ง๋ง์ผ๋ก ๋ฉ๋ชจ๋ฅผ ํ ๋ค์ ๊ธฐ์ตํ ์ ์๋ ๋ชจ๋ ์ธ๋ถ ์ฌํญ์ ์ถ๊ฐํ ๊ฒ ๊ฐ์ต๋๋ค. server
๋ธ๋ก์ด egg:gunicorn#main
์ด์ธ์ ๊ฒ์ ์ง์ ํ๋๋ผ๋ gunicorn --paste production.ini
๋ฅผ ํธ์ถํ๋ฉด Gunicorn์ ์๋ฒ๋ก ์ฌ์ฉํ๋ค๋ ๊ฒ์ด ์ ์ฌ์ ์ผ๋ก ํผ๋์ค๋ฌ์ ์ต๋๋ค _!
Gunicorn์ ์ฃผ๋ก ์๋ฒ ๋ฐ ํ๋ก์ธ์ค ๊ด๋ฆฌ์์ด๊ธฐ ๋๋ฌธ์ Gunicorn์ด ์์์ Paste ํธํ ์๋ฒ๋ฅผ ํธ์ถํ๊ธฐ ์ํ ์ผ๋ฐ CLI๊ฐ ๋๋ ๊ฒ์ ์ด์น์ ๋ง์ง ์์ต๋๋ค. ๋์ Gunicorn์ ๋ถ์ฌ๋ฃ๊ธฐ ๋ฐฐํฌ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ง์ํ๋ ์๋ฒ์ด๋ฉฐ ๋ถ์ฌ๋ฃ๊ธฐ ํธํ ์๋ฒ์ ๋๋ค. ํ์ง๋ง ์คํฌ๋ฆฝํธ ๋ถ์ฌ๋ฃ๊ธฐ ์คํ๊ธฐ CLI๋ _์๋๋๋ค_!
๋๋ ์ด๊ฒ์ ์ํด ํผ๋ผ๋ฏธ๋ ์๋ฆฌ์ฑ ์ ๋ํ ๋ฌธ์ ๋ฅผ ์ด์์ต๋๋ค: https://github.com/Pylons/pyramid_cookbook/issues/222
๋๋ ์ด๊ฒ์ Gunicorn ์์ฒด์์ ์ฒ ์ ํ ๋ฌธ์ํํ๋ค๊ณ ์๊ฐํ์ง๋ง ์ฒ์์๋ ์ฐธ์กฐ๋ฅผ ์ฐพ์ ์ ์์์ต๋๋ค. ์ฌ๊ธฐ์ ์์ต๋๋ค: http://docs.gunicorn.org/en/stable/run.html#paste -deployment
@tilgovi ๋ ์ด๊ฒ์ด ์ฐ๋ฆฌ ํ์๋ ํฐ ๋ณํ๋ฅผ ์ฃผ์๋ค๋ ์ ์ ์๋ ค๋๋ฆฝ๋๋ค. ๋ณ๊ฒฝ ๋ก๊ทธ์ ์ฃผ์ ๋ณ๊ฒฝ ๋ถ๋ถ์ผ๋ก ์ด๋ํ ๊ฐ์น๊ฐ ์์ต๋๊น?
๋ฌธ์ ๋ฅผ ๋ค์ ์ด๊ณ ์์ฒด ํ ๋นํ๊ฒ ์ต๋๋ค. ์ฌ๊ธฐ์์ ๋ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ณ๊ฒฝ ๋ก๊ทธ๋ฅผ ์ ๋ฐ์ดํธํ๋ฉด ๋ซ๊ฒ ์ต๋๋ค.
๋ค์ ๋งํ์ง๋ง, ์ฒ์์ ๋ณ๊ฒฝ ๋ก๊ทธ์์ ๋ ๋ช ํํ๊ฒ ํธ์ถํ์ง ์์ ๊ฒ์ ๋ํด ์ฌ๊ณผ๋๋ฆฝ๋๋ค.
@ํธ๊ณ ๋น ๋ฒํ
์ด ๋ฌธ์ ๋ฅผ ๋ณ๋์ ๋ฌธ์ ๋ก ์ด์ด์ผ ํ๋์ง ์๋ ค์ฃผ์ธ์.
์ด๊ฒ์ ์ฐ๋ฆฌ ์ฝ๋๋ฒ ์ด์ค์ ๊ณ ๋ฆฝ๋ ๋ฌธ์ ์ผ ์ ์์ง๋ง ์กฐ๊ธ ๋ ํ
์คํธํ ํ ์ฐ๋ฆฌ ํ์ API ์๋ฒ์์ gunicorn 20.0.0
๊ฐ pyramid_ldap3.get_ldap_connector
ํจ์๋ฅผ ์ค๋จํ๋ค๋ ๊ฒ์ ์์๋์ต๋๋ค.
gunicorn 20.0.0
:$ pip list | grep gunicorn
gunicorn 20.0.0
$ pserve bioapps/development.ini
[2019-11-20 15:55:30 -0800] [9902] [INFO] Starting gunicorn 20.0.0
[2019-11-20 15:55:30 -0800] [9902] [INFO] Listening at: https://0.0.0.0:10999 (9902)
[2019-11-20 15:55:30 -0800] [9902] [INFO] Using worker: gevent
[2019-11-20 15:55:30 -0800] [10034] [INFO] Booting worker with pid: 10034
/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/gunicorn/workers/ggevent.py:53: MonkeyPatchWarning: Monkey-patching ssl after ssl has already been imported may lead to errors, including RecursionError on Python 3.6. It may also silently lead to incorrect behaviour on Python 3.7. Please monkey-patch earlier. See https://github.com/gevent/gevent/issues/1016. Modules that had direct imports (NOT patched): ['urllib3.util.ssl_ (/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/urllib3/util/ssl_.py)', 'urllib3.util (/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/urllib3/util/__init__.py)'].
monkey.patch_all()
[2019-11-20 15:57:54,189] INFO [access:342][DummyThread-1] 10.9.202.54 - - "POST https://bioappsdev02.bcgsc.ca:10999/session HTTP/1.1" {'username': 'colim', 'password': ''}
[2019-11-20 15:57:57,276] ERROR [exc_logger:114][DummyThread-1] 'https://bioappsdev02.bcgsc.ca:10999/session'
Traceback (most recent call last):
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid/tweens.py", line 39, in excview_tween
response = handler(request)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid/router.py", line 156, in handle_request
view_name
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid/view.py", line 642, in _call_view
response = view_callable(context, request)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid/config/views.py", line 181, in __call__
return view(context, request)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid/viewderivers.py", line 390, in attr_view
return view(context, request)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid/viewderivers.py", line 368, in predicate_wrapper
return view(context, request)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid/viewderivers.py", line 439, in rendered_view
result = view(context, request)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid/viewderivers.py", line 148, in _requestonly_view
response = view(request)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/cornice/service.py", line 493, in wrapper
response = view_(request)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/bioapps/api/endpoints/session.py", line 139, in session_post
username, request.validated['password'], request,
File "/home/colim/Projects/bioapps/bioapps.api.ssl/bioapps/api/endpoints/session.py", line 27, in get_ldap_groups
auth = connector.authenticate(username, password)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid_ldap3/__init__.py", line 208, in authenticate
password=escape_for_search(password))
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid_ldap3/__init__.py", line 82, in execute
with manager.connection() as conn:
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid_ldap3/__init__.py", line 165, in connection
auto_bind=True, lazy=False, read_only=True)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/ldap3/core/connection.py", line 326, in __init__
self.do_auto_bind()
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/ldap3/core/connection.py", line 343, in do_auto_bind
self.bind(read_server_info=True)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/ldap3/core/connection.py", line 585, in bind
_, result = self.get_response(response)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/ldap3/strategy/base.py", line 370, in get_response
raise LDAPResponseTimeoutError('no response from server')
ldap3.core.exceptions.LDAPResponseTimeoutError: no response from server
[2019-11-20 15:57:57,298] INFO [access:362][DummyThread-1] 10.9.202.54 - - "POST https://bioappsdev02.bcgsc.ca:10999/session HTTP/1.1" 500 206
gunicorn 19.9.0
$ pip install gunicorn==19.9.0
Collecting gunicorn==19.9.0
Using cached https://files.pythonhosted.org/packages/8c/da/b8dd8deb741bff556db53902d4706774c8e1e67265f69528c14c003644e6/gunicorn-19.9.0-py2.py3-none-any.whl
Installing collected packages: gunicorn
Found existing installation: gunicorn 20.0.0
Uninstalling gunicorn-20.0.0:
Successfully uninstalled gunicorn-20.0.0
Successfully installed gunicorn-19.9.0
$ pip list | grep unicorn
gunicorn 19.9.0
$ gunicorn --paste bioapps/development.ini
[2019-11-20 16:03:45 -0800] [12015] [INFO] Starting gunicorn 19.9.0
[2019-11-20 16:03:45 -0800] [12015] [INFO] Listening at: https://0.0.0.0:10999 (12015)
[2019-11-20 16:03:45 -0800] [12015] [INFO] Using worker: gevent
[2019-11-20 16:03:45 -0800] [12018] [INFO] Booting worker with pid: 12018
[2019-11-20 16:04:39,292] INFO [access:342][DummyThread-1] 10.9.202.54 - - "POST https://bioappsdev02.bcgsc.ca:10999/session HTTP/1.1" {'username': 'colim', 'password': ''}
[2019-11-20 16:04:39,527] INFO [access:362][DummyThread-1] 10.9.202.54 - - "POST https://bioappsdev02.bcgsc.ca:10999/session HTTP/1.1" 200 639
gunicorn 20.0.0
์ gunicorn 19.9.0
development.ini
๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ต๋๋ค.
ํฅ๋ฏธ๋กญ๊ฒ๋ ๋ค์ ๋ช
๋ น์ผ๋ก ์๋ฒ๋ฅผ ์์ํ๋ฉด gunicorn 20.0.0
๋ก ์ค๋ฅ๋ฅผ ์ค์งํ ์ ์์ต๋๋ค.
$ pip list | grep unicorn
gunicorn 20.0.0
$ gunicorn --paste bioapps/development.ini -b 0.0.0.0:8999 --workers 1 --certfile /etc/ssl/certs/current/webserver.cer --keyfile /etc/ssl/certs/current/private.key.u
[2019-11-20 16:14:27 -0800] [14783] [INFO] Starting gunicorn 20.0.0
[2019-11-20 16:14:27 -0800] [14783] [INFO] Listening at: https://0.0.0.0:8999 (14783)
[2019-11-20 16:14:27 -0800] [14783] [INFO] Using worker: sync
[2019-11-20 16:14:27 -0800] [14798] [INFO] Booting worker with pid: 14798
[2019-11-20 16:16:39,550] INFO [access:342][MainThread] 10.9.202.54 - - "POST https://bioappsdev02.bcgsc.ca:8999/session HTTP/1.1" {'username': 'colim', 'password': ''}
[2019-11-20 16:16:39,768] INFO [access:362][MainThread] 10.9.202.54 - - "POST https://bioappsdev02.bcgsc.ca:8999/session HTTP/1.1" 200 639
๊ด๋ จ์ด ์๋์ง ํ์คํ์ง ์์ง๋ง pserve
gunicorn 20.0.0
๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ๋ฅผ ์์ํ ๋๋ง ์ด ๊ฒฝ๊ณ ๊ฐ ํ์๋ฉ๋๋ค.
/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/gunicorn/workers/ggevent.py:53: MonkeyPatchWarning: Monkey-patching ssl after ssl has already been imported may lead to errors, including RecursionError on Python 3.6. It may also silently lead to incorrect behaviour on Python 3.7. Please monkey-patch earlier. See https://github.com/gevent/gevent/issues/1016. Modules that had direct imports (NOT patched): ['urllib3.util.ssl_ (/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/urllib3/util/ssl_.py)', 'urllib3.util (/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/urllib3/util/__init__.py)'].
monkey.patch_all()
@tilgovi ๋ณ๊ฒฝ ๋ก๊ทธ์์ ๋ฌด์์ ๋ณ๊ฒฝํ์๊ฒ ์ต๋๊น?
@benoitc Gunicorn CLI์์ Paste Deploy ์๋ฒ ์ ์์ ๋ํ ์ง์ ์ ๊ฑฐ๋ฅผ ์์ฒญํ๊ณ ์ถ์ต๋๋ค. ์ค๋ ํ ์ ์์ต๋๋ค.
๋ณ๊ฒฝ ๋ก๊ทธ๋ฅผ ์๊ธํ์ฌ ์์ ํ์ฌ ๋ ๋ช ํํ๊ฒ ํด๋ ๊ด์ฐฎ์ต๋๊น(20.0 ๋ฆด๋ฆฌ์ค์ ์ฃผ์ ๋ณ๊ฒฝ ์น์ ์์ฑ)?
@CorreyL ์ฌ๋ฏธ์๋ค! ์ด์ ๊ฐ์ด ๋ช
๋ น์ค์ ์ง์ ๋ ์ต์
์ผ๋ก gunicorn
๋ฅผ ํ์คํ ์คํํ ์ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด gunicorn
๋ฅผ ์คํํ๋ ๊ฐ์ฅ ์์ ํ๊ณ ์ ํธ๋๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. pserve
์์ ํตํฉ์ ํธ๋ฆฌํ์ง๋ง ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ ์ฌ์ค์ ์๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๋น์ถ์ฒํ๋ ์ค์๋ฅผ ํ์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋ณ๊ฒฝ ๋ก๊ทธ๋ฅผ ์๊ธํ์ฌ ์์ ํ์ฌ ๋ ๋ช ํํ๊ฒ ํด๋ ๊ด์ฐฎ์ต๋๊น(20.0 ๋ฆด๋ฆฌ์ค์ ์ฃผ์ ๋ณ๊ฒฝ ์น์ ์์ฑ)?
@tilgovi ๋ค ํ์คํ
@tilgovi ์ค๋ ์ด ๋ณ๊ฒฝ ์ฌํญ์ ์ถ๊ฐํ ์ ์์ต๋๊น? 20.0.1์ ์ํด ๊ทธ๊ฒ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค :)
c25563f์ ํ ์ค ๋ฉ๋ชจ๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ ์ดํ ๋ฌธ์๊ฐ ์ด๋ฏธ ์ ๋ฐ์ดํธ๋์์ต๋๋ค. ์ด ๋ฉ๋ชจ๋ฅผ ๋ณด๋ ๋ชจ๋ ์ฌ๋์ด ๋ฌธ์์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ฐพ์ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๐
@tilgovi ๊ฐ์ฌํฉ๋๋ค
์ด๊ฒ์ ์ํด ๋๋ผ์ธ ์ ๋๋ก ์ํฅ์ ๋ฐ๋ ๊ฒ์ ๋ํ ๋ ๋ค๋ฅธ ํ์ธ์ ์ถ๊ฐํ๊ณ ์ถ์์ต๋๋ค. ์ ๊ฒฝ์ฐ์๋ ๊ทธ๋ค์ง ์ค์ํ์ง ์์์ง๋ง ์
๊ทธ๋ ์ด๋ ์ดํ์ gunicorn์ด dev์์ ์๋ ๋ค์ ๋ก๋๋ฅผ ์ค์งํ ์ด์ ์ ๊ธฐํ ๋ช ๊ฐ์ง ์ฌ์ํ ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํด ํผ๋์ค๋ฌ์ ์ต๋๋ค. ๋๋ ์ค๋ ๊ทธ๊ฒ์ ์์๋ด๋ ค๊ณ ์๊ฐ์ ๋ณด๋๊ณ ๋ด --paste
INI ํ์ผ์ ์ค์ ์ด ๋ ์ด์ ์๋ํ์ง ์๋๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋์์ต๋๋ค.
์ด๊ฒ์ด ๊ฐ๋ฅํ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง, Paster ํ์ผ์ ํตํด ์ฌ์ ํ ์๋ฒ ์ธ์๋ฅผ ์ค์ ํ๋ ค๊ณ ํ๋ค๋ ๊ฒ์ ๊ฐ์งํ๋ฉด gunicorn์ด ๊ฒฝ๊ณ ๋ฅผ ์ถ๋ ฅํ๋๋ก ํ ์ ์์ต๋๊น?
ํผ๋์ ๋ํด ์ฌ๊ณผ๋๋ฆฝ๋๋ค, @Deimos. PR์ ๊ฒํ ํ๊ฒ ์ง๋ง ์ฌ๊ธฐ์ ๋ ์ถ๊ฐํ ๊ตฌ์ฒด์ ์ธ ๊ณํ์ ์์ต๋๋ค.
์ค์ ๋ก --paste๋ฅผ --config์ ํจ๊ป ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ๋ ์ด๋ป์ต๋๊น? ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ(RhodeCode)๋ gunicorn ๊ตฌ์ฑ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ํฐ๋ง์ ํน์ ๋ ผ๋ฆฌ์ ๋ํ ํฐ ์๊ตฌ ์ฌํญ์ ๋๋ค.
@marcinkuzminski ์ด์์ ์ธ ์ฌ์ฉ ์ฌ๋ก์
๋๋ค. --paste
์ --config
๋ฅผ ๋ชจ๋ ์ง์ ํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ Gunicorn์ ์ฌ์ฉ์๊ฐ gunicorn ๊ตฌ์ฑ ํ์ผ์์ ์๋ฒ๋ฅผ ๊ตฌ์ฑํ ๊ฒ์ผ๋ก ์์ํ๊ธฐ ๋๋ฌธ์ ๋ถ์ฌ๋ฃ๊ธฐ ini ํ์ผ์ "์๋ฒ" ์น์
์ ์ฝ์ง ์์ต๋๋ค.
์ด์ด ์์์ด.
์ฐ๋ฆฌ๋ ์ค์น ํ๋ก๊ทธ๋จ์์ ๊ณ ๊ฐ์๊ฒ gunicorn์ ๋ฐฐ์กํ๊ณ ์์ผ๋ฉฐ ๋ชจ๋ ๋ ผ๋ฆฌ์ ๊ตฌ์ฑ์ .ini ํ์ผ์ ์์๋์์ต๋๋ค. ์ด๊ฒ์ ์ธํฐ๋ท์ ํตํ ๋๋ถ๋ถ์ ์์ ๊ฐ ํผ๋ผ๋ฏธ๋ ํ๋ก์ ํธ๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ด๊ธฐ๋ ํฉ๋๋ค.
์ด ๋ณ๊ฒฝ์ ์ด๋ฅผ ๊นจ๊ณ , gunicorn์ด ์ด๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๋๋ก ํฌํฌํ ๋ค์, ๋ ผ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ๊ณ ๊ตฌ์ฑ์ gunicorn_conf.py๋ก ์์ํ๋ ๊ฒ์ด ๋ ์ฌ์ธ ๊ฒ์ ๋๋ค.
--paste ์ต์
์ด ํน์ ์ ๋์ด์ ํจ๊ป ์ฝํ์ง๋ฉด ์ด๋ป์ต๋๊น? ์๋ฅผ ๋ค์ด --paste๋ก gunicorn์ ๊ตฌ์ฑํ ์ ์์ง๋ง gunicorn.
์ ๋์ฌ๊ฐ ๋ถ์ ๊ตฌ์ฑ ์ต์
๋ง ์ฝ์ต๋๋ค.
์
gunicorn.workers = 2
gunicor.XXX = YYY
--config
๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค. ๋ถ์ฌ๋ฃ๊ธฐ INI๋ฅผ ์์ ํ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํด $#$ gunicorn
pserve
๋์ pserve ๋ฅผ ์ฌ์ฉํ์ญ์์ค. ๋ฌธ์ ์ฐธ์กฐ: https://docs.gunicorn.org/en/stable/run.html#paste -deployment
๋ณ๊ฒฝ๋ ์ฌํญ์ ์๋ฒ๋ฅผ ์คํํ ์ ์๋ ์ผ๋ฐ ๋ถ์ฌ๋ฃ๊ธฐ ๋ฐฐํฌ CLI๋ก Gunicorn์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ํ ์ง์์ ์ ๊ฑฐํ๋ ๊ฒ๋ฟ์ด์์ต๋๋ค. Gunicorn์ ์ฌ์ ํ โโ_a_ ๋ถ์ฌ๋ฃ๊ธฐ ํธํ ์๋ฒ ์์ฒด์ ๋๋ค.
์ด ๋ณ๊ฒฝ์ .ini
ํ์ผ์ด server
๋ธ๋ก์์ ์จ์ดํธ๋ฆฌ์ค ๋๋ ๋ค๋ฅธ ์๋ฒ๋ฅผ ์ง์ ํ์ง๋ง gunicorn --paste production.ini
์ ํจ๊ป ์คํํ๋ฉด ์ค์ ๋ก ์ฌ์ฉํ์ง ์๋ ์ ์ฌ์ ์ธ ํผ๋์ ์ ๊ฑฐํ๊ธฐ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค. ์ ํ ์จ์ดํธ๋ฆฌ์ค. ์ฌ๋๋ค์ ๋ํ server:main
์ด์ธ์ ๋์ฒด server
๋ธ๋ก์ ์ง์ ํ๋ ๊ธฐ๋ฅ์ ์์ฒญํ๊ธฐ๋ ํ์ต๋๋ค. pserve
์ ๊ฐ์ ์๋ฒฝํ๊ฒ ์ข์ CLI๊ฐ ์์ ๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ ๋ํ ์ง์์ ์ ์งํ๋ ๊ฒ์ ์ด์น์ ๋ง์ง ์๋ ๊ฒ ๊ฐ์์ต๋๋ค.
gunicorn
CLI๋ INI ํ์ผ์์ ์ ํ๋ฆฌ์ผ์ด์
์ ์๋ฅผ ์ฝ์ ์ ์์ง๋ง ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ์์ฒด ๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉํฉ๋๋ค. INI ํ์ผ์ ์ฌ์ฉํ์ฌ Gunicorn ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด ๋ค๋ฅธ ๋๊ตฌ(์ pserve
)๋ฅผ ์คํฌ๋ฆฝํธ/ํ๋ก์ธ์ค ์คํ๊ธฐ๋ก ์ฌ์ฉํ์ญ์์ค.
๊ทธ๋ฌ๋ ์ฒซ ๋ฒ์งธ ์ฃผ์์ ๋ฐ๋ผ --paste์ ํจ๊ป --config๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ฐ๋ฆฌ ํ๋ก์ ํธ์์ ๋ชจ๋ ๊ฒ์ ๋จ์ผ ๊ตฌ์ฑ ํ์ผ(.ini)์ ์ํด ๊ด๋ฆฌ๋ฉ๋๋ค. .ini ํ์ผ์ ์กฐ์ ํ๋ ๋ง์ ์
๊ทธ๋ ์ด๋/์๋ ํฌ๊ธฐ ์กฐ์ ๋
ผ๋ฆฌ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ --config๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์ ์ค์ ํ๋ ์ฌ์ฉ์ ์ง์ Python ๊ตฌ์ฑ์ ์ง์ ํฉ๋๋ค.
Gunicorn์ ๋ถ์ฌ๋ฃ๊ธฐ์ ํธํ๋์ง๋ง ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๊ธฐ๋ฅ์ด ์ ํ๋๊ณ 2๊ฐ์ ๊ตฌ์ฑ ํ์ผ์ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ ๋ณต๊ตฌํ ์ ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ํ ๋ค๋ฅธ ํ์ผ์ ๊ตฌ์ฑ์ผ๋ก ์ด๋ํ๋ ๊ฒ์ ์ค์ ๋ก ํฌํฌํ๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ์์ ์ด ํ์ํฉ๋๋ค. Gunicorn๊ณผ ๊ทธ ํ๋์ ๋๋๋ฆฌ๊ธฐ ์ํด ํฌํฌ๋ฅผ ์ ์งํ๋ ๊ฒ์ ๋๋ค.
๋๋ ์ด ํฐ์ผ์ ๋ํ ๊ทผ๊ฑฐ๋ฅผ ์๊ณ ์์ง๋ง ์ฐ๋ฆฌ๋ gunicorn๊ณผ ์จ์ดํธ๋ฆฌ์ค๋ฅผ ํจ๊ป ์ฌ์ฉํ๊ณ gunicorn ๋ฐ์ด๋๋ฆฌ๋ฅผ ์คํํ๋ ๊ฒ์ด ์ถฉ๋ถํ ๋ช ์์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. IMHO. ๋ํ ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ๊ณ๋์ ์ฌ์ฉํ์ฌ ํ๋ ์ค๋ฅ๋ก ๋ง๋๋์ง ๊ฐ์งํ ์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ด ๊ธฐ์ต์ ์ฐ๋ฆฌ๋ ๊ทธ๋ฐ ์ฌ์ฉ๋ฒ์ ๊ณ ๋ คํ์ง ์์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์๋ง ๋ค์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค
์ ์ค์ผ์ด์ค์ ๋ํ ์ง์์ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฐ์ง๊ณ ์์ด๋ ๊ด์ฐฎ์๊น์
๊ทธ๊ฒ์ ๋ํ ๊ฒฝ๊ณ ๋ฅผ ๊ธฐ๋กํฉ๋๊น?
2020๋
10์ 16์ผ ๊ธ์์ผ 08:28 Marcin Kuลบmiลski [email protected]
์ผ๋ค:
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ ๋ ๋ด ์ฒซ ๋ฒ์งธ์ ๋ฐ๋ผ --paste์ ํจ๊ป --config๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค.
๋ ผํ.
์ฐ๋ฆฌ ํ๋ก์ ํธ์์ ๋ชจ๋ ๊ฒ์ ๋จ์ผ ๊ตฌ์ฑ ํ์ผ(.ini)๋ก ๊ด๋ฆฌ๋ฉ๋๋ค.
.ini ํ์ผ์ ์กฐ์ ํ๋ ๋ง์ ์ ๊ทธ๋ ์ด๋/์๋ ํฌ๊ธฐ ์กฐ์ ๋ ผ๋ฆฌ๊ฐ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ --config๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์ ์ค์ ํ๋ ์ฌ์ฉ์ ์ง์ Python ๊ตฌ์ฑ์ ์ง์ ํฉ๋๋ค.
- ์ฌ์ฉ์ ์ ์ ๋ก๊ฑฐ ํ์(๊ธฐ์ ์ ์ผ๋ก
.ini ํ์ผ์ ์ฌ์ฉํ์ฌ ์ง์ ๋จ)- ์์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
Gunicorn์ ๋ถ์ฌ๋ฃ๊ธฐ ํธํ์ด ๊ฐ๋ฅํ์ง๋ง ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๊ธฐ๋ฅ์ด ์ ํ๋๊ณ ,
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๋ณต๊ตฌํ ์ ์๋ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ์ต๋๋ค.์ด์ ๋ ์์ง๋ง ์ฐ๋ฆฌ๋ ์ด๊ตฌ์ ์จ์ดํธ๋ฆฌ์ค๋ฅผ ํจ๊ป ์ฌ์ฉํ๊ณค ํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋ gunicorn ๋ฐ์ด๋๋ฆฌ๋ฅผ ์คํํ๋ ๊ฒ์ด ์ถฉ๋ถํ ๋ช ์์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. IMHO.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/benoitc/gunicorn/issues/2169#issuecomment-709838842 ,
๋๋ ๊ตฌ๋ ์ทจ์
https://github.com/notifications/unsubscribe-auth/AAADRIQR2CLVUOYK6FDY2ZDSK7RZFANCNFSM4JMI65YA
.>
๋ด ๋ชจ๋ฐ์ผ์์ ๋ณด๋ธ
์ค์ ๋ก ๊ฐ๋ฅํ๋ฉด ๋ค๋ฅธ ์๋ฃจ์ ์ ์๊ฐํ์ต๋๋ค. ์ ๋์ฝ ์๊ทธ์ ํจ๊ป pserve๋ฅผ ์ฌ์ฉํ ๋ ๊ตฌ์ฑ ํ์ผ์ด .ini ํ์ผ ์์ ์ค์ ๋๋ ๊ฒ๋ ์ข์ ๊ฒ์ ๋๋ค.
์
use = egg:gunicorn#main
workers = 2
config = /path/to/gunicorn_conf.py
๋ฐ๋ผ์ --config=/path/to/gunicorn_conf.py๊ฐ ์ํํ๋ ๊ฒ์ฒ๋ผ gunicorn_conf.py๋ฅผ ๋ก๋ํฉ๋๋ค.
๋ฐ๋ผ์ ์์ ๋ฐฉ๋ฒ์ ์ฐ๋ฆฌ์๊ฒ ํจ๊ณผ์ ์ด๋ฉฐ ์ด ํฐ์ผ์ ๋ฌธ์ ๋ ํด๊ฒฐํ๊ณ ์์ต๋๋ค. ๊ตฌํํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ฝ๊ณ ์คํ ๊ฐ๋ฅํ์ง ํ์คํ์ง ์์ต๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด gunicorn ๋ฐ์ด๋๋ฆฌ๋ฅผ ์คํํ ๋ .ini ํ์ผ์์ ๊ตฌ์ฑ์ ๋ก๋ํ๋ ๊ธฐ๋ฅ์ ๊ฐ์ ธ์ฌ ์ ์๋ค๋ฉด ๊ต์ฅํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ง์ ๋ฒ๊ฑฐ๋ก์์ด ์ค์ด๋ค ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ ๋ํด ๊ฒฝ๊ณ ๋ฅผ ๋ฐ๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค
์ค์ ๋ก ๊ฐ๋ฅํ๋ฉด ๋ค๋ฅธ ์๋ฃจ์ ์ ์๊ฐํ์ต๋๋ค. ์ ๋์ฝ ์๊ทธ์ ํจ๊ป pserve๋ฅผ ์ฌ์ฉํ ๋ ๊ตฌ์ฑ ํ์ผ์ด .ini ํ์ผ ์์ ์ค์ ๋๋ ๊ฒ๋ ์ข์ ๊ฒ์ ๋๋ค.
์๋ํด์ผ ํ๋ฉฐ ๋ฌธ์ํ๋์ด ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ฒ๊ทธ๋ฅผ ์ ๊ณ ํ์ญ์์ค!
์๊ฒ ์ต๋๋ค. ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ AFAIR์์๋ gunicorn๊ณผ pserve ๋ฐ์ด๋๋ฆฌ๊ฐ ์๋ํ๋ ๋ฐฉ์์ ์ฝ๊ฐ์ ๋ณ๊ฒฝ์ด ์์์ต๋๋ค. ๋ด๊ฐ ๊ธฐ์ตํ๋ค๋ฉด gunicorn --paste๋ .ini ํ์ผ ๊ฒฝ๋ก์ ์ก์ธ์คํ ์ ์์ง๋ง gunicorn egg๋ฅผ ์ฌ์ฉํ๋ pserve๋ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํ์ธํ๊ณ ํ์ํ ๊ฒฝ์ฐ ๊ด๋ จ ํฐ์ผ์ ์ด๊ฒ ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ฌธ์ ๋ฅผ ๋ค์ ์ด๊ณ ์์ฒด ํ ๋นํ๊ฒ ์ต๋๋ค. ์ฌ๊ธฐ์์ ๋ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ณ๊ฒฝ ๋ก๊ทธ๋ฅผ ์ ๋ฐ์ดํธํ๋ฉด ๋ซ๊ฒ ์ต๋๋ค.
๋ค์ ๋งํ์ง๋ง, ์ฒ์์ ๋ณ๊ฒฝ ๋ก๊ทธ์์ ๋ ๋ช ํํ๊ฒ ํธ์ถํ์ง ์์ ๊ฒ์ ๋ํด ์ฌ๊ณผ๋๋ฆฝ๋๋ค.