大虾

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

django常见的部署方式有linux下的uwsgi + nginx 和 gunicorn + nginx ,当然,也有windows下的IIS + Fastcgi 和 Apache + Fastcgi。windows就不提了,除非刚需,不然谁会使用windows server呢?而相比uwsgi,gunicorn更为快捷、简单。

操作系统: ubuntu 18
python: 3.8.12
django: 2.2

详细的就不讲了,其实各个软件都差不多。

准备工作

准备工作往往就令人秃头,如果是CentOS7或以下,系统默认Python2.x,sqlite默认3.7,单纯的环境配置就能让我这样的小白浪费几天时间了。就安装个python3.8就让我吐血。幸好,这次操作系统是ubuntu,这个就容易搞了。

  • 安装Pyton3.8

项目指定python3.8,ubuntu上安装也挺容易的,至少不需要编译安装那么苦逼。

1、更新源

apt update

2、安装

apt install python3.8

3、检查python
现在系统上默认的是python3.6,python指向该版本,pip则无任何指向,查了目录,压根就没安装。

4、安装pip

本想直接通过get-pip.py文件为来python3.8安装pip,发现安装不上,一通提示后,通过apt install python3-pip安装了pip,不过坑爹的,当前Python3指向了python3.6,所以毫无悬念,安装的pip也是python3.6的。

此时,再次通过get-pip.py文件为python3.8安装,安装成功了,pip3.8指向了python3.8,不过pip3的软件不知道为何失效了。

得,干脆,将Python3 和 pip3 都指向python3.8吧,反正也用不上python3.6。

5、设置软链

root@JygPXn4713:~# which python3
/usr/bin/python3
root@JygPXn4713:~# which python3.8
/usr/bin/python3.8
root@JygPXn4713:~# 

先拿到Pyton3.8 路径和 软链python3 的路径,此时的python3是指向python3.6的,可以通过 ll查看。 直接删除/usr/bin/python3,也可以备份一下比如将python3重命名为python3.bak。最后设置:

ln -s /usr/bin/python3.8 /usr/bin/python3

同样的方法,为pip设置软链

ln -s /usr/local/bin/pip /usr/local/bin/pip3

拉取项目代码

python环境安装好,就在系统上找个地方来放源码吧,拉取后需要注意的是当前账号的权限问题,比如数据库文件夹的权限,static和media的权限问题,非root的账号在这些文件夹上的权限可能是700,并不拥有写入的权限。这是题外话了。虚拟环境、安装库之类的就省略了吧。直接进入到今天的主题。

安装即配置gunicorn

和uwsgi一样,gunicorn是python的库,直接pip安装就好,之后需要进行以下操作

1、在django的settings中添加

2、在项目根目录编写配置文件

测试什么的就算了吧,直接干配置文件,而且也超简单,配置文件命名为gunicorn_conf.py 当然,随便都行,但必须得是py文件。

import os
import multiprocessing

bind = '127.0.0.1:8000'
# 守护进程 后台运行
daemon = 'true'
timeout = 60
workers = multiprocessing.cpu_count() * 2 + 1
threads = 2
loglevel = 'info'
access_log_format = '/home/www/ins_ment/log/gunicorn_access.log'
errorlog = '/home/www/ins_ment/log/gunicorn_error.log'

其实配置和uwsgi差不多,无非在本机什么端口运行,是否守护进程,超时了咋办,进程数和线程数,日志输出等等。

3、启动gunicorn

网上将命令和配置的文章挺多,这里记录以下启动的命令,先cd到配置文件所在目录

gunicorn -c gunicorn_conf.py ins_manager.wsgi:application

解释一下
-c 参数 使用配置文件来启动
gunicorn_conf.py 这是要使用的配置文件
ins_manager.wsgi 项目的wsgi文件

启动后,其实就可以访问了,通过ip或域名 + 8000端口就ok,不过静态资源可能访问不到,gunicorn和uwsgi一样,对静态资源不太感冒,得依赖nginx,接下来有请Nginx。

安装和配置nginx

nginx的基础配置其实更容易,小项目压根用不到nginx牛逼的地方。值得提的是,nginx配置文件的几个地方:

这几个地方,理论上都可以配置,1,也就是nginx.conf应该是主配置文件,它会加载2和3下的配置文件。当然,具体得看nginx.conf里面的设置:


这几行include代码决定了配置文件的工作方式。

作为小白,就选择conf.d目录下做配置吧,来!创建一个牛逼的名称, django.conf。后缀得是.conf,主配置文件说了只读取后缀是conf的文件。上菜:

server {
    charset utf-8;
    listen 80;
    server_name www.baidu.com 114.114.114.8;   # 举个例子而已填写域名或IP就ok,也可以是二级域名,如 niubi.baidu.com,

    location /static {
        alias /home/ins/ins_ment/online_static;
    }
    location /media {
        alias /home/ins/ins_ment/media;
    }

    location / {
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:8000;
    }
}
  • location /

将server_name 的动态请求转发到127.0.0.1:8000,这个服务是gunicorn启动的。

  • location /static

拦截、处理请求中含有static的请求,并/home/ins/ins_ment/online_static中寻找相关静态资源,这个目录是django settings.py中的STATIC_ROOT

  • location /media

原理同上。

最后,启动或重启一下nginx

service nginx start
service nginx restart

其他可能存在的问题

如果不使用docker部署,理论上,不管多么简单的部署方式,都会有无数个问题,往往为了解决一个小问题,会捅破天。

1、依赖问题

比如python环境中,有蛮多依赖的,网上都有说,在安装python时,能装的都给装上吧

2、版本问题

比如django2.x对mysql操作库的兼容问题,需要手动修改源码之类的操作,再比如百度编辑器对python3的支持貌似也不是很好,也需要手动修改源码。

3、权限问题

对Linux不熟悉的话,权限问题会很让人秃头,普通用户sudo来sudo去的,最后权限出了问题,导致运行出错。最常见的sqlite3的读写权限、log文件的读写权限等等。

最后

其实,主要自己牛逼了或者搜索用得好,什么问题不是问题啦。

posted on 2022-06-15 23:27  一灯编程  阅读(107)  评论(0编辑  收藏  举报