uwsgi安装        

        默认uwsgi安装后会启动

pip install uwsgi


# 重启uWSGI服务器
$ sudo service uwsgi restart
 
# 查看所有uWSGI进程
$ ps aux | grep uwsgi
 
# 停止所有uWSGI进程
$ sudo pkill -f uwsgi -9

uwsgi服务测试

我们以在云服务中操作为例,测试uwsi作为web服务器运行python项目。

        步骤1: 确定服务端口,例如8000,将端口加入服务器的安全组。否则后面将无法访问。

        步骤2:在/root/www目录下创建test.py文件,文件中的测试项目内容如下:

# 大家就按下面的写法就好
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

        步骤3:执行如下命令运行

uwsgi --http :8080 --wsgi-file test.py
或
uwsgi --http :8080 --wsgi-file /root/www/test.py

         步骤4: 在浏览器中输入地址访问:ip:8080 , 返回test.py的return结果说明uwsgi作为web服务器已正常安装可以使用。

        

        步骤5:按住Ctrl+C即可推出uwsgi服务,此时浏览器之前的访问将不再有效。除非重新启动服务。  

        

uwsgi启动django

步骤1:在/root/www/路径下创建一个django项目djTest

django-admin startproject djTest

步骤2:修改项目djTest的settings.py文件中的ALLOED_HOST=[]为所有ip可链接,且将默认的数据库连接ei的配置信息都注释掉。

ALLOWED_HOSTS = ["*"]

DATABASES = {
#    'default': {
 #       'ENGINE': 'django.db.backends.sqlite3',
  #      'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
   # }
}

步骤3:运行djTest项目

        注意使用python3,否则报错:

python3 manage.py runserver 0.0.0.0:8080

步骤4:在浏览器端用ip:8080访问,即可看见django的运行,说明django的运行没有问题。

        注意:可能需要等带十几秒才能刷新出django页面。这也说明了django自身的web服务性能很差!无法用于生产环境。

 步骤5:在项目路径/root/www/djTest下,执行如下命令即可实现通过uwsgi访问django项目。

uwsgi --http :8080 --module djTest.wsgi

步骤6: 在浏览器中输入ip:8080即可打开django页面,说明通过uwsgi访问django项目成功。访问很快,这也就是为什么生产环境要用uwsgi的原因。

        以上操作最终实现了通过命令行的操作使用uwsgi访问django项目,但实际生产中我们应用的是配置文件的方式,操作如下:

步骤1: 在项目目录下创建uwsgi配置文件uwsgi.ini, 文件名也可以是其他,后缀要为ini

[uwsgi]
#项目的绝对路径,定位到项目的第一层
chdir = /root/www/djTest
#指明项目的wsgi文件路径
module = djTest.wsgi
# http-socket服务端口指定,也可以用 http = 0.0.0.0:8000
http-socket = 0.0.0.0:8000
# 是否为主进程master
master = True
#指明通过uwsgi,启动多少个进程
processes = 5
#指明通过uwsgi,启动多少个线程
threads = 1
# clear environment on exit
vacuum = true

步骤2: 通过如下命令启动,      启动后可以在浏览器中正常访问django页面。

uwsgi --ini uwsgi.ini

        以上操作最终实现了通过配置文件的方式使用uwsgi访问django项目,但仍然有问题,问题在于uwsgi是前台启动不是后台启动,因为uwsgi运行的进程和日志都在控制台展示。但是生产环境一般都需要将这些文件保存下来,因此我们要实现uwsgi的后台启动并保存相关日志和进程文件。操作如下:

步骤1: 在之前的uwsgi.ini文件中增加如下配置信息

# 如下内容的配置可实现uwsgi后台启动
# # 进程文件存放位置
pidfile= %(chdir)/pid/uwsgi_8000.pid
# # 以后台守护进程运行,并将log日志存下
daemonize = %(chdir)/log/uwsgi_8000.log
# # 日志大小 1G
log-maxsize = 1024*1024*1024

步骤2: 创建文件夹pid和log保存进程信息和日志记录

[root@WulianWord djTest]# mkdir log
[root@WulianWord djTest]# mkdir pid
[root@WulianWord djTest]# pwd
/root/www/djTest
[root@WulianWord djTest]# ls
djTest  log  manage.py  pid  uwsgi.ini

步骤3: 启动uwsgi

[root@WulianWord djTest]# uwsgi --ini uwsgi.ini
# 表示后台启动成功
[uWSGI] getting INI configuration from uwsgi.ini
[root@WulianWord djTest]#

步骤4: 访问浏览器可实现。

步骤5:后台启动的状况下 如果需要查询或者关闭uwsgi则命令如下。

                注:如果是前台启动 Ctrl+C即可关闭uwsgi

# 停止进程后浏览器将无法访问。
uwsgi --stop pid/uwsgi_8000.pid

Nginx+uwsgi+django

        上面的一系列操作解决了使用uwsgi访问django项目的问题。但是实际生产环境中我们还需要用nginx做反向代理和负载均衡。因此下面的步骤引入nginx的反向代理。

        nginx的 安装和基本使用此处不再讲。


# 关闭nginx
nginx -s stop

# 强行关闭nginx的方法
killall nginx

在nginx已经可以正常运行在服务器的前提下,进行如下步骤:

步骤1: 查找到nginx配置文件

[root@WulianWord ~]# find / -name nginx.conf
/etc/nginx/nginx.conf

步骤2: 备份原有nginx.conf文件后,重写nginx.conf中server内容为自己要代理的内容,并且增加server同级的upstream 内容。如下所示:

        注意:uwsgi_pass 和proxy_pass有区别,我们下面用的proxy_pass。

# 自定义的uwsgi访问

    	# uwsgi可以换为别的名字,但需要和location中的uwsgi_pass一致
    upstream uwsgi {    
    	# 设置的uwsgi启动的端口
        server 127.0.0.1:8000;  
    }
    # 自定义server
    server {
        listen       80;
         #  有域名写域名,域名和localhost之间用逗号分隔就可以了
        server_name  locahost;    
        charset        utf-8;

	include /etc/nginx/default.d/*.conf;
	
        location = / {
        	# 和upstream保持一致
                # 注意:uwsgi_pass 和proxy_pass有区别,我们先用proxy_pass。
            proxy_pass http://uwsgi;   
        }
    }

步骤3:重启ngnix, 在浏览器中访问。发现浏览器中输入ip或者ip:80可以直接显示django页面。说明nginx成功代理。当然此时也可以ip:8000使用uwsgi访问。

步骤4: 配置nginx日志。需要在nginx.conf文件中配置此代理的日志

access_log	/var/log/nginx/nginx_uwsgi.log;

 步骤5: 重启nginx

nginx -s reload

步骤6:检查日志是否生效,执行下面的命令,浏览器访问刷新项目页面,会有日志输出。

tail -f /var/log/nginx/nginx_uwsgi.log

        上面的步骤完成后会发现静态文件加载有问题,下面 收集静态文件。使nginx直接返回静态文件。

步骤1: 在项目的settings.py文件中加入如下内容设置静态文件存放路径。

STATIC_ROOT = os.path.join(BASE_DIR,'static/')

步骤2:运行如下命令收集静态文件。

python manage.py collectstatic

步骤3: 在nginx.conf中的server中配置静态文件路由

        location = /static {
        	# 和upstream保持一致
            alias static路径/static;   
        }

步骤4: 重启nginx,发现静态文件可见。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