Nginx+uWSGI部署flask项目

uwsgi配置

uwsgi安装

安装uwsgi

pip install uwsgi

启动uwsgi

uwsgin --ini uwsgi.ini

# 后台启动
nohup uwsgi --ini uwsgi.ini &

uwsgi配置

[uwsgi]
# 是否作为主进程
master = true
# 启动uwsgi的端口号,非项目端口,
http=:8080    # 坑:这里用http可以直接用外网访问,如果要用nginx代理则需要改成socket
# 项目目录
chdir = /home/paul/tb_commodity/
# 启动文件
wsgi-file=/home/paul/tb_commodity/manage.py
# 实例Flask对象的app名如果是(all_app)则写callable=all_app
callable=app
# 进程数
processes=4
# 线程数
threads=2
buffer-size = 65536
vacuum=true
# pid存储的路径
pidfile =./uwsgi.pid
# python环境
home=/home/paul/virtual_env/tb_commodity_env/
# 启动文件名,如果是app则写app
module=manage

纯净版uwsgi配置

[uwsgi]
master = true
http=:8080   
chdir = /home/paul/tb_commodity/
wsgi-file=/home/paul/tb_commodity/manage.py
callable=app
processes=4
threads=2
buffer-size = 65536
vacuum=true
pidfile =./uwsgi.pid
home=/home/paul/virtual_env/tb_commodity_env/
module=manage

# 其他可以根据需要配置

nginx安装部署

nginx安装

配置EPEL源

sudo yum install -y epel-release

sudo yum -y update

安装Nginx

yum install -y nginx

启动Nginx

systemctl start nginx

停止nginx

systemctl stop nginx

重启nginx

systemctl restart nginx

查看nginx状态

systemctl status nginx

禁止开机启动nginx

systemctl disable nginx

nginx配置

