NewApp In Nginx
สรุปการตั้งค่า Nginx เพื่อเพิ่ม App ใหม่ และขอใบรับรอง SSL สำหรับ มี gunicorn จะข้ามไปขั้นตอน add เพิ่มเลยนะ ...
2024-06-30 16:38:33 - @ratanon
ระบบมี gunicorn จะข้ามไปขั้นตอน add เพิ่มเลยนะ ...
สร้าง Flask App (ตัวอย่าง)
mkdir -p /home/m1n.app/python cd /home/m1n.app/python
สร้างไฟล์ api.py
nano api.py
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return "API is running!" if __name__ == '__main__': app.run()
สร้าง Systemd Service สำหรับ Gunicorn
sudo nano /etc/systemd/system/api.service [Unit] Description=API Flask App After=network.target [Service] User=www-data Group=www-data WorkingDirectory=/home/m1n.app/python ExecStart=/usr/local/bin/gunicorn --workers 3 --bind 0.0.0.0:5001 api:app Restart=always [Install] WantedBy=multi-user.target
เริ่มต้นและเปิดใช้งาน Gunicorn
sudo systemctl start api sudo systemctl enable api sudo systemctl status api
ขอใบรับรอง SSL ด้วย Certbot
ติดตั้ง Certbot และปลั๊กอิน Cloudflare ถ้าเคยลงในเครื่องนี้แล้ว แก้ใน Resources User API Tokens เป็น All Zone แล้วใช้คำสั่ง ขอใบรับรอง SSL สำหรับโดเมน ได้เลย ข้าม 3 ข้อล่างไป
sudo apt-get install certbot python3-certbot-dns-cloudflare
สร้างไฟล์ Credentials สำหรับ Cloudflare
sudo nano /root/.cloudflare_credentials dns_cloudflare_api_token = YOUR_CLOUDFLARE_API_TOKEN
ตั้งค่าการอนุญาต
sudo chmod 600 /root/.cloudflare_credentials
ขอใบรับรอง SSL สำหรับโดเมน
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /root/.cloudflare_credentials -d api.m1n.app
ตั้งค่า Nginx เพื่อรองรับ API ใหม่ สร้างไฟล์การตั้งค่า Nginx
sudo nano /etc/nginx/sites-available/api
server { listen 8443 ssl; server_name api.m1n.app; ssl_certificate /etc/letsencrypt/live/api.m1n.app/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/api.m1n.app/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { proxy_pass http://127.0.0.1:5001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
สร้าง symbolic link ไปยัง sites-enabled
sudo ln -s /etc/nginx/sites-available/api /etc/nginx/sites-enabled/
ทดสอบการตั้งค่าและรีโหลด Nginx
sudo nginx -t sudo systemctl reload nginx
ตรวจสอบการทำงานของ Firewall และเปิดพอร์ตที่จำเป็น
ทดสอบการเข้าถึง API ใช้เบราว์เซอร์หรือ curl เพื่อตรวจสอบ:
curl https://api.m1n.app:8443/
จะเห็นข้อความ "API is running!"
ถ้ามี app อื่นก็ขยับ port 500x ไปเรื่อยๆ