一、打包Django应用

1.创建setup.py文件

from setuptools import setup
import glob setup(name='blog',
version='1.0',
description='blog project',
author='Keith',
author_email='329640305@qq.com',
url='https://www.python.org/',
packages=['blog', 'user', 'post'],
py_modules=['manage'],
data_files=glob.glob('templates/*.html') + ['requirements']
)

2.保存项目中使用的库

pip freeze > requirements

3.打包源码

python3 setup.py sdist

二、在部署server上安装依赖包

pip3 install -r requirements

三、修改Django配置文件

sed -i -e 's/DEBUG.*/DEBUG = False/' -e 's/ALLOWED_HOSTS.*/ALLOWED_HOSTS = ["*"]/' blog/settings.py

四、测试运行

python3 manage.py runserver 0.0.0.0:8001

第一种部署方式,直接以http方式启动

1.安装uwsgi

pip3 install uwsgi

2.运行app

uwsgi --http :8001 --wsgi-file blog/wsgi.py --stats :8002 --stats-http

3.测试访问

http://ip:8001/post/?page=1&size=2

4.查看server状态

http://ip:8002/


第二种部署方式,提供配置文件,以socket方式运行

1.创建配置文件blog.ini,放在项目根目录下

[uwsgi]
socket = 127.0.0.1:8001
chdir = /opt/blog-1.0/
wsgi-file = blog/wsgi.py
master = true
workers = 3
stats = 127.0.0.1:8002
stats-http = true

2.运行app

uwsgi blog.ini

第三种部署方式,使用systemd管理uwsgi

1.创建service文件

vim /usr/lib/systemd/system/blog.service

[Unit]
Description=uWSGI Emperor
After=syslog.target [Service]
ExecStart=/usr/local/bin/uwsgi --ini /opt/blog-1.0/blog.ini
# Requires systemd version 211 or newer
RuntimeDirectory=uwsgi # 会创建/var/run/uwsgi目录
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all [Install]
WantedBy=multi-user.target

2.启动服务

systemctl start blog.service
systemctl status blog.service
systemctl enable blog.service

还有一个重要的部分,那就是提供Nginx代理

1、安装tengine,很简单,过程略...

2、修改Nginx配置

server {
listen 80;
server_name localhost; # http代理
# location ^~ /api/ {
# rewrite ^/api(/.*) $1 break;
# proxy_pass http://127.0.0.1:8001;
# } # socket代理
location ^~ /api/ {
rewrite ^/api(/.*) $1 break;
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001;
} # 根路径,通常是前端SPA单页面应用的入口
location / {
root html;
index index.html index.htm;
}
}

3、启动Nginx服务


到这里,后端应用基本部署完成。

再把前端文件部署好,通过Nginx动静分离就完整了,这里就不说前端应用了。

另外,还有一种常见的部署方式,就是通过supervisord等这类进程管理服务来运行app,这里也不细说了。

参考:

https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html#deploying-django

https://uwsgi-docs.readthedocs.io/en/latest/StatsServer.html

https://uwsgi-docs.readthedocs.io/en/latest/Systemd.html

https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html

http://nginx.org/en/docs/http/ngx_http_uwsgi_module.html

