# cloud
**Repository Path**: su27sk/cloud
## Basic Information
- **Project Name**: cloud
- **Description**: 云服务器配置前后端项目的笔记,后期加上了Docker部分的笔记
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-16
- **Last Updated**: 2026-05-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 基础运维
## 1.Linux
1. Linux的基本目录结构,cd /切换到最根目录,cd ~切换到/root目录。【root@node1 ~】# 终端含义:用户名分隔符@主机名 坐在目录 #代表超级用户,$代表普通用户
2. /bin目录存放二进制命令;/home用来存放所有的普通用户;/root用来存放所有的超级用户;/opt用来存放软件安装包,如qq;/sbin用来存放管理系统相关,s代表超级用户,;/tmp用来存放临时文件;/usr用来存放用户或者系统相关文件,类似于program file;/dev用来存放设备相关文件;/etc用来存放配置信息文件,启动文件;/opt是安装第三方文件包,比如nginx;/var是安装经常变化的数据的
3. 常用命令
### 目录相关


### 文件操作


mv a.txt b.txt 将当前目录下的a.txt重命名为b.txt

### 文件查找操作
find命令: find 【查找范围】 【选项】【选项参数】

例子:
```angular2html
# 查找/usr目录下文件大小大于100M并且是文件类型的文件,将其拷贝到/root目录下面 ,{}代表之前查找到的文件,\;符合用来结束命令
find /usr -size +100M -type f -exec cp {} ~ \;
```
### 文件编辑
vim编辑器
命令模式,执行vi 文件名,进入文件,默认是命令模式,点击i进入编辑模式,按esc进入命令模式。

编辑模式一般会i就可以了
底行模式,命令模式按:进入

### 文件查看命令
用多种方法查看/var/log/messages
```angular2html
cat /var/log/messages
```
```angular2html
查看文件的前20行
head -20 /var/log/messages
```
```angular2html
查看文件的后50行
tail -50 /var/log/messages
看日志常用的,持续监听
tail -f /var/log/messages
```
```angular2html
查看文件中systemd的内容
less /var/log/messages
输入/systemd,按回车键
按n向下跳转
看完后按q退出
```
```angular2html
统计文件的行数
wc -l /var/log/messages
统计文件的单词数
wc -w /var/log/messages
统计文件的字符数
wc -m /var/log/messages
```
```angular2html
查看文件error字符
grep error /var/log/messages
配合管道符,将ll查看到的东西输送给grep,找到里面boot的内容
ll | grep boot
```
### 文件解压缩

## 2.项目部署

安装好三台服务器以后配置主机名 hostnamectl set-hostname node1.itcast.cn,然后输入su回车查看结果
### 1.安装MySql
### 2.安装Redis
### 3.云服务器接入阿里OSS
### 4.云服务器接入百度千帆大模型
### 5.完成后端项目部署
首先Linux环境下安装jdk,跳过了,简单不难
```angular2html
# 解压
jar -xvf your_jar_name.jar
# 修改完成以后重新压缩为jar包
jar -cvf0m your_jar_name.jar ./META-INF/MANIFEST.MF .
```
```angular2html
启动jar包
java -jar zzyl-admin.jar
```
```angular2html
jar包后台启动
# 安装screen
dnf install -y epel-release
dnf install -y screen
# 开启新窗口
screen -S "窗口名"
# 再次运行jar
java -jar zzyl-admin.jar
# ctrl a d 退出窗口 scren -r 回到窗口
```
启动成功

### 6.安装nginx以及前端
```angular2html
dnf install nginx -y
```
```angular2html
# 安装完成以后,进入到配置文件
cd /etc/nginx/nginx.conf
# 修改配置文件。然后重新加载配置文件
nginx -s reload
```
```angular2html
# 创建文件夹存放前端打包的dist文件夹
mkdir -p /var/www
# 配合nginx.conf配置生效
# 处理 静态页面
location / {
root /var/www/dist;
index index.html index.htm;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
try_files $uri $uri/ /index.html;
}
# 处理反向代理
location /prod-api/ {
proxy_pass http://172.24.155.118:9000/;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
}
```
### 7.最终效果

