当前位置: 首页 > news >正文

Django在服务端的部署(无废话)

一、准备工作

1. Linux服务器(虚拟机、云服务器)
2. Django开发好的项目(windows版本)

二、流程

1、在linux上得到一份和windows拥有相同依赖的虚拟环境


在windows下

pip freeze > requirement.txt(python -m pip freeze > requirement.txt)

2、将项目拷贝到远程服务器

1.先把项目中的venv虚拟环境拿走

2.在windows中,项目的文件夹的上方输入cmd进行

scp -r 项目文件名  root@"ip":重命名(可不写,不写则是原项目名)

3.然后再把拷贝后的文件转移到、var/www下方(必要操作) 
(服务器需要有nginx,apt update ,apt install nginx)
vm 项目名 -t /var/www

3、利用requirement.txt 在linux上安装相同包

在项目根目录下

apt update
apt install python3.12-venv   #(版本号可能有所不同 python --version 查看版本号)
python -m venv venv
source venv/bin/activate   #激活虚拟环境

进入项目所在位置,

pip install -r requirement.txt

(如果你没有配置镜像源的话下载会很慢,不用担心)

试试这个:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt(清华镜像源下载更快)

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/  包名(安装单一包)

迁移文件(大概率会出错,执行以下方法)
python manage.py makemigrations
python manage.py migrate

会出现部分模版还没pip或者文件有些格式在服务器中不适用需要修改也有可能是版本不适
根据错误进行导入修改,直到没有问题

如果不会分析问题,教你一招,ai一下你就知道
再进行

python manage.py migrate

python manage.py runserver

在浏览器中就可以看到项目,但是没有并没有装饰需要进行一下步骤

注意一下问题:(步骤3和步骤4可能会遇到的问题)

