• Ubuntu下部署Django项目


    1.首先要进入本地环境把项目所需要的环境导出来

    pip freeze >requirements.txt

    2.安装python3.6.8版本

    3.安装得到的requirements.txt 命令:pip3 install -r requirements.txt  全部安装

    如果遇到HTTPConnectionPool(host=''xx.xx.xx.xx', port=xx): Max retries exceeded with url: (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x00000237EE44EF98>: Failed to establish a new connection: [WinError 10060]错误

    处理方法:https://www.cnblogs.com/erhangboke/p/11663057.html

    4.修改项目的settings文件

    DEBUG = False(线上的项目一定要修改成False)

    ALLOWED_HOSTS = ["*"]

    5.在django的settings文件中,添加下面一行内容:

    STATIC_ROOT = os.path.join(BASE_DIR, "static/")

    7.配置路由(貌似不是必须)

    url(r'^static/(?P<path>.*)',serve,{"document_root":settings.STATIC_ROOT}),

    6.进入项目目录执行下面代码

    收集admin后台的静态文件,如果不执行,将来访问linux的mysite的admin/xadmin将没有样式:

    python manage.py collectstatic 会提示 是否继续这样做? yes

    7.进入linux通过cd切换到项目的目录下 输入下列命令可以运行证明已经完成了大部分操作

    python3 manage.py runserver 0.0.0.0:8000 

    本地访问xxx:8000/xxx地址可以访问成功,说明环境OK

    8.完成了上一步发现当终止回话时,就不能在访问了,下面就是部署终止客户端会话亦可以访问

    9、安装必备内容

      9.1安装nginx

        sudo apt-get update

        apt-get install nginx(目录在/etc/nginx下)

        链接到uwsgi的启动配置文件中

        ln -s /etc/nginx/nginx.conf  /etc/nginx/conf.d/

        安装完成后,使用service nginx start命令启动后,本地访问10.205.1.203,显示welcome to nginx即安装成功

        service nginx restart(start/status/stop/reload)

      9.2安装SSH

        apt-get install openssh-server

      9.3安装 uwsgi

        sudo apt-get install python3-setuptools

        sudo apt-get install python3-dev

        pip install uwsgi

    10.在你的项目下/data/jenkins/mysite 创建一个uwsgi.ini的配置文件

    [uwsgi]

    #Django-related settings

    #uwsgi这个服务监听的是9001端口,如果nginx想要向uwsgi转发请求,那么nginx必须使用9001端口发送请求。

    socket = 127.0.0.1:9001

    #项目绝对路径(手动设置)

    chdir           = /data/jenkins/mysite

    #Django的wsgi文件相对路径(不要写绝对路径,写相对路径,自己设置)

    wsgi-file       =mysite/wsgi.py

    #process-related settings

    #master

    master          = True

    #最大进程数

    processes       = 4

    #线程数

    threads         = 2

    #设置此参数,有一个主进程

    master=True

    #守护进程的方式运行,log日志存在此log文件里

    deamonize=/var/log/uwsgi/mysite.log

    disable-logging = true

    #主进程id写入文件里

    pidfile= /var/log/nginx/uwsgi.pid

    #... with appropriate permissions - may be needed

    #chmod-socket    = 664

    #退出时,清理环境

    vacuum          = True

    reload-mercy    = 10

    max-requests    = 5000

    limit-as        = 512

    buffer-size     = 30000

    11. 输入下面命令,查看nginx默认配置文件的目录

    nginx -t 

    默认文件目录为/etc/nginx/nginx.conf

    然后cd到/etc/nginx/下

    输入vim.nginx.conf

    可以看出会加载/etc/nginx/conf.d文件夹下的任意.conf结尾的文件

    cd到etc/nginx/conf.d文件夹,然后ls发现里面没有文件,所以需要自己新建文件dj_nginx.conf(文件名随便起,.conf结尾就可以)##

    12.在dj_nginx.conf ##输入一下代码.一定要记得改路径

    server {

        listen         8000; 

        server_name    0.0.0.0; 

        access_log      /var/log/nginx/mysite_access.log;

        error_log       /var/log/nginx/mysite_error.log;

        charset     utf-8;

        keepalive_timeout 65;

        client_max_body_size 75M;

        root /data/jenkins/mysite; #修改路径

        location / { 

            include uwsgi_params;

            uwsgi_pass 127.0.0.1:9001;

            uwsgi_read_timeout 300; //这个时间可以设置长一写,防止请求页面出现504超时问题

        }   

        location /static/ {

            expires 30d;

            autoindex on; 

            add_header Cache-Control private;

            alias /data/jenkins/mysite/static/;#修改路径

         }

        location /media/ {

            expires 30d;

            autoindex on; 

            add_header Cache-Control private;

            alias /data/jenkins/mysite/media/;#修改路径

         }

     }

    先用nginx -t查看是否有错,有错解决,没错重启service nginx restart/reload

    10.205.123::8000/xxx

    最好在项目下创建start.sh的文件,内容uwsgi -i uwsgi.ini

    或者命令行执行也可以

    如果遇到:uwsgi: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory错误

    解决方法:https://www.cnblogs.com/erhangboke/p/11673156.html

    netstat -apn | grep 8000/lsof -i :8000 查看8000端口是谁在使用

    kill -9 pid号 强制关闭占用端口的程序(或者更换监听的端口)

    来个更强大的命令:ps -ef|grep uwsgi|awk {'print $2'}|xargs kill -9

    问题来了:

    部署完成后发现执行了uwsgi -i uwsgi.ini命令后没有后台运行,停止了命令,项目仍然停止了

    优化:

    在项目中创建一个.sh.结尾的shell文件 start.sh

    由于执行uwsgi -i uwsgi.ini会产生一些log内容,创建一个mysite.log文件,将产生的log打印到mysite.log(路径可以自己定)

    shell代码:

    #!/bin/bash

    dir="/data/jenkins/workspace/RRD_mysite/logs/mysite.log"

    if [ ! -d "$dir" ];then

     touch $dir

     echo "创建文件成功"

    else

     echo "文件已经存在"

    fi

    nohup uwsgi -i uwsgi.ini >$dir 2>&1 &

    可以用jenkins配合部署:shell命令:

    #!/bin/bash

    BUILD_ID=DONTKILLME

    echo "kill PID!"

    ps -ef|grep uwsgi|awk {'print $2'}|xargs kill -9

    sleep 2

    cd $WORKSPACE

    rm -rf report20*

    rm -rf __pycache__

    rm -rf logs/mysite.log

    chmod +x start.sh

    echo "start service!"

    ./start.sh

  • 相关阅读:
    SVN的import和export的使用
    windows下CreateDirectory创建路径失败的解决办法
    windows下查看rabbitmq服务是否启动
    tcp和udp的socket形式
    sockaddr_in 转成string
    Halcon系列(1) 菜鸟入门
    tesseract系列(3) -- tesseract训练
    tesseract系列(2) -- tesseract的使用
    springboot之redis
    hadoop格式化
  • 原文地址:https://www.cnblogs.com/erhangboke/p/11678486.html
Copyright © 2020-2023  润新知