นำเว็บ Python (FastAPI, Flask, Django) ขึ้นออนไลน์ด้วย AI ในรอบเดียว

BrewInTH build และเริ่มแอป Python ยังไง ต้องเตรียมไฟล์แบบไหน ต่อฐานข้อมูลด้วย DATABASE_URL และเช็กลิสต์ Django 5 ข้อ พร้อม prompt ให้ AI ทำแทน
Python เป็นภาษาที่ AI เขียนเก่งมาก สั่งให้ทำ API ด้วย FastAPI หรือระบบหลังบ้านด้วย Django ไม่กี่นาทีก็รันบนเครื่องตัวเองได้ แต่พอจะเอาขึ้นออนไลน์ หลายคนติดคำถามเดิม ต้องใช้ gunicorn หรือ uvicorn ตั้งพอร์ตเท่าไร ฐานข้อมูลต่อยังไง แล้วทำไม Django ขึ้นหน้า DisallowedHost
บทความนี้อธิบายว่า BrewInTH build และรันโปรเจกต์ Python ยังไง ต้องเตรียมไฟล์แบบไหนให้ผ่านในรอบเดียว พร้อมเช็กลิสต์ของ FastAPI, Flask และ Django และ prompt ที่ส่งให้ AI ทำแทนได้เลย
สรุปสั้นก่อนอ่าน
✅ มีrequirements.txtที่รากของโปรเจกต์ ระบบรู้เองว่าเป็น Python และติดตั้งแพ็กเกจให้ตอน build
✅ ไม่ต้องตั้งคำสั่ง start ถ้าวางไฟล์ตามแบบ:main.py(FastAPI),app.py(Flask) หรือmanage.py+ โฟลเดอร์ที่มีwsgi.py(Django)
✅ ฐานข้อมูลอ่านจากDATABASE_URLที่ระบบใส่ให้ อย่าฝังรหัสผ่านในโค้ด และอย่าใช้ไฟล์ SQLite ข้างโค้ด
✅ Django ต้องตั้งALLOWED_HOSTS,CSRF_TRUSTED_ORIGINSและใช้ คำสั่งก่อนเผยแพร่ รัน migrate
✅ ไม่ผ่านรอบแรก เปิด log หาป้าย[app output]แล้วให้ AI แก้
BrewInTH รันโปรเจกต์ Python ยังไง
เมื่อ AI ส่งโค้ดเป็น ZIP ขึ้นมา ระบบทำ 3 ขั้น
- ดูว่าเป็นเทคโนโลยีอะไร ถ้าตอนสร้างโปรเจกต์เลือก ให้ระบบเลือกให้ (แนะนำ) ระบบดูจากไฟล์ที่ราก เจอ
requirements.txtหรือpyproject.tomlก็รู้ว่าเป็น Python - build สร้าง virtual environment แล้ว
pip install -r requirements.txtให้ (ถ้ามีแต่pyproject.tomlจะติดตั้งด้วยpip install .) - เริ่มแอป ถ้าไม่ได้ตั้งคำสั่ง start เอง ระบบเลือกให้จากไฟล์ที่เจอ ตามภาพด้านล่าง

