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

原文地址:https://www.cnblogs.com/erhangboke/p/11678486.html