# Docker运维
## 安装Docker
参考文档:https://my.feishu.cn/wiki/Rfocw7ctXij2RBkShcucLZbrn2d
验证成功
```
docker -v # 安装版本
systemctl start docker # 启动docker
systemctl stop docker # 关闭docker
systemctl restart docker # 重启docker
systemctl enable docker # 设置开机自启
```
## 入门
安装MySql,并解读
```java
docker run -d \ # -d 后台守护进程运行
--name mysql \ # --name 容器名字,必须唯一
-p 3306:3306 \ # -p 端口映射,前面是宿主机端口,后面是容器端口
-e TZ=Asia/Shanghai \ # -e 设置环境变量
-e MYSQL_ROOT_PASSWORD=123 \
mysql # 采用的容器,标准来说要加上版本号,没加代表用最新的
```
## 基础
### 基础命令

用配置nginx的docker为例子
```java
# 拉取nginx镜像
docker pull nginx
# 查看镜像
docker images
# 镜像打包成nginx.tar文件
docker save -o nginx.tar nginx:latest
# 删除镜像
docker rmi nginx
# 将打包文件加载回镜像
docker load -i nginx.tar
# 将镜像运行为容器
docker run -d --name nginx -p 80:80 nginx
# 查看运行着的所有容器
docker ps
# 停止nginx容器
docker stop nginx
# 启动容器
docker start nginx
# 持续查看容器运行日志
docker logs -f nginx
# 进入容器内部 退出输入exit
docker exec -it nginx bash
# 删除容器
docker rm nginx
#查看容器具体信息
docker inspect nginx
```
### 数据卷挂载
需求:
创建 Nginx 容器,修改 nginx 容器内的 html 目录下的 index.html 文件,查看变化
将静态资源部署到 nginx 的 html 目录
```
# 进入nginx容器内部
docker exec -it nginx bash
# 通过查资料了解到index.html文件在如下目录
cd /usr/share/nginx/html
# 但是因为容器是最下化的,vim等工具都没有,直接改不了
```
数据卷是一个映射桥梁,宿主机文件和容器的文件相互映射
```java
# 先将老的nginx容器删除以后run一个新的,做好数据卷的挂载
docker stop nginx
docker rm nginx
# 关键是-v,含义是将一个名为html的数据卷和/usr/share/nginx/html绑定
docker run -d --name -p 80:80 -v html:/usr/share/nginx/html nginx
```
之后就是关于数据卷的操作了
```java
# 查看所以的数据卷
docker volume ls
# 查看html数据卷的详细信息,得到数据卷的详细位置(/var/lib/docker/volumes/html/_data)
docker volume inspect html
# 切换位置
cd /var/lib/docker/volumes/html/_data
# 然后进行修改
```
数据卷常用命令
```java
docker volume create <卷名> #创建卷
docker volume ls #查看所有
docker volume rm <卷名> #删卷
docker volume inspect <卷名> #看卷
docker volume prune #清除所有卷
```
### 本地目录挂载
需求:
查看 mysql 容器,判断是否有数据卷挂载
基于宿主机目录实现 MySQL 数据目录、配置文件、初始化脚本的挂载(查阅官方镜像文档)
```java
# 先查看mysql 容器是否有数据卷挂载
docker inspect mysql
# 最后看Mount得出有匿名卷
```
删了容器,不用匿名卷,用本地文件挂载
```java
# 明确目的
① 挂载 /root/mysql/data 到容器内的 /var/lib/mysql 目录
② 挂载 /root/mysql/init 到容器内的 /docker-entrypoint-initdb.d 目录,携带课前资料准备的 SQL 脚本
③ 挂载 /root/mysql/conf 到容器内的 /etc/mysql/conf.d 目录,携带课前资料准备的配置文件
# 创建三个目录/root/mysql/data,/root/mysql/init,/root/mysql/conf
# init和conf放入配置文件
# 创建容器
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \ # 本地/root/mysql/data和容器的/var/lib/mysql映射绑定
-v /root/mysql/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
mysql
```
### 自制镜像
镜像结构
- 入口(Entrypoint):镜像运行入口,一般是程序启动的脚本和参数
- 层( Layer ) :添加安装包、依赖、配置等,每次操作都形成新的一层。
- 基础镜像(BaseImage) :应用依赖的系统函数库、环境、配置、文件等
Dockerfile 就是一个文本文件,其中包含一个个的指令 (Instruction),用指令来说明要执行什么操作来构建镜像,来 Docker 可以根据 Dockerfile 帮我们构建镜像。常见指令如下:

