ืกืืืืช ืืื ืืจืืฆื ืฉื Python ืืื ืืืืืช ืืชืืื ื ืฉืืืจืืืช ืืืชืงื ืช ืงืื ืืืคืืืงืฆืื ืืืชืืืืืช ืฉืื, ืืืืืจ ืืื ืืืจืฆืช ืืืคืืืงืฆืื ืืกืืืื ืืืืืฉื.
ืืจืกืืืช Python
โซPython 3.14 ืืฉืชืืฉ ื-buildpacks. ืืืืืจ ืืื ืืคืืจืืช ืจืฉืืื ืืืื ืฉื ืืจืกืืืช Python ื ืชืืืืช ืืืจืกืืืช Ubuntu ืืชืืืืืช ืืื.
ืืื ืืืฉืชืืฉ ืืืจืกืช Python ื ืชืืืช, ืฆืจืื:
ืืื ืืฆืืื ืืขืจืืช ืืคืขืื, ืฆืจืื ืืืืื ืืช ืืืืืจืืช
runtime_configื-operating_systemืืงืืืฅapp.yaml.ืืชืงืื ืื ืืช
gcloudCLI ืืืจืกื 420.0.0 ืืืืื. ืืื ืืขืืื ืืช ืืื ื-CLI, ืืจืืฆืื ืืช ืืคืงืืืgcloud components update. ืืื ืืจืืืช ืืช ืืืจืกื ืืืืชืงื ืช, ืืจืืฆืื ืืช ืืคืงืืืgcloud version.ืืคืฉืจ ืื ืืฆืืื ืืจืกืช ืืื ืจืืฆื ืขื ืืื ืืืกืคืช ืืืืืจื
runtime_versionืืงืืืฅapp.yaml. ืืืจืืจืช ืืืื, ื ืขืฉื ืฉืืืืฉ ืืืจืกื ืืขืืื ืืช ืืืืชืจ ืฉื Python ืื ืื ืืฆืืื ืื ืืช ืืืืืจืruntime_version.
ืืืืืืืช
ืืื ืืฆืืื Python 3.14 ื-Ubuntu 24:
runtime: python env: flex entrypoint: gunicorn -b :$PORT main:app runtime_config: operating_system: "ubuntu24" runtime_version: "3.14"ืืื ืืฆืืื ืืช ืืจืกืช Python ืื ืชืืืช ืืืืจืื ื ื-Ubuntu 24:
runtime: python env: flex entrypoint: gunicorn -b :$PORT main:app runtime_config: operating_system: "ubuntu24"
ืืืืข ื ืืกืฃ ืืืื ืืืฃ ืืขืืจื ืฉื app.yaml.
ืชืืืื ืืกืืืืืช ืืื ืจืืฆื ืืืจืืช ืฉื Python
ืื ืืชื ืฆืจืืืื ืืืฉืชืืฉ ืืืจืกืช Python ืฉืื ื ืชืืืช, ืืชื ืืืืืื ืืืฆืืจ ืกืืืืช ืจืืฆื ืืืชืืื ืืืฉืืช ืืืืืืจ ืชืืื ืช ืืกืืก ืชืงืื ื ืขื ืืจืกืช Python ืฉืืชื ืฆืจืืืื.
ืืืืข ืขื ืชืืื ืืช ืืกืืก ืฉืกืืคืงื ืขื ืืื Google ืื ืขื ืชืืื ืืช ืืกืืก ืฉื Docker Python ืืืื ืืืืืจ ืืฆืืจืช ืกืืืืืช ืจืืฆื ืืืชืืื ืืืฉืืช.
ืืื ืืืืืง ืืขืืืง ืืช ืืืคืฉืจืืช ืืืขืืืจ ืืคืืืงืฆืืืช ืฉื App Engine ื-Cloud Run ืืืืฆืขืืช ืงืื ืืืื ืจืื, ืืคืฉืจ ืืขืืื ืืืืจืื ืืืขืืจืช ื ืชืื ืื.
ืชืืืืืช
ืกืืืืช ืืื ืืจืืฆื ืืืคืฉืช ืงืืืฅ requirements.txt ืืกืคืจืืืช ืงืืืฆื ืืืงืืจ ืฉื ืืืคืืืงืฆืื ืืืฉืชืืฉืช ื-pip ืืื ืืืชืงืื ืืช ืื ืืชืืืืืช ืืคื ื ืืคืขืืช ืืืคืืืงืฆืื. ืืืืข ื ืืกืฃ ืขื ืืฆืืจื ืื ืืืื ืฉื ืืืืืืช ืืืื ืืืืืจ ืฉืืืืฉ ืืกืคืจืืืช Python.
ืื ืืืคืืืงืฆืื ืฉืืื ืืืจืฉืช ืชืืืช ืคืจืืืช, ืืชื ืฆืจืืืื ืืืฉืชืืฉ ืืกืืืืช ืจืืฆื ืืืชืืื ืืืฉืืช ืฉืืืืกืกืช ืขื ืกืืืืช ืืจืืฆื ืฉื Python ืืื ืืืชืงืื ืืช ืืืืืืืช ืืืชืืืืืช.
ืืคืขืืช ืืืคืืืงืฆืื
ืกืืืืช ืืื ืืจืืฆื ืืคืขืืื ืืช ืืืคืืืงืฆืื ืืืืฆืขืืช ืืคืงืืื entrypoint ืฉืืืืืจืช ืืงืืืฅ app.yaml. ื ืงืืืช ืืื ืืกื ืฆืจืืื ืืืชืืื ืชืืืื ืฉืืืื ืืืงืฉืืช HTTP ืืืฆืืื ืฉืืืืืจืช ืขื ืืื ืืฉืชื ื ืืกืืืื PORT.
ืจืื ืืคืืืงืฆืืืช ืืืื ืืจื ื ืืฉืชืืฉืืช ืืฉืจืช WSGI ืืื Gunicorn, โ uWSGI ืื Waitress.
ืืื ืืืฉืชืืฉ ืืืื ืืืฉืจืชืื ืืืื, ืฆืจืื ืืืืกืืฃ ืืืชื ืืชืืืช ืืงืืืฅ requirements.txt ืฉื ืืืคืืืงืฆืื.
ืื ืืชื ืืฉืชืืฉืื ื-gunicorn ืืืคืืืงืฆืืืช Flask, ืืืื ืฉืืจืกืช Python ืฉื ืืืคืืืงืฆืื ืชืืืืช ื-gunicorn.
ืกืืืืช ืืื ืืจืืฆื ืืืืืืช ืฉืื ืืืกื ืืชืืืช ืืืชืงื ืื ืืคื ื ืฉื ืงืืืช ืืื ืืกื ื ืงืจืืช.
Flask==2.0.2
gunicorn==20.1.0
ืืืืื ืื ืงืืืช ืื ืืกื ืืืืฆืขืืช gunicorn ืืืคืืืงืฆืืืช Flask:
entrypoint: gunicorn -b :$PORT main:app
ืืืืื ืื ืงืืืช ืื ืืกื ืืืืฆืขืืช gunicorn ืืืคืืืงืฆืืืช Django:
entrypoint: gunicorn -b :$PORT mydjangoapp:wsgi
Gunicorn ืืื ืฉืจืช WSGI ืืืืืืฅ, ืืื ืืคืฉืจ ืืืฉืชืืฉ ืืื ืฉืจืช WSGI ืืืจ. ืืืืืื, ืื ื ื ืงืืืช ืื ืืกื ืฉืืฉืชืืฉืช ื-uWSGI ืขื Flask:
entrypoint: uwsgi --http :$PORT --wsgi-file main.py --callable app
ืืืคืืืงืฆืืืช ืฉืืืืืืช ืืืคื ืืืงืฉืืช ืืื ืฉืจืช WSGI, ืืคืฉืจ ืคืฉืื ืืืจืืฅ ืกืงืจืืคื Python:
entrypoint: python main.py
ืืืืจื ืืืืืฆืช ืฉื Gunicorn
ืืืืืืืืช ืืืกืืกืืืช ืื ืงืืืืช ืื ืืกื ืฉืืืฆืืืช ืืืขืื ื ืืขืื ืืฉืืฉ ืื ืงืืืืช ืืชืืื, ืืืืื ืืืืืช ืฉืื ืืชืืืื ืืืคืืืงืฆืืืช ืืืื ืืจื ื ืฉืืื. ืขื ืืืช, ืืจืื ืืืคืืืงืฆืืืช ืืืื ืฆืืจื ืืืืืืจ ืขืื ืืช ืฉืจืช ื-WSGI. ืืืงืื ืืฆืืื ืืช ืื ืืืืืจืืช ืื ืงืืืช ืืื ืืกื, ืืืฆืจืื ืงืืืฅ gunicorn.conf.py ืืกืคืจืืืช ืืืกืืก ืฉื ืืคืจืืืงื, ืฉืื ื ืืฆื ืืงืืืฅ app.yaml, ืืืฆืืื ืื ืืืชื ืื ืงืืืช ืืื ืืกื:
entrypoint: gunicorn -c gunicorn.conf.py -b :$PORT main:app
ืืชืืขืื ืฉื Gunicorn ืืคืฉืจ ืืงืจืื ืขื ืื ืขืจืื ืืืืืจื ืฉืื.
ืขืืืืื
โซGunicorn ืืฉืชืืฉ ืืชืืืืื worker ืืื ืืืคื ืืืงืฉืืช. ืืืจืืจืช ืืืื, Gunicorn ืืฉืชืืฉ ื-sync workers. ืืกืื ืืื ืฉื Worker ืชืืื ืืื ืืคืืืงืฆืืืช ืืืื ืืจื ื, ืืื ืื Worker ืืืื ืืืคื ืจืง ืืืงืฉื ืืืช ืืื ืคืขื. ืืืจืืจืช ืืืื, gunicorn ืืฉืชืืฉ ืจืง ืืืื ืืืขืืืืื ืืืื. ืืืงืจืื ืืืื, ืืืื ืืืืืช ืฉืืฉืืืืฉ ืืืืคืขืื ืื ืืืื ืืขืื, ืืืืฉืืื ืืืคืืืงืฆืืืช ืชืืื ืืฉืืขืืืก ืขืืืื ืืืื ืืืื.
ืืืืืฅ ืืืืืืจ ืืช ืืกืคืจ ืืขืืืืื ืื ืฉืืืื ืืืื ืคื 2 ืขื 4 ืืืกืคืจ ืืืืืช ื-CPU ืืืืคืข, ืืขืื ืืื. ืืคืฉืจ ืืฆืืื ืืช ืื ื-gunicorn.conf.py ืืืืคื ืืื:
import multiprocessing
workers = multiprocessing.cpu_count() * 2 + 1
ืื ืืกืฃ, ืืืง ืืืคืืืงืฆืืืช ืืืื ืืจื ื ืฉืืืืืืืช ืืขืืงืจ ืขื ืืื ืงืื/ืคืื ืืืืืืช ืืืื ืืช ืืฉืืคืืจ ืืืืฆืืขืื ืืืืฆืขืืช ืกืื ืืืจ ืฉื ืชืืืื ืขืืืื.
ืื ืืืืงืช ืืขืืืืื ืฉืืื ืืืจืฉืช ืืืกื ืชืืืช ื ืืกืคืื, ืืื gevent ืื tornado, ืชืฆืืจืื ืืืฆืืืจ ืขื ืืืกื ืืชืืืช ืืืื ืืงืืืฅ requirements.txt ืฉื ืืืคืืืงืฆืื.
ืคืจืืืืงืื HTTPS ืืฉืจืชื proxy ืืืขืืจื
โซApp Engine ืืคืกืืง ืืช ืืืืืจ ื-HTTPS ืืืืื ืืขืืืกืื ืืืขืืืจ ืืช ืืืงืฉื ืืืคืืืงืฆืื. ืืจืื ืืืคืืืงืฆืืืช ืื ืฆืจืื ืืืขืช ืื ืืืงืฉื ื ืฉืืื ืืืืฆืขืืช HTTPS ืื ืื, ืืื ืืคืืืงืฆืืืช ืฉืฆืจืืืืช ืืช ืืืืืข ืืื ืฆืจืืืืช ืืืืืืจ ืืช Gunicorn ืื ืฉืืกืืื ืขื ื-proxy ืฉื App Engine ื-gunicorn.conf.py:
forwarded_allow_ips = '*'
secure_scheme_headers = {'X-FORWARDED-PROTO': 'https'}
โซGunicorn ืืืืื ืขืืฉืื ืฉ-wsgi.url_scheme ืขื 'https', ืฉืจืื ืืกืืจืืช ืืืื ืืจื ื ืืฉืชืืฉื ืืื ืืืื ืืืงืฆืื ืืื ืฉืืืงืฉื ืืืืืืืช. ืื ืฉืจืช ื-WSGI ืื ืืืกืืจืช ืื ืชืืืืื ืืื, ืคืฉืื ืืืืงืื ืืช ืืขืจื ืฉื ืืืืชืจืช X-Forwarded-Proto ืืืืคื ืืื ื.
ืืืง ืืืืคืืืงืฆืืืช ืฆืจืืืืช ืื ืืงืืืข ืืช ืืชืืืช ื-IP ืฉื ืืืฉืชืืฉ. ืืืคืฉืจืืช ืืื ืืืื ื ืืืืชืจืช X-Forwarded-For.
ืฉืืื ืื ืฉืืืืืจื secure_scheme_headers ื-gunicorn.conf.py ืฆืจืืื ืืืืืช ืืืืชืืืช ืจืืฉืืืช, ืืื X-FORWARDED-PROTO, ืืื ืืืืชืจืืช ืฉืืงืื ืืืื ืืงืจืื ืืืื ืืืืชืืืช ืืขืืจืืืช, ืืื X-Forwarded-Proto.
ืืืจืืช ืืื ืืจืืฆื
ืืคืฉืจ ืืืฉืชืืฉ ืืกืืืืช ืืื ืืจืืฆื ืืืืืฉื ืฉื Python ืืื ืืืฆืืจ ืืื ืจืืฆื ืืืชืืื ืืืฉืืช. ืืืืข ื ืืกืฃ ืืืื ืืืืืจ ืื ืืฉื ืืชืืื ืืืฉืืช ืฉื Python.
ืืฉืชื ื ืกืืืื
ืืฉืชื ื ืืกืืืื ืืืืื ืืืืืจืื ืขื ืืื ืกืืืืช ืืื ืืจืืฆื:
| ืืฉืชื ื ืกืืืื | ืชืืืืจ |
|---|---|
GAE_INSTANCE |
ืืฉื ืฉื ืืืืื ื ืื ืืืืืช. |
GAE_MEMORY_MB |
ื ืคื ืืืืืจืื ืฉืืืื ืืชืืืื ืืืคืืืงืฆืื. |
GAE_SERVICE |
ืฉื ืืฉืืจืืช ืฉืฆืืื ืืงืืืฅ app.yaml
ืฉื ืืืคืืืงืฆืื, ืื ืื ืื ืฆืืื ืฉื ืฉืืจืืช, ืืฉื ืฉืืืืืจ ืืื default. |
GAE_VERSION |
ืชืืืืช ืืืจืกื ืฉื ืืืคืืืงืฆืื ืื ืืืืืช. |
GOOGLE_CLOUD_PROJECT |
ืืืื ืืคืจืืืงื ืฉืืฉืืื ืืืคืืืงืฆืื, ืฉืืืคืืข ืืืกืืฃ Google Cloud |
PORT |
ืืืฆืืื ืฉืชืงืื ืืงืฉืืช HTTP. |
ืืคืฉืจ ืืืืืืจ ืืฉืชื ื ืกืืืื ื ืืกืคืื ืืงืืืฅ app.yaml.
ืฉืจืช ืืื-ื ืชืื ืื
ืื ืืืคืข ืฉื ืืืคืืืงืฆืื ืืืื ืืืฉืชืืฉ ืืฉืจืช ืืืื-ื ืชืื ืื ืฉื Compute Engine ืืื ืืฉืืื ืฉืืืืชืืช ืืืื ืืืืข ืขื ืืืืคืข, ืืืื ืฉื ืืืืจื, ืืชืืืช ื-IP ืืืืฆืื ืืช, ืืืื ืืืืคืข, ืืื-ื ืชืื ืื ืืืชืืืื ืืืฉืืช ืืคืจืื ืืฉืืื ืืฉืืจืืช. ื-App Engine ืื ืืคืฉืจ ืืืืืืจ ืืื-ื ืชืื ืื ืืืชืืืื ืืืฉืืช ืืื ืืืคืข, ืืื ืืคืฉืจ ืืืืืืจ ืืื-ื ืชืื ืื ืืืชืืืื ืืืฉืืช ืืจืืช ืืคืจืืืงื ืืืงืจืื ืืืชื ืืืืืคืขืื ืฉื App Engine ื-Compute Engine.
ืืคืื ืงืฆืื ืืืืืื ืืื ืืฉืชืืฉืช ืืฉืจืช ืืืื-ื ืชืื ืื ืืื ืืงืื ืืช ืืชืืืช ื-IP ืืืืฆืื ืืช ืฉื ืืืืคืข: