Linux基础与项目部署

Linux基础与项目部署

计算机系统涉及了太多分支和商业纠葛, 这节课我们不纠结正统的问题, 只从涉及的概念上进行分类

Unix和linux

  • Unix

    最古老的现代计算机系统, 始于60年代. 从商业上来讲, 只有unix认证的系统才是unix系统.

    • linux

      linux和unix不是单纯的继承关系, linux只是继承了unix的设计理念. 但是底层实现不同, 所以不完全兼容.

      linux不同的发行版, 只是侧重点不同. 本质是包管理不同.

      • ubuntu
        • 使用apt包管理工具
        • 对图形界面支持更加友好
        • 社区活跃, 更新更加积极
        • 更加侧重个人用户
      • centos
        • 使用yum包管理工具
        • 对底层硬件的兼容性更好
        • 使用yum包管理工具
    • mac os

      mac os可以看作和unix是继承关系, 完全符合unix规范.

  • Windows

    始于80年代, 强大的图形界面操作逻辑. 对用户更加友好.

win10安装linux

https://jingyan.baidu.com/article/ae97a64617a90bbbfd461d80.html

为什么使用linux做服务器

  • linux使用费用低
  • linux兼容性更好
  • linux是开源的
  • linux社区活跃
  • 很多新技术都是优先适配linux, 之后再移植到windows和mac os.
  • linux管理员拥有实际意义上的最高权限, windows和mac os很多时候没有办法修改

远程连接linux服务器

  • SSH连接

    • 什么是SSH

      SSH是一种网络协议, 用于计算机之间的加密登录

      // 使用ssh登录
      ssh user@host
      
      ssh ubuntu@121.5.18.188
      
    • ssh管理工具

      • windows

        mobaXterm

      • Mac OS

        shellcraft

      • Linux

        推荐公钥登录

    • ssh原理

      利用了非对称加密, 客户端和服务端互相发送了对方的公钥. 在传输的过程中用公钥对数据进行加密, 得到加密后的数据再通过私钥进行解密.

    • ssh是绝对安全的吗?

      是也不是, 通过ssh建立的连接一定是安全的. 但是有一个前提, 那就是第一次连接的时候需要确认连接服务器是安全的, 这个风险是由用户自己承担.

  • 公钥登录

    实际上就是对发送的公钥进行持久化, 这样就不用每一次都互相交换公钥

    • 生成私钥和公钥

      ssh-keygen
      
      # 查看当前公钥和私钥
      root@DESKTOP-PUHRNUT:~/.ssh# cd /root/.ssh
      root@DESKTOP-PUHRNUT:~/.ssh# ls
      
    • 将公钥发送到服务端

      ssh-copy-id user@host
      
      # 第一次发送公钥需要输入验证码验证
      
    • 取消公钥登录

      实际上就是再服务端删除持久化的公钥

      cd /home/用户/.ssh
      # 删除对应客户端的公钥
      vim .ssh/authorized_keys
      

linux目录树

linux没有像windows盘符这样的概念, 对于windows来说, 当前的根目录就是盘符. 而linux是/

在linux中, 一切皆文件, 访问硬盘和访问文件夹对linux来说没有任何区别.

  • /

    • bin

      我们执行的命令其实都是运行的可执行文件. 系统的基础可执行文件都在该目录下.

    • sbin

      跟/bin一致, 但是只有管理员权限才能执行

    • boot

      引导程序所在目录, 引导程序就是用来开机的时候引导进入系统, 多个系统就会有多个引导程序.

    • dev

      设备文件目录, 将对设备文件的访问转变为对设备的访问.

    • etc

      系统和程序配置文件存放的目录.

    • home

      一台机器可以有多个用户, 该用户配置和文件都存在home目录下

      一般我们代码会存在/home/用户/自定义目录 下

    • lib

      存放系统共享库的目录

    • sys

      存放内核文件的目录

    • var

      存放增量数据的目录

      日志一般都在/var/log 目录下

    • usr(unix shared resources)

      • bin

      • sbin

      • lib

      • local

        用户级别的程序目录, 用户自己编译的程序会默认安装到当前目录

用apt进行包管理

