python部署到服务器(2) 一一 nginx+uwsgi+Django
参考菜鸟教程,https://blog.csdn.net/qq_42314550/article/details/81805328, 和 https://www.cnblogs.com/chenice/p/6921727.html
前置条件
1、我们假设你已经安装了Nginx、Mysql、Django、python3、pip3等必须的软件
2、有一个能用runserver正常启动的Django项目
3、该项目已经上传到linux(可通过gitlab+jenkins自动部署到服务器,详见其它博客)
4、通过pip安装好项目所需的其他模块。
安装Uwsgi
- uwsgi是python的一个模块,通过pip命令安装uwsgi
pip3 install uwsgi
- 测试 uwsgi 是否正常
在你的项目目录中写一个test.py
执行:vim test.py
python3写法:(我用的是这个)
# test.py 文件内容如下
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
- 然后在终端运行启动命令:
uwsgi --http :8001 --wsgi-file test.py
- 访问该地址,我的服务器是在虚拟机上, 通过 172.168.10.221:8001 访问,看在网页上是否有Hello World ,有则成功
- 注意IP地址写你自己的主机地址,如在本地请写127.0.0.1
测试Django
- 如果还未安装Django,请使用以下命令安装:
pip3 install django
- 启动你的 Django 项目:
python3 manage.py runserver 默认在8000端口, 通过IP+端口号访问,检查是否正常
配置django,请保证你的django程序已经关闭
编写django_wsgi.py文件,将其放在与文件manage.py同一个目录下
a、进入项目文件夹中:cd mysite
b、编写django_wsgi.py文件:vim django_wsgi.py
- 写入如下内容(python3), 其实跟自带的wsgi.py文件内容差不多
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
连接Django 和 uwsgi
- 现在你的Django和uwsgi都能正常访问,接下来我们进入项目根目录 ,并启动服务器
cd /www/api_python
uwsgi --http :8000 --chdir /www/api_python --module django_wsgi
- 现在可以通过IP+端口号访问你的项目了,我这里直接访问项目中具体的接口
http://172.168.10.221:8000/weather/v1/weather/today
{"code": 200, "msg": "\u67e5\u8be2\u6210\u529f", "data": {"calendar": "\u4e94\u6708\u521d\u4e8c", "rainfall": "224.33000000000007 mm", "weather_msg": "25\u5206\u949f\u540e\u6709\u96e8,\u4f1a\u4e0b\u4e00\u4e2a\u591a\u5c0f\u65f6\uff0c\u51fa\u95e8\u8bb0\u5f97\u5e26\u4f1e", "wind_direction": "\u4e1c\u5317", "wind_level": "1\u7ea7", "t": "23.8\u2103", "t_min": "19.4\u2103", "t_max": "26.4\u2103", "air_press": "1006.0hpa", "wet": "67.0%", "wind_speed": 1.1, "evp": "\u672a\u76d1\u6d4b", "staCode": "54512", "staName": "\u56fa\u5b89", "weather": "\u591a\u4e91", "back_pic": "/images/index/cloudy.jpg"}}
- 所有的请求都是经过uwsgi传递给Django程序的界面展示与django自启的时候一样
实现Nginx和uWSGI的连接
为了实现Nginx与uWSGI的连接,两者之间将采用soket来通讯方式。
在本文中,我们将使用uWSGI配置文件的方式来改进uWSGI的启动方式
在项目根目录下新建djangochina_socket.xml ,写入下面内容:(我将两段配置都写入了)
<!-- 若以socket方式访问 -->
<uwsgi>
<socket>:8077</socket>
<chdir>/www/api_python</chdir>
<module>django_wsgi</module>
<processes>4</processes> <!-- 进程数 -->
<daemonize>uwsgi.log</daemonize>
</uwsgi>
<!-- 若以http方式访问 -->
<uwsgi>
<http>:8077</http>
<chdir>/www/api_python</chdir>
<module>django_wsgi</module>
<processes>4</processes> <!-- 进程数 -->
<daemonize>uwsgi.log</daemonize>
</uwsgi>
- 在上面的配置中,我们使用 项目根目录中的 uwsgi.log 来记录日志,开启4个进程来处理请求。 这样,我们就配置好uWSGI了。
配置Nginx
- 我们假设你将会把Nginx程序日志放到你的目录 /usr/local/nginx/logs/下,请确保该目录存在,当然你也可以写成别的目录
- 我们假设你的Django的static目录是 /www/api_python/static
- media目录是 /home/api_python/media
我们假设你的域名是 python.test.com (在调试时你可以设置成你的机器IP)
我们假设你的域名端口是 80(在调试时你可以设置一些特殊端口如 8070)
基于上面的假设,我们为 /usr/local/nginx/conf/nginx.conf 添加以下配置:
在http{…}中的最后一行添加:
- 内容如下:
server {
listen 80;
server_name python.test.com;
access_log /usr/local/nginx/logs/access.log;
error_log /usr/local/nginx/logs/error.log;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
include /usr/local/nginx/conf/uwsgi_params;
uwsgi_pass 127.0.0.1:8077; # 当访问python.test.com 时, 会转到本服务器的8077端口,也就是uwsgi
}
#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 如果没有相关目录,可以不写
location /static/ {
alias /www/api_python/static/;
index index.html index.htm;
}
location /media/ {
alias /www/api_python/media/;
}
location /templates/ {
alias /www/api_python/templates/;
}
}
- 在上面的设置后,可以让Nginx来处理静态文件(/static/ 和 /media/ )。非静态文件请求Nginx会发给 socket 8077,然后让uWSGI来进行处理。
Nginx+uWSGI+Django的实现方式
在完成上面配置后,需要按以下步骤来做:
1、重启Nginx服务器,以使Nginx的配置生效。
systemctl restart nginx
重启后检查Nginx日志是否有异常。
vim /usr/local/nginx/logs/error.log
查看 error.log 文件内容是否有异常信息
2、启动uWSGI服务器
cd /www/api_python
uwsgi -x djangochina_socket.xml
检查日志 uwsgi.log 是否有异常发现。
uwsgi.log 日志文件生成在项目目录下,所以进入项目目录执行 vim uwsgi.log 查看
3、访问服务
基于上面的假设你的域名是python.test.com
因此,我们访问 python.test.com
我访问是具体的接口,查询实时天气:http://python.test.com/weather/v1/weather/today
如果发现程序与 单独使用Django启动的程序一模一样时,就说明成功啦!
python部署到服务器(2) 一一 nginx+uwsgi+Django的更多相关文章
- python部署到服务器(1) 一一 搭建环境
本机环境说明 linux下的CentOS 7, 自带python2.7.5, 使用 python --version 命令查看,因系统需要python2.7.5,因此我们并不卸载,另外安装python ...
- 阿里云云服务器ubuntu配置nginx+uwsgi+django记录文档
1 安装ssh 1 sudo apt-get update 2 sudo apt-get install openssh-server 3 sudo ps -e |grep ssh 有sshd ...
- Nginx+uWSGI+Django部署web服务器
目录 Nginx+uWSGI+Django部署web服务器 环境说明 前言 搭建项目 Django部署 编辑luffy/luffy/settings.py 编辑luffy/app01/views.py ...
- Nginx+uWSGI+Django+Python+ MySQL 搭建可靠的Python Web服务器
一.安装所需工具 yum -y install gcc gcc-c++ rpm-build mysql* libtool-ltdl* libtool automake autoconf libtool ...
- 五步教你实现使用Nginx+uWSGI+Django方法部署Django程序
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...
- debian完整部署 Nginx + uWSGI + Django
手工部署一个Django服务器真心不容易,需要安装很多东西.从头开始搭建服务器,主要是为了梳理一下后续开发中一般为碰到的平台部署.对后续问题的解决有一定帮助. 通常部署有2中方式: 一种是使用现成提供 ...
- SLAM+语音机器人DIY系列:(八)高阶拓展——2.centos7下部署Django(nginx+uwsgi+django+python3)
0.安装步骤预览(1)系统默认自带python2.x,所以需要先安装python3.x(2)python2对应pip,python3对应pip3,用源码安装python3后pip3也自动安装了(3)用 ...
- nginx+uWSGI+django+virtualenv+supervisor发布web服务器
nginx+uWSGI+django+virtualenv+supervisor发布web服务器 导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以 ...
- Nginx+uwsgi+Django 的web应用环境部署-完整记录
Python作为当前最火爆最热门,也是最主要的Web开发语言之一,在其二十多年的历史中出现了数十种Web框架,比如Django.Tornado.Flask.Twisted.Bottle和Web.py等 ...
随机推荐
- java web 能够实现整个文件夹的上传下载吗?
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- Markov logic network
A Markov logic network (or MLN) is a probabilistic logic which applies the ideas of a Markov network ...
- 数据测试001:利用python连接数据库插入excel数据
数据测试001:利用python连接数据库插入excel数据 最近在做数据测试,主要是做报表系统,需要往数据库插入数据验证服务逻辑,本次介绍如何利用python脚本插入Oracle和Mysql库中: ...
- PHP非对称加密
加密的类型: 在日常设计及开发中,为确保数据传输和数据存储的安全,可通过特定的算法,将数据明文加密成复杂的密文.目前主流加密手段大致可分为单向加密和双向加密. 单向加密:通过对数据进行摘要计算生成密文 ...
- 【图像处理】H.264流媒体播放
相信有不少人和我一样,希望实现H264格式视频的流媒体播放.但是对于一个新手来说,往往不知道从何入手.利用百度,GOOGLE等搜索资料真是沙里淘金.在琢磨了N周之后,才弄出来了点成果,其中费了很多无用 ...
- Prettier格式化配置
HTML/CSS/JS/LESS 文件的 prettier 格式化规则 { // 使能每一种语言默认格式化规则 "[html]": { "editor.defaultFo ...
- SpringCloud学习(三)服务消费者(Feign)(Finchley版本)
上一篇文章,讲述了如何通过RestTemplate+Ribbon去消费服务,这篇文章主要讲述如何通过Feign去消费服务. Feign简介 Feign是一个声明式的伪Http客户端,它使得写Http客 ...
- 华为模拟器eNSP基本命令
华为模拟器eNSP常用命令 本文转自:https://blog.csdn.net/Key_book/article/details/80542264 路由器命令行常用命令: 1. system-vie ...
- Go基础:函数多返回值特性
之前在写Python程序的时候,惊叹于它支持多返回值的特性带来的便利性.在学习Go的时候,发现Go也拥有多返回值的特性. 1.基本用法 创建一个多返回值的方法: func getACar() (bra ...
- Tcpdump移植
摘要: tcpdump对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.n ...