目录

  • django项目部署 使用uwsgi + nginx 实现django项目的部署

    • 一、Django配置
  • 修改settings.py同目录下的wsgi.py文件
    • 二.生成requirement.txt文件
    • 三. 上传代码到服务器
    • 四、 安装requirements.txt 对应的包
    • 五. uwsgi的安装和测试
    • 六. uwsgi 文件配置
    • 七、直接在服务器上安装nginx (后面会介绍在docker中安装和启动)
    • 八、django项目的nginx配置文件
  • centos7 下创建用户部署django项目

django项目部署 使用uwsgi + nginx 实现django项目的部署

一、Django配置

1.settings.py配置

复制全局settings.py配置文件(或者直接修改),创建一个名为deploy_settings.py的副本,修改DEBUG

=False。

DEBUG = False# 填写你自己的ip和域名   # 注意,这里要写上允许谁访问的ip地址,不然就访问不了,踩了个大坑,长记性了
ALLOWED_HOSTS = ["yan.long920.cn", "localhost", "127.0.0.1", '112.74.160.252']

2.wsgi.py配置

修改settings.py同目录下的wsgi.py文件

import osfrom django.core.wsgi import get_wsgi_applicationos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tznewblog.deploy_settings')application = get_wsgi_application()

二.生成requirement.txt文件

# 在xshell中生成requirements.txt文件(将项目中安装的包,存放到requirements.txt文件中)pip freeze > requirements.txt

三. 上传代码到服务器

四、 安装requirements.txt 对应的包

安装包之前先创建一个虚拟环境
pip install -r requirements.txt

五. uwsgi的安装和测试

# 进入到虚拟环境  安装uwsgi
workon dj_pro
pip install uwsgi

测试uwsgi是否安装成功文件代码:

# 测试py文件
# test_uwsgi.py
def application(env, start_response):start_response('200 OK', [('Content-Type','text/html')])return [b"Hello World"] # python3#return ["Hello World"] # python2

运行uwsgi:

uwsgi --http :8101  --wsgi-file test_uwsgi.py

测试uwsgi是否运行正常:

curl 127.0.0.1:8101# 如下就是正常的
[root@zhenzi0322 ~]# curl http://127.0.0.1:8101
Hello World[root@zhenzi0322 ~]#

六. uwsgi 文件配置

1. uwsgin_conf.ini文件代码 在项目根目录中创建deploy目录,新建uwsgi_conf.ini文件。

[uwsgi]
# ip和端口
# nginx连接
socket=127.0.0.1:8101
#http=127.0.0.1:8101            # socker 和 http 两者只能设置一个, 如果设置的是http, 那么此时在服务器上curl http://127.0.0.1:8101   就能够接收到返回结果, 如果是socker的话,那么还需要搭配nignx来使用
#http=0.0.0.0:8101# 指定项目的根目录
chdir=/home/cheng/django_deploy/tznewblog/# 项目中 wsgi.py 文件的相对目录,相对于项目根目录
wsgi-file=tznewblog/wsgi.py# 进程数
processes=1# 线程数
threads=1# uwsgi服务器角色
# 这里设置为主
master=True# 存放进程编号的文件
pidfile=uwsgi.pid# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见,以前的runserver是依赖终端的
# 记得在当前目录下创建logs文件夹
daemonize=logs/uwsgi.logs# 指定虚拟环境所在目录,绝对路径
virtualenv=/home/cheng/.virtualenvs/cheng_dj_deploy

2.uwsgi的运行及停止

# 启动uwsgi
uwsgi --ini uwsgi_conf.ini# 停止uwsgi
uwsgi --stop uwsgi.pid

七、直接在服务器上安装nginx (后面会介绍在docker中安装和启动)

1. 安装

# 安装nginx
sudo apt-get update
sudo apt-get install nginx# nginx 安装后一般自动启动
sudo service nginx status  # 查看nginx状态# 默认开启80端口,可以查看一下是否提供web服务
curl -I 127.0.0.1

2. nginx命令 (使用管理员权限)

1. 启动nginx:  nginx
2. 停止nginx: nginx -s stop
3. 重新加载nginx配置文件(一般修改nginx配置文件的时候用):  nginx -s reload
# 一般我就用上面这几个命令dongcheng@long:~$ sudo nginx -h
nginx version: nginx/1.15.5 (Ubuntu)
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]Options:-?,-h         : this help-v            : show version and exit-V            : show version and configure options then exit-t            : test configuration and exit-T            : test configuration, dump it and exit-q            : suppress non-error messages during configuration testing-s signal     : send signal to a master process: stop, quit, reopen, reload-p prefix     : set prefix path (default: /usr/share/nginx/)-c filename   : set configuration file (default: /etc/nginx/nginx.conf)-g directives : set global directives out of configuration file

