创建项目必备干货

提供了公司中常见应用环境配置以及技术点(docker, virtualenv); 另外有部署相关操作

1. virtualenv

虚拟环境可以搭建独立的python运行环境, 使得单个项目的运行环境与其它项目互不影响

  • 1.1 安装
    sudo pip install virtualenv
    sudo pip install virtualenvwrapper
    `
  • 1.2 配置环境变量
# 1、创建目录用来存放虚拟环境
mkdir 
$HOME/.virtualenvs
# 2、打开~/.bashrc文件,并添加如下:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
# 3、运行
source ~/.bashrc
  • 1.3 创建虚拟环境
    mkvirtualenv py2_flask
    mkvirtualenv -p python3 py3_flask

  • 1.4 查看虚拟环境
    workon 两次tab键
    workon py3_flask

  • 1.5 退出虚拟环境
    deactivate

  • 1.6 删除虚拟环境(需要先退出)
    rmvirtualenv 虚拟环境名称

  • 1.7 工具包安装的位置
    python2
    ~/.virtualenvs/py_flask/lib/python2.7/site-packages/
    python3
    ~/.virtualenvs/py3_flask/lib/python3.5/site-packages

  • 1.8 查看(导出)虚拟环境中安装的包
    pip freeze
    pip freeze > requirements.txt

2. docker介绍与安装操作

  • 容器技术

在计算机的世界中,容器拥有一段漫长且传奇的历史。容器与管理程序虚拟化 (hypervisor virtualization,HV)有所不同,管理程序虚拟化通过中间层将一台或者多台独立 的机器虚拟运行与物理硬件之上,而容器则是直接运行在操作系统内核之上的用户空间。因 此,容器虚拟化也被称为“操作系统级虚拟化”,容器技术可以让多个独立的用户空间运行 在同一台宿主机上。

  • Docker组件
    • Docker 客户端和服务器
      Docker 是一个客户端-服务器(C/S)架构程序。Docker 客户端只需要向 Docker 服务器 或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker 提供了 一个命令行工具 Docker 以及一整套 RESTful API。你可以在同一台宿主机上运行 Docker 守护 进程和客户端,也可以从本地的 Docker 客户端连接到运行在另一台宿主机上的远程 Docker 守护进程。

    • Docker镜像
      镜像是构建 Docker 的基石。用户基于镜像来运行自己的容器。镜像也是 Docker 生命周 期中的“构建”部分。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构 建出来。例如:
      添加一个文件;
      执行一个命令;
      打开一个窗口。
      也可以将镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更 新。

    • Registry(注册中心)
      Docker 用 Registry 来保存用户构建的镜像。Registry 分为公共和私有两种。Docker 公司 运营公共的 Registry 叫做 Docker Hub。用户可以在 Docker Hub 注册账号,分享并保存自己的 镜像(说明:在 Docker Hub 下载镜像巨慢,可以自己构建私有的 Registry)。

    • Docker容器
      Docker 可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容 器即可。容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜 像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。 容器基于 镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。
      所以 Docker 容器就是: 一个镜像格式; 一些列标准操作; 一个执行环境。
      使用 Docker,我们可以快速的构建一个应用程序服务器、一个消息总线、一套实用工 具、一个持续集成(CI)测试环境或者任意一种应用程序、服务或工具。我们可以在本地构 建一个完整的测试环境,也可以为生产或开发快速复制一套复杂的应用程序栈。

  • 使用Docker做什么

容器提供了隔离性,结论是,容器可以为各种测试提供很好的沙盒环境。并且,容器本身就具有“标准性”的特征,非常适合为服务创建构建块。Docker 的一些应用场景如下:

  • 加速本地开发和构建流程,使其更加高效、更加轻量化。
  • 能够让独立的服务或应用程序在不同的环境中,得到相同的运行结果。这一点在 面向服务的架构和重度依赖微型服务的部署由其实用。
  • 用 Docker 创建隔离的环境来进行测试。例如,用 Jenkins CI 这样的持续集成工具 启动一个用于测试的容器。
  • Docker 可以让开发者先在本机上构建一个复杂的程序或架构来进行测试,而不是 一开始就在生产环境部署、测试。
  • 安装与操作
    • 在Ubuntu中安装Docker
      更新ubuntu的apt源索引sudo apt-get update
      安装包允许apt通过HTTPS使用仓库
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

添加Docker官方GPG key

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

设置Docker稳定版仓库

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs)  stable"

添加仓库后,更新apt源索引sudo apt-get update
安装最新版Docker CE(社区版)sudo apt-get install docker-ce
检查Docker CE是否安装正确sudo docker run hello-world
出现如下信息,表示安装成功
为了避免每次命令都输入sudo,可以设置用户权限,注意执行后须注销重新登录
sudo usermod -a -G docker $USER

  • 启动与停止
    安装完成Docker后,默认已经启动了docker服务,如需手动控制docker服务的启停,可执行如下命令
# 启动docker
sudo service docker start
# 停止docker
sudo service docker stop
# 重启docker
sudo service docker restart
  • Docker镜像操作
  • 什么是Docker镜像
  • 列出镜像docker image ls
    • REPOSITORY:镜像所在的仓库名称
    • TAG:镜像标签
    • IMAGEID:镜像ID
    • CREATED:镜像的创建日期(不是获取该镜像的日期)
    • SIZE:镜像大小
  • 拉取镜像
    要想获取某个镜像,我们可以使用pull命令,从仓库中拉取镜像到本地,如
    docker image pull library/hello-world
    上面代码中,docker image pull是抓取 image 文件的命令。library/hello-world是 image 文件在仓库里面的位置,其中library是 image 文件所在的组,hello-world是 image 文件的名字。
    由于 Docker 官方提供的 image 文件,都放在library组里面,所以它的是默认组,可以省略。因此,上面的命令可以写成下面这样。
    docker image pull hello-world
  • 删除镜像
    docker image rm 镜像名或镜像id

3. Docker 容器操作

  • 创建容器
    docker run [option] 镜像名 [向启动容器中传入的命令]
    常用可选参数说明:
    • -i 表示以“交互模式”运行容器
    • -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即 分配一个伪终端。
    • --name 为创建的容器命名
    • -v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录,即 宿主机目录:容器中目录),可以使 用多个-v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后 共享到容器上。
    • -d 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不 会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。
    • -p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p 做多个端口映射
    • -e 为容器设置环境变量
    • --network=host 表示将主机的网络环境映射到容器中,容器的网络与主机相同
  • 交互式容器
    例如,创建一个交互式容器,并命名为myubuntu
    docker run -it --name=myubuntu ubuntu /bin/bash
    在容器中可以随意执行linux命令,就是一个ubuntu的环境,当执行exit命令退出时,该容器也随之停止。
    • 守护式容器
      创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。在容器内部exit退出时,容器也不会停止。
      docker run -dit --name=myubuntu2 ubuntu
    • 进入已运行的容器
      docker exec -it 容器名或容器id 进入后执行的第一个命令
      docker exec -it myubuntu2 /bin/bash
    • 查看容器
      列出本机正在运行的容器docker container ls
      列出本机所有容器,包括已经终止运行的docker container ls --all
    • 停止与启动容器
      停止一个已经在运行的容器docker container stop 容器名或容器id
      启动一个已经停止的容器docker container start 容器名或容器id
      kill掉一个已经在运行的容器docker container kill 容器名或容器id
    • 删除容器docker container rm 容器名或容器id
    • 将容器保存为镜像
      我们可以通过如下命令将容器保存为镜像docker commit 容器名 镜像名
    • 镜像备份与迁移
      我们可以通过save命令将镜像打包成文件,拷贝给别人使用docker save -o 保存的文件名 镜像名
      docker save -o ./ubuntu.tar ubuntu
      在拿到镜像文件后,可以通过load方法,将镜像加载到本地
      docker load -i ./ubuntu.tar

4. 使用Docker安装FastDFS

    1. 获取镜像
      可以利用已有的FastDFS Docker镜像来运行FastDFS。
      获取镜像可以通过下载docker image pull delron/fastdfs
      也可是直接使用提供给大家的镜像备份文件docker load -i 文件路径/fastdfs_docker.tar加载好镜像后,就可以开启运行FastDFS的tracker和storage了。
    1. 运行tracker
      执行如下命令开启tracker 服务
      docker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker
      我们将fastDFS tracker运行目录映射到本机的 /var/fdfs/tracker目录中。
      执行如下命令查看tracker是否运行起来docker container ls
      如果想停止tracker服务,可以执行命令docker container stop tracker
      停止后,重新运行tracker,可以执行命令docker container start tracker
    1. 运行storage
      执行如下命令开启storage服务
      docker run -dti --network=host --name storage -e TRACKER_SERVER=10.211.55.5:22122 -v /var/fdfs/storage:/var/fdfs delron/fastdfs storage
      TRACKER_SERVER=本机的ip地址:22122 本机ip地址不要使用127.0.0.1
      我们将fastDFS storage运行目录映射到本机的/var/fdfs/storage目录中
      执行如下命令查看storage是否运行起来docker container ls
      如果想停止storage服务,可以执行如下命令docker container stop storage
      停止后,重新运行storage,可以执行如下命令docker container start storage
      注意:如果无法重新运行,可以删除/var/fdfs/storage/data目录下的fdfs_storaged.pid 文件,然后重新运行storage。

5. 项目部署(Gunicorn和Nginx)

    1. 相关环境安装
    • 1.1 先更新 apt 相关源
      sudo apt-get update
    • 1.2. mysql安装
      apt-get install mysql-server
      apt-get install libmysqlclient-dev
    • 1.3. redis安装
      sudo apt-get install redis-server
    • 1.4. 安装虚拟环境
      pip install virtualenv
      pip install virtualenvwrapper
      使得安装的virtualenvwrapper生效,编辑~/.bashrc文件,内容如下:
      export WORKON_HOME=$HOME/.virtualenvs
      export PROJECT_HOME=$HOME/workspace
      source /usr/local/bin/virtualenvwrapper.sh
      使编辑后的文件生效
      source ~/.bashrc
    • 1.5 requirements文件
      在虚拟环境使用以下命令将当前虚拟环境中的依赖包以版本号生成至文件中:pip freeze > requirements.txt
      当需要创建这个虚拟环境的完全副本,可以创建一个新的虚拟环境,并在其上运行以下命令:pip install -r requirements.txt
      在安装 Flask-MySQLdb 的时候可能会报错,可能是依赖包没有安装,执行以下命令安装依赖包:sudo apt-get build-dep python-mysqldb
    1. Nginx安装与配置
    • 采用 C 语言编写
    • 实现分流、转发、负载均衡
    • 2.1 相关操作
      安装$ sudo apt-get install nginx
      运行及停止/etc/init.d/nginx start #启动
      /etc/init.d/nginx stop #停止
      配置文件
      编辑文件:/etc/nginx/sites-available/default
      ***如果是多台服务器的话,则在此配置,并修改 location 节点下面的proxy_pass ***
upstream flask {
       server 127.0.0.1:5000;
       server 127.0.0.1:5001;
}
server {
       # 监听80端口
       listen 80 default_server;
       listen [::]:80 default_server;

       root /var/www/html;

       index index.html index.htm index.nginx-debian.html;

       server_name _;

       location / {
               # 请求转发到gunicorn服务器
               proxy_pass http://127.0.0.1:5000;
               # 请求转发到多个gunicorn服务器
               # proxy_pass http://flask;
               # 设置请求头,并将头信息传递给服务器端 
               proxy_set_header Host $host;
               # 设置请求头,传递原始请求ip给 gunicorn 服务器
               proxy_set_header X-Real-IP $remote_addr;
       }
}
    1. Gunicorn
      Gunicorn(绿色独角兽)是一个Python WSGI的HTTP服务器
      从Ruby的独角兽(Unicorn )项目移植
      该Gunicorn服务器与各种Web框架兼容,实现非常简单,轻量级的资源消耗
      Gunicorn直接用命令启动,不需要编写配置文件
    • 3.1相关操作
      安装pip install gunicorn
      查看选项gunicorn -h
      运行: -w: 表示进程(worker) -b:表示绑定ip地址和端口号(bind)
      gunicorn -w 2 -b 127.0.0.1:5000 运行文件名称:Flask程序实例名
      参考阅读: Gunicorn相关配置:https://blog.csdn.net/y472360651/article/details/78538188
    1. 其他操作
      拷贝本地代码到远程
      scp -r 本地文件路径 root@39.106.21.198:远程保存路径
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,508评论 15 147
  • 一、Docker 简介 Docker 两个主要部件:Docker: 开源的容器虚拟化平台Docker Hub: 用...
    R_X阅读 4,379评论 0 27
  • docker基本概念 1. Image Definition 镜像 Image 就是一堆只读层 read-only...
    慢清尘阅读 8,725评论 1 21
  • 文/熊大 芙蓉镇。 天色渐渐暗了下来。 小店。 他还在收拾着地板上残留的一丝丝发屑。 “嘭”的一声,门被打开。 一...
    挪威的熊大阅读 243评论 0 0
  • 大卫,一个用左手写字的孩子 - 简书 作者大卫·香农五岁那年,画了他一生中的第一本图画书,记录了一件件他妈妈不允许...
    学校教育篇阅读 657评论 0 0