0-部署准备

1.要使用安全组打开腾讯云的80端口

腾讯云的80端口不能访问​www.jianshu.com

以实际项目部署为例
项目名称api_learn;
Python版本:python 3.6.6;
虚拟环境名字:djangoEnv;
端口:80;
服务器托管:腾讯云;
服务器版本:ubuntu 16.04;

2.SCP上传项目

scp -r "本地文件目录地址" ubunt@公网IP地址:/"目标地址"

例子

scp -r /Users/lhj/Downloads/api_learn ubuntu@IP:/home/ubuntu

3.本地项目上传之后的配置

1.目录结构问题

我的Django项目中只有一个主要的app名为Inquire,该app有自己的静态文件夹static。在正常的Django项目中,不同的app也应该有各自的static文件夹,但是在之后的nginx配置过程中,我们需要提供项目的一个静态目录地址,这就需要把Django项目所有app的static文件整合到一个文件夹中。此时setting.py文件中关于静态目录的设置如下:

STATIC_URL = '/static/'
# 添加app的静态文件地址,绝对地址和相对地址都可以
STATICFILES_DIRS = [
"/home/ubuntu/api_learn/static"
]
# 统一的静态文件地址
STATIC_ROOT = os.path.join(BASE_DIR, "static/")

配置好后,我们在服务器终端命令行中的/home/ubuntu/HelloWorld目录下执行以下语句完成整合:

python manage.py collectstatic

2.1 数据库配置

2.1.1 数据库安装和配置

青空琉璃:ubuntu18.04下远程连接MySQL数据库​zhuanlan.zhihu.com

2.2.2 数据库表新建

青空琉璃:MySQL使用命令行创建数据库​zhuanlan.zhihu.com

对应数据库,django项目的setting.py文件

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '数据库名称',
'USER': '使用者',
'PASSWORD': '数据库密码',
'HOST': '127.0.0.1',
}
}
# 我们需要一个第三方库用来与MySQL交互,Python3已经不再使用mysqldb,所以我们下载pymysql:
pip install pymysql
#同时在Django项目中的__init__.py中引用:
import pymysql
pymysql.install_as_MySQLdb()

用Mysql建好项目的数据库,然后进入HelloWord目录,用django应用数据模型:

(python使用虚拟环境)

python manage.py makemigrations
python manage.py migrate

建立后台超级用户:

python manage.py createsuperuser

3. 公网访问配置

DEBUG = False
ALLOWED_HOSTS = ['*']

测试

注意到以上两点后,我们可以进行测试了,在项目目录

python manage.py runserver 0.0.0.0:8000

由于在命令行的界面,所以我们可以先将命令放到后台运行

python manage.py runserver 0.0.0.0:8000 &

那么我们也可以将前台运行的转到后台去

# ctrl+z暂停任务
# jobs 查看暂停任务
# bg %[序号] 将任务放到后台继续执行
# fg %[序号] 将任务放到前台继续执行

1-环境安装

简单介绍一下:uWSGI是一个Web服务器,而uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。由于uWSGI是C语言应用程序,所以需要一个C编译器(gcc或clang)和Python开发头文件,所以输入以下语句:

sudo apt-get install build-essential python-dev

build-essential提供编译程序必须软件包的列表信息。python-dev就可以让我们安装一个源外的,内含需要编译的调用python api的c/c++文件的python类库。然后输入以下指令安装uwsgi:

sudo pip install uwsgi # 安装

安装后进行简单的测试,在本地写好如下的测试代码命名为 test.py,把文件传到云主机任意目录下:

def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return ["success!"]

  该目录下输入以下命令:

>> uwsgi --http :8000 --wsgi-file test.py

访问8000端口

curl 127.0.0.1:8000
# 成功返回success

配置uWSGI, 在项目路径下创建uwsgi.ini 文件, 配置如下:

[uwsgi]
#使用nginx连接时使用
#socket=127.0.0.1:8080
#直接做web服务器使用
http=127.0.0.1:8080
#项目目录
chdir=/home/ubuntu/test
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=test/wsgi.py
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uswgi.log

在uwsgi.ini文件所在目录下, 启动uwsgi 命令:

uwsgi --ini uwsgi.ini

检查是否运行成功

curl 127.0.0.1:8000
# 成功返回首页界面

至此, uwsgi配置完成.

安装 nginx

1.安装并运行

sudo apt-get install nginx
service nginx start

查看是否启动成功:

curl 127.0.0.1

nginx安装成功.

配置nginx

现在就可以在项目根目录下面创建项目名_nginx.conf的文件,然后编写下面文件。

# configuration of the server
server {
# the port your site will be served on
listen 80;
# the domain name it will serve for
server_name 127.0.0.1; # substitute your machine's IP address or FQDN
charset utf-8; # max upload size
client_max_body_size 75M; # adjust to taste # Django media
location /media {
alias /home/ubuntu/api_learn/media; # your Django project's media files - amend as required
} location /static {
alias /home/ubuntu/api_learn/static; # your Django project's static files - amend as required
} # Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass 127.0.0.1:8080;
include uwsgi_params; # the uwsgi_params file you installed
}
}

此时将uwsgi.ini 文件里的http=127.0.0.1:8080注释掉, 启用上一行的socket=127.0.0.1:8080.

