Django项目利用nginx+gunicorn实现简单部署:

部署前准备:

​    1 有一台服务器:

​    2 全新服务器的话,建议创建一个新的用户,不要在root下部署代码.

```
创建一个超级权限的新用户:(wangdengkai    是用我的用户名)
#在 root 用户下运行这条命令创建一个新用户
root@localhost:~# useradd -m -s /bin/bash wangdengkai    
# 把新创建的用户加入超级权限组
root@localhost:~# usermod -a -G sudo wangdengkai
# 为新用户设置密码
# 注意在输密码的时候不会有字符显示,不要以为键盘坏了,正常输入即可
root@localhost:~# passwd wangdengkai
 切换到创建的新用户
root@localhost:~# su - wangdengkai
# 切换成功,@符号前面已经是新用户名而不是 root 了
wangdengkai@localhost:~$
```

​    3  新用户创建并切换成功了。如果是新服务器的话,最好先更新一下系统,避免因为版本太旧而给后面安装软件带来麻烦。运行下面的两条命令:

```
wangdengkai@localhost:~$ sudo apt-get update
wangdengkai@localhost:~$ sudo apt-get upgrade
```

接下来就可以安装必要的软件了,这里我们需要用到的软件有 Nginx、Pytohn3、Git、pip 和 virtualenv。

```
wangdengkai@localhost:~$ sudo apt-get install nginx
wangdengkai@localhost:~$ sudo apt-get install git python3 python3-pip
wangdengkai@localhost:~$ sudo pip3 install virtualenv
```

​    4启动nginx服务:

​        wangdengkai@localhost:~$ sudo service nginx start

部署代码

​    1 项目配置:

​        Django 项目中会有一些 CSS、JavaScript 等静态文件,为了能够方便地让 Nginx 处理这些静态文件的请求,我们把项目中的全部静态文件收集到一个统一的目录下,这个目录通常位于 Django 项目的根目录,并且命名为 static。为了完成这些任务,需要在项目的配置文件里做一些必要的配置:

```
blogproject/settings.py

# 其他配置...

STATIC_URL = '/static/'
# 加入下面的配置
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
```

STATIC_ROOT 指明了静态文件的收集目录,即项目根目录(BASE_DIR)下的 static 文件夹。

为了安全起见,在生产环境下需要关闭 `DEBUG` 选项以及设置允许访问的域名。打开 settings.py 文件,找到 `DEBUG` 和 `ALLOWED_HOSTS` 这两个选项,将它们设置成如下的值:

```
blogproject/settings.py

DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', 'localhost ', '.zmrenwu.com']
```

`ALLOWED_HOSTS` 是允许访问的域名列表,127.0.0.1 和 localhost 是本地访问的域名,.zmrenwu.com 是访问服务器的域名(**换成你自己的域名**)。域名前加一个点表示允许访问该域名下的子域名,比如 www.zmrenwu.com、test.zmrenwu.com 等二级域名同样允许访问。如果不加前面的点则只允许访问 zmrenwu.com。

项目还会依赖一些第三方 Python 库,为了方便在服务器上一次性安装,我们将全部依赖写入一个叫 requirements.txt 的文本文件中。激活**本地**的虚拟环境(如果你使用了虚拟环境的话),并进入项目的根目录,运行 `pip freeze > requirements.txt` 命令:

```
(blogproject_env) C:\Users\yangxg\Workspace\blogproject>
pip freeze > requirements.txt
```

这时项目根目录下会生成了一个 requirements.txt 的文本文件,其内容记录了项目的全部依赖。

3    将代码上传到 GitHub

4    创建虚拟环境:(在你的项目目录下)

​    wangdengkai@localhost:~/sites/my_project$ virtualenv --python=python3 venv

​    注意这里使用 --python=python3 来指定克隆 Python3 的环境。因为 ubuntu 系统默认安装了 Python2,如果不特别指定的话 Virtualenv 默认克隆的是 Python2 的环境。

检查一下虚拟环境是否创建成功,运行 ls 命令列出当前目录下的文件和文件夹,看到v env 这个文件夹说明虚拟环境创建成功。