包管理需要root权限, sudo su

  • 安装

    # 初次使用apt命令需要执行apt-get update更新源
    apt-get install python3-pip
    
  • 换源

    由于各种各样的网络原因, 我们需要更换我们包管理的源. 换一个速度更快的镜像源

    • 阿里源

      https://developer.aliyun.com/mirror/
      
    • 中科大源

      http://mirrors.ustc.edu.cn/help/ubuntu.html
      
    • 配置源

      • 备份

        cp /etc/apt/sources.list /etc/apt/sources.list.bk
        
      • 清空sources.list

        echo "" > /etc/apt/sources.list
        
      • 添加配置

        一定要注意配置的版本

        vim /etc/apt/sources.list
        
  • 卸载

    apt-get remove python3-pip
    apt-get autoremove python3-pip  // 自动卸载依赖和配置, 卸载地更干净
    
  • 更新

    更新就是安装指定的版本

    apt-get install redis-server=5:4.0.9-1
    
  • 搜索包

    apt-cache madison redis-server
    

文件操作

  • 切换目录

    cd /目录/次级目录
    cd .. 返回上级目录
    
  • Create

    • 创建文件

      > /目录/文件名
      
    • 创建目录

      mkdir test_dir
      
    • 复制文件

      cp 文件路径  目标路径
      
    • 复制目录

      cp -r 目录路径  目标路径
      
  • Retrieve

    • 显示目录下的文件和目录

      ls 目录    // 默认目录为. 也就是当前目录
      ls -a     // 显示隐藏文件和目录
      ls -a -l   // 显示文件和目录详情
      
    • 匹配文件或者目录

      涉及到管道符号|, 它可以接收上一条指令的结果作为参数处理

      grep(global regular expression and print out the line)全局正则搜索并输出到控制台

      ls | grep *_dir
      
    • 排序

      • 根据时间排序

        ls -l -t
        
      • 根据大小排序

        ls -l -s
        
    • 搜索查询

      可以使用ls -R做简单的递归搜索, 但是有更专业的命令find

      • 根据关键词搜索

        find 路径 -name "regex"
        find 路径 -name "*py"
        
      • 根据类型来进行搜索

        find 路径 -type d
        find 路径 -type f
        
    • Update

      • 移动文件或者目录

        mv 文件路径/目录路径  目标路径
        
        mv  test_dir  test_dir2
        
    • Delete

      • 删除文件

        rm -f 文件路径 // -f 表示强制移除, force
        
        rm -f new_test.py
        
      • 删除目录

        rm -rf test_dir  // -r 表示递归, recursive
        
      • 删除匹配的文件或者目录

        rm -rf *.py
        

修改权限

Linux当中权限其实比较复杂, 分为3个组和3种操作

  • 3个组

    • 拥有者(user)
    • 组(group)
    • 其他组(other)
  • 3种操作

    • 读® --------4
    • 写(w)--------2
    • 可执行(x)—1
    drwxr-xr-x
    d          rwx   r-x     r-x
    代表文件夹   user  group   other
    
  • 设置所有人拥有所有权限

    chmod 777  文件路径
    chmod 777 -R 目录路径   // 该目录下的子目录和文件都会和该目录的权限保持一致
    
  • 设置只有当前用户拥有权限

    chmod 700 文件路径
    chmod 700 -R 目录路径
    

文本操作

有vi, cat, geditor等, 但这里老师推荐使用vim

  • 安装vim

    apt-get install vim
    
  • Create

    • 新建/打开文件

      vim 文件路径  // 如果没有该文件, 则创建新的文件
      
    • 输入内容

      • 进入输入模式

        > 输入a/i, 进入INSERT模式
        > 输入完毕后, 输入 esc 退出INSERT模式
        > 输入 :  进入控制台
        > 输入 w 进行保存
        > 输入 :  进入控制台
        > 输入 q 退出文件编辑模式
        
        • 保存并退出

          合并保存和退出指令
          :wq
          
        • 不想保存, 强制退出

          :q!
          
    • 复制文本

      右键选中, 右键会在光标所在位置粘贴

  • Retrieve

    • 搜索

      > :/目标字符串
      > 输入 N 表示next
      > 输入 shift+N 表示last
      
    • 移动到第一行

      不需要进入控制台

      gg
      
    • 移动到最后一行

      G
      
  • Update

  • Delete

    移除当前行的所有内容

    dd
    

状态查看

查看状态需要在root用户下进行

  • 查看资源的使用情况

    top
    
    • PID

      当前进程的ID

    • 杀死占用资源过多的进程

      kill -9 PID
      
    • %CPU

      cpu占用资源情况

    • %MEM

      内存占用资源情况

  • 查看当前进程信息

    查看当前服务器哪些进程在运行

    ps -ef
    
    ps -ef | grep 字符串
    
  • 查看端口使用情况

    netstat -tunple
    
  • 查看内存的使用情况

    free -h
    
  • 查看磁盘的使用情况

    df -h
    
  • 查看历史命令记录

    history
    
    • 调用历史命令

      !command_id
      

