在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应用。选择哪种方法取决于你的具体需求和偏好。