开发 Tips(4)

主要记录最近遇到的一些开发问题,解决方法。

1. WhiteNoise 转发静态文件

Django 内置的静态文件服务器效率很低,而 WhiteNoise 是一个不错的替代品。具有如下特点:

  • 通常用于 PaaS 服务
  • 支持 wsgi 应用程序,针对 Django 进行了特殊适配
  • 配合 CDN 使用,更佳
  • 在 Gunicorn 配合下,使用 sendfile 系统调用,处理效率非常高
  • 相比于 Nginx,WhiteNoise 提供静态文件服务的方式更加简单,但效率只有 Nginx 的 15%

2. 记录 Django 模型修改历史

  • django-simple-history原理:每个需要追踪的模型都需要单独创建一张表,修改实例时,在表中直接新建一条记录。
  • django-reversion原理:当模型数据发生修改时,将修改序列化到 Version 表中。仅需要一张表,就可以记录全部修改记录。

3. CentOS 升级 Docker 版本

  • 卸载旧版本的Docker
  • 1
    2
    3
    4
    5
    6
    
    $yum remove docker \
                docker-common \
                container-selinux \
                docker-selinux \
                docker-engine \
                docker-engine-selinux
    

    保存在 /var/lib/docker/ 的镜像、容器、数据、网络都会被保留。

  • 安装依赖
  • 1
    
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
  • 安装 Docker
  • 1
    2
    3
    
    yum-config-manager \
      --add-repo \
      https://download.docker.com/linux/centos/docker-ce.repo
    
    1
    
    yum makecache fast
    
    1
    
    yum install docker-ce
    

    4. 远程控制工具 - TeamViewer

    由于,目前(2018.11)Mac OS X 的 QQ 不支持远程协助。推荐另外一个远程控制软件:TeamViewer 兼容于 Microsoft Windows、Mac OS X、Linux、iOS、Android 操作系统,也可以通过网页浏览器连线已安装 TeamViewer 的计算机。

    5. Linux 新增交换分区文件

    查看当前分区情况

    1
    
    free -m
    

    增加 swap 大小,2G 左右

    1
    
    dd if=/dev/zero of=/var/swap bs=1024 count=2048000
    

    设置交换文件

    1
    
    mkswap /var/swap
    

    立即激活启用交换分区

    1
    
    swapon /var/swap
    

    添加系统引导时自启动运行

    1
    
    vi /etc/fstab
    

    添加一行

    1
    
    /var/swap       swap      swap     defaults   0   0
    

    至此,CentOS 增加 Swap 分区大小,完成。收回 swap 空间

    1
    
    swapoff /var/swap
    

    从文件系统中回收

    1
    
    rm /var/swap
    

    6. CentOS 7 安装 minikube

    新增安装源:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    cat <<'EOF' > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOF
    

    开始安装:

    1
    2
    3
    4
    
    yum -y install kubectl
    wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 -O minikube 
    chmod +x minikube
    mv minikube  /usr/local/bin/
    

    Linux 下 minikube 支持两种虚拟机 VirtualBox 和 KVM。但如果,你使用的是云服务器,无法开启 CPU 的虚拟化功能,可以使用使用宿主机的 Docker 环境。

    1
    
    minikube start --vm-driver=none
    

    参考文章。

    7. CentOS 7 安装指定版本的 Docker

    新增 Aliyun 的 docker-ce 源

    1
    2
    
    yum install -y yum-utils
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    

    查看可选的 docker-ce 版本

    1
    2
    3
    4
    5
    6
    
    yum list docker-ce --showduplicates
    
    docker-ce.x86_64                                                                                                           17.03.3.ce-1.el7                                                                                                                   docker-ce-stable
    docker-ce.x86_64                                                                                                           18.06.3.ce-3.el7                                                                                                                   docker-ce-stable
    docker-ce.x86_64                                                                                                           3:18.09.9-3.el7                                                                                                                    docker-ce-stable
    docker-ce.x86_64                                                                                                           3:19.03.8-3.el7                                                                                                                    docker-ce-stable
    

    安装指定版本的 docker-ce

    1
    
    yum install  -y docker-ce-19.03.8-3.el7
    

    启动

    1
    2
    
    systemctl start docker
    systemctl enable docker