ระบบดูในไฟล์ด้วยว่าใช้เฟรมเวิร์กอะไร ถ้า main.py เป็น Flask ก็เริ่มด้วย gunicorn ถ้า app.py เป็น FastAPI ก็เริ่มด้วย uvicorn ทุกแบบฟังที่ 0.0.0.0 และพอร์ตจากตัวแปร PORT ให้เอง คุณไม่ต้องเขียน uvicorn.run(...) หรือกำหนดพอร์ตในโค้ด
ข้อเดียวที่ต้องจำ: ตัวแปรของแอปต้องชื่อ app (เช่น app = FastAPI() หรือ app = Flask(__name__)) ถ้าโครงโปรเจกต์ไม่ตรงแบบไหนเลย ให้ตั้ง คำสั่ง start เองในแท็บ การเผยแพร่ › ตัวเลือกขั้นสูง (build / start / port)
เตรียมโปรเจกต์ให้ผ่านในรอบเดียว
ใช้ได้กับทุกเฟรมเวิร์ก
requirements.txtอยู่ที่รากของ ZIP ไม่อยู่ในโฟลเดอร์ซ้อน และมีทุกแพ็กเกจที่โค้ด import รวมถึงgunicornหรือuvicornถ้าใช้ Poetry หรือ Pipenv ให้ AI export เป็นrequirements.txt- ไม่ใส่ของที่ไม่ต้องใช้ใน ZIP เช่น โฟลเดอร์
venv/,.venv/,__pycache__/,.git/และไฟล์.env - ค่าลับตั้งที่แท็บ ตั้งค่าแอป เช่น
SECRET_KEYหรือ API key แล้วอ่านในโค้ดด้วยos.environ - เขียนไฟล์ได้เฉพาะ
/tmpและ/dataโฟลเดอร์ของโค้ดเป็นแบบอ่านอย่างเดียวตอนแอปรัน ไฟล์ที่ผู้ใช้อัปโหลดต้องเก็บใต้/data(เปิด พื้นที่เก็บไฟล์ถาวร (/data) ในแท็บ ตั้งค่าแอป ก่อน) ส่วน/tmpหายทุกครั้งที่แอปเริ่มใหม่ - หน้าตรวจความพร้อม ระบบเปิด
/แล้วต้องได้ 2xx หรือ 3xx ถ้าเป็น API ที่ไม่มีหน้า/ให้ทำ/healthแล้วตั้งในช่อง Path ตรวจความพร้อม (อยู่ในตัวเลือกขั้นสูงของแท็บ การเผยแพร่)
ฐานข้อมูล: อ่านจาก DATABASE_URL
สร้างฐานข้อมูลในโปรเจกต์แล้ว ระบบใส่ค่าเชื่อมต่อในค่าตั้งของแอปให้เอง: DATABASE_URL สำหรับ PostgreSQL และ MYSQL_URL สำหรับ MySQL / MariaDB ค่าหน้าตาแบบ postgresql://user:pass@host:5432/dbname
- SQLAlchemy แบบปกติและ psycopg ใช้ค่า
DATABASE_URLได้ตรง ๆ - SQLAlchemy แบบ async ให้โค้ดเปลี่ยนคำนำหน้าเป็น
postgresql+asyncpg://ก่อนใช้ - MySQL กับ SQLAlchemy ให้เปลี่ยน
mysql://เป็นmysql+pymysql:// - Django ใช้แพ็กเกจ
dj-database-urlอ่านDATABASE_URLในsettings.py
อย่าใช้ไฟล์ SQLite ข้างโค้ด (เช่น db.sqlite3 ค่าเริ่มต้นของ Django) เพราะโฟลเดอร์โค้ดเขียนไม่ได้ และข้อมูลจะหายเมื่อ deploy ใหม่ เว็บที่ใช้จริงควรใช้ PostgreSQL ยังไม่แน่ใจว่าเลือกตัวไหน อ่านเลือกฐานข้อมูลแบบไหนดี
ถ้าสร้างฐานข้อมูล หลัง เว็บขึ้นไปแล้ว ต้อง deploy อีกรอบ แอปจึงจะเห็นค่าเชื่อมต่อ
FastAPI และ Flask
สองตัวนี้ง่ายที่สุด โครงขั้นต่ำคือ
main.py ← app = FastAPI() (Flask ใช้ app.py ก็ได้)
requirements.txt ← fastapi, uvicorn[standard], และแพ็กเกจอื่นที่ใช้
ถ้าโปรเจกต์ใหญ่ขึ้นและใช้โครงแบบ app/main.py ระบบก็รู้จัก (รวมถึงโฟลเดอร์ src/, api/, backend/, server/)
ถ้าตารางในฐานข้อมูลสร้างด้วย Alembic ให้ตั้ง คำสั่งก่อนเผยแพร่ (release command) เป็น python -m alembic upgrade head ระบบรันคำสั่งนี้จากโค้ดชุดใหม่ก่อนสลับผู้เข้าชมไปเวอร์ชันใหม่ ถ้าล้มเหลว เวอร์ชันเดิมยังเปิดอยู่
Django: 5 เรื่องที่ต้องตั้ง
Django ขึ้นได้ดี แต่มีค่าตั้งสำหรับ production ที่ AI มักลืม

