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

来源:互联网 发布:linux查看存储空间 编辑:程序博客网 时间:2024/05/22 11:11

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


1.   基于VMware的Ubuntu16.04的安装,很简单几乎一步安装。

2.   安装python3.5   

添加 PPA
sudo add-apt-repository ppa:fkrull/deadsnakes

升级
sudo apt-get update

安装python

sudo apt-get install python3.5

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 端口号(利用rootkill
                            cd /var/lib/dpkg   sudo mv info info.baksudo 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   以后每次后台更新,前台自动更新。(推荐此方法,一劳永逸!)


 

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 dy4480 神马dy达达兔兔 dy8848影视 dy6080 dy888达达兔 dy钻戒 dy影院 dy是什么牌子 dy是什么 三级dy dy下载 数学dy dy的意思 大闹天宫dy 沙井dy影城 中国机长自带4d 当消防员遇见话唠小朋友d d型挂钩 维生素d滴剂胶囊型 东风4d型内燃机车 d80型伸缩缝 d160型桥梁伸缩缝 d型卧式多级离心泵 d型多级泵厂家 维生素d滴剂胶囊型怎么吃 d型多级离心泵厂家 d型多级泵 尼康d型镜头 d40型伸缩缝 星鲨d 星鲨维生素d滴剂 星鲨维生素d滴剂曝光 中星2d成功发射 星鲨维生素d滴剂价格 鲨星维生素d3滴剂 机器人大战d 星组 d档 d档和s档的区别 s档和d档的区别 跑高速用d档还是s档 爬坡用d档还是s档