5接着再从代码仓库把项目代码拉取过来,**把 git clone 后的地址换成你自己的 GitHub 仓库地址!**

```
wangdengkai@localhost:~/sites/my_project$ git clone https://github.com/django-blog-tutorial.git
```

6激活虚拟环境,再进入到项目根目录,即 requirements.txt 所在的目录,安装项目的全部依赖:

​        $ source venv/bin/activate

​        pip install  -r  requirements.txt

7收集静态文件:

​        $ python  manage.py   collectstatic

8    生成数据库:(需要安装或者链接数据库)

​        $ python  manage.py migrate

9    创建超级用户:

​        $ python manage.py  createsuperuser

简单部署服务器方式:

​    1 切换到django项目目录下,然后输入一下命令:

​            nohup    python     manage.py     runserver   0.0.0.0:3000     &

复杂部署服务器方式:

​    1    安装gunicorn

​            1 进入虚拟环境中,输入一下命令:

​                pip     install    gunicorn

​    2    修改nginx配置

​        1  回到主目录:cd   ~

​        2   编辑nginx配置文件:

​            1    sudo    vim /etc/nginx/nginx.conf

​            2     添加配置文件内容:在http大括号内添加一下代码,添加时注意缩进:

```
 server {
            listen 80;
            server_name localhost;
            location / {
                proxy_pass http://0.0.0.0:8000;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
            error_page 500 502 503 504 /50x.html;
            location = /50x.html {
                root html;
            }
            location /media {
                alias /root/bookstore/bookstore/static;#你的静态文件的目录
            }
            location /static {
                alias /root/bookstore/bookstore/static; #你的静态文件的目录
            }
        }
```

​        3    注释掉 文件中的一下代码:

```
 # include /etc/nginx/sites-enabled/*;
```

​        4    修改第一行代码后面的用户名为ubuntu账户名:

```
user xxxxxx;#你的用户名
```

​        4.5    重启nginx:sudo  nginx -s reload

​        5    启动项目(2中方式):假设我的django项目名为 bporject.

​            ;

```
1前台启动:gunicorn -w 3 -b 0.0.0.0:8000 bpro.wsgi:application
2后台启动nohup gunicorn -w 3 -b 127.0.0.1:8080 bpro.wsgi:application &
3后台启动:gunicorn -w 3 -b 127.0.0.1:8080 bpro.wsgi:application  -D
```

​        6    然后回车退出命令行,就可以通过ip访问了.

# 自动启动 Gunicorn

- 我用的操作系统是Ubuntu 16.04 LTS,用户是siar,非root用户

## 1. 新建目录(自启动服务文件存放目录)

`sudo mkdir -p /usr/lib/systemd/system`

## 2. 新建文件(自启动的服务文件)

`sudo vim /usr/lib/systemd/system/siar.service`

### 2.1 添加如下内容

```
[Unit]
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
# 你的用户
User=siar
# 你的目录
WorkingDirectory=/home/siar/sites/django-blog-learning/blogproject
# gunicorn启动命令
ExecStart=/home/siar/sites/env/bin/gunicorn --bind unix:/tmp/siar.socket blogproject.wsgi:application
Restart=on-failure
[Install]
WantedBy=multi-user.target
```