ALLOWED_HOSTSต้องมีที่อยู่เว็บของโปรเจกต์ (และโดเมนของคุณถ้ามี) ไม่งั้นได้หน้า DisallowedHost ให้อ่านจากค่าตั้งแอป จะได้ไม่ต้องแก้โค้ดเมื่อเปลี่ยนที่อยู่CSRF_TRUSTED_ORIGINSใส่https://ที่อยู่เว็บไม่งั้นฟอร์มและหน้า admin ขึ้น "CSRF verification failed" และเพิ่มSECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")เพราะ BrewInTH รับ HTTPS ให้แล้วส่งต่อมาที่แอป- ฐานข้อมูล อ่าน
DATABASE_URLด้วยdj-database-urlแทน SQLite - migrate ตั้ง คำสั่งก่อนเผยแพร่ (release command) เป็น
python manage.py migrate --noinputตารางจะพร้อมก่อนเว็บเปิดทุกครั้ง - ไฟล์ static (CSS ของหน้า admin) ใช้
whitenoiseและให้ AI รันpython manage.py collectstatic --noinputก่อนทำ ZIP แล้วใส่โฟลเดอร์ที่ได้ไปใน ZIP ด้วย
อย่าลืม DEBUG = False และเก็บ SECRET_KEY ในแท็บ ตั้งค่าแอป ไม่ใช่ในโค้ด
เรื่องโครงไฟล์: manage.py ต้องอยู่ที่รากของ ZIP และมีโฟลเดอร์เดียวที่มี wsgi.py (โฟลเดอร์ตั้งค่าของโปรเจกต์ เช่น config/) ระบบจะเริ่มด้วย gunicorn ให้เอง
Prompt ให้ AI นำขึ้นให้
ใช้กับ AI ที่ทำงานบนคอมพิวเตอร์ (Claude Code, Codex, Cursor, Windsurf) หลังส่งลิงก์และ token ของโปรเจกต์ให้แล้ว
ช่วยนำโปรเจกต์ Python นี้ขึ้น BrewInTH ให้ผ่านในรอบเดียว
1. ตรวจว่ามี requirements.txt ที่รากและครบทุกแพ็กเกจที่ import (รวม gunicorn / uvicorn)
2. ตัวแปรแอปต้องชื่อ app และโครงไฟล์ตรงกับที่ BrewInTH เริ่มให้อัตโนมัติ ถ้าไม่ตรงให้ตั้งคำสั่ง start
3. ฐานข้อมูลอ่านจาก DATABASE_URL เท่านั้น ห้ามใช้ไฟล์ SQLite ข้างโค้ด
4. ถ้าเป็น Django: ตั้ง ALLOWED_HOSTS, CSRF_TRUSTED_ORIGINS, SECURE_PROXY_SSL_HEADER,
ใช้ whitenoise, รัน collectstatic ก่อนทำ ZIP และตั้ง release command เป็น migrate
5. ค่าลับทั้งหมดตั้งเป็น secret ของโปรเจกต์ ไม่ใส่ .env, venv, __pycache__ ใน ZIP
6. deploy แล้วเปิดเว็บจริงตรวจหน้าแรกและหน้าที่ใช้ฐานข้อมูล (ใช้ site_check)
7. ถ้าไม่ผ่าน อ่าน log บรรทัด [release command], [readiness], [app output] บอกสาเหตุก่อนแก้
ห้ามลบข้อมูลในฐานข้อมูล
ไม่มี coding agent: ส่ง ZIP เองได้
ถ้าได้โค้ดจากแชต AI เป็น ZIP ใช้หน้า อัปโหลดแล้วขึ้นเว็บ (BETA) ได้ สร้างโปรเจกต์ เลือกโปรเจกต์ แล้วส่ง ZIP ระบบอ่านโค้ดและตั้งหลายอย่างให้เอง เช่น คำสั่ง migrate ของ Django, SECRET_KEY ที่ยังไม่มีค่า และที่อยู่เว็บใน ALLOWED_HOSTS / CSRF_TRUSTED_ORIGINS เมื่อโค้ดอ่านค่าเหล่านี้จากตัวแปร ถ้าไม่ผ่าน หน้านั้นแสดงสาเหตุให้คัดลอกไปถาม AI ต่อได้
งานเบื้องหลังและงานตามเวลา
แอปบน BrewInTH มี process เดียวคือเว็บ ตัว worker ที่ต้องรันค้างตลอด (เช่น Celery worker) จึงไม่มีที่ให้รันแยก ทางที่ใช้ได้คือแท็บ งานตามเวลา ในหน้าโปรเจกต์ ตั้งให้รันคำสั่ง เช่น python manage.py send_reminders ได้ถี่สุดทุก 5 นาที และมีได้ 10 งานต่อโปรเจกต์ งานเล็ก ๆ ที่ต้องทำหลังตอบผู้ใช้ ใช้ BackgroundTasks ของ FastAPI ได้
ปัญหาที่เจอบ่อย
ModuleNotFoundErrorใน[app output]แพ็กเกจนั้นไม่อยู่ในrequirements.txtstart_command_requiredระบบหาไฟล์เริ่มแอปไม่เจอ ย้ายmain.py/app.pyมาที่ราก หรือตั้งคำสั่ง start- DisallowedHost / CSRF verification failed ดูหัวข้อ Django ข้อ 1-2
[readiness]ได้ 404 API ไม่มีหน้า/ตั้ง Path ตรวจความพร้อมเป็น/health- ต่อฐานข้อมูลที่
localhostไม่ได้ โค้ดเขียนที่อยู่ฐานข้อมูลตายตัว ให้อ่านจากDATABASE_URL - แอปดับเองเพราะ RAM ไม่พอ แพ็กเกจฟรีมี RAM 256 MB ไลบรารีใหญ่อย่าง pandas หรือโมเดล ML อาจเกิน ต้องใช้แพ็กเกจที่ใหญ่ขึ้น
วิธีอ่าน log แบบละเอียดอยู่ใน deploy ไม่ผ่าน ให้ AI อ่าน log แล้วแก้เอง
คำถามที่พบบ่อย
ต้องใส่ gunicorn หรือ uvicorn ใน requirements.txt ไหม
ควรใส่ไว้เสมอ จะได้ชัดว่าแอปใช้ตัวไหนและเวอร์ชันอะไร FastAPI ใช้ uvicorn[standard] ส่วน Flask และ Django ใช้ gunicorn
เฟรมเวิร์กอื่น เช่น Streamlit ใช้ได้ไหม
ระบบเริ่มให้อัตโนมัติเฉพาะรูปแบบในบทความนี้ เฟรมเวิร์กอื่นต้องตั้ง คำสั่ง start เอง โดยให้ฟังที่ 0.0.0.0 และพอร์ตจากตัวแปร PORT เรายังไม่ได้ทดสอบทุกเฟรมเวิร์ก ถ้าไม่ขึ้นให้ AI อ่าน log
สร้างผู้ดูแล (superuser) ของ Django ยังไง
ให้ AI รันคำสั่งในแอปหลังเว็บขึ้นแล้ว เช่น python manage.py createsuperuser --noinput โดยตั้งชื่อและรหัสผ่านเป็นค่าตั้งของแอปก่อน (DJANGO_SUPERUSER_USERNAME, DJANGO_SUPERUSER_PASSWORD, DJANGO_SUPERUSER_EMAIL)
เว็บเปิดช้าครั้งแรกเป็นเพราะอะไร
บนแพ็กเกจฟรี แอปจะพักเมื่อไม่มีคนเข้าสักพัก คนแรกที่เข้าจึงรอแอปตื่นครู่หนึ่ง แพ็กเกจแบบชำระเงินตั้งไม่ให้พักได้
ทำจากมือถือได้ไหม
ดูสถานะและ log จากมือถือได้ แต่การให้ AI นำโค้ดขึ้นจากมือถือยังไม่เสถียร แนะนำให้ทำบนคอมพิวเตอร์
สรุป
Python บน BrewInTH ไม่ต้องตั้งค่าเซิร์ฟเวอร์เอง มี requirements.txt ที่ราก วางไฟล์ตามแบบที่ระบบรู้จัก อ่านฐานข้อมูลจาก DATABASE_URL และไม่เขียนไฟล์นอก /data แค่นี้ FastAPI กับ Flask ก็ขึ้นได้ ส่วน Django เพิ่มอีก 5 เรื่อง: ALLOWED_HOSTS, CSRF, ฐานข้อมูล, migrate และไฟล์ static
