创建一键部署的前后端(SpringBoot+Vue+nginx)项目镜像

创建一键部署的前后端项目镜像

该方法时将spring-boot项目改造为一个镜像,其底层逻辑,是创建一个Cent Os镜像,然后将项目所需的所有环境安装到该镜像上,最后通过一个脚本启动所有服务,从而达到一键运行项目,最后commit该镜像,再push到阿里云仓库。
在使用前,需要将前后端都进行打包,然后前端连接后端的ip要改为服务器的ip

一、安装docker

1、使用的是 root 用户登录

su root

2、使用 root 权限更新 yum 包(生产环境中此步操作需慎重,看自己情况,学习的话随便搞)

yum -y update

yum remove docker  docker-common docker-selinux docker-engine#(清楚docker环境)

3、安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

4、设置 yum 源,二选一

yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)

5、选择docker版本并安装

查看可用版本有哪些

yum list docker-ce --showduplicates | sort -r

选择一个版本并安装:yum install docker-ce-版本号

yum -y install docker-ce-18.03.1.ce

sudo yum install docker-ce docker-ce-cli containerd.io

6、启动 Docker 并设置开机自启

systemctl start docker
systemctl enable docker

7、查看docker版本

docker version

二、创建Cent Os并适配环境

1、运行centos容器(–privileged=true,使container内的root拥有真正的root权限,防止出现无法启动mysql)

docker run -d --name computer_system --privileged=true -p 8080:8080 -p 3306:3306 -p 8081:8081 -p 8989:8989  centos:7 /usr/sbin/init
#进入容器
docker exec -it computer_system /bin/bash

2、添加环境

2.1、添加 java 环境

检查是否已经安装Java
rpm -qa | grep java
如果没有java环境的话,接着就去查找java-1.8.0的可以使用的安装包:
yum list | grep java-1.8.0-openjdk
安装java-1.8.0-openjdk所有的文件
yum -y install java-1.8.0-openjdk*
查看版本号:
java -version

2.2、添加vim(编辑文档,docker容器中的centos阉割掉了vim与net-tools) net-tools

yum install -y net-tools

yum -y install vim

2.3、添加mysql数据库环境

安装MySQL8.0资源库
yum localinstall https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
安装MySQL8.0
yum install mysql-community-server

注意: 使用yum -y install mysql-community-server安装MySQL服务器有可能出现错误提示: Public key for mysql-community-libs-compat-8.0.31-1.el7.x86_64.rpm is not installed
Failing package is: mysql-community-libs-compat-8.0.31-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

执行以下命令重新获取
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
再重新尝试安装,安装成功

启动MySQL
systemctl start mysqld

service mysqld start

yum install initscripts -y   #(解决bash: service: command not found)

systemctl enable mysqld
查看默认密码
grep 'temporary password' /var/log/mysqld.log
启动mysql
mysql -uroot -p
重置密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

产生的原因:
自定义密码太简单,出现了不符合密码策略的问题,这个与validate_password_policy的值有关

修改密码校验规则与密码长度
set global validate_password.policy=0;
set global validate_password.length=1;
重新尝试修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
解决 远程连接报错:Host is not allowed to connect to this MySQL server
mysql -u root -p密码

use mysql;

update user set host = '%' where user = 'root';

FLUSH PRIVILEGES;

2.4、添加reids数据库环境

yum install -y wget

wget http://download.redis.io/releases/redis-5.0.7.tar.gz #下载reids安装包

tar -zvxf redis-5.0.7.tar.gz #解压redis包

mv /redis-5.0.7 /usr/local/redis #移动解压文件

cd /usr/local/redis

make #编译文件

make PREFIX=/usr/local/redis install #安装redis

./bin/redis-server& ./redis.conf #运行redis

问题:bash: make: command not found

yum安装mkae编辑安装及依赖包

yum -y install gcc automake autoconf libtool make
2.5、添加 nginx环境
首先需要安装一个叫”epel-release”的软件包,这个软件包会自动配置yum的软件仓库
yum install epel-release
使用yum来安装额外的软件包了,建议先刷新一下缓存
yum clean all
makecache建立一个缓存,以后用install时就在缓存中搜索,提高了速度。
yum makecache
开始安装nginx
yum install nginx -y

三、配置数据环境并上传项目

1、启动mysql(无需启动,已经启动了)

