Commit on 2025/05/16 周五 14:50:05.84
This commit is contained in:
parent
fb3525c12d
commit
e594fd9248
@ -187,27 +187,34 @@ $$
|
||||
|
||||
### 矩阵符号说明
|
||||
|
||||
- 原始(真实)邻接矩阵:
|
||||
- 原始(真实)邻接矩阵 $A$ ,假设 $A$ 的秩为 $r$: $\lambda_{r+1}=\cdots=\lambda_n=0$
|
||||
$$
|
||||
A = \sum_{m=1}^n \lambda_m\,x_m x_m^T,
|
||||
\quad \lambda_1\ge\lambda_2\ge\cdots\ge\lambda_n\;
|
||||
A = \sum_{m=1}^n \lambda_m\,x_m x_m^T=\begin{align*}
|
||||
\sum_{m=1}^r \lambda_m x_m x_m^T + \sum_{m=r+1}^n \lambda_m x_m x_m^T = \sum_{m=1}^r \lambda_m x_m x_m^T
|
||||
\end{align*},
|
||||
$$
|
||||
|
||||
|
||||
|
||||
- 滤波估计得到的矩阵及谱分解:
|
||||
$$
|
||||
\widetilde A = \sum_{m=1}^r \widetilde\lambda_m\,\widetilde x_m\widetilde x_m^T,
|
||||
\quad \widetilde\lambda_1\ge\cdots\ge\widetilde\lambda_n\;
|
||||
$$
|
||||
|
||||
- 只取前 $r$ 项重构 :
|
||||
- 只取前 $\kappa$ 项重构 :
|
||||
$$
|
||||
A_r \;=\;\sum_{m=1}^r \widetilde\lambda_m\,\widetilde x_m\widetilde x_m^T,
|
||||
A_\kappa \;=\;\sum_{m=1}^\kappa \widetilde\lambda_m\,\widetilde x_m\widetilde x_m^T,
|
||||
$$
|
||||
|
||||
- 对 $A_r$ 进行K-means聚类,得到 $A_{final}$
|
||||
- 对 $A_\kappa$ 进行K-means聚类,得到 $A_{final}$
|
||||
|
||||
|
||||
|
||||
目标是让 $A_{final}$ = $A$
|
||||
|
||||
|
||||
|
||||
### **0/1矩阵**
|
||||
|
||||
其中 $\widetilde{\lambda}_i$ 和 $\widetilde{x}_i$ 分别为通过预测得到矩阵 $\widetilde A$ 的第 $i$ 个特征值和对应特征向量。 然而预测值和真实值之间存在误差,直接进行矩阵重构会使得重构误差较大。 对于这个问题,文献提出一种 0/1 矩阵近似恢复算法。
|
||||
@ -324,3 +331,10 @@ $$
|
||||
|
||||
假设都是破松分布
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
估计带权邻接矩阵(存在量化误差),比较分布式算法的误差。
|
||||
|
41
科研/草稿.md
41
科研/草稿.md
@ -1,32 +1,11 @@
|
||||
以下是修改后的内容,所有公式部分都已用 `$`(行内公式)或 `$$`(行间公式)包裹:
|
||||
$$
|
||||
\begin{align*}
|
||||
\sum_{m=1}^r \lambda_m x_m x_m^T + \sum_{m=r+1}^n \lambda_m x_m x_m^T = \sum_{m=1}^r \lambda_m x_m x_m^T
|
||||
\end{align*}
|
||||
$$
|
||||
|
||||
---
|
||||
|
||||
### **1. 核心区别**
|
||||
| **性质** | **特征分解/谱分解** | **奇异值分解(SVD)** |
|
||||
| ------------ | -------------------------------- | ------------------------------------------ |
|
||||
| **适用矩阵** | 仅限**方阵**($n \times n$) | **任意矩阵**($m \times n$,包括矩形矩阵) |
|
||||
| **分解形式** | $A = P \Lambda P^{-1}$ | $A = U \Sigma V^*$ |
|
||||
| **矩阵类型** | 可对角化矩阵(如对称、正规矩阵) | 所有矩阵(包括不可对角化的方阵和非方阵) |
|
||||
| **输出性质** | 特征值($\lambda_i$)可能是复数 | 奇异值($\sigma_i$)始终为非负实数 |
|
||||
| **正交性** | 仅当 $A$ 正规时 $P$ 是酉矩阵 | $U$ 和 $V$ 始终是酉矩阵(正交) |
|
||||
|
||||
---
|
||||
|
||||
### 修改说明:
|
||||
1. **行内公式**(用 `$...$` 包裹):
|
||||
- 矩阵维度:$n \times n$、$m \times n$
|
||||
- 分解形式:$A = P \Lambda P^{-1}$、$A = U \Sigma V^*$
|
||||
- 数学符号:$\lambda_i$、$\sigma_i$、$A$、$P$、$U$、$V$ 等
|
||||
|
||||
2. **特殊符号**:
|
||||
- 使用 `^*` 表示共轭转置 $V^*$
|
||||
- 使用 `\times` 表示乘号 $\times$
|
||||
- 使用 `\Lambda` 和 `\Sigma` 表示对角矩阵
|
||||
|
||||
3. **表格结构**:
|
||||
- 保持原有 Markdown 表格格式
|
||||
- 对齐表头和内容
|
||||
- 保留中文说明部分
|
||||
|
||||
这样修改后,公式可以兼容 LaTeX 渲染,同时保持内容的清晰性和可读性。
|
||||
$$
|
||||
\begin{align*}
|
||||
\lambda_{r+1}=\cdots=\lambda_n=0
|
||||
\end{align*}
|
||||
$$
|
141
自学/Docker指南.md
141
自学/Docker指南.md
@ -110,13 +110,13 @@ docker image prune
|
||||
|
||||

