nginx+uwsgi+Django+Mysql+vue+centeros从0开始到部署项目,踩坑总结

跋:自己部门写了个小产品(工具),用来自动发送测试报告的,原理就是从项目管理系统通过爬虫和申请接口权限,采集需要的数据存入mysql,通过管理系统的测试通过按钮触发收集信息指令,并自动更新测试报告的链接,并点击跳转到报告页面进行编辑,最后点击发送邮件发送给测试报告内的相关人,麻雀虽小五脏俱全,基本上复习到了我所有的知识.
技术栈:python3.7 , django2.12 .mysql,爬虫,部署,nginx,uwsgi,前端,vue等.
数据库结构很简单,是同事用navicat直接建的,前端页面时另一个同事用bootstrap框架写的,但是js她用的jquery,后来我部署时改成vue了.
下面总结下几方面遇到的坑

: 环境搭建:(先按我自己遇到的问题复述,再有正常流程)
1,leader给了个ip,说去部署吧,我就xshell上去高兴的pip了, 额报错,没有pip,并且没有apt,原来是台裸机的centeros,只有yum安装工具,在ubuntu上用惯了,这个还真的用的很少,就看了下yum的一些命令,之后就是安装python3,安装相关依赖,等,遇到最大的一个坑是不能关联SSL,
这里附上几个我参考的教程:
https://www.jianshu.com/p/447750ec1186 安装python3
https://www.jianshu.com/p/ace9be0b08ed 解决ssl报错
https://www.centos.bz/
https://www.cnblogs.com/mqxs/p/9103031.html
2,安装完python和pip,就可以愉快的pip安装依赖包了,我没建立虚拟环境(省了一部分坑),先pip个requests压压惊.
3,其实这里面还有一些坑,忘记了,大致就是,pip的时候,有一些包,安装不上,比如我用的额django里的admin后台,所以需要安装coreapi,而这个包需要的依赖我pip一直装不上,会报错缺失某个包,只能去pypy的网站下载,然后python3 setup安装,
4,还有就是安装nginx,uwsgi等,这里附上几个参考:
https://www.jianshu.com/p/33d19ba61208
5,这里有个坑是安装nginx的版本升级等,天知道我经历了什么,反正后来确实是重置了一下服务器从头开始的.
6,还有几个包,需要一起装就是脚本执行时候用&& 吃在你们会遇到的 ,记住有这回事

总结:部署环境真的很头大,正常流程应该是;升级升级python,安装依赖包(py),安装nginx,安装uwsgi,安装supervisor等,这里每一步都布满了大大小小很多坑,不亲自踩一下是不会体会的.
其实,我有想过docker,但是确实用的很少,docker同样需要安装很多依赖,我这部分自己研究去了,没用上,特别是等着用这个功能,就不能有那么多考虑什么方案合理了,之后会总结下docker的部署,
感想:申请的ubuntu服务器到现在都没有审批下来....

  • 下面就是项目的部署了.
    教程链接跟上面的差不多,这里总结下前后端的配置,
    原理:访问前端页面,前端页面里的js脚本去发送get请求去django后台拿数据渲染到页面中.
    浏览器>>>>nginx>>>>uwsgi>>>>django>>>.mysql
    后台服务是用uwsgi运行的,就是相当于在本地运行,这里涉及到的一些接口就是和本地类似都是127.0.0.1,因为我们不和这部分交互,这里我来回配置0.0.0.1 和实际id都试过.踩了不少坑.
    1,uwsgi的配置看下这里:
django的程序通常使用uwsgi服务器来运行
安装uwsgi
pip install uwsgi
在项目目录下创建uwsgi配置文件 uwsgi.ini
# uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=/root/proj/atReport/
# 指定项目的application
module=atReport.wsgi:application
#还可以指定wsgi.py文件
# wsgi-file = atReport/wsgi.py
# 指定sock的文件路径
#socket=/root/proj/script/uwsgi.sock
#或者指定地址直接(指定文件路径就是相当于单独写了个配置导入,相当于import导入,可以修改和删除,可维护性高点)
socket=127.0.0.1:8000
#直接做服务器用http模式
#http=127.0.0.1:8000
# 进程个数
workers=5
pidfile=/root/proj/script/uwsgi.pid
# 指定静态文件,这个项目中没有,如果你的项目中有静态文件的话按这个目录结构配置
#static-map=/static=/root/proj/
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/root/proj/script/uwsgi.log



uwsgi --ini uwsgi.ini
注意如果想要停止服务器,除了可以使用kill命令之外,还可以通过

uwsgi --stop uwsgi.pid

2,nginx配置如下:

 #配置负载均衡
upstream atreport {
         server 127.0.0.1:8001;  # 此处为uwsgi运行的ip地址和端口号
         # 如果有多台服务器,可以在此处继续添加服务器地址
     }