使用uwsgi部署Django应用的更多相关文章

  1. 填坑!!!virtualenv 中 nginx + uwsgi 部署 django

    一.为什么会有这篇文章 第一次接触 uwsgi 和 nginx ,这个环境搭建,踩了太多坑,现在记录下来,让后来者少走弯路. 本来在 Ubuntu14.04 上 搭建好了环境,然后到 centos7. ...

  2. nginx + uwsgi 部署 Django+Vue项目

    nginx + uwsgi 部署 Django+Vue项目 windows 本地 DNS 解析 文件路径 C:\Windows\System32\drivers\etc 单机本地测试运行方式,调用dj ...

  3. Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统

    Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统 这个是写好的Django程序在本地机运行的情况,一个查询接口. 准备工作 1.首先购买一台阿里云的EC ...

  4. nginx + uwsgi 部署django项目

    因项目需求,需要部署django项目,这里是基础的nginx配合uwsgi部署django,后续会采用docker部署的方式 环境: centos7 python3.5.4 django2.1.4 u ...

  5. 使用uWSGI部署django项目

    先说说什么是uWSGI吧,他是实现了WSGI协议.uwsgi.http等协议的一个web服务器,那什么是WSGI呢? WSGI是一种Web服务器网关接口.它是一个Web服务器(如nginx)与应用服务 ...

  6. 生产环境使用Nginx+uwsgi部署Django

    在本地运行django应用相对来说还是挺方便的,使用自带的runserver启动即可.如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等 在网上找到了不错的部署的教 ...

  7. 跨过Nginx上基于uWSGI部署Django项目的坑

    先说说他们的关系,Nginx和uWSGI都是Web服务器,Nginx负责静态内容,uWSGI负责Python这样的动态内容,二者配合共同提供Web服务以实现提高效率和负载均衡等目的.uWSGI实现了多 ...

  8. Nginx + uWSGI 部署Django 项目,并实现负载均衡

    一.uWSGI服务器 uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议.Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换. 要注意 WSGI ...

  9. CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目

    写在前面的话 最近总是见到有新学 Django 的朋友在部署自己的项目到 Linux 上面的时候运行不起来,所以就动手写了这篇博客. 对于不会搭建 Python 3 环境的朋友可以参考前面的博客[CE ...

  10. 使用Nginx+uWSGI部署Django项目

    1.linux安装python3环境 参考链接:https://www.cnblogs.com/zzqit/p/10087680.html 2.安装uwsgi pip3 install uwsgi l ...

随机推荐

  1. Quartz.Net分布式任务管理平台(第二版)

    前言:在Quartz.Net项目发布第一版后,有挺多园友去下载使用,我们通过QQ去探讨,其中项目中还是存在一定的不完善.所以有了现在这个版本.这个版本的编写完成其实有段时间了一直没有放上去.现在已经同 ...

  2. jsonrpc环境搭建和简单实例

    一.环境准备 下载需要的jar包和js文件,下载地址:https://yunpan.cn/cxvbm9DhK9tDq  访问密码 6a50 二.新建一个web工程,jsonrpc-1.0.jar复制到 ...

  3. C_数据结构_快速排序

    # include <stdio.h> void QuickSort(int * a, int low, int high); int FindPos(int * a, int low, ...

  4. Python-文件操作—_19

    1,文件操作 模特主妇护士老师.txt 1,文件路径:d:\模特主妇护士老师.txt 2,编码方式:utf-8 gbk .... 3,操作方式:只读,只写,追加,读写,写读..... 以什么编码方式储 ...

  5. rabbitMq实现与zookeeper类似的watcher功能

    场景:A.B.C.D(可以是一个机器的不同进程,也可以是不同机器的进程)启动了相同的项目,使用同一个数据库.但是,如果A修改了数据库的数据,需要B.C.D在很短的时间能够知道数据库发生了修改.当然可以 ...

  6. LINUX内核分析第八周学习总结——进程的切换和系统的一般执行过程

    LINUX内核分析第八周学习总结——进程的切换和系统的一般执行过程 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/c ...

  7. 2017-2018-2 1723《程序设计与数据结构》实验四 & 实验五 & 课程总结 总结

    作业地址 实验四作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1943 提交情况如图: 实验五作业:https://edu ...

  8. (转)SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM之间

    原因: 出现这种问题多半是因为你插入或者更新数据库时,datetime字段值为空默认插入0001年01月01日造成datetime类型溢出. 传给数据库表的时间类型值是null值.这里的null指的是 ...

  9. FreeMarker example all in one

    Pick up from http://demojava.iteye.com/blog/800204

  10. PDF文档打印太慢怎么办

    如下图,用Adobe Acrobat打开PDF文件,然后[高级]-打勾[作为图像打印]即可