|
||||
|
||||
1. docker run 创建并运行一个新容器
|
||||
1.docker run 创建并运行一个新容器
|
||||
|
||||
-d:以后台模式运行容器,不会占用当前终端。
|
||||
|
||||
--name <容器名> :为容器指定一个自定义名称,便于后续管理。
|
||||
|
||||
-p <宿主机端口>:<容器端口> : 将容器内部的端口映射到宿主机,使外部可以访问容器提供的服务。
|
||||
-p <宿主机端口>:<容器端口> : 将容器内部的端口映射到宿主机,**使外部可以访问容器提供的服务,如果不写的话,只有容器内部网络能访问它**比如mysql,如果写''-p 3307:3306',那么可以用navicat连接localhost:3307访问这个数据库。
|
||||
|
||||
--restart <策略> :设置容器的重启策略,如 `no`(默认不重启)、`on-failure`(失败时重启)、`always`(总是重启)或 `unless-stopped`。
|
||||
|
||||
@ -126,7 +126,7 @@ docker image prune
|
||||
docker run --name test-container -d test:latest
|
||||
```
|
||||
|
||||
2. docker exec 在正在运行的 test-container 内执行命令
|
||||
2.docker exec 在正在运行的 test-container 内执行命令
|
||||
|
||||
-it : 给当前进入的容器创建一个标准输入、输出终端
|
||||
|
||||
@ -134,43 +134,43 @@ docker run --name test-container -d test:latest
|
||||
docker exec -it test-container sh
|
||||
```
|
||||
|
||||
3. docker logs ,查看 test-container 的日志输出:
|
||||
3.docker logs ,查看 test-container 的日志输出:
|
||||
|
||||
```text
|
||||
docker logs --since 1h test-container #查看最近1h
|
||||
```
|
||||
|
||||
4. docker stop 停止正在运行的 test-container:
|
||||
4.docker stop 停止正在运行的 test-container:
|
||||
|
||||
```text
|
||||
docker stop test-container
|
||||
```
|
||||
|
||||
5. docker start 启动一个已停止的 test-container:
|
||||
5.docker start 启动一个已停止的 test-container:
|
||||
|
||||
```text
|
||||
docker start test-container
|
||||
```
|
||||
|
||||
6. docker cp 复制文件(或目录)到容器内部,先cd到文件所在目录
|
||||
6.docker cp 复制文件(或目录)到容器内部,先cd到文件所在目录
|
||||
|
||||
```text
|
||||
docker cp localfile.txt test-container:/target_dir/
|
||||
```
|
||||
|
||||
7. docker stats ,查看docker中运行的所有容器的运行状态(CPU 内存占用)
|
||||
7.docker stats ,查看docker中运行的所有容器的运行状态(CPU 内存占用)
|
||||
|
||||
```text
|
||||
docker stats
|
||||
```
|
||||
|
||||
8. docker container ls,查看运行容器的创建时间、端口映射等
|
||||
8.docker container ls,查看运行容器的创建时间、端口映射等
|
||||
|
||||
```text
|
||||
docker container ls
|
||||
```
|
||||
|
||||
9. docker ps 查看 Docker 容器的状态,默认情况下,它只显示正在运行的容器
|
||||
9.docker ps 查看 Docker 容器的状态,默认情况下,它只显示正在运行的容器
|
||||
|
||||
```text
|
||||
docker ps -a #查看所有容器,包括已经停止或启动失败的容器
|
||||
@ -257,7 +257,7 @@ Mountpoint是宿主机上的路径,也就是 Docker 存储该数据卷数据
|
||||
|
||||
#### docker网络
|
||||
|
||||
Docker 网络的主要作用是实现容器之间的**通信和隔离**,同时也能控制容器与外部主机或网络的连接。通过创建自定义网络,你可以让属于同一网络的容器通过名称互相访问,而不必暴露所有服务到外部网络,这既提升了安全性又简化了容器间的交互。
|
||||
Docker 网络的主要作用是实现容器之间的**通信和隔离**,同时也能控制容器与外部主机或网络的连接。通过创建自定义网络,你可以**让属于同一网络的容器通过名称互相访问**,而不必暴露所有服务到外部网络,这既提升了安全性又简化了容器间的交互。
|
||||
|
||||
**举例说明**
|
||||
|
||||
@ -289,8 +289,6 @@ docker run -d --name mysql \
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
3.启动 Web 应用容器,加入同一个 `app-net` 网络
|
||||
|
||||
```text
|
||||
@ -309,7 +307,7 @@ ping db
|
||||
|
||||
举个例子,如果你的 Java 应用运行在容器 B 中,而数据库容器 A 已经通过 `--network-alias db` 起了别名,那么在 Java 应用中,你只需要写:
|
||||
|
||||
```text
|
||||
```java
|
||||
String dbUrl = "jdbc:mysql://db:3306/your_database";
|
||||
```
|
||||
|
||||
@ -317,9 +315,8 @@ String dbUrl = "jdbc:mysql://db:3306/your_database";
|
||||
|
||||
否则:
|
||||
|
||||
```text
|
||||
```java
|
||||
String dbUrl = "jdbc:mysql://<宿主机IP或localhost>:3306/your_database";
|
||||
|
||||
```
|
||||
|
||||
因为会通过**宿主机IP映射到容器内**的IP
|
||||
@ -742,7 +739,7 @@ docker run --name zbparse-container --security-opt seccomp=unconfined zbparse
|
||||
|
||||
### docker-compose安装:
|
||||
|
||||
**方式1:**从 Docker 20.10 开始,Docker 官方就将 Docker Compose 作为插件集成在 Docker Engine 中,所以在安装 Docker Engine 时,它也会一并安装 Docker Compose 插件。无需额外安装
|
||||
**方式1:**从 Docker 20.10 开始,Docker 官方就将 Docker Compose 作为插件集成在 Docker Engine 中,所以在安装 Docker Engine 时,它也会一并安装 Docker Compose 插件。**无需额外安装**
|
||||
|
||||
验证安装
|
||||
|
||||
@ -857,7 +854,7 @@ build: ./web_app #两种写法是等效的
|
||||
|
||||
****
|
||||
|
||||
### 4.docker-compose常用命令
|
||||
### docker-compose常用命令
|
||||
|
||||
**构建镜像:**这个命令根据 docker-compose.yml 中各服务的配置构建镜像。如果你修改了 Dockerfile 或者项目代码需要打包进镜像时,就需要运行该命令来构建新的镜像。
|
||||
|
||||
@ -953,6 +950,10 @@ docker-compose restart flask_app #指定某个服务
|
||||
|
||||
|
||||
|
||||
### docker-compose容器名
|
||||
|
||||
**1:默认**
|
||||
|
||||
当使用docker-compose build 构建镜像时,镜像的标签格式通常是 `项目名_服务名`
|
||||
|
||||
docker-compose up生成的容器名默认是 `项目名_服务名_索引号`
|
||||
@ -961,15 +962,15 @@ docker-compose up生成的容器名默认是 `项目名_服务名_索引号`
|
||||
|
||||
**服务名**是指你在docker-compose中设置的服务名称(services:下的名称)。
|
||||
|
||||
**项目名**默认是**当前目录名**,如果你使用了 `-p` 选项指定项目名,则使用指定的项目名
|
||||
|
||||
如
|
||||
**项目名**默认是**当前目录名**,如果你使用了 `-p` 选项指定项目名,则使用指定的项目名,如
|
||||
|
||||
```shell
|
||||
docker-compose -p my_custom_project up -d
|
||||
```
|
||||
|
||||
在docker-compose.yml中指定容器名
|
||||
|
||||
|
||||
**2.在docker-compose.yml中指定容器名**
|
||||
|
||||
```text
|
||||
version: '3'
|
||||
@ -994,9 +995,17 @@ services:
|
||||
|
||||
### 关于Docker-compose的重要说明
|
||||
|
||||
**一个Docker-compose文件定义的各个服务默认使用同一个网络**。不同的Docker-compose文件可能使用相同的镜像,如mysql8.0,此时docker会自动进行镜像复用,而不会重复下载。
|
||||
1.**服务名和网络别名**可用于**同一网络**内容器之间的通信(如Java→MySQL、前端→后端,因为同一个网络会自动注册一个DNS名) 尽管容器名也可以作为通信的名字、但是极不推荐!!!
|
||||
|
||||
一个**基础镜像可以构造多个容器**,互不影响,
|
||||
2.服务名可用于docker compose系列命令
|
||||
|
||||
3.容器名主要用于docker命令:`docker ps`、`docker logs`、`docker exec` 等命令时指定目标容器。
|
||||
|
||||
|
||||
|
||||
**4.一个Docker-compose文件定义的各个服务默认使用同一个网络**。
|
||||
|
||||
5.不同的Docker-compose文件可以使用相同的镜像,如mysql8.0,此时docker会自动进行镜像复用,而不会重复下载。
|
||||
|
||||
```text
|
||||
db:
|
||||
@ -1010,18 +1019,6 @@ db:
|
||||
- db_data_project1:/var/lib/mysql
|
||||
```
|
||||
|
||||
```text
|
||||
db:
|
||||
image: mysql:8.0
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: 123456
|
||||
MYSQL_DATABASE: db_project2
|
||||
ports:
|
||||
- "3307:3306" # 使用不同的主机端口以避免冲突
|
||||
volumes:
|
||||
- db_data_project2:/var/lib/mysql
|
||||
```
|
||||
|
||||
|
||||
|
||||
| **问题类型** | **可能的冲突** | **解决方案** |
|
||||
@ -1029,16 +1026,29 @@ db:
|
||||
| **端口冲突** | 容器监听相同的宿主机端口(如 `3306:3306`) | 在不同 `docker-compose.yml` 中映射不同端口(如 `3307:3306`) |
|
||||
| **数据卷冲突** | 多个 MySQL 实例共享相同的 `/var/lib/mysql` | 使用不同的 `volume` 名称,或只运行一个 MySQL 实例 |
|
||||
| **网络冲突** | 默认网络可能导致 DNS 解析失败 | 在 `docker-compose.yml` 里创建独立的 `network` |
|
||||
| **镜像冲突** | 镜像不会冲突,但多个实例可能导致资源竞争 | 镜像可共享,但实例应该使用独立配置 |
|
||||
|
||||
**最佳实践**
|
||||
|
||||
1. 如果只需要一个 MySQL 服务,建议让多个 Compose 连接到同一个 MySQL 容器,而不是启动多个 MySQL 容器。
|
||||
2. **所有服务都在一个docker-compose中,包括mysql**
|
||||
3. 如果必须运行多个 MySQL 实例:
|
||||
- 为不同的 MySQL 实例分配不同的宿主机端口(如 `3306`、`3307`)。
|
||||
- 使用不同的数据卷,避免数据损坏。
|
||||
- 确保不同的实例在不同的 Docker 网络中运行,防止冲突。
|
||||
|
||||
**最佳实践1**
|
||||
|
||||
1. 部署单一 MySQL 服务,不用为每个应用都起一个数据库容器;
|
||||
2. 将需要访问该 MySQL 的服务挂到一个专用网络,且**各自用不同数据库用户和库名**;
|
||||
3. 若要更严格隔离(应用之间不可相互访问),可以为每个应用拆分出独立网络,只在网络交集里放 MySQL(MYSQL可以加入不同的网络);
|
||||
4. 数据卷 `mysql-data` 仍然只对应一个实例,数据完全由该实例管控。
|
||||
|
||||
|
||||
|
||||
**最佳实践2**
|
||||
|
||||
JAVA应用和MYSQL一起定义在自己的Compose中(天生处于同一个网络,且应用之间隔离)
|
||||
|
||||
1.**独立数据卷**:给每个实例用不同的 named volume(如 `mysql-data-app1`、`mysql-data-app2`),保证数据互不干扰;
|
||||
|
||||
2.**不同端口映射**:在各自的 Compose 里把宿主机端口映射到 `3306`,如 `3306:3306`、`3307:3306`;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
**最佳实践1:**
|
||||
|
||||
@ -1054,11 +1064,13 @@ docker network create my_shared_network
|
||||
|
||||
2.创建 MySQL 的 `docker-compose-mysql.yml`
|
||||
|
||||
```text
|
||||
```yml
|
||||
version: '3'
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:8
|
||||
volumes:
|
||||
- mysql-data:/var/lib/mysql
|
||||
restart: always
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: root
|
||||
@ -1075,7 +1087,7 @@ networks:
|
||||
|
||||
3.在 `docker-compose-app.yml` 里连接这个 MySQL
|
||||
|
||||
```text
|
||||
```yml
|
||||
version: '3'
|
||||
services:
|
||||
web_app:
|
||||
@ -1092,47 +1104,10 @@ services:
|
||||
networks:
|
||||
my_shared_network:
|
||||
external: true
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
| **方式** | **能否被其他容器访问?** | **生效范围** | **优缺点** |
|
||||
| ------------------------- | ------------------------ | ----------------------------------------------------- | ------------------------------------------ |
|
||||
| **`network-alias`(db)** | ✅ **推荐** | 仅限同一个 `network`(不同compose文件共享网络时也生效) | **最稳定,不受 `container_name` 变更影响** |
|
||||
| **`服务名`(mysql)** | ✅ **默认推荐** | 仅限 **同一个**`docker-compose.yml` | **简单,自动解析,不需要额外配置** |
|
||||
|
||||
|
||||
|
||||
服务名和网络别名可用于同一网络内容器之间的通信
|
||||
|
||||
容器名主要用于管理和运维:`docker ps`、`docker logs`、`docker exec` 等命令时指定目标容器。
|
||||
|
||||
|
||||
|
||||
4.启动 MySQL 容器
|
||||
|
||||
```text
|
||||
docker-compose -f docker-compose-mysql.yml up -d
|
||||
```
|
||||
|
||||
5.启动 Web 应用
|
||||
|
||||
```text
|
||||
docker-compose -f docker-compose-app.yml up -d
|
||||
```
|
||||
|
||||
**问题:但你需要确保其他服务不会产生不必要的相互访问,因为相当于都在my_shared_network中。**
|
||||
|
||||
|
||||
|
||||
**最佳实践**
|
||||
|
||||
- **如果所有服务都在同一个 `docker-compose.yml`,直接用 `服务名`(如 `mysql`),因为 Docker Compose 会自动解析。**
|
||||
- **如果是多个 `docker-compose.yml` 共享网络,建议用 `network-alias`**,这样即使 `container_name` 改变,服务依然可以正确解析。
|
||||
|
||||
|
||||
|
||||
### 实践:部署微服务集群
|
||||
|
||||
**需求**:将之前学习的cloud-demo微服务集群利用DockerCompose部署
|
||||
|
154
自学/苍穹外卖.md
154
自学/苍穹外卖.md
@ -94,6 +94,8 @@ postman: 接口测工具,模拟用户发起的各类HTTP请求,获取对应
|
||||
|
||||
#### 前端环境搭建
|
||||
|
||||
**Windows下**
|
||||
|
||||
1.构建和打包前端项目
|
||||
|
||||
```bash
|
||||
@ -128,15 +130,26 @@ server {
|
||||
|
||||
4.启动或重启 Nginx
|
||||
|
||||
启动:双击nginx.exe
|
||||
|
||||
重启:nginx -s reload
|
||||
|
||||
5.查看是否正在运行
|
||||
|
||||
```bash
|
||||
sudo nginx -t # 检查配置是否正确
|
||||
sudo systemctl restart nginx # 重启 Nginx 服务
|
||||
tasklist /FI "IMAGENAME eq nginx.exe"
|
||||
```
|
||||
|
||||
5.访问前端项目
|
||||
6.访问前端项目
|
||||
|
||||
在浏览器中输入你配置的域名或服务器 IP 地址
|
||||
|
||||
终止运行nginx:
|
||||
|
||||
```bash
|
||||
nginx.exe -s stop
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### 后端环境搭建
|
||||
@ -292,17 +305,6 @@ server{
|
||||
|
||||
|
||||
|
||||
windows下更新nginx配置:先cd到nginx安装目录
|
||||
|
||||
```bash
|
||||
nginx -t
|
||||
nginx -s reload
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#### APIFox
|
||||
|
||||
使用APIFox管理、测试接口、导出接口文档...
|
||||
@ -463,9 +465,9 @@ public class EmployeeController {
|
||||
|
||||
|
||||
|
||||
## 后端代码部署
|
||||
## 后端部署
|
||||
|
||||
### 项目已经开发完毕
|
||||
### 项目开发完毕
|
||||
|
||||
这种情况下JAVA代码无需改动,直接本地打包maven->package成Jar包复制到服务器上部署:
|
||||
|
||||
@ -485,15 +487,15 @@ public class EmployeeController {
|
||||
</dependency>
|
||||
```
|
||||
|
||||
打包方式:
|
||||
**打包方式:**
|
||||
|
||||
1.直接对父工程执行mvn clean install
|
||||
1.*直接对父工程执行mvn clean install
|
||||
|
||||
2.分别对子模块common和pojo执行install,再对server执行package
|
||||
|
||||
因为Maven 在构建 `sky-server` 时,去你本地仓库或远程仓库寻找它依赖的两个 SNAPSHOT 包。
|
||||
|
||||
dockerfile:
|
||||
**JAVA项目dockerfile:**
|
||||
|
||||
```dockerfile
|
||||
# 使用 JDK 17 运行时镜像
|
||||
@ -510,13 +512,105 @@ WORKDIR /app
|
||||
COPY sky-server-1.0-SNAPSHOT.jar ./app.jar
|
||||
|
||||
# 暴露端口(与 application.properties 中的 server.port 保持一致)
|
||||
EXPOSE 8080
|
||||
EXPOSE 8085
|
||||
|
||||
# 以 exec 形式启动
|
||||
ENTRYPOINT ["java", "-jar", "app.jar"]
|
||||
```
|
||||
|
||||
`ENTRYPOINT ["java", "-jar", "app.jar"]` 能够启动
|
||||
`ENTRYPOINT ["java", "-jar", "app.jar"]` 能够启动是因为Spring Boot 的 Maven 插件在打包时已经将你的启动类标记进去了:
|
||||
|
||||
Spring Boot 的启动器会:
|
||||
|
||||
1. 读取 `MANIFEST.MF` 里的 `Start-Class: com.sky.SkyApplication`
|
||||
2. 将 `com.sky.SkyApplication` 作为入口调用其 `main` 方法
|
||||
|
||||
|
||||
|
||||
由于该项目还需依赖Mysql和Redis运行,因此需在**docker-compose.yml**中统一创建容器环境。(:ro代表只读)
|
||||
|
||||
```yml
|
||||
version: "3.8"
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:8.0
|
||||
container_name: sky-mysql
|
||||
restart: always
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: 123456
|
||||
MYSQL_DATABASE: sky_take_out
|
||||
TZ: Asia/Shanghai
|
||||
volumes:
|
||||
- ./data/mysql:/var/lib/mysql
|
||||
- ./init/sky.sql:/docker-entrypoint-initdb.d/sky.sql:ro
|
||||
- ./mysql-conf/my.cnf:/etc/mysql/conf.d/my.cnf:ro
|
||||
ports:
|
||||
- "3307:3306"
|
||||
|
||||
redis:
|
||||
image: redis:7.0-alpine
|
||||
container_name: sky-redis
|
||||
restart: always
|
||||
command: redis-server --requirepass 123456
|
||||
volumes:
|
||||
- ./data/redis:/data
|
||||
ports:
|
||||
- "6379:6379"
|
||||
|
||||
app:
|
||||
# 构建并打标签 sky-server:latest
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
image: sky-server:latest
|
||||
container_name: sky-server
|
||||
depends_on:
|
||||
- mysql
|
||||
- redis
|
||||
# 挂载敏感配置到 /app/config
|
||||
volumes:
|
||||
- ./config:/app/config:ro
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
# 激活 dev 配置文件:application-dev.yml
|
||||
SPRING_PROFILES_ACTIVE: dev
|
||||
ports:
|
||||
- "8085:8085"
|
||||
restart: always
|
||||
|
||||
volumes:
|
||||
mysql:
|
||||
redis:
|
||||
```
|
||||
|
||||
**其中启动数据库要准备两份文件:**
|
||||
|
||||
初始化脚本sky.sql,用来创建数据库和表
|
||||
|
||||
my.cnf:让初始化脚本创建的表中的中文数据正常显示
|
||||
|
||||
```cnf
|
||||
[client]
|
||||
default-character-set = utf8mb4
|
||||
|
||||
[mysql]
|
||||
default-character-set = utf8mb4
|
||||
|
||||
[mysqld]
|
||||
character-set-server = utf8mb4
|
||||
collation-server = utf8mb4_unicode_ci
|
||||
init_connect='SET NAMES utf8mb4'
|
||||
```
|
||||
|
||||
**另外:**
|
||||
|
||||
`application-dev.yml` 是给 **Spring Boot** 读取的,Spring Boot 会在启动时自动加载它,填充到JAVA项目中。
|
||||
|
||||
Docker Compose 里的 `environment:` 无法读取`application-dev.yml`,要不就写死、要不就写在.env文件中。
|
||||
|
||||
**最后项目结构:**
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
@ -524,6 +618,24 @@ ENTRYPOINT ["java", "-jar", "app.jar"]
|
||||
|
||||
|
||||
|
||||
## 前端部署
|
||||
|
||||
直接部署开发完毕的前端代码,准备:
|
||||
|
||||
1.静态资源html文件夹
|
||||
|
||||
2.nginx.conf
|
||||
|
||||

|
||||
|
||||
注意把nginx.conf中的server改为Docker 容器(或服务)在**同一网络中**的主机名,如
|
||||
|
||||
```nginx
|
||||
upstream webservers {
|
||||
server sky-server:8085 weight=90;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 实战开发
|
||||
|
Loading…
x
Reference in New Issue
Block a user