Django 用户认证 用户 邮箱登录 邮箱注册 ORM or,and,not form.py FORM ModelForm Paginator 分页 HTMl JQuery 定位元素 ajax django切片 restfulapi 跨域 Ubantu Python Mysql Scrapy 爬虫 导出 Python读写 Pycharm 破解 session re sqlit3 生成式 其他 Prism 富文本 CSS Nginx 部署 请求头 抓包 协议 selenium Ubuntu 宝塔 AI Comfy-ui ollama dify open-webui Git docker
Ubuntu部署Django项目 (Nginx+uwsgi)
张建行 2022年4月17日 08:54 72 文章标签: Django ORM Nginx 部署

  1. 将本地环境打包成requirements.txt文件并上传之服务器。

pip freeze >requirements.txt(在项目下执行命令,将本地环境打包)

pip install -r requirements.txt(在服务器上执行命令,安装这些包)

  1. ------更新本地包---------

sudo apt-get update

  1. ------更新pip版本---------

pip install --upgrade pip

  1. ------安装SSH---------

sudo apt-get install openssh-server

  1. ------安装 Nginx---------

sudo apt-get install nginx

  1. ------安装 uwsgi---------

sudo pip install uwsgi

  1. 测试uwsgi

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
return b'hello World'

1.Vim test.py 打开test.py

2.按下 i 键 进入文件的编辑模式,然后将内容复制进去,检查内容是否正确。

3.然后按下 Esc 键,退出编辑模式。

4.连续按Shift + Z + Z保存退出。

uwsgi --http :8000 --wsgi-file uwsgi.py(注意-http后面一定要加空格,另外端口一定要在服务器的安全组规则中开放这个端口。)

安装好Nginx和Uwsgi之后,一定要先测试这两个包能够正常使用,如果能正常访问,再执行下面的步骤。

  1. -------修改django项目的配置文件-----------

DEBUG = False(线上的项目一定要修改成False)
 
ALLOWED_HOSTS = ["*"]
 
在服务器上搭建数据库,并将项目的数据库配置改为远程数据库配置。
 
DATABASES = {
 
    'default': {
 
        'ENGINE': 'django.db.backends.mysql',
 
        'NAME': 'blog_django',
 
        'HOST': '114.116.83.180',
 
        'USER': 'root',
 
        'PASSWORD': ,
 
        'PORT': 3306
 
    }
 
}

-------静态文件-----------

说明:STATIC_ROOT必须设置,而且和STATICFILES_DIRS不能共存

在django的setting文件中,添加下面一行内容:

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

然后运行(收集admin后台的静态文件,如果不收集,将来访问linux的blog的admin将没有样式): python  manage.py  collectstatic

  1. 配置完成,将项目上传到Linux系统中

  2. 为你的项目创建一个uwsgi的配置文件,统一命名为uwsgi.ini,可以放在任意位置,但是为了方便查找,统一设置在项目根目录下。

[uwsgi]
# Django-related settings
# uwsgi这个服务监听的是9001端口,如果nginx想要向uwsgi转发请求,那么nginx必须使用8000端口发送请求。
socket = 127.0.0.1:9001
# 项目绝对路径(需要自己设置)
chdir           = /root/project/testweb
# Django的wsgi文件相对路径(不要写绝对路径,自己设置)
wsgi-file       = testweb/wsgi.py
# process-related settings
# master
master          = True
# 最大进程数
processes       = 6
# 线程数
threads         = 3
#设置此参数,有一个主进程
master=True
#守护进程的方式运行,log日志存在此log文件里
daemonize=/var/log/uwsgi/blog_project.log
#主进程id写入文件里
pidfile= /var/log/nginx/uwsgi.pid
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
#退出时,清理环境
vacuum          = True
reload-mercy    = 10
# 服务 5000 个请求后重生进程
max-requests    = 5000
limit-as        = 512
buffer-size     = 30000
 
# 让uwsgi服务重启,以后修改python文件都会立刻生效。
py-autoreload=1
  1. ----进入/etc/nginx/conf.d文件夹下创建django_nginx.conf文件(文件名称自定义,后缀必须是.conf)------

server {
# listen 是nginx服务监听的端口,如果用户想要访问后台项目,请使用8000端口。该端口可以自定义。
# uwsgi的端口是供内部各个服务使用的。Nginx的端口是供用户使用的。
    listen         8000; (这个端口就是浏览器访问项目使用的端口,必须在服务器开放这个端口。)
    server_name    127.0.0.1
    access_log      /var/log/nginx/logindemo_access.log;
    error_log       /var/log/nginx/logindemo_error.log;
       charset     utf-8;
    client_max_body_size 75M;
    root /aproject/blog_project;(需要自己改)
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:9001;(一定要和uwsgi.ini监听的端口保持一致)
        uwsgi_read_timeout 60;
    }  
    location /static/ {
        expires 30d;
        autoindex on;
        add_header Cache-Control private;
        alias /aproject/blog_project/static/;(需要自己改)
     }
 }


  1. 重启nginx

sudo  service  nginx  restart(start/stop/status)

  1. ----通过uwsgi运行django项目------

uwsgi --ini 配置文件的路径(uwsgi.ini)

  1. 再次通过浏览器访问项目.出现界面则表示部署正确

  2. ----------------问题-------------------

  3. uwsgi遇到ImportError: No module named django.core.wsgi问题

通过在wsgi.py里面打印sys.path发现是因为path里面并没有包含该安装的site-packages的路径,因此在wsgi.py添加如下语句

sys.path.append('/usr/lib/python2.7/site-packages') 

sys.path.append('/usr/lib64/python2.7/site-packages')

  1. 如果访问出现500错误

先运行本地项目,将DEBUG=True,这样可以发现具体的错误信息,如果本地项目可以正常运行了,再将项目重新放到服务器中运行。

  1. netstat -ap | grep 8080  查看8080端口是谁在使用

  2. kill -9 pid号  强制关闭占用端口的程序

  3. netstat -ntlp 查看所有端口