3.除了nginx本身提供的命令,我们还可以通过信号控制nginx

# 1. QUIT: 优雅的关闭进程,即等请求结束后再关闭
# 2. HUP: 改变配置文件,平滑的重读配置文件
# 3. USR1: Reopen the log files 重读日志,在日志按月/日分割时有用
# 4. USR2: Upgrade Executable on the fly 平滑的升级
# 5. WINCH: Gracefully shutdown the worker processes 优雅关闭旧的进程(配合USR2来进行升级)
# 一般情况下只会用到QUIT 和 HUP使用方法: 首先要知道nginx的进程号, (所以可能还是nginx本身提供的命令好用)
ps -aux|grep nginx     # 查nginx 的进程号,  比如 nginx 的进程号为4873
具体语法:
kill -信号选项 nginx的主进程号
kill -HUP 4873          # 相当于nginx -s reload
kill -quit 4873
kill -9 4873# 可能通过查看nginx.pid来获得nginx的进程号,从而省去ps -aux|grep nginx查找nginx进程号的步骤
kill -信号控制 `cat /run/nginx.pid`     # nginx的pid进程号一般存放在这里
kill -USR1 `cat /run/nginx.pid`
dongcheng@long:/run$ sudo kill -hup `cat nginx.pid`

4. 关于更多nginx知识

1. nginx介绍
  • Mainline version 开发版
  • Stable version 稳定版
  • Legacy version 历史版本

安装好nginx后,查看nginx版本: nginx -v

2. nginx安装目录
路径 类型 作用
/etc/nginx /etc/nginx/nginx.conf
/etc/nginx/conf.d /etc/nginx/conf.d/default.conf
/etc/nginx/sites-available
/etc/nginx/sites-enabled
配置文件 nginx主配置文件
/etc/nginx/fastcgi_params
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
配置文件 fastcgi 、scgi 、 uwsgi配置文件
/etc/nginx/win-utf
/etc/nginx/koi-utf
/etc/nginx/koi-win
配置文件 nginx编码转换映射文件
/etc/nginx/mime.types 配置文件 htttp协议的Content-Type与扩展名
/usr/lib/systemd/systemd/nginx.service 配置文件 配置系统守护进程管理器
/etc/logrotate.d/nginx 配置文件 nginx⽇志轮询,⽇志切割
/usr/sbin/nginx
/usr/sbin/nginx-debug
命令 nginx终端管理命令
/etc/nginx/modules
/usr/lib/nginx 可能也为/usr/lib64/nginx
/usr/lib/nginx/modules
目录 nginx模块目录

/usr/share/nginx
/usr/share/html
/usr/share/html/index.html
/var/www/html/
目录 nginx默认站点目录
/var/log/nginx 目录 nginx的日志目录
/run/nginx.pid 文件 nginx 运行的端口号
3. nginx编译参数

查看nginx编译参数 命令:nginx -V

4. HTTP 状态码
  • 301 永久移动。被请求的资源已被永久移动到指定位置
  • 302 请求的资源现在临时从不同的URL响应请求
  • 305 使用代理。被请求的资源必须通过指定的代理才能被访问
  • 307 临时跳转。被请求的资源在临时从不同的URL响应请求
  • 400 错误请求
  • 402 需要付款。该状态码是为了将来可能的需求而预留的,用于一些数字货币或者是微支付
  • 403 禁止访问。服务器已经理解请求,但是拒绝执行它
  • 404 找不到对象。请求失败,资源不存在
  • 406 不可接受的
  • 408 请求超时
  • 409 冲突。由于和被请求的资源的当前状态之间存在冲突,请求无法完成
  • 410 遗失的。被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址
  • 413 响应实体太大。服务器拒绝处理当前请求,请求超过服务器所能处理和允许的最大值
  • 417 期望失败。在请求头Expect中指定的预期内容无法被服务器满足
  • 418 我是一个茶壶。超文本咖啡罐控制协议,但是并没有被实际的HTTP服务器实现
  • 420 方法失败
  • 422 不可处理的实体。请求格式正确,但是由于含有语义错误,无法响应
  • 500 服务器内部错误。服务器遇到了一个未曾预料的头部,导致了它无法完成对请求的处理
  • 502 请求后端失败
  • 504 请求成功,但是影响超时
