账号密码
本地虚拟机
Jerry1:
用户名:root
密码:root
主机端口转发:2222 -> 22
IP:192.168.56.10
Jerry2:
用户名:root
密码:root
主机端口转发:2223 -> 22
IP:
Jerry3:
用户名:root
密码:root
主机端口转发:2224 -> 22
IP:10.0.2.15
一、基础操作
1.网络与防火墙
# 查看防火墙状态
service firewalld status
# 关闭防火墙
service firewalld stop
# 安装net工具(执行ifconfig命令)
sudo yum install net-tools
# 修改网络信息 (eth0为网卡名)
vi /etc/sysconfig/network-scripts/ifcfg-eth0
# 修改主机名
vi /etc/hostname
# 重启
reboot
# 编辑hosts文件
vim /etc/hosts
# 添加IP与主机名映射关系
# ==================================
192.168.56.11 node2
192.168.56.12 node3
# ==================================
2.文件操作
3.多台虚拟机配置不同IP
# 复制出虚拟机后,在虚拟机管理软件(VirtualBox)的网络设置中重写随机生成MAC地址并记录
# 虚拟机第一块网卡选择 网络地址转换(NET) 第二块网卡选择 仅主机(Host-Only)网络 两个网卡都需要重写生成MAC地址
# 进入虚拟机命令行界面,修改eth0配置
vi /etc/sysconfig/network-scripts/ifcfg-eth0
# 内容实例==================================
DEVICE="eth0"
BOOTPROTO="dhcp" # dhcp-自动获取IP static-手动指定IP
ONBOOT="yes" # 开机自启动
TYPE="Ethernet"
PERSISTENT_DHCLIENT="yes"
HWADDR=08:00:27:B3:79:92 # MAC地址 这里填的是 网络地址转换(NET)网卡的MAC地址
# ==================================
# 进入虚拟机命令行界面,修改eth1配置
vi /etc/sysconfig/network-scripts/ifcfg-eth1
# 内容实例==================================
NM_CONTROLLED=yes
BOOTPROTO=static # 静态IP
ONBOOT=yes # 开机启动
IPADDR=192.168.56.11 # IP
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.56.1 # 网关
HWADDR=08:00:27:92:D1:FD # MAC地址
DNS1=192.168.1.1 #DNS
DEVICE=eth1 # 网卡名称
PEERDNS=no
# ==================================
# 配置完成后重启网卡
service network restart
4.权限
# 进入虚拟机后
# 查看当前用户
whoami
# 以root用户的权限执行某个xxx命令
sudo xxx
二、基础环境
1.java-1.8.0-openjdk安装(yum)
# 查看云端目前支持安装的jdk版本
yum search java|grep jdk
# 选择版本后,安装(执行以下命令会自动安装jdk相关依赖)
yum install -y java-1.8.0-openjdk
# 安装完成,验证是否安装成功
java -version
# 通过搜索java文件,查找jdk默认安装目录
find / -name 'java'
# 通过yum安装的默认路径为:/usr/lib/jvm
# 将jdk的安装路径加入到JAVA_HOME
vi /etc/profile
# 在文件最后加入:
#set java environment
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.275.b01-0.el7_9.x86_64/jre
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME PATH
# 修改/etc/profile之后让其生效(注意 . 之后应有一个空格)
. /etc/profile
2. java-1.8(安装包)
# 安装wget命令
yum -y install wget
# 下载安装包
wget https://repo.huaweicloud.com/java/jdk/8u201-b09/jdk-8u201-linux-x64.tar.gz
# 解压(注意指定文件夹)
tar -zxvf jdk-8u201-linux-x64.tar.gz
# 移动、改名(可选)
mv jdk1.8.0_201 /devsoft/jdk1.8
# 配置环境变量
vi /etc/profile
# 末尾加入下列配置
export JAVA_HOME=/devsoft/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 刷新配置
source /etc/profile
# 查看java版本
java -version
3.MySQL(MariaDB分支)安装
# 安装mariadb-server
yum install -y mariadb-server
# 启动服务
systemctl start mariadb.service
# 如果发生错误:
# error:Job for mariadb.service failed because the control process exited with error code
cp /usr/share/mysql/my-huge.cnf /etc/my.cnf
# 输入 y 后,再次启动服务
# 添加到开机启动
systemctl enable mariadb.service
# 修改数据库管理员root密码============================
# 跳过权限验证
vi /etc/my.cnf
任意一行添加:skip-grant-tables
# 重启服务
systemctl restart mariadb.service
# 登录root 账户
mysql -u root -p
# (直接回车)
use mysql
# 修改密码
update mysql.user set password=password('root') where user='root';
flush privileges;
quit
# 删除配置文件中的 skip-grant-tables
vi /etc/my.cnf
# 删除skip-grant-tables
# 重启服务
systemctl restart mariadb.service
# 修改数据库管理员root密码============================
# 登录
mysql -u root -p root
# 开启root 远程访问权限
MariaDB [mysql]> use mysql;
MariaDB [mysql]> select User,authentication_string,Host from user;
# 指定root用户本机访问mysql的密码
MariaDB [mysql]> grant all privileges on *.* to root@'localhost' identified by "当前服务器访问密码";
# % 表示指定所有IP以root用户访问时的密码
MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '远程登录密码';
# 刷新配置
MariaDB [mysql]> flush privileges;
# MariaDB修改密码
/usr/bin/mysqladmin -u root password '要修改的密码'
4.sync 命令安装
# 安装rsync
yum install rsync
# 在/usr/local/bin目录下创建 xsync
cd /usr/local/bin
touch xsync
# 编辑(注意修改主机名)
vim xsync
# ==================================
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
# 也可以采用:
# for host in hadoop{102..104};
for host in node1 node2 node3
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
echo pdir=$pdir
#6. 获取当前文件的名称
fname=$(basename $file)
echo fname=$fname
#7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)
ssh $host "mkdir -p $pdir"
#8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下
rsync -av $pdir/$fname $USER@$host:$pdir
else
echo $file does not exists!
fi
done
done
# ==================================
# 执行权限
chmod 777 xsync
5.vim命令安装
yum -y install vim*
6.ssh免密登录
# 前提:已配好 IP与主机名映射
# 生成密钥(在/home/user/.ssh目录下生成两个文件id_rsa(私钥)、id_rsa.pub(公钥))
ssh-keygen -t rsa
# 将公钥拷贝到要免密登录的目标机器上(node2为目标主机名)
ssh-copy-id node2
# 免密登录
ssh node2
三、Docker相关
1.Docker安装
# 检查内核版本,必须是3.10及以上
uname -r
# 卸载已经有的docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装docker依赖的包
sudo yum install -y yum-utils
# 配置docker地址
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker引擎ce 和docker的ce客户端
sudo yum install docker-ce docker-ce-cli containerd.io
# 启动docker
sudo systemctl start docker
# 查看docker版本
docker -v
# 查看当前虚拟机docker安装了哪儿些镜像
sudo docker images
# docker开机自启动
sudo systemctl enable docker
# 配置docker 阿里云镜像加速
# 在阿里云的【容器镜像服务】中有镜像加速器,按照给出的命令执行即可
# centOS 镜像加速配置命令=====================================开始
# 创建目录
sudo mkdir -p /etc/docker
# 配置地址
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://zejfvcf7.mirror.aliyuncs.com"]
}
EOF
#重启后台服务
sudo systemctl daemon-reload
# 重启docker
sudo systemctl restart docker
# centOS 镜像加速配置命令=====================================结束
# 停止docker
systemctl stop docker
2.Docker的镜像操作
操作 | 命令 | 说明 |
---|---|---|
检索 | docker search 关键字 (例如:docker search redis) | 我们经常去docker hub上检索镜像的详细信息,如镜像的TAG。 |
拉取 | docker pull 镜像名:tag | :tag是可选的,tag表示标签,多为软件的版本,默认是latest |
列表 | docker images | 查看所有本地镜像 |
删除 | docker rmi image-id | 删除指定的本地镜像 |
查看docker的tags:https://hub.docker.com/
3.Docker的容器操作
软件镜像(QQ安装程序)----运行镜像----产生一个容器(正在运行的软件,运行的QQ)
3.1 安装Tomcat(其他容器同理)
# 搜索镜像
docker search tomcat
# 拉取镜像
docker pull tomcat
# 根据镜像启动容器
# 格式:docker run --name 给镜像起个名 -d 镜像名:tags
docker run --name mytomcat -d tomcat:latest
# 查看运行中的容器
docker ps
# 停止运行中的容器
docker stop 容器的id
# 查看所有的容器
docker ps -a
# 启动容器
docker start 容器id
# 删除一个容器
docker rm 容器id
# 启动一个做了端口映射的tomcat
docker run -d -p 8888:8080 tomcat
#=============属性===================
-name 容器名 :给容器起名
-d:后台运行
-p: 将主机的端口映射到容器的一个端口 主机(虚拟机)端口:容器内部的端口
#=============属性===================
# 查看容器的日志
# 格式:docker logs 容器名/容器ID
docker logs container-name/container-id
更多命令参看https://docs.docker.com/engine/reference/commandline/docker/
可以参考每一个镜像的文档
3.2 Docker安装MySQL
安装和启动镜像务必参照官方文档!
# 下载mysql镜像 5.7为版本号,可替换
sudo docker pull mysql:5.7
# 启动MySQL
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
# 启动mysql命令解析:
# -p 指定端口号映射,把容器的3306映射到linux主机的3306端口,左边是linux端口,右边是容器端口
# --name 给启动的mysql指定一个名字
# -v 目录挂载,将容器内部mysql相关的文件夹(右边)挂载(快捷方式)到linux主机的目录(左边)下,日志、数据、配置。
# -e 指定root用户的密码
# -d 指定启动的版本
# 查看启动的容器
docker ps
# 进入容器的内部 命令中的mysql是容器的name ,也可以替换为容器的ID。 后面的目录不同的容器各不相同。
docker exec -it mysql /bin/bash
# 进入容器内部后 查看mysql安装目录
whereis mysql
# 进入虚拟机的mysql配置映射目录
cd /mydata/mysql/conf
# 修改mysql配置,字符编码
vi my.cnf
# 添加以下内容
# --------------------------------
[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
# --------------------------------
# 重启mysql容器(添加配置后需要重启) 命令中mysql是容器名字
docker restart mysql
# mysql随docker启动自动启动,命令中mysql为镜像name
# 其他镜像同理
docker update mysql --restart=always
# 进入容器内配置文件的目录后查看配置文件
cat my.cnf
#===============================其他启动方法===============================
# 自定义配置文件位置的
# 把主机的/conf/mysql文件夹挂载到 mysqldocker容器的/etc/mysql/conf.d文件夹里面
# 改mysql的配置文件就只需要把mysql配置文件放在自定义的文件夹下(/conf/mysql)
docker run --name mysql03 -v /conf/mysql:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
# 指定mysql的一些配置参数
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
#===============================其他启动方法===============================
#===============================错误启动方法===============================
# 错误的启动:未指定密码
docker run --name mysql01 -d mysql
# 查看启动的容器(mysql退出了)
docker ps -a
#CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#42f09819908b mysql "docker-entrypoint.sh" 34 seconds ago Exited (1) 33 seconds ago mysql01
# 查看错误日志
docker logs 42f09819908b
#error: database is uninitialized and password option is not specified
#You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD;这个三个参数必须指定一个
#===============================错误启动方法===============================
3.3 Docker安装Redis
# 安装Redis(不指定版本就安装最新版)
docker pull redis
# 先创建一个redis的默认配置文件redis.conf
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
# 启动Redis容器(语法含义和mysql相同)
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
# 测试redis,连接redis客户端
docker exec -it redis redis-cli
# 修改redis.conf 配置文件,配置持久化
# (更多配置参考官方文档)
vi /mydata/redis/conf/redis.conf
# -------------------------------------------
appendonly yes
# -------------------------------------------
# 重启redis容器(修改配置后需要重启) redis为redis容器名
docker restart redis
# 自动启动redis
sudo docker update redis --restart=always
4.Docker部署SpringBoot项目
# SpringBoot项目打包(Jar) 并在服务器上创建该项目的Jar包存放目录(规范、也便于后续更新)
# 以projectName为自定义目录名称为例
mkdir /app/dockerfile/projectName
# 在刚创建好的目录下创建Dockerfile
vim Dockerfile
#--------------------Dockerfile内容---------------------------
# 源镜像名称,以该镜像为基础构建新镜像,如果没有
FROM openjdk:8u275-jre
# 将jar包添加到容器中并更名为app.jar
ADD meetingmanage-0.0.1-SNAPSHOT.jar meetingmanage.jar
# 运行jar包
RUN bash -c 'touch /meetingmanage.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/meetingmanage.jar"]
#---------------------Dockerfile内容--------------------------
# 编译镜像(在jar包所在目录下执行)
docker build -t zhangxy/meetingmanage .
# 启动容器
docker run -d -p 9002:80 --name=meetingmanage_zhangxy_9002 zhangxy/meetingmanage
四、BUG处理
1.awt异常
# 需要在tomcat的bin下的启动脚本cataliina.sh上加配置
CATALINA_OPTS=-Djava.awt.headless=true