nginx + uwsgi + flask 补充内容

于 2024年6月1号开始把的云主机从张北迁移到杭州来,因为 OS 是从 6U 升级到 阿里云的龙蜥OS 8u,所以,光 WordPress 就折腾了1天多,终于搞定。

然后,记起来以前也通过 php 的 server 支持了 ios 的 API服务,所以,尝试把 ios 的服务端切换到 flask + python 来。

继续研究了 2018年的在博客记录的 flask 的配置,稍作了修改,如下:

1: 首先,使用一个域名 cmesoft.com 提供服务。

2:其次,配置 /etc/nginx/conf.d/cmesoft.conf 支持 WordPress站点,内容如下:

server {
	    	listen       80;                        # 监听端口
		server_name www.cmesoft.com cmesoft.com;    # 站点域名
		#server_name  121.199.16.184 121.199.16.184;
			client_max_body_size 50M;
	                  # 站点根目录

	    	
	       location / {
		       		#index index.html index.htm index.php;   # 默认导航页
				root  /data/web/cmesoft;    
				index  index.php index.html index.htm;
						        }

	           location ~ \.php$ {

			        fastcgi_pass 127.0.0.1:9000;
				#fastcgi_index index.php;
				#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
				fastcgi_param  SCRIPT_FILENAME  /data/web/cmesoft/$fastcgi_script_name;
				include        fastcgi_params;
			}
}

3:因为 wordpress 的页面放在: /data/web/cmesoft 下,而 python api的代码放在 /data/web/pyapi 底下,所以,为了把服务隔离开,不同的目录,不同额端口,给 pyapi 配置另外一个服务端口。

4. pyapi 的 nginx 配置如下:

cat  /etc/nginx/conf.d/pyapi.conf 
server {
	listen       8080 default_server;
	server_name  _;

	location ~ /pyapi { 
		proxy_pass http://127.0.0.1:8888;
			}

		error_page 404 /404.html;
		location = /40x.html {
				}

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

}

让 pyapi 监听 8080 端口,转到后端 flask 的 8888 端口,uwsgi 配置如下:

cat uwsgi.ini
[uwsgi]
## For directlly http access
http-socket=127.0.0.1:8888

### For nginx proxy
#socket=/tmp/ppt.sock

wsgi-file=/data/web/pyapi/server.py
#plugins = python
callable = app
#chdir = /data/install/bin
touch-reload=/data/web/pyapi/
processes = 4
threads = 4
stats = 127.0.0.1:9191
post-buffering = 8192
buffer-size = 65535
socket-timeout = 10
uid = apache
gid = apache
master = true
#protocol = uwsgi
daemonize = uwsgi.log
pidfile = uwsgi.pid

然后,/data/web/pyapi/server.py 内容如下:

cat server.py 
from flask import Flask,render_template, jsonify
from flask import request

app = Flask(__name__)

@app.route('/pyapi', methods=['GET', 'POST'])
def index():
    requester = request.remote_addr
    #logging.info('Data request from: %s' % requester)
    url = request.url
    uid = url.split('uid=')[-1]
    get_name=request.args.get("name")
    post_name=request.form.get("name")
                                            #return "Test message, your input uid=%s, method=%s, get_name=%s, post_name=%s  from %s\n" % (uid, request.method, get_name, post_name, requester)
                                            
    return jsonify(get_name=get_name,post_name=post_name)

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

在阿里云的ECS上开启对外的 8080 端口服务,测试如下:

# curl -s "cmesoft.com:8080/pyapi?uid=3434&name=get_Wade" -d "name=post_james" | jq
{
  "get_name": "get_Wade",
  "post_name": "post_james"
}

从代码和测试可以看到,我们的 FLASK API 接受 GET 和 POST 调用,可以作为一个小小的 服务端 API 网关。

今天就更新到这里。 —- 2024-06-02 22:20 分。

This entry was posted in 运维相关. Bookmark the permalink. Follow any comments here with the RSS feed for this post. Both comments and trackbacks are currently closed.