Docker+Docker-compose+Nginx+Mysql部署前后端分离项目(SpringBoot+Vue)的详细教程

在这里插入图片描述

一、安装docker

前言 docker命令别名
给常用Docker命令起别名,方便我们访问:

# 修改/root/.bashrc文件
vi /root/.bashrc
内容如下:
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {
   
   {.ID}}\t{
   
   {.Image}}\t{
   
   {.Ports}}\t{
   
   {.Status}}\t{
   
   {.Names}}"'
alias dis='docker images'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

然后,执行命令使别名生效

source /root/.bashrc

1.卸载旧版

首先如果系统中已经存在旧的Docker,则先卸载:

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

2.配置Docker的yum库

首先要安装一个yum工具

yum install -y yum-utils

安装成功后,执行命令,配置Docker的yum源:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3.安装Docker

最后,执行命令,安装Docker

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

4.启动和校验

# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

Docker常用命令

docker images                 查看docker已安装的容器列表
 
docker ps                     查看运行中的容器
 
docker ps  -a                 查看所有容器
 
dokcer exec -it mysql bash    进入mysql容器内部

5.配置镜像加速

这里以阿里云镜像加速为例。

5.1.注册阿里云账号

首先访问阿里云网站:
https://www.aliyun.com/
注册一个账号。

5.1.开通镜像服务

在首页的产品中,找到阿里云的容器镜像服务:
在这里插入图片描述
点击后进入控制台:
在这里插入图片描述
首次可能需要选择立刻开通,然后进入控制台。

5.3.配置镜像加速

找到镜像工具下的镜像加速器:
在这里插入图片描述
页面向下滚动,即可找到配置的文档说明:
在这里插入图片描述
具体命令如下:

# 创建目录
mkdir -p /etc/docker

# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF

# 重新加载配置
systemctl daemon-reload

# 重启Docker
systemctl restart docker

二、安装docker-compose

提示:Docker-Compose 的Docker文档是错误的。他们忘记在命令中的版本号前面加上“ v ”;网上很多的都没有加上“v”导致下载失败。显示文件是空的。 so 在下载链接中的版本号前加上“ v ”!!!

sudo curl -L "https://github.com/docker/compose/releases/download/v2.1.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

安装完后赋予可执行权限

sudo chmod +x /usr/local/bin/docker-compose

检查是否安装成功(你如果安装1的版本命令会变成docker-compose version,下面这个是2的版本)

docker compose --version

三、编写Dockfile文件

在这里插入图片描述

#依赖jdk8环境
FROM openjdk:8

#对外暴露端口号(就是你项目yaml文件的port端口号)
EXPOSE 39011
#环境时区设置
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

#复制nanshan-0.0.1-SNAPSHOT.jar(这个就是后端的jar包)到docker容器中并命名为app.jar
ADD nanshan-0.0.1-SNAPSHOT.jar app.jar
#执行命令
RUN bash -c 'touch /app.jar'

ENTRYPOINT ["java", "-jar", "/app.jar", "--spring.profiles.active=pro"]

四、编写docker-compose.yml文件

提示:记住,nginx和mysql的挂载的本地目录要填写自己需要的,如果前面填写的是“./”,那么就是默认当前目录下

version: "3"
services:
  nginx: # 服务名称,用户自定义
    image: nginx  # 镜像版本
    container_name: nginx
    ports:
      - "80:80"  # 暴露端口
    volumes: # 挂载
      - "./nginx/html:/usr/share/nginx/html"
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
    privileged: true # 这个必须要,解决nginx的文件调用的权限问题
    depends_on:
      - nanshan

  mysql:
    image: mysql:5.7.27
    container_name: mysql5
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
  nanshan:
    image: nanshan:latest
    build: . # 表示以当前目录下的Dockerfile开始构建镜像
    ports:
      - "39011:39011"
    depends_on: # 依赖与mysql、redis,其实可以不填,默认已经表示可以
      - mysql

需要修改的地方:
volumes: # 挂载的本地目录要修改为自己想要的(冒号后面不用改)
depends_on: #依赖于,也就是nginx部署的前端要依赖于后端
ports: #自己项目的port端口号
在这里插入图片描述

五、编写Nginx的配置文件nginx.conf

现在宿主机创建html目录和nginx.conf文件
在这里插入图片描述
编写配置文件nginx.conf

worker_processes  1;
events {
  worker_connections  1024;
}
http {
  include       mime.types;
  default_type  application/octet-stream;
  sendfile        on;
  keepalive_timeout  65;
  
  server {
      listen       80;
      server_name  192.168.253.128;
      location / {
          root   /usr/share/nginx/html;
          try_files $uri $uri/ /index.html;
          index  index.html index.htm;
      }
	 location /api/ {
		add_header Cache-Control no-cache;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_pass http://192.168.253.128:39011;
		proxy_http_version 1.1;
		proxy_set_header Connection "";
	}                                                                                                                              		 	          	
      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
          root   html;
      }
  }
}

提示:需要修改的地方就是两个ip地址改为自己的(server_name和proxy_pass)

六、部署前端

前端Vue项目打包

npm run build

前端打完包会出现个dist目录文件
在这里插入图片描述
然后将dist(是dist里面的文件而不是dist直接放进去)里面的文件全都放在自己创建的nginx文件夹中的html里面
在这里插入图片描述

七、部署后端

在这里插入图片描述

先将后端打成jar包,然后上传到云服务器上,同时Dockfile文件和docker-compose.yml文件也要上传到云服务器上的自己创建的目录。
在这里插入图片描述
在改目录下输入命令编排启动服务

docker-compose up -d

在这里插入图片描述
使用命令去查看一下容器是否启动成功运行

docker ps -a

在这里插入图片描述

如果项目在线上出错,可以通过日志命令查看报错

docker compose logs

启动完后,我们可以使用Navicat远程连接云服务器的MySQL数据库,进行SQL文件的导入了。
在这里插入图片描述

如果线上因为mysql8的版本导致出现严格模式问题,cd mysql/conf,里面创建一个my.conf文件,配置如下
在这里插入图片描述

## MYSQL的my.conf常用配置
[client]
default-character-set=utf8
 
[mysql]
default-character-set=utf8
 
[mysqld]
init-connect='SET collation_connection = utf8_unicode_ci'
init-connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

导致严格模式的不同就是因为sql_mode的设置多了一个ONLY_FULL_GROUP_BY,去掉即可

然后再重启docker内部的mysql容器,使新增的配置生效。

docker restart mysql

设置Docker容器启动,自动启动mysql

sudo docker update mysql --restart=always

至此,我们的Docker+Nginx+Mysql的前后端部署就完成辣!
PS:云服务器上部署记得要把有用到的端口加入安全组。虚拟机上部署要把防火墙关闭哦!

猜你喜欢

转载自blog.csdn.net/qq_45442178/article/details/134273355