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 等)上?
能持久化就行,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-data 或 apache)有权限读取你的应用文件。如果出问题,查 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 比较强大的目录管理与插件功能。

