基于django开发的网站部署

基于Django的报修系统

本文使用云服务器+djngo+uwsgi+nginx的方式实现网站的搭建,主要侧重代码部署

环境

python 3.8
nginx 1.18.0 (Ubuntu)
MySQL 8.0.26-0ubuntu0.20.04.2
django 3.2.6
uwsgi 9.3.0
阿里云服务器ubuntu20.04

前期准备

1.项目文件
本地测试无问题的项目文件
本人的文件结构如下

project
├─api
│  ├─migrations
│  │  └─__pycache__
│  ├─static
│  │  ├─css
│  │  ├─img
│  │  └─js
│  ├─templates
│  └─__pycache__
├─backend
│  └─__pycache__
└─static
    ├─css
    ├─img
    └─js

2.云服务器
本文使用白嫖来的阿里云服务器

实现原理

nginx监听特定的端口将请求转发给uwsgi处理,完成后再由nginx发回给用户

云服务器配置

1.安装nginx
ubuntu下直接使用

sudo apt-get install nginx

然后可以直接

nginx

停止

nginx -s stop

重启

nginx -s restart

nginx默认监听80端口,此时可以直接在浏览器输入云服务器ip,回车后可以看到

基于django开发的网站部署
说明nginx已经成功启动
如果无法访问检查一下
nginx的端口是否被占用
云服务器是否开放了80端口

安装uwsgi

1.升级源

sudo apt update
sudo apt upgrade

2.安装python
安装依赖包,若没有依赖包后面的uwsgi安装会报错

apt-get install python3.8-dev

安装pip

sudo apt install python3-pip

安装uwsgi
安装好依赖后直接

python3-pip install uwsgi

即可

配置uwsgi和nginx

配置uwsgi
在项目根目录下创建uwsgi.ini文件
此处使用vim

vim uwsgi.ini

若没有vim先安装

sudo apt install vim

按i进入输入模式

[uwsgi]
socket = 127.0.0.1:8001
chdir=/home/server/backend
module=backend.wsgi

按ESC后按:wq回车保存退出
参数说明
socket为nginx和uwsgi的内网通信
这里要保证和后面nginx的配置中的转发位置保持一致
chdir为项目所在的目录
moudle是django自己生成的wsgi文件,指明即可
还有其他参数读者可以自行添加,这里从简故不做深入
这里有个坑
如果使用nginx转发请求的话要使用socket
不然nginx的请求转发不到uwsgi
局域网可以使用

[uwsgi]
http = host:port
chdir=/home/server/backend
module=backend.wsgi

使用配置文件启动uwsgi
先安装一个实用的小工具

sudo apt install screen

创建一个新终端

screen -S name

name是你自定义的名字
cd到项目目录然后启动uwsgi

uwsgi uwgi.ini
*** Operational MODE: single process ***
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x55bd7feebf40 pid: 107105 (default app)
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (and the only) (pid: 107105, cores: 1)

启动成功
按Ctrl + A + D即可回到主命令行
如果前面使用的是http的配置方法
回到主命令行后直接

curl host:port

是可以看到nginx的欢迎页面的

nginx配置

配置文件似乎是有好几个位置,这里就用一个方便一点的
nginx的配置文件在/etc/nginx/nginx.conf

vim /etc/nginx/nginx.conf

在http中添加和修改配置参数如下

   server {
    listen      80;
    server_name 自己的云服务器公网IP;
    charset     utf-8;
    client_max_body_size 75M;

    location / {
        uwsgi_pass  127.0.0.1:8001;
        # 刚才在uwsgi.ini中设置的host和port
        include     /etc/nginx/uwsgi_params;
        uwsgi_read_timeout 15;

    }
            location /static {
        # 指定静态文件存放的目录
        alias  /home/server/project/static;
    }
}

如果不指明静态文件的存放目录会出现静态文件(css、img、js)等无法访问
保存后重启nginx

nginx -s restart

此时在浏览器输入自己的公网ip,回车

基于django开发的网站部署
成功访问django
出现这个页面是因为在settings.py里面
DEBUG = True

关闭以后就看不到该页面了
此时的uwsgi

 [pid: 107190|app: 0|req: 1/1]
    ip手动打码
 {42 vars in 770 bytes}
 [Wed Dec 22 23:11:15 2021]
 GET /api/ip => generated 103 bytes in 106 msecs
 (HTTP/1.1 200) 5 headers in 158 bytes (1 switches on core 0)

项目地址
项目还没结题
测试账号就先不给了
DEBUG开着读者可以自己试探

一些坑

如果要使用nginx,uwsgi.ini内要使用socket
如果nginx出现502 bad gateway的话
可能是uwsgi没有启动或者没有正确配置
建议检查一下uwsgi和nginx配置文件里的host和port
提交form表单时候出现csrf ***报错的时候
1.在HTML源码中加入{csrf token}
2.在settings.py中注释掉django.middleware.csrf.CsrfViewMiddleware即可

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

参考了很多大佬的blog,这里简单的做一下记录

Original: https://blog.csdn.net/yoke__/article/details/122096530
Author: Hel1x
Title: 基于django开发的网站部署

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/734673/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球