django部署


本篇文章记录部署DjangoBlog项目,首先介绍下基本环境:

  • 系统是Ubuntu 22.04 64位
  • 假设你的域名是www.yonth.asia。
  • python虚拟环境目录在 ~/home/project/djangoblog/venv1
  • djangoblog源码位置在 ~/home/project/djangoblog
  • 登入用户server
  • 编辑器使用vim,你可以使用你喜欢的编辑器。

另外请注意,尽量不要使用root用户来部署,如果要使用root用户的话,需要使collectedstatic目录所有用户都有读权限。

准备工作

升级系统

首先需要升级系统到最新版,终端下执行:

sudo apt update
sudo apt upgrade -y

待完成更新之后,建议重新启动下系统,再进行后面的操作。终端下执行:

sudo reboot

待系统启动后,可以开始安装依赖的mysql以及python环境了。

安装python3.10版本

安装mysql,我默认的是最新版,8.0.36

接下来需要设置python的虚拟环境,终端下执行:

cd /home/project/
mkdir -p  python/env && cd python/env
sudo apt-get update
sudo apt-get install python3-virtualenv
virtualenv -p /usr/bin/python3 djangoblog
source djangoblog/bin/activate

拉取git项目代码

下面开始安装djangoblog运行所需要的依赖,终端下执行:

pip install -Ur requirements.txt

gunicorn 配置 安装,终端下执行:

pip install gunicorn

配置,终端下执行:

vim ~/python/gunicorn_start.sh

贴入如下内容:

#!/bin/bash

NAME="djangoblog"
DJANGODIR=/home/server/python/djangoblog #Django project directory
USER=server # the user to run as
GROUP=server # the group to run as
NUM_WORKERS=1 # how many worker processes should Gunicorn spawn
DJANGO_SETTINGS_MODULE=djangoblog.settings # which settings file should Django use
DJANGO_WSGI_MODULE=djangoblog.wsgi # WSGI module name

echo "Starting $NAME as ``whoami``"

# Activate the virtual environment
cd $DJANGODIR
source /home/project/python/env/djangoblog/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH

# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /home/project/python/env/djangoblog/bin/gunicorn  ${DJANGO_WSGI_MODULE}:application \\
--name $NAME \\
--workers $NUM_WORKERS \\
--user=$USER \\
--log-level=debug \\
--log-file=-

注意,将该文件中的server修改成你自己的用户,如果是root用户的话,也要将/home/server修改为/root。

同时,将djangoblog/settings.py中的DEBUG = True修改为DEBUG = False。

增加可执行权限:

chmod +x ~/python/gunicorn_start.sh

执行:

cd .. ./gunicorn_start.sh

nginx配置 终端下执行:

删除默认配置

sudo rm /etc/nginx/sites-enabled/default sudo vim /etc/nginx/sites-enabled/djangoblog.com.conf

贴入如下内容:

server {

    listen 80;
    server_name www.djangoblog.com;
    root /home/project/python/djangoblog/;

    access_log /var/log/nginx/django_access.log;
    error_log /var/log/nginx/django_error.log;

    location /static/ {
        alias /home/project/python/djangoblog/collectedstatic/;
        expires max;
        access_log        off;
        log_not_found     off;
    }
    location /media {
        # 静态文件配置
        alias /home/project/python/djangoblog/uploads/;
        expires max;
    }
    location ~ \\.py$ {
        return 403;
    }

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://127.0.0.1:8000;
            break;
        }
    }
}

保存并退出。重启nginx:

sudo /etc/init.d/nginx restart

配置Supervisor 终端下执行:

sudo vim /etc/supervisor/conf.d/djangoblog.conf

贴入如下内容:

[program:djangoblog]
command = /home/project/python//gunicorn_start.sh
user = server
autostart=true
autorestart=true

redirect_stderr = true
stdout_logfile = /var/log/djangoblog.log
stderr_logfile=/var/log/djangoblog.err

同样,需要将server修改成你自己等用户名. 保存成功后继续执行:

sudo supervisorctl update
sudo supervisorctl reload 
sudo /etc/init.d/memcached restart && sudo /etc/init.d/nginx restart

django的部分配置 你需要配置settings.py中的ALLOWED_HOSTS,如果你想要使用https的话,还需要配置CSRF_TRUSTED_ORIGINS,代码是在:settings.py

至此,全部完成。你可以通过你的浏览器访问http://www.djangoblog.com了。 更多配置相关可以参考: https://github.com/liangliangyy/djangoblog/blob/master/docs/config.md。这里就不再赘述了。

重启服务
使用netstat

netstat -tulnp | grep :8000

或者使用lsof

lsof -i :8000

杀死进程

kill -9 1234

修改端口号

修改nginx监听端口后重启nginx,发现公司电脑访问不了,一顿捣鼓。。。 然后用手机访问了一下,通了!!! 公司屏蔽端口了。