美文网首页
python django blog 下: 部署与优化

python django blog 下: 部署与优化

作者: dc630f46ee2d | 来源:发表于2017-11-19 16:42 被阅读0次

    前言

    所有步骤全部参考http://zmrenwu.com/post/2/ 自己结合自己的电脑和主机的差异性做个笔记而已,最好去看原版教程

    搭建服务器

    远程登录服务器

    我使用的是搬瓦工vps作为自己的服务器,进入搬瓦工的可视化后台管理查看服务器后台ip和ssh端口号,在自己的电脑上使用命令行SSH(一种网络协议,用于计算机之间的加密登录)来登录我们的服务器。这里使用的系统是Ubuntu64位。

    ssh root@65.49.224.37 -p 26421
    

    第一次连接会如下显示

    The authenticity of host '[65.49.224.37]:26421 ([65.49.224.37]:26421)' can't be established.
    ECDSA key fingerprint is SHA256:TbDf02szpEtziV/5YYuzdI9iLgWSf3mQM+F5OyDvOHE.
    Are you sure you want to continue connecting (yes/no)? yes
    

    因为这是第一次登录,ssh无法判断远程的服务端是否是正确的,在这里如果有人中间截获了你的登录请求,并且模拟ssh服务端的话,你的密码就会泄漏(中间人攻击),所以ssh会询问你:远程服务端的指纹是:xxxx,是不是确定登录。
    选择yes,ssh会把该服务端的信息存到本地的~/.ssh/known_hosts文件中,那么下次登录就不会再询问了.

    之后,会弹出要求你输入远程服务器的root账号的密码

    root@65.49.224.37's password: 
    

    如果忘记了,可以在搬瓦工可视化管理后台重新设置一下


    屏幕快照 2017-11-19 下午3.00.26.png

    然后回到自己的电脑命令行输入刚才设置的root账号密码,此后命令行变成下面这样,表示成功登录远程服务器

    root@ubuntu:~#
    

    此后我们对服务器的所有操作都通过这种方式进行

    安装软件

    使用root账户直接操作不太安全,我们首先要创建一个有超级权限的新用户。按照教程输入即可。

    # 在 root 用户下运行这条命令创建一个新用户,zhou 是用户名
    # 我取的用户名是 zhou
    # 选择一个你喜欢的用户名,不一定非得和我的相同
    root@localhost:~# useradd -m -s /bin/bash zhou
    
    # 把新创建的用户加入超级权限组
    root@localhost:~# usermod -a -G sudo zhou
    
    # 为新用户设置密码
    # 注意在输密码的时候不会有字符显示,不要以为键盘坏了,正常输入即可
    root@localhost:~# passwd zhou
    
    # 切换到创建的新用户
    root@localhost:~# su - zhou
    
    # 切换成功,@符号前面已经是新用户名而不是 root 了
    zhou@localhost:~$
    

    在mac下我们使用homebrew包管理工具来安装软件,对于ubuntu 也有一个类似的软件工具叫apt-get.使用它可以方便的在命令行安装各种软件。

    如果是新服务器的话,最好先更新一下系统,避免因为版本太旧而给后面安装软件带来麻烦。运行下面的两条命令

    zhou@localhost:~$ sudo apt-get update
    zhou@localhost:~$ sudo apt-get upgrade
    

    然后,安装需要的软件

    zhou@localhost:~$ sudo apt-get install nginx
    zhou@localhost:~$ sudo apt-get install git python3 python3-pip
    zhou@localhost:~$ sudo pip3 install virtualenv
    

    注意这里安装python3-pip可能会出现错误.即安装后使用pip3命令不能成功执行sudo pip3 install virtualenv

    zhou@ubuntu:~$ sudo sudo pip3  isntall virtualenv
    Traceback (most recent call last):
      File "/usr/bin/pip3", line 5, in <module>
        from pkg_resources import load_entry_point
      File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2708, in <module>
        working_set.require(__requires__)
      File "/usr/lib/python3/dist-packages/pkg_resources.py", line 686, in require
        needed = self.resolve(parse_requirements(requirements))
      File "/usr/lib/python3/dist-packages/pkg_resources.py", line 584, in resolve
        raise DistributionNotFound(req)
    pkg_resources.DistributionNotFound: pip==1.5.4
    

    出现这种情况后 我打算先卸载pip3

    sudo apt-get remove python3-pip
    

    依然无效。最后发现是ubuntu12.04版本太老了,找不到pip3源。请教网友后换了ubuntu16.04。再次进入搬瓦工可视化节目,install new os选ubuntu14的版本。

    购买域名

    在阿里云可以方便的买一个域名,只是为了测试,随便注册一个域名即可,一些非常见后缀的域名非常便宜,一般 10元/年就能搞定。但注意一点根据工信部规定,以下后缀的域名需要实名认证后才能使用:

    .cn/.com/.net/.top/.xyz/.vip/.club/.ren/.wang/.shop/.xin/.中国/.信息/.公司/.网络/.广东/.佛山

    这通常需要花费几天的时间。所以如果只为了测试和学习部署的话,最好避开上述后缀的域名。域名的作用是绑定空间后用户不需要通过ip地址就可以访问,现在我们来绑定空间。

    进入阿里云个人账户后台,查看到自己购买的域名


    屏幕快照 2017-11-19 下午4.27.39.png

    弹出页面点击快速设置解析


    屏幕快照 2017-11-19 下午4.28.58.png
    弹出页面输入服务器ip地址
    屏幕快照 2017-11-19 下午4.29.16.png

    启动 Nginx 服务

    yangxg@localhost:~$ sudo service nginx start
    

    部署

    部署前项目设置

    Django 项目中会有一些 CSS、JavaScript 等静态文件,为了能够方便地让 Nginx 处理这些静态文件的请求,我们把项目中的全部静态文件收集到一个统一的目录下,这个目录通常位于 Django 项目的根目录,并且命名为 static。为了完成这些任务,需要在项目的配置文件里做一些必要的配置:

    blogproject/settings.py
    
    # 其他配置...
    
    STATIC_URL = '/static/'
    # 加入下面的配置
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    

    BASE_DIR 是项目根目录,我理解就是manage.py所在目录

    为了安全起见,在生产环境下需要关闭 DEBUG 选项以及设置允许访问的域名。打开 settings.py 文件,找到 DEBUG 和 ALLOWED_HOSTS 这两个选项,将它们设置成如下的值:

    blogproject/settings.py
    
    DEBUG = False
    ALLOWED_HOSTS = ['127.0.0.1', 'localhost ', '.zhoublog.kim']
    

    项目还会依赖一些第三方 Python 库,为了方便在服务器上一次性安装,我们将全部依赖写入一个叫 requirements.txt 的文本文件中。激活本地的虚拟环境(如果你使用了虚拟环境的话),并进入项目的根目录,运行 pip freeze > requirements.txt 命令:

    (blogproject_env) C:\Users\zhou\Workspace\blogproject>
    pip freeze > requirements.txt
    

    这里解释一下pip freeze是列出当前虚拟环境下的所有的第三方库。其实也是我们工程的所有依赖。> 是一个重定向命令会在用户当前目录下创建一个文件,并把第三方库写入到这个文件里面。

    总结 在blogproject/settings.py中配置STATIC_ROOT,DEBUG,ALLOWED_HOSTS。将虚拟环境的第三方库倒入到根目录下requirements.txt。

    设置服务器目录结构

    sites/ 可以放不同的网站,www.zhoublog.kim/ 所有资源和代码都放在这里,下面有两个目录,一个是虚拟环境目录,存放虚拟环境,另外一个是我们的工程

    /home/zhou/
        sites/
            www.zhoublog.kim/
                env/
                detail/
    
    1. 创建如下目录
    /home/zhou/
        sites/
            www.zhoublog.kim/
    

    使用下面这样的命令

    cd ~ 
    mkdir -p sites/www.zhoublog.kim
    

    -p代表递归,会递归的创建sites 和它的子目录。不用-p 无法递归创建,要依次创建如下。

    cd ~ 
    mkdir sites
    cd sites
    mkdir www.zhoublog.kim
    
    1. www.zhoublog.kim/目录下创建虚拟环境env/
    cd ~/sites/www.zhoublog.kim
    virtualenv --python=python3 env
    

    virtualenv 是工具名,--python=python3 来指定克隆 Python3 的环境,env为创建的虚拟环境目录(实际名字可以随意)
    创建完后要检查是否成功创建了虚拟环境目录。可以使用ls,看到当前目录下有一个env 表示创建成功

    1. 使用git clone 命令将代码从github上clone下来
    cd  ~/sites/www.zhoublog.kim
    git clone git@github.com:rookie250/detail.git
    

    会clone一个工程,工程名叫detail

    相关文章

      网友评论

          本文标题:python django blog 下: 部署与优化

          本文链接:https://www.haomeiwen.com/subject/grgsvxtx.html