Django+xadmin 打造线上教育平台 Django + Uwsgi + Nginx部署上线


 参考链接:https://www.cnblogs.com/Eric15/articles/9484762.html

1、将mxonline项目复制放到linux系统用户目录下:

  打包成.zip格式,传到linux系统,再用命令:unzip 项目.zip ,解压成文件夹

2、将win系统下mysql数据,传输到linux下的mysql中:

 

3、linux下虚拟环境安装

 3.1、virtualenv安装:

sudo apt-get install python-virtualenv

 

  3.2、virtualenv使用:

# py2版本

# 1、创建虚拟环境 ,默认启用python版本为,python2
virtualenv py2    # 路径:/home/nan/py2/bin/python2

# 2、进入虚拟环境bin目录下
cd py2/bin

# 3、执行命令进入虚拟环境
source activate
# 回车后显示:(py2) nan@nan-virtual-machine:~/py2/bin$

# 4、退出虚拟环境
deactivate

# py3版本
# 同window操作
virtualenv -p python3路径 文件名
# 例:
virtualenv -p /usr/bin/python3 py3test

 

 3.3、virtualenvwrapper安装:

  作用:简化virtualenv 创建虚拟环境的步骤

# 1、安装 ,用pip3安装,属python3版本,配置文件时需注明py3版本安装
pip3 install virtualenvwrapper  

pip install virtualenvwrapper   #python2

 3.4、找到virtualenvwrapper的配置文件:

  默认安装后,使用命令是需要进入到相应环境文件夹下的,我们将配置文件的路径拷到$home当前路径,可方便我们直接使用命令

  3.4.1、输入指令:

sudo find / -name virtualenvwrapper.sh   #找到virtualenvwrapper.sh文件路径
  #
which virtualenvwrapper.sh # 同样可找到virtualenvwrapper.sh文件路径

  

  3.4.2、配置当前路径下的.bashrc文件(用户当前目录下,可用ls -a 查看),将virtualenvwrapper虚拟环境路径配置进去:

   vim .bashrc

# 添加的内容
export WORKON_HOME=$HOME/.envs  #虚拟环境都保存到 .envs文件夹中

VIRTUALENVWRAPPER_PYTHON='/usr/bin/python3'  #linux启动默认python2版本,而virtualenvwrapper安装是使用pip3安装,因此需注明这句代码

source /usr/local/bin/virtualenvwrapper.sh  #启动文件路径

  3.4.3.、执行命令:source ~/.bashrc    #更新配置

  3.4.4、.现可以正常创建虚拟环境了:

mkvirtualenv py2test  #创建虚拟环境,并进入虚拟环境,默认python版本为python2

#此时创建好的虚拟环境在 ~/.envs文件夹中,ls -a可查看


workon  #查看虚拟环境

workon py2scrapy  #进入虚拟环境

deactivate #退出虚拟环境

rm -rf py2scrapy  #删除虚拟环境,需进入到.envs文件夹执行


#手动指定使用python3版本
mkvirtualenv --python=/usr/bin/python3 py3scrapy

使用python3版本:

 

 

 4、将win下开发MxOnline项目时使用的开发虚拟环境中的所有依赖包,都需要在linux下新建的虚拟环境中安装

 4.1、新建虚拟环境并进入:

  mkvirtualenv --python=/usr/bin/python3 mxonline

 4.2、导出win系统下MxOnline开发环境中所依赖的包:

  4.2.1、导出指令:pip freeze > requirements.txt

      到当前目录下找到:requirements.txt ,将此文件复制到linux下的MxOnline虚拟环境中

        读取文件 并安装到虚拟环境中:pip install -r requirements.txt

              

  注意:安装上述依赖包时,可能会出现某些问题:

   1. Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-syed52n2/mysqlclient/

     解决方法:sodu apt-get install libmysqlclient-dev python3-dev

    解决问题后记得重新执行:pip install -r requirements.txt ,继续安装中断的依赖包

 


 

5、uwsgi安装使用

5.1、安装

pip3 install uwsgi

 5.2、Uwsgi启动Django

1)Django自启动:

python manag.py runserver 0.0.0.0:9000

2)uwsgi启动Django

 方式一:

