…
1.linux基本操作命令
按J键将光标移动到最后一行,用L键将光标移动到最后一列,再按A键进入到插入模式,按i键进入到插入模式,
按ESC键跳到命令模式,然后:
:w 保存文件但不退出vi
:w file 将修改另外保存到file中,不退出vi
:w! 强制保存,不退出vi
:wq 保存文件并退出vi
:wq! 强制保存文件,并退出vi
q: 不保存文件,退出vi
:q! 不保存文件,强制退出vi
:e! 放弃所有修改,从上次保存文件开始再编辑
ZZ (大写),如果修改了就保存,没修改就退出
ip查询以及网络连接
输入ip查询命名 ip addr ,也可以输入ifconfig(centOs7没有ifconfig命令)查看ip
如果发现 ens33 没有 inet 这个属性,那么就没法通过IP地址连接虚拟机。
查看ens33网卡的配置: vi /etc/sysconfig/network-scripts/ifcfg-ens33 注意vi后面加空格
把这一项(ONBOOT=no)改为(ONBOOT=yes)
然后按 Esc 退出 再出入命令 :wq 再按Enter即可
然后重启网络服务: sudo service network restart
再输入 ip addr 命令 ping www.baidu.com 是否通
Linux系统中ping通一个主机时会一直执行
解决方法:CTRL+c或CTRL+z方式退出。
centos 7查询jdk路径:ls -lrt /etc/alternatives/java
JDK
查找并过滤 rpm -qa|grep jdk
删除rpm -e --nodeps java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64
sudo rpm -e --nodeps java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.262.b10-1.el7.x86_64
rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.261-2.6.22.2.el7_8.x86_64
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64
解决办法:su进入root
安装JDK 下载rpm文件
rpm -ivh
jdk安装(rpm安装)
1、rpm下载地址http://www.oracle.com/technetwork/java/javase/downloads/index.html
2、如果有安装openjdk 则卸载
[root@kuangshen ~]# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
# 检查
[root@kuangshen ~]# rpm -qa|grep jdk
jdk1.8.0_121-1.8.0_121-fcs.x86_64
# 卸载 -e --nodeps 强制删除
[root@kuangshen ~]# rpm -e --nodeps jdk1.8.0_121-1.8.0_121-fcs.x86_64
[root@kuangshen ~]# java -version
-bash: /usr/bin/java: No such file or directory # OK
----------
jdk11:
[root@root ~]# which java
/usr/bin/java
[root@root ~]# ls -lrt /usr/bin/java
lrwxrwxrwx. 1 root root 22 5月 16 11:03 /usr/bin/java -> /etc/alternatives/java
[root@root ~]# ls -lrt /etc/alternatives/java
lrwxrwxrwx. 1 root root 64 5月 16 11:03 /etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-11.0.19.0.7-1.el7_9.x86_64/bin/java
3、安装JDK
# 安装java rpm
[root@kuangshen kuangshen]# rpm -ivh jdk-8u221-linux-x64.rpm
# 安装完成后配置环境变量 文件:vim /etc/profile
JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME
# 保存退出
# 让新增的环境变量生效!
source /etc/profile
# 测试 java -version
[root@kuangshen java]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
开启端口:firewall-cmd --zone=public --add-port=8082/tcp --permanent
重启服务:systemctl restart firewalld.service
查看防火墙状态:systemctl status firewalld
使用java -jar .jar运行,然后使用自己虚拟机ip就可以访问了
Tomcat安装(解压缩安装)
1、安装好了Java环境后我们可以测试下Tomcat!准备好Tomcat的安装包!
2、将文件移动到/usr/tomcat/下,并解压!
[root@kuangshen kuangshen]# mv apache-tomcat-9.0.22.tar.gz /usr
[root@kuangshen kuangshen]# cd /usr
[root@kuangshen usr]# ls
apache-tomcat-9.0.22.tar.gz
[root@kuangshen usr]# tar -zxvf apache-tomcat-9.0.22.tar.gz # 解压
3、运行Tomcat,进入bin目录,和我们以前在Windows下看的都是一样的
# 执行:startup.sh -->启动tomcat
# 执行:shutdown.sh -->关闭tomcat
./startup.sh
./shutdown.sh
[root@root bin]# ps -ef | grep tomcat #查看tomcat进程是否启动 如下未启动
root 4020 3632 0 16:35 pts/0 00:00:00 grep --color=auto tomcat
[root@root bin]# ./catalina.sh run # 查看启动日志
报错如下:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/catalina/startup/Bootstrap has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 版本问题 更换低版本
在启动,如下进程启动
[root@root bin]# ps -ef | grep tomcat
root 4267 1 35 16:38 pts/0 00:00:02 /usr/java/jdk1.8.0_65/bin/java -Djava.util.logging.config.file=/home/java/apache-tomcat-8.5.83/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /home/java/apache-tomcat-8.5.83/bin/bootstrap.jar:/home/java/apache-tomcat-8.5.83/bin/tomcat-juli.jar -Dcatalina.base=/home/java/apache-tomcat-8.5.83 -Dcatalina.home=/home/java/apache-tomcat-8.5.83 -Djava.io.tmpdir=/home/java/apache-tomcat-8.5.83/temp org.apache.catalina.startup.Bootstrap start
root 4309 3632 0 16:38 pts/0 00:00:00 grep --color=auto tomcat
4、确保Linux的防火墙端口是开启的,如果是阿里云,需要保证阿里云的安全组策略是开放的!
# 查看firewall服务状态
systemctl status firewalld
# 开启、重启、关闭、firewalld.service服务
# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙规则
firewall-cmd --list-all # 查看全部信息
firewall-cmd --list-ports # 只看端口信息
# 开启端口
#开端口命令:# firewall-cmd --zone=public --add-port=8080/tcp --permanent
#重启防火墙:# systemctl restart firewalld.service
#关闭防火墙 :# systemctl stop firewalld.service
命令含义:
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
# 重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
# 参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;
2.安装Docker(yum安装)
基于 CentOS 7 安装
-
官网安装参考手册:https://docs.docker.com/install/linux/docker-ce/centos/
-
确定你是CentOS7及以上版本
[root@192 Desktop]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core)
-
yum安装gcc相关(需要确保 虚拟机可以上外网 )
yum -y install gcc yum -y install gcc-c++
-
卸载旧版本
yum -y remove docker docker-common docker-selinux docker-engine # 官网版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
-
安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
-
设置stable镜像仓库
# 错误 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo ## 报错 [Errno 14] curl#35 - TCP connection reset by peer [Errno 12] curl#35 - Timeout # 正确推荐使用国内的 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
更新yum软件包索引
yum makecache fast
-
安装Docker CE docker-ce社区版 docker-ee企业版
yum -y install docker-ce docker-ce-cli containerd.io
-
启动docker
[root@root /]# systemctl start docker #可能会报错:Failed to start docker.service: Unit not found. 因为缺少 rhel-push-plugin.socket 单元,该单元是rhel-push-plugin软件包的一部分 #执行:curl -sSL https://get.docker.com/ | sh [root@root /]# systemctl start docker 查看docker进程 ps -ef|grep docker
-
测试
#docker version 查看版本 #docker run hello-world 运行hello-world(首次会自动下载) #docker images(查看镜像)
11.环境查看
#uname -r
卸载 Docker 引擎
-
卸载 Docker 引擎、CLI 和 Containerd 软件包:
yum remove docker-ce docker-ce-cli containerd.io
-
主机上的映像、容器、卷或自定义配置文件不会自动删除。要删除所有映像、容器和卷:
rm -rf /var/lib/docker rm -rf /var/lib/containerd /var/lib/docker 默认工作路径
docker运行流程
docker底层结构
docker是怎么工作的?
Docker是一个Client - Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问!DockerServer接收到 Docker-Client的指令,就会执行这个命令!
为什么Docker比vm快?
1.Docker有着比虚拟机更少的抽象层,由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在Cpu、内存利用率上Docker将会在效率上有明显优势。
2.Docker利用的是宿主机的内核,而不需要Guest OS,因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统,避免了引导、加载操作系统内核这个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的,而Docker由于直接利用宿主机的操作系统则省略了这个过程,因此新建一个Docker容器只需要几秒钟。
Docker容器 | 虚拟机(VM) | |
---|---|---|
操作系统 | 与宿主机共享OS | 宿主机OS上运行宿主机OS |
存储大小 | 镜像小,便于存储与传输 | 镜像庞大(vmdk等) |
运行性能 | 几乎无额外性能损失 | 操作系统额外的cpu、内存消耗 |
移植性 | 轻便、灵活、适用于Linux | 笨重、与虚拟化技术耦合度高 |
硬件亲和性 | 面向软件开发者 | 面向硬件运维者 |
docker info 显示docker的系统信息,包括镜像和容器的数量
docker --help
镜像命令
docker images
REPOSITORY hello-world 镜像仓库源
TAG latest 镜像仓标签
IMAGE ID feb5d9fea6a5 镜像仓id
CREATED 6 months ago 镜像仓创建时间
SIZE 13.3kB 镜像大小
名称,简写 默认 描述
--all,-a 显示所有图像(默认隐藏中间图像)
--digests 显示摘要
--filter,-f 根据提供的条件过滤输出
--format 使用 Go 模板打印漂亮的图像
--no-trunc 不要截断输出
--quiet,-q 仅显示图像 ID
搜索
docker search搜索
例如:docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12339 [OK]
mariadb MariaDB Server is a high performing open sou… 4746 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 916 [OK]
#可选项
名称,简写 默认 描述
--filter,-f 根据提供的条件过滤输出
--format 使用 Go 模板进行漂亮的打印搜索
--limit 25 最大搜索结果数
--no-trunc 不要截断输出
#例子:
# docker --filter=start=3000
# docker pull --help
docker pull 下载镜像
docker pull 镜像名[:tag]
docker pull mysql
Using default tag: latest # 如果不写tag,默认latest 最新版本
latest: Pulling from library/mysql
f003217c5aae: Pull complete 分层下载docker镜像
65d94f01a09f: Pull complete
43d78aaa6078: Pull complete
a0f91ffbdf69: Pull complete
59ee9e07e12f: Pull complete
04d82978082c: Pull complete
70f46ebb971a: Pull complete
db6ea71d471d: Pull complete
c2920c795b25: Pull complete
26c3bdf75ff5: Pull complete
9ec1f1f78b0e: Pull complete
4607fa685ac6: Pull complete
Digest: sha256:1c75ba7716c6f73fc106dacedfdcf13f934ea8c161c8b3b3e4618bcd5fbcf195
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest 真实地址
# 等价于
docker pull mysql
docker pull docker.io/library/mysql:latest
# 指定版本下载
docker pull mysql:5.7
使用docker images查看到当前安装的mysql
删除镜像
docker rmi -f
docker rmi -f 容器id # 删除指定的容器 通过id
docker rmi -f 容器id 容器id 容器id 容器id # 删除多个容器 通过id
docker rmi -f $(docker images -aq) # 删除全部的容器
3.容器的命令
说明:我们 有了镜像才可以创建容器.下载一个centos来学习练手
# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
# docker run --help
新建容器并启动
# docker run [可选参数] image
docker run it image
# 参数说明
--name="Name" 容器名字tomcato1 tomcat02,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口-p8080:8080
-p ip:主机端口:容器端口
-p主机端口:容器端口《常用》
-p容器端口
容器端口
-P 随机指定端口
#docker run -it centos /bin/bash 启动并进入容器 使用ls命令就可以看到里面的详细信息
#docker run -d centos /bin/bash 后台启动
#l -a
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
查出来的信息就是centos信息,这里的centos与外部的centos没有任何关系
使用exit命令停止退出
#exit
# docker ps 查看正在运行的容器
# docker ps -a 查看曾经运行的容器以及正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
464bcf9929ea centos "/bin/bash" 7 minutes ago Exited (130) 2 minutes ago tender_meninsky
86ac02d77e3b hello-world "/hello" 2 hours ago Exited (0) 2 hours ago loving_bhaskara
e8be3db482be hello-world "/hello" 13 days ago Exited (0) 13 days ago hardcore_brahmagupta
显示最近创建的容器
docker ps -a n=?
例如:#docker ps -a n=1
#docker ps -q 显示当前容器的编号
#docker ps -aq 显示所有容器的编号
容器退出
#exit 容器退出并停止
#ctrl+p+Q 容器不停止退出
删除容器
docker rm 容器iD #根据容器ID删除 不能删除正在运行的容器
docker rm -f $(docker ps -aq) #根据容器ID删除全部
启动和停止容器
# systemctl start docker
# systemctl start 容器id 通过id启动容器
# 重启
# systemctl restart 容器id 通过id重新启动容器
# systemctl stop 容器id 通过id停止容器
# systemctl kill 容器id 通过id强制停止容器
常用的其他命令
# docker run -d 镜像名 后台启动
# docker run -d centos 后台启动
问题
# docker ps,发现centos停止了
#常见的坑。docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#例如 nginx。容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
查看日志
# docker 1ogs
名称,简写 默认 描述
--details 显示提供给日志的额外详细信息
--follow,-f 关注日志输出
--since 显示自时间戳(例如 2013-01-02T13:23:37Z)或相对时间(例如 42m 42 分钟)以来的日志
--tail,-n all 从日志末尾显示的行数
--timestamps,-t 显示时间戳
--until API 1.35+
在时间戳(例如 2013-01-02T13:23:37Z)或相对时间(例如 42m 42 分钟)之前显示日志
#docker 1ogs -tf --tail
例子:docker 1ogs -tf --tail 10 988a3df7b7a3 查10条
自己写xshell脚本运行
# docker run -d centos /bin/bash -c "while true;do echo sunshine;sleep 1;done"
如果发现容器ID不变,则docker stop 容器id 停止当前容器 重新运行 docker run -d centos /bin/bash -c "while true;do echo sunshine;sleep 1;done"
此时使用 docker ps 就可以查看到重新启动的容器了
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4108eca2f9c centos "/bin/bash -c 'while…" 3 seconds ago Up 2 seconds great_rubin
显示日志
# docker 1ogs -tf --tail 10 d4108eca2f9c 10
# docker 1ogs -t 10 d4108eca2f9c 10
# docker 1ogs -tf 所有
# docker logs -f d4108eca2f9c
sunshine
sunshine
sunshine
sunshine
sunshine
sunshine
sunshine
sunshine
sunshine
# docker logs -tf d4108eca2f9c
2022-04-02T06:27:11.968212722Z sunshine
2022-04-02T06:27:13.107592110Z sunshine
2022-04-02T06:27:14.109829588Z sunshine
2022-04-02T06:27:15.190162011Z sunshine
2022-04-02T06:27:16.192279113Z sunshine
2022-04-02T06:27:17.212936632Z sunshine
2022-04-02T06:27:18.213578701Z sunshine
# [root@localhost ~]# docker logs -tf --tail 10 d4108eca2f9c
2022-04-02T06:38:03.927384602Z sunshine
2022-04-02T06:38:04.930669487Z sunshine
2022-04-02T06:38:05.939303177Z sunshine
2022-04-02T06:38:06.950438115Z sunshine
2022-04-02T06:38:07.955934797Z sunshine
2022-04-02T06:38:08.970135391Z sunshine
2022-04-02T06:38:09.985847225Z sunshine
查看容器的进程信息
[root@localhost ~]# docker top d4108eca2f9c
UID PID PPID C STIME
root 7373 7352 0 14:27
root 9541 7373 0 14:41
查看镜像元数据
#docker inspect 容器id
#docker inspect d4108eca2f9c
[
{
"Id": "d4108eca2f9c74d9a7254d98ccc7a92b08871dc3b1a3d785211ed8e28841a6b8", 容器id
"Created": "2022-04-02T06:27:11.44644919Z",
"Path": "/bin/bash",
"Args": [ 脚本
"-c",
"while true;do echo sunshine;sleep 1;done"
],
"State": { 状态
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 7373,
"ExitCode": 0,
"Error": "",
"StartedAt": "2022-04-02T06:27:11.970520799Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": 镜像相关信息
"sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
"ResolvConfPath": "/var/lib/docker/containers/d4108eca2f9c74d9a7254d98ccc7a92b08871dc3b1a3d785211ed8e28841a6b8/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/d4108eca2f9c74d9a7254d98ccc7a92b08871dc3b1a3d785211ed8e28841a6b8/hostname",
"HostsPath": "/var/lib/docker/containers/d4108eca2f9c74d9a7254d98ccc7a92b08871dc3b1a3d785211ed8e28841a6b8/hosts",
"LogPath": "/var/lib/docker/containers/d4108eca2f9c74d9a7254d98ccc7a92b08871dc3b1a3d785211ed8e28841a6b8/d4108eca2f9c74d9a7254d98ccc7a92b08871dc3b1a3d785211ed8e28841a6b8-json.log",
"Name": "/great_rubin",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"CgroupnsMode": "host",
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/2f81ffd2f61db77bae030cfbad09379370708a9deccb46e89f5bd53175cc73ed-init/diff:/var/lib/docker/overlay2/83b1a1a8b0f02a60e58a8b72e1832940ae5ac5b0a268415cc294ea97115aa4fe/diff",
"MergedDir": "/var/lib/docker/overlay2/2f81ffd2f61db77bae030cfbad09379370708a9deccb46e89f5bd53175cc73ed/merged",
"UpperDir": "/var/lib/docker/overlay2/2f81ffd2f61db77bae030cfbad09379370708a9deccb46e89f5bd53175cc73ed/diff",
"WorkDir": "/var/lib/docker/overlay2/2f81ffd2f61db77bae030cfbad09379370708a9deccb46e89f5bd53175cc73ed/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "d4108eca2f9c",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash",
"-c",
"while true;do echo sunshine;sleep 1;done"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20210915",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"NetworkSettings": { 网络信息
"Bridge": "",
"SandboxID": "297c805445b370b15c1e12c6b109abeb17625655b0b034317be3cacaca813b2e",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/297c805445b3",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "ac14a90c768982506a28ad43eba4e7e54b693a05cbd2961044cedb6e2cf39763",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "5c71774c6f6196e5ec1c629ac1c5d786904bd0dc74adfbced9dc48f7b8f3dcfe",
"EndpointID": "ac14a90c768982506a28ad43eba4e7e54b693a05cbd2961044cedb6e2cf39763",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
进入当前正在运行的容器
#我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
#命令
方式一:
#docker exec -it 容器id bashShell
[root@localhost ~]# docker exec -it d4108eca2f9c /bin/bash
[root@d4108eca2f9c /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@d4108eca2f9c /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 06:27 ? 00:00:01 /bin/bash -c while true;do echo sunsh
root 1813 0 0 06:57 pts/0 00:00:00 /bin/bash
root 1938 1 0 06:59 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-s
root 1939 1813 0 06:59 pts/0 00:00:00 ps -ef
方式二:
#docker attach 容器id
#测试
[root@localhost ~]# docker attach d4108eca2f9c
正在执行的代码........
sunshine
sunshine
sunshine
sunshine
sunshine
sunshine
sunshine
两种方式的区别:
#docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
#docker attach #进入容器正在执行的终端,不会启动新的进程!
从容器拷贝文件到终端
docker cp 容器id:容器内的路径 目的主机路径
启动容器:docker run -it centos /bin/bash
[root@localhost home]# docker ps 查看当前运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3fbd5c56b030 centos "/bin/bash" 3 minutes ago Up 3 minutes zen_galileo
[root@localhost home]# docker attach 3fbd5c56b030 进入当前容器
[root@3fbd5c56b030 /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@3fbd5c56b030 /]# cd /home
[root@3fbd5c56b030 home]# ls
[root@3fbd5c56b030 home]# touch test.java 创建文件
[root@3fbd5c56b030 home]# ls
test.java
[root@b3e86d700870 home]# exit
exit
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b3e86d700870 centos "/bin/bash" 22 minutes ago Exited (0) 11 seconds ago blissful_elion
[root@localhost ~]# docker cp b3e86d700870:/home/test.java /home 拷贝文件
[root@localhost ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg
[root@localhost ~]# cd /home
[root@localhost home]# ls
java roothome test.java 可以查看到当前文件
docker部署nginx
[root@localhost home]# docker search nginx 搜索nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 16556 [OK]
bitnami/nginx Bitnami nginx Docker Image 120 [OK]
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 38
bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Contr… 17 [OK]
rancher/nginx-ingress-controller 10
ibmcom/nginx-ingress-controller Docker Image for IBM Cloud Private-CE (Commu… 4
bitnami/nginx-ldap-auth-daemon 3
bitnami/nginx-exporter 2
rancher/nginx-ingress-controller-defaultbackend 2
circleci/nginx This image is for internal use 2
vmware/nginx 2
rancher/nginx 1
vmware/nginx-photon 1
bitnami/nginx-intel 1
wallarm/nginx-ingress-controller Kubernetes Ingress Controller with Wallarm e… 0
rancher/nginx-conf 0
rancher/nginx-ssl 0
continuumio/nginx-ingress-ws 0
ibmcom/nginx-ppc64le Docker image for nginx-ppc64le 0
rancher/nginx-ingress-controller-amd64 0
ibmcom/nginx-ingress-controller-ppc64le Docker Image for IBM Cloud Private-CE (Commu… 0
kasmweb/nginx An Nginx image based off nginx:alpine and in… 0
rancher/nginx-proxy 0
wallarm/nginx-ingress-controller-amd64 Kubernetes Ingress Controller with Wallarm e… 0
ibmcom/nginx-ingress-controller-amd64
[root@localhost home]# docker pull nginx 下载nginx
Using default tag: latest
latest: Pulling from library/nginx
c229119241af: Pull complete
2215908dc0a2: Pull complete
08c3cb2073f1: Pull complete
18f38162c0ce: Pull complete
10e2168f148a: Pull complete
c4ffe9532b5f: Pull complete
Digest: sha256:2275af0f20d71b293916f1958f8497f987b8d8fd8113df54635f2a5915002bf1
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@localhost home]# docker images 查看下载的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 667ee8fb158e 3 days ago 521MB
nginx latest 12766a6745ee 3 days ago 142MB
hello-world latest feb5d9fea6a5 6 months ago 13.3kB
centos latest 5d0da3dc9764 6 months ago 231MB
#说明
# -d 后台运行
# --name 给容器命名
# -p 宿主机端口,容器内部端口
[root@localhost home]# docker run -d --name nginx01 -p 3344:80 nginx 启动nginx
147503c0ce7cfbf399f4c1477d5484f4f12378196d1dbac64743e594a5a856cf
[root@localhost home]# docker ps 查看镜像
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
147503c0ce7c nginx "/docker-entrypoint.…" 58 seconds ago Up 55 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
[root@localhost home]# curl localhost:3344 访问当前端口如下成功
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@localhost home]# docker exec -it nginx01 /bin/bash 进入当前nginx容器内部
root@147503c0ce7c:/# whereis nginx 查看nginx的配置文件
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@147503c0ce7c:/# cd /etc/nginx
root@147503c0ce7c:/etc/nginx# ls
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
此时就可以通过流浪器访问了
端口暴露的概念
docker部署tomcat
# 官方使用 一般用来测试 用完自动删除
# docker run -it --rm tomcat:9.0
[root@localhost home]# docker run -it --rm tomcat:9.0
#下载自己的镜像
[root@localhost home]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
dbba69284b27: Pull complete
9baf437a1bad: Pull complete
6ade5c59e324: Pull complete
b19a994f6d4c: Pull complete
43c0aceedb57: Pull complete
24e7c71ec633: Pull complete
612cf131e488: Pull complete
dc655e69dd90: Pull complete
efe57b7441f6: Pull complete
8db51a0119f4: Pull complete
Digest: sha256:263f93ac29cb2dbba4275a4e647b448cb39a66334a6340b94da8bf13bde770aa
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
#运行tomcat
[root@localhost home]# docker run -d -p 3355:8080 --name tomcat01 tomcat
c1a3b65f2f7ef3312ab37991b68f87cb0f8dd3639da4565e3f1d07e8363fdc4f
#进入容器
[root@localhost home]# docker exec -it tomcat01 /bin/bash
root@c1a3b65f2f7e:/usr/local/tomcat# ls
BUILDING.txt NOTICE RUNNING.txt lib temp work
CONTRIBUTING.md README.md bin logs webapps
LICENSE RELEASE-NOTES conf native-jni-lib webapps.dist
此时访问报错404,是因为没有root,也就是没有webapps
#发现问题
# 1、linux命令少了
#2、没有webapps 阿里云镜像的原因。默认是最小的镜像,所有不必要的都剔除掉。保证最小可运行的环境!
root@c1a3b65f2f7e:~# cd /usr/local/tomcat 进入该目录查看
#拷贝webapps.dist
root@c1a3b65f2f7e:/usr/local/tomcat# cp -r webapps.dist/* webapps 此时就可以访问了
# http://192.168.88.113:3355/
部署es+kibana
#es 会暴露很多端口
#es 十分消耗内存
#es 的数据一般需要放置到安全目录!挂载
4.Git
版本控制
什么是版本控制
版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
- 实现跨区域多人协同开发
- 追踪和记载一个或者多个文件的历史记录
- 组织和保护你的源代码和文档
- 统计工作量
- 并行开发、提高开发效率
- 跟踪记录整个软件的开发过程
- 减轻开发人员的负担,节省时间,同时降低人为错误
简单说就是用于管理多人协同开发项目的技术。
没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。
无论是工作还是学习,或者是自己做笔记,都经历过这样一个阶段!我们就迫切需要一个版本控制工具!
多人开发就必须要使用版本控制!
常见的版本控制工具
我们学习的东西,一定是当下最流行的!
主流的版本控制器有如下这些:
- Git
- SVN(Subversion)
- CVS(Concurrent Versions System)
- VSS(Micorosoft Visual SourceSafe)
- TFS(Team Foundation Server)
- Visual Studio Online
版本控制产品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),现在影响力最大且使用最广泛的是Git与SVN
版本控制分类
1、本地版本控制
记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。
2、集中版本控制 SVN
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改
所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、CVS、VSS
3、分布式版本控制 Git
每个人都拥有全部的代码!安全隐患!
所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
不会因为服务器损坏或者网络问题,造成不能工作的情况!
Git与SVN的主要区别
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件!
Git是目前世界上最先进的分布式版本控制系统。
聊聊Git的历史
同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。
Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。
Linux社区中存在很多的大佬!破解研究 BitKeeper !
到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。(2周左右!) 也就是后来的 Git!
Git是目前世界上最先进的分布式版本控制系统。
Git是免费、开源的,最初Git是为辅助 Linux 内核开发的,来替代 BitKeeper!
Linux和Git之父李纳斯·托沃兹(Linus Benedic Torvalds)1969、芬兰
Git环境配置
软件下载
打开 [git官网] https://git-scm.com/,下载git对应操作系统的版本。
所有东西下载慢的话就可以去找镜像!
官网下载太慢,我们可以使用淘宝镜像下载:http://npm.taobao.org/mirrors/git-for-windows/
下载对应的版本即可安装!
安装:无脑下一步即可!安装完毕就可以使用了!
启动Git
安装成功后在开始菜单中会有Git项,菜单下有3个程序:任意文件夹下右键也可以看到对应的程序!
**Git Bash:**Unix与Linux风格的命令行,使用最多,推荐最多
**Git CMD:**Windows风格的命令行
Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令
常用的Linux命令
平时一定要多使用这些基础的命令!
1)、cd : 改变目录。
2)、cd . . 回退到上一个目录,直接cd进入默认目录
3)、pwd : 显示当前所在的目录路径。
4)、ls(ll): 都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。
5)、touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。
6)、rm: 删除一个文件, rm index.js 就会把index.js文件删除。
7)、mkdir: 新建一个目录,就是新建一个文件夹。
8)、rm -r : 删除一个文件夹, rm -r src 删除src目录
```
rm -rf / 切勿在Linux中尝试!删除电脑中全部文件!
```
9)、mv 移动文件, mv index.html src index.html 是我们要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下。
10)、reset 重新初始化终端/清屏。
11)、clear 清屏。
12)、history 查看命令历史。
13)、help 帮助。
14)、exit 退出。
15)、#表示注释
Git配置
所有的配置文件,其实都保存在本地!
查看配置 git config -l
查看不同级别的配置文件:
#查看系统configgit config --system --list
#查看当前用户(global)配置git config --global --list
Git相关的配置文件:
1)、Git\etc\gitconfig :Git 安装目录下的 gitconfig --system 系统级
2)、C:\Users\Administrator\ .gitconfig 只适用于当前登录用户的配置 --global 全局
这里可以直接编辑配置文件,通过命令设置后会响应到这里。
设置用户名与邮箱(用户标识,必要)
当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:
git config --global user.name "kuangshen" #名称git config --global user.email 24736743@qq.com #邮箱
只需要做一次这个设置,如果你传递了–global 选项,因为Git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要–global选项。总之–global为全局配置,不加为某个项目的特定配置。
Git基本理论(重要)
三个区域
Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
- Workspace:工作区,就是你平时存放项目代码的地方
- Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
- Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
- Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
本地的三个区域确切的说应该是git仓库中HEAD指向的版本:
- Directory:使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。
- WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。
- .git:存放Git管理信息的目录,初始化仓库的时候自动创建。
- Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。
- Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)。
- Stash:隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。
工作流程
git的工作流程一般是这样的:
1、在工作目录中添加、修改文件;
2、将需要进行版本管理的文件放入暂存区域;
3、将暂存区域的文件提交到git仓库。
因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
Git项目搭建
创建工作目录与常用指令
工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文。
日常使用只要记住下图6个命令:
本地仓库搭建
创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。
1、创建全新的仓库,需要用GIT管理的项目的根目录执行:
# 在当前目录新建一个Git代码库$ git init
2、执行后可以看到,仅仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面。
克隆远程仓库
1、另一种方式是克隆远程目录,由于是将远程服务器上的仓库完全镜像一份至本地!
# 克隆一个项目和它的整个代码历史(版本信息)$ git clone [url] # https://gitee.com/kuangstudy/openclass.git
2、去 gitee 或者 github 上克隆一个测试!
Git文件操作
文件的四种状态
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
- Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
- Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
- Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
- Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
查看文件状态
上面说文件有4种状态,通过如下命令可以查看到文件的状态:
#查看指定文件状态git status [filename]
#查看所有文件状态git status
# git add . 添加所有文件到暂存区# git commit -m "消息内容" 提交暂存区中的内容到本地仓库 -m 提交信息
忽略文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
在主目录下建立".gitignore"文件,此文件有如下规则:
- 忽略文件中的空行或以井号(#)开始的行将会被忽略。
- 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
- 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
- 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
- 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
#为注释*.txt #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!!lib.txt
#但lib.txt除外/temp
#仅忽略项目根目录下的TODO文件,不包括其它目录tempbuild/
#忽略build/目录下的所有文件doc/*.txt
#会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
配置idea提交忽略
*.class
*.log
*.lock
# Package Files #
*.jar
*.war
*.ear
target/
# idea
.idea/
*.iml/
*velocity.log*
### STS ###
.apt_generated
.factorypath
.springBeans
### IntelliJ IDEA ###
*.iml
*.ipr
*.iws
.idea
.classpath
.project
.settings/
bin/
*.log
tem/
#rebel
*rebel.xml*
使用码云
github 是有墙的,比较慢,在国内的话,我们一般使用 gitee ,公司中有时候会搭建自己的gitlab服务器
这个其实可以作为大家未来找工作的一个重要信息!
1、注册登录码云,完善个人信息
2、设置本机绑定SSH公钥,实现免密码登录!(免密码登录,这一步挺重要的,码云是远程仓库,我们是平时工作在本地仓库!)
# 进入 C:\Users\Administrator\.ssh 目录# 生成公钥ssh-keygen
3、将公钥信息public key 添加到码云账户中即可!
4、使用码云创建一个自己的仓库!
许可证:开源是否可以随意转载,开源但是不能商业使用,不能转载,… 限制!
克隆到本地!
IDEA中集成Git
1、新建项目,绑定git。
注意观察idea中的变化
2、修改文件,使用IDEA操作git。
- 添加到暂存区
- commit 提交
- push到远程仓库
3、提交测试
说明:GIT分支
分支在GIT中相对较难,分支就是科幻电影里面的平行宇宙,如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,我们就需要处理一些问题了!
git分支中常用指令:
# 列出所有本地分支git branch
# 列出所有远程分支git branch -r
# 新建一个分支,但依然停留在当前分支git branch [branch-name]
# 新建一个分支,并切换到该分支git checkout -b [branch]
# 合并指定分支到当前分支$ git merge [branch]
# 删除分支$ git branch -d [branch-name]
# 删除远程分支$ git push origin --delete [branch-name]$ git branch -dr [remote/branch]
IDEA中操作
添加成员
(https://gitee.com/help/articles/4176)
用户可以通过 仓库主页->「管理」->「仓库设置」->「仓库成员管理」->「添加仓库成员」 添加成员到仓库内进行协作。
目前添加成员有三种方式: 链接邀请 、 直接添加 、 通过仓库邀请成员
/ 仓库管理
/ 仓库成员管理
/ 帮助详情
添加成员
用户可以通过 仓库主页->「管理」->「仓库设置」->「仓库成员管理」->「添加仓库成员」 添加成员到仓库内进行协作。
目前添加成员有三种方式: 链接邀请 、 直接添加 、 通过仓库邀请成员
通过链接邀请成员
用户通过选择加入成员的角色,生成不同的邀请链接,可以通过QQ/二维码等方式分享给其他人,进而邀请用户加入仓库。同时,通过勾选「需要管理员审核」选项,在成员确认之后,管理员可以再次审核。
直接添加成员
用户选择角色后,搜索添加 Gitee 用户个性地址或邮箱邀请加入仓库。邀请用户后,受邀方接受邀请后将直接加入仓库。
若邀请的用户为非 Gitee 站内用户,则系统将发送邀请链接至目标邮箱,链接有效期为 3 天。
通过仓库邀请成员
用户可以通过搜索当前账号已参与的仓库。邀请其他仓库内的用户进入仓库。
linux安装nginx
先使用whereis nginx查看本机是否已安装nginx 如果有卸载
官网下载安装包nginx-1.20.2.tar.gz,然后使用filezilla工具放入/home/java里面
然后使用tar -zxvh nginx-1.20.2.tar.gz加压就可以了,然后进入cd nginx-1.20.2/目录 使用ll或者ls
然后执行./configure让其自动配置
如果报错:make: *** 没有规则可以创建“default”需要的目标“build”。 停止
错误原因:
这是因为安装nginx 编译时缺少一些依赖造成的
解决办法:安装依赖
yum -y install gcc openssl openssl-devel pcre-devel zlib zlib-devel
再次执行 启动命令: ./configure
编译:
make
make install
启动nginx: ./nginx
5.防火墙
# 查看firewall服务状态
systemctl status firewalld
# 开启
service firewalld start systemctl start firewalld.service
# 重启
service firewalld restart
# 关闭
service firewalld stop systemctl stop firewalld.service
# 查看防火墙规则
firewall-cmd --list-all
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8847/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
# 参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;
--开放8080端口
firewall-cmd --zone=public --add-port=8888/tcp --permanent
--重启防火墙
firewall-cmd --reload
6.如何进行分层
1、阿里规范
在阿里的编码规范中约束的分层如下:
开放接口层:可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 http 接口;进行 网关安全控制、流量控制等。
终端显示层:各个端的模板渲染并执行显示的层。当前主要是 velocity 渲染,JS 渲染, JSP 渲染,移动端展示等。
Web 层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。
Service 层:相对具体的业务逻辑服务层。
Manager 层:通用业务处理层,它有如下特征:1. 对第三方平台封装的层,预处理返回结果及转化异常信息;2. 对Service层通用能力的下沉,如缓存方案、中间件通用处理;3. 与DAO层交互,对多个DAO的组合复用。
DAO 层:数据访问层,与底层 MySQL、Oracle、Hbase 进行数据交互。
阿里巴巴规约中的分层比较清晰简单明了,但是描述得还是过于简单了,以及service层和manager层有很多同学还是有点分不清楚之间的关系,就导致了很多项目中根本没有Manager层的存在。下面介绍一下具体业务中应该如何实现分层。
2、优化分层
从我们的业务开发中总结了一个较为的理想模型,这里要先说明一下由于我们的rpc框架选用的是thrift可能会比其他的一些rpc框架例如dubbo会多出一层,作用和controller层类似
最上层controller和TService是我们阿里分层规范里面的第一层:轻业务逻辑,参数校验,异常兜底。通常这种接口可以轻易更换接口类型,所以业务逻辑必须要轻,甚至不做具体逻辑。
Service:业务层,复用性较低,这里推荐每一个controller方法都得对应一个service,不要把业务编排放在controller中去做,为什么呢?如果我们把业务编排放在controller层去做的话,如果以后我们要接入thrift,我们这里又需要把业务编排在做一次,这样会导致我们每接入一个入口层这个代码都得重新复制一份如下图所示:
这样大量的重复工作必定会导致我们开发效率下降,所以我们需要把业务编排逻辑都得放进service中去做:
Mannager:可复用逻辑层。这里的Mannager可以是单个服务的,比如我们的cache,mq等等,当然也可以是复合的,当你需要调用多个Mannager的时候,这个可以合为一个Mannager,比如逻辑上的连表查询等。如果是httpMannager或rpcMannager需要在这一层做一些数据转换
DAO:数据库访问层。主要负责“操作数据库的某张表,映射到某个java对象”,dao应该只允许自己的Service访问,其他Service要访问我的数据必须通过对应的Service。
分层领域模型的转换
在阿里巴巴编码规约中列举了下面几个领域模型规约:
- DO(Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。
- DTO(Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。
- BO(Business Object):业务对象。由Service层输出的封装业务逻辑的对象。
- AO(Application Object):应用对象。在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。
- VO(View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。
- Query:数据查询对象,各层接收上层的查询请求。注意超过2个参数的查询封装,禁止使用Map类来传输。
层次 | 领域模型 |
---|---|
Controller/TService | VO/DTO |
Service/Manager | AO/BO |
DAO | DO |
每一个层基本都自己对应的领域模型,这样就导致了有些人过于追求每一层都是用自己的领域模型,这样就导致了一个对象可能会出现3次甚至4次转换在一次请求中,当返回的时候同样也会出现3-4次转换,这样有可能一次完整的请求-返回会出现很多次对象转换。如果在开发中真的按照这么来,恐怕就别写其他的了,一天就光写这个重复无用的逻辑算了吧。
所以我们得采取一个折中的方案:
1、允许Service/Manager可以操作数据领域模型,对于这个层级来说,本来自己做的工作也是做的是业务逻辑处理和数据组装。
2、Controller/TService层的领域模型不允许传入DAO层,这样就不符合职责划分了。
3、同理,不允许DAO层的数据传入到Controller/TService。
总结
总的来说业务分层对于代码规范是比较重要,决定着以后的代码是否可复用,是否职责清晰,边界清晰。
当然这种分层其实见仁见智, 团队中的所有人的分层习惯也不同,所以很难权衡出一个标准的准则,总的来说只要满足职责逻辑清晰,后续维护容易,就是好的分层。
7.jenkins部署
1、虚拟机安装gitlab
1.安装相关依赖
yum -y install policycoreutils openssh-serve openssh-clients postfix
2.启动ssh服务&设置为开机启动
systemctl enable sshd && sudo systemctl start sshd
#查看是否开启ssh服务
systemctl status sshd
关闭ssh
systemctl stop sshd.service
systemctl start sshd.service
3.设置postfix开机自启,并启动,postfix支持gitlab发信功能
# systemctl enable postfix && systemctl start postfix
# systemctl status sshd 查看ssh开启转态
# systemctl status firewalld 查看防火墙状态
4.开放ssh以及http服务,然后重新加载防火墙列表
# firewall-cmd --add-service=ssh --permanent
# firewall-cmd --add-service=http --permanent
# firewall-cmd --reload
#如果关闭防火墙不需要做以上配置
5.下载gitlab包
下载地址:https://packages.gitlab.com/gitlab/gitlab-ce
可直接在虚拟机通过命令下载
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh|bash
6.下载完成后进行安装
yum install gitlab-ce
7.修改gitlab配置
vi /etc/gitlab/gitlab.rb
小白看这里,输入i 可进行编辑
7.修改gitlab访问地址和端口,默认为80,我们可改为82
external_url 'http://192.168.100.23:82'
nignx['listen_port']=82
小白看这里,按键盘Esc键后,输入:wq进行保存
8.重新配置及启动gitlab
gitlab-ctl reconfigure
可能需要等5分钟左右,再输入下个命令
gitlab-ctl restart
9.把端口添加到防火墙
firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --reload
2、CentOS7修改静态IP,重启网络报错:
Restarting network (via systemctl): Job for network.service failed because the control process exited with error code. See “systemctl status network.service” and “journalctl -xe” for details.
[失败]
1、查看ens33网卡的配置: vi /etc/sysconfig/network-scripts/ifcfg-ens33 注意vi后面加空格
2、网络重启:# service network restart
在终端输入:
[root@localhost ~]#systemctl status network.service 或者journalctl -xe
[root@localhost ~]# cd /etc/sysconfig/network-scripts
-rw-r--r--. 1 root root 403 6月 7 15:10 ifcfg-ens33
-rw-r--r--. 1 root root 1 6月 7 14:49 ifcfg-eth0
-rw-r--r--. 1 root root 254 5月 22 2020 ifcfg-lo
lrwxrwxrwx. 1 root root 24 3月 18 15:50 ifdown -> ../../../usr/sbin/ifdown
root@localhost network-scripts]# rm -rf ifcfg-eth0
[root@localhost network-scripts]# ls
ifcfg-ens33 ifdown-isdn ifup ifup-plip ifup-tunnel
ifcfg-lo ifdown-post ifup-aliases ifup-plusb ifup-wireless
如果出现一下问题:未知的名称或服务
使用该命令:systemctl start network.service
[root@localhost ~]# ping www.baidu.com
ping: www.baidu.com: 未知的名称或服务
[root@localhost ~]# systemctl start network.service
[root@localhost ~]# ping 192.168.137.21
PING 192.168.137.21 (192.168.137.21) 56(84) bytes of data.
64 bytes from 192.168.137.21: icmp_seq=1 ttl=64 time=0.039 ms
64 bytes from 192.168.137.21: icmp_seq=2 ttl=64 time=0.084 ms
64 bytes from 192.168.137.21: icmp_seq=3 ttl=64 time=0.062 ms
64 bytes from 192.168.137.21: icmp_seq=4 ttl=64 time=0.085 ms
64 bytes from 192.168.137.21: icmp_seq=5 ttl=64 time=0.043 ms
配置静态ip(虚拟机重启不会更改ip)
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=19a62e4a-775b-466e-b44f-50b618b9ae18
DEVICE=ens33
ONBOOT=yes
IPADDR="192.168.137.19"
NETMASK="255.255.255.0"
GATEWAY="192.168.137.2"
DNS1="9.9.9.9"
NM_CONTROLLED="no"
IPADDR="192.168.137.20"
NETMASK="255.255.255.0"
GATEWAY="192.168.137.2"
DNS1="9.9.9.9"
NM_CONTROLLED="no"
IPADDR="192.168.137.21"
NETMASK="255.255.255.0"
GATEWAY="192.168.137.2"
DNS1="9.9.9.9"
NM_CONTROLLED="no"
记录一次Vmware虚拟机设置静态IP地址 Vmnet8 Net模式设置无法访问www.baidu.com问题
首先Vmnet8 ip4地址要与虚拟机一样,同时要设置共享。
3、注意
Centos6中,生产环境下 我们一般都是手动配置网络,以静态地址为主不需要系统的网络管理工具,往往会出现在KDE环境中,因此,我们就会将它禁用掉,命令:
#/etc/init.d/NetworkManager stop 此命令只能临时关闭而不是永久关闭;
永久关闭,则用命令:
# chkconfig NetworkManager off 用来永久关闭,生产环境常禁用状态
Centos7版本中关闭NetworkManager命令是与6版本的关闭命令还是有很多区别的,关闭命令为:
# systemctl stop NetworkManager 临时关闭
# systemctl disable NetworkManager 永久关闭网络管理命令
4、安装gtilab
- 安装相关依赖
# yum -y install policycoreutils openssh-server openssh-clients postfifix
- 启动ssh服务&设置为开机启动
# systemctl enable sshd && sudo systemctl start sshd
- 设置postfifix开机自启,并启动,postfifix支持gitlab发信功能
# systemctl enable postfifix && systemctl start postfifix
- 开放ssh以及http服务,然后重新加载防火墙列表
# firewall-cmd --add-service=ssh --permanent
# firewall-cmd --add-service=http --permanent
# firewall-cmd --reload
如果关闭防火墙就不需要做以上配置
本地无,在线下载安装包:
# wget http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-14.5.3-ce.0.el7.x86_64.rpm
错误: 无法验证 mirrors.tuna.tsinghua.edu.cn 的由 “/C=US/O=Let's Encrypt/CN=R3” 颁发的证书:
颁发的证书已经过期。
要以不安全的方式连接至 mirrors.tuna.tsinghua.edu.cn,使用“--no-check-certificate”。
wget http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-15.8.3-ce.0.el7.x86_64.rpm
rpm -ivh gitlab-ce-15.8.3-ce.0.el7.x86_64.rpm
删除:
sudo rpm -e gitlab-ce
安装:
# rpm -ivh gitlab-ce-14.5.3-ce.0.el7.x86_64.rpm
本地已下载好,那就直接安装:
# rpm -i gitlab-ce-14.9.5-ce.0.el7.x86_64.rpm
It looks like GitLab has not been configured yet; skipping the upgrade script.
*. *.
*** ***
***** *****
.****** *******
******** ********
,,,,,,,,,***********,,,,,,,,,
,,,,,,,,,,,*********,,,,,,,,,,,
.,,,,,,,,,,,*******,,,,,,,,,,,,
,,,,,,,,,*****,,,,,,,,,.
,,,,,,,****,,,,,,
.,,,***,,,,
,*,.
_______ __ __ __
/ ____(_) /_/ / ____ _/ /_
/ / __/ / __/ / / __ `/ __ \
/ /_/ / / /_/ /___/ /_/ / /_/ /
\____/_/\__/_____/\__,_/_.___/
- 修改gitlab配置
# vi /etc/gitlab/gitlab.rb
修改gitlab访问地址和端口,默认为80,我们改为82
# external_url 'http://192.168.137.20:82'
# nginx['listen_port'] = 82
- 重载配置及启动gitlab
# gitlab-ctl reconfifigure sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
# gitlab-ctl restart
- 把端口添加到防火墙
# firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --zone=public --add-port=8888/tcp --permanent
sudo apt-get --purge remove gitlab-ce
sudo: apt-get:找不到命令
# firewall-cmd --reload
9.查看gitlab版本
# gitlab-runner --version
启动gitlab服务
# sudo gitlab-ctl start
gitlab服务停止
# sudo gitlab-ctl stop
重启gitlab服务
# sudo gitlab-ctl restart
gitlab-ctl reconfigure 重新应用 gitlab 的配置
gitlab-ctl status 查看 gitlab 运行状态
gitlab-ctl tail 查看 gitlab 运行日志
10.浏览器输入http://192.168.137.20:82,前期会报502,稍等一哈
http://192.168.137.20:82/users/sign_in 进入登录界面
11.安装初始化后,默认账户名是root,密码存放在配置文件,以及修改管理员密码,密码必须八位
直接查密码
# vi /etc/gitlab/initial_root_password
密码:
/hNQ/gHnYlRgjTnZluG6J19q9YWJMaXV3EFzO46Sg14=
更改密码
[root@root bin]# gitlab-rails console -e production
--------------------------------------------------------------------------------
Ruby: ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-linux]
GitLab: 14.5.3 (d30fc7288a2) FOSS
GitLab Shell: 13.22.1
PostgreSQL: 12.7
--------------------------------------------------------------------------------
Loading production environment (Rails 6.1.4.1)
irb(main):001:0>
irb(main):002:0>
irb(main):003:0> user = User.where(username:"root").first //查找root用户
=> #<User id:1 @root>
irb(main):004:0> user.password = "123456789"
=> "123456789"
irb(main):005:0> user.password_confirmation ="123456789"
=> "123456789"
irb(main):006:0> user.save!
=> true
irb(main):010:0> exit
5、持续集成环境enkins安装
1)安装JDK
Jenkins需要依赖JDK,所以先安装JDK1.8
yum install java-1.8.0-openjdk* -y
安装目录为:/usr/lib/jvm
2)获取jenkins安装包
下载页面:https://jenkins.io/zh/download/
安装文件:jenkins-2.190.3-1.1.noarch.rpm
3)把安装包上传到192.168.66.101服务器,进行安装
rpm -ivh jenkins-2.375.4-1.1.noarch.rpm
wget http://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.375.4-1.1.noarch.rpm
4)修改Jenkins配置
cd /etc/sysconfig
vi /etc/sysconfig/jenkins
修改内容如下:
JENKINS_USER="root"
JENKINS_PORT="8080"
5)启动Jenkins
# systemctl start jenkins
systemctl restart jenkins
systemctl stop jenkins
# systemctl status jenkins
卸载:
rpm -e jenkins
rpm -ql jenkins
find / -iname jenkins | xargs -n 1000 rm -rf
yum clean all
yum -y remove jenkins
ssh 192.168.137.20
删除构建历史:
def jobName = "xx_项目"
def maxNumber = 100
Jenkins.instance.getItemByFullName(jobName).builds.findAll {
it.number <= maxNumber
}.each {
it.delete()
}
6)打开浏览器访问
http://192.168.137.21:8080注意:本服务器把防火墙关闭了,如果开启防火墙,需要在防火墙添加端口
firewall-cmd --permanent --zone=public --add-port=8080/tcp
7)获取并输入admin账户密码
# cat /var/lib/jenkins/secrets/initialAdminPassword
3255cab24e874da8afc3dfde950cf87f
8)跳过插件安装
因为Jenkins插件需要连接默认官网下载,速度非常慢,而且经过会失败,所以我们暂时先跳过插件安
装
9.打开jenkins有报错
**There were errors checking the update sites: SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target**
解决办法:修改Advanced里面Update Site的URL
把https://updates.jenkins.io/update-center.json
修改为:http://updates.jenkins.io/update-center.json
cd /var/lib/jenkins/updates
sed -i 's/http:\/\/updates.jenkins ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/https:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
sed -i "s#https://updates.jenkins.io/update-center.json#https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json#g" /var/lib/jenkins/hudson.model.UpdateCenter.xml
sed -i "s#https://updates.jenkins.io/update-center.json#https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json#g" /var/lib/jenkins/hudson.model.UpdateCenter.xml
最后,Manage Plugins点击Advanced,把Update Site改为国内插件下载地址
http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
页面有如下提示:
You are running Jenkins on Java 1.8, support for which will end on or after June 21, 2022. This is earlier than a previously announced date.
The Long Term Support (LTS) line of Jenkins will continue support till September 2022.
Please refer to the documentation for details on upgrading to Java 11.
您正在Java 1.8上运行Jenkins,对其的支持将在2022年6月21日或之后结束。这比之前宣布的日期要早。
Jenkins的长期支持(LTS)线将持续支持到2022年9月。
有关升级到Java 11的详细信息,请参阅文档。
Building on the built-in node can be a security issue. You should set up distributed builds. See [the documentation](https://www.jenkins.io/redirect/building-on-controller/).
在内置节点上构建可能会造成安全问题。您应该设置分布式构建。见文档。
10.gitlab生成公钥私钥(jenkins和gitlab两个服务器都可以)
[root@root ~]# ssh-keygen -t rsa
[root@root ~]# cd /root/.ssh
[root@root .ssh]# ll
总用量 8
-rw-------. 1 root root 1679 6月 29 11:09 id_rsa
-rw-r--r--. 1 root root 403 6月 29 11:09 id_rsa.pub
[root@root .ssh]# cat id_rsa.pub 放入gitlab SSH 公钥
[root@root .ssh]# cat id_rsa 放入Jenkins
cat /var/lib/jenkins/.sshid_rsa.pub
rpm -ivh https://repo.ius.io/ius-release-el7.rpm
删除已有的git
安装自己想要的版本git:
yum remove git
安装下载
cd /opt/data/git/
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.39.3.tar.xz
tar -xvJf git-2.39.3.tar.xz
tar -zxvf git-2.35.4.tar.gz
wget: 无法解析主机地址 “mirrors.edge.kernel.org”
make prefix=/opt/data/git/git-2.39.3/ all
make prefix=/opt/data/git/git-2.39.3/ install
[root@root git]# make prefix=/opt/data/jenkins/git/git-2.35.4/ install make: *** 没有规则可以创建目标“install”
make 没有找到Makefile这个文件。我们解压了Git以后该文件夹就会有这个Makefile文件(如下图),但是我之前没有进入这个目录路径,所以一直执行都报错.
[root@root git]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
进入以后在执行以上make:
cd /opt/data/git/git-2.35.4 再次执行不报错
vim /etc/profile
# GIT_HOME
GIT_HOME=/opt/data/git/git-2.35.4/bin/git
PATH=$PATH:$GIT_HOME/bin
使配置生效
source /etc/profile
git ls-remote -h git@192.168.137.20:gitlab_group/web_demo.git HEAD
http://root:123456789@git.192.168.137.20:gitlab_group/web_demo.git
问题:
Jenkins中连接Git仓库时提示:无法连接仓库:Error performing git command: git ls-remote -h
首先确定下在Jenkins服务器上已经安装了Git。
可以通过
git --version
来确定是否已经成功安装。
然后再通过
which git
来查看git的目录,并将其复制出来
然后找到Jenkins下的系统管理-全局工具配置-Git
将上面复制的git的路径放在Path to Git executable中
11、持续集成环境maven、tomcat安装和配置
安装maven
[root@root ~]# systemctl start jenkins systemctl stop jenkins
[root@root ~]# cd /var/lib/jenkins/workspace
[root@root ~]# mkdir -p /opt/maven
[root@root ~]# cd /opt/maven
[root@root maven]# vi /etc/profile
[root@root maven]# source /etc/profile
重命名用 mv
[root@root maven]# chmod a+x /opt/maven/bin/mvn chmod a+x /opt/maven/apache-maven-3.8.8/bin/mvn
[root@root maven]# mvn -v
Apache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bcf0d9e117; 2019-08-27T23:06:16+08:00)
Maven home: /opt/maven
安装tomcat
[root@root ~]# mkdir -p /opt/tomcat
[root@root ~]# cd /home/java
[root@root java]# tar -xzf apache-tomcat-8.5.77.tar.gz
[root@root java]# mv apache-tomcat-8.5.77/* /opt/tomcat
[root@root java]# cd
[root@root ~]# vi /opt/tomcat/conf/server.xml
[root@root ~]# /opt/tomcat/bin/startup.sh
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /usr/lib/jvm/java-1.8.0-openjdk
Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@root ~]# firewall-cmd --list-all
[root@root ~]# firewall-cmd --zone=public --add-port=8089/tcp --permanent
[root@root ~]# firewall-cmd --reload
[root@root ~]# vi /opt/tomcat/conf/tomcat-users.xml
[root@root ~]# /opt/tomcat/bin/shutdown.sh
[root@root ~]# vi /opt/tomcat/webapps/manager/META-INF/context.xml
export JAVA_HOME=/usr/java/jdk-11.0.17
export CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$GIT_HOME/bin:$MAVEN_HOME/bin
export GIT_HOME=/opt/data/jenkins/git/git-2.35.4
export MAVEN_HOME=/opt/maven/apache-maven-4.0.0
export PATH CLASSPATH JAVA_HOME GIT_HOME MAVEN_HOME
8.zookeeper安装
下载安装包并解压192.168.137.19
进入root权限: su root
root@root zookeeper]# tar -zxvf apache-zookeeper-3.8.0.tar.gz #解压安装
# 下载
$ wget https://downloads.apache.org/zookeeper/apache-zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz
$ tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz
$ cd apache-zookeeper-3.8.0-bin
# 配置
$ cp conf/zoo_sample.cfg conf/zoo.cfg
cp bin/startup.cmd bin/startup_ex.cmd
#新建一个文件夹在apache-zookeeper-3.8.0目录下
mkdir zkdata
# 编辑配置文件,下面介绍
$ vi conf/zoo.cfg
修改 dataDir=/home/zookeeper/apache-zookeeper-3.8.0/zkdata //自己创建的zkdata目录
# 启动服务端
$ bin/zkServer.sh start
# 查看状态
$ bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/apache-zookeeper-3.8.0/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone
# 停止
$ bin/zkServer.sh stop
# 重启
$ bin/zkServer.sh restart
# 用 jps 查看状态
$ jps
46193 QuorumPeerMain
#客户端启动
[root@root apache-zookeeper-3.8.0]# bin/zkCli.sh
zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /
[services, zookeeper]
[zk: localhost:2181(CONNECTED) 2] ls /
[services, zookeeper]
[zk: localhost:2181(CONNECTED) 3] ls /services
ZOOKEEPER_HOME=/home/zookeeper/apache-zookeeper-3.8.0
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf
使用命令zkServer.sh status查看zookeeper各节点状态的时候出现
Error contacting service. It is probably not running.的错误
删除dataDir目录下的zookeeper_server.pid文件然后重启zk
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss
systemctl status firewalld
service firewalld stop
9.consul学习
1.consul安装
下载解压即可
- 查看版本
- 开发模式启动
cmd进入consul目录:
consul -v
consul agent -dev
http://localhost:8500/
三个注册中心的区别:
10.Sleuth学习
1.下载zipkin,运行jar,打开cmd:D:\zipkin>java -jar zipkin-server-2.23.9-exec.jar
11.linux安装mysql
rpm -qa |grep mariadb #查看LUNIX下同下是否存在默认的数据库 rpm -qa |grep -i mysql
mariadb-libs-5.5.68-1.el7.x86_64
[roots@root ~]$ yum remove mariadb-libs-5.5.68-1.el7.x86_64 #删除默认的低版本的数据库
已加载插件:fastestmirror, langpacks
您需要 root 权限执行此命令。
[roots@root ~]$ su root
密码:
[root@root roots]# yum remove mariadb-libs-5.5.68-1.el7.x86_64
[root@root roots]# 命令 : wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz # 下载地址
命令 : xz -d mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
#将.xz压缩包解压为.tar
命令 : tar xf mysql-8.0.19-linux-glibc2.12-x86_64.tar
#将.tar压缩包解压为文件夹
命令 : mv mysql-8.0.19-linux-glibc2.12-x86_64 /home/mysql/
#移动至安装目录,这里是 /usr/local/mysql
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz
xz -d mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz
4.解压mysql
[root@root ~]# xz -d mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
tar xf mysql-8.0.19-linux-glibc2.12-x86_64.tar
mv mysql-8.0.19-linux-glibc2.12-x86_64 /usr/local
5.重命名文件夹
mv mysql-8.0.19-linux-glibc2.12-x86_64 mysql-8.0.19
6.创建data文件夹 存储文件
[root@root ~]# cd /usr/local/
[root@root local]# cd mysql-8.0.19/
[root@root mysql-8.0.19]# mkdir data
__________________________
[root@root bin]# cd /usr/local/
[root@root local]# pwd
/usr/local
[root@root local]# mkdir mysql
[root@root local]# cd mysql
[root@root mysql]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
[root@root mysql]# ls
mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
[root@root mysql]# tar -xvJf mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz #解压.tar.xz
[root@root mysql]# mv mysql-8.0.19-linux-glibc2.12-x86_64 mysql8.0 #重命名
[root@root mysql]# ls
mysql8.0 mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
7.创建用户组以及用户和密码
[root@root mysql8.0]# groupadd mysql
[root@root mysql8.0]# useradd -g mysql mysql
8.授权用户
[root@root mysql8.0]# chown -R mysql.mysql /usr/local/mysql/mysql8.0/
[root@root mysql8.0]# ls
bin data docs include lib LICENSE man README share support-files
[root@root mysql8.0]# cd bin
[root@root bin]# ls
comp_err my_print_defaults mysqld-debug mysqlshow
ibd2sdi mysql mysqld_multi mysqlslap
innochecksum mysqladmin mysqld_safe mysql_ssl_rsa_setup
lz4_decompress mysqlbinlog mysqldump mysql_tzinfo_to_sql
myisamchk mysqlcheck mysqldumpslow mysql_upgrade
myisam_ftdump mysql_config mysqlimport perror
myisamlog mysql_config_editor mysqlpump zlib_decompress
myisampack mysqld mysql_secure_installation
[root@root bin]# ./mysqld --user=mysql --basedir=/usr/local/mysql/mysql8.0/ --datadir=/usr/local/mysql/mysql8.0/data/ --initialize
2023-02-15T07:03:34.223210Z 0 [System] [MY-013169] [Server] /usr/local/mysql/mysql8.0/bin/mysqld (mysqld 8.0.19) initializing of server in progress as process 22981
2023-02-15T07:03:36.901787Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: UHh*+GRk6uo!
[root@root mysql8.0]# cp -a ./support-files/mysql.server /etc/init.d/mysql #拷贝启动目录下的启动脚本至/etc/init.d下
[root@root mysql8.0]# chmod +x /etc/init.d/mysql #赋予可执行权限
[root@root mysql8.0]# chkconfig --add mysql #将MySQL添加为受chkconfig管理的服务
[root@root mysql8.0]# vim /etc/my.cnf #修改配置
在my.cnf中添加如下内容:
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/usr/local/mysql/mysql8.0
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/mysql8.0/data
# 允许最大连接数
max_connections=200
#允许连接失败的次数。防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
## 为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(Linux下默认是/var/lib/mysql/mysql.sock文件)
socket= /tmp/mysql.sock
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
[root@root mysql8.0]# vim /etc/profile #修改配置
export PATH=$PATH:/usr/local/mysql/mysql8.0/bin
[root@root mysql8.0]# source /etc/profile #配置生效
[root@root mysql8.0]# echo $PATH #查看配置
[root@root mysql8.0]# ln -s /usr/local/mysql/mysql8.0/bin/mysql /usr/bin
[root@root mysql8.0]# service mysql start #启动mysql
Starting MySQL.Logging to '/usr/local/mysql/mysql8.0/data/root.localdomain.err'.
. SUCCESS!
[root@root mysql8.0]# service mysql status #查看mysql状态
SUCCESS! MySQL running (25126)
[root@root mysql8.0]# mysql -uroot -p #登录mysql
Enter password: UHh*+GRk6uo!
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.01 sec) #修改用户密码
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
#远程登录设置
mysql> use mysql
Database changed
mysql> update user set host='%' where user = 'root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
12.linux安装nginx
官网下载nginx
http://nginx.org/
root@root ~]# cd /home/nginx
[root@root nginx]# ll
[root@root nginx]# tar -zxvf nginx-1.23.3.tar.gz #解压
[root@root nginx-1.23.3]# ./configure #进入解压目录,执行 ./configure
checking for OS
[root@root nginx-1.23.3]# make && make install
make: *** 没有规则可以创建“default”需要的目标“build”。 停止。
[root@root nginx-1.23.3]# yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
再次执行 #-y作用就是不用提示yes或No
[root@root nginx-1.23.3]# ./configure
[root@root nginx-1.23.3]# make && make install
安装完成后,在usr文件夹下会多出来一个文件夹local/nginx,在nginx中有sbin有启动脚本
启动nginx
进入nginx/conf下,查看端口号, 使用命令 vi nginx.conf
[root@root conf]# vi nginx.conf #修改端口号8080
[root@root conf]# cd /usr/local/nginx/sbin #进入nginx/sbin下,
[root@root sbin]# ./nginx 使用 ./nginx 命令启动,可以使用 ps -ef | grep nginx 查看当前进程
- 查看开放的端口号,因为默认情况下没有开放8080端口
- 使用命令 firewall-cmd --list-all
- 设置开放的端口号 firewall-cmd --add-serive=http -permanent
- 重启防火墙 firewall -cmd --reload
[root@root sbin]# ./nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
[root@root sbin]# nginx -s stop
bash: nginx: 未找到命令...
[root@root sbin]# ./nginx -s stop
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory) #没有nginx.pid文件 新建一个
新建以后报错如下:
[root@root sbin]# ./nginx -s stop
nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"
[root@root sbin]# ps -ef | grep nginx
root 13686 1 0 11:05 ? 00:00:00 nginx: master process ./nginx
nobody 13688 13686 0 11:05 ? 00:00:00 nginx: worker process
root 17609 13621 0 11:15 pts/2 00:00:00 grep --color=auto nginx
[root@root sbin]# echo 13686 > /usr/local/nginx/logs/nginx.pid 根据pid 加载一下就可以了
[root@root sbin]# ./nginx -s stop #停止
[root@root sbin]#
nginx集群
12.nginx深入学习
./nginx#启动
./nginx -s stop #停止
./nginx -s quit #优雅关闭,再退出前完成已经接受的连接请求
./nginx -s reload #重新加载配置
#user nobody;
worker_processes 1;#工作进程数
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {#事件驱动
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;#保持连接超时的时间
#gzip on;
server {#虚拟主机
listen 8080;#监听端口号
server_name localhost;#主机名:127.0.0.1、域名xxx.com
#charset koi8-r;
#access_log logs/host.access.log main;
location / {#子路径默认页url.http:xxx.com/xxoo/index.html
root html;#根目录
index index.html index.htm;#
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
1.Nginx运行图:

2.浏览器、nginx与http协议:
3.nginx虚拟主机原理:
在hosts配置虚拟主机域名:192.168.137.19 ngins.com
然后保证ping 192.168.137.19 是通的,那么ngins.com就可以正常访问了
创建几个文件夹
[root@root usr]# mkdir www
[root@root usr]# mkdir vod
[root@root usr]# cd vod
[root@root vod]# vim index.html #创建一个index
#注意root路径要配置正确,以及文件目录下要有.html,.php的文件,否则会报错403
server {
listen 80;
server_name localhost;
location / {
#root html;
root /usr/www/;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 88;
server_name localhost;
location / {
#root html;
root /usr/vod/;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
换虚拟域名访问:
server {
listen 80;
server_name ngins.com;#先在hosts文件配置
location / {
#root html;
root /usr/www/;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name v.ngins.com;#先在hosts文件配置
location / {
#root html;
root /usr/vod/;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
4.servername的多种匹配方式:
完整匹配:
server中可以配置多个域名,例如:
server_name test81.xzj520520.cn test82.xzj520520.cn;
通配符匹配:使用通配符的方式如下:
server_name *.xzj520520.cn;
通配符结束匹配:使用通配符结束匹配的方式如下:
server_name www.xzj520520.*;
正则匹配:正则匹配格式,必须以~开头,比如:server_name ~^www\d+\.example\.net$;。如果开头没有~,则nginx认为是精确匹配。在逻辑上,需要添加^和$锚定符号。注意,正则匹配格式中.为正则元字符,如果需要匹配.,则需要反斜线转义。如果正则匹配中含有{和}则需要双引号引用起来,避免nginx报错,如果没有加双引号,则nginx会报如下错误:directive "server_name" is not terminated by ";" in ...。
特殊匹配格式:
server_name ""; 匹配Host请求头不存在的情况。
匹配顺序:
1. 精确的名字
2. 以*号开头的最长通配符名称,例如 *.example.org
3. 以*号结尾的最长通配符名称,例如 mail.*
4. 第一个匹配的正则表达式(在配置文件中出现的顺序)
优化:
1. 尽量使用精确匹配;
2. 当定义大量server_name时或特别长的server_name时,需要在http级别调整server_names_hash_max_size和server_names_hash_bucket_size,否则nginx将无法启动。
5.基于域名的互联网解析

反向代理:
13.Linux上nacos 单节点安装
- 在/home/下创建 nacos 文件夹。
- 将安装包 **nacos-server-2.1.2.tar.gz ** 上传到虚拟机的 /home/nacos/ 目录下。
- 使用以下命令解压上传的压缩包
tar -zxvf /home/nacos/nacos-server-2.1.2.tar.gz
mysql> create database nacos_config;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
mysql> use nacos_config;
Database changed
mysql> source /home/nacos/nacos/conf/mysql-schema.sql;
mysql> show tables;
[root@root conf]# vim application.properties #修改文件
[root@root conf]# cd ..
[root@root nacos]# cd bin
[root@root bin]# sh startup.sh -m standalone # 单机启动
[root@root bin]# systemctl status firewalld #查看防火墙状态
[root@root bin]# firewall-cmd --list-all #查看防火墙开启端口
[root@root bin]# firewall-cmd --permanent --add-port=8848/tcp #防火墙开启8848端口
success
[root@root bin]# firewall-cmd --reload #重新加载
success
[root@root bin]# systemctl status firewalld #查看防火墙状态
[root@root bin]# firewall-cmd --list-all
[root@root bin]# sh shutdown.sh #关闭
[root@root bin]# ps -ef |grep nacos
Linux访问:http://localhost:8848/nacos/#/login
外部浏览器访问:http://192.168.137.19:8848/nacos/#/login
14.Linux上nacos 集群
[root@root conf]# cp cluster.conf.example cluster.conf #复制备份
[root@root conf]# vim cluster.conf #修改文件
./startup.sh -p 3344 ./startup.sh -p 3355 ./startup.sh -p 3366
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name v.ngins.com;#先在hosts文件配置
location / {
#root html;
root /usr/vod/;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
### 4.servername的多种匹配方式:
```shell
完整匹配:
server中可以配置多个域名,例如:
server_name test81.xzj520520.cn test82.xzj520520.cn;
通配符匹配:使用通配符的方式如下:
server_name *.xzj520520.cn;
通配符结束匹配:使用通配符结束匹配的方式如下:
server_name www.xzj520520.*;
正则匹配:正则匹配格式,必须以~开头,比如:server_name ~^www\d+\.example\.net$;。如果开头没有~,则nginx认为是精确匹配。在逻辑上,需要添加^和$锚定符号。注意,正则匹配格式中.为正则元字符,如果需要匹配.,则需要反斜线转义。如果正则匹配中含有{和}则需要双引号引用起来,避免nginx报错,如果没有加双引号,则nginx会报如下错误:directive "server_name" is not terminated by ";" in ...。
特殊匹配格式:
server_name ""; 匹配Host请求头不存在的情况。
匹配顺序:
1. 精确的名字
2. 以*号开头的最长通配符名称,例如 *.example.org
3. 以*号结尾的最长通配符名称,例如 mail.*
4. 第一个匹配的正则表达式(在配置文件中出现的顺序)
优化:
1. 尽量使用精确匹配;
2. 当定义大量server_name时或特别长的server_name时,需要在http级别调整server_names_hash_max_size和server_names_hash_bucket_size,否则nginx将无法启动。
5.基于域名的互联网解析

[外链图片转存中…(img-ttXnJylB-1741678639414)]
[外链图片转存中…(img-lJYeuaOo-1741678639415)]
反向代理:
[外链图片转存中…(img-fVsxKk3l-1741678639415)]
13.Linux上nacos 单节点安装
- 在/home/下创建 nacos 文件夹。
- 将安装包 **nacos-server-2.1.2.tar.gz ** 上传到虚拟机的 /home/nacos/ 目录下。
- 使用以下命令解压上传的压缩包
tar -zxvf /home/nacos/nacos-server-2.1.2.tar.gz
mysql> create database nacos_config;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
mysql> use nacos_config;
Database changed
mysql> source /home/nacos/nacos/conf/mysql-schema.sql;
mysql> show tables;
[root@root conf]# vim application.properties #修改文件
[root@root conf]# cd ..
[root@root nacos]# cd bin
[root@root bin]# sh startup.sh -m standalone # 单机启动
[root@root bin]# systemctl status firewalld #查看防火墙状态
[root@root bin]# firewall-cmd --list-all #查看防火墙开启端口
[root@root bin]# firewall-cmd --permanent --add-port=8848/tcp #防火墙开启8848端口
success
[root@root bin]# firewall-cmd --reload #重新加载
success
[root@root bin]# systemctl status firewalld #查看防火墙状态
[root@root bin]# firewall-cmd --list-all
[root@root bin]# sh shutdown.sh #关闭
[root@root bin]# ps -ef |grep nacos
Linux访问:http://localhost:8848/nacos/#/login
外部浏览器访问:http://192.168.137.19:8848/nacos/#/login
[外链图片转存中…(img-6kLnaO2H-1741678639415)]
14.Linux上nacos 集群
[root@root conf]# cp cluster.conf.example cluster.conf #复制备份
[root@root conf]# vim cluster.conf #修改文件
[外链图片转存中…(img-mfR9Bmsd-1741678639417)]
[外链图片转存中…(img-NY40OXqY-1741678639417)]
./startup.sh -p 3344 ./startup.sh -p 3355 ./startup.sh -p 3366