生产环境部署python代码(djang

发布时间:2019-08-31 09:45:33编辑:auto阅读(1439)

    基础环境不做介绍,在django开发web项目完成后,一直使用django自带的服务器进行调试:
    python manage.py runserver 0.0.0.0:8080

    这个服务器在开发时使用,实际生产则不能满足,要使用uwsgi把动态请求转给python执行,使用nginx处理静态请求,部署如下:

    在开发环境中,收集python所需的安装包及其具体版本号:
    pip freeze > programlist.txt

    然后,把programlist.txt文件传递服务器上;

    前提:线上服务器已经安装好python环境、django环境、nginx等;

    在服务器上安装python项目所需要的程序包:
    pip install -r programlist.txt

    创建django项目:
    django-admin startprojcet test

    会在本地创建一个test项目同名的目录,并进入:
    cd test

    再创建项目下的一个应用:
    python manage.py starapp apptest

    此时,当前目录会出现apptest目录、manage.py文件和test目录(与项目目录下同名的又一个目录);

    还要创建相应的目录:
    在项目目录test下创建目录:
    test/templates/apptest
    test/static/apptest
    test/static/media
    注意:两级目录均需要创建

    修改settings.py文件:
    DEBUG=False
    #允许指定主机访问服务器
    ALLOWED_HOSTS=['*']
    #添加应用
    INSTALLED_APPS = [
    ...
    'test',
    ]
    #修改模板路径
    TEMPLATES = [
    {
    ...
    'DIRS': [os.path.join(BASE_DIR,'templates')],
    ...
    },
    ]
    #添加静态文件路径
    STATIC_URL = '/static/'
    STATICFILES_DIRS=[
    os.path.join(BASE_DIR,'static')
    ]
    #nginx配置中的静态文件路径
    STATIC_ROOT='/var/www/test/static/'
    #配置数据库
    DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'test3',
    'USER': 'root',
    'PASSWORD': 'root',
    'HOST': 'localhost',
    'PORT': '3306',
    }
    }

    修改主urls.py文件:
    #配置url路径
    from django.conf.urls import url,include
    from django.contrib import admin

    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url('^',include('booktest.urls')),
    ]

    在应用目录下创建一个urls.py文件:
    test/urls.py
    如:
    from django.conf.urls import url
    import views

    urlpatterns=[
    url(r'^$',views.index),
    ]

    在views.py文件里定义各种视图函数;
    如:
    from django.shortcuts import render

    def index(request):
    return render(request,'booktest/index.html')

    在templates/apptest/创建各html模板文件;
    如index.html:
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="/static/booktest/jquery-1.12.4.min.js"></script>

        <script>
        $(function () {
            $('img').width(100).height(100);
        });
    </script>

    </head>
    <body>
    <img src="/static/booktest/a1.jpg" />
    </body>

    注意:先把a1.jpg和js文件放到test/static/apptest目录下;

    此时,先测试一下,把settings中的DEBUG改为=False,如果不改,则会显示不出图片;再启动django开发时的服务器,访问浏览器能看见图片且符合js里面设定的图片大小既可进行下一步配置;

    下面配置wsgi:

    安装uWSGI:
    pip install uwsgi

    在项目test目录下创建uwsgi.ini文件,内容如下:
    [uwsgi]
    #使用nginx连接,使用socket
    socket=192.168.1.250:8080
    #直接做web服务器,使用http
    #http=192.168.1.250:8080
    #项目的绝对路径
    chdir=/root/projects/test
    #相对项目绝对路径的一个路径
    wsgi-file=test/wsgi.py
    processes=4
    therads=2
    master=True
    pidfile=uwsgi.pid
    daemonize=uswgi.log

    运行uwsgi:
    uwsgi --ini uwsgi.ini

    如果uwsgi.ini文件使用的是http,则直接访问服务器的ip地址和端口既可显示页面;

    停止uwsgi:
    uwsgi --stop uwsgi.pid

    如果uwsgi.ini文件使用的是socket,则需要nginx服务的配合使用:

    配置nginx.conf:
    server {
    listen 80 default_server;
    listen [::]:80 default_server;
    servername ;
    root /usr/share/nginx/html;
    include /etc/nginx/default.d/*.conf;

        location / {
                include uwsgi_params;
                uwsgi_pass 192.168.1.250:8080;
        }
                location /static {
                alias /var/www/test/static/;
        }

    在静态文件存放目录:
    /var/www/test/static/

    修改静态文件所在目录static的目录权限:
    chmod 777 static

    再把静态文件,放到/var/www/test/static/目录下既可,django提供方便的命令,来采集静态文件:
    python manage.py collectstaic
    输入yes;

    执行该命令后,会自动把静态文件都复制到/var/www/test/static/目录下;

    最后,直接访问服务器的域名或ip,完成访问页面;

关键字