uwsgi --http :9000 --module mysite.wsgi #mysite =项目名
# eg:
uwsgi --http :9000 --module MxOnline.wsgi

 方式二(推荐):

  首先,把参数写到配置文件里,命名mxonline_uwsgi.ini,放在MxOnline项目下:

   vim mxonline_uwsgi.ini

[uwsgi]
http = :9000  #uwsgi浏览器连接端口,启动Django不需要用到
#the local unix socket file than commnuincate to Nginx
socket = 127.0.0.1:8001  #用于跟Nginx之间的通信
# the base directory (full path)
chdir = /home/nan/MxOnline  #项目的绝对地址 
# Django's wsgi file
wsgi-file = Mxonline/wsgi.py #项目中Mxonline文件夹内的wsgi.py文件      
# maximum number of worker processes
processes = 4 #4个进程
#thread numbers startched in each worker process
threads = 2  # 2个线程

virtualenv = /home/nan/.envs/mxonline # 虚拟环境路径
#monitor uwsgi status
stats = 127.0.0.1:9191  #监控进程
# clear environment on exit
vacuum          = true  #退出时清除环境

 

   配置好后,需要通过下面命令启动Django:

(mxonline)nan@nan-virtual-machine:/MxOnline# uwsgi mxonline_uwsgi.ini  #在MxOnline项目下执行

 

 如果启动出现问题:

detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
chdir() to /home/nan/MxOnline  #项目的绝对地址
chdir(): No such file or directory [core/uwsgi.c line 2631]
chdir(): No such file or directory [core/uwsgi.c line 1646]

 

做如下操作:

pip uninstall uwsgi
yum install -y pcre pcre-devel pcre-static
pip install uwsgi -I --no-cache-dir

 

 

6、Nginx的安装使用

 6.1、安装使用:

sudo apt-get install nginx   #安装
sudo /etc/init.d/nginx start    # start nginx

 

6.2、copy nginx下的uwsgi_params文件到你的Django项目目录下,不用作任何改动 

 uwsgi_params在 /etc/nginx下

#cp 源文件 目标文件
cp ./uwsgi_params ~/MxOnline
    # ./ :当前目录
    # ../:上级目录
    # /  :根目录
    # ~/ :当前用户目录

 

6.3、为MxOnline项目生成Nginx配置文件 :mxonline_nginx.conf :

# the upstream component nginx needs to connect to
upstream django {
    # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
    server 127.0.0.1:8001; # 用于与uwsgi通信,与uwsgi设置保持一致
}
 
# configuration of the server
server {
    # the port your site will be served on
    listen      8000; #自己端口
    # the domain name it will serve for
    server_name 192.168.1.145; # substitute your machine's IP address or FQDN
    charset     utf-8;
 
    # max upload size
    client_max_body_size 75M;   # adjust to taste
 
    # Django media
    location /media  {
        alias /home/nan/MxOnline/media;  # your Django project's media files - amend as required
    }
 
    location /static {
        alias /home/nan/MxOnline/static; # 静态文件路径
    }
 
    # Finally, send all non-media requests to the Django server.
    #一切动态的访问均交由Django自己处理
    location / {
        uwsgi_pass  django;
        include     /home/nan/MxOnline/uwsgi_params; # the uwsgi_params file you installed 
    }
}

 

 6.4、做一个软连接,将此配置文件生成一个快捷方式,放到:/etc/nginx/sites-enabled/ 下,如软连接不行,则将该配置文件复制或移动到/etc/nginx/sites-enabled/ 下

ln -s ./celery_nginx.conf /etc/nginx/sites-enabled/

 

6.5、在Django的setting中配置:STATIC_ROOT  ,用于将Django所有静态文件cp一份放置在一个地方,方便Nginx调用:

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

 

接着执行命令:python manage.py collectstatic

 作用:将所有app静态文件都copy到一个统一的目录,方便Nginx访问


 

最后,

 重启Nginx:

  /etc/init.d/nginx restart

 

 启动uwsgi:

 uwsgi celery_uwsgi.ini

至此,基于Django + Uwsgi + Nginx的生产环境便部署好了


 

posted on 2018-09-05 18:05  Eric_nan  阅读(360)  评论(0编辑  收藏  举报