CentOS下Nginx+fastcgi+python2搭建web.py服务环境

CentOS6.6下Python Web部署
本文介绍如何在CentOS6.6环境中搭建基于Python的Web应用,包括Python2.7、Nginx、web.py等软件的安装配置过程,并通过示例代码展示如何运行一个简单的Web应用。

我的系统环境是CentOS release 6.6(Final)

环境依赖软件包

1、python2(以下的web.py和Flup不兼容python2的版本)
2、Nginx1.4(需要包含fastcgi和rewrite模块)
3、web.py 0.38(下载最新版本即可)
4、Spawn-fcgi 1.6.3

5、Flup(必须要安装的python2模块)


软件包安装
python2.7安装
[root@localhost home]# wget   https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz
[root@localhost home]# tar  xJf  Python-2.7.13.tar.xz
[root@localhost Python-2.7.13]# cd  Python-2.7.13.tar.xz
[root@localhost Python-2.7.13]# ./configure && make && make install

nginx安装
可以参考CentOS6.6环境中安装Nginx详细过程笔记博客文章

安装spawn-fcgi
[root@localhost home]# wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
[root@localhost home]# tar zxvf spawn-fcgi-1.6.3.tar.gz
[root@localhost spawn-fcgi-1.6.3]# ./configure && make && make install
                               
安装flup
[root@localhost ~]# pip install flup                           
安装web.py
[root@localhost ~]# pip install web.py


配置

Nginx配置文件如下:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen      80;
        server_name  pw.com;
        root /home/www/test;

        location / {
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_script_name;   
            fastcgi_pass 127.0.0.1:9002;
        }

        error_page  500 502 503 504  /50x.html;
        location = /50x.html {
            root  html;
        }

        location /static/ {
            if (-f $request_filename) {
                rewrite ^/static/(.*)$  /static/$1 break;
            }
        }
    }

}
在/home/www/demo目录下创建index.py如下:

注意: 需要给代码设置执行权限,chmod +x index.py。

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import web

urls = ("/.*", "hello")

app = web.application(urls, globals())

class hello:

    def GET(self):
        return 'Hello, world!'

if __name__ == "__main__":
    web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)
    app.run()


软件启动
Nginx启动
[root@localhost ~]# /usr/local/nginx/nginx
[root@localhost ~]# /usr/local/nginx/nginx  -s reload    #重启nginx配置
[root@localhost ~]# /usr/local/nginx/nginx  -s stop       #停止nginx
Spawn-fcgi启动
注意:你可以随意填写地址和端口信息,但是一定需要和Nginx配置文件相匹配
[root@localhost ~]# spawn-fcgi  -d  /home/www/demo  -f  /home/www/demo/index.py  -a  127.0.0.1 -p 9002
[root@localhost ~]# kill  `pgrep -f "python /home/www/demo/index.py"`     #关闭进程

测试
[root@localhost ~]#  curl  localhost
如果打印“hello world!”则表示环境搭建成功

