Linux相关
1. 闲话
软件开发的生命周期
1.产品提需求
2.数据库设计(开发阶段),后端开发
3.前端页面开发
4.代码测试,单元测试,没有bug了
5.此时代码测试没有bug了,还不足以支撑一个并发的网站
6.此时运维工程师,负责产品上线,将代码部署到linux服务器上,对外提供访问
django并发性很差+nginx,支持负载均衡,支持反向代理,让你的网站足以支撑10万+并发,mysql数据都放在磁盘上,受到磁盘性能的影响,机械硬盘速度只有固态硬盘的1/10速度,mysql的主从复制,防止单点机器故障,数据受影响。
使用redis缓存数据库,数据都放在内存当中,消息队列,让你的网站,足以支撑秒杀的并发危险性。
部署django的流程
1.代码拷贝
2.python解释器安装
3.python模块安装
4.可以正常运行代码docker容器技术,解决你所有的软件部署问题
服务器硬件厂商:
1.dell
2.hp
3.联想
4.浪潮
5.ibm服务器分类:互联网公司,怎么选择服务器?一般有什么
1.物理服务器,有钱的大公司,买自己的服务器,建造自己的机房(零度,无尘,无静电)防止机器短路,数据丢失
-有钱的公司,bat,建造自己的机房
-中等的公司,普通的外企,也有自己的服务器,但是服务器,托管在别人的机房(世纪互联这家公司)2.云服务器,阿里云,腾讯云(便宜,省钱,无烦恼),初创型的小公司
3.vmware虚拟化技术
vmware虚拟化技术
- 个人学习版, vmware workstation
-性能较低,根据你笔记本的硬件资源来分配 ,性能越高,分配的虚拟机越多 - 企业版虚拟化 vmware vsphere
26台dell实体服务器,通过虚拟化技术,分配了100+的redhat 100+的centos - 都是在一个物理机器上,安装多个操作系统
使用:
- Windows系统加VMware软件+xshell远程登录工具
linux的默认终端有7个,7个屏幕
ctrl + alt + f1-f7
使用linux的步骤
1.配置远程连接工具 xshell
2.通过命令,远程连接服务器
ssh这个命令,
语法格式:
ssh root@服务器地址 ssh [email protected]
windows是反斜杠,linux是正斜杠的目录分隔符
linux的目录结构,是 以 / 这个根目录 为源头划分
- 绝对和相对路径的概念
- 绝对路径:以根目录为起点的路径,就是绝对路径,如 /opt/rh
- 相对路径: 不是根目录为起点的目录,就是相对路径
- . 当前目录
- .. 上一级目录
- ./ 当前目录下的某些内容
管理网络的文件夹,路径
/etc/sysconfig/network-scripts/
查看管理网络的文件内容
ifcfg-ens33
这个就是网卡的配置文件了 确保一个参数是yesONBOOT=yes
#代表机器启动时,就加载ip地址 通过命令重启网卡systemctl restart network
系统服务管理命令 重启 网络服务
Linux用户权限
超级用户:群主 root 拥有超级用户权限的人:管理员 sudo 加上你的命令,临时提权的 渣渣用户:普通成员 linux的普通用户成员 权限的目的:保护文件信息安全的 创建用户 useradd 更改用户密码 passwd root用户就是皇帝,他的皇宫 /root 普通用户,只有一个小破房子,还是统一管理地方/home 比如有一个kun普通用户,/home/kun 普通用户的信息都存放到了/etc/passwd
临时提权的命令sudo
1.修改sudoers配置文件,把你想提权的用户写进去 编辑配置文件 vim /etc/sudoers 2.写入如下信息,定位到那一行 ## Allow root to run any commands anywhere root ALL=(ALL) ALL kun ALL=(ALL) ALL #允许kun在任何地方,执行任何命令 3.使用sudo命令 sudo 你想执行的命令
删除用户
userdel -r 用户名 #删除用户信息,和家目录
2. Linux 结构目录
- /bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令。
- /boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
- /dev :dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
- /etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录。
- /home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
- /lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
- /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
- /media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
- /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
- /opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
- /proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
- /root:该目录为系统管理员,也称作超级权限者的用户主目录。
- /sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
- /selinux:这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
- /srv:该目录存放一些服务启动之后需要提取的数据。
- /sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
- /tmp:这个目录是用来存放一些临时文件的。
- /usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
- /usr/bin:系统用户使用的应用程序。
- /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
- /usr/src:内核源代码默认的放置目录。
- /var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
3. Linux基础命令
http://linux.51yip.com/ Linux 中文手册
pwd 打印当前工作的目录
ls list的意思,查看当前文件夹有哪些
- ls -a 显示文件夹所有内容,以及隐藏文件
- ls -la 以列表形式,详细输出文件信息
- ll 等于 ls -l
man 手册 ,解释linux的命令如何使用
cd 更改工作目录的命令
mkdir 文件夹的名字 文件夹是蓝色的
- mkdir -p 递归创建文件夹 mkdir -p /tmp/martin/{小明,小兰/新一}
rm remove删除命令
- rm 加上要删除的内容,文件夹,或文件
- rm 什么都不加,其实是 rm -i 文件, 确认是否删除文本
- rm -r 文件夹 -r 参数是递归删除的意思 -f force参数,强制删除,不提示
- rm -rf 文件夹 #强制删除这个文件夹,且不提示
mv命令,重命名,移动文件位置
touch 文本名 普通文本是白色的
echo $name #打印出变量的值
- echo $PATH PATH:定义了一对文件夹的路径,当我输入命令的时候,计算机优先去PATH中寻找路径,是否有这个命令
ifconfig 查看网卡信息
ip addr show 显示出ip网卡的信息
- ip a 效果同样
[root@localhost ~]#
- @ 占位符
- localhost 当前机器主机名
- ~ 当前你所在的路径
- $ 普通用户的身份提示符
创建Linux普通用户
- useradd 用户名 创建的用户信息会放在/etc/passwd 这个文件下
- useradd martin
- passwd martin 给martin修改简历
linux 安装tree命令
- yum install tree
Linux的特殊符号含义
~ 用户家目录 - 上一次的工作目录 . 当前目录 .. 上一级目录 ./ 当前工作目录 > 重定向覆盖输出符号 w 模式 >> 重定向追加输出符号 a 追加 << 重定向追加写入符号 用在mysql数据导入时候
more less 用于查看很大的文本,cat读取文件,一次性读取,非常占内存,用于读取小文件
linux复制文件,文件夹
- cp 你要复制的内容 复制之后的文件名
- cp filename filename.bak
- cp -r 文件夹 新文件夹
linux下的搜索命令
- find 从哪找 -name 你要找的文件名
- -type 指定文件类型 f 文本类型 d文件夹类型
find / -name heeh.txt # 全局搜索 find /etc -name heeh.txt #局部搜索 找出/etc/下所有的txt文本 find /etc -name "*.txt" 找出/etc下所有的python相关的文件信息 find /etc -name python* 找到/etc/下所有的python文件夹 find /etc -type d -name python* find /etc -type f -name python*
linux管道符的用法 第一条命令 | 第二条命令
#用在查看linux进程信息 ps -ef | grep python netstat -tunlp |grep 3306 #确认mysql是否启动了3306端口 netstat -tunlp |grep 8000 #验证django是否正常启动
过滤字符串命令,过滤文本信息
grep 参数 你要过滤字符串 你要操作的文件
grep -i "all" settings.py -i 是忽略大小写 -v 是翻转搜索结果 #过滤掉settings.py中无用的信息(空白行,注释行) grep -v "^#" settings.py | grep -v "^$"
从文件的头,尾 开始看
head -5 filename #看文件的前五行 tail - filename #看文件的后五行 tail -f filename # 实时监测文件信息
别名 alias
- alias rm="echo 求你别用rm了"
- unalias rm # 取消别名,重新赋值别名变量也可以
远程传输命令 —可以在两台Linux之间互相传递文件
- scp 你想传输的内容 你想传输到的地方
#把自己的文件 发送给别人 scp 小姐姐电话.txt [email protected]:/tmp/ #把别人的文件夹拿过来 scp -r [email protected]:/tmp/s19/ ./ #把自己的文件夹,发送给别人 scp -r 你的文件夹 用户名@其他人的服务器ip:路径
如何统计/var/log/文件夹大小
方式1:
- ls -lh . #详细的显示当前文件信息,和大小单位
方式2:
du 命令 -h 显示 kb mb gb 单位 -s 显示合计大小
du -sh /var/log/
linux的任务管理器 top
给文件加锁 解锁
chattr + a 文件 # 给文件加锁 lsattr 文件 lsattr filname # 显示文件是否有锁
linux的时间同步
date 查看当前系统时间
和阿里云的时间服务器同步
ntpdate -u ntp.aliyun.com #和阿里的时间服务器同步 -u 更新
wget命令 在线下载一个资源 wget url地址
关闭linux的防火墙
- iptables -F # 清空防火墙规则
linux和windows互传文件的软件 lrzsz
yum install lrzsz -y
rz 接受文件(从windows接受文件)
sz 发送文件(发送linux文件给windows)linux切换用户的命令,普通用户切换超级用户
普通用户执行 su - root #输入root的密码即可
查看linux用户的身份id信息
id kun #查看用户身份id [root@localhost home]# id moyer uid=1002(moyer) gid=1002(moyer) groups=1002(moyer) uid 用户id号码 gid group id 用户组 id groups 组id号码 系统超级用户 uid 默认是 0 系统常用服务的用户 系统默认会创建mysql用户,去执行mysql这个软件,他的id是从1-999之间 root创建的普通用户,默认id是从1000开始的 用户组 ,一组同样身份信息的用户 用户 ,普通用户
linux的文件权限
文件拥有这分三类 属主,属组,其他人 linux文件的分类 - 普通文本 d 文件夹 l 软连接
文件/文件夹权限 r read可读,可以用cat等命令查看 w write写入,可以编辑或者删除这个文件 x executable 可以执行
更改文件权限
chmod 权限 文件/文件夹权限 -rw-r--rw-. 1 root root 79 May 5 09:58 你好.txt -rw-r--rw- - 普通文本 rw- 指的是root用户 可读可写不可执行 users u r-- 指的是root组里的成员,只读 group g rw- 指的是其他人 可读可写,不可执行 others o #让你好.txt没有任何的权限 chmod u-r,u-w,u-x 你好.txt chmod g-r,g-w,g-x 你好.txt chmod o-r,o-w,o-x 你好.txt #让你好.txt 所有角色都有所有的权限 -rwxrwxrwx 你好.txt chmod 777 你好.txt #赋予文本最高的权限 权限分为 r 4 w 2 x 1 权限计算最高是 4+2+1 =7 最低是 0
更改文件的属主,属组
- chown 用户名 要操作的文件 #更改文件属主
- chgrp 组名 要操作的文件 #更改文件属组
软连接语法
- ln -s 目标文件 快捷方式绝对路径
linux的命令提示符
PS1变量
echo $PS1 #显示命令提示符
修改命令提示符
PS1="[\u@\h \w \t]$"linux的打包,解压缩的命令
tar命令 -c 打包 -x 解包 -z 调用gzip命令去压缩文件,节省磁盘空间 -v 显示打包过程 语法: tar -cvf 打包文件的名字 你要打包的内容 #实例: #压缩当前的所有内容到alltmp.tar这个文件中,这里不节省磁盘 tar -cvf 压缩文件的名字.tar ./* #解压的方式 tar -xvf 压缩文件的名字.tar #打包文件,并且压缩文件大小的用法,节省磁盘 tar -zcvf 压缩文件的名字.tar.gz ./* #解压缩 tar -zxvf 压缩文件的名字.tar.gz
django程序跑起来,如何检测呢?
1.去浏览器检测是否可以访问,192.168.16.30:8000
2.确认django的端口是否启动netstat -tunlp | grep 8000
3.确认django的进程是否存在ps -ef |grep python
杀死进程的命令 kill 进程id
支持正则的kill命令 (慎用,,) pkill 进程的名字
显示磁盘空间 df -h
什么是dns(域名解析系统),其实就是一个超大的网络电话簿
dns就是域名解析到ip的一个过程,
大型公司,用的dns服务名叫做 bind软件
提供dns服务的公司有
119.29.29.29 腾讯的
223.5.5.5 阿里的
223.6.6.6 阿里的
8.8.8.8 谷歌的
114.114.114.114 114公司的linux的dns配置文件如下
vim /etc/resolv.conf
里面定义了dns服务器地址linux解析dns的命令
nslookup
域名Linux的定时任务
分 时 日 月 周 * * * * * 命令的绝对路径 #每月的1,10,22日的下午4:45重启nginx 分 时 日 月 周 * * * * * 命令的绝对路径 45 16 1,10,22 * * /usr/bin/systemctl restart nginx
linux的软件包格式是rpm格式的
安装软件的方式(了解即可) 1.yum安装 如同pip(自动搜索你想要的软件包,以及它的依赖关系,自动解决下载) 2.源代码编译安装 3.手动安装rpm包(需要手动解决依赖关系,很恶心,不用) rpm命令的使用方式: 安装软件的命令格式 rpm -ivh filename.rpm # i表示安装 v显示详细过程 h以进度条显示 升级软件的命令格式 rpm -Uvh filename.rpm 卸载软件的命令格式 rpm -e filename.rpm 查询软件描述信息的命令格式 rpm -qpi filename.rpm 列出软件文件信息的命令格式 rpm -qpl filename.rpm 查询文件属于哪个 RPM 的命令格式 rpm -qf filename
Linux运行重启服务的命令
1.如果是centos6就是
service nginx start
2.如果是centos7 就是systemctl start/stop/restart nginx
更改主机名的命令
hostnamectl set-hostname 你想要的主机名 #重新登录回话后生效
4. 安装软件
4.1 Linux下如何安装python3
linux安装软件的方式
1.yum安装,最省心的
2.rpm包安装,需要手动解决依赖关系,很恶心
3.源代码编译安装(公司都用这种方式),可以自定义软件版本,以及功能扩展
编译安装python3步骤
1.下载python3的源代码 wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz 2.解压缩源代码 tar -xf Python-3.6.2.tgz tar 是压缩解压的命令 -x 是解压参数 -f 指定一个压缩文件的名字 3.必须解决编译安装所需的软件依赖,比如操作系统的gcc工具.... yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y 4.解决了软件依赖关系,就可以编译安装啦 5.进入python3的源代码目录,开始编译三部曲 1.第一曲,释放makefile,释放编译文件 cd Python-3.6.2/ ./configure --prefix=/opt/python362/ #告诉编译器,python3安装到哪里 --prefix 就是制定安装路的 2.编译第二曲 ,执行make指令,开始编译 ,编译完成后进行安装 make install make && make install 3.编译第三曲,配置python36的环境变量 echo $PATH #永久生效环境变量,需要写入到linux 全局变量配置文件中 /etc/profile vim /etc/profile #在最底行,写入如下配置即可 PATH="/opt/python362/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin" #然后读取配置文件生效 source /etc/profile
4.2 Linux配置阿里云的yum源
1.备份默认的yum仓库
linux的yum仓库地址:/etc/yum.repos.d/xx.repo
在这个目录的第一层文件夹下,名字以*.repo结尾的都会别识别为yum仓库
cd /etc/yum.repos.d
mkdir backrepo
mv * ./backrepo
2.找到阿里的镜像站
https://opsx.alibaba.com/mirror
3.通过命令,在线下载yum仓库源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
下载第二个源,epel源,你想要的很多工具都在这
#在线下载repo仓库文件,并且重命名,放到/etc/yum.repos.d/这个目录下
-O 就是 改名,且指定位置
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
4.测试安装mariadb数据库(其实就是mysql)
yum install mariadb-server mariadb -y #安装数据库
5.启动数据库
systemctl start mariadb
6.可以测试访问mysql数据库了
mysql -uroot -p
4.3 crm项目部署
nginx+ uwsgi + django + 虚拟环境 + supervisor + mariadb
django自带了socket服务端吗?wsgiref这个是python自带的socket模块,django默认用的是wsgiref的单机socket模块
Python manage.py runserver 这是调试命令,测试django是否有问题的
最终上线 是 uwsgi + django 的方式,
为什么要用nginx结合uwsgi
1.nginx支持静态文件处理性能更好,django uwsgi,默认不支持静态文件解析
2.nginx的负载均衡特性,让网站并发性更高
3.并且反向代理特性,用户访问 80,即可访问到8000的应用
4.uwsgi支持多进程的方式,启动django,性能更高
5.nginx转发请求给uwsgi ,应该用 uwsgI_pass ,实现了uwsgi协议的请求转发
如果出现错误,
python app application not found
就是你的uwsgi 没找到 wsgi.py 这个文件对象 application = get_wsgi_application()
配置步骤:
1.nginx + uwsgi + 虚拟环境 + mysql + supervisor
环境准备,准备一台linux
192.168.16.37 ,
第一步,先准备后端代码 crm
第二步:安装python3解释器,以及虚拟环境工具virtualenvwrapper
第三部,学习uwsgi命令,通过uwsgi启动ocrm
1.激活虚拟环境在虚拟环境下,安装所需的模块
安装如下内容即可
(crm) [root@nginx1 crm]# cat requirements.txt
Django==1.11.20
django-multiselectfield==0.1.8
PyMySQL==0.9.3
pytz==2019.1
2.安装这个文件
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
3.安装uwsgi命令
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple uwsgi
4.学习uwsgi启动ob_crm的命令
uwsgi --http :8088 --module mysite.wsgi --py-autoreload=1
--http 指定用http协议
:8088 指定ob_crm启动的端口
--module 指定django的wsgi.py的文件地址
指定你的django项目第二层的目录名,下面的wsgi.py
--py-autoreload=1 开启uwsgi的热加载功能
所以咱们用的命令应该是如下:
1.必须进入项目目录
cd /opt/teaching_plan/ob_crm
2.使用命令启动ob_crm (uwsgi不解析django的静态文件)
uwsgi --http :8088 --module ob_crm.wsgi
3.让你的项目支持热加载
uwsgi --http :8088 --module ob_crm.wsgi --py-autoreload=1
由于uwsgi的启动参数过多,我们互选择配置文件的方式,启动项目
uwsgi.ini 这个文件的名字,可以手动创建的
1.创建uwsgi.ini文件,写入如下参数
touch uwsgi.ini
写入如下内容,根据你自己的项目目录路径来更改
[uwsgi]
# the base directory (full path)
#填写你项目的绝对路径,第一层
chdir = /opt/teaching_plan/ob_crm/
#找到django的那个wsgi.py文件
#根据上面一条参数,的相对路径来写
module = ob_crm.wsgi
#虚拟环境的绝对路径
home = /root/Envs/ob_crm
master = true
#根据你的cpu核数来定义这个参数,启动多少个进程
processes = 4
# the socket (use the full path to be safe
#指定你的django启动在什么地址上,并且是什么协议
#如果你用了nginx,进行反向代理,请用socket参数
#如果你用了nginx,进行反向代理,请用socket参数
#如果你用了nginx,进行反向代理,请用socket参数
socket = 0.0.0.0:8000
#如果你没用nginx反向代理,想要直接访问django用这个参数
#如果你没用nginx反向代理,想要直接访问django用这个参数
#http = 0.0.0.0:8000
vacuum = true
py-autoreload = 1
~
2.通过配置文件启动项目
uwsgi --ini uwsgi.ini
3.收集django的所有静态文件,统一管理,丢给nginx去解析
1.修改django的settings.py,写入如下参数
STATIC_ROOT='/opt/s19static'
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
2.执行命令,收集静态文件
python3 manage.py collectstatic
nginx配置来了!!!
1.nginx的反向代理功能
2.nginx解析静态文件的功能
# 返回反向代理
location / {
uwsgi_pass 127.0.0.1:8000;
include uwsgi_params;
}
location /static {
alias /opt/s19static;
}
进程管理工具supervisor的使用
supervisor其实就是在帮咱们去执行命令
退出虚拟环境,在物理环境下安装
退出虚拟环境,在物理环境下安装
退出虚拟环境,在物理环境下安装
1.安装supervisor,通过pip直接安装
pip3 install supervisor
2.生成supervisor的配置文件
echo_supervisord_conf > /etc/supervisor.conf
3.修改配置,写入你管理ob_crm的命令参数
vim /etc/supervisor.conf #直接进入最底行,写任务
[program:s19_ob_crm]
command=/root/Envs/ob_crm/bin/uwsgi --ini /opt/teaching_plan/ob_crm/uwsgi.ini
stopasgroup=true
killasgroup=true
4.通过命令,启动supervisor,同时启动ob_crm
[root@nginx1 conf]# supervisor
supervisorctl 这是管理命令
supervisord 这个是服务端命令
启动服务端的命令
supervisord -c /etc/supervisor.conf
通过客户端命令,管理ob_crm
[root@nginx1 conf]# supervisorctl -c /etc/supervisor.conf
s19_ob_crm RUNNING pid 10483, uptime 0:00:36
supervisor>
停止任务
supervisor> stop s19_ob_crm
s19_ob_crm: stopped
查看任务状态
supervisor> status
s19_ob_crm STOPPED May 08 12:23 PM
停止所有的任务
supervisor> stop all
s19_ob_crm STOPPED May 08 12:23 PM
启动所有任务
supervisor> start all
s19_ob_crm RUNNING May 08 12:23 PM
5. 虚拟环境 virtualenv
1.python的虚拟环境,用于解决python环境依赖冲突的问题,仅仅是多个解释器的分身,多个解释器的复制,和操作系统无关
2.python虚拟环境的工具有很多 ,有virtualenv,pipenv ,pyenv
3.virtualenv 可以在系统中建立多个不同并且相互不干扰的虚拟环境。
5.1 virtualenv的学习安装使用
1.下载安装
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
2.安装完毕,就可以使用virtualenv命令,创建虚拟环境去使用了
#这个命令,在哪敲,就会在哪生成venv文件夹
virtualenv --no-site-packages --python=python3 venv #得到独立第三方包的环境,并且指定解释器是python3
#参数解释
--no-site-packages #这个参数用于构建,干净的环境,没有任何的第三方包
--python=python3 #指定虚拟环境的本体,是python的哪一个版本
venv 就是一个虚拟环境的文件夹,是虚拟python解释器
3.创建完毕venv虚拟环境,就可以激活使用了
进入venv/bin目录下
source activate #source是读取指令,读取这个activate脚本中的内容,激活虚拟环境
4.验证虚拟环境是否正确
which pip3
which python3 都来自于venv路径,就是对了
5.使用虚拟环境,分别构建django1 和django2的平台
注意,开启2个linux窗口
注意,开启2个linux窗口
注意,开启2个linux窗口
步骤1:分别下载两个venv1 venv2,用于运行不同的django
virtualenv --no-site-packages --python=python3 venv1
virtualenv --no-site-packages --python=python3 venv2
步骤2:这2个虚拟环境,都得单独的激活去使用
source venv1/bin/activate #激活虚拟环境
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django==2.0.1 #下载django模块
deactivate #退出虚拟环境
source venv2/bin/activate
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django==1.11.20 #下载django
deactivate #退出虚拟环境
5.2 保证本地开发环境,和线上一致性
1.导出本地python环境的所有模块
pip3 freeze > requirements.txt
2.将这个依赖文件,发送给服务器linux
requirements.txt
3.服务器linux上,构建虚拟环境,安装这个文件,即可
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pillow
5.3 virtualenvwrapper的学习使用
1.安装
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenvwrapper
2.配置环境变量,每次开机都加载virtualenvwrapper这个工具,注意配置的是个人环境变量配置文件
vim ~/.bash_profile #打开文件
#写入如下环境变量 export也是一个读取指令,让变量生效的
export WORKON_HOME=~/Envs #设置virtualenv的统一管理目录
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' #添加virtualenvwrapper的参数,生成干净隔绝的环境
export VIRTUALENVWRAPPER_PYTHON=/opt/python362/bin/python3 #指定python解释器,虚拟环境以谁去分身
source /opt/python362/bin/virtualenvwrapper.sh #执行virtualenvwrapper安装脚本
3.此时退出linux终端回话,重新登录,让virtualenvwrapper工具生效
4.学习virtualenvwrapper他的命令,管理虚拟环境
mkvirtualenv 虚拟环境的名字 #创建虚拟环境,存放目录是统一管理的
workon 虚拟环境的名字 #可以在任意目录直接激活虚拟环境
rmvirtualenv 虚拟环境的名字 #删除虚拟环境
lsvirtualenv 列出所有的虚拟环境
cdvirtualenv 进入虚拟环境的目录
cdsitepackages 进入虚拟环境的第三方包
6. nginx
Nginx 就是一个 web server
6.1 初始Nginx
静态网站 ,静态虚拟主机的作用
就是不变化的网页,静态的html,css js等页面,以及jpg gif mp4等静态资源
有一些草根站长,放一些小说,图片等等...动态网站
指的是,可以与数据库打交道,数据交互的网页,网页内容根据数据库的数据变化
登录功能,有注册功能的...
并且有编程语言支持的nginx的并发性非常强悍 轻松支持十万+并发连接数 tenginx
常见web服务器有哪些
windows下 IIS服务器
linux下的web服务器 nginx apache lighthttpweb服务器
nginx 这样的软件
web服务器它自己不支持编程,仅仅是页面返回,nginx + luaweb框架的概念
django flask tornado这样的 web逻辑框架
支持程序员自己写代码,进行逻辑处理nginx是web服务器、反向代理服务器、邮件代理服务器,负载均衡等等,支持高并发的一款web服务器
6.2 Nginx的安装使用
- 安装方式
- 1.yum
2.rpb手动安装
3.源代码编译安装,选择这个,支持自定义的第三方功能扩展,比如自定义安装路径,支持https,支持gzip资源压缩
- 1.yum
安装:
# 注意点,删除之前yum安装的nginx yum remove nginx -y #卸载yum安装的nginx 选择源码编译安装 注意,解决源码编译安装nginx所需的软件依赖,重要的事说三遍 注意,解决源码编译安装nginx所需的软件依赖,重要的事说三遍 注意,解决源码编译安装nginx所需的软件依赖,重要的事说三遍 执行它 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 执行它 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y 1.下载淘宝nginx的源代码包 wget http://tengine.taobao.org/download/tengine-2.3.0.tar.gz 2.解压缩源码包 tar -zxvf tengine-2.3.0.tar.gz 3.进入源码目录开始编译安装 cd tengine-2.3.0 编译安装三部曲 ./configure --prefix=/opt/tngx230/ make && make install 4.配置淘宝nginx的环境变量,写入/etc/profile 如下内容 PATH="/opt/python362/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/tngx230/sbin" 读取/etc/profile source /etc/profile 5.启动nginx 直接输入nginx 指令,默认代表启动,不得再执行第二次 nginx nginx -s reload #平滑重启nginx,不重启nginx,仅仅是重新读取nginx配置文件 nginx -s stop #停止nginx进程 nginx -t #检测nginx.conf的语法
6.3 Nginx的目录配置文件信息
[root@localhost tngx230]# pwd
/opt/tngx230
[root@localhost tngx230]# ls
client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp
#解释目录
conf 存放nginx配置文件的
html 存放前端文件目录 ,首页文件就在这里
logs 存放nginx运行日志,错误日志的
sbin 存放nginx执行脚本的
6.4 部署一个自己的web站点
修改index.html文件内容,即可看到新的页面内容
/opt/tngx230/html就是 nginx的网页根目录,放入任意的文件内容都可以被解析到
例如下载一张图片
cd /opt/tngx230/html
wget http://img.doutula.com/production/uploads/image/2019/05/07/20190507183856_lfUSFG.jpg
mv 20190507183856_lfUSFG.jpg xiaomaomi.jpg
此时可以访问 192.168.16.37/xiaomaomi.jpg
6.5 Nginx配置文件学习
#全局变量写在最外层
worker_processes 4;
events {
worker_connections 1024;
}
#定义nginx核心功能的参数
http {
include mime.types;
default_type application/octet-stream;
#定义nginx访问日志格式的
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#访问日志的功能
access_log logs/access.log main;
#对图片等静态资源压缩,提升传输效率
gzip on;
#nginx的主页面功能都是server参数提供的
#server被称作是虚拟主机
server {
#nginx监听的端口
listen 80;
#填写服务器的域名,或者ip,或者localhost
server_name localhost;
#路径匹配,当你的请求来自于 192.168.16.37/ 这样的url的时候,就进入以下的location路径匹配
location / {
#root参数,定义网页根目录的,nginx目录下的html,可以自由更改
root html;
#指定首页文件的名字的
index index.html;
}
#错误页面
#当请求返回404错误码的时候,就给用户看到一个页面
#这个404.html放在网页根目录下
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
6.6 错误页面和访问日志功能
就是打开nginx.conf里面的 如下参数
error_page 404 /404.html;
打开如下功能参数 nginx.conf
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
6.7 限制访问功能和检测当前有多少个链接数
就是在nginx.conf中 找到location 参数,写入如下信息
location / {
deny 你想禁止的ip地址;
deny 你也可以禁止一整个ip地址段;
deny 192.168.16.0/24; /24子网掩码地址 255.255.255.0
#root参数,定义网页根目录的,nginx目录下的html,可以自由更改
root html;
#指定首页文件的名字的
index index.html;
}
在nginx.conf下打开一个参数即可
#当你的请求 来自于 192.168.16.37/status ,就进入如下的代码块
location /status {
#开启nginx状态功能
stub_status on;
}
使用linux的压测命令 ,给nginx发送大量的请求
ab命令
安装方式
yum -y install httpd-tools
-n requests #执行的请求数,即一共发起多少请求。
-c concurrency #请求并发数。
-k #启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。
url必须格式如下
ab -kc 1000 -n 100000 http://192.168.16.37/
6.8 多虚拟主机
在一台服务器上,运行多个网站页面
基于多域名的虚拟主机实现,其实就是多个server标签
环境准备,1个Linux服务器,192.168.16.30
2个域名,我们是写入hosts文件,强制解析的假域名
www.dnf.com www.riju.com
安装好nginx软件,
配置方式如下
1.服务器准备好了,nginx也安装好了
2.在windows中写入hosts假的域名
找到如下文件,编辑写入域名对应关系
C:\Windows\System32\drivers\etc\hosts
192.168.16.37 www.dnf.com
192.168.16.37 www.riju.com
3.修给nginx.conf的配置,实现多虚拟主机,多个server{}标签是同级的关系
#第一个虚拟主机,dnf网址
server {
listen 80;
server_name www.dnf.com;
location / {
root /opt/dnf/;
index index.html index.htm;
}
}
#第二个虚拟主机,日剧的页面
server {
listen 80;
server_name www.riju.com;
location / {
root /opt/riju/;
index index.html;
}
}
4.准备2个网站的文件夹,以及页面文件
/opt/dnf/index.html
/opt/riju/index.html
5.重启nginx
nginx -s reload
6.访问2个虚拟主机的页面,在windows浏览器中访问
www.dnf.com
www.riju.com
6.9 Nginx的反向代理
1.见过生活中的代理
客户端(请求资源) -> 代理(转发资源) -> 服务端(提供资源)
房屋的中介,就是个代理
我们老百姓就是客户端,中介是代理,房东就是服务端提供资源的
买票,找到黄牛,黄牛提供12306的车票
代购
我们买东西, 找到代购,代购就可以提供我们想要的资源
2.客户端和 nginx 和 django 的关系
配置nginx实现反向代理的步骤:
环境准备2台机器,
192.168.16.37 充当资源服务器,提供一个页面
1.提供了一个dnf的页面
192.168.16.140 充当代理服务器的角色 (也是安装nginx,转发请求,反向代理的功能也是nginx提供的)
1.安装好nginx
2.修改如下配置 nginx.conf
#当你的请求来自于192.168.16.140/ 这样的url时,就进入如下location路径匹配
location / {
#当请求进来这个路径匹配,这个nginx代理角色,直接转发给资源服务器
proxy_pass 192.168.16.37;
}
3.测试访问反向代理的页面
访问 192.168.16.140即可看到192.168.16.37的页面了
7. Nginx负载均衡
nginx实现负载均衡的配置,动静分离的效果
1.环境准备,准备三台机器
192.168.16.37 资源服务器
192.168.16.140 资源服务器
192.168.16.241 充当代理服务器作用,以及负载均衡的作用
2.分别配置三台机器
192.168.16.37 资源服务器 提供dnf的页面
192.168.16.140 资源服务器 ,提供小猫咪的页面
(讲道理,应该是和192.168.16.37一样的代码配置,一样的页面)
192.168.16.241 负载均衡的配置
nginx.conf修改为如下的配置
1.添加负载均衡池,写入web服务器的地址
upstream mydjango {
#负载均衡的方式,默认是轮训,1s一次
#还有其他的负载均衡的规则
server 192.168.16.37 ;
server 192.168.16.140 ;
}
负载均衡的规则
调度算法 概述
轮询 按时间顺序逐一分配到不同的后端服务器(默认)
weight 加权轮询,weight值越大,分配到的访问几率越高,最常用的方式,
ip_hash 每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
url_hash 按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
least_conn 最少链接数,那个机器链接数少就分发
1.轮询(不做配置,默认轮询)
2.weight权重(优先级)
3.ip_hash配置,根据客户端ip哈希分配,不能和weight一起用
3.负载均衡的配置方式第二步骤
负载均衡器,接收到请求后,转发给负载均衡的地址池
location / {
proxy_pass http://mydjango;
}
4.动静分离的配置
1.配置动态请求的服务器
192.168.16.140 充当静态服务器,返回小猫咪的页面,以及一些图片资源
需要安装nginx即可
nginx.conf配置文件如下
#当所有请求来自于 192.168.16.140/时,就进入如下路径匹配,返回小猫咪页面
location / {
root html;
index index.html index.htm;
}
#当请求是192.168.16.140/**.jpg 就进入如下location匹配,返回/opt/images/目录下的内容
location ~* .*.(png|jpg|gif)$ {
root /opt/images/;
}
2.配置静态请求的服务器
192.168.16.37 运行django页面
安装nginx,以及django动态页面
1.先后台运行django页面
python3 nginx_django/manage.py runserver 0.0.0.0:8000 &
2.修改nginx的配置,可以转发,动静的请求
upstream mydjango {
server 192.168.16.37:8000;
}
upstream mystatic {
server 192.168.16.140;
}
server {
listen 80;
server_name 192.168.16.37;
#当外部请求,是192.168.16.37:80时候,就进入如下location,返回django页面,反向
代理
location / {
proxy_pass http://mydjango;
}
#当外部请求时,192.168.16.37:80/**.jpg,就转发给那台静态资源服务器,去处理
location ~ .*\.(png|jpg|gif)$ {
proxy_pass http://mystatic;
}
}
3.在负载均衡器上,配置请求转发
192.168.16.241 配置负载均衡,动静分离
1.定义一个upstrem地址池,进行请求分发定义
upstream myserver {
server 192.168.16.37;
server 192.168.16.140;
}
2.通过location进行请求分发的操作
location / {
proxy_pass http://myserver;
}
8. 数据库的主从复制
数据库主从复制
如果选择的是阿里云的yum仓库,安装命令如下
yum install mariadb-server mariadb -y
如果你要选择最新的mariadb软件,请配置官方的yum源
安装命令如下
yum install MariaDB-server MariaDB-client
2.安装好mysql之后,就可以启动使用了,注意要先初始化数据库
执行这个初始化命令
mysql_secure_installation
3.学习mysql的授权命令
允许mysql服务端,可以远程连接的命令
grant all privileges on *.* to root@'%' identified by 'centos'; #允许root用户在任意的主机地址都可以登录mysql服务端
flush privileges; #立即刷新权限表
4.客户端远程登录服务端的命令
mysql -uroot -p -h 主机的ip
5.mysql的备份与恢复
备份命令
mysqldump -u root -p --all-databases > /opt/alldb.sql
--all-databases 导出所有的数据库数据表
#指定数据库导出
mysqldump -u root -p -B ob_crm > /opt/crm.sql
#指定单独的数据库中的一张表导出
恢复数据,导入的命令:
方式1:
mysql -uroot -p < /opt/alldb.sql
方式2:
登录mysql之后,source读取db文件
MariaDB [test]> source /opt/alldb.sql;
mysql主从同步的配置
1.环境准备,准备2台linux,分别安装好mariadb数据库
2.先从master主库开始配置
1.停止数据库服务
systemctl stop mariadb
2.修改mysql配置文件,支持binlog日志
server-id=1
log-bin=s19-bin-log
3.重启mysql数据库,让binlog日志文件生效
systemctl restart mariadb
4.创建一个用户,用于主从同步
create user 's19'@'%' identified by 'centos';
5.给这个账号授予复制的权限
grant replication slave on *.* to 's19'@'%';
6.导出当前的数据库,发送给从库,保证数据一致
mysqldump -uroot -p --all-databases > /opt/mydb.sql
从库配置如下:
1.修改mysql配置文件,加上身份id ,vim /etc/my.cnf
[mysqld]
server-id=10
read-only=true
2.重启从库的mysql
systemctl restart mariadb
3.从库导入主库的数据,保证起点一致性
4.配置主从同步的关键参数
mysql > change master to master_host='192.168.16.37',
master_user='s19',
master_password='centos',
master_log_file='s19-bin-log.000001',
master_log_pos=583;
5.开启主从同步
start slave;
6.查看主从同步的状态
show slave status\G
7.去主库写入数据,查看从库的实时数据同步
mysql忘记密码怎么办:
1.修改配置文件,添加跳过授权表的参数
vim /etc/my.cnf
添加参数
[mysqld]
skip-grant-tables
2.用命令修改mysql的root密码
use mysql;
#更新root的密码
update user set authentication_string=password("centos") where host="localhost" and user="root";
#刷新权限表
flush privileges;
3.修改mysql的中文支持
查看数据库的编码
MariaDB [(none)]> \s
show create database douyin; #查看如何创建的数据库
show create table s19; #查看如何创建的表
desc s19; #查看表结构
4.修改mysql的服务端编码,让它支持中文
修改mysql的配置文件
vim /etc/my.cnf
修改为如下配置
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
5.修改数据库,表的字符集方式
修改数据库的编码
alter database douyin default character set="utf8";
修改数据表的编码
alter table xiu convert to character set "utf8";
刷新权限
flush privileges;