项目部署的相关概念
关于部署流程,主要包含以下两个方面:部署方案、部署环境:
部署方案
1. 分析项目的产品需求文档,定好部署方案的方向 2. 分析项目开发文档,按照功能边界,设计部署的结点 3. 分析项目功能软件,合理的取舍,选符合当前业务场景的 4. 梳理项目部署涉及到的部署软件实现方案,根据上面第2点确定的结点,确定初版部署方案 5. 根据项目实际情况,调整优化并确定项目部署方案
部署环境
个人开发环境:
工作人员:自己 工作平台:个人笔记本、公司配的电脑 平台特点:环境是自己配的,团队中不同的个人开发环境可以不一样 工作内容:项目的子模块,子功能 完成标准:完成领导安排的内容[项目的功能子模块开发]
公司开发环境:
工作人员:开发团队 工作平台:公司内部服务器 平台特点:服务器环境和线上的服务器环境完全一致 工作内容:项目子模块间的功能联调 完成标准:项目阶段开发、调试完成
项目测试环境:
工作人员:测试团队 工作平台:公司内部服务器 平台特点:服务器环境和线上的服务器环境完全一致 工作内容:项目功能/非功能/探索等测试 完成标准:项目阶段功能正常运行
项目预发布环境:
工作人员:运维团队 工作平台:公司线上服务器组中的一台 平台特点:服务器环境和线上的服务器环境完全一致 工作内容:特殊功能测试(比如支付)、数据压力测试、其他安全测试等 完成标准:项目阶段功能正常运行,最后一道防线
项目生产环境:
工作人员:运维团队 工作平台:公司线上服务器组 平台特点:标准线上的服务器环境 工作内容:代码部署和维护、记录内部架构文档 完成标准:项目正常运行
项目整体架构
服务器部署
服务器数量: 1000QPS 每秒请求数
服务器类型:物理服务器,云服务器
并发瓶颈:
1. 带宽:200M/10K 2. 处理并发的能力 3. 数据库查询能力:mysql 1000次/S
可以使用apache ab工具进行压测
前端项目部署
之前我们的开发并没有把项目上传到码云上面,所以我们接下来我们先创建一个码云仓库。
git remote add origin https://gitee.com/mooluo/luffyproject_pc.git git add . git commit -m "项目完成" git push orgin master
自动化程序会将打包的文件自动生成到项目的dist文件夹中。
npm run build
注意,编译的文件,必须要通过http协议才能访问到,直接点击index.html,是无法访问的。
因为根据我们上面的部署方案,我们需要安装nginx来运行这个项目。
后端项目部署
使用docker进行容器化管理进行持续集成部署
更新ubuntu的apt源索引
sudo apt-get update
安装包允许apt通过HTTPS使用仓库
sudo dpkg --configure -a 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
2. 启动与停止
安装完成Docker后,默认已经启动了docker服务,如需手动控制docker服务的启停,可执行如下命令
# 启动docker sudo service docker start # 停止docker sudo service docker stop # 重启docker sudo service docker restart # 列出镜像 docker image ls # 拉取镜像 docker image pull library/hello-world # 删除镜像 docker image rm 镜像id/镜像ID # 创建容器 docker run [选项参数] 镜像名 [命令] # 停止一个已经在运行的容器 docker container stop 容器名或容器id # 启动一个已经停止的容器 docker container start 容器名或容器id # kill掉一个已经在运行的容器 docker container kill 容器名或容器id # 删除容器 docker container rm 容器名或容器id
把前端项目通过nginx容器来运行
# 在docker中下载nginx镜像 docker image pull nginx # 使用git把码云上面的编译过的vue项目克隆到服务器/home # 阿里云服务器中,我们从码云克隆下来的前端项目: /home/luffyproject_pc/dist git clone 项目git地址 # 创建nginx容器,并以80端口对外提供服务 docker run -itd -p 80:80 -v /home/luffyproject_pc/dist:/usr/share/nginx/html nginx # 启动nginx容器中的nginx【容器ID通过docker container ls --all可以查看到】 docker container exec -itd [容器ID] nginx """ /etc/nginx # nginx容器中nginx的配置目录 /usr/share/nginx/html # nginx容器中www目录 """
Nginx+uwsgi
Nginx是一款基于异步框架的轻量级/高性能的Web 服务器/反向代理服务器/缓存服务器/电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。由俄罗斯的程序设计师Igor Sysoev(伊戈尔·赛索耶夫)所开发,最初供俄国大型网站Rambler.ru及搜寻引擎Rambler使用。
后端项目部署到docker容器中
在项目中复制开发配置文件dev.py 到生产配置prod.py
修改配置中的地址相关即可。
""" Django settings for luffy project. Generated by 'django-admin startproject' using Django 2.2.1. For more information on this file, see https://docs.djangoproject.com/en/2.2/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/2.2/ref/settings/ """ import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 新增一个系统导包路径 import sys sys.path.insert(0,os.path.join(BASE_DIR,"apps")) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/2.2/how