<think>我们正在尝试构建一个离线语音识别系统,使用Nginx作为Web服务器,PHP作为后端处理语言。离线语音识别通常需要特定的语音识别库或引擎,比如CMU Sphinx、Kaldi或Vosk等。由于PHP本身并不直接支持复杂的语音处理,我们可能需要借助外部程序或扩展。 根据引用[1]和[3],我们可以获得Nginx和PHP的官方下载地址。同时,引用[1]提供了Nginx安装的依赖库和步骤,引用[2]提供了PHP和Laravel的安装示例,引用[4]提到了环境配置文件。 步骤概览: 1. 准备服务环境:关闭防火墙和SELinux,安装必要的依赖。 2. 安装Nginx:从源码或包管理器安装。 3. 安装PHP:安装PHP及必要的扩展(如fpm,用于与Nginx通信)。 4. 安装语音识别引擎:例如Vosk,它提供API接口,我们可以通过PHP调用。 5. 配置Nginx与PHP-FPM:使Nginx能够将PHP请求转发给PHP-FPM处理。 6. 编写PHP代码:接收语音文件,调用语音识别引擎,返回识别结果。 详细步骤: ### 1. 准备环境 根据引用[1]: - 确认内核版本:`uname -a`,确保是2.6以上(支持epoll)。 - 关闭防火墙:`systemctl stop firewalld` 和 `systemctl disable firewalld`。 - 停用SELinux:`setenforce 0`(临时)或修改`/etc/selinux/config`(永久)设置`SELINUX=disabled`。 安装依赖库(根据引用[1]和[2]): ```bash # 安装GCC等编译工具 yum install -y gcc gcc-c++ make # 安装PCRE、zlib、OpenSSL yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel ``` ### 2. 安装NginxNginx官网(引用[1]和[3])下载源码,编译安装: ```bash wget http://nginx.org/download/nginx-1.20.1.tar.gz tar -zxvf nginx-1.20.1.tar.gz cd nginx-1.20.1 ./configure --prefix=/usr/local/nginx --with-http_ssl_module make && make install ``` 启动Nginx:`/usr/local/nginx/sbin/nginx` ### 3. 安装PHP 根据引用[2]和[3],我们可以从PHP官网下载源码编译安装,或者使用包管理器安装。这里以包管理器安装为例(假设使用CentOS): ```bash # 添加EPEL和Remi仓库(如果需要安装PHP7.4) yum install -y epel-release yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm yum install -y yum-utils yum-config-manager --enable remi-php74 # 安装PHP和PHP-FPM yum install -y php php-fpm php-cli php-common php-mbstring php-gd php-intl php-xml php-mysqlnd php-zip ``` 启动PHP-FPM:`systemctl start php-fpm` ### 4. 安装语音识别引擎 这里我们选择Vosk,因为它提供了多种语言的API,并且有Python和Java的绑定。但是,由于我们需要在PHP中调用,我们可以通过以下方式之一: a. 使用Vosk的HTTP服务,然后PHP通过HTTP请求调用。 b. 使用PHP的exec或shell_exec函数调用Vosk的命令行工具。 安装Vosk(以Python为例,因为Vosk提供了Python的API): - 安装Python3和pip: yum install -y python3 python3-pip - 安装Vosk: pip3 install vosk 下载Vosk模型(例如中文模型): ```bash wget https://alphacephei.com/vosk/models/vosk-model-cn-0.1.zip unzip vosk-model-cn-0.1.zip -d /path/to/models ``` 我们可以编写一个Python脚本,该脚本接收语音文件路径,然后使用Vosk进行识别,并输出结果。例如,创建一个`recognize.py`: ```python from vosk import Model, KaldiRecognizer import sys import json import wave if len(sys.argv) < 2: print("Usage: python recognize.py <wav_file>") sys.exit(1) model_path = "/path/to/models/vosk-model-cn-0.1" wav_file = sys.argv[1] model = Model(model_path) wf = wave.open(wav_file, "rb") rec = KaldiRecognizer(model, wf.getframerate()) results = [] while True: data = wf.readframes(4000) if len(data) == 0: break if rec.AcceptWaveform(data): results.append(json.loads(rec.Result())) results.append(json.loads(rec.FinalResult())) # 合并结果 text = " ".join([res['text'] for res in results if 'text' in res]) print(text) ``` 测试:`python3 recognize.py test.wav` ### 5. 配置Nginx与PHP-FPM 编辑Nginx配置文件(`/usr/local/nginx/conf/nginx.conf`),添加一个server块处理PHP请求: ```nginx server { listen 80; server_name localhost; location / { root html; index index.html index.php; } location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; # 根据PHP-FPM配置,可能是unix socket fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } ``` 重启Nginx:`/usr/local/nginx/sbin/nginx -s reload` ### 6. 编写PHP代码 在Nginx的html目录(例如`/usr/local/nginx/html`)下创建一个`upload.php`文件,用于上传语音文件并调用语音识别脚本。 示例代码(注意:此代码仅作示例,未做安全验证): ```php <?php if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['audio'])) { $targetDir = "uploads/"; if (!is_dir($targetDir)) { mkdir($targetDir, 0755, true); } $targetFile = $targetDir . basename($_FILES["audio"]["name"]); move_uploaded_file($_FILES["audio"]["tmp_name"], $targetFile); // 调用Python脚本进行识别 $command = "python3 /path/to/recognize.py " . escapeshellarg($targetFile); $output = shell_exec($command); echo json_encode(['text' => $output]); } else { echo "请上传语音文件"; } ?> ``` 同时,创建一个简单的上传表单(index.php): ```php <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="audio"> <input type="submit" value="识别"> </form> ``` 注意:确保Nginx和PHP-FPM进程有权限读写上传目录和调用Python脚本。 安全考虑:实际部署中,需要对上传文件进行严格的验证(如文件类型、大小等),并考虑使用队列处理识别任务,因为语音识别可能耗时较长。 这样,用户通过浏览器上传语音文件,PHP脚本调用Python脚本进行语音识别,然后返回识别结果。 注意:由于语音识别需要大量计算,对于高并发场景,可能需要部署多个语音识别服务,并使用消息队列进行任务分发。 参考文献: [^1]: Nginx安装依赖 [^2]: PHP安装示例 [^3]: 软件下载地址 [^4]: 环境配置 §§相关问题§§ 1. 如何优化Nginx和PHP处理语音识别的性能? 2. 除了Vosk,还有哪些离线语音识别引擎可以在Linux上使用? 3. 如何确保语音文件上传和识别的安全性? 4. 如何处理高并发的语音识别请求?</think>### 离线语音识别环境搭建指南(Nginx+PHP) #### 一、环境准备 1. **系统要求**(引用[1][3]) - Linux内核 ≥ 2.6(支持epoll) - 关闭防火墙:`systemctl stop firewalld && systemctl disable firewalld` - 禁用SELinux:修改`/etc/selinux/config`中`SELINUX=disabled` - 验证:`uname -a` 和 `sestatus` 2. **安装依赖库** ```bash # 基础编译工具 yum install -y gcc gcc-c++ make # Nginx依赖 yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel # PHP依赖 yum install -y libxml2-devel sqlite-devel ``` #### 二、安装核心组件 1. **Nginx安装**(引用[1][3]) ```bash wget http://nginx.org/download/nginx-1.24.0.tar.gz tar zxvf nginx-1.24.0.tar.gz cd nginx-1.24.0 ./configure --prefix=/usr/local/nginx --with-http_ssl_module make && make install ``` 2. **PHP安装**(引用[2][3]) ```bash wget https://www.php.net/distributions/php-8.2.10.tar.gz tar zxvf php-8.2.10.tar.gz cd php-8.2.10 ./configure --prefix=/usr/local/php \ --with-fpm-user=nginx \ --with-fpm-group=nginx \ --enable-fpm make && make install ``` #### 三、语音识别模块集成 1. **安装语音识别引擎** - 推荐使用Vosk(离线开源引擎): ```bash pip3 install vosk wget https://alphacephei.com/vosk/models/vosk-model-en-us-0.22.zip unzip vosk-model-en-us-0.22.zip -d /opt/vosk_models ``` 2. **PHP调用语音识别** ```php // speech_recognition.php $audioFile = $_FILES['audio']['tmp_name']; $modelPath = '/opt/vosk_models/vosk-model-en-us-0.22'; $command = "vosk-transcriber -m $modelPath -i $audioFile -o -"; $result = shell_exec($command); echo json_encode(['text' => $result]); ``` #### 四、Nginx+PHP配置 1. **PHP-FPM配置** ```bash cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf systemctl start php-fpm ``` 2. **Nginx虚拟主机配置** ```nginx server { listen 80; server_name asr.example.com; root /var/www/voice_recognition; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } # 允许大文件上传(语音文件) client_max_body_size 100M; } ``` #### 五、部署验证 1. **创建测试页面** ```html <!-- index.html --> <form action="/speech_recognition.php" method="post" enctype="multipart/form-data"> <input type="file" name="audio" accept="audio/*"> <button type="submit">识别语音</button> </form> ``` 2. **启动服务** ```bash /usr/local/nginx/sbin/nginx php-fpm -D ``` 3. **测试流程** ``` 浏览器访问 → 上传语音文件 → PHP调用Vosk引擎 → 返回识别文本 ``` > **注意事项**: > 1. 模型路径需在`.env`中配置(引用[4]) > 2. 需要安装Python3.7+及pip环境 > 3. 大文件处理需调整`php.ini`中的`upload_max_filesize` > 4. 生产环境需配置HTTPS(引用[1]的SSL模块已启用) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值