在 settings.py 中找到 ALLOWED_HOSTS 配置,添加你的 IP 地址(一定要配置

确保你的:
DEBUG = False


# 方法1:添加具体IP
ALLOWED_HOSTS = [
'8.130.115.214',      # 你的服务器IP
'localhost',
'127.0.0.1',
]

# 方法2:允许所有主机(开发环境,不推荐生产)(这个特别好用,但是不安全)
# ALLOWED_HOSTS = ['*']

# 方法3:如果你有域名,也一并添加
# ALLOWED_HOSTS = ['8.130.115.214', 'yourdomain.com', 'www.yourdomain.com']

在 urls.py 中添加

if settings.DEBUG:
import debug_toolbar
urlpatterns = [
path('__debug__/', include(debug_toolbar.urls)),
] + urlpatterns

# 开发环境静态文件服务
from django.conf.urls.static import static
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

# 重启 uWSGI(如果不明白,查看步骤四)
uwsgi --stop uwsgi.pid
uwsgi --ini uwsgi.ini

此时就在linux上可以运行python manage.py runserver
但是runserver 是开发服务器 效率太低  
需要部署在正式服务器上

4、通过uwsgi来部署web应用

在项目根目录
pip install uwsgi

在项目根目录添加 uwsgi文件
touch uwsgi.ini


uwsgi.ini 配置文件:

[uwsgi]
#socket=外网ip:端口(使用nginx连接时,使用socket)
http=0.0.0.0:12000
# 项目根目录chdir=/var/www/项目名
# wsgi所在目录
wsgi-file=项目名/wsgi.py
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uwsgi.log

启动  uwsgi --ini uwsgi.ini
(启动后根目录下会多出关于uwsgi的相关文件)
停止  uwsgi --stop uwsgi.pid

注意不能多次启动,如果不能正常进行可以进行以下操作:

ps -ef | grep uwsgi (查看进程)
强制杀死 :

uwsgi  kill -9 进程号

在云服务器中要注意

添加云服务器的安全组/防火墙
TCP    12000/13000

5、部署nginx
将uwsig配置文件其中的http修改socket
socket=0.0.0.0:12000

sudo apt install nginx

/etc/nginx/sites-enabled
touch 项目名

vim 项目名
server {                
# Nginx监听端口                
listen 0.0.0.0:13000;                
location / {                          
include uwsgi_params;                          
# 转发uwsgi端口                          
uwsgi_pass 0.0.0.0:12000;                        
}        

注意配置文件一定要删除空格重新部署格式,别问为什么,因为我踩过这个坑(因为你直接复制这个文件配置,里面可能会有特殊空格,程序可能会因为这个特殊空格报错)

6、动静分离:动态路由通过uwsgi转发 静态路由直接通过nginx转发
收集项目所需静态资源,完成请求动静分离


在项目根目录下新建 staticroot
sudo mkdir staticroot
cd  staticroot  
pwd

获取并复制当前路径,然后拷贝当前路径在settings.py中添加

STATIC_ROOT = “/var/www/项目名/staticroot”(引号中的内容为复制的pwd路径)

 将所有应用用到的静态资源都拷贝到staticroot目录下
python  manage.py collectstatic 

修改nginx配置文件
location /static {
alias  /var/www/django_site/staticroot;
}

修改后:
server {
listen 0.0.0.0:13000;
location / {
include uwsgi_params;
uwsgi_pass 192.168.13.31:12000;
}’
location /static {
alias  /var/www/Django_view/staticroot;
}
}

重启nginx服务器
systemctl restart nginx
(13000端口: Nginx对外服务端口,用户直接访问

12000端口: uWSGI应用服务端口,仅供Nginx内部转发使用)
所以我们需要在浏览器访问13000端口号

附加 :想要配置mysql数据库
需要在linux中安装相关的mysql

创建数据库

create database  数据库名 charset=utf8;

create user '用户名'@'%' identified by '密码';

-- 授予权限
grant all on 项目名.* to 用户名@'%';

--刷新权限

flush privileges;


exit

--重新登陆
mysql -u 用户名 -p


select user();

看到有自己用户后
exit

回到项目下
python manage.py makemigrations

可能会出现没有安装数据库(python中)

首先安装系统依赖

sudo apt update
sudo apt install -y build-essential python3-dev default-libmysqlclient-dev pkg-config

再安装
pip install mysqlclient

python manage.py migrate

重启uwsgi
uwsgi --stop uwsgi.pid
uwsgi --ini uwsgi.ini


再修改settings.py中的DATABASES

DATABASES = {
#    'default': {
#        'ENGINE': 'django.db.backends.sqlite3',
#        'NAME': BASE_DIR / 'db.sqlite3',
#   }
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '数据库名',
'USER':'用户名',
'PASSWORD':'密码',
}

}

总结:

走过以上流程后基本不会再有问题,如果有,别担心推荐你终极“杀器”

问问ai

http://www.dtcms.com/a/544831.html

相关文章:

  • 当 AI Agent 遇上 MCP:微软 Agent Framework 的“瑞士军刀“式扩展之道
  • 个人网站建设培训药品网络营销公司
  • 20MW-10MWh储能项目施工方案
  • RHCA - DO374 | Day05:管理主机清单
  • 【完整源码+数据集+部署教程】【天线&水】无人机视角水面漂浮物体检测系统源码&数据集全套:改进yolo11-REPVGGOREPA
  • 思源实时同步设置步骤和节点部署
  • 电脑间如何快速传输大文件?4种高效数据迁移方法任选
  • 云栖实录 | AI原生搜索引擎:Elasticsearch 换“芯”——AI原生搜索内核增强技术
  • 手机可以做网站学校网站建设与管理办法
  • 网站建设流程的过程建设行政主管部门政务网站
  • 计算机网络-物理层
  • css面试题1
  • Git的原理与使用 -- 分支管理
  • 7.1.3 大数据方法论与实践指南-查询平台
  • 什么是所有权
  • 江苏建设网站公司合肥建设工程质量监督局网站
  • js基础:07、作用域(全局作用域、函数作用域)、声明提前(变量的声明提前、函数的声明提前)、执行上下文(this)、新创建对象方法、构造函数
  • 七牛云到阿里云对象存储回源配置
  • Ant Design Landing模版使用教程-react-npm
  • ChatGPT-4o在自然科学中的应用:统计建模、机器学习与时空数据分析实战
  • 仓颉语言包与模块系统深度解析
  • 营销型网站建设制作多少钱做网站电销
  • windows装wsl ubuntu24.04 ,里面装qemu ,然后装mac os (windows也可以直接qemu安装macos)(未实践)
  • Tongweb7启动脚本说明
  • 【Linux】进程初阶(2)——进程状态
  • WSL2 Ubuntu cuda驱动问题解决和CUDA Toolkit安装
  • 深圳市住房建设局网站个性婚纱摄影
  • SQLite 约束 (Constraints) 面试核心知识点
  • 使用J-Link Attach NXP S32K3导致对应RAM区域被初始化成0xDEADBEEF
  • 电子商务网站建设与维护展望分销系统微信