项目部署的相关概念
关于部署流程,主要包含以下两个方面:部署方案、部署环境:
部署方案
- 分析项目的产品需求文档,定好部署方案的方向
- 分析项目开发文档,按照功能边界,设计部署的结点
- 分析项目功能软件,合理的取舍,选符合当前业务场景的
- 梳理项目部署涉及到的部署软件实现方案,根据上面第2点确定的结点,确定初版部署方案
- 根据项目实际情况,调整优化并确定项目部署方案
部署环境
- 个人开发环境:
工作人员:自己
工作平台:个人笔记本、公司配的电脑
平台特点:环境是自己配的,团队中不同的个人开发环境可以不一样
工作内容:项目的子模块,子功能
完成标准:完成领导安排的内容[项目的功能子模块开发]
- 公司开发环境:
工作人员:开发团队
工作平台:公司内部服务器
平台特点:服务器环境和线上的服务器环境完全一致
工作内容:项目子模块间的功能联调
完成标准:项目阶段开发、调试完成
- 项目测试环境:
工作人员:测试团队
工作平台:公司内部服务器
平台特点:服务器环境和线上的服务器环境完全一致
工作内容:项目功能/非功能/探索等测试
完成标准:项目阶段功能正常运行
- 项目预发布环境:
工作人员:运维团队
工作平台:公司线上服务器组中的一台
平台特点:服务器环境和线上的服务器环境完全一致
工作内容:特殊功能测试(比如支付)、数据压力测试、其他安全测试等
完成标准:项目阶段功能正常运行,最后一道防线
- 项目生产环境:
工作人员:运维团队
工作平台:公司线上服务器组
平台特点:标准线上的服务器环境
工作内容:代码部署和维护、记录内部架构文档
完成标准:项目正常运行
前端项目部署
之前我们的开发并没有把项目上传到码云上面,所以我们接下来我们先创建一个码云仓库。
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
- 启动与停止
安装完成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/howto/deployment/checklist/
#SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '!!t0^(#x0l@!pp6@^!0u5lyq+4ctyui)sxmsc4*r7644@(4uh@'
#SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
ALLOWED_HOSTS = [
'luffy.pythonyuan.com',
'api.pythonyuan.com',
]
#CORS组的配置信息
CORS_ORIGIN_WHITELIST = (
'luffy.pythonyuan.com:80',
)
#允许ajax跨域请求时携带cookie
CORS_ALLOW_CREDENTIALS = True
#Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# cors跨域组件
'corsheaders',
'rest_framework',