Python 编写的 webservice 怎么部署到服务器(比如 Apache 等)上?

使用 Python 的 spyne 库编写了 webservice 程序,在 PyCharm 里面运行着,就是这样启动的:

if __name__ == '__main__':
    server = make_server(ip, port, wsgi_app)
    server.serve_forever()

现在想把这个 webservice 部署到服务器上,应该怎么配置啊?可以放到 Apache 这样的服务器上吗?在网上搜了一圈实在没找到解决方案,特来请教。


Python 编写的 webservice 怎么部署到服务器(比如 Apache 等)上?

14 回复

能持久化就行,supervisor 一把梭


用 Apache 部署 Python Web 服务,最主流的方式是用 mod_wsgi 模块。它能让 Apache 直接托管遵循 WSGI 规范的 Python 应用(比如 Flask、Django)。下面我以 Flask 应用为例,给你一个完整的配置流程。

1. 准备你的应用 假设你的应用入口文件是 myapp.py,内容如下:

# myapp.py
from flask import Flask
application = Flask(__name__)  # mod_wsgi 默认找 `application` 这个变量

@application.route('/')
def hello():
    return "Hello from Flask on Apache!"

if __name__ == '__main__':
    application.run()

关键点:WSGI 入口必须是 application 变量(或者你可以在 Apache 配置里指定其他名字)。

2. 安装 mod_wsgi 在 Ubuntu/Debian 上:

sudo apt update
sudo apt install apache2 libapache2-mod-wsgi-py3

在 CentOS/RHEL 上:

sudo yum install httpd mod_wsgi

如果你用虚拟环境,可能需要用 pip 安装:pip install mod_wsgi,然后生成配置并加载,稍微麻烦点。

3. 配置 Apache 创建一个虚拟主机配置文件,比如 /etc/apache2/sites-available/myapp.conf(路径可能因系统而异):

<VirtualHost *:80>
    ServerName yourdomain.com  # 改成你的域名或IP

    # 指向你的应用目录
    WSGIDaemonProcess myapp python-path=/path/to/your/app
    WSGIScriptAlias / /path/to/your/app/myapp.wsgi

    <Directory /path/to/your/app>
        WSGIProcessGroup myapp
        WSGIApplicationGroup %{GLOBAL}
        Require all granted
    </Directory>

    # 可选:静态文件处理
    Alias /static /path/to/your/app/static
    <Directory /path/to/your/app/static>
        Require all granted
    </Directory>
</VirtualHost>

4. 创建 WSGI 入口文件 在应用目录下创建 myapp.wsgi 文件:

import sys
sys.path.insert(0, '/path/to/your/app')

from myapp import application

5. 启用配置并重启 Apache

sudo a2ensite myapp.conf  # Debian/Ubuntu
sudo systemctl restart apache2

在 CentOS 上,配置文件通常放在 /etc/httpd/conf.d/,重启用 sudo systemctl restart httpd

6. 检查权限和日志 确保 Apache 用户(通常是 www-dataapache)有权限读取你的应用文件。如果出问题,查 Apache 错误日志:/var/log/apache2/error.log/var/log/httpd/error_log

一句话总结:用 mod_wsgi 把 Flask/Django 挂到 Apache 上,配好路径和权限就行。

我看到了 wsgi

能不能详细说说啊,囧

它不该出现吗?哈哈

搜搜 nginx + python + uwsgi 大把
比如 http://www.cnblogs.com/Erick-L/p/7066455.html

windows 上我用 apache
linux 直接上 gunicorn

你自己写了 一个 server,然后还要部署到 server 上?
你的意思是前面在架一个 nginx 做分发吗?

我没太理解。。。

uwsgi 或者 反向代理

自己写了一个 webservice 接收请求返回数据,想让他运行在 apache 上,现在是在 pycharm 里运行的

windows 上 apache 我不太清楚怎么配置,以前部署过 Django 程序,跟那差不多配置吗

最简单的方法就是端口反向代理

我说一下我的理解不一定对。

我感觉你现在做的相当于自己实现了一个简易版的 apache,但是你现在想让一个 apache 运行的 apache 上。。。好奇怪。。。

你说的 webservice 是指 wsgi_app 还是 make_server。

Apache 是一个服务器软件,你写的 Python 实现了部分 Apache 的功能,二者在同一级别上,怎么说谁部署到谁?
我觉得你可以这样,Apache 监听 80 端口,python 脚本监听 8080 端口。根据 ip 或者域名,在 apache 里用 reverse proxy 代理 8080 端口。这样你既可以将你的软件发布到 web,又可以使用 apache 比较强大的目录管理与插件功能。

回到顶部