Django框架博客搭建(下)

本文介绍基于阿里云centOS7的Django框架博客搭建(下)

本文为Django框架博客搭建的优化操作,阅读此文先阅读上篇文章:https://blog.csdn.net/qq_37266079/article/details/104229951

简介

上篇文章已经可以正常运行项目,并且通过浏览器可以访问我们的站点,现在要使用一些工具来优化我们的项目:

  • gunicorn:Gunicorn (独角兽)是一个高效的WSGI Server,通常用它来运行 web应用程序(也就是我们的blog项目)
  • nginx:Nginx作为一个高性能Web服务器,具有负载均衡、拦截静态请求、高并发…等等许多功能
  • supervisor:Supervisor是一套通用的进程管理程序,能将一个普通的命令行进程变为后台守护进程,并监控进程状态,异常退出时能自动重启。

你可能还是对他们之间的关系不太了解,请看下图:

可以看到三者的关系是:

  • Gunicorn 用来和我们的web程序进行交互的
  • nginx负责和客户端交互,使其可以找到我们的Gunicorn
  • supervisor用来启动Gunicorn

值得一提的是:

  • nginx其实是为了提高我们服务器的的并发能力的,客户端之间访问Gunicorn开启的我们的web服务器端口也可以访问到我们的项目,nginx相当于一个接客的,通过配置nginx也可以提高我们网站的安全性。

接下开始三者的安装和配置:

一、Gunicorn 的安装和配置

Gunicorn安装:

source ~/python/env/djangoblog/bin/activate
pip install gunicorn

创建Gunicorn的运行文件(文件位置任意)

vim /root/python/gunicorn_start.sh

贴入如下内容:

#!/bin/bash

NAME="DjangoBlog"
DJANGODIR=/root/DjangoBlog/DjangoBlog #Django project directory
USER=root # the user to run as
GROUP=root # 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 /root/python/env/djangoblog/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH

# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR

# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /usr/local/python3/bin/gunicorn -b 0.0.0.0:8000 ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--log-level=debug \
--log-file=-

/root/DjangoBlog/DjangoBlog是你的博客项目所在位置,USER和GROUP都写成root,/root/python/env/djangoblog/bin/activate是你的python虚拟环境位置,0.0.0.0:8000表示在本地的8000端口监听所有ip的访问。/usr/local/python3/bin/gunicorn是你的gunicorn可以执行程序的位置,如果安装后不知道他放在哪里可以通过find / -name gunicorn命令来查找他的位置(这里可以看到有两个gunicorn,一个是python2的一个是python3的,我们这里用的是python3的)。
在这里插入图片描述
增加可执行权限:

chmod +x /root/python/gunicorn_start.sh

直接在你的终端上运行:

/root/python/gunicorn_start.sh

如果有看到以下内容,说明你gunicorn配置成功了
在这里插入图片描述
同时可以在外部浏览器访问你的服务器8000端口也可以看到你的博客首页:
在这里插入图片描述

二、nginx的安装和配置

nginx安装:

sudo yum install nginx 

正常直接yum安装就行,但是有些可能找不到安装源,那你你可以直接源码安装:

1.安装编译安装所需要的依赖
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

2.下载Nginx
yum install -y wget
wget https://nginx.org/download/nginx-1.14.0.tar.gz

3. 解压
tar zxf nginx-1.14.0.tar.gz
cd nginx-1.14.0

4. 编译安装(默认设置)
./configure 
make && make install

rpm -qi nginx命令可以查看你的nginx的安装信息
在这里插入图片描述
rpm -ql nginx命令可以查看你的nginx的配置文件的位置

nginx的配置文件修改:

vim /etc/nginx/nginx.conf

第一行的user后面的值改成root(没有改的话,可能会遇到权限不足的问题)

接着在http{ }块里面加上以下内容:

server {

    listen 5200;
    server_name www.xxxx.top;
    root /root/DjangoBlog/DjangoBlog/;

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

    location /static/ {
        alias /root/DjangoBlog/DjangoBlog/collectedstatic/;
        expires max;
        access_log        off;
        log_not_found     off;
    }
    location /media {
        # 静态文件配置
        alias /root/DjangoBlog/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;
        }
    }

}

/root/DjangoBlog/DjangoBlog/ 换成你的Django博客的项目目录,8000是你的在gunicorn配置的监听端口。(/collectedstatic/和/uploads/不用动),server_name 是你的域名,没有的话就把server_name这一栏删掉 我这里nginx监听的是5200端口,本来正常应该是要监听网站默认的80端口的,但是由于我的域名还没有备案,所以不能通过域名访问我的服务器的80端口,所以这里随便换了一个其他端口5200

我的完整/etc/nginx/nginx.conf配置文件如下:


user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    server {

    listen 5200;
    server_name www.wengmq.top;
    root /root/DjangoBlog/DjangoBlog/;

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

    location /static/ {
        alias /root/DjangoBlog/DjangoBlog/collectedstatic/;
        expires max;
        access_log        off;
        log_not_found     off;
    }
    location /media {
        # 静态文件配置
        alias /root/DjangoBlog/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;
        }
    }

}


        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

}

指定配置文件的方式启动nginx

nginx -c /etc/nginx/nginx.conf


正常启动nginx之后,我们可以通过netstat -ntlp,看到服务器已经在监听5200端口了
在这里插入图片描述
在gunicorn启动的情况下,你也可以通过浏览器访问服务器的5200端口,也可以看到你的博客首页了

三、supervisor的安装和配置

supervisor 安装:

sudo yum install supervisor

同样的通过rpm -ql supervisor命令查看supervisor的配置文件位置

修改supervisor配置文件:

vim /etc/supervisord.conf

在最后一行加入以下内容:

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

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

这里的/root/python/gunicorn_start.sh就是你的启动文件的位置。
通过配置文件启动supervisor,这时就会自动启动你的gunicorn来监听你的Django博客项目的8000端口

supervisord -c /etc/supervisord.conf

这里我遇到了Supervisor启动错误信息:

pkg_resources.DistributionNotFound: The 'supervisor==3.2.0' distribution was

解决方法:
这是由于我把ubuntu的python默认环境改成3.6的了,其实再改回2.7就好了

接下来再开启你的nginx就大功告成了

综上所述

以上全部配好了,开启你的博客项目只需只需以下的命令,就可以通过nginx监听的端口5200来访问你的博客首页了:

supervisord -c /etc/supervisord.conf && nginx -c /etc/nginx/nginx.conf
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值