server {
  listen 80 ;  #启动的nginx进程监听请求的端口
  server_name      100.16.171.148;  #域名访问地址,这里比较坑,填什么就映射什么
  charset utf-8;
  error_log    /root/proj/logs/error.log;   #nginx错误日志,需要提前建立文件
  index      inbox.html  index.html;
  error_page 404 /404.html; # 错误页面
  error_page 500 502 503 504 /50x.html; # 错误页面

#动态请求
location / {
	include /etc/nginx/uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
#        }
#静态资源请求
location /static/{
    alias   /root/proj/static/;
    index  index.html test2.html inbox.html;
}
}

3,项目配置,就是setting里的一些配置坑,在本例能跑通但是服务器上有问题,看了下可能是django版本问题,有前后端跨域,需要新加一些中间件,我的配置如下,并且要把MIDDLEWARE改成MIDDLEWARE_CLASSES 注意是class的负数形式,django2.0版本我是单数形式


ALLOWED_HOSTS = [
    "http://100.16.171.148/", #这个host是给用户用的,下面的是给内部跨域js用的
    "127.0.0.1" ,
    ]

MIDDLEWARE_CLASSESS = [
	#注意下面两行的顺序
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',

    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

# #跨域增加忽略
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True

CORS_ORIGIN_WHITELIST = ['http://www.atreport.site']

注意斜体是加的,并且要注意顺序.


  • 整体其实两大块,环境,和项目部署,坑全是细节,
    比如git clone时候没git啦,
    静态文件收集的时候没有指定文件夹啦,
    还有在指定log信息看不到log啦,
    或者跨域没有请求之类,
环境考验耐心,部署项目配置考验理解透彻否,

-----------------------------------7/9编辑---------------------------------------


  • 前端文件里的js配置:
    按照上面的设置,发现服务器上还是发送不成功axios消息,浏览器看直接是fail失败,就是js没用的意思,原来我js绑定的host是127.0.0.1:8000 ,这是不对的,127是无论谁打开电脑的那台电脑的本机,不是服务器的本机,所以要设置成http://100.16.171.148:8000 这样,类似代码就是
    var vm = new Vue({
        el:"#app",
       data:{
            host,
            info:null,
            pms_id:null,
       },
        mounted(){
            axios
            .get(this.host+'details/PmsBasicView/?pms_id=ADDEV-0002')
            // .then(response => (this.info = response.data[0]))
                .then(response => {                 
                    this.pms_id=response.data[0].pms_id;
                    this.info = response.data[0] ;                           
                })
            .catch(error => console.log(error))
        }

    });

thishost是在index.html里引入的单独文件地址,并且在data里声明,这样容易修改

  • 五:
    项目内坑;
    1前后端分离真的是个大坑,没有借口文档,前后端的接口都是天马行空的,后端接口是按库给的,前端确需要一个大接口查出来所有数据渲染进去,post也是想一个form提交就可以了,前端写完后,给我,自己不会改,前端也不改了,但是为了实现,还是要想办法,get请求还好,多触发几个js,post琼最后想了就用自带的admin实现吧,(偷懒).
    2,admin坑:版本需要对应几个middleware,django1.0和2.0对应的middleware有单复数的区别,跨域的也需要在这里解决,来回改了很多次,最后糊里糊涂解决了,从头整一遍应该会好点.

最终展示效果:
在这里插入图片描述

在这里插入图片描述

-----------------------------------------------------------------------------7.18编辑-----------------------------------------------------------------------------------------------

挖了个坑:之后要对项目进行扩展,当时建项目的时候,直接就在主目录随便startproject和app了,这要扩展的话会很麻烦,结构不清晰,所以用了一会时间调整了下目录,目前整理如下:
把应用都放到一个apps的文件夹,就是收纳归类一下
整理目录笔记:
1,可以先按需求直接建立new python package,然后再把各种东西拖进去,会有提示是否关联数据,要点是,之后有很多文件夹的关联关系就自动整理了,比如
这个里面的../../  就是拖进去后自动改变的,
2,整理归类之后,就是麻烦所在了:整理相关依赖,主要有

  1. manage.py 下面的使用哪个设置文件, 在这里插入图片描述

  2. 设置文件里的注册应用: 我这样设置的,也可以将路径加进basedir

    在这里插入图片描述

  3. urls 里面的相关包

  4. wsgi.py 的使用设置文件(!!!) 部署报错一般是这里问题\


  • 整理目录后部署笔记:算是复习
    整理上传后 如果原来的服务都没错 其实就没问题不用改什么 接口一样走,只需要重启下uwsgi就行了,可是我还是搞了两个小时…
    主要问题如下:
    已经成功的东西不要怀疑自己!!! 我以为我整理后的路由会有区别,跑不起来,我就咣咣咣的先把uwsgi和nginx改了一遍,最终发现是服务器里面的wsgi文件没有修改使用的配置文件路径,最后又改回来了…
    有可能会碰到白名单问题 ,就是在原始的allowhost里面增加以下就好了,跟其他无关.
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值