生产环境部署python代码(django+uwsgi+nginx)

简介:

基础环境不做介绍,在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(https://developer.aliyun.com/r'%5Eadmin/',%20admin.site.urls),
url('https://developer.aliyun.com/%5E',include('booktest.urls')),
]

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

urlpatterns=[
url(https://developer.aliyun.com/r'%5E),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="https://developer.aliyun.com/static/booktest/jquery-1.12.4.min.js"></script>

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

</head>
<body>
<img src="https://developer.aliyun.com/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,完成访问页面;









本文转自 crystaleone 51CTO博客,原文链接:http://blog.51cto.com/linsj/2050731,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
测试技术 Python
Python装饰器:为你的代码施展“魔法”
Python装饰器:为你的代码施展“魔法”
266 100
|
2月前
|
开发者 Python
Python列表推导式:一行代码的艺术与力量
Python列表推导式:一行代码的艺术与力量
434 95
|
3月前
|
Python
Python的简洁之道:5个让代码更优雅的技巧
Python的简洁之道:5个让代码更优雅的技巧
269 104
|
3月前
|
开发者 Python
Python神技:用列表推导式让你的代码更优雅
Python神技:用列表推导式让你的代码更优雅
474 99
|
2月前
|
缓存 Python
Python装饰器:为你的代码施展“魔法
Python装饰器:为你的代码施展“魔法
161 88
|
2月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
|
3月前
|
设计模式 人工智能 API
AI智能体开发实战:17种核心架构模式详解与Python代码实现
本文系统解析17种智能体架构设计模式,涵盖多智能体协作、思维树、反思优化与工具调用等核心范式,结合LangChain与LangGraph实现代码工作流,并通过真实案例验证效果,助力构建高效AI系统。
536 7
|
6月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
312 1
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
707 45

推荐镜像

更多