5. nginx 主配置文件

nginx主配置文件/etc/nginx/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。一般,每个区块以一对大括号{}来表示开始与结束。

小知识
  1. 动态查看日志 fail -f /var/log/nginx/access.log # 使用fail命令来查看

八、django项目的nginx配置文件

  1. 创建/etc/nginx/conf.d/nginx_uwsgi.conf文件:
# 我的nginx_uwsgi.conf配置
upstream chengBlog {# 此处为uwsgi运行的ip地址和端口号server 127.0.0.1:8101;
}server {# 监听端口listen      80;# 服务器域名或者ip地址server_name yan.long920.cn 112.74.160.252 localhost;# 编码charset     utf-8;# 文件最大上传大小client_max_body_size 75M;# 媒体文件location /media  {alias //home/cheng/django_deploy/tznewblog/media;}# 静态文件location /static {alias //home/cheng/django_deploy/tznewblog/static;}# 主目录, 交给uwsgi处理, nginx 只处理静态文件目录location / {uwsgi_pass  chengBlog;include    /www/server/nginx/conf/uwsgi_params;}
}
  1. 如果如果出现静态文件无法访问: 即出现: 403 Forbade 的形式
    修改sudo vim /etc/nginx/nginx.conf
    第一行开头修改用户,将www-data改为你当前的用户
# 在我ubuntu 中:
# user www-data
user pyvip;# 在centos7中:
# user www www
user root
  1. 查看nginx 配置文件是否正确(查看有无语法错误)
# sudo nginx -t -c /etc/nginx/nginx.conf
sudo nginx -t   # 一般我使用这条命令
# 打印如下内容,则没问题
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful# 重新加载配置
# sudo nginx -s reload -c /etc/nginx/nginx.conf
sudo nginx -s reload    # 一般我使用这条命令, 这两条命令都应该是加不加参数都无所谓

centos7 下创建用户部署django项目

  1. 创建 cheng 这个用户并为其设置密码:
useradd cheng -g root -m   # 创建cheng用户
password cheng             # 为cheng 设置密码su cheng     # 切换到cheng用户
  1. 为 cheng 添加 sudo 权限(在root用户下完成)
    若执行sudo命令的用户没有sodu权限,则会报以下错误:
    cheng is not in the sudoers file.This incident will be reported

准备工作:

ls -l /etc/sudoers 查看文件权限
chmod u+w /etc/sudoers 修改文件权限为可编辑
# 首先切换为root用户
su root# 修改sudoers文件
vim /etc/sudoers
# 找到:  root All=(ALL)   ALL      这一行, 在下一行添加上相应的用户即可
## Allow root to run any commands anywhere;  若要给cheng用户增加sudo权限,需要增加如下一行
root    ALL=(ALL)       ALL
cheng   ALL=(ALL)       ALL

修改完成后,记得将文件权限改回只读:

chmod u-w /etc/sudoers 修改文件权限为只读
ls -l /etc/sudoers 查看文件权限

至此就为 cheng 这个用户添加上了sudo权限, 该用户可以使用sudo 来提升至管理员权限了

搭建 cheng 用户的虚拟环境

workon
mkvirtualenv
...
此时你会发现在root用户下管用的这几个命令在cheng这个用户下是找不到的(提示你没有命令没找到),      # 刚创建好的这个用户是没有: workon mkvirtualenv 等命令的, 还需要我们去配置
  1. 去编辑 ~/.bashrc 在最后添加上这几句话 # 家目录下的这一隐藏文件
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/workspace
source /usr//bin/virtualenvwrapper.sh         # 注意 virtualenvwrapper.sh 的位置, 有可能不是这个位置# find / -name virtualenvwrapper.sh     # 查找virtualenvwrapper.sh 这个文件的位置
  1. 编辑上述文件并保存好后,运行如下命令使配置立即生效:
source ~/.bashrc

此时, 再输入 workon 等命令就可以了

创建 cheng 用户的 python3 虚拟环境

mkvirtualenv -p python3 cheng_py3

至此剩下的步骤都是一样的了

转载于:https://www.cnblogs.com/nichengshishaonian/p/11522789.html

