• Linux


    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 root@192.16.167.37

    windows是反斜杠,linux是正斜杠的目录分隔符

    linux的目录结构,是 以 / 这个根目录 为源头划分

    • 绝对和相对路径的概念
      • 绝对路径:以根目录为起点的路径,就是绝对路径,如 /opt/rh
      • 相对路径: 不是根目录为起点的目录,就是相对路径
      • . 当前目录
      • .. 上一级目录
      • ./ 当前目录下的某些内容

    • 管理网络的文件夹,路径/etc/sysconfig/network-scripts/

    • 查看管理网络的文件内容 ifcfg-ens33 这个就是网卡的配置文件了 确保一个参数是yes ONBOOT=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  root@192.168.16.41:/tmp/
      
      #把别人的文件夹拿过来
      scp -r root@192.168.16.41:/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 ]$"

    • 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
    Django1.11.20
    django-multiselectfield
    0.1.8
    PyMySQL0.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

    1. 静态网站 ,静态虚拟主机的作用

      就是不变化的网页,静态的html,css js等页面,以及jpg gif mp4等静态资源
      有一些草根站长,放一些小说,图片等等...

    2. 动态网站

      指的是,可以与数据库打交道,数据交互的网页,网页内容根据数据库的数据变化
      登录功能,有注册功能的...
      并且有编程语言支持的

    3. nginx的并发性非常强悍 轻松支持十万+并发连接数 tenginx

    4. 常见web服务器有哪些

      windows下 IIS服务器
      linux下的web服务器 nginx apache lighthttp

    5. web服务器
      nginx 这样的软件
      web服务器它自己不支持编程,仅仅是页面返回,nginx + lua

      web框架的概念
      django flask tornado这样的 web逻辑框架
      支持程序员自己写代码,进行逻辑处理

    6. nginx是web服务器、反向代理服务器、邮件代理服务器,负载均衡等等,支持高并发的一款web服务器

    6.2 Nginx的安装使用

    • 安装方式

      • 1.yum
        2.rpb手动安装
        3.源代码编译安装,选择这个,支持自定义的第三方功能扩展,比如自定义安装路径,支持https,支持gzip资源压缩
    • 安装:

      # 注意点,删除之前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:WindowsSystem32driversetchosts 
    	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 statusG
    
    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;

  • 相关阅读:
    USACO 5.5 Twofive
    USACO 5.4 Telecowmunication
    USACO 5.4 Character Recognition
    BZOJ 1001: [BeiJing2006]狼抓兔子
    USACO 5.4 Canada Tour
    USACO 5.3 Big Barn
    USACO 5.3 Network of Schools
    USACO 5.3 Window Area
    2017辽宁冬令营-4.蚂蚁
    2017辽宁冬令营-3.斐波那契
  • 原文地址:https://www.cnblogs.com/martin-yz/p/11166963.html
Copyright © 2020-2023  润新知