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文件路径"下一般还有:

  1. 源代码文件:例如,Python 项目的 .py 文件,Node.js 项目的 .js 文件,Java 项目的 .java.class 文件等。
  2. 配置文件:例如,.envconfig.jsonsettings.py 等用来存放项目配置的文件。
  3. 依赖文件:例如,Python 项目的 requirements.txtPipfile;Node.js 项目的 package.json;Java 项目的 pom.xml 等。
  4. 静态文件:如图片、CSS 文件、JavaScript 文件等,通常存放在 staticpublic 文件夹中。
  5. 模板文件:如 HTML 文件,通常存放在 templates 目录中。
  6. 数据库迁移文件:如果使用数据库迁移工具,如 Django 的迁移文件,Flask-Migrate 的迁移文件,或 Hibernate 的迁移文件。
  7. 必要的脚本文件:如启动脚本、重启脚本等。

我的"服务器上存放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处理服务。

发表回复