Python+Django+Nginx+Uwsgi(史上最全步骤)(亲测)
步骤:
Python安装
第一步安装Python
(很多购买的服务器linux系统中自带python2和python3,我是直接使用自带的python3.5版本的)
如果系统中没有,则自己安装,如下:
1.下载
wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0a1.tar.xz
2.解压
tar xvf Python-3.6.0a1.tar.xz
3.进入目录,添加配置
进入 Python-3.6.0a1 目录中:cd Python-3.6.0a1
添加配置:./configure –prefix=/usr/local/python3.6
注意:/usr/local/python3.6 为python的安装目录
4.编辑安装(切换成root用户执行:sudo -s)
请依次执行以下命令:
make && make install
5.测试
输入 python3
说明安装成功
输入ctrl + d退出
python3源码编译自带pip3
6、如果不是 python3.6版本的,则需要更改下默认连接
linux系统默认指定连接是在 /usr/bin/python
需要将原有的指定连接文件删掉后重新指定:
cd /usr/bin
rm -rf python
重新指定连接:
ln -s /usr/local/bin/python3.6 /usr/bin/python
7、查看 pip3 是否指定到python3.6中
pip3 -V
若没有指定需改变默认连接
linux系统默认指定连接是在 /usr/bin/pip3
需要将原有的指定连接文件删掉后重新指定:
cd /usr/bin
rm -rf pip3
重新指定连接:
ln -s /usr/local/bin/python3.6/bin /usr/bin/pip3
uwsgi安装
1、安装
pip3 install uwsgi
2、测试uwsgi
在你的同项目名目录中写一个test.py
执行:vim test.py
填写如下内容:
python2写法:
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "Hello World"
python3写法:(我用的是这个)
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
1
2
3
4
5
6
7
8
9
10
11
3、然后执行shell命令:
uwsgi –http :8001 –wsgi-file test.py
4、访问网页:
http://115.159.214.215:8001/
看在网页上是否有Hello World
注意IP地址写你自己的主机地址,如在本地请写127.0.0.1
Django安装
1、在 ubuntu中安装 Django
1、首先要先安装pip3
sudo apt install python3-pip
2、使用pip安装Django
pip3 install Django==1.8.9
3、输入命令:python3 -m django –version 来查看Django是否安装成功
2、在ubuntu中创建一个Django项目
创建Django项目:
django-admin.py startproject 项目名(mysite)
创建项目中的static目录:
cd mysite
mkdir static
3、启动Django项目
python3 manage.py runserver 0.0.0.0:8000
选择一个浏览器输入:http://115.159.214.215:8000/
注意:IP地址换成自己的主机IP
4、创建app(做项目时使用,此时该步骤忽略)
python3 manage.py startapp app名称
5、models建表命令(做项目时使用,此时该步骤忽略)
python3 manage.py makemigrations
python3 manage.py migrate
6、配置django,请保证你的django程序已经关闭
编写django_wsgi.py文件,将其放在与文件manage.py同一个目录下
注意: 编写文件时需要注意语句os.environ.setdefault。比如,如果你的项目为mysite,则你的语句应该是 os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “mysite.settings”)
a、进入项目文件夹中:cd mysite
b、编写django_wsgi.py文件:vim django_wsgi.py
写入下面内容:
(python2的写法)
#!/usr/bin/env python
# coding: utf-8
import os
import sys
# 将系统的编码设置为UTF8
reload(sys)
sys.setdefaultencoding('utf8')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()
(python3的写法)这里我使用的是该写法,由于用的是python3,所以不需要指定字符集
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
连接django和uwsgi,实现简单的WEB服务器
我们假设你的Django项目的地址是/home/ubuntu/mysite
然后,进入项目目录下 cd /home/ubuntu/mysite,就可以执行以下命令:
uwsgi –http :8000 –chdir /home/ubuntu/mysite –module django_wsgi
这样,你就可以在浏览器中访问你的Django程序了。
选择一个浏览器输入:http://115.159.214.215:8000/
注意:IP地址换成自己的主机IP
所有的请求都是经过uwsgi传递给Django程序的界面展示与django自启的时候一样,如下:
Nginx安装
1、安装
sudo apt-get install nginx
2、查看nginx版本
-v 显示 nginx 的版本:nginx -v
-V 显示 nginx 的版本,编译器版本和配置参数:nginx -V
3、测试是否已经成功安装好nginx
a、启动Nginx
/etc/init.d/nginx start #启动
/etc/init.d/nginx stop #关闭
/etc/init.d/nginx restart #重启
b、启动nginx后,在浏览器中访问自己的主机IP:
http://115.159.214.215/
或者 http://115.159.214.215:80
可看到如下界面表示成功安装:
实现Nginx与uWSGI的连接
为了实现Nginx与uWSGI的连接,两者之间将采用soket来通讯方式。
在本节中,我们将使用uWSGI配置文件的方式来改进uWSGI的启动方式。
假定你的项目目录是 /home/ubuntu/mysite
我们将要让Nginx采用8077端口与uWSGI通讯,请确保此端口没有被其它程序采用。
注意,请确定你在上面步骤中 django_wsgi.py 文件已经存在了。
新建一个XML文件:djangochina_socket.xml
将它放在你的项目目录下,如:/home/ubuntu/mysite
写入下面内容:(我将两段配置都写入了)
<!-- 若以socket方式访问 -->
<uwsgi>
<socket>:8077</socket>
<chdir>/home/ubuntu/mysite</chdir>
<module>django_wsgi</module>
<processes>4</processes> <!-- 进程数 -->
<daemonize>uwsgi.log</daemonize>
</uwsgi>
<!-- 若以http方式访问 -->
<uwsgi>
<http>:8077</http>
<chdir>/home/ubuntu/mysite</chdir>
<module>django_wsgi</module>
<processes>4</processes> <!-- 进程数 -->
<daemonize>uwsgi.log</daemonize>
</uwsgi>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
在上面的配置中,我们使用 uwsgi.log 来记录日志,开启4个进程来处理请求。
这样,我们就配置好uWSGI了。
配置Nginx
我们假设你将会把Nginx程序日志放到你的目录 /var/log/nginx 下,请确保该目录存在。
我们假设你的Django的static目录是 /home/ubuntu/mysite/static
media目录是 /home/ubuntu/mysite/media
请确保这些目录存在。
我们假设你的域名是 www.you.com (在调试时你可以设置成你的机器IP)
我们假设你的域名端口是 80(在调试时你可以设置一些特殊端口如 8070)
基于上面的假设,我们为 /etc/nginx/nginx.conf 添加以下配置:
在http{…}中的最后一行添加:
server {
listen 80;
server_name 115.159.214.215;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass 127.0.0.1:8077;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /static/ {
alias /home/ubuntu/mysite/static/;
index index.html index.htm;
}
location /media/ {
alias /home/ubuntu/mysite/media/;
}
location /templates/ {
alias /home/ubuntu/mysite/templates/;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
在上面的设置后,可以让Nginx来处理静态文件(/static/ 和 /media/ )。非静态文件请求Nginx会发给 socket 8077,然后让uWSGI来进行处理。
Nginx+uWSGI+Django的实现方式
在完成上面配置后,需要按以下步骤来做:
1、重启Nginx服务器,以使Nginx的配置生效。
nginx -s reload (root权限执行)
重启后检查Nginx日志是否有异常。
vim /var/log/nginx/error.log
查看 error.log 文件内容是否有异常信息
2、启动uWSGI服务器
cd /home/ubuntu/mysite
uwsgi -x djangochina_socket.xml
检查日志 uwsgi.log 是否有异常发现。
uwsgi.log 日志文件生成在项目目录下,所以进入项目目录执行 vim uwsgi.log 查看
3、访问服务
基于上面的假设你的域名是www.you.com(本节我设置的是IP地址)
因此,我们访问 www.you.com
我用的IP访问:http://115.159.214.215:8077/
如果发现程序与 单独使用Django启动的程序一模一样时,就说明成功啦!
4、关闭服务的方法
将uWSGi进程杀死即可。
sudo killall -9 uwsgi
注意:
1、html文件中静态文件的路径设置,应设置为能够通过nginx访问的地址(巨坑啊,不然会一直加载不了css样式和js文件)
————————————————
版权声明:本文为CSDN博主「qq_42314550」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42314550/article/details/81805328
Python+Django+Nginx+Uwsgi(史上最全步骤)(亲测)相关推荐
- Nexus上传jar问题【史上最全,亲测可用】
很多时候,私服上边很多的jar需要自己上传,就连ojdbc都需要自己上传,平常使用两种方法上传,大概总结了下 第一种方法:(使用Nexus的第三方) 第二种方法:(使用命令上传) mvn deploy ...
- python 完全面向对象_史上最全的Python面向对象知识点疏理
原标题:史上最全的Python面向对象知识点疏理 面向对象技术简介 类: 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例.class 类变量:类变 ...
- Python+Django+Nginx+Uwsgi 详细部署过程(爬坑过程,可以了解各个软件的执行流程,看过)
这个部署,我真的是爬了好久的坑,才爬出来,所以给大家分享一下,避免入坑. 首先我们先了解一下相关知识: wsgi: 一种实现python解析的通用接口标准/协议,是一种通用的接口标准或者接口协议, ...
- python编程基础教程-史上最全Python编程基础入门教程
变量.运算符与数据类型 1. 注释 在 Python 中,单行注释用 #,多行注释用 ''' ''' #[例子]单行注释 print("Hello world!") #Hello ...
- python编程入门教学-史上最全Python编程基础入门教程
变量.运算符与数据类型 1. 注释 在 Python 中,单行注释用 #,多行注释用 ''' ''' #[例子]单行注释 print("Hello world!") #Hello ...
- python期末知识点_史上最全的Python知识点整理之基本语法
一.程序的格式框架 1.缩进 缩进是指每行语句前的空白区域,用来表示Python程序间的包含和层次关系. 一般语句不需要缩进,顶行书写且不留空白. 当表示分支.循环.函数.类等含义,在if,while ...
- python基础知识资料包-Python基础知识总结——史上最全系列
一.数据类型 1.可变数据类型 a.列表(list) 列表的系列函数: ①append():元素的追加,在列表的末尾添加新的值 列表名.append(新增的值) ②insert(下标,值):在指定下标 ...
- 猿辅导python面试题_史上最全猿辅导面试流程及感受
主要包括:投简历-初试-岗前培训-终审-注意事项 投简历 大概1–3天会有电话通知参加初试,要注意接听武汉或郑州的电话哦. 初试 群面形式,hr会拉一个四人微信小群,有三名面试人员,依次进行面试.1m ...
- 最好的python入门教程_史上最全,最详细的Python入门教程!你应该没见过比这篇还详细的...
三.算术运算符 1.运算符 PS 在Python中 * 还可以用于字符串中,计算结果就是字符串重复指定次数的结果 1.类型 数字型整型(int)int(整数) long(长整数) PS(Python2 ...
最新文章
- python识别文字并且提示_python脚本:检测字符串标识符
- bzoj1597[Usaco2008 Mar]土地购买
- typescript_清洁架构的TypeScript刺
- python 任务调度 celery_斑马斑马-09-白云之上-python任务调度之celery
- Linux内核调试的方式以及工具集锦
- c 语言转换成php语言,C++_C 语言进制之间的转换,二进制、八进制和十六进制向 - phpStudy...
- PHP中等良好优秀,成绩优秀,中等,良好怎么分的啊?分为哪几个?
- 目标跟踪 — MOSSE
- (一)初识Echarts之柱状图
- 育碧首款区块链游戏真的来了吗?
- 笔记十一:提升高效技术领导的创新能力
- 未来几年,自动化发展趋势展望
- fastlane build 版本号自增
- 小白记录问题(2)——关于np.savez()与np.laod()储存与读取字典数据的问题
- 棋盘(Checkerboard)算法
- python脚本自动消除安卓版_微信跳一跳脚本重出江湖,python实现安卓iOS自动版与手动版!...
- 直流电机控制与TB6612FNG驱动芯片
- (一)egg-基础功能
- win8输入法 找回中文简体下的美式键盘输入法
- 涉密信息系统“三员”的三个层面
热门文章
- 返回图片_Vue 图片压缩并上传至服务器
- maven web项目导入sts_Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式
- malloc,colloc,realloc内存分配,动态库,静态库的生成与调用
- 重定向和转发之间的区别
- Scikit-learn数据预处理分类变量编码之标签二值化
- linux系统子目录至少,Linux复习题(附答案)
- apache ii评分和死亡率_高大上的风险分层系统:APACHE评分到底是啥?
- sudo apt install镜像_将Docker镜像安全扫描步骤添加到CI/CD管道
- 深入浅出设计模式原则之接口隔离原则(ISP)
- 51nod 1781 Pinball(线段树)