1.开始构建镜像,将demo文件(.jar文件必须跟dockerfile在一个文件里面)传送到linux服务器,里面包含项目的.jar包和dockerfile文件。
```java
# dockerfile
# 基础镜像:已经别人构建好的,省去了很多的繁琐操作
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包:拷贝docker-demo.jar到容器的/root/app.jar
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
```
2.将上传到linux的jdk.tar(与demo文件同级目录)加载为镜像
```java
docker load -i jdk.tar
```
3.执行操作
```java
# 进入demo文件
cd demo
# 构建自己的镜像 -t:后面跟自定义的镜像名字 .:dockerfile的位置
docker build -t docker-demo .
# 将镜像运行为容器
docker run -d --name dd -p 8080:8080 docker-demo
# 看看容器日志是否正常运行
docker logs dd
```
### 自定义网络
加入同一个自定义网络的容器可以相互访问

```java
# 创建一个叫liuwei的网络
docker network create liuwei
# 查看所有网络
docker network ls
# 将mysql容器加入liuwei网络
docker network connect liuwei mysql
# 让dd容器也加入liuwei网络,这次我们换个方式,让容器一创建的时候字段加入网络
# 先将dd容器删了
docker rm -f dd
# 创建的时候自动加入网络
docker run -d --name dd -p 8080:8080 --network liuwei docker-demo
# 现在dd和mysql两个容器在一个网络里面,测试一下可不可以ping到对方
docker exec -it dd bash
ping mysql
```
## 部署真实项目
### 创建网络
```java
docker network create liuwei
# 查看所有网络
docker network ls
```
### 部署数据库
```java
# 创建三个目录/root/mysql/data,/root/mysql/init,/root/mysql/conf
# init和conf放入配置文件
# 创建容器
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \ # 本地/root/mysql/data和容器的/var/lib/mysql映射绑定
-v /root/mysql/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
mysql
```
### 部署后端
```java
mkdir hmall
cd hmall
# 将dockerfile和hm-service.jar传入hmall文件
docker build -t hmall .
docker run -d --name hm -p 8080:8080 --network liuwei hmall
docker logs -f hm
```
### 部署前端
```java
# 上传本地文件的配置文件html和nginx.conf
# 删除之前的nginx
docker rm -f nginx
# 运行新nginx
docker run -d \
--name nginx-hm \
-p 18080:18080 \
-p 18081:18081 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--network liuwei \
nginx
docker logs -f nginx-hm
```
## Docker Compose
Docker Compose 通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的 Docker 容器的快速部署。

```java
version: "3.8"
services:
mysql:
image: mysql
container_name: mysql
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123
volumes:
- "./mysql/conf:/etc/mysql/conf.d"
- "./mysql/data:/var/lib/mysql"
- "./mysql/init:/docker-entrypoint-initdb.d"
networks:
- hm-net
hmall:
build:
context: .
dockerfile: Dockerfile
container_name: hmall
ports:
- "8080:8080"
networks:
- hm-net
depends_on:
- mysql
nginx:
image: nginx
container_name: nginx
ports:
- "18080:18080"
- "18081:18081"
volumes:
- "./nginx/nginx.conf:/etc/nginx/nginx.conf"
- "./nginx/html:/usr/share/nginx/html"
depends_on:
- hmall
networks:
- hm-net
networks:
hm-net:
name: hmall
```
运行dockerCompose文件
```java
# 创建容器
docker compose up -d
# 查看所以容器
docker compose ps
# 清理刚刚compose创建的东西
docker compose down
```