service mysqld start
或者
/etc/init.d/mysqld start

2、远程navicat连接mysql

3、导入本地数据库数据并项目导入容器

运行导出的sql文件,从而让数据到达镜像容器

将虚拟机中的 Springboot_Cild_English-0.0.1-SNAPSHOT.jar 移动到docker 容器中目录下

docker cp /home/hjh/computer_system.jar computer_system:/root/ (在root下执行)

4、导入nginx配置

本项目把前端的两个项目都放在nginx的html上

Nginx默认目录

whereis nginx

nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx

nginx配置

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    #配置相关站点 解决跨域
    include mime.types;
    #默认文件类型
    default_type application/octet-stream;

    sendfile        on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    server {
        listen       8080;
        server_name  localhost;

        #charset koi8-r;
        #access_log  logs/host.access.log  main;

        location / {
            root  /usr/share/nginx/html/front;
            index  index.html index.htm;
            try_files $uri $uri/ @router;
           #需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404
        }
        #对应上面的@router,主要原因是路由的路径资源并不是一个真实的路径,所以无法找到具体的文件
        #因此需要rewrite到index.html中,然后交给路由在处理请求资源
        location @router {
            rewrite ^.*$ /index.html last;
        }
    }

    server {
        listen       8081;
        server_name  localhost;

        #charset koi8-r;
        #access_log  logs/host.access.log  main;

        location / {
            root  /usr/share/nginx/html/admin;
            index  index.html index.htm;
            try_files $uri $uri/ @router;
           #需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404
        }
        #对应上面的@router,主要原因是路由的路径资源并不是一个真实的路径,所以无法找到具体的文件
        #因此需要rewrite到index.html中,然后交给路由在处理请求资源
        location @router {
            rewrite ^.*$ /index.html last;
        }
    }

}

将虚拟机文件导入centos镜像,包括nginx配置文件和前端打包的

docker cp /home/hjh/nginx/conf/nginx.conf computer_system:/etc/nginx/nginx.conf

docker cp /home/hjh/nginx/html/admin computer_system:/usr/share/nginx/html

docker cp /home/hjh/nginx/html/front computer_system:/usr/share/nginx/html

四、书写脚本文件实现所有进程一键启动

1、进入root目录、创建脚本文件

cd /root
vim start.sh
#刷新权限
chmod 777 start.sh
#启动脚本
./start.sh

脚本配置(使用并发,避免后面的启动springboot无法执行)

#启动Nginx服务
systemctl start nginx &
echo nginx服务已经启动
# 启动redis服务
cd /usr/local/redis/bin 
./redis-server /usr/local/redis/redis.conf &
echo redis服务已经启动
#启动mysql数据库
systemctl start mysqld &
echo mysql服务已启动
#启动spring-boot服务
java -jar /root/computer_system.jar --serverport=8989 &
echo spring-boot项目已启动,请前往浏览器访问!

五、上传镜像并发布阿里云!

1、commit命令上传到本地仓库

docker commit computer_system computer_system

2、注册阿里云账户和创建阿里云镜像仓库!

  • 注册用户,搜索镜像与容器服务

  • 创建命名空间!

  • 创建镜像仓库

  • 按页面指引指引操作上传镜像

1. 登录阿里云Docker Registry

$ docker login --username=你的用户名 registry.cn-hangzhou.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

2. 从Registry中拉取镜像

$ docker pull registry.cn-hangzhou.aliyuncs.com/computer_system/computer_system:[镜像版本号]

3. 将镜像推送到Registry

$ docker login --username=你的用户名 registry.cn-hangzhou.aliyuncs.com$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/computer_system/computer_system:[镜像版本号]$ docker push registry.cn-hangzhou.aliyuncs.com/computer_system/computer_system:[镜像版本号]

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

六、将镜像pull到 docker hub

  • 在https://hub.docker.com/网站上注册用户

  • 注册成功后点击Repositories -> create repository根据表单提示创建公有仓库,创建成功后会生成 一个仓库名,格式为 “用户名/项目名”

  • 将本地镜像名称修改为网站创建出来的仓库名称即 “用户名/项目名” 格式,标签随便取

  • 终端登录hub.docker.com,然后推送即可

docker login
docker push 新的镜像名:新的标签

你可能感兴趣的:(spring,boot,docker,vue)