- 有一些参数我也不是太懂,具体可以参照下面的[systemd.service 中文手册](http://www.jinbuguo.com/systemd/systemd.service.html)链接。

### 2.2 保存并退出

`:wq`

## 3. 启动服务

`sudo systemctl start siar`

- 我的文件名是siar.service,所以就`sudo systemctl start siar`

3.1 停止服务stop

sudo systemctl   stop wangdengkai

## 4. 添加服务到开机自动运行

`sudo systemctl enable siar.service`

## 5. 验证启动

`ps -ef | grep gunicorn`

- 查看`gunicorn`是否已经启动,有两个进程。

- ## 6. 参考链接

- [SystemdForUpstartUsers](https://wiki.ubuntu.com/SystemdForUpstartUsers)
  - [systemd.service 中文手册](http://www.jinbuguo.com/systemd/systemd.service.html)
  - [Ubuntu 16.04 增加bash脚本为service,开机自启服务脚本配置](http://www.zhimengzhe.com/linux/302083.html)
  - [用 systemd 配置一个简单的自动重启服务](https://segmentfault.com/a/1190000009590101)

转载请注明:[杨帆](http://www.yangfan.cc/) » [ubuntu16.04自动系统启动gunicorn教程django](http://www.yangfan.cc/zhanzhang/1425.html)

## 附录---------------------------------------------------------------

### linux命令介绍:

​    1 nobup:

```
nohup 命令运行由 [Command]参数和任何相关的 [Arg]参数指定的命令,忽略所有挂断(SIGHUP)信号。在[注销]后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。

nohup Command [ Arg ... ] [ & ]

nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂断的意思( no hang up)
```

nginx的配置文件解释.

```

#运行用户
user nobody;
#启动进程,通常设置成和cpu的数量相等
worker_processes  1;

#全局错误日志及PID文件
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

#工作模式及连接数上限
events {
    #epoll是多路复用IO(I/O Multiplexing)中的一种方式,
    #仅用于linux2.6以上内核,可以大大提高nginx的性能
    use   epoll;

#单个后台worker process进程的最大并发链接数    
    worker_connections  1024;

# 并发总数是 worker_processes 和 worker_connections 的乘积
    # 即 max_clients = worker_processes * worker_connections
    # 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4  为什么
    # 为什么上面反向代理要除以4,应该说是一个经验值
    # 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000
    # worker_connections 值的设置跟物理内存大小有关
    # 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数
    # 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
    # 我们来看看360M内存的VPS可以打开的文件句柄数是多少:
    # $ cat /proc/sys/fs/file-max
    # 输出 34336
    # 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
    # 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置
    # 使得并发总数小于操作系统可以打开的最大文件数目
    # 其实质也就是根据主机的物理CPU和内存进行配置
    # 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。
    # ulimit -SHn 65535

}

http {
    #设定mime类型,类型由mime.type文件定义
    include    mime.types;
    default_type  application/octet-stream;
    #设定日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

access_log  logs/access.log  main;

#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
    #对于普通应用,必须设为 on,
    #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
    #以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    sendfile     on;
    #tcp_nopush     on;

#连接超时时间
    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay     on;

#开启gzip压缩
    gzip  on;
    gzip_disable "MSIE [1-6].";

#设定请求缓冲
    client_header_buffer_size    128k;
    large_client_header_buffers  4 128k;

#设定虚拟主机配置
    server {
        #侦听80端口
        listen    80;
        #定义使用 www.nginx.cn访问
        server_name  www.nginx.cn;

#定义服务器的默认网站根目录位置
        root html;

#设定本虚拟主机的访问日志
        access_log  logs/nginx.access.log  main;

#默认请求
        location / {

#定义首页索引文件的名称
            index index.php index.html index.htm;

}

# 定义错误提示页面
        error_page   500 502 503 504 /50x.html;
        location = /50x.html {
        }

#静态文件,nginx自己处理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {

#过期30天,静态文件不怎么更新,过期可以设大一点,
            #如果频繁更新,则可以设置得小一点。
            expires 30d;
        }

#PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
        location ~ .php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include fastcgi_params;
        }

#禁止访问 .htxxx 文件
            location ~ /.ht {
            deny all;
        }

}
}
```

Django项目nginx+gunicorn 部署相关推荐

  1. 使用 Nginx + Gunicorn 部署 Flask 项目

    使用 Nginx + Gunicorn 部署 Flask 项目 Flask Web 项目开发完成后,开发人员只是在开发环境运行,只有本地可以访问到项目.如果要让用户访问到项目,需要将项目部署到生产环境 ...

  2. vue项目nginx服务器部署详细流程....

    vue项目nginx服务器部署 (1)前言 将自己做的vue项目部署到服务器上,这里我采用的工具是Nginx,Nginx是一款轻量级的web服务器.反向代理服务器,由于它的内存占用小,启动快,高并发能 ...

  3. 在 Linux 上部署 Django 应用,nginx+gunicorn+supervisor

    如果是新服务器先要进行基本的配置 部署前应用配置 开发环境与生产环境中的应用一般会有两套不同的配置.比如 DEBUG 选项,数据库配置等. 对于 setting.py 文件, 在生产环境中我们要设置 ...

  4. Python3 Flask+nginx+Gunicorn部署(上)

    前言:一般在本地运行flask项目通常是直接python3 文件名.py,然后打开:http://127.0.0.1:5000 查看代码结果 这次主要是记录flask在python3 环境结合ngin ...

  5. Django+uwsgi+nginx服务器部署

    准备工作 推荐使用anaconda进行python环境的管理,因python环境容易出现各种版本冲突问题 安装anaconda: wget https://repo.anaconda.com/arch ...

  6. windows环境部署django项目(可部署不同版本的django)

    准备事项: 1.django项目的运行环境(python语言等). 2.一个可以正常运行的django项目. 3.windows环境的IIS安装好. 4.关闭调试模式,修改settings.py文件. ...

  7. Django项目使用gunicorn

    一般启动命令:gunicorn djangoProjectName.wsgi:application(djangoAppName: 为Django对应的项目名称) 例如:gunicorn django ...

  8. Python3.7.6 Django项目上传部署(一)

    1.Python环境检查,Linux系统中,Python默认是2.7的,需要升级环境. 下载安装升级: wget https://www.python.org/ftp/python/3.7.6/Pyt ...

  9. 【Flask】Nginx / Gunicorn入门:部署你的Flask项目

    什么是Nginx? 参考:Nginx入门 什么是反向代理呢? 我们很多人应该都用过淘宝,要知道每天同时连接到淘宝网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时就出现了一个 ...

  10. docker部署django项目、mysql主从搭建、django实现读写分离

    目录 docker部署django项目 1.1 基于python基础镜像 将本地django项目打包并发到远程服务器上 将服务器上的.zip django项目解压 部署的具体流程 1.2 基于dock ...

最新文章

  1. DELPHI 中 Window 消息大全使用详解
  2. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取 Activity 中的所有方法 | 获取方法上的注解 | 获取注解上的注解 | 通过注解属性获取事件信息 )
  3. 锁相环环路滤波器计算公式_锁相环计算方法
  4. 如何阅读《深入理解计算机系统》?(文末送书)
  5. dubbo-admin构建报错
  6. axios的content-type是自动设置的吗?
  7. linux unzip命令不存在_15个常用基础命令Linux(很多人不知道!)
  8. 2022零售行业消费趋势新主张
  9. python制作饼状图
  10. magicmatch java_Java-webmagic爬虫
  11. ubuntu 18.04 ROS melodic 尝试 ROS CANOPEN 控制 AGV
  12. Centos7 设置静态IP后重启网络服务出错
  13. python3.6安装pyspider
  14. 在Netty中使用Apache common fileupload
  15. 小程序window对象的探索
  16. excel表格的函数公式大全
  17. zipOutputStream压缩后用RAR解压出现“不可预料的压缩文件末端”错误
  18. matlab求解微分方程ode23
  19. 如何在 3dMax 中制作游戏中的战斧模型?
  20. python练习生|这是你熟悉的第一行代码吗?(附python安装教程(win))

热门文章

  1. context deadline exceeded
  2. 股票学习-量柱和k线-第一天
  3. 基本表改变视图不改变为什么_为什么说10万本金以下穷人玩股票一般都会赔?不改变穷人思维,还不如退出股市...
  4. 2022IEOC全国赛专业组获奖及晋级成绩公布 全球赛期待继续辉煌
  5. 云计算淡定从容的大局观
  6. Android开发之隐示意图跳转
  7. C# 输入一个正整数N,判断N是奇数还是偶数,输出1~N的奇数和或是偶数和,三种不同方法分别实现
  8. CASE WHEN THEN 判断
  9. 比Kafka Mangaer更优秀的开源监控工具-Kafka Eagle
  10. linux格式化u盘为ntfs格式,Linux上格式化U盘为NTFS格式