项目部署(代码上线)


 

静态文件要这样访问  专业!! 

 

上线之前要把 配置这样修改

HOST="192.167.12.42"  #改成在公网ip

DEBUG=false

所有人能访问

测试版的  本地测试,不是上线版的

 

 

安装python 3.6?? (看以前的笔记)

 

wsgiref的性能要差一

第二个版本装uwsgi

 

 

  

 

 

 

 

 UWSGI  缺点:处理I静态文件有问题

    当访问量大的时候,需要有负载均衡

这个时候ngxj

 能够处理静态文

-- 做反向代理

--做负载均衡(处理多个接口)(LVS,hapropx也可以做负载均衡)

 

这个时候 可以这样写  因为他们是内部传递的 所以可以用socket来传送数据

 

 

UWSgi中加上  &就可以后台运行

然后ngix做负载均衡  如下

 

 uwsgi中的processes=1  这个数字跟cup核数有关, 能同时开启的进程数

 

 

 

 

小白的项目部署

 

项目开发完毕后,需要将代码放到服务器上,这样用户才能访问。接下来我们一步一步来进行一波部署操作。

1. 简单粗暴

项目开发完毕,在部署之前需要再配置文件中将 ALLOWED_HOSTS配置设置为:当前服务器IP或*,如:

1
ALLOWED_HOSTS  =  [ "*" ,]

示例源码:猛击下载

然后将源码上传至服务器指定目录,如:/data/ ,然后执行命令来运行:

注: 上传命令: scp /Users/wupeiqi/PycharmProjects/oldboy-1.zip root@192.168.10.33:/data/

解压,进入目录并执行以下命令:

1
python3 mange.py runserver  0.0 . 0.0 : 8000   

 

2. uwsgi

Django框架运行依赖wsgi(本质提供socket服务端),众多模块实现了wsgi规范,而django框架中默认使用wsigiref模块来实现,他由于性能比较低,所以用于本地开发和测试,而线上部署时需要使用uwsgi来代替。

a. 在服务器上安装uwsgi

1
pip3 install uwsgi

需要先安装:yum install python-devel

 

b. 单文件使用uwsgi

在服务器上编写一个Python文件:

1
2
3
def  application(env, start_response):
     start_response( '200 OK' , [( 'Content-Type' , 'text/html' )])
     return  [b "Hello World" ]

在服务器上执行命令启动Web服务器:

1
2
3
uwsgi  - - http : 9001  - - wsgi - file  app.py
# 或
uwsgi  - - http : 9002  - - wsgi - file  foobar.py  - - master  - - processes  4

PS: flask需要再加 --callable app

访问查看即可:

c. django程序使用uwsgi

将开发好的django程序拷贝到服务器目录【同示例一】,即:/data/oldboy ,执行命令启动:

1
uwsgi  - - http : 9005  - - chdir  / data / oldboy /  - - wsgi - file  oldboy / wsgi.py  - - master  - - processes  4
复制代码
1. 创建配置文件 oldboy.ini

[uwsgi]
http = 0.0.0.0:9005
chdir = /data/oldboy/
wsgi-file = oldboy/wsgi.py
processes = 4
static-map = /static=/data/oldboy/allstatic

2. 根据配置文件启动uwsgi

uwsigi --ini  oldboy.ini
复制代码

PS: 如果有虚拟环境可以添加上虚拟环境路径配置: virtualenv = /env/oldboy_venv

此时访问时,会出现找不到静态文件的错误。

想要uwsgi处理静态文件,需要先将django的静态文件收集到制定目录,然后再设置对应关系。

  • 收集django静态文件
    • 在django的配置文件中添加:STATIC_ROOT = os.path.join(BASE_DIR,"allstatic")
    • 执行 python3 manage.py collectstatic 命令,至此django项目所有相关静态文件都会收集到制定目录。
  • 设置uwsgi静态文件对应关系
    • uwsgi --http :9005 --chdir /data/oldboy/ --wsgi-file oldboy/wsgi.py --master --processes 4 --static-map /static=/data/oldboy/allstatic

访问地址,即可看到你的女朋友们了....

3. nginx

利用Nginx做反向代理、负载均衡以及处理静态文件。

a. 安装Nginx

1
yum install nginx

b. 配置nginx

 

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 192.1.123.1; 
    }
    server {
        listen      80;

        charset     utf-8;

        # max upload size
        client_max_body_size 75M;

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

        location / {
            uwsgi_pass  django;
            include     uwsgi_params;
        }
    }
}
示例配置文件/etc/nginx/nginx.conf

确保nginx配置文件目录下有uwsgi_params文件(默认)

c. 配置uwsgi

为了确保让所有请求均通过80端口来访问网站,将uwsgi的配置文件修改为:

1
2
3
4
5
6
[uwsgi]
socket  =  127.0 . 0.1 : 9005
chdir  =  / data / oldboy /
wsgi - file  =  oldboy / wsgi.py
processes  =  4
logto  =  / tmp / oldboy.log

d. 启动uwsgi和nginx

1
2
3
uwsgi --ini  /data/oldboy/oldboy .ini &
 
/etc/init .d /nginx  start

3. supervisor

supervisor是一个对进程管理的软件,可以帮助我们启动uwsgi并维护(uwsgi进程关闭时,自动将其启动起来)。

a. 安装

1
yum  install  supervisor

b. 配置 vim /etc/supervisor.conf

 

 

6. 第三版本上线:uwsgi + nginx 

nginx作用:
       - 处理静态文件
       - 反向代理
       - 负载均衡(LVS、haproxy)
uwsig作用:
       - 处理动态请求

nginx配置:/etc/nginx/nginx.conf   

user root;
                #进程数量   4
                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 {
                        #监听80端口
                        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;
                        }
                    }
                }
View Code

uwsgi配置:/data/s8day145/

          s8day145_uwsgi_8001.ini 
                    [uwsgi]
                    socket = 127.0.0.1:8001
                    chdir = /data/s8day145/
                    wsgi-file = s8day145/wsgi.py
                    processes = 1
                    
                    
                s8day145_uwsgi_8002.ini 
                    [uwsgi]
                    socket = 127.0.0.1:8002
                    chdir = /data/s8day145/
                    wsgi-file = s8day145/wsgi.py
                    processes = 1

启动:

  

          nginx:
                    /etc/init.d/nginx start 
                    /bin/systemctl restart nginx.service
                    /bin/systemctl start nginx.service
                    /bin/systemctl stop nginx.service
                
                uwsgi:
                #这里后边加一个  & 表示在后端启动,不会在前面打印一些日志
                    uwsgi --ini s8day145_uwsgi_8001.ini &
                    uwsgi --ini s8day145_uwsgi_8002.ini & 

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源

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM