基础知识
项目交付
基础知识
简介
项目交付是一个涉及到多团队共同协作的事情,它包括 产品团队设计产品、研发团队开发产品、测试团队测试代码、运维团队发布代码和维护站点等工作。
项目交付的过程中,每个团队都有自己特有的一些工作特殊
一般情况下,项目交付在软件工程人员人员眼中的基本逻辑
代码发布
简介
所谓的代码发布,其实就是一句话:将我们的代码放到一台公司的互联网服务器上。那么我们应该怎么来理解这句话呢?我们从三个方面来理解他。
发布什么?
代码 经过测试,功能完善,没有问题的代码
发布到哪里?
服务器 所有人都能访问的到的一台服务器(有公网IP)
idc机房、阿里云、亚马逊、腾讯云、华为云、....
发布的效果?
web网页 对外展示
发布方式
常见的代码发布方式有两种:手工方式和脚本方式。
样式1:手工发布代码
慢、干扰因素多、不安全
样式2:脚本发布代码
快、干扰因素少、安全
发布解读
基本流程
简介
这里面的代码发布过程是侧重于手工级别的代码发布流程,在其他的一些基础设施环境中,虽然有一些区别,但是整个的流程脉络是一样的。
功能解读:
获取代码 - 为什么? - 代码在远端服务器上
打包代码 - 为什么? - 代码量太多,不好传输
传输代码 - 为什么? - 本地主机没有代码
关闭应用 - 为什么? - 防止用户访问出错
解压代码 - 为什么? - 拉过来的是压缩包
更新代码 - 为什么? - 要发布项目
开启应用 - 为什么? - 刚才关闭了
检查效果 - 为什么? - 万一失败了呢?
对外开放 - 为什么? - 发布过程,没有让网上用户看到
流程详解
获取代码
一般情况下,软件项目的网站代码都存放在一个稳定的代码服务器上,这个网站服务器叫代码仓库。
仓库分类
公有仓库 - 使用互联网的代码服务器
私有仓库 - 内部服务器或者公网服务器
实现方式
集中式:svn的几乎所有操作命令,受本地主机和代码仓库的网络连接状态。
分布式:git的几乎所有操作命令,不受代码仓库的网络连接状态限制。
打包代码
所谓的打包代码,其实就是将获取的项目源代码进行打包操作
目的:
减少传输文件数量
减小传输文件大小
增强传输速率
常见打包方式:
windows: zip、rar...
linux: tar、zip...
传输代码
在一个临时的服务器环境上,进行项目代码的部署测试,如果没有问题的话,可以将该代码传输到生产服务器上.
常见的传输方式如下:
有网情况下
多种方式: git、ftp、scp、共享挂载 cp、rsync
没有网情况下
物理方式: U盘或者硬盘
关闭应用
发布代码的时候,肯定会对生产服务器上运行的项目产生影响,为了避免对互联网用户产生不必要的干扰,我们会将应用关闭。
问题1:关闭什么应用
代码所在的服务用到了什么应用,就关闭什么应用
问题2:应用相互依赖的情况下,如何确定关闭的顺序
站在用户访问的角度,先关闭离客户近的,后关闭离客户远的。
解压代码
这一步不是必须的,有些场景下,需要代码压缩包解压,有些不用
更新代码
为了避免我们在放置代码过程中,对老文件造成影响,所以我们放置代码一般分为两步:备份老文件和放置新文件。
备份老文件:防止更新失败,导致旧有的成功运行的代码被覆盖。
放置新文件:将新代码放置到旧代码的位置
注意:
两个文件的名称是一样的,只是内容不同
对整个应用项目来说,两个文件没有区别
开启应用
在代码放置完毕后,将刚才关闭了应用,开启就可以了
开启的顺序:
先开启离客户远的,后开启离客户近的
检查效果
为了防止发布后的效果不成功,我们手工方式或者其他方式检测网站的功能是否可以正常的访问
对外开放
项目内部人员检查这次发布没有问题后,开放应用的流量入口,让用户使用新版本的服务
技术要点
解压缩
简介
文件的压缩
压缩格式:tar zcvf 压缩后的文件名 将要压缩的文件
文件的解压
解压格式:tar xf 压缩后的文件名
查看压缩文件内容
查看格式:zcat 压缩文件
命令参数详解
z 指定压缩文件的格式为 tar.gz
c 表示压缩
v 显示详细过程
f 指定压缩文件
x 解压
C 制定解压位置
解压缩实践
压缩实践
[root@localhost ~]# mkdir tar_dir
[root@localhost ~]# echo nihao > tar_dir/nihao.txt
[root@localhost ~]# tar -zcvf nihao.tar.gz tar_dir/
tar_dir/
tar_dir/nihao.txt
查看压缩文件
[root@localhost ~]# zcat nihao.tar.gz
tar_dir/0000...6011213 5ustar rootroottar_dir/nihao.txt 00...4253652266013046 0ustar rootrootnihao
解压文件
[root@localhost ~]# tar xf nihao.tar.gz -C /tmp/
[root@localhost ~]# cat /tmp/tar_dir/nihao.txt
nihao
传输
简介
scp传输工具:
命令格式:scp 要传输的文件 要放置的位置
远程目标样式:
远端主机文件放置位置的表示形式:
远程连接的用户@远程主机:远程主机的目录路径
远端主机文件位置的表示形式:
远程连接的用户@远程主机:远程主机的文件路径
传输示例:
将本地文件推送到远程主机
scp file.tar.gz [email protected]:/root/
将远程主机的文件拉取到本地
scp [email protected]:/root/file.tar.gz ./
传输文件实践
本地文件传输远程
[root@localhost ~]# scp nihao.tar.gz [email protected]:/tmp/
Warning: Permanently added '10.0.0.13' (ECDSA) to the list of known hosts.
[email protected]'s password:
nihao.tar.gz 100% 156 122.3KB/s 00:00
远程文件拉到本地
[root@localhost ~]# rm -f nihao.tar.gz
[root@localhost ~]# scp [email protected]:/tmp/nihao.tar.gz ./
[email protected]'s password:
nihao.tar.gz 100% 156 112.3KB/s 00:00
[root@localhost ~]# zcat nihao.tar.gz
tar_dir/00007...213 5ustar rootroottar_dir/nihao.txt0...046 0ustar rootrootnihao
备份
实践
文件的备份要有一定的标志符号,我们就使用目前通用的时间戳的形式来表示,关于时间戳,我们可以借助于 date命令来进行获取
date命令详解:
命令格式:date [option]
常见参数:
%F 显示当前日期格式,%Y-%m-%d
%T 显示当前时间格式,%H:%M:%S
备份命令效果格式:
方式一:复制备份-源文件不动
cp nihao nihao-$(date +%Y%m%d%H%M%S)
方式二:移动备份-源文件没了
mv nihao nihao-$(date +%Y%m%d%H%M%S)
备份实践
复制备份
[root@localhost ~]# cp nihao.tar.gz nihao.tar.gz-$(date +%Y%m%d%H%M%S)
[root@localhost ~]# cp nihao.tar.gz nihao.tar.gz-$(date +%Y%m%d%H%M%S)
移动备份
[root@localhost ~]# mv nihao.tar.gz nihao.tar.gz-$(date +%Y%m%d%H%M%S)
[root@localhost ~]# ls nihao.tar.gz-*
nihao.tar.gz-20420620010300 nihao.tar.gz-20420620010304 nihao.tar.gz-20420620010311
手工发布
方案解读
基础知识
案例需求
实现一套业务环境的项目发布流程,基本的网站架构效果如下:
架构解读:
负载均衡采用Nginx服务,基于请求内容进行后端跳转
动态应用使用的nginx 或者 uwsgi服务
后端服务应用有多套编程语言研发的web项目。
有基于java语言的sprintCloud框架开发的
有基于python语言的django框架开发的
我们要发布的是django后端服务代码
方案分析
项目部署分析
分析:
2、python环境 ---> 3、python虚拟环境
1、django环境部署
4、django软件安装
5、项目基本操作
6、应用基本操作
7、view和url配置
8、问题:只有本机能访问
9、方案代理---- 10、nginx
11、nginx实现代理
12、nginx软件安装
13、nginx基本操作
14、nginx代理的配置
15、目录结构
16、查看配置文件
17、找到对应的代理配置项
18、启动django
29、启动nginx
20、整个项目调试
环境部署方案
环境部署方案
一、django环境部署
1.1 python虚拟环境
1.2 django环境部署
1.2.1 django软件安装
1.2.2 项目基本操作
1.2.3 应用基本操作
1.2.4 view和url配置
二、nginx代理django
2.1 nginx软件安装
2.1.1 nginx软件安装
2.1.2 nginx基本操作
2.2 nginx代理配置
2.2.1 目录结构查看
2.2.2 配置文件查看
2.2.3 编辑代理配置项
三、项目调试
3.1 启动软件
3.1.1 启动django
3.1.2 启动nginx
3.2 整个项目调试
1、施工方案的分析原理:基于需求关键点-查依赖-查流程
2、施工方案编写的流程:基于需求分析的流程,按结点输出方案
环境部署
基础环境
python软件部署
python软件部署
[root@localhost ~]# yum install python3 -y
[root@localhost ~]# python --version
Python 2.7.5
pip环境配置
(venv) [root@localhost ~]# mkdir ~/.pip
(venv) [root@localhost ~]# cat ~/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
(venv) [root@localhost ~]# python -m pip install --upgrade pip
python虚拟环境
安装虚拟环境软件
[root@localhost ~]# yum install python-virtualenv -y
准备虚拟环境目录
[root@localhost ~]# mkdir /data/virtual -p
[root@localhost ~]# cd /data/virtual
创建虚拟环境
[root@localhost /data/virtual]# virtualenv -p /usr/bin/python3.6 venv
Running virtualenv with interpreter /usr/bin/python3.6
Using base prefix '/usr'
New python executable in /data/virtual/venv/bin/python3.6
Also creating executable in /data/virtual/venv/bin/python
Installing setuptools, pip, wheel...done.
[root@localhost /data/virtual]# ll
总用量 0
drwxr-xr-x 5 root root 56 7月 4 00:32 venv
[root@localhost /data/virtual]# ls -a
. .. venv
[root@localhost /data/virtual]# source venv/bin/activate
(venv) [root@localhost /data/virtual]#
(venv) [root@localhost /data/virtual]# python --version
Python 3.6.8
其他相关命令
退出虚拟环境
(venv) [root@localhost /data/virtual]# deactivate
[root@localhost /data/virtual]#
删除虚拟环境
[root@localhost /data/virtual]# ls
venv
[root@localhost /data/virtual]# rm -rf venv/
[root@localhost /data/virtual]# ls
[root@localhost /data/virtual]#
代码环境
准备sqlite环境
查看默认版本
(venv) [root@localhost /data/softs]# /usr/bin/sqlite3 -version
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
更新sqlite版本为3.9+版本
(venv) [root@localhost ~]# cd /data/softs
(venv) [root@localhost /data/softs]# wget https://www.sqlite.org/2022/sqlite-autoconf-3390000.tar.gz
(venv) [root@localhost /data/softs]# tar xf sqlite-autoconf-3390000.tar.gz
(venv) [root@localhost /data/softs]# cd sqlite-autoconf-3390000
(venv) [root@localhost /data/softs]# ./configure
(venv) [root@localhost /data/softs]# make && make install
(venv) [root@localhost /data/softs/sqlite-autoconf-3390000]# sqlite3 --version
3.39.0 2022-06-25 14:57:57 14e166f40dbfa6e055543f8301525f2ca2e96a02a57269818b9e69e162e98918
echo 'export LD_LIBRARY_PATH="/usr/local/lib"' >> ~/.bashrc
source ~/.bashrc
系统环境变量设置
(venv) [root@localhost ~]# echo 'export LD_LIBRARY_PATH="/usr/local/lib"' >> ~/.bashrc
(venv) [root@localhost ~]# source ~/.bashrc
django环境
进入python虚拟环境部署django环境
[root@localhost ~]# source /data/virtual/venv/bin/activate
(venv) [root@localhost ~]# pip install Django==3.2.0
查看软件安装效果
(venv) [root@localhost ~]# pip list
Package Version
----------------- -------
asgiref 3.4.1
Django 3.2.0
pip 21.3.1
pytz 2022.1
setuptools 28.8.0
sqlparse 0.4.2
typing_extensions 4.1.1
wheel 0.29.0
创建项目
(venv) [root@localhost ~]# mkdir /data/server -p
(venv) [root@localhost ~]# cd /data/server/
(venv) [root@localhost /data/server]# django-admin startproject web_site
(venv) [root@localhost /data/server]# ls
web_site
(venv) [root@localhost /data/server]# tree web_site/
web_site/
├── manage.py
└── web_site
├── asgi.py
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
1 directory, 6 files
创建应用
(venv) [root@localhost /data/server]# cd web_site/
(venv) [root@localhost /data/server/web_site]# python manage.py startapp app1
(venv) [root@localhost /data/server/web_site]# tree
.
├── app1
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── manage.py
└── web_site
├── asgi.py
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-36.pyc
│ └── settings.cpython-36.pyc
├── settings.py
├── urls.py
└── wsgi.py
4 directories, 15 files
注册应用
(venv) [root@localhost /data/server/web_site]# sed -i "/staticfiles/a\ 'app1'," web_site/settings.py
定制访问逻辑
定制访问页面的逻辑
(venv) [root@localhost /data/server/web_site]# cat app1/views.py
from django.shortcuts import render
from django.http import HttpResponse
def hello(resquest):
return HttpResponse("web_site V1.0\n")
定制访问页面的路由
(venv) [root@localhost /data/server/web_site]# sed -i '/t path/a\from app1.views import *' web_site/urls.py
(venv) [root@localhost /data/server/web_site]# sed -i "/admin.site/a\ path('hello/', hello)," web_site/urls.py
启动djang应用
(venv) [root@localhost /data/server/web_site]# python manage.py runserver>> /dev/null 2>&1 &
[1] 4585
检查效果
(venv) [root@localhost /data/server/web_site]# curl localhost:8000/hello/
web_site V1.0
web环境
ngix环境
安装nginx
[root@localhost ~]# yum install nginx -y
启动nginx
[root@localhost ~]# systemctl start nginx
查看状态
[root@localhost ~]# netstat -tnulp | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4725/nginx: master
tcp6 0 0 :::80 :::* LISTEN 4725/nginx: master
nginx配置
创建配置文件
[root@localhost ~]# cat /etc/nginx/default.d/django.conf
location /hello/ {
proxy_pass http://localhost:8000;
}
测试配置文件
[root@localhost ~]# /usr/sbin/nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重载nginx服务
[root@localhost ~]# systemctl reload nginx
测试访问效果
[root@localhost ~]# echo 'hello nginx' > /usr/share/nginx/html/index.html
[root@localhost ~]# curl localhost
hello nginx
[root@localhost ~]# curl localhost/hello/
web_site V1.0
定制访问域名
[root@localhost ~]# echo '10.0.0.12 django.superopsmsb.com' >> /etc/hosts
[root@localhost ~]# curl django.superopsmsb.com
hello nginx
[root@localhost ~]# curl django.superopsmsb.com/hello/
web_site V1.0
手工发布
基础知识
简介
为了合理的演示生产环境的项目代码发布,同时又兼顾实际实验环境的资源,我们这里将 B主机和C主机 用一台VM主机来实现,A主机单独实现。这两台主机的ip地址相关内容如下:
A主机:10.0.0.12 B主机: 10.0.0.13
为了体现整个实践操作的标准化,在这里进行所有目录的统一规划:
代码存储目录: /data/codes/django
打包文件目录: /data/codes
脚本相关目录: /data/scripts
备份文件目录: /data/backup/django
项目代码目录: /data/server/web_site
简单实践
代码准备-10.0.0.13
准备待发布代码
[root@localhost ~]# mkdir /data/codes
[root@localhost ~]# cd /data/codes/
[root@localhost /data/codes]# mkdir django
[root@localhost /data/codes]# scp [email protected]:/data/server/web_site/app1/views.py django/
[root@localhost /data/codes]# cat django/views.py
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
# 定制后端业务逻辑处理函数
def hello(request):
return HttpResponse("web_site v0.1\n")
代码获取-10.0.0.13
我们借助于sed的方式模拟代码获取修改后的代码
[root@localhost /data/codes]# sed -i 's#0.1#0.2#' django/views.py
[root@localhost /data/codes]# grep web_site django/views.py
return HttpResponse("web_site v0.2\n")
打包代码-10.0.0.13
打包文件
[root@localhost /data/codes]# tar zcf django.tar.gz django/
[root@localhost /data/codes]# ls
django django.tar.gz
确认文件信息
[root@localhost /data/codes]# zcat django.tar.gz
django/0000...026 5ustar rootrootdjango/views.py000...12531 0ustar rootrootfrom django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
# 定制后端业务逻辑处理函数
def hello(request):
return HttpResponse("web_site v0.2\n")
传输代码-10.0.0.12
在制定的目录下获取远程代码目录
[root@localhost ~]# mkdir /data/codes
[root@localhost ~]# cd /data/codes/
[root@localhost ~]# scp [email protected]:/data/codes/django.tar.gz ./
关闭应用-10.0.0.12
前端准备数据迁移配置
[root@localhost ~]# mkdir /etc/nginx/conf.d
[root@localhost ~]# cat /etc/nginx/conf.d/update.conf
server {
listen 6666;
location / {
index index.html;
root /usr/share/nginx/update/;
}
}
准备数据迁移文件
[root@localhost ~]# mkdir /usr/share/nginx/update -p
[root@localhost ~]# echo '数据迁移中,请耐心等待,抱歉!!!' >> /usr/share/nginx/update/index.html
使用数据迁移配置
[root@localhost ~]# cat /etc/nginx/default.d/django.conf
location /hello/ {
# proxy_pass http://localhost:8000;
proxy_pass http://10.0.0.12:6666/;
}
重启nginx服务
[root@localhost ~]# /usr/sbin/nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost ~]# systemctl restart nginx
检查效果
[root@localhost ~]# netstat -tnulp |grep nginx
tcp 0 0 0.0.0.0:6666 0.0.0.0:* LISTEN 92562/nginx: master
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 92562/nginx: master
tcp6 0 0 :::80 :::* LISTEN 92562/nginx: master
[root@localhost ~]# curl www.superopsmsb.com/hello/
数据迁移中,请耐心等待,抱歉!!!
关闭后端的django服务
[root@localhost ~]# kill $(lsof -Pti :8000)
[root@localhost ~]# netstat -tnulp | grep 8000
[root@localhost ~]#
解压代码-10.0.0.12
[root@localhost ~]# cd /data/codes
[root@localhost /data/codes]# tar xf django.tar.gz
备份文件-10.0.0.12
备份老文件
[root@localhost /data/codes]# mkdir /data/backup/django -p
[root@localhost /data/codes]# mv /data/server/web_site/app1/views.py /data/backup/django/views.py-$(date +%Y%m%d%H%M%S)
[root@localhost /data/codes]# ls /data/server/web_site/app1/views.*
ls: 无法访问/data/server/web_site/app1/views.*: 没有那个文件或目录
放置新文件
[root@localhost /data/codes]# mv /data/codes/django/views.py /data/server/web_site/app1/
[root@localhost /data/codes]# ls /data/server/web_site/app1/views.*
/data/server/web_site/app1/views.py
[root@localhost /data/codes]# grep web_site /data/server/web_site/app1/views.py
return HttpResponse("web_site v0.2\n")
开启应用-10.0.0.12
开启后端django服务
[root@localhost /data/codes]# source /data/virtual/venv/bin/activate
(venv) [root@localhost /data/codes]# cd /data/server/web_site/
(venv) [root@localhost /data/server/web_site]# python manage.py runserver >> /dev/null 2>&1 &
[1] 92774
(venv) [root@localhost /data/server/web_site]# deactivate
[root@localhost /data/server/web_site]#
检查效果
[root@localhost ~]# netstat -tnulp | grep 8000
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 92776/python
修改前端nginx服务入口
[root@localhost ~]# cat /etc/nginx/default.d/django.conf
location /hello/ {
proxy_pass http://localhost:8000;
# proxy_pass http://10.0.0.12:6666/;
}
重启nginx服务
[root@localhost /data/server/web_site]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost /data/server/web_site]# systemctl restart nginx
内部检查-10.0.0.12
检查效果
[root@localhost /data/server/web_site]# curl www.superopsmsb.com
hello nginx
[root@localhost /data/server/web_site]# curl www.superopsmsb.com/hello/
web_site v0.2
对外开放
接收外部用户流量即可
标签:web,shell,项目,root,site,nginx,发布,data,localhost
From: https://www.cnblogs.com/abiu/p/17054883.html