项目部署在linux中

项目部署,代码上线 https://www.cnblogs.com/wupeiqi/articles/8591782.html   

内容详细及步骤:

    - 上线
        1. 本地代码配置相关操作
        2. 打包上传
            测试版:
                windows: 
                    yum install lrzsz
                    压缩zip包,拖进来。(我们的文件拖来之后,记得解压,用unzip XXX文件名)
                mac:
                    scp /home/xx/s8day145.zip  root@192.11.11.11:/data/
        
        3. 安装Python3
            a. 下载Python:https://www.python.org/ftp/python/3.5.4/
            b. 解压 tar -xvf Python-3.5.4.tgz
            c. cd Python-3.5.4
            d. 先装依赖:
                - yum install openssl-devel
                - yum install sqlite-devel
            e. 编译安装(这就是编译安装python)
                - ./configure
                - make 
                - make install 
                
                /usr/local/bin python3 
            f. 安装django (如果用的是flask就用flask)
                    pip3 install django==1.11.7(注意切换到python3.5.4文件加下)
安装步骤相关

 ps:上面两个步骤yum install的话,同学说,先不安装这个,等部署报错说没有安装这个sqlite的时候再进行安装,到时候具体问题具体分析吧

    4. 第一版本上线:简单粗暴  (这个版本我们是用pycharm来操作的)
            cd /data
            cd s80523(这是项目名)
            执行下面这句------>    
            python3 manage.py runserver 0.0.0.0:8000 #执行完毕之后,显示下面的这就表示启动成功了,若出现sqlite的错误,则回到python3.5.X的目录下,重新编译安装python
            '''
            System check identified no issues (0 silenced).

            You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
            Run 'python manage.py migrate' to apply them.

            May 23, 2018 - 13:06:45
            Django version 1.11.7, using settings 's80523.settings'
            Starting development server at http://0.0.0.0:8000/
            Quit the server with CONTROL-C.

            '''
            http://10.0.0.130:8000/index/#输入这个就能访问了,这个10.0.0.130是我们虚拟机的ip,通过连接的xsell直接就能看到
第一版本

 

第二版本上线:uwsgi  (这个其实就是属于django程序)
            uwsgi
                缺点:处理静态文件会差点,因为他是处理动态文件比较NB;
                      请求越多,压力越大(因此需要下面的负载均衡)
            pip3 install uwsgi
            
            - 使用uwsgi启动一个脚本:
                cd /data
                vim app.py
                然后把下面直接放进去,保存退出即可
                    def application(env, start_response):
                        start_response('200 OK', [('Content-Type','text/html')])
                        return [b"Hello World"]
                #直接输入这个就是运行起来了,访问的时候在浏览器上把端口改成9001即可
                uwsgi --http :9001 --wsgi-file app.py 
                
                
            - 如果是flask程序:
                app.py 
                    app = Flask(....)
                    
                    @app.
                    ...
                    
                uwsgi --http :9002 --wsgi-file app.py  --callable app#需要加上这个
            
            - 如果是django程序
                方式一:                                                    #wsgi这个是在我们的项目里面也有这个,可以ll 项目名,进行查看
                    uwsgi --http :9003 --chdir /data/xxxx项目名(或文件名)/ --wsgi-file 项目名(或文件名)/wsgi.py
                    #执行了上面的之后,表示启动成功,然后浏览器上端口修改成9003即可访问
                方式二:#上面的参数太长,因此下面是把它设置成一个文件
                #这个是自己设置的,最好以ini结尾,下面的是文件里面的内容;这个是在自己的项目下又创建的文件
                    xxx.ini    #s8day145_uwsgi.ini
                        [uwsgi]
                        http = 0.0.0.0:9005
                        chdir = /data/项目名/    #eg:s80523
                        wsgi-file = 项目名/wsgi.py
                        processes = 4    #这是开4个进程,可开1个
                        static-map = /static=/data/项目名/allstatic    #这表示以后会去=/data/项目名/allstatic找静态文件
                        
                    #执行启动,这就是启动起来这个进程了,且会帮我们携带参数
                    uwsgi --ini xxx.ini #这是上面创建的文件名,然后即可访问,访问的时候,注意上面写的端口,要访问上面写的端口才行
                
                收集静态文件:#收集了静态文件之后,才能进行显示出来步骤;先设置,再收集
                    - settings.py #设置这个文件,直接执行下面vim这句
                    vim xxx/settings    #xxx是项目名,执行这句
                        DEBUG = False        #修改debug
                        STATIC_ROOT = "allstatic"        #到最后一行写这个,这是allstatic所有的静态文件
                    - python3 manage.py collectstatic     #然后执行这个,就是都设置好了,可进入到allstatic里面查看我们所收集的图片
                
                uwsgi --ini xxx.ini  #收集完毕之后,在执行,再次访问浏览器,就能看到图片了
第二版本

 

