在Ubuntu上部署Python Web應用可以通過多種方式實現,以下是一些常見的方法:
安裝必要的軟件包
sudo apt update
sudo apt install python3-pip nginx
創建虛擬環境并安裝依賴
sudo apt install python3-venv
mkdir myproject
cd myproject
python3 -m venv venv
source venv/bin/activate
pip install flask gunicorn
編寫你的Flask應用
創建一個簡單的Flask應用,例如app.py
:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
配置Gunicorn
創建一個Gunicorn啟動腳本,例如gunicorn_start.sh
:
#!/bin/bash
NAME="myproject"
DJANGODIR=/path/to/myproject
SOCKFILE=/path/to/myproject/gunicorn.sock
USER=myuser
GROUP=myuser
NUM_WORKERS=3
DJANGO_SETTINGS_MODULE=myproject.settings
DJANGO_WSGI_MODULE=myproject.wsgi
echo "Starting $NAME as `whoami`"
cd $DJANGODIR
source ../venv/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
exec ../venv/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=unix:$SOCKFILE \
--log-level=debug \
--access-logfile=-
配置Nginx
創建一個Nginx配置文件,例如/etc/nginx/sites-available/myproject
:
server {
listen 80;
server_name your_domain_or_ip;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /path/to/myproject;
}
location / {
include proxy_params;
proxy_pass http://unix:/path/to/myproject/gunicorn.sock;
}
}
啟用配置:
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx
啟動Gunicorn
chmod +x gunicorn_start.sh
./gunicorn_start.sh
安裝Docker
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
創建Dockerfile
在你的項目目錄中創建一個Dockerfile
:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["gunicorn", "-b", "0.0.0.0:8000", "myproject.wsgi:application"]
構建Docker鏡像
sudo docker build -t myproject .
運行Docker容器
sudo docker run -d -p 8000:8000 --name myproject_container myproject
如果你使用的是ASGI框架(如Starlette或FastAPI),可以使用Uvicorn或Hypercorn。
安裝必要的軟件包
sudo apt update
sudo apt install python3-pip uvicorn hypercorn
創建虛擬環境并安裝依賴
sudo apt install python3-venv
mkdir myproject
cd myproject
python3 -m venv venv
source venv/bin/activate
pip install fastapi uvicorn
編寫你的FastAPI應用
創建一個簡單的FastAPI應用,例如main.py
:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
運行應用
uvicorn main:app --host 0.0.0.0 --port 8000
通過以上方法,你可以在Ubuntu上成功部署Python Web應用。選擇哪種方法取決于你的具體需求和偏好。