# blog
**Repository Path**: ajian-blog/blog
## Basic Information
- **Project Name**: blog
- **Description**: 个人博客后端
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: http://blog.hezj.top/
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-03-14
- **Last Updated**: 2021-08-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 后端项目发布
### 引入docker构建依赖
在`pom.xml`文件中引入打包镜像的插件
```xml
com.spotify
docker-maven-plugin
1.0.0
${docker.image.prefix}/${project.artifactId}
src/main/resources/docker
/
${project.build.directory}
${project.build.finalName}.jar
```
`docker.image.prefix`: 定义的一个变量名
```xml
springboot
```
在`src/main/resources/docker`目录文件中新建一个`Dockerfile`文件
```dockerfile
FROM openjdk:11
COPY my-blog-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
```
- 将生成的`jar`文件复制到镜像中并从命名为`app.jar`
- 使用java命令启动jar包
执行`mvn clean package docker:build`生成镜像,在把镜像上传到阿里云镜像服务中`docker tag springboot/my-blog:latest registry.cn-beijing.aliyuncs.com/hezhijian/my-blog-back`
通过ssh登录自己的服务器,拉取自己上传到阿里云服务的容器,启动容器,**这里有个小坑,需要关联mysql的docker,不然无法访问数据库**
```bash
docker run --name blog-back -p 8080:8080 -d --link mysql:mysql my-blog-back
```
- `--link mysql:mysql`: 第一个mysql是启动的mysql容器的名称,通过`docker ps`可以查看启动容器的名称,第二个mysql是在springBoot项目中数据库配置的mysql地址,相当于hostname(127.0.0.1),也就意味着连接数据库的地址不能是127.0.0.1,需要改为myslq
```yaml
spring:
datasource:
url: jdbc:mysql://mysql:3306/myBlog?characterEncoding=utf-8&serverTimezone=GMT%2B8
```
根据自己取的名称改为相应的名称
## 前端项目发布
### 在本地将docker打包好并上传到阿里云镜像
```bash
# 进入前端项目根目录
ng build --prod
# 本地创建docker镜像
docker build -f Dockerfile -t my-blog .
# IMAGE ID为镜像的id, TAG为版本号,可以不写,不写默认为latest
docker tag registry.cn-beijing.aliyuncs.com/hezhijian/my-blog:[TAG]
# 提交docker到阿里云镜像
docker push registry.cn-beijing.aliyuncs.com/hezhijian/my-blog:[TAG]
```
### 登录自己的服务器
```bash
ssh user@IPAddress
# 将上传的镜像pull下来
docker pull registry.cn-beijing.aliyuncs.com/hezhijian/my-blog
# 名字太长了,换个名字
docker tag registry.cn-beijing.aliyuncs.com/hezhijian/my-blog:latest my-blog
# 启动镜像
docker run --name blog -p 4200:80 -d my-blog
```
## FAQ
### springBoot使用docker启动之后无法访问数据库
参考文章: [https://github.com/xiaozefeng/docker-guide/issues/2](https://github.com/xiaozefeng/docker-guide/issues/2)
### 关联之后还是无法访问数据库
- 进入springBoot容器,看能否ping通mysql容器
```shell script
# 查看docker的CONTAINER ID
docker ps
# 选择springboot的CONTAINER ID进入容器,例如 docker exec -it 761d69a14708 /bin/bash
docker exec -it [CONTAINER ID] /bin/bash
#这里的mysql需要根据上面的第二个mysql相同
ping mysql
```
如果可以ping通,name容器之间是可以互相访问的,检查`application.yml`配置是否更改了
```yaml
spring:
datasource:
# hostname 根据--link mysql:mysql来确定
url: jdbc:mysql://mysql:3306/myBlog?characterEncoding=utf-8&serverTimezone=GMT%2B8
```