然后把这个配置文件链接到sites-enabled目录下:

sudo ln -s /etc/nginx/sites-available/HelloWorld /etc/nginx/sites-enabled/

检查一下配置文件的语法是否有问题,提示ok就可以

sudo service nginx configtest

重启服务:

service nginx restart

测试

curl 127.0.0.1
# 返回项目首页

至此, nginx 与 wsgi连接完成.

5. 遇到问题

我们可以查看端口号占用情况并杀掉进程

netstat -apn|grep 8000
kill -9 <pid>

Django之nginx+wsgi后台部署(最新版)的更多相关文章

  1. nginx,wsgi项目部署

    1.一些重要概念 https://www.cnblogs.com/xiaonq/p/8932266.html 1.1web容器 什么是web容器 1.web容器是帮助我们部署java丶php丶pyth ...

  2. django+vue+nginx生产环境部署配置

    部署环境: 1. linux redhat 7.1 2.python 3.6.3 3. vue 4. nginx 5. gunicorn 6. supervisord 安装: 一. 基础环境安装 1. ...

  3. Django + Uwsgi +Nginx生产环境部署

    python manage.py runserver 0.0.0.0:80 ,一定不要用这个轻量级Server作为你的生产环境下的Server,因为它只能用于开发自测阶段.它既没有安全审计功能,而且又 ...

  4. 学习项目部署Django+uwsgi+Nginx生产环境部署

    绪论 项目生产环境部署,是很重的一个知识点.第一,Django自带的服务器很简陋,由于测试和开发环境尚可,无法用于生产环境,保障安全性和可靠性.以及性能.此外,学习部署方式,还有利于了解生产部署后的项 ...

  5. Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)

    Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...

  6. django自带wsgi server vs 部署uwsgi+nginx后的性能对比

    一.下面先交代一下测试云主机 cpu: root@alexknight:/tmp/webbench-1.5# cat /proc/cpuinfo |grep model model : model n ...

  7. Django Linux环境下部署CentOS7+Python3+Django+uWSGI+Nginx(含Nginx返回400问题处理、防火墙管理)

    本文将介绍如何在Linux系统上部署Django web项目,本次部署基于下面的架构: CentOS7+ Python3.5 + Django1.11 + uWSGI + Nginx 亲测可行!!按照 ...

  8. 使用 Nginx 和 Gunicorn 部署 Django 博客(转)

    原文:http://zmrenwu.com/post/20/  http://www.siar.me/post/9/ 针对很多朋友反映按照教程的做法始终只能看到 Nginx 欢迎页面的问题,Tian ...

  9. Django + Gunicorn + Nginx 部署 Ubuntu 服务器

    Django + Gunicorn + Nginx 部署服务器 获取腾讯云 root权限 本人的服务器使用的是腾讯云,腾讯云默认是没有开放 root 用户的,我们来创建 root 用户. 创建 roo ...

随机推荐

  1. 【VS开发】visual studio 2015的NuGet Manager解决方案管理功能

    NuGet的官方说明是:NuGet是一款Visual Studio的扩展,它可以简单的安装.升级开源库和工具. 官网地址:http://www.nuget.org/ 官网最醒目的位置就是下载链接,安装 ...

  2. 深入理解java:4.2. 框架编程之Spring框架的设计理念

    什么是Spring呢? Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. Spring优点 简单了解Spring之后,我们看一下Spri ...

  3. 交换机安全学习笔记 第八章 针对POE的攻击

    POE即 Power over Ethernet 借助于以太网供电.最初为了IP电话,目前主要用于功耗小于15.4w的设备例如Ap和视频监控设备.并且简化了相关设备的电力线布线. 英文缩写注释:PSE ...

  4. 使用自定义View

    1 关于自定义的View的构造函数 java中对构造函数只是调用,不继承.因为整个UI是android系统提供的框架,因此构造函数需要写成它要求的格式,即和View的构造函数一样. 自定义的View中 ...

  5. Spring(十)--Advisor顾问

    Spring之Advisor顾问 1. 创建新的xml文件  advisor.xml <!--01. 配置目标对象 实际肯定是配置UserServiceImpl--> <bean i ...

  6. Comet OJ - Contest #13

    Rank53. 第一次打这种比赛.还是有不少问题的,以后改吧. A题WA了两次罚了不少时. C写到一半发现只能过1,就先弃了. D一眼没看出来.第二眼看出来就是一个类似于复数的快速幂. 然后B切了. ...

  7. 内核中likely和unlikely宏定义

    在内核代码中经常会看到unlikely和likely的踪影.他们实际上是定义在 linux/compiler.h 中的两个宏. #define likely(x)    __builtin_expec ...

  8. python-day17(正式学习)

    目录 包 一.什么是包? 二.为什么要有包? 三.如何用包? 3.1 模块和包 3.2 扩展模块功能 3.3 修改__init__.py文件 绝对导入和相对导入 注意事项 模块不来总结了,直接去htt ...

  9. poj2186--tarjan+缩点(有向图的强连通分量中点的个数)

    题目大意:       每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也 ...

  10. jq each遍历数组或对象

    var arr = ["北京","上海","天津","重庆","河北","河南" ...