3 代码发布
步骤,流程
1 获取代码
程序员提交代码到代码服务器
获取代码:权限 打包代码:tar 传输代码:scp
停止应用:先近后远 解压代码:tar 放置代码:先备后放
开启应用:先远后近 检查效果:浏览器+端口 对外开放
2 打包代码(代码服务器执行)
方便传输
tar zcf 压缩文件名 待压缩内容
tar xf 压缩文件名
zcat 压缩文件名 (查看压缩包内容)
3 传输代码
线上服务器--获取---》代码服务器代码
scp 远程主机:绝对路径 目标路径
先登录后拷贝
将本地文件推送到远程主机:scp python.tar.gz root@192.168.8.15:/root/
将远程主机的文件拉取到本地:scp root@192.168.8.15:/root/python.tar.gz ./
z:指定压缩文件的格式为 tar.gz
c: 压缩
v: 显示详细过程
f: 指定压缩文件
x: 解压
文件的压缩:压缩格式:tar zcvf 压缩后的文件名 将要压缩的文件
文件的解压:解压格式:tar xf 压缩后的文件名
4 关闭应用
先关离用户近的,后关离用户远的
5 解压代码
6 放置代码
先备份后放置
备份加时间戳
mv tar_code.tar.gz ~/tar_code.tar.gz`date +%Y%m%d%H%M%S`
显示当前日期:date +%F 2017-09-28
显示当前时间:date +%T 03:06:3
显示当前日期:date +%Y%m%d 20170928
显示当前时间:date +%H%M%S 030643
年月日时分秒:date +%Y%m%d%H%M%S
复制备份:cp nihao nihao-$(date +%Y%m%d%H%M%S)
移动备份:mv nihao nihao-$(date +%Y%m%d%H%M%S)
7 开启应用
先开离用户远,在开离用户近的
8 检查
netstat -ntl | grep 80
4 基础目录环境
mkdir /data/{server,logs,backup,softs,virtual,scripts,codes} -p
一步创建所有目录--》父目录不存在一并创建
5 主机网络环境(跨主机免密码认证的原理)
1 客户端生成密钥对(在线上服务器运行)
ssh-keygen -t rsa
公钥放在:/root/.ssh/id_rsa.pub
2 将公钥传给服务器(传给代码服务器)
在代码服务器中/etc/ssh/sshd_config定义了秘钥存储文件(AuthorizedKeysFile %h/.ssh/authorized_keys)
echo “公钥”>> authorized_keys
3 重启ssh服务 (在代码服务器执行)
sudo service ssh restart
6 Django安装
1 虚拟环境安装
1 进入虚拟环境
export WORKON_HOME=/data/virtual/
source /usr/local/bin/virtualenvwrapper.sh
mkvirtualenv -p python3 django
2 sz rz(xshell)
3 安装django
1 查看INSTALL
2 python setup.py build(可选)
3 python setup.py install
4 配置django
1 创建项目
django-admin startproject itcast
2 创建应用
python manage.py startapp test1
修改test1/views.py
3 注册应用
修改 itcast/settings.py
4 关联URL
修改 itcast/urls.py
5 启动django
python manage.py runserver > /dev/null 2>&1 &
7 nginx 安装
1 pcre插件安装(nginx依赖旧版本pcre)
./configure && make && make install
./configure 裁剪软件 定制安装路径
make 编译
make install 安装
2 nginx安装
./configure --prefix=/data/server/nginx --without-http_gzip_module
(指定安装路径在/data/server/nginx,裁剪gzip模块)
make && make install
动态库链接失败
ldd 查找搜索路径
ln -s /usr/local/lib/libpcre.so.1 /lib/x86_64-linux-gnu/libpcre.so.1
(创建软连接)
配置代理:
http配置段server段增加location配置
location /hello/ {
proxy_pass http://127.0.0.1:8000;
}
8 手工代码发布
1 获取代码
2 打包代码(代码服务器执行)
cd /home/dev/data/codes
tar zcf tar_code.tar.gz test1/
3 传输代码
cd /data/codes
scp dev@192.168.42.71:/home/dev/data/codes/tar_code.tar.gz .
4 关闭应用
cd /data/server/nginx/sbin
./nginx -s stop
kill `lsof -ti :8000`
5 解压代码
cd /data/codes
tar xf tar_code.tar.gz
6 放置代码
cd /data/server/itcast/test1
mv views.py /data/backup/views.py-`date +%Y%m%d%H%M%S`
cd /data/codes/test1
mv views.py /data/server/itcast/test1/
7 开启应用
export WORKON_HOME=/data/virtual/
source /usr/local/bin/virtualenvwrapper.sh
workon django
cd /data/server/itcast
python manage.py runserver > /dev/null 2>&1 &
cd /data/server/nginx/sbin
./nginx
8 检查
netstat -ntl | grep 80
9 简单脚本编写
1 命令罗列
2 固定内容变量化(方便修改)
3 功能函数化(方便扩展)
远程执行命令:
ssh 远程主机登录用户名@远程主机ip地址 “命令”
10 大型脚本编写
1 搭建框架(将步骤变成函数)
2 命令填充(将命令写到函数内)
3 日志功能:
1 定义写日志函数(将时间日期步骤等信息重定向追加到文件)
2 在各个函数内调用写日志函数
4 锁文件功能:
1 编写加锁解锁函数---》创建和删除文件
2 在所有步骤之前先调用加锁函数,所有步骤完毕后调用解锁函数
3 在脚本执行前先判断文件是否存在
5 功能参数化
case判断脚本参数是否是当前支持的功能
增加参数个数安全性的判断
11 脚本调试
bash -n 脚本名 检查语法
bash -v 脚本名 先打印一遍脚本内容再执行
bash -x 脚本名 打印一句执行一句