# 完整的nginx.conf
user nginx
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid
include /usr/share/nginx/modules/*.conf

events{
    
}
http{
    server {
    	# 监听你外网访问的端口号
        listen 80;
    	# 配置域名或者ip
        server_name  121.199.68.77;
    location /{
      include uwsgi_params;
      # 转发到那个地址,转发到uwgi的地址,在通过uwsgi来启动我们的项目
      uwsgi_pass 0.0.0.0:8999;
      uwsgi_connect_timeout 60;
    }
}   
}

需要代理一个服务,则在http中添加一个server

server {
    	# 监听你外网访问的端口号
    listen 80;
    	# 配置域名或者ip
    server_name  121.199.68.77;
    location /{
      include uwsgi_params;
      # 转发到那个地址,转发到uwgi的地址,在通过uwsgi来启动我们的项目
      uwsgi_pass 0.0.0.0:8999;
      uwsgi_connect_timeout 60;
    }
}  

# 根据自己的情况,更改就好

uwsgi配置中的坑

1.如果要看uwsgi启动没有,可以用用命令netstat -anp|grep 端口号来查看,这里的端口号,不是你项目中的端口号,而是你在uwsgi中配置的端口号

2.uwsgi中,如果你用的是http=:8080则可以通过外网直接来访问,但是用nginx代理会报错,我报的错误是504502,而如果要用nginx来反向代理的话需要改成socket=:8080,但是改成socket后,直接访问uwsgi访问不了。(个人碰到比较坑的地方)

3.如果是云服务器,一定不要忘记安全组要放行端口,刚开始就是直接启动服务,怎么都访问不了。能ping通ip的话,端口访问不了,就从服务器控制台-安全组,防火墙,SElinux来排查。

4.最近遇到一个坑:nginx.service start-post operation timed out. Stopping.

大概就是在启动nginx时,systemctl start nginx会夯住几分钟,这几分钟ngxin是可以访问的,但是后面就会报错,如下:

[root@iZwz9fnlmotggn5gy1wsffZ conf]# systemctl start nginx
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

根据提示查看报错:systemctl status nginx.service

systemctl status nginx.service
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Fri 2019-11-15 11:43:10 CST; 15s ago
     Docs: http://nginx.org/en/docs/
  Process: 4363 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=1/FAILURE)
  Process: 4257 ExecStartPost=/bin/sleep 0.1 (code=exited, status=0/SUCCESS)
  Process: 4253 ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf (code=exited, status=0/SUCCESS)
  Process: 4251 ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf (code=exited, status=0/SUCCESS)
 Main PID: 3183 (code=exited, status=0/SUCCESS)

Nov 15 11:43:10 iZwz9fnlmotggn5gy1wsffZ kill[4363]: -p, --pid              print pids without signaling them
Nov 15 11:43:10 iZwz9fnlmotggn5gy1wsffZ kill[4363]: -l, --list [=<signal>] list signal names, or convert one to a name
Nov 15 11:43:10 iZwz9fnlmotggn5gy1wsffZ kill[4363]: -L, --table            list signal names and numbers
Nov 15 11:43:10 iZwz9fnlmotggn5gy1wsffZ kill[4363]: -h, --help     display this help and exit
Nov 15 11:43:10 iZwz9fnlmotggn5gy1wsffZ kill[4363]: -V, --version  output version information and exit
Nov 15 11:43:10 iZwz9fnlmotggn5gy1wsffZ kill[4363]: For more details see kill(1).
Nov 15 11:43:10 iZwz9fnlmotggn5gy1wsffZ systemd[1]: nginx.service: control process exited, code=exited status=1
Nov 15 11:43:10 iZwz9fnlmotggn5gy1wsffZ systemd[1]: Failed to start nginx - high performance web server.
Nov 15 11:43:10 iZwz9fnlmotggn5gy1wsffZ systemd[1]: Unit nginx.service entered failed state.
Nov 15 11:43:10 iZwz9fnlmotggn5gy1wsffZ systemd[1]: nginx.service failed.

根据提示查看报错:journalctl -xe

[root@iZwz9fnlmotggn5gy1wsffZ conf]# journalctl -xe
Nov 15 11:40:59 iZwz9fnlmotggn5gy1wsffZ polkitd[2513]: Unregistered Authentication Agent for unix-process:4105:344564595 (system bus 
Nov 15 11:40:59 iZwz9fnlmotggn5gy1wsffZ root[4149]: [euid=root]:root pts/2 2019-11-15 09:10 (59.33.51.12):[/usr/local/nginx/conf]2019
Nov 15 11:40:59 iZwz9fnlmotggn5gy1wsffZ root[4158]: [euid=root]:root pts/2 2019-11-15 09:10 (59.33.51.12):[/usr/local/nginx/conf]2019
Nov 15 11:41:09 iZwz9fnlmotggn5gy1wsffZ root[4176]: [euid=root]:root pts/2 2019-11-15 09:10 (59.33.51.12):[/usr/local/nginx/conf]2019
Nov 15 11:41:10 iZwz9fnlmotggn5gy1wsffZ root[4186]: [euid=root]:root pts/2 2019-11-15 09:10 (59.33.51.12):[/usr/local/nginx/conf]2019
Nov 15 11:41:13 iZwz9fnlmotggn5gy1wsffZ root[4197]: [euid=root]:root pts/2 2019-11-15 09:10 (59.33.51.12):[/bin]2019-11-15 11:41:13 r
Nov 15 11:41:14 iZwz9fnlmotggn5gy1wsffZ root[4209]: [euid=root]:root pts/2 2019-11-15 09:10 (59.33.51.12):[/bin]2019-11-15 11:41:14 r
Nov 15 11:41:40 iZwz9fnlmotggn5gy1wsffZ polkitd[2513]: Registered Authentication Agent for unix-process:4234:344570141 (system bus na
Nov 15 11:41:40 iZwz9fnlmotggn5gy1wsffZ systemd[1]: Stopped nginx - high performance web server.
-- Subject: Unit nginx.service has finished shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit nginx.service has finished shutting down.
Nov 15 11:41:40 iZwz9fnlmotggn5gy1wsffZ systemd[1]: Starting nginx - high performance web server...
-- Subject: Unit nginx.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit nginx.service has begun starting up.
Nov 15 11:41:40 iZwz9fnlmotggn5gy1wsffZ nginx[4251]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
Nov 15 11:41:40 iZwz9fnlmotggn5gy1wsffZ nginx[4251]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Nov 15 11:41:40 iZwz9fnlmotggn5gy1wsffZ systemd[1]: PID file /var/run/nginx.pid not readable (yet?) after start-post.
Nov 15 11:43:10 iZwz9fnlmotggn5gy1wsffZ systemd[1]: nginx.service start-post operation timed out. Stopping.

实际上是nginx服务起来后,又自动停止了。

可以看到:

nginx.service start-post operation timed out. Stopping.

PID file /var/run/nginx.pid not readable (yet?) after start-post.

解决:

1.检查nginx.conf文件,发现是nginx.conf中没有指定pid的路径

2.nginx.conf中pid需要和nginx.service配置的pid路径一致

3.找到nginx.service文件:find / -name 'nginx.service'

4.最后配置nginx.conf中的配置

5.systemctl start nginx 

6.正常启动

技术支持

centos7安装python3.6.5技术支持:https://www.cnblogs.com/oden/p/11765251.html

posted @ 2019-10-29 16:28  Oden  阅读(771)  评论(0编辑  收藏  举报