文章目录

  • 瞬间心情愉悦,头发都少掉了几根!---Django+uwsgi+Nginx项目部署超详细步骤
    • 先决条件
    • 步骤
    • 本地运行测试
    • 上传服务器
    • 环境安装
    • 准备django程序
  • 完美解决!

瞬间心情愉悦,头发都少掉了几根!—Django+uwsgi+Nginx项目部署超详细步骤

先决条件

  1. 可以正常在本地运行的django项目
  2. 一台云服务器(阿里云、华为云等亲测均可)
  3. 域名(没有的话可以使用localhost)

坑:记得关闭防火墙,放行用到的端口。uwsgi和nginx的配置文件路径一定要写对。有问题评论区留言,华为云、阿里云实测可行。

步骤

本地运行测试

本地pychrm运行,没有任何问题,继续。

上传服务器

  1. 打开xmanager连接你的服务器

  2. 在根目录下创建一个文件夹mydata

    [root@iZuf6g4e6vhdv58sz2z1klZ mydata]# mkdir mydata
    [root@iZuf6g4e6vhdv58sz2z1klZ mydata]# pwd
    /mydata
    
  3. 将项目上传到/mydata下

    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# ls
    api  blogleev2  django.log  manage.py  __pycache__  static  uploads  uwsgi.ini
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# pwd
    /mydata/blogleev2
    

环境安装

一台新的服务器都会自带两个版本的python,我们终端输入python是执行的python,输入python才是执行的python3,不过也有的是直接python3,反正就用python3绝对没错。

