• 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 地址:
        

           

          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

    总结

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

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

     
     
     
    上天入地 无所不能
  • 相关阅读:
    Maven入门:使用Nexus搭建Maven私服及上传下载jar包
    idea 破解转(肉测好用,测试2018.4.16)
    使用spring-boot-admin对spring-boot服务进行监控(转自牛逼的人物)
    eureka集群高可用配置,亲测成功配置(转)
    Apollo-open-capacity-platform 微服务能力开发平台 (转)
    导入数据到数据库表,报错[Err] [Row1] [Imp] 1153
    .mmap文件如何打开
    web端自动化——webdriver驱动
    web端自动化——Remote应用
    svn服务器端—管理员分配权限
  • 原文地址:https://www.cnblogs.com/superduan/p/15096264.html
Copyright © 2020-2023  润新知