您的位置:首页 > 运维架构 > Nginx

基于Ubuntu16.04服务器的Nginx+Django+Uwsgi配置

2017-12-24 19:52 656 查看

      本人最近想研究一个基于python的网站,在配置服务器的过程中遇到了很多的困难,经过了2天两夜的奋战,终于绕过了各种坑,现在将我总结的成果分享给大家,希望有同样经历的朋友能够少走弯路,共同进步!(ps:有错误的地方希望大家更正,一起交流!)

1.   基于VMware的Ubuntu16.04的安装,很简单几乎一步安装。
2.   安装python3.5   
l  添加 PPA:
sudo add-apt-repository ppa:fkrull/deadsnakes
l  升级源
sudo apt-get update
l  安装python:
sudo apt-get install python3.5
l  将python 3.5替代2.7设为默认:
1)删除usr/bin/目录下的默认python link文件



2)sudo ln -s /usr/bin/python3.5 /usr/bin/python
3.安装pip

sudo apt-get install python3-pip

出错解决:
sudo dpkg -C

sudo apt-get clean

sudo apt-get update

sudo apt-get install --reinstall python-minimal python-lockfile

 

(分析: 原因是,我们在将python2.7升级到python3.3时,只是将/usr/local/bin目录下修改了(使用ln -s 或者其他),然而我们的配置目录并没有修改..)
 
使用pip:
Pip3 install SomePackage                (这里一定要pip3)
 
4.安装django
 sudo apt-getinstall python-django(这个不行)
sudo pip3 install Django     (直接用pip3来安装!)
  检测安装成功:
   python

import django
django.get_version()
  建立项目 

django-admin startproject 项目的名称(在要放项目的目录下打开终端,复制命令)


  建立app

  python manage.py startapp  app名称            (在上步骤所建立的项目目录下打开终端运行命令)


  运行 Django 服务

  python manage.py runserver


  设置setting.py    host 文件
 ALLOWED_HOSTS = ['192.168.216.131','localhost', '127.0.0.1']     (这是格式)
 
5.Ubuntu设置静态ip
Ifconfig    查看网络状态,这里网卡型号很重要 这里 ens33
netstat –rn    
查看 route -n
 
1、目录:   vi /etc/network/interfaces
添加内容:
autoens33           

iface ens33inet static

address 192.168.216.131   

netmask 255.255.255.0

gateway 192.168.216.2

dns-nameserver 192.168.216.2
 
(这里en33是网卡型号,是上面得到的。。 dns-nameserver 192.168.216.2这句一定需要有,

因为以前是DHCP解析,所以会自动分配DNS 服务器地址。

而一旦设置为静态IP后就没有自动获取到DNS服务器了,需要自己设置一个

设置完重启电脑后,/etc/resolv.conf文件中会自动添加 nameserver 192.168.216.2


 
2 重启网络
sudo/etc/init.d/networking restart
 
6.运行app
python manage.py startapp polls

polls/

    __init__.py

    admin.py

    apps.py

    migrations/

        __init__.py

    models.py

    tests.py

    views.py

polls/views.py
fromdjango.httpimport HttpResponse
 
 
defindex(request):
return HttpResponse("Hello, world. You're at the polls index.")
 
polls/urls.py
fromdjango.urlsimport path
 
from.import views
 
urlpatterns= [
    path('', views.index, name='index'),
]
 
mysite/urls.py
fromdjango.urlsimport include, path
fromdjango.contribimport admin
 
urlpatterns= [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]
 
测试成功!
 
 
7.安装Nginx
sudo apt-get install nginx
 
基本命令:

/etc/init.d/nginx start  #启动
/etc/init.d/nginx stop  #关闭
/etc/init.d/nginx restart  #重启
 
修改Nginx默认端口号,打开/etc/nginx/nginx.conf 文件,修改端口号。(可以修改也可以不修改)
如果报错:尝试运行命令   ps -aux | grep apt

                      查看   哪个端口  占用这apt的程序

                             然后      kill -9 端口号(利用root来kill)

                            cd /var/lib/dpkg  
sudo mv info info.bak
sudo mkdir info

最后最好在升级源:    sudo apt-get update

再运行:    sudo apt-get install nginx  安装nignx

重新运行 nignx :    /etc/init.d/nginx restart

在浏览器输入: 127.0.0.1  测试nginx运行成功

8.安装Uwsgi
 pip3install uwsgi
测试uwsgi,创建test.py文件:
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
   
return [b"HelloWorld"]
 
通过uwsgi运行该文件。
fnngj@ubuntu:~/pydj$ uwsgi --http :8001 --wsgi-filetest.py
 
 
 
9.连接他们三
在项目目录下 建立文档myweb_uwsgi.ini   (与manage.py同级)
#myweb_uwsgi.ini file
[uwsgi]
 
#Django-related settings
 
socket= :8002
 
#the base directory (full path)
chdir           = /guoju/project/shiyan
 
#Django s wsgi file
module          = shiyan.wsgi
 
#process-related settings
#master
master          = true
 
#maximum number of worker processes
processes       = 4
 
#... with appropriate permissions - may be needed
#chmod-socket    = 664
#clear environment on exit
vacuum          = true
 
在目录下运行:
uwsgi --ini myweb_uwsgi.ini
 
修改nginx
打开/etc/nginx/nginx.conf文件,添加如下内容。
server {
   listen         8099;
   server_name    127.0.0.1
   charset UTF-8;
   access_log     /var/log/nginx/myweb_access.log;
   error_log      /var/log/nginx/myweb_error.log;
 
   client_max_body_size 75M;
 
    location/ {
       include uwsgi_params;
       uwsgi_pass 127.0.0.1:8000;
       uwsgi_read_timeout 2;
   }  
   location /static {
       expires 30d;
       autoindex on;
       add_header Cache-Control private;
       alias /home/fnngj/pydj/myweb/static/;
     }
 }
 
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
include 必须指定为uwsgi_params;而uwsgi_pass指的本机IP的端口号与myweb_uwsgi.ini配置中的文件中的必须一致。
 
现在重新启动nginx,翻看上面重启动nginx的命令。然后,访问:http://127.0.0.1:8099/  
(端口自定义,默认80)
 
 
至此如果没有其他问题的话,就全部配置完毕了


后记:在成功运行的过程中,有一个很蹩脚的问题就是,后台django在更新setting文件或者view文件的过程中,前台的nginx的网页不随着更新,原因是uwsgi在传递过程中的问题,为了提高效率默认关闭了刷新数据的功能。
解决办法:
1 把uwsgi端口关了,然后重启,以后每次后台数据一更新就重新reload(不推荐,很傻的方法)。
2 在myweb_uwsgi.ini文件中,最后一行加上py-autoreload   = 1   以后每次后台更新,前台自动更新。(推荐此方法,一劳永逸!)

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ubuntu django nginx Uwsgi