这里以Centos为例,其实都一样。此方法阿里云和华为云都已经成功部署。

  1. 安装宝塔面板

    去宝塔官网找到对应版本的安装命令(这里是centos的,其他的自己去宝塔官网找一下即可):

    yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
    

    中间有个确认输入y即可

  2. 宝塔安装完成后进入宝塔面板

    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# bt
    ===============宝塔面板命令行==================
    (1) 重启面板服务           (8) 改面板端口
    (2) 停止面板服务           (9) 清除面板缓存
    (3) 启动面板服务           (10) 清除登录限制
    (4) 重载面板服务           (11) 取消入口限制
    (5) 修改面板密码           (12) 取消域名绑定限制
    (6) 修改面板用户名         (13) 取消IP访问限制
    (7) 强制修改MySQL密码      (14) 查看面板默认信息
    (22) 显示面板错误日志      (15) 清理系统垃圾
    (23) 关闭BasicAuth认证     (16) 修复面板(检查错误并更新面板文件到最新版)
    (24) 关闭谷歌认证          (17) 设置日志切割是否压缩
    (25) 设置是否保存文件历史副本  (18) 设置是否自动备份面板
    (0) 取消
    ===============================================
    请输入命令编号:14
    ===============================================
    正在执行(14)...
    ===============================================
    ==================================================================
    BT-Panel default info!
    ==================================================================
    外网面板地址: http://你的公网ip:8888
    内网面板地址: http://xxxx
    *以下仅为初始默认账户密码,若无法登录请执行bt命令重置账户/密码登录
    username: xxx
    password: xxx
    If you cannot access the panel,
    release the following panel port [8888] in the security group
    若无法访问面板,请检查防火墙/安全组是否有放行面板[8888]端口
    

    这样就得到了你的宝塔面板地址:http://你的公网ip:8888

    现在你是访问不了的,需要去你的服务器控制台打开8888端口放行才可以。(自行百度,很easy

    顺便把需要用到的端口都放行:

    80    Nginx监听端口
    8000  django
    8080  uwsgi
    
  3. 访问宝塔

    这时,可以输入宝塔面板外网地址了,输入用户名和密码登入。

    刚一进去会提示让你安装东西,我们选择左边那个只勾选mysql5.6和nginx1.18即可。点击安装。

    让你注册账号登陆,注册一个登入就行啦。

  4. mysql配置

    安装完成后,

    • 宝塔面板中修改mysql的root密码,改为123(你要改为你的djano的settings.py中的配置的mysql的密码)

    • 去终端中创建一个数据库,名字为你的settings.py中配置的数据库名字

      [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# mysql -uroot -p
      Enter password:
      Welcome to the MySQL monitor.  Commands end with ; or \g.
      Your MySQL connection id is 1139
      Server version: 5.6.50-log Source distributionCopyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
      affiliates. Other names may be trademarks of their respective
      owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> create database api;
      

      我的settings.py的mysqp配置:

      DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'api',   # 创建的数据库名'USER': 'root','PASSWORD': '123',   # 宝塔修改的密码'HOST': '127.0.0.1','PORT': 3306,'OPTIONS': {'charset': 'utf8mb4'},}
      }
      
  5. 安装django和uwsgi

    为了防止缺少依赖,先安装一下依赖包后再安装django和uwsgi。实测,不yum安装依赖会在安装uwsgi时报错。

    # 安装依赖
    yum install -y python3 python3-pip python3-devel
    # 安装环境
    pip3 insatll django==2.1.11
    pip3 insatll uwsgi
    

准备django程序

切记三点坑:放行端口、关闭防火墙、启动命令后不要输入本地回环地址(127.0.0.1)

  1. 先用django启动项目,看有fa无问题

    再说一遍:放行端口、关闭防火墙、启动命令后不要输入本地回环地址(127.0.0.1)

    # 关闭安全保护和防火墙
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# setenforce 0
    setenforce: SELinux is disabled
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# systemctl stop firewalld
    # 启动django
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# pwd
    /mydata/blogleev2
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# ls
    api  blogleev2  django.log  manage.py  __pycache__  static  uploads  uwsgi.ini
    # 如果你的项目还有其他的包要装,就先装上。# 数据库迁移
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# python3 manage.py makemigrations
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# python3 manage.py migrate
    # 启动 启动命令后不要输入本地回环地址(127.0.0.1)
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# python3 manage.py runserver 0.0.0.0:8000
    

    此时,浏览器访问:http://公网IP:8000

    即可看到你的项目,没有任何问题。

    现在就是,你一关闭shell窗口,项目立马停止。就不能访问了,我不能一直开着shell把。那怎么再静默状态下运行djano呢?uwsgi

  2. 用uwsgi启动django

    在你的项目文件根目录下创建uwsgi.ini和uwsgi.pid两个文件,如果不会命令格式可在宝塔面板中操作

    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# pwd
    /mydata/blogleev2
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# vim uwsgi.ini
    # 输入下面的配置文件,输入完后按esc推出输入模式,再按:后输入wq回车
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# vim uwsgi.pid
    # 直接按esc推出输入模式,再按:后输入wq回车,这是一个空白文件
    

    配置文件

    [uwsgi]
    http = :8080  # 这里先使用http测试uwsgi是否正常工作,后边正式部署会改成socket
    chdir = /mydata/blogleev2     # 项目路径要把持一致,看你自己创建的路径
    # uwsgi的文件
    wsgi-file = blogleev2/wsgi.py  # django的wsgi文件位置,从上边的chdir下开始找
    # 虚拟环境  我们没有用到
    # virtualenv = /root/env
    # 进程个数
    processes = 4
    # 线程个数
    threads = 2
    # 关闭的情况下后台运行,制定输出的日志位置
    daemonize = /mydata/blogleev2/django.log
    # 清除临时文件
    vacuum = true
    # python文件发生改变自动重启
    py-autoreload = 1
    

    启动django

    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# pwd
    /mydata/blogleev2
    # 用uwsgi启动django
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# uwsgi --ini uwsgi.ini
    

    此时,浏览器访问:http://公网IP:8080

    会看到项目启动,但是没有静态文件。这是因为uwsgi找不到你的静态文件路径。

    添加静态文件设置:

    # 先在配置文件中加入:
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# vim blogleev2/settings.py
    # 末尾追加,迁移后的文件名static
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')# 迁移静态文件
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# python3 manage.py collectstatic
    

    静态文件迁移后,重启uwsgi

    # 停止
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# uwsgi --stop uwsgi.pid
    # 启动
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# uwsgi --stop uwsgi.ini
    

    浏览器访问:http://公网IP:8080

    ok,全部可以啦,没毛病。

    我们现在时可以访问了,但是他会暴露端口,而且输入也不方便。并且uwsgi主要是用来启动django的,对静态文件处理能力不足。怎么办?Nginx

  3. 结合nginx转发静态文件

    之前通过宝塔面板安装了Nginx,它安装时多管闲事,把nginx默认的给重命名为:nginx.conf.default,然后自己创建了一个nginx.conf,这个太不好用(经验之谈)我们直接把他干掉,然后把nginx.conf.default重命名为nginx.conf这样原始的配置文件就生效了

    # 文件路径
    /www/server/nginx/conf/nginx.conf
    /www/server/nginx/conf/nginx.conf.default
    

    打开配置文件,增加一个server,与原先的server并行。

    # 原先的server可以干掉,你没有域名的话,把server_name改为localhost
    # 增加的server
    server{listen 80;server_name www.liboer.top liboer.top;  # 你的域名,国内需要备案后才可访问location / {# 跳转到8080include uwsgi_params;uwsgi_pass 127.0.0.1:8080;}# 静态文件location /static {root /mydata/blogleev2;}}
    

    把uwsgi的http改为socket

    socket = :8080  # 这里先使用http测试uwsgi是否正常工作,后边正式部署会改成socket
    

    此时重启nginx和uwsgi

    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# nginx -s stop
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# uwsgi --stop uwsgi.pid
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# nginx
    [root@iZuf6g4e6vhdv58sz2z1klZ blogleev2]# uwsgi --ini uwsgi.ini
    

    有域名浏览器访问:域名

    or

    无域名配置,浏览器访问:公网ip

    瞬间心情愉悦,头发都少掉了几根!

完美解决!

独学而无友,则孤陋寡闻。

​ —大聪明Smart

瞬间心情愉悦,头发都少掉了几根!---Django+uwsgi+Nginx项目部署超详细步骤相关推荐

  1. 如何发布自己的npm包(超详细步骤,博主都在用)

    发布自己的npm超详细步骤 前沿: 从去年毕业,vue掌握的还算熟练应用了,做过的vue项目也有十几个了吧,每次做项目的时候,有些组件老是使用,拷贝来拷贝去的使用.我就想把这些组件封装到一起,以后做项 ...

  2. 【排序】什么都能排的C语言qsort排序详解【超详细的宝藏级别教程】深度理解qsort排序

    [排序]什么都能排的C语言qsort排序详解[超详细的宝藏级别教程]深度理解qsort排序 作者: @小小Programmer 这是我的主页:@小小Programmer 在食用这篇博客之前,博主在这里 ...

  3. 头发都快掉没了,才熬出来的优秀程序员的生存指北!

    为什么80%的码农都做不了架构师?>>>    欢迎来到程序员的世界.作为一名开发程序员,尤其是前端开发!从新手到现在,摸摸自己的头发,已然稀疏.. 我开始学习编程,也仅仅是因为爱好 ...

  4. 1024程序员吐槽大会,看完头发都笑掉了

    这届程序员,已经从格子衫.油头.挣钱多的刻板印象中蜕变出了全新自我. 他们不仅业务能力强,手上功夫了得,用代码改变世界:他们嘴上功夫更是了得,能自黑.更能怼产品经理. 今天,就让我们来看看阿里程序员们 ...

  5. linux shell输出数字小数点前少了0_南京课工场IT培训:SHELL 超详细基础知识,适合新手小白(一)

    一.什么是shell? 在linux内核与用户直接的解释器程序: 通常指/bin/bash; 相当于操作系统的"外壳". 二.怎么使用shell? shell的使用方式? 1. 命 ...

  6. 虚拟机vmnet8每次都要先禁用再启用_【零成本 amp; 超详细】使用Win10自带的Hyper-V管理工具搭建虚拟机...

    这个页面解决什么问题? 这篇文章主要以图片的方式引导大家如何安装虚拟机! 虚拟机,顾名思义就是虚拟出来的电脑,这个虚拟出来的电脑和真实的电脑几乎完全一样,所不同的是他的硬盘是在一个文件中虚拟出来的,所 ...

  7. 关于什么都不会的阿里云服务器搭建及项目部署过程

    最近学习了前后端的相关技术,就想租一个服务器试一下,玩一玩,简单了解了一下阿里云的服务器,简单介绍一下: 一:什么是云服务器ECS 是阿里云产品体系中,最基础的计算服务,通常用作应用程序的运行环境,最 ...

  8. 你的头发一根都不许掉!这款变态洗发皂,7天发量暴增!男同事亲测,20天浓密乌黑!!...

    男神女神的模样有千万种 但有一点一定是标配 那就是拥有一头浓密的乌黑秀发 它是女生颜值翻倍的利器 也是男生形象加分的杀手锏 可随着生活工作精神压力增大 很多人年纪轻轻就开始脱发.生白发 那形象可不比咱 ...

  9. 你的头发一根都不许掉!澳洲这款获奖无数的洗发水,7天发量暴增!男同事亲测,20天浓密乌黑!...

    ©程序员严选 丨为您甄选全球好物 在女人的世界中,愿不愿意洗头去见你,代表着你在她心目中的地位高低: 如果你见到她时,秀发蓬松有型,还微微的散发出淡淡的香气,那么就恭喜你,你值得她洗头! 头发是一个女 ...

最新文章

  1. java group类_浅析Java中线程组(ThreadGroup类)
  2. Python:3种方式实现随机生成8位字符
  3. Docker是什么?使用Docker的好处有哪些?
  4. linux之scp命令
  5. 201521123013 《Java程序设计》第8周学习总结
  6. Jquery 小技巧
  7. android获取服务器时间格式,Android 获取服务器与客户端时差的实例代码
  8. Java学习系列(十九)Java面向对象之数据库编程
  9. Remote System Explorer Operation卡死Eclipse解决方案
  10. myeclipse 的 restart server和Redeploy/Reload application的区别
  11. LoadRunner如何建立关联
  12. python性能分析工具模块_关于Python Profilers性能分析器
  13. 继电保护原理3-输电线纵差
  14. Eat Doug吃豆豆小游戏纯js代码
  15. 用银行卡号查相应的归属银行,卡种类
  16. C语言程序员个人简历范文,程序员求职放大招!牛人用C语言写简历
  17. 九龙证券|半导体又涨嗨了!券商再喊牛市起点!
  18. 在IE中打开或下载文件
  19. 数字信号处理第一课(转)
  20. 与其他带货直播平台相比,视频号更适合哪些人?

热门文章

  1. Hive学习(15)-Hive分析窗口函数(三)
  2. 人工智能(AI)入门---傅里叶语音识别项目(全家福)
  3. VScode+PHPstudy配置PHP开发环境详解
  4. 第39讲:MySQL常规的索引分类
  5. python爬取网页内容_你以为Python爬虫只能爬取网页数据吗?APP也是可以的呢!
  6. 平板触控笔要原装的吗?苹果平替笔性价比高的推荐
  7. 金融行业业务测试,主要测试范围有哪些?
  8. mosh operators
  9. LIBSVM与LIBLINEAR
  10. 计算机毕业设计Java春之梦理发店管理源码+系统+数据库+lw文档