第三版本上线:uwsgi + nginx 
            
            nginx作用:
                - 处理静态文件
                - 反向代理
                - 负载均衡(LVS、haproxy)#解决压力问题
            uwsig作用:
                - 处理动态请求
                
            ps:这是我电脑启动nginx的命令,[root@oldboys8-0425 nginx-1.12.2]# /application/nginx-1.12.2/sbin/nginx

            nginx配置:/etc/nginx/nginx.conf  #这是老师的代码,需要修改很多配置,因此不用这个
            
            
                #配置nginx文件,在nginx目录下,cd conf,再vim nginx.conf (这是以我的电脑为例)
            
                user root;
                worker_processes 4;

                error_log /var/log/nginx/error.log;
                pid /var/run/nginx.pid;

                events {
                    worker_connections  1024;
                }


                http {
                    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                                      '$status $body_bytes_sent "$http_referer" '
                                      '"$http_user_agent" "$http_x_forwarded_for"';

                    access_log  /var/log/nginx/access.log  main;

                    sendfile            on;
                    tcp_nopush          on;
                    tcp_nodelay         on;
                    keepalive_timeout   65;

                    include             /etc/nginx/mime.types;
                    default_type        application/octet-stream;

                    upstream django {
                        server 127.0.0.1:8001; 
                        server 127.0.0.1:8002; 
                    }
                    server {
                        listen      80;

                        charset     utf-8;

                        # max upload size
                        client_max_body_size 75M;

                        location /static {
                            alias  /data/s8day145/allstatic; 
                        }

                        location / {
                            uwsgi_pass  django;
                            include     uwsgi_params;
                        }
                    }
                }

            
下面的是我自己电脑的nginx配置    #include网上有很多跟老师的步骤不同,因此自己要设置
    注意:server 127.0.0.1:8002;    这个是我提前加的,若只启动了8001,那么这个不要加

user root;
worker_processes 4;

error_log /application/nginx-1.12.2/logs/error.log;
pid /application/nginx-1.12.2/logs/nginx.pid;

events {
    worker_connections  1024;
}


http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /application/nginx-1.12.2/logs/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;

    include             /application/nginx-1.12.2/conf/mime.types;
    
    default_type        application/octet-stream;

    upstream django {
        server 127.0.0.1:8001; 
        server 127.0.0.1:8002; 
    }
    server {
        listen      80;

        charset     utf-8;

        # max upload size
        client_max_body_size 75M;

        location /static {
            alias  /data/s80523/allstatic;   #注意自己的项目名
        }

        location / {
            uwsgi_pass  django;
            include     uwsgi_params;
        }
    }
}
        
        然后进行这一步配置
            uwsgi配置:/data/s8day145/
                s8day145_uwsgi_8001.ini #这个是mv s8day145_uwsgi.ini  s8day145_uwsgi.ini 复制一份得到的
                    [uwsgi]
                    socket = 127.0.0.1:8001  #这个端口是修改的
                    chdir = /data/s8day145/
                    wsgi-file = s8day145/wsgi.py
                    processes = 1
                    
                    
                s8day145_uwsgi_8002.ini  #这是把8001复制了一份,起名为8002
                    [uwsgi]
                    socket = 127.0.0.1:8002
                    chdir = /data/s8day145/
                    wsgi-file = s8day145/wsgi.py
                    processes = 1
                
            
            启动:#这个不要按照老师的操作了,因为我安装nginx和老师的不一样,因此启动命令不同
                uwsgi:#先启动这个
                    uwsgi --ini s8day145_uwsgi_8001.ini &    #这是后台运行的,用and符号 
                    uwsgi --ini s8day145_uwsgi_8002.ini & 
                
                nginx:#再启动这个
                    /etc/init.d/nginx start  #这是centos6中的
                    /bin/systemctl restart nginx.service
                    /bin/systemctl start nginx.service
                    /bin/systemctl stop nginx.service
                我电脑启动的nginx的命令:
                    /application/nginx-1.12.2/sbin/nginx -s reload

                
                启动好之后http://10.0.0.130:8001/index/浏览器查看,即可看到我们在pycharm使用的效果
第三版本

 最后一个这个supervisor没有测试,,未完待续????

7. 如果进程挂了,supervisor帮助你自动将服务重新启动。
            
            /etc/supervisord.conf
                [program:s8day145]
                command=/usr/local/bin/uwsgi --ini /data/s8day145/s8day145_uwsgi_8001.ini ;命令
                priority=999                ; 优先级(越小越优先)
                autostart=true              ; supervisord启动时,该程序也启动
                autorestart=true            ; 异常退出时,自动启动
                startsecs=10                ; 启动后持续10s后未发生异常,才表示启动成功
                startretries=3              ; 异常后,自动重启次数
                exitcodes=0,2               ; exit异常抛出的是0、2时才认为是异常
                stopsignal=QUIT             ; 杀进程的信号
                stopwaitsecs=10             ; 向进程发出stopsignal后等待OS向supervisord返回SIGCHILD 的时间。若超时则supervisord将
                使用SIGKILL杀进程
                user=root                 ; 设置启动该程序的用户
                log_stdout=true             ; 如果为True,则记录程序日志
                log_stderr=false            ; 如果为True,则记录程序错误日志
                logfile=/var/log/cat.log    ; 程序日志路径
                logfile_maxbytes=1MB        ; 日志文件最大大小
                logfile_backups=10          ; 日志文件最大数量

            systemctl start supervisord.service
            
    - 公司中的部署步骤及负责人:
        - 开发提交代码
        - 测试人员开始测试
        - 运维人员进行上线
            使用软件:jenkins+自己写脚本,运维人员点点点。
            
                - 从git上啦代码到一个服务器,在该服务器上对代码进行编译(c/vue/java)
                - 通过以下工具 将代码同步到每台服务器上
                    - saltstack
                    - ansible
                - 执行命令启动程序
    
    - 自己搭建yum源
    
supervisor

 

posted @ 2018-05-23 23:35  Heartbreak-Utopia  阅读(115)  评论(0)    收藏  举报