Linux基础与项目部署
计算机系统涉及了太多分支和商业纠葛, 这节课我们不纠结正统的问题, 只从涉及的概念上进行分类
Unix和linux
-
Unix
最古老的现代计算机系统, 始于60年代. 从商业上来讲, 只有unix认证的系统才是unix系统.
-
linux
linux和unix不是单纯的继承关系, linux只是继承了unix的设计理念. 但是底层实现不同, 所以不完全兼容.
linux不同的发行版, 只是侧重点不同. 本质是包管理不同.
- ubuntu
- 使用apt包管理工具
- 对图形界面支持更加友好
- 社区活跃, 更新更加积极
- 更加侧重个人用户
- centos
- 使用yum包管理工具
- 对底层硬件的兼容性更好
- 使用yum包管理工具
- ubuntu
-
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
错误日志
-