硬件/系统信息

有些包需要确认当前硬件版本

  • 查看系统版本

    cat /proc/version
    
  • 查看cpu信息

    cat /proc/cpuinfo
    
  • 查看内存信息

    cat /proc/meminfo
    
  • 查看显卡信息

    lspci |grep -i "vga"   // -i 表示ignore, 忽略大小写
    

准备工作

  • 将项目代码拉到linux本地环境

  • 安装环境

    • 虚拟机当中有python冲突

      • 自己安装一个新版本python

        apt-get install python3.7
        apt-get install python3.7-venv
        
    • 创建虚拟环境

      python3.7 -m venv venv
      
    • 激活虚拟环境

       source venv/bin/activate
      
    • 安装依赖

      pip install -r requirements.txt
      

Nginx

  • Nginx

    高性能http服务器及反向代理服务器.

  • 为什么使用Nginx

    一个域名对应的只有一个IP, 一个IP对应一台服务器, 一台服务器可以启动多个服务.

    那么我们怎么让服务器知道当前的请求应该由哪个服务来处理呢?

    统一管理当前服务器内开启的对外暴露服务.

    • 减少了对外暴露的端口, 隐藏真实服务地址, 增加了安全性.
  • 安装nginx

    apt-get install nginx
    
  • 启动和关闭nginx

    service nginx start
    service nginx restart
    service nginx stop
    
    • 127.0.0.1, 0.0.0.0, localhost的区别

      • localhost

        localhost就是一个默认的本机域名, 你可以手动对其进行配置

      • 127.0.0.1

        回环地址, 127开头的地址是一类向自身发送通信的特殊地址

      • 0.0.0.0

        代表本机所有IP地址, 如果你想让外部可以访问到你的服务, 则需要将服务绑定到0.0.0.0地址上.

  • nginx部署静态资源

    • 修改nginx配置文件

      vim /etc/nginx/sites-available/default
      
      // 添加以下配置
      location /static/ {
              alias /var/static/;     // 当前静态资源保存的路径
              autoindex on;
              add_header Cache-Control private;
              expires 30d;
              }
      
    • 重启nginx

    • 配置静态资源的好处

      前后端分离, 静态资源的问题可以由前端自由管理和控制.

uWSGI

https://uwsgi-docs.readthedocs.io/en/latest/
  • 什么是uWSGI

    WSGI只是一种协议, 用来解决一个请求到服务端, 服务端与内部应用的交互.

    uWSGI是一个项目, 目的是通过统一的API和配置风格, 集成应用服务器, 代理, 进程管理, 监控等功能

  • 为什么需要uWSGI

    • 性能问题: 通过python manage.py runserver命令来启动的是单进程多线程的应用.
    • uWSGI可以更好地控制并发
  • 安装uWSGI

    # 在创建虚拟环境前和环境后各第一时间安装一次, 避免出错.
    pip3 install uwsgi
    
  • 配置uWSGI

    https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html
    
    • 在当前项目下创建uwsgi.ini

    • 添加以下内容

      [uwsgi]
      # 项目本地服务地址
      http=127.0.0.1:5000
      
      # 观察项目得运行情况
      stats=127.0.0.1:5100
      
      # 项目的虚拟环境
      virtalenv=/home/tunan/my_blog_2/venv
      
      # 项目的根目录
      chdir=/home/tunan/my_blog_2
      
      # 绑定wsgi协议
      wsgi-file=myblog/wsgi.py
      
      # 设置进程数, 跟cpu一致即可.
      processes=12
      
      # 线程数目
      threads=4
      
      # 导出的log日志
      logto=/var/log/myblog.log
      
      # 如果django项目中使用了STATIC, 就要作静态资源的映射
      static-map=/static=static
      
  • 启动uwsgi

    uwsgi --ini uwsgi.ini &
    
  • 在nginx中做代理转发

    location /myblog/ {
    	proxy_pass http://127.0.0.1:5000;
    }
    
    * 代理转发之后, http://127.0.0.1:5000的外部地址是http://域名/myblog.  
    
    • 解决url匹配的问题

      url也要做相应的修改, 将myblog添加到最高级路径
      
  • 查看nginx日志

    cd /var/log/nginx
    
    • access.log

      访问日志

    • error.log

      错误日志

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值