Django博客项目部署nginx

Django博客项目通过nginx部署到Ubuntu系统方法和其中遇到的问题汇总

1、更改项目文件

  1.1 静态文件html中的导入静态目录一定要是 {% load static %} ,不能是 {% load staticfiles %}

  1.2 setting文件修改,修改内容如下:

    DEBUG = False   #修改为False 正式项目不能为True

    ALLOWED_HOSTS = [‘*‘] #修改为允许所有ip访问

    # 设置静态资源路径
    STATIC_URL = ‘/static/‘

    # 设置图片访问的统一路由
    MEDIA_URL=‘/media/‘

    # 静态文件收集目录(需要运行nginx执行collected_static静态文件收集目录)
    STATIC_ROOT = os.path.join(BASE_DIR, ‘collected_static‘)

  1.3 urls文件修改

    # 图片访问的路由
    from django.conf import settings
    from django.conf.urls.static import static

    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

2、提交到gitee上

  提交到gitee方法不多做解释

3、配置Ubuntu系统

  3.1 

    为了防止系统太旧引起的各种麻烦,先升级一下库的版本:

    ~$ sudo apt-get update
    ~$ sudo apt-get upgrade
   

    完成之后,接着安装需要的几个包:

    ~$ sudo apt-get install nginx
    ~$ sudo apt-get install python
    ~$ sudo apt-get install python-pip
    ~$ sudo apt-get install git
    ~$ sudo pip install virtualenv
    分别安装了 nginx、python3、pip、git、virtualenv。其中 python3 和 pip3 的写法是因为阿里云自带了 Python2.7,把它们区分一下。之前开发时虚拟环境用的 python 自带的,为了避免读者的版本不同造成的各类错误,稳妥起见用 virtualenv 库来创建虚拟环境,操作步骤都是差不多的。

4、从gitee上拉取Django博客项目

  

    需要注意的是,虚拟环境一般是需要在服务器上重新生成的,因此我们需要把开发中用到的库列一个清单,以便在服务器上统一安装。在本地虚拟环境中输入:

    pip freeze > requirements.txt

    项目中就多了个 requirements.txt 文件,里面记录了项目需要的库的清单。

    给项目代码创建目录并进入此目录:

    

   ~$ mkdir -p /home/sites/myblog.com
   ~$ cd /home/sites/myblog.com
   目录位置是随便你的,但建议找个地方统一管理所有的网站项目。
    然后从 GitHub 中拉取项目代码:
  ../myblog.com$ git clone 这里填博客的gitee地址
   完成之后可以输入 ls 指令,看看代码文件夹是否正常生成了。
 

5、安装博客所需环境

  

    接着在服务器生成虚拟环境:

    ../dusaiphoto.com$ virtualenv --python=python3.5 env
    ../dusaiphoto.com$ source env/bin/activate
    (env) ../dusaiphoto.com$

    这里用 virtualenv 生成并激活了虚拟环境。python 版本选择 3.5 还是 3.7 都可以,区别并不大。

    接下来就是安装库、收集静态资源、数据迁移了:

    (env) ../dusaiphoto.com$ cd my_blog
    (env) ../django_blog_tutorial$ pip install -r requirements.txt
    (env) ../django_blog_tutorial$ python manage.py collectstatic
    (env) ../django_blog_tutorial$ python manage.py migrate

6、安装nginx和Gunicorn 

    

     前面我们安装了 Nginx ,先来试试安装是否正常。启动 nginx 服务:

    (env) ~$ sudo service nginx start
    打开浏览器,输入你的服务器公网 IP 地址:
    Django博客项目部署nginx

 

       

      Nginx 欢迎界面出现了,神奇吧。但这个默认配置显然是不能用的,所以需要重新写 Nginx 的配置文件。进入 /etc/nginx/sites-available 目录,这里是定义 Nginx 可    用配置的地方。输入指令 sudo vi dusaiphoto.com 创建配置文件并打开 vi 编辑器:

    (env) ~$ cd /etc/nginx/sites-available
    (env) /etc/nginx/sites-available$ 
    (env) /etc/nginx/sites-available$ sudo vi dusaiphoto.com

    关于 vi 编辑器如何使用也不赘述了,这里只说两个最基本的操作:

      •       按 i 键切换到编辑模式,这时候才可以进行输入、删除、修改等操作
      •     按 Ctrl + c 退回到命令模式,然后输入 :wq + Enter 保存文件修改并退回到服务器命令行

    回到正题,用 vi 在 dusaiphoto.com 文件中写入:

    

