安装Nginx

sudo apt-get install nginx

ubantu安装完Nginx后,文件结构大致为:
  所有的配置文件都在 /etc/nginx下;
  启动程序文件在 /usr/sbin/nginx下;
  日志文件在 /var/log/nginx/下,分别是access.log和error.log;
  并且在 /etc/init.d下创建了启动脚本nginx。

sudo /etc/init.d/nginx start    # 启动
sudo /etc/init.d/nginx stop # 停止
sudo /etc/init.d/nginx restart # 重启

使用浏览器访问  localhost  出现界面    (局域网通过地址输入ip地址,如:http://192.168.1.90/ )

sudo apt-get install python3-dev
sudo pip3 install uwsgi

注意:

如果未安装python3 ,

使用:sudo apt-get install python3.6

如果pip3 提示:

wuchao@ubuntu:~$ pip3 install uwsig

Command 'pip3' not found, but can be installed with:

sudo apt install python3-pip
解决方案使用: sudo apt install python3-pip

至于为什么要使用uwsgi,可以参见这边博客:快速部署Python应用:Nginx+uWSGI配置详解(1)
这样大体的流程是:nginx作为服务器最前端,负责接收client的所有请求,统一管理。静态请求由Nginx自己处理。非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。
通信原理是:
the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django

测试uwsgi

在Django项目下新建test.py文件,

# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
#return ["Hello World"] # python2
return [b"Hello World"] # python3

然后执行shell命令:

uwsgi --http-socket :8001 --plugin python --wsgi-file test.py

注意:如果uwsgi提示无命令 ,使用pip3 uninstall uwsgi 卸载 ,再使用 pip3 install uwsgi 重新安装

加上--plugin python3是告诉uWSGI在使用python插件,不然很有可能会出现类似这样的错误:

uwsgi: unrecognized option '--wsgi-file'
getopt_long() error

执行成功在浏览器中打开:http://localhost:8001显示Hello World说明uwsgi正常运行。



测试Django

首先得保证Django项目没有问题

sudo apt install python-django #安装django
django-admin startproject blog #创建blog项目
cd blog #进入项目
python3 manage.py runserver 0.0.0.0:8001 #运行django项目

浏览器访问:localhost:8001

然后链接Django和uwsgi,实现简单的web服务器,到Django项目目录下执行shell:

uwsgi --httlocalhost:8001 --plugin python3 --module blog.wsgi

blog为你的项目名。访问http://localhost:8001,项目正常。注意这时项目的静态文件是不会被加载的,需要用nginx做静态文件代理。

配置uwsgi

uwsgi支持通过配置文件的方式启动,可以接受更多的参数,高度可定制。我们在Django项目目录下新建uwsgi.ini

在django项目project目录下(manage.py下)创建配置文件分两种 ini
# myweb_uwsgi.ini file
[uwsgi]
# 指定IP端口
socket = :8081
# 项目目录
chdir = /home/wuchao/blog
# 指定项目的 wsgi 文件
module = blog.wsgi
# process-related settings
# 启用主进程
master = true
# maximum number of worker processes
processes = 4
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
# pidfile for record run pid
pidfile =pid.uwsgi
# 设置日志目录
daemonize = UWSGI.log

在shell中执行:

sudo uwsgi --ini uwsgi.ini 

ps:如果实在不想配置nginx的话,单uwsgi就已经能完成部署了(把socket换成http),你可以把Django中的静态文件放到云平台中如七牛等等,这样你的Web也能被正常访问。

配置nginx

nginx默认会读取/etc/nginx/sites-enabled/default文件中的配置,修改其配置如下:追加内容如下

注意:如果文件为只读 使用chmod修改权限: sudo chmod 777  /etc/nginx/sites-enabled/default

server {
# 你的网站将会监听的端口号,如果监听80端口,部署后访问localhost自动跳转到nginx默认的欢迎界面
listen 8002;
# 绑定的域名
server_name 127.0.0.1; # substitute your machine's IP address or FQDN
charset utf-8; # 最大上传速率
client_max_body_size 75M; # adjust to taste # Django media(设置成自己的路径)
location /media {
alias /home/wuchao/blog/media; # 您的Django项目的媒体文件——根据需要进行修改
}
#Django 静态文件路径(设置成自己的路径)
location /static {
alias /home/wuchao/blog/static; # 您的Django项目的静态文件——根据需要进行修改
} # 最后,将所有非媒体请求发送到Django服务器
location / {
include uwsgi_params; # the uwsgi_params file you installed
uwsgi_pass 127.0.0.1:8001;
}
}

重启nginx

sudo /etc/init.d/nginx restart

注意:重启失败则配置文件修改错误

修改项目中setting.py 配置文件28行:

ALLOWED_HOSTS = ['*']

通过本地ip地址:8002访问。如:localhost:8002  或者ip:8002



 

最新文章

  1. iframe跨域+
  2. centos安装PHP服务器步骤
  3. bootstrap-model-弹出框背景禁止点击
  4. 一个关于group by和having子句的小例子
  5. Windows Live Writer代码高亮插件对比
  6. httpclient详细介绍
  7. HTML5 &lt;meta&gt; 标签属性,所有meta用法都在这里了
  8. 【jQuery】鼠标接触按钮后改变图片
  9. Javascript闭包的一些研究
  10. LightOJ 1348 (树链剖分 + 线段树(树状数组))
  11. UUID简记
  12. mysql 两张表的数据设置主外健关联删除
  13. Java高并发系列 — AQS
  14. jdbc,mysql 数据库BLOB返回值 [B 的问题
  15. 小程序webview应用实践
  16. 事务ACID如何定义,事务隔离性解决的问题
  17. PAT 乙级 1037 在霍格沃茨找零钱(20)C++版
  18. Ubuntu Server+openerp
  19. Cloudera Manger CDH 安装文档
  20. HDU 4638 莫队算法

热门文章

  1. 获取页面的checkbox,并给参数赋值
  2. CSS布局奇淫技巧之--各种居中&lt;转&gt;
  3. 解决 Python.h:没有那个文件或目录 错误的方法
  4. BI开发之——Mdx基础语法(2)(转至指尖流淌)
  5. 使用javascript操作cookies的实例
  6. 解决mac休眠睡眠异常耗电方法
  7. SQL on Hadoop 的真相(1)
  8. python中的列表生成式
  9. 快速开发 jQuery 插件的 10 大技巧(转)
  10. 阿里Java开发手冊之编程规约