2019-5-9 20:40:29

终于弄完了,贴上步骤先(在Linux总结里面也有)

好有成就感的样子,已经成功部署自己的项目真的感觉很爽!中午刚整理完Linux笔记

Linux 笔记

 

经历了小半个月终于部署完了自己项目!感觉到自己真的很开心!

越努力,越幸运!永远不要高估自己!

 

 

关于Nginx 重启报错问题!困扰了好久终于解决了! 

1.nginx 重新加载命令./nginx -s reload,出现

nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"问题。

解决办法:

                 第一步:执行命令  killall -9 nginx   杀掉nginx 进程

                 第二步:执行命令  /opt/nginx1-12/sbin/nginx  -c  /opt/nginx1-12/conf/nginx.conf  

                              重新加载配置文件

                 第三步:执行命令   /opt/nginx1-12/sbin/nginx  -s reload 重新启动nginx

注意: 第二步是自己的Nginx的所在目录

 

服务器部署自己的bbs项目!(Nginx+uWsgi+Django1.11.1+mariadb+virtualenvwrapper+supversior)
项目源码在自己的GitHub中:  www.github.com/TrueNewBee/my_blogs
1.准备python环境,准备虚拟环境,激活了虚拟环境
         mkvirtualenv nbcrm
            检测是否虚拟环境正常
            which pip3 
            which python3 
        worken  nbcrm
        (3,4由于没用mysql故忽略,根据实际情况)
    2.1.安装django模块(此时的操作都是在nbcrm这个虚拟环境下了)
        pip3 install django==1.11.11

    1.2.安装pymysql连接mysql数据库
        pip3 install pymysql

    1.3.安装django的一个django-multiselectfield
        pip3 install django-multiselectfield

    1.4.解决项目的数据库连接问题,修改settings.py 
        1.启动linux的数据库,创建对应的数据库,密码设置等等
        create database nb_crm;  
        2.更改settings.py 
        DATABASES = {
                'default': {
                    'ENGINE': 'django.db.backends.mysql',
                    'NAME': 'nb_crm', #数据库名
                    'HOST': '127.0.0.1',  #这里服务器的ip地址
                    'PORT': 3306,    #端口
                    'USER': 'root',    #用户名 
                    'PASSWORD': 'redhat123',   #用户密码
                }
            }
        3.更改允许主机
        ALLOWED_HOSTS = ['*']
        4.线上关闭debug
        debug=True 
    *******************************************
    使用uwsgi启动django(没有静态文件,需通过Nginx配合使用才有)
        1.安装uwsgi
        pip3 install -i https://pypi.douban.com/simple uwsgi

        2.通过uwsgi命令启动python应用
        uwsgi --http   0.0.0.0:8888  --wsgi-file test1.py  
            --http  指明是http协议
            --socket 启动一个socket 链接
            --wsgi-file  指明一个python应用文件
            
        3.通过uwsgi启动django项目(问题是,uwsgi不处理static静态文件的配置)
        uwsgi --http :8888  --module Nb_crm.wsgi    

        4.uwsgi可以热加载项目
        uwsgi --http :9999  --module mycrm.wsgi --py-autoreload=1 
        --py-autoreload是告诉uwsgi自动重启加载django项目

     5.通过uwsgi的配置文件启动项目(把这个文件放在项目的根目录中,和manage.py同级)
            1.手动创建uwsgi.ini文件
            touch uwsgi.ini
            2.写入如下配置
            [uwsgi]
                #项目的绝对路径,定位到项目的第一层
                chdir           = /opt/my_blogs
                #指明项目的wsgi文件路径(/my_blogs/bbs_demo/uwsgi.py)
                module          = bbs_demo.wsgi
                #指明你的虚拟解释器的第一层路径
                home            = /root/Envs/bbs#指明通过uwsgi,启动多少个进程
                processes       = 5

                #非常重要
                #非常重要
                #非常重要
                #如果你已经配置了nginx(启动了nginx服务,配置了uwsgi_pass),请用这个socket连接
                socket          = 0.0.0.0:8000

                #如果你没用nginx,想通过uwsgi直接启动web服务,指明http协议
                # http = 0.0.0.0:9999

                #在退出uwsgi环境后,清空环境变量
                vacuum          = true


        module :可以这么来理解,对于- myweb_uwsgi.ini文件来说,与它的平级的有一个NB_crm目录,这个目录下有一个wsgi.py文件
        
    *******************************************
    6.通过配置文件启动NB_crm(注意uwsgi不会处理静态文件,如果有,也是浏览器的缓存!!!!)
    uwsgi --ini  uwsgi.ini 


    7.配置django的settings.py,收集所有NB_crm项目所需的静态文件
        1.#通过命令,收集整个项目所有的静态文件,放入到/opt/static/
            STATIC_ROOT='/opt/static/'
        2.执行命令
            python3 manage.py collectstatic
        3.此时my_blogs的所有静态文件,都跑到/opt/static/底下了
            (bbs) [root@node1 /opt/my_blogs11:09:33]#ls /opt/static/
            admin  css  imgs  js  plugins

        
    8.配置nginx
        1.配置一个网站入口,当用户访问192.168.12.96:80 这个web应用时,自动将请求转发给uwsgi,uwsgi处理后,返回给nginx,返回给用户
        当请求是192.168.12.96:80的时候,其实访问的是192.168.12.96:9999  这是动态请求,因为我是找到的uwsgi
        #匹配度最低的写法,因此就是任何的请求都访问到这里
        
        2.通过nginx去处理静态文件 

        3.nginx.conf配置如下
        
        #定义负载均衡池,里面放入uwsgi的地址
        upstream bbs {
            server 0.0.0.0:8000;
        }

        server {
           listen 80;
           server_name  112.74.32.62;
           #讲nginx入口的请求,直接反向代理给uwsgi
           location / {
             uwsgi_pass  bbs;
             include /opt/nginx1-12/conf/uwsgi_params;
        }
        #通过nginx处理nbcrm的静态文件
        location /static {
            alias /opt/static/;
            }
        }

    9.更改uwsgi.ini ,指明socket连接,结合uwsgi 和nginx
        #如果你已经配置了nginx,请用这个socket连接
        socket          = 0.0.0.0:8000


    10.启动uwsgi.ini (-d 后台运行)
    uwsgi -d  --ini uwsgi.ini 

    启动nginx
    /opt/nginx1-12/sbin/nginx -t  检测nginx.conf 配置文件的语法正确性
    /opt/nginx1-12/sbin/nginx -s reload  #平滑重启(修改了nginx配置文件,不重启服务就加载配置且生效)
            
    并且访问nginx的域名入口,查看是否能访问到uwsgi项目,并且静态文件是否正常
    112.74.32.62  查看浏览器状态
    
    # 到这一步已经把网站部署完成了!感觉很吊的样子(已经很成功的访问)