20_django项目的部署和总结相关推荐

  1. IntelliJ IDEA WEB项目的部署配置

    1.前言 虽说Intellij IDEA已经用了四个多月,里面大部分功能还是比较熟悉的,但是很多细节地方还是搞不清楚,这几天公司另一个小组也换成了Intellij IDEA,帮他们迁移项目的时候,因为 ...

  2. [转]Eclipse中的Web项目自动部署到Tomcat

    原文地址:http://www.cnblogs.com/ywl925/p/3815173.html 原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的 ...

  3. Linux中java项目环境部署,简单记录一下

    这里只是简单的记录一下linux环境下面如何快速的搭配好环境,使你的项目能在linux环境上面运行. 很多时候,我们都是用windows环境进行配置调试的,而真正很多服务器都是在linux服务器上面的 ...

  4. ant+svn+tomcat实现项目自动部署

    因工作需要,研究并实现了 ant+svn+tomcat实现项目自动部署,其中参考了下面文章:http://www.cnblogs.com/taoweiji/p/3700915.html jar包需要e ...

  5. IDEA创建Web项目及部署Tomcat

    IDEA创建Web项目及部署Tomcat 说明:本文章适用于IDEA2020及以后版本 操作 IDEA创建Web项目及部署Tomcat:IDEA2020创建Web项目(及部署Tomcat) 细节补充 ...

  6. SpringBoot + Vue + nginx项目一起部署

    SpringBoot + Vue + nginx项目一起部署 SpringBoot + Vue 一起部署到 nginx 1.后端项目部署: (1)  Java项目打包上传到 服务器,开启服务 java ...

  7. centos7 界面中文都是方块_Centos 7 项目管理系统部署之Trac(一)

    本文摘要 一.Trac是什么? 二.Trac应用场景与优缺点 三.Trac环境搭建与部署篇 Centos 7 项目管理系统部署之Trac(二)待续 四.Trac系统优化篇 五.常用插件篇 因内部项目新 ...

  8. myeclipse + tomcat 项目自动部署

    在MyEclipse中设置项目的自动部署需要综合考虑两个方面: 1是MyEclipse本身,通过主菜单中project->auto ,另一个就是tomcat配置文件.配置文件包括 conf 下的 ...

  9. Python【算法中心 03】Docker部署Django搭建的Python应用流程实例(Docker离线安装配置+Django项目Docker部署)

    1.Docker离线安装配置 rpm版本安装 # 系统版本 rpm -qi centos-release Name : centos-release Version : 8.1 Release : 1 ...

最新文章

  1. 用类模拟C风格的赋值+返回值
  2. 汇编语言 判断学生成绩是否及格
  3. 后台编写HttpWebRequest的POST请求,必须注意的一个小细节
  4. Windows下使用zerotier时提示PORT_ERROR错误
  5. 解决网页中不能复制文字的问题
  6. 在 k8s 中部署 Prometheus 和 Grafana
  7. pythonchallenge_level2
  8. 网页web前端学习技巧
  9. OpenShift 4 Tekton (3) - 通过控制台的图形化方式配置Tekton Pipeline
  10. css中的伪类 之 first-child
  11. python字典forward_《Python机器学习基础教程》
  12. Linux 下 svn 恢复到指定版本
  13. 浙江师范大学c语言函数实验答案,C语言实验浙江师范大学8-2 D阵列+答案.doc
  14. 计算机编程高中能学吗,高中生怎么学习计算机编程
  15. android *#06#_现在在Android#20中
  16. 广州大学计算机学院谢冬青杀人案,广州大学6.29故意杀人案细节披露:谢冬青因怀疑被举报而杀人...
  17. 2023年全国最新工会考试精选真题及答案36
  18. C语言_关于文件内容删除的两个方法总结
  19. PHP数据库分表查询
  20. threejs-经纬度转换成xyz坐标的方法

热门文章

  1. jquerymobile创建9宫格事例
  2. 动网8.2版本的注入漏洞的利用
  3. CP2102 USB to UART Bridge Driver的安装
  4. 云时代,有必要了解的华为云计算解决方案
  5. 分形——自然界的几何学
  6. 豆腐王国小游戏,烧脑推理全新来袭
  7. Breed Counting(水?)
  8. 零基础如何学习Web安全渗透测试?推荐这份史上最详细的自学路线图!
  9. matlab 矩阵 幂运算符,matlab矩阵的乘方power运算
  10. Linux系统中用命令行清空垃圾箱Trash