git操作:
1.git init [project-name]
2.git clone url 克隆文件
3.git status 查看目前状态
4.git add . 添加
5.git commit -m "[descriptive message]" 提交更改
6.git push [alias] [branch] 推送文件
7.git pull 获取文件
Mysql
一、Mac系统下安装mysql及可视化工具:
《可视化工具使用Sequel Pro
配置mysql:
touch .bash_profile
vim .bash_profile 添加路径:PATH=/usr/local/mysql/bin:$PATH
source .bash_profile
mysql修改密码:SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码');
FLUSH PRIVILEGES;》
数据库授权:grant all on *.* to root@”IP”identified by “数据库密码”
数据库导出:mysqldump -uroot -p test >test.sql
数据库导入:mysql -uroot -p test < test.sql
二、linux中MySql相关操作
安装:
1、由于CentOS 的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件。
下载命令:
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
rpm -ivh mysql57-community-release-el7-9.noarch.rpm
执行完成后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repo mysql-community-source.repo
3、使用yum命令即可完成安装
注意:必须进入到/etc/yum.repos.d/目录后再执行以下脚本
3.1安装命令:
yum install mysql-server
3.2启动msyql:
systemctl start mysqld #启动MySQL
3.3获取安装时的临时密码(在第一次登录时就是用这个密码):
grep 'temporary password' /var/log/mysqld.log
3.4倘若没有获取临时密码,则删除原来安装过的mysql残留的数据
rm -rf /var/lib/mysql
再启动mysql
systemctl start mysqld #启动MySQL
unbantu
1、安装mysql
apt update //更新仓库
apt install -y mysql-server mysql-client //安装mysql服务端、客护短
设置密码:
---------------------------------
①连接数据库
mysql -uroot -p
密码
②查看所有的库
show databases
---------------
③mysql的管理命令:重启、停止、开始
service mysql stop
service mysql start
service mysql restart
-----------------------
④mysql的配置
二进制安装目录:vi/etc/mysql/my.cnf 或者路径:/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
basedir = /usr/ --mysqls
程序安装位置
datadir = /var/lib/mysql --数据存放位置
port = 3306 --端口
bind-address = 127.0.0.1 --绑定地址,127.0.0.1地址只可在本机连接,
max_connections = 100 --最大连接数
slow_query_log = 1 --慢查询,查询慢的sql记录到文件中,方便查询,1是开机
slow_query_log_file = slow.log --记录位置
long_query_time = 2 --执行超过2,秒的就是慢查询
innodb_buffer_pool_size = 3G --缓存控制,默认安装值是最低,总内存的70%(专用),两种引型:InnoDb
查询配置文件:
vi /etc/mysql/my.cnf
真实地址:/etc/mysql/mysql.conf.d/mysqld.cnf
查看mysql状态:
查看最大连接:show variables like 'max_connections';
查看正在来接数:show global status like 'max_used_connections';
查看配置的空间:show variables like 'innodb_buffer_pool_size';
各种操作数量:show status like 'innodb_rows_%';
\s 查看状态
mysql手册:https://dev.mysql.com/doc/refman/5.7/en/
-----------------
备份数据库:
创建数据库:create database test;
show tables;
use test;
exit;退出
mysqldump -uroot -p密码test >test.sql 备份
mysql -uroot -p密码test <test.sql 恢复
2、用户授权
mysql默认情况不可以远程连接,查看当前用户:
select host,user from mysql.user;
①
用户授权:all、select、update、*.*不限制任何数据库和表,%位置代表主机IP地址
grant all on *.* to root@"%" identified by "letmein"
----------------
创建远程连接,
授权用户
- ,配置文件中注释掉 本地地址172.0.0.1
重启数据库
Service mysql restart
1、 >mysql -h localhost -u root -p // localhost:主机名(如果访问本机数据库则不用输入 -h localhost,-u root用户名 -p密码)
2、 >mysql \c // 退出当前命令并重新回到命令提示行。
3、 >mysql help; // 查看帮助信息
4、 >mysql \q || quit|| exit // 退出mysql客户端
5、 >mysql show databases; // 查看当前mysql客户端所有数据库
6、 >mysql use 数据库名; // 使用数据库
7、 >mysql select database(); // 查看当前使用库
8、 >mysql create database 数据库名; // 创建数据库
9、 >mysql create database if not exists 数据库名 charset = 字符集(utf8) collate = utf8_general_ci; // 创建数据库和设置字符集并设置排序规则
10、>mysql drop database 数据库名; // 删除数据库 (会将该数据库里的表和表数据全部删除)
11、字段类型
整型
int(长度)
smallint(长度)
tinyint(长度)
字符串
varchar(100) // 变长字符串
char(长度) // 定长字符串
时间日期
date // 年月日
datetime // 年月日时分秒
year // 年
time // 时分秒 查询工资大于6000小于10000的教师名称和工资并且按照工资高低进行逆向排序
文本类型
text // 最大64K
BLOB // 最大64K
约束[选项]
auto_increment // 自动增长
primary key // 主键
default // 默认值
not null // 非空
null // 为空
default // 默认值
unsigned //无符号(正数)
unique //唯一性(可以为null但不重复)
index //常规索引
12、 >mysql drop table 表名; // 删除数据表(数据表里的内容也会被删除)
13、 >mysql describe || desc 表名; // 查看表结构
14、 >mysql create table if not exists 表名(
id 类型(长度) 选项, // 主键的选项一般为 auto_increment(自增长) primary key(主键) not null(非空)
字段1 类型(长度) 选项,
....
);
15、>mysql alter table 表名 add 字段 类型 约束; // 添加一列(添加字段)
16、>mysql alter table 表名 change 旧字段 新字段 类型 约束; // 修改一列(修改字段)
17、>mysql alter table 表名 drop 字段; // 删除一列(删除字段)
18、>mysql insert into 表名(`字段1`,`字段2`,`字段....`) values('字段1的值','字段2的值','字段值...'); // 添加数据(如果要添加多条数据则在values值后边接着写即可);
>mysql insert into 表名 values('字段1的值','字段2的值','字段值...'); //字段值按顺序写
19、>mysql select 查询字段(可以起别名) from 表名(可以起别名); // 查询表数据( * 查询所有 如果不想查询所有直接写想查询字段即可,多个字段的话中间用逗号隔开)
20、>mysql as 关键字 // 起别名(任何表,任何字段都可以起别名)
21、>mysql insert into 表1(`字段`,`字段1`,`...`) slect 字段,字段1,... from 表2; // 插入从其他表选择的行(将一个表中的数据插入到另一个表中);
22、>mysql update 表名 set `字段` = '值' where 条件; // 更新数据(如果不加where条件则会更新该表所有数据);
23、>mysql delete from 表名 where 条件; // 删除数据(如果不加where条件则会删除该表所有数据);
24、>mysql order by 字段(主键[id]) asc || desc // 排序 asc正序(默认) desc 倒序
25、>mysql limit 值1,值2; // 控制结果显示条数,参数1:从哪里开始显示 参数2:显示几条
eg: mysql> select * from users order by cdate asc limit 10;
26.mysql> show create table 表名\G --查看表的建表语句。
django
官网:www.djangoproject.com
安装:pip install django==1.11.11
1、新建项目:cmd窗口命令:django-admin startproject myweb
2、启动项目:1,cd myweb
python manage.py runserver(只能localhost:8000访问)
2,python manage.py runserver 0:8000(任意电脑访问)
settings.py文件里添加:ALLOWED_HOSTS = ['IP地址']
3、创建应用
python manage.py startapp myapp
4.
生成数据库迁移文件:python manage.py makemigrations
model数据库迁移:python manage.py migrate
5.创建管理用户:python manage.py createsuperuser
爬虫scrapy
创建项目:scrapy startproject demo
创建爬虫:
scrapy genspider fang fang.5i5j.com
执行爬虫:
scrapy crawl fang
结果另存格式:
scrapy crawl fang -o fang.xml
爬虫常用请求库
Urllib
Python3 urllib库官方链接:https://docs.python.org/3/library/urllib.html
- urllib中包括了四个模块,包括:
- urllib.request:可以用来发送request和获取request的结果
- urllib.error:包含了urllib.request产生的异常
- urllib.parse:用来解析和处理URL
- urllib.robotparse:用来解析页面的robots.txt文件
urllib.request:
- urllib.request 模块提供了最基本的构造HTTP 请求方法,可以模拟浏览器的一个请求发起过程。同时它还带有处理authenticaton(授权验证),redirections(重定向),cookies(浏览器Cookies)以及其它内容。
- urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
- 参数:url地址
- data:可选附加参数,字节流编码格式(bytes() 可转换),请求方式会变为POST
- timeout (超时时间)单位为秒,若请求超出了设置时间还没有响应,则抛异常
- 返回HTTPResposne类型的对象:
- response.read() 就可以得到返回的网页内容,可使用decode("utf-8")解码字符串
- response.status 就可以得到返回结果的状态码,如200代表请求成功,404代表网页未找到
urllib.request.Request:
- 利用urlopen()方法可以实现最基本的请求发起,但这几个简单的参数并不足以构建一个完整的请求。
- 使用强大的Request类可以在请求中加入需要的headers等信息。
class urllib.request.Request(url, data=None, headers={}, origin_req_host=None,
unverifiable=False, method=None)
- 第一个参数是请求链接,这个是必传参数,其他的都是可选参数
- data 参数如果要传必须传bytes (字节流)类型的,如果是一个字典,可以先用urllib.parse.urlencode() 编码。
- headers 参数是一个字典,你可以在构造Request 时通过headers 参数传递,也可以通过调用Request 对象的add_header() 方法来添加请求头。
- origin_req_host 指的是请求方的host 名称或者IP 地址。
- unverifiable 指的是这个请求是否是无法验证的,默认是False 。意思就是说用户没有足够权限来选择接收这个请求的结果
- method 是一个字符串,它用来指示请求使用的方法,比如GET ,POST ,PUT 等等。
mongodb:
1.创建一个数据目录文件夹 c:\data\db
2.打开mongodb服务
mongod --dbpath c:\data\db
3.打开一个终端连接mongodb服务器
命令:mongo
自动化运维
1 Linux基础
1.1目录和文件操作
pwd 打印当前工作目录
cd 切换目录
cd 宿主目录
cd - 上次的目录
cd .. 上级目录(.代表当前目录)
cd /home/
ls 列出目录中的文件
ls -l 详细信息
ls -a 显示所有文件(包含以点开头的文件)
ls -F 目录后加斜线显示(文件夹后加/)
ls -lh 人性化单位显示大小
mkdir 创建目录
touch 创建文件
touch readme.txt || touch hello 文件
写数据到文件
echo "1234" >>readme.txt
rm 删除文件
rm -r 删除目录 -r 递归删除
rm -i 删除前提示
rm -f 删除文件不提示
rm -rf 删除目录(不提示)
rm -rf ./* 删除当前目录所有文件
mv 移动文件
例:
复制:touch test
创建:mkdir demo
移动: mv test demo/
修改名字: mv demo/test demo/abc test修改成abc
cp 复制copy
cp /etc/issue ./ 讲/etc/issue文件复制到当前目录
cp -r 递归复制目录
find 搜索
find /etc -name init 在/etc目录精确查找init文件
find /etc -name 'init*' 在/etc目录找init开头的文件
find /etc -name '?init' 在/etc目录找以init结尾,前面只有一个字符
find /usr/bin -size +3M 在/use/bin目录查找大于3M的文件
which 显示命令路径
which python3
cat 显示文件内容
cat /etc/hosts
more
more /etc/services 查看/etc/services件
空格 翻页
回车 下一行
b 上一页
q退出
head 查看文件头几行
head -n 5 /etc/services
tail 查看文件最后几行
tail -n 5 /etc/services 显示/etc/services文件最后5行
tail -f 监视文件变化
ln 创建连接
ln -s 源文件 新文件 (创建ls软连接)
例:ln -s readme.txt install.txt (写任何东西到软连接都会同步到源文件中,写到源文件中的数据不会同步到软连接)
ln 源文件 新文件 (创建硬链接)
(硬链接没有任何区别,相当于拷贝了一份,不管谁发生变化,另一方都会变化,不可以跨文件创建)
1.2解压和打包
tar.gz 格式
打包 tar -zcvf test.tar.gz test
将test目录打包,生成test.tar.gz文件
解压 tar -zxvf test.tar.gz
将test.tar.gz文件解压
.bz2格式
·打包tar -cjf test.bz2 text
将test目录打包,生成test.bz2
·解压tar -xjf test.bz2
将test.bz2解压
打包 zip -r test.zip test
将test目录打包,生成test.zip文件
解压 unzip test.zip
ContOS 下安装zip: yum -y install zip
Ubuntu 下安装zip: sudo apt install zip
Windows下,推荐用WinRAR压缩为ZIP格式,不要用"好压
file 查看文件类型
file test 查看test是什么文件
1.3 vi编辑器使用
---------------------
:wq 存盘并退出 (write and quit)
:w 存盘
:q 退出
:q! 不存盘强制退出
:wq! 强制存盘退出
ESC返回命令模式
:set nu 显示行号
:15 跳到第15行
G 定位到最后一行
gg 到第一行
/str 搜索str字符串,按n键到下一处
dd 删除一行(剪切)
5dd 删除5行(剪切)
yy 复制
5yy 复制5行
P 粘贴
u 撤销
ctrl + r 恢复上一步撤销操作
1.4 Linux的用户与权限管理
文件权限:
read 可读 4
write 可写 2
execute 可执行 1
r 读权限 可查看文件内容, 可列出目录内容
w 写权限 可以修改文件内容, 可以再目录中创建,删除文件
x 执行权限 可以执行文件, 可以进入目录
用户分类:
user 所有者
group 所属组
other 其它人
第一个字符D代表目录
用户组管理命令:
groupadd 添加用户组
groupdel 删除用户组
删除用户和组步骤:
1、删除 /homo/目录下的用户目录: rm -rf /home/名称/
2、userdel 用户
3、groupdel 用户组完成
用户管理命令:
useradd 添加用户
-g 指定用户组
-m 自动创建宿主目录(ubuntu)
-r 连同宿主目录一起删除
passwd修改用户密码(没有参数时修改自己的密码)
设置密码:password jack
权限操作:
chown jack testfile 改变文件的所有者,把testfile文件所有者改成jack
chgrp group1 testfile 改变文件的组
chmod u+x ./start.sh 改变文件的权限
例子:chmod g+w python/ 对组权限中加入w权限
chmod -R 777 /data/www
(7:4+2+1,5:4+1)
------------------------ 案例:---------------------
1、创建两个小组
python : groupadd python
php : groupadd python
2、创建3个用户
python组:jack mary
useradd -m -g python jack //创建用户,并加到python组中,宿主目录中会创建文件夹
useradd -m -g python mary
查看jack : id jack
查看组目录: ls /home/ 查看所有的用户
删除 /homo/目录下的用户目录: rm -rf /home/名称/
php组: lily tom
useradd -g -m php lily
useradd -g -m php tom
3、创建目录
/data/python
创建文件夹(加-p才能创建两层目录):mkdir /data/python -p
/data/php
创建文件夹(加-p才能创建两层目录):mkdir /data/python
4、配置权限目录:
python 组的同事允许再 /data/python 目录中工作
php组的同事允许再 /data/php 目录下工作
转让文件权限:
chown jack python/ 吧python文件夹转让给jack
chgrp python python 把python文件所属组给到python 组,要在文件主目录中操作.
文件权限配置:
chmod u+x 1.py
创建文件 touch 文件
1.5 Linux的进程管理
程序 是指令和数据的有序集合,是一个静态的概念
进程 代表一个正在运行的程序的实例
线程 通常在一个进程中可以包含若干个线程
在命令末尾加上 & 符号,就可以让程序在后台运行
程序正在前台运行,可以使用 Ctrl+Z 把程序暂停
jobs 查看运行的程序
bg 把暂停的程序放到后台运行
fg 把一个程序掉到前台运行
执行:python3 ./test.py &
----------------------------------
查看进程:
ps -ef | grep httpd
ps -aux |
UID 程序被该 UID 所拥有
PID 就是这个程序的进程ID
PPID 则是其上级父程序的进程ID
C 表示CPU使用的资源百分比
STIME 表示进程启动时间
TTY 登入者的终端机位置
TIME 使用掉的 CPU 时间。
CMD 所下达的指令为何
----------------------------------
查看进程的CPU和内存占用:
ps aux
ps -aux | grep httpd
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态,linux的进程有5种状态:
D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped`
Z 僵死 a defunct (”zombie”) process
注: 其它状态还包括W(无驻留页), <(高优先级进程), N(低优先级进程), L(内存锁页).
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
-------------------------------------
top命令:
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
----------------------------------------------
结束进程:
结束前台进程CTRL+C
kill 结束指定进程ID
-9 强制
pkill 进程名 pkill http
-----------------------------
查看硬盘空间:
df -h
-----------------------------
查看当前登录用户:
w
pkill -9 -t pts/1 把终端pts/1的用户踢出去
2 服务器软件安装与管理
2.1、二进制软件包管理
ubuntu
apt update //更新软件仓库信息
apt install -y zip //安装zip软件
apt remove zip //删除zip
centos
yum yodate //更新软件仓库
yum install -y zip //安装zip软件
yum remove zip //删除zip
2.2源码编译准备工作
apt install -y gcc g++ make (ubuntu)
yum install -y gcc gcc-c++ make (CentOS)
安装编译所需工具
wget http://example.com/xxx.tar.gz
下载软件源码包到服务器上
源码编译基本步骤
解压软件包,阅读安装说明README、INSTALL等
./configure --prefix=/usr/local/path(设置安装路径)
make
make install
编译nmap
https://nmap.org/
2.3 linux中MySql相关操作
1、安装mysql
apt update //更新仓库
apt install -y mysql-server mysql-client //安装mysql服务端、客护短
设置密码:
---------------------------------
①连接数据库
mysql -uroot -p
密码
②查看所有的库
show databases
---------------
③mysql的管理命令:重启、停止、开始
service mysql stop
service mysql start
service mysql restart
-----------------------
④mysql的配置
二进制安装目录: vi/etc/mysql/my.cnf 或者路径:/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
basedir = /usr/ --mysqls
程序安装位置
datadir = /var/lib/mysql --数据存放位置
port = 3306 --端口
bind-address = 127.0.0.1 --绑定地址,127.0.0.1地址只可在本机连接,
max_connections = 100 --最大连接数
slow_query_log = 1 --慢查询,查询慢的sql记录到文件中,方便查询,1是开机
slow_query_log_file = slow.log --记录位置
long_query_time = 2 --执行超过2,秒的就是慢查询
innodb_buffer_pool_size = 3G --缓存控制,默认安装值是最低,总内存的70%(专用),两种引型:InnoDb
查询配置文件:
vi /etc/mysql/my.cnf
真实地址:/etc/mysql/mysql.conf.d/mysqld.cnf
查看mysql状态:
查看最大连接: show variables like 'max_connections';
查看正在来接数:show global status like 'max_used_connections';
查看配置的空间: show variables like 'innodb_buffer_pool_size';
各种操作数量: show status like 'innodb_rows_%';
\s 查看状态
mysql手册:https://dev.mysql.com/doc/refman/5.7/en/
-----------------
备份数据库:
创建数据库:create database test;
show tables;
use test;
exit;退出
mysqldump -uroot -p密码 test >test.sql 备份
mysql -uroot -p密码 test <test.sql 恢复
2、用户授权
mysql默认情况不可以远程连接,查看当前用户:
select host,user from mysql.user;
①
用户授权:all、select、update、*.*不限制任何数据库和表,%位置代表主机IP地址
grant all on *.* to root@"%" identified by "letmein"
----------------
创建远程连接,
授权用户
- ,配置文件中注释掉 本地地址172.0.0.1
重启数据库
Service mysql restart
2.4 Linux中Django框架安装和启用
1、linux 下安装Django框架
apt update
python -V 查看版本
apt install Python3
---------------------------------
pip -V
pip3 -v
apt install python3-pip
---------------
pip3 install django 安装框架
clear
安装 指定版本的 Django 命令如下:
Pip3 install django==1.10.3
卸载:
Pip3 uninstall django
-----------------
django-admin startproject demo 创建项目
发布项目
python3 manage.py runserver 0.0.0.0:8080
python3 manage.py runserver 0.0.0.0:80 --就可以访问项目
---------
python -m django --version 查看版本
2.5 uWSGI 服务器的使用和Django项目的发布
pip3 install uwsgi //安装命令
启动命令:(--chdir指定项目目录)(--module哪一个模块 demo项目下的wsgi)(--daemonize/var/log/uwsgi.log指定日志文件)
//设置了默认端口就不用再加9090
uwsgi --http:9090 --chdir /root/demo --module demo.wsgi
uwsgi --http:9090 --module demo.wsgi --daemonize /var/log/uwsgi.log
--程序后台运行命令 项目目录下:
uwsgi --http :9090 --chdir /root/demo1 --module demo1.wsgi --daemonize /var/log/uwsgi.log
日志路径:/var/log/uwsgi.log
搜索
--------------结束进程---------------
ps -ef |grep uwsgi
结束进程(只结束父进程就可以):
kill -9 父线程号
-----
把uwsgi加到配置中,开机自启
vi /etc/rc.local
把下面的放进去:(which uwsgi 查看地址)
uwsgi地址 --http :80 --chdir /root/demo --module demo.wsgi --daemonize /var/log/uwsgi.log
2.6性能测试
吞吐率(Requests per second)
并发连接数(The number of concurrent connections)
并发用户数(The number of concurrent users,Concurrency Level)
用户平均请求等待时间(Time per request)
服务器平均请求等待时间(Time per request: across all concurrent requests
)
----ab---工具
ab (apache bench)
apache提供的一个压力测试工具
apt install apache2-utils
ab -c 20 -n 10000 http://exampl.co
3 高并发下的web架构一
3.1反向代理与负载均衡
1. 了解反向代理与负载均衡技术
什么是负载均衡
通过某种负载分担技术,将外部发送来
的请求均匀分配到对称结构中的某一台服务器
上,而接收到请求的服务器独立地回应客户的
请求。
负载均衡的实现
硬件负载均衡、软件负载均衡,DNS
软件负载均衡
Nginx
轻量级的Web服务器/反向代理服务器
特点
工作在网络的7层之上
对网络的依赖非常小
并发大,性能不俗
- 熟悉Nginx安装与配置
apt update
apt install –y nginx
service nginx start
service nginx stop
service nginx restart
nginx -t
nginx -s reload //平滑的重启。配置重载。
---说明,这时候,启动Nginx后,通过页面就可以访问IP地址
②Nginx主配置文件
vi /etc/nginx/nginx.conf
user www-data; //代表nginx以什么身份运行;
worker_processes auto; //工作进程数,默认,根据CPU数量来设置;
pid /run/nginx.pid; //会将启动文件放到这个文件中
events {
worker_connections 768; //代表一个owrk能处理多少个并发; 进程数*worker连接数=并发数
}
http {
gzip on; //网页压缩,on是开启
access_log /var/log/nginx/access.log; //成功日志
error_log /var/log/nginx/error.log; //错误日志
include /etc/nginx/conf.d/*.conf; //配置文件,每个配置文件已分号结束。
include /etc/nginx/sites-enabled/*;
}
③Nginx的server配置
vi /etc/nginx/sites-enabled/default
server {
listen 80; //监听端口
root /var/www/html; //指定网站根目录在什么地方,默认访问此网页
index index.html index.htm; //默认去访问的文件
server_name _; //_中通常填写域名
location / {
try_files $uri $uri/ =404; //尝试输入的数据当成文件去查看,没有加/当目录查找,没有报错;
}
}
3. 了解Nginx反向代理与负载均衡
④Nginx反向代理
server {
......
location / {
proxy_pass http://192.168.88.3:81; //一旦有访问Linux地址,就跳转到这里
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
⑤Nginx负载均衡
upstream backend {
server 192.168.8.3:80 weight=1;
server 192.168.8.4:80 weight=1;
}
location / {
proxy_pass http://backend;
}
3.2-Memcached缓存
1. 了解什么是缓存
缓存为王
DNS、浏览器、App、代理缓存、服务端缓存
*内存缓存
RDB Memory
随机访问情况下,内存访问速度比硬盘访问速度快上10万倍以上
*缓存算法
1. LRU(Least Recently Used)
最近最少使用
2. LFU(Least Frequently Used)
根据数据的历史访问频率来淘汰数据
①安装
apt install -y memcached
service memcached stop
service memcached start
service memcached restart
②参数配置
vi /etc/memcached.conf
-d 守护进程
-m 内存,default 64MB
-u 运行用户
-l 监听的服务器IP地址
-p 监听端口,默认是11211
-c 并发连接数,默认是1024
③安装
apt install -y memcached
service memcached stop
service memcached start
service memcached restart
telnet 127.0.0.1 11211
version
stats
④状态
telnet 127.0.0.1 11211
stats
STAT pid 237784 # 进程ID
STAT uptime 2070631 # 运行秒数
STAT version 1.4.25 # 版本
STAT libevent 2.0.21-stable # libevent 版本
STAT pointer_size 64 # 系统指针(32bit/64bit)
STAT curr_items 50237 # 当前实例存储的 items数量
STAT total_items 1337400 # 实例启动以后存储的 items总数量
STAT bytes 35169108 # 实例存储 items占用的字节数
STAT curr_connections 349 # 当前打开的连接数
STAT total_connections 108429 # 实例启动后打开的连接总数
STAT cmd_get 14005676 # get 命令总请求次数
STAT cmd_set 1337400 # set 命令总请求次数
STAT get_hits 12596511 # 总命中次数
STAT get_misses 1409165 # 总未命中次数
STAT evictions 0 # 为获取空闲内存而删除的 items数
STAT bytes_read 4918928094 # 总读取字节数(请求字节数)
STAT bytes_written 46027378599 # 总发送字节数(结果字节数)
STAT limit_maxbytes 1572864000 # 分配的缓存大小
STAT threads 4 # 当前线程数
⑤Python中使用
# pip install python-memcached
import memcache
# 链接
mc = memcache.Client(['127.0.0.1:11211'])
# 存入
mc.set('name', 'python', 60) # 过期时间秒
# 读取
res = mc.get('name')
# 删除
mc.delete('name'))
4 高并发下的web架构二
4.1理解同步与异步
-
- RabbitMQ是异步处理数据的;
同步:处理时间长
异步:
常见的消息队列软件:
RabbiteMQ、Redis
4.2安装RabbitMQ消息队列
-
- 基础概念:
↓
-
- 安装管理:
步骤①:安装
安装: Apt install -y rabbitmq-server
启动: service rabbitmq-server stop /start /restart
步骤②启动rabbitmq的web管理界面;
启动rabbitmq的web管理界面;
*在linux服务器中执行:启用management plugin web管理插件:
命令:rabbitmq-plugins enable rabbitmq_management
*在浏览器中输入服务器的IP地址和端口:
*添加用户
创建用户命令:rabbitmqctl add_user jack 密码 //此密码是访问rabbitmq网站的密码,qq=734428630
给用户指定角色:
给用户指定角色命令:
rabbitmqctl set_user_tags jack administrator //指定为超级管理员
这时候可以去网页中登录 jack账户
↓↓↓↓↓↓
说明:rabbitMQ中有很多的交换机,交换机可以连接很多的队列;
数据发送给交换机,交换机把数据放到应该放的队列中;
4.3. 在Python中使用RabbitMQ
Python中操作RabbitMQ需要安装一个扩展:pip3 install pika
(在Windows中使用就在win中安装)
*创建连接→创建通讯信道→声明交换机→
*运行python文件,发现失败,是因为jack的权限还不够,解决:
Linux中执行:rabbitmqctl set_permissions -p / jack ".*" ".*" ".*"
------------------------写Python程序-----------------
4.3.1真实的项目中怎么使用rabbitMQ:
安装模块: pip install celery
删除模块: pip uninstall celery
指定版本安装(支持windows): pip install celery==3.*
使用celery的程序后台执行:celery -A bankend worker
5自动化运维基础(psutil、ipy、dnspython)
5.1通过命令查看linux任务管理器相关命令
- top命令:查看cpu、内存kib、进程相关信息
Top中按1,可以对cpu排序;
- 查看硬盘情况:df -h
- 当前登录用户: W
- 网络流量: watch cat /proc/net/dev
⑤当前的cup情况、:cat /proc/cpuinfo info
5.2Python的piutil模块查看管理器
①使用psutil模块查看CPU相关命令:
安装:pip3 install psutil
进入Python3:直接输入 Python3
导入psutil: import psutil
查看CPU数量: psutil.cpu_count()
只显示物理核心CPU: psutil.cpu_count(logical=False)
Cup从开机以来使用的情况: Psutil.cpu_times()
Cpu当前的使用率: psutil.cpu_percent()
Cpu持续占有率特别高,则需报警
分别查看每个CPU使用情况: psutil.cpu_percent(percpu=True)
查看3秒钟CPU的使用率: psutil.cpu_percent(percpu=True,interval=3)
②使用psutil模块查看内存相关命令:
查看内存使用情况:Psutil.virtual_memory() 或者:根目录下 free -m
查看交换分区:psutil.swap_memory()
当前服务器有几个分区:Psutil.disk_partitions()
查看每个分区可用空间:psutil.disk_usage(‘/’) //根分区
硬盘的读写情况 :psutil.disk_io_counters() //可计算硬盘时间内写了多少,
③网络相关情况:
发送数据包和接收数据包: psutil.net_io_counters() //监控计算机流量状态
多块网卡,每块网卡情况:psutil.net_io_counters()
5.3psutil获取进程的相关信息
①psutil查看进程命令
拿到所有的进程ID: psutil.pids()
进程的详细信息:P = psutil.Process(1)
P.name() //输出进程名称
进程的可执行文件:p.exe()
进程的工作目录:p.cwd()
进程状态:p.status()
进程创建时间: p,creat_time()
查看进程由哪个用户创建: p.uids() p.gids()
进程所占用的CPU时间: p.cpu_time()
内存的利用率:p.io_counters()
进程有几个线程:p.num_threads()
②和联网相关的进程能看到网络信息
查看SSH和网络相关的连接: ps -ef |grep ssh
P = psutil.Process(进程ID)
P.name() //输出进程名
P.connections() //打印网络信息
可以用来分析进程有没有和别的网络连接
查看开机时间:psutil.boot_time()
对开机时间转换:
当前登录用户: psutil.users()
退出psutil : exit()
5.4 IPy模块的使用
用来处理IP信息相关的信息。
①IPy的安装和使用:
安装: Pip3 install ipy
进入Python:python3
查看是IPV几的IP地址:
网段的IP地址全部列出来:
判断IP是公网IP还是私网IP:
Ip = IPy.IP(“IP地址”)
Ip.iptype()
IP换成整数:ip.int()
16进制:ip.strHex 二进制:ip.strBin()
根据IP和子网掩饰码生成网段:
或:
IPy.IP(“192.168.1.0/255.255.255.248”,make_net=True)
判断一个IP地址和网段是否包含在另一个网段中:
‘IP地址’ in IPy.IP(“IP地址/网段”)
判断两个网段是否存在IP重复的情况:
5.5 dnsPython域名解析
安装: pip3 install dnspython
进入Python3,导入 import dns.resolver
*对域名A记录进行查询:
查询域名的MX邮件解析记录:
Res = dns.resolver.query(“qq.com”,”MX”)
[item for item in res
查看域名的NS记录(用一级域名):
Res = dns.resolver.query(“qq.com”,”NS”)
[item for item in res
作用:可以对网站或者项目进行域名监控,python脚本,每隔十分钟对IP地址解析,并访问
6发布windows中的项目到云服务中
①通过pscp来传输文件,使用方法如下:
pscp简要说明
pscp为window与Linux之间的文件传输工具,使用和Linux下scp命令相似。
pscp 安装
下载pscp 放到C:\WINDOWS\system32中,然后就可以在任何地方调用
参考:https://www.jianshu.com/p/101d42cd686b
远程传输到本地
pscp [options] [user@]host:source target
user:远程主机的用户名
host:远程主机的ip
source:远程主机上的文件, 只能是单个。
target:本地的存放路径可指定文件名。如:./test.txt, 若不指定则默认原文件名。
例:从172.17.1.100:22 机器的home/ubuntu/.ssh/id_rsa.pub文件copy文件到window的E盘根下
pscp -P 22 ubuntu@172.17.1.100:/home/ubuntu/.ssh/id_rsa.pub E:/
本地传输到远程
pscp [options]source [source....] [user@]host:target
source:本地的文件,多个文件用“空格”隔开
user:远程主机的用户名
host:远程主机的ip
target:远程的存放路径可指定文件名。如:/root/test.txt, 若不指定则默认原文件名
例:复制本地test.txt 和a.zip文件到远端主机
pscp -v test.txt, a.zip root@192.168.1.245:/root/
注意:
云服务中需要安装的包要全部安装好,开发环境和生产环境的python版本、Django版本要一致;
- 使用pscp
传,传输项目到云服务;
②使用
uwsgi
发布项目
③使用
Nginx
做反向代理
**
静态文件重定位,settings文件中:
STATIC_ROOT =os.path.join(BASE_DIR,”静态文件的路径”)
STATICFILES_DIRS = [
os.path.join(BASE_DIR, '/data/www/pro'),
]
监控及报警
1.使用python脚本自动化监控服务器资源及邮件和微信提示报警
2.使用python脚本自动化安装
3.自动化部署项目:
a.创建git仓库
b.开发测试环境部署
c.创建git账户,使用git账户创建共有仓库
d.使用git将Windows上的web项目推送到共有仓库
e.开发测试服务器使用root账户创建新项目目录,通过git克隆共有仓库的文件到新建项目目录
f.使用uwsgi发布项目