# 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. 常用命令 ### 目录相关 ![img.png](pic/img.png) ![img_1.png](pic/img_1.png) ### 文件操作 ![img_2.png](pic/img_2.png) ![img_3.png](pic/img_3.png) mv a.txt b.txt 将当前目录下的a.txt重命名为b.txt ![img_4.png](pic/img_4.png) ### 文件查找操作 find命令: find 【查找范围】 【选项】【选项参数】 ![img_5.png](pic/img_5.png) 例子: ```angular2html # 查找/usr目录下文件大小大于100M并且是文件类型的文件,将其拷贝到/root目录下面 ,{}代表之前查找到的文件,\;符合用来结束命令 find /usr -size +100M -type f -exec cp {} ~ \; ``` ### 文件编辑 vim编辑器 命令模式,执行vi 文件名,进入文件,默认是命令模式,点击i进入编辑模式,按esc进入命令模式。 ![img_6.png](pic/img_6.png) 编辑模式一般会i就可以了 底行模式,命令模式按:进入 ![img_7.png](pic/img_7.png) ### 文件查看命令 用多种方法查看/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 ``` ### 文件解压缩 ![img_8.png](pic/img_8.png) ## 2.项目部署 ![三台云服务器.png](pic/%E4%B8%89%E5%8F%B0%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8.png) 安装好三台服务器以后配置主机名 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 回到窗口 ``` 启动成功 ![img_9.png](pic/img_9.png) ### 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.最终效果 ![部署成功最终效果.png](pic/%E9%83%A8%E7%BD%B2%E6%88%90%E5%8A%9F%E6%9C%80%E7%BB%88%E6%95%88%E6%9E%9C.png) # 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 # 采用的容器,标准来说要加上版本号,没加代表用最新的 ``` ## 基础 ### 基础命令 ![docker.png](pic/docker.png) 用配置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 帮我们构建镜像。常见指令如下: ![dockerfile.png](pic/dockerfile.png) 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 ``` ### 自定义网络 加入同一个自定义网络的容器可以相互访问 ![自定义网络.png](pic/%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BD%91%E7%BB%9C.png) ```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 容器的快速部署。 ![dockerCompose.png](pic/dockerCompose.png) ```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 ```