下面将详细讲解“nginx搭建基于python的web环境的实现步骤”的攻略。
安装nginx
首先我们需要在服务器上安装nginx,可以使用以下命令进行安装:
sudo apt update
sudo apt install nginx
完成安装后可使用以下命令检查服务是否已启动:
sudo systemctl status nginx
若服务已启动,应该看到如下输出:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-05-11 08:17:12 UTC; 1h 9min ago
Docs: man:nginx(8)
Process: 892 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 893 (nginx)
Tasks: 2 (limit: 2279)
Memory: 4.3M
CGroup: /system.slice/nginx.service
├─893 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─894 nginx: worker process
提到了nginx成功运行,我们可以在浏览器中通过访问服务器的IP地址来检查nginx是否已经可用。如果您看到nginx的欢迎页面,那么nginx已经安装成功。
安装uWSGI和Python
接下来,我们需要在服务器上安装uWSGI和Python:
sudo apt install python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools
sudo pip3 install uwsgi
在安装完成后,您可以使用以下命令检查uWSGI是否已经正确安装:
uwsgi --version
若您看到类似以下的输出,这就说明uWSGI已经成功安装:
2.0.19.1
创建Python Web应用
我们将创建一个使用flask框架的Python Web应用来演示如何使用uWSGI,您可以使用自己想使用的Web框架。
首先,我们需要创建一个名为app.py
的文件。内容如下:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
上面的代码定义了一个名为app
的Flask应用。该应用定义了一个名为hello
的路由,用户访问根URL时将返回"Hello, World!"。
配置uWSGI
接下来,我们将创建一个uWSGI配置文件以启动Python Web应用。
首先,我们需要创建一个名为service.ini
的文件,其内容如下:
[uwsgi]
module = app:app
master = true
processes = 5
socket = service.sock
chmod-socket = 660
vacuum = true
die-on-term = true
上面的代码定义了一个uwsgi服务的配置项,其中module
表示要启动的Python应用的名称;socket
表示uWSGI将监听的套接字文件的名称。切记:这里socket
的名称与nginx配置文件的名称必须一致!
在此之后,我们将使用以下命令启动uWSGI服务:
uwsgi --ini service.ini
这行命令告诉uWSGI加载service.ini
中定义的配置参数,并根据配置参数启动Python Web应用。
在这个之后,您可以通过您的浏览器访问服务器的IP地址来确认您的Python Web应用是否已经运行成功。
配置nginx
为了为Python Web应用提供服务,我们需要使用nginx作为反向代理和静态文件服务器。
在此之前,您需要创建一个名为service.sock
的UNIX套接字文件,可以使用以下命令完成此操作:
sudo touch /var/www/<YOUR_PROJECT_NAME>/service.sock
sudo chown www-data:www-data /var/www/<YOUR_PROJECT_NAME>/service.sock
在完成以上操作后,您可以创建一个名为<YOUR_PROJECT_NAME>
的目录来存放您的Python Web 应用,并使用以下命令创建名为<YOUR_PROJECT_NAME>
的配置文件:
sudo nano /etc/nginx/sites-available/<YOUR_PROJECT_NAME>
请将<YOUR_PROJECT_NAME>
更改为您的项目名称。
现在,请将以下内容复制到刚创建的文件中:
server {
listen 80;
server_name your_domain.com www.your_domain.com;
location / {
include uwsgi_params;
uwsgi_pass unix:/var/www/<YOUR_PROJECT_NAME>/service.sock;
}
}
我们可以对上述代码进行逐行解释:
- 第1~3行指定了要监听的端口,也可以指定一个域名;
- 第5~7行配置了将请求发送到
service.sock
套接字文件的uWSGI工具; - 第8行关闭了所有请求的代理缓存;
当您已经完成了这一切之后,请使用以下命令启用这个站点:
sudo ln -s /etc/nginx/sites-available/<YOUR_PROJECT_NAME> /etc/nginx/sites-enabled
并检查nginx配置是否已正确启用:
sudo nginx -t
如果您看到了像下面这样的输出,则说明一切正常:
nginx: configuration file /etc/nginx/nginx.conf test is successful
现在,请重新启动nginx服务以应用配置更改:
sudo systemctl restart nginx
示例
在这里我会给出两个小例子:如何通过Python实现一个基本的网页和一个简单的RESTful API。
Python实现简单网页
在开始写简单的网页之前,我们需要添加Flask的依赖。
使用以下命令将Flask作为依赖添加到我们的Python虚拟环境中:
pip3 install flask
我们创建一个名为"website.py"代码文件,文件内容如下:
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def home():
return render_template("home.html")
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080, debug=True)
这里我们创建一个根路由“/”对应的Python函数home()
,返回我们的页面模板。与此同时,我们将应用程序绑定到指定的主机地址和端口。
接下来,我们需要添加一个名为"home.html"的HTML模板来描述我们的简单网页。
<!DOCTYPE html>
<html>
<head>
<title>My First Flask App</title>
</head>
<body>
<h1>Welcome to my first Flask App! </h1>
</body>
</html>
请将上述页面编写为一个HTML模板,并放置在项目的根目录下。
我们可以通过以下命令启动Flask应用程序:
python3 website.py
您现在可以通过您的浏览器访问http://<服务器IP地址>:8080
来查看您的Flask网站的运行情况。
如果您看到浏览器中渲染出了我们刚刚编写的HTML页面,您就已经成功地编写了一个简单的Flask Web应用了!
Python实现RESTful API
这次,我们将演示如何使用Python编写RESTful风格的API。我们创建一个名为"cars.py"的代码文件。内容如下:
from flask import Flask, request, jsonify
app = Flask(__name__)
cars = [
{
'brand': 'BMW',
'year': '2018',
'model': 'X5',
},
{
'brand': 'Mercedes',
'year': '2020',
'model': 'S class',
},
{
'brand': 'Audi',
'year': '2016',
'model': 'Q5',
}
]
@app.route('/cars/', methods=['GET'])
def get_all_cars():
return jsonify({'cars': cars})
@app.route('/cars/', methods=['POST'])
def add_car():
car = request.get_json()
cars.append(car)
return jsonify(car)
@app.route('/cars/<string:model>/', methods=['PUT'])
def update_car(model):
for i in range(len(cars)):
if cars[i]['model'] == model:
cars[i] = request.get_json()
return jsonify(cars[i]), 200
return jsonify({'message': 'Car not found'})
@app.route('/cars/<string:model>/', methods=['DELETE'])
def remove_car(model):
for i in range(len(cars)):
if cars[i]['model'] == model:
cars.pop(i)
return jsonify({'message': 'Car removed'})
return jsonify({'message': 'Car not found'})
if __name__ == '__main__':
app.run(debug=True, host='localhost', port=8080)
代码中的API模拟了一个简单的汽车列表。GET
请求返回所有汽车的列表,POST
请求将新车添加到列表中,PUT
请求更新现有的汽车,DELETE
请求删除现有汽车。
到现在,我们已经完成了uWSGI、Python应用和nginx的全部配置。为了启动我们的Python Web应用程序并访问API,您可以使用以下命令:
uwsgi --ini service.ini
现在您可以通过访问http://
总结:我们成功地创建了一个基于Python的Web环境,并且可以通过NGINX运行并提供服务。我们还创建了一个基本网站和一个简单API的例子来演示了如何使用Flask框架和Python创建Web应用程序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nginx搭建基于python的web环境的实现步骤 - Python技术站