server {
  charset utf-8;
  listen 80;
  server_name 192.168.23.128;  # 改成你的 IP
location /static { alias /home/sites/myblog.com/blog/collected_static; # 整合后的静态文件目录 } location /media { alias /home/sites/myblog.com/blog/media; #用户上传文件和图片目录 } location / { proxy_set_header Host $host; proxy_pass http://unix:/tmp/192.168.23.128.socket; # 改成你的 IP } }

  此配置会监听 80 端口(通常 http 请求的端口),监听的 IP 地址写你自己的服务器公网 IP。

  

  配置中有3个规则:

  • 如果请求 static 路径则由 Nginx 转发到目录中寻找静态资源
  • 如果请求 media 路径则由 Nginx 转发到目录中寻找媒体资源
  • 其他请求则交给 Django 处理
 如果你已经申请好域名了,就把配置中有 IP 的地方都修改为域名,比如:server_name www.dusaiphoto.com;

  写好后就退出 vi 编辑器,回到命令行。因为我们写的只是 Nginx 的可用配置,所以还需要把这个配置文件链接到在用配置上去:

  

  (env) ../sites-available$ sudo ln -s /etc/nginx/sites-available/dusaiphoto.com /etc/nginx/sites-enabled
  至此 Nginx 就配置好了,接下来搞定 Gunicorn

  Gunicorn及测试

    先回到项目所在的目录,并且进入虚拟环境,然后输入:

    

    (env) ../django_blog_tutorial$ pip3 install gunicorn
    (env) ../django_blog_tutorial$ sudo service nginx reload
    (env) ../django_blog_tutorial$ gunicorn --bind unix:/tmp/192.168.23.128.socket my_blog.wsgi:application
    

    这里的三个步骤分别是:

    • 安装 Gunicorn
    • 重启 Nginx 服务
    • 启动 Gunicorn

    启动 Gunicorn 也是一样,如果你已经有域名了,就把套接字中的 IP 地址换成域名;wsgi 字眼前面是项目的名称。另外 sudo service nginx reload 可替换成 sudo service nginx restart,区别是 reload 只重载配置文件,restart 重启整个服务。

    接下来用浏览器访问服务器试一下:

7、更新项目

  

  然后就是通过 GitHub 更新服务器代码,并且重新收集静态文件:

  (env) ../django_blog_tutorial$ git pull origin master

  (env) ../django_blog_tutorial$ python3 manage.py collectstatic


8、后期运维

  你的网站是需要不断更新优化代码的。每次修改代码后,更新到服务器上也很简单。在虚拟环境中并进入项目目录,依次(collectstatic 和 migrate 是可选的)执行以下命令:

  git pull origin master
  python3 manage.py collectstatic
  python3 manage.py migrate
  # 重启 gunicorn
  pkill gunicorn
  gunicorn --bind unix:/tmp/192.168.23.128.socket blog.wsgi:application

    如果你更改了 Nginx 的配置文件,还需要重启 Nginx 服务:

  sudo service nginx reload

总结

部署可以说是入门者最大的难关了,也是检验成果、获取成就感的关键一步。多查资料,要相信你遇到的问题别人早就遇到过了。

部署是菜鸟的毕业礼,也是新人的第一课。

 
 
 

Django博客项目部署nginx

上一篇:consul注册中心如何自动剔除下线服务


下一篇:重装系统