单体部署①——MySQL部署


# 单体部署①——MySQL部署

首先 先下载hoj-deploy (opens new window)

git clone https://gitee.com/himitzh0730/hoj-deploy.git && cd hoj-deploy/src/mysql
1

# 前言

当前文件夹为打包hoj-mysql镜像的相关文件,只需将这些文件复制到同一个文件夹内,之后执行以下命令进行打包成镜像。

docker build -t hoj-mysql .
1

docker run启动

docker run -d --name hoj-mysql \
-v $PWD/hoj/data/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD="hoj123456" \
-e TZ="Asia/Shanghai" \
-e NACOS_USERNAME=root \
-e NACOS_PASSWORD=hoj123456 \
-p 3306:3306 \
--restart="always" \
hoj-mysql
#registry.cn-shenzhen.aliyuncs.com/hcode/hoj_database
1
2
3
4
5
6
7
8
9
10

docker-compose 启动

version: "3"
services:
  hoj-mysql:
    #image: registry.cn-shenzhen.aliyuncs.com/hcode/hoj_database
    image: hoj-mysql
    container_name: hoj-mysql
    restart: always
    volumes:
      - ./hoj/data/mysql/data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=hoj123456 # root账号的密码
      - TZ=Asia/Shanghai
      - NACOS_USERNAME=root # 需要初始化nacos数据库的管理员账号
      - NACOS_PASSWORD=hoj123456 # nacos管理员账号的密码
    ports:
      - "3306:3306"
#  如果有自定义网络可以类似添加如下
#    networks:
#      hoj-network:
#        ipv4_address: 172.20.0.3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 文件介绍

# 1. bcrypt

此文件为go打包的可执行文件,作用是生成经过bcrypt加密的对应nacos管理员账号的密码,然后生成对应的插入sql语句,代码内容如下:

package main

import (
	"flag"
	"fmt"
	"golang.org/x/crypto/bcrypt"
	"os"
)

// 加密密码
func HashAndSalt(pwd []byte) string {

	hash, err := bcrypt.GenerateFromPassword(pwd, bcrypt.MinCost)
	if err != nil {

	}
	return string(hash)
}

func main() {
	var username string
	var password string
	var filePath string

	flag.StringVar(&username,"username", "nacos", "nacos登录账号")
	flag.StringVar(&password,"password", "nacos", "nacos登录密码")
	flag.StringVar(&filePath,"filepath", "./nacos-data.sql", "sql脚本的文件夹路径")

	//解析命令行参数
	flag.Parse()

	bcrtpyPassword := HashAndSalt([]byte(password))

	sql := "use `nacos`;\nINSERT INTO users (username, password, enabled) VALUES ('%s', '%s', TRUE);\nINSERT INTO roles (username, role) VALUES ('%s', 'ROLE_ADMIN');"
	formatSql := fmt.Sprintf(sql, username, bcrtpyPassword, username)

	fileObj, err := os.OpenFile(filePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0111)

	if err != nil {
		fmt.Println("err:" + err.Error())
		return
	}
	defer fileObj.Close()
	fileObj.WriteString(formatSql)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

# 2. hoj.sql

此文件为hoj数据库的生成脚本及相关表数据的初始化

# 3. nacos.sql

此文件为nacos数据库的生成脚本及相关表数据的初始化

# 4. run.sh

此文件为shell脚本,用于执行sql脚本文件的执行,生成hoj,nacos数据库及插入相关数据

#!/bin/bash

$WORK_PATH/bcrypt --username=$NACOS_USERNAME --password=$NACOS_PASSWORD --filepath=$WORK_PATH/$FILE_2;

sleep 2;

mysql -uroot -p$MYSQL_ROOT_PASSWORD << EOF
system echo '================Start create database hoj====================';
source $WORK_PATH/$FILE_0;
system echo '================Start create database nacos==================';
source $WORK_PATH/$FILE_1;
system echo '================Start insert user into nacos=================';
source $WORK_PATH/$FILE_2;
system echo '=====================Everything is ok!=======================';
EOF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 5. Dockerfile

FROM mysql:8

#定义工作目录
ENV WORK_PATH /usr/local/work

#定义会被容器自动执行的目录
ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d

#定义sql文件名
ENV FILE_0 hoj.sql
ENV FILE_1 nacos.sql
ENV FILE_2 nacos-data.sql

#定义shell文件名
ENV INSTALL_DATA_SHELL run.sh

#定义生成nacos-data.sql的文件名
ENV NACOS_DATA_SHELL bcrypt

ENV NACOS_USERNAME=${NACOS_USERNAME}

ENV NACOS_PASSWORD=${NACOS_PASSWORD}

COPY ./$FILE_0 $WORK_PATH/
COPY ./$FILE_1 $WORK_PATH/
COPY ./$FILE_3 $WORK_PATH/

COPY ./$INSTALL_DATA_SHELL $AUTO_RUN_DIR/
COPY ./bcrypt  $WORK_PATH/

COPY ./mysql.cnf /etc/mysql/conf.d/

RUN chmod a+x $WORK_PATH/bcrypt

RUN echo '' > $WORK_PATH/$FILE_2

RUN chmod +777 $WORK_PATH/$FILE_2

#给执行文件增加可执行权限

RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DATA_SHELL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Last update: March 16, 2022 19:00
Contributors: Himit_ZH