瞬间心情愉悦,头发都少掉了几根!---django+uwsgi+nginx项目部署超详细步骤(代码片段)

大聪明Smart 大聪明Smart     2022-12-05     159

关键词:

瞬间心情愉悦,头发都少掉了几根!—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 distribution
      
      Copyright (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 / 
              # 跳转到8080
              include 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

一样令人心情愉悦

...了,说起来还是自己变懒了。跑步和写文章一样令人心情愉悦。跑步愉悦,我们都知道是因为身体产生一种叫多巴胺的物质,其实还有另外一种物质叫内啡肽,俗称快乐吗啡。一个人可能走得更快,但是过程... 查看详情

为了让自己心情愉悦,我用python把美妞得图片制成了gif设置桌面(代码片段)

...,每天美女必然少不了~每天看美女,只为了愉悦心情,心情好了,才长寿。于是怀揣着愉悦心情的想法,我开始制作GIF动图生成器这个小工具制作的目的是为了将多张图片组合后生成一张动态的GIF图片。设置... 查看详情

荐一篇令人心情愉悦的面试总结

前言15年毕业到现在也近三年了,最近面试了阿里集团(菜鸟网络,蚂蚁金服),网易,滴滴,点我达,最终收到点我达,网易offer,蚂蚁金服二面挂掉,菜鸟网络一个月了还在流程中...最终有幸去了网易。但是要特别感谢点我... 查看详情

荐令人心情愉悦的一次面试总结

前言15年毕业到现在也近三年了,最近面试了阿里集团(菜鸟网络,蚂蚁金服),网易,滴滴,点我达,最终收到点我达,网易offer,蚂蚁金服二面挂掉,菜鸟网络一个月了还在流程中...最终有幸去了网易。但是要特别感谢点我... 查看详情

跑步和写文章一样令人心情愉悦

...了,说起来还是自己变懒了。跑步和写文章一样令人心情愉悦。跑步愉悦,我们都知道是因为身体产生一种叫多巴胺的物质,其实还有另外一种物质叫内啡肽,俗称快乐吗啡。一个人可能走得更快,但是过程... 查看详情

我用python做了个动图生成器,把一千个mm生成了gif设置桌面,只为每天愉悦心情(代码片段)

...,美女必然少不了,每天看美女,只为了愉悦心情,心情好了,才长寿。于是怀揣着愉悦心情的想法,我开始制作GIF动图生成器,想要用Python来做成美女壁纸,行动起来。这个小工 查看详情

掉了两根头发,可算是把volatile整明白了

本来想着快过年了偷个懒休息下,没想到被兄弟们连续催更,没办法,博主暖男嘛,掐着人中也要更,兄弟们卷起来volatile关键字可以说是Java虚拟机提供的最轻量级的同步机制,但对于为什么它只能保证可... 查看详情

3dsmax学习日记

...眼睛和嘴,感觉自己做的模型就跟鬼似的。。。??做了下头发,看了下视频最后,并没教如何贴图,然后再也不想做了。。。??3d建模果然好难玩。。。。。。 查看详情

一个开源项目的心路历程!

...式发布,经历了大约两个月时间。这苦逼的两个月,我的头发不知道掉了多少,心酸啊。先来一张效果图,犒劳一下自己(窃喜):作为UI的我,有什么好怕的,我又不是妹子,头发掉了就掉了,相亲的时候别人又不看你头发的多... 查看详情

一个开源项目的心路历程!

...式发布,经历了大约两个月时间。这苦逼的两个月,我的头发不知道掉了多少,心酸啊。先来一张效果图,犒劳一下自己(窃喜):作为UI的我,有什么好怕的,我又不是妹子,头发掉了就掉了,相亲的时候别人又不看你头发的多... 查看详情

p1505[国家集训队]旅游(代码片段)

...有N?1座桥。Ray发现,有些桥上可以看到美丽的景色,让人心情愉悦,但有些桥狭窄泥泞,令人烦躁。于是,他给每座桥定义一个愉悦度w,也就是说,Ray经过这座桥会增加w的愉悦度,这或许是正的也可能是负的。有时,Ray看待同... 查看详情

做一个有价值的人

...起的系统功能失败的问题。解决完这个问题之后,同事的心情很愉悦,其实我自己的心情也很愉悦,看来人都有帮助别人和被别人帮助的心理需求,只不过有时候要注意一些方式方法而已。   查看详情

软件测试上岸后,要清空的除了购物车,还有不必要的职场焦虑!

...、立业、立家的年龄就要面临被优化的风险不免让自己的头发又掉了几根只能趁着双十一往购物车多加了两瓶霸王而部分想要转行的同学也受到影响对进入互联网犹豫不决其实要汇智妹来说比起大多数钱少事多、风吹日晒的工作... 查看详情

bzoj2157:旅游

...有N?1座桥。Ray发现,有些桥上可以看到美丽的景色,让人心情愉悦,但有些桥狭窄泥泞,令人烦躁。于是,他给每座桥定义一个愉悦度w,也就是说,Ray经过这座桥会增加w的愉悦度,这或 查看详情

[bzoj2157]旅游

...有N?1座桥。Ray发现,有些桥上可以看到美丽的景色,让人心情愉悦,但有些桥狭窄泥泞,令人烦躁。于是,他给每座桥定义一个愉悦度w,也就是说,Ray经过这座桥会增加w的愉悦 查看详情

bzoj2157旅行模拟

...有N?1座桥。Ray发现,有些桥上可以看到美丽的景色,让人心情愉悦,但有些桥狭窄泥泞,令人烦躁。于是,他给每座桥定义一个愉悦度w,也就是说,Ray经过这座桥会增加w的愉悦度,这或许是正的也可 查看详情

整理心情再投入下一个阶段

最近写了一个小程序的后台管理和一个小程序后台管理已经完成小程序进入收尾阶段工作量不是特别大但有很多新东西就是以前开发没碰到的时间催得很紧压力也来了最近熬夜掉头发很厉害(?_?) 超级难过 不过有压力的同... 查看详情

整理心情再投入下一个阶段

最近写了一个小程序的后台管理和一个小程序后台管理已经完成小程序进入收尾阶段工作量不是特别大但有很多新东西就是以前开发没碰到的时间催得很紧压力也来了最近熬夜掉头发很厉害(?_?) 超级难过 不过有压力的同... 查看详情