一、打包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. maven项目中 org.hibernate.MappingNotFoundException: resource:*.hbm.xml not found问题的解决方案

    是因为*.hbm.xml没有放到resource的mapper下导致的 对于Maven工程,编译的工作是由Maven程序来完成的,而Maven默认只会把src/main/resources文件夹下的文 ...

  2. 线程中join()的用法

    Thread中,join()方法的作用是调用线程等待该线程完成后,才能继续用下运行. public static void main(String[] args) throws Interrupted ...

  3. Python 学习 第七篇:函数1(定义、调用和变量的作用域)

    函数是把一些语句集合在一起的程序结构,用于把复杂的流程细分成不同的组件,能够减少代码的冗余.代码的复用和修改代码的代价. 函数可以0个.1个或多个参数,向函数传递参数,可以控制函数的流程.函数还可以返 ...

  4. 你应该学会的接口调试神器——Postman高级用法

    postman这个神器相信大家都用过,程序员作为非专业的测试人员,非常需要这么一款简单轻量级的restful测试工具,但是不知道你是否知道,postman的强大之处不只是测试一下接口,还有其他非常赞的 ...

  5. mysql 编码和汉字存储占用字节问题的探索

    MySql 5.5 之前,UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区,BMP是从哪到哪?基本就是 0000 ~ FFFF 这一区. 从MySQL 5.5 开始,可支持4 ...

  6. C. Sequence Transformation

    链接 [http://codeforces.com/contest/1059/problem/C] 题意 给你一个n,有个序列有n个元素分别时1 ~ n,每次去掉一个元素输出剩下元素的GCD,使得最后 ...

  7. 遇到的eclipse启动报错问题解决

    遇到的eclipse启动报错问题解决 一.启动时出现Java was started but returned exit code=13 可能原因: 1.eclipse与JDK的不是都64位或者32位 ...

  8. 第七次Scrum meeting

    第七次Scrum  meeting 任务及完成度: 成员 12.26 12.27 陈谋 任务1040:完成stackoverflow的数据处理后的json处理(98%) 任务1114-1:完成对网页数 ...

  9. leetcode 730 Count Different Palindromic Subsequences

    题目链接: https://leetcode.com/problems/count-different-palindromic-subsequences/description/ 730.Count ...

  10. 第五届蓝桥杯C++B组 地宫取宝

    代码: #include <bits/stdc++.h> using namespace std; #define ll long long const ll mod = 1e9 + 7; ...