*******************************************
    
    11.配置supversior,管理uwsgi进程

        注意,请退出虚拟环境,在宿主机环境下,安装supvervisor

        1.安装easy_install ,python2的软件包管理工具 ,如果有了可以忽略
            yum install python-setuptools

            #安装软件
            easy_install supervisor


        2.使用supervisor命令,常用命令如下
            生成配置文件
            echo_supervisord_conf >  /etc/supervisord.conf

            
        3.修改配置文件,添加任务,按照自己的机器环境修改此命令
        [program:s14nbcrm]
        #启动uwsgi的命令就是这个
        command=/root/Envs/nbcrm/bin/uwsgi  --ini /opt/NB_crm/uwsgi.ini
        #自动启动uwsgi,挂了之后自动加载
        autorestart=true

            
        4.启动supvervisord服务,启动uwsgi    
            #服务端命令,用于启动这个服务
            supervisord -c  /etc/supervisord.conf


        5.通过命令管理uwsgi
            supervisorctl 直接回车,进入交互式管理状态

            [root@node1 ~ 11:53:32]#supervisorctl 
            s14nbcrm                         RUNNING   pid 2008, uptime 0:01:56

        也可以通过命令交互式的管理uwsgi
            #服务端启动后,通过命令管理软件

            supervisorctl  start s14nbcrm
            supervisorctl  stop  s14nbcrm 
            supervisorctl status s14nbcrm