linux上搭建简单的HTTP服务器
目标,在linux上搭建简单的http服务器(python+Flask)
租了一台linux服务器,上面部署了wordpress网址,我还想在它上面部署这种处理http的服务
1、在服务器安装用python代码处理http请求所需的环境;
2、在本地windows环境中,开发一套处理请求的测试代码;
3、本地测试其正确性;
4、将代码部署到linux上;
5、测试是否部署成功;
一、在服务器上部署环境
假设已经在服务器上使用了Apache托管WordPress网站。我们将使用Python和一个流行的HTTP框架Flask来处理新的HTTP请求。
下面是使用Flask的详细步骤:
步骤1:通过SSH登录到Linux服务器
ssh your_username@your_server_ip
步骤2:安装Python和pip
许多Linux发行版都预装了Python,但我们还是检查一下并安装新的版本。
sudo apt update
sudo apt install python3 python3-pip
步骤3:创建一个虚拟环境
虚拟环境可以帮助你管理项目的依赖关系,而不干扰系统的其余部分。
sudo apt install python3-venv
python3 -m venv myflaskenv
source myflaskenv/bin/activate
步骤4:安装Flask
pip install flask
注意:
1、如果在安装虚拟环境时:
python3 -m venv myflaskenv
报错:
The virtual environment was not created successfully because ensurepip is not
available. On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.
apt install python3.12-venv
You may need to use sudo with that command. After installing the python3-venv
package, recreate your virtual environment.
Failing command: /root/myflaskenv/bin/python3
是因为没有安装python3-venv包,可以通过下面代码解决:
sudo apt update
sudo apt install python3-venv
2、如果不安装虚拟环境直接使用pip安装 Flask会提示
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
If you wish to install a non-Debian packaged Python application,
it may be easiest to use pipx install xyz, which will manage a
virtual environment for you. Make sure you have pipx installed.
See /usr/share/doc/python3.12/README.venv for more information.
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
所以需要在虚拟环境中搭建HTTP服务。
二. 在本地Windows环境中,开发请求处理代码
下面是在windows本地开发一个简单的Flask应用:
步骤1:安装Python和pip
下载并安装Python:Python官网
步骤2:创建并激活虚拟环境
打开命令提示符(cmd)或者PowerShell:
python -m venv myflaskenv
.\myflaskenv\Scripts\activate
步骤3:安装Flask
pip install flask
步骤4:创建Flask应用
在项目目录中创建应用文件,如 app.py:
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
@app.route('/process', methods=['POST'])
def process_request():
data = request.json
# Here you can add your processing code
return {"status": "success", "data": data}
if __name__ == '__main__':
app.run(debug=True)
至此,在本地就部署好了环境,同时获得了一个简单是python代码。
当然,如果对python比较熟悉的话可以使用其他方式去处理,比如我是在Anaconda中创建了一个WebServer环境并安装了3.8的python和flask框架,然后使用Spyder编辑其完成的代码编辑。
三. 本地测试Flask应用
步骤1:运行应用
在命令提示符中,确保虚拟环境已激活后,运行:
python app.py
步骤2:测试应用
打开你的浏览器访问 http://127.0.0.1:5000/ 看到 "Hello, World!" 说明 Flask 应用启动成功。
你可以使用Postman或者curl等工具测试POST请求:
curl -X POST http://127.0.0.1:5000/process -H "Content-Type: application/json" -d "{\"key\":\"value\"}"
如果你是在IDE中编辑的py脚本,此时在IDE中运行时可能会报错:
SystemExit: 1
因为Flask开发服务器,在IDE中可能不会像在命令行中那样正常工作,因为它需要在主线程中运行。如果可能,可以考虑使用更适合开发的工具,例如Flask-Script或在Anaconda Prompt中直接运行Python脚本。为了避免麻烦,建议在IDE编辑完成后,通过CMD的方式运行脚本。
步骤3:修改Flask应用以监听外部连接
测试完成后,将本地的py文件中的内容修改一下,编辑 app.py:
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
四. 部署到Linux服务器上
步骤1:上传代码到服务器
你可以使用scp或者sftp上传文件:
scp -r py文件路径 your_username@your_server_ip:服务器上存放py文件路径
"py文件路径"下一般还有:
-
源代码文件:例如,Python 项目的 .py文件,Node.js 项目的.js文件,Java 项目的.java或.class文件等。 -
配置文件:例如, .env、config.json、settings.py等用来存放项目配置的文件。 -
依赖文件:例如,Python 项目的 requirements.txt或Pipfile;Node.js 项目的package.json;Java 项目的pom.xml等。 -
静态文件:如图片、CSS 文件、JavaScript 文件等,通常存放在 static或public文件夹中。 -
模板文件:如 HTML 文件,通常存放在 templates目录中。 -
数据库迁移文件:如果使用数据库迁移工具,如 Django 的迁移文件,Flask-Migrate 的迁移文件,或 Hibernate 的迁移文件。 -
必要的脚本文件:如启动脚本、重启脚本等。
我的"服务器上存放py文件路径"为"/var/www/server_py"。如果有FileZilla,可以使用它上传文件,非常方便。

步骤2:在服务器上设置环境和安装依赖
source myflaskenv/bin/activate
cd /var/www/server_py
pip install -r requirements.txt
确保 requirements.txt 包含 Flask:
flask
如果没有requirements.txt文件可以在制作python案例的环境下使用下面代码生成该文件:
pip freeze > requirements.txt
如果自己的py代码中没有复杂的第三方库的调用,这个步骤可以省略。
步骤3:使用Gunicorn来运行Flask应用
安装Gunicorn:
pip install gunicorn
运行Gunicorn:
gunicorn -w 4 -b 0.0.0.0:5000 app:app
这里 -w 表示工作进程数量,-b 表示绑定地址。

四. 测试部署成功与否
步骤1:配置防火墙以允许端口5000
确保防火墙允许端口5000:
sudo ufw allow 5000/tcp
如果是阿里云服务器,可以在服务器安全组中手动添加5000端口:

步骤2:测试外部访问
在本地浏览器或Postman中,访问 http://your_server_ip:5000,测试 "Hello, World!" 页面,以及尝试POST请求。

可选:使用Nginx进行反向代理(推荐)
为了提高性能和安全性,可以使用Nginx做反向代理,并让Flask只在本地接口上运行。
初学者可以暂时不做,比如我就没做。
步骤1:安装Nginx
sudo apt install nginx
步骤2:配置Nginx
在 /etc/nginx/sites-available 目录中创建一个新的配置文件,例如 flaskapp:
server {
listen 80;
server_name your_server_ip;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host host;
proxy_set_header X-Real-IPremote_addr;
proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Protoscheme;
}
}
步骤3:启用配置并重启Nginx
sudo ln -s /etc/nginx/sites-available/flaskapp /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx
现在,可以通过访问服务器IP(例如 http://your_server_ip )来测试Flask应用。
通过这些步骤,就可以在不影响现有WordPress网站的情况下,成功地在的Linux服务器上部署和测试一个新的HTTP处理服务。