Docker部署和项目打包发布

Docker部署和项目打包发布

linux基本操作命令

1.查看文件所在位置
eg:which ngins

修改拉取镜像的源文件地址

1.备份本地yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak
2.进入数据源的目录
cd /etc/yum.repos.d/
3.获取阿里yum源配置文件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
4.清除yum之前的缓存
yum clean all
5.将服务器上的软件包信息在本地缓存
yum makecache
6.查看当前yum源
yum repolist
注:在第五步执行的时候超时需要将原源文件下的其他源删除

在这里插入图片描述

Docker配置

镜像配置:
查看本机镜像:docker images
删除:docker rmi 镜像名称:版本号
强制删除:docker rmi -f 镜像id
删除ps -a中的镜像:docker rm 镜像id
下载:docker pull xxx:版本号

删除docker容器

1.查询安装过的包
yum list installed | grep docker
2.删除安装的软件包
yum -y remove docker-engine.x86_64
3.删除镜像/容器等
rm -rf /var/lib/docker
参考链接:
https://blog.csdn.net/qq_36949713/article/details/109154357

容器配置

启动:docker start 容器名称
停止:docket stop 容器名称
查看全部:docker ps -a
删除:docker rm

Docker下载镜像

校验版本 
命令:uname -r 
下载并安装 
命令:yum install docker(-engine) 
输入2次y 
注意:如果下载超时,可以尝试更新yum 
命令:yum -y update 
校验安装成功 
命令:docker version 
可以看到Client 
docker -v 
启动Docker 
命令:systemctl start docker 
重启:systemctl restart docker
查看docker中可用镜像列表
docker search mysql

Docker安装tomcat

下载镜像:
docker pull tomcat:版本号
创建Tomcat容器:
docker create --name tomcat8081 -p 8081:8080 tomcat:版本号
启动Tomcat容器:
docker start tomcat8081

--name tomcat8081 创建容器名
-p 8081:8080 端口号8081为外部访问端口号,8080为内部对应tomcat容器的端口号

Docker安装mysql

docker pull mysql:版本号(5.7)
创建并启动 mysql容器:
docker run -p 3306:3306 --name mysql001 \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

访问测试
docker exec -it mysql3307 bash
连接mysql数据库
mysql -u root -p
输入数据库密码
参考链接:
https://www.csdn.net/tags/NtDaQgxsNTI1NS1ibG9n.html

Docker安装redis,参考

下载软件
docker pull redis

创建/mydata/redis的目录,并在目录下下载redis.conf
wget http://download.redis.io/redis-stable/redis.conf

创建并运行Redis容器
docker run -p 6379:6379 \
-v /mydata/redis/data:/data  \
-v /mydata/redis/redis.conf:/etc/redis/redis.conf \
--name redis \
-d --restart=always redis:latest redis-server \
--appendonly yes 
--requirepass "password"

-p   	 			表示端口映射
-v    				表示宿主机和容器之间的文件映射
--name 				表示docker容器的名字
-d    				表示在后台运行,并且打印容易id
--restart=always    表示可以自启动
redis:latest    	启动容器的镜像
--appendonly yes    表示redis持久化
--requirepass    	表示设置的密码

测试使用,默认的连接工具连接Redis
docker exec -it redis6380 bash
redis-cli 
auth 密码

Docker安装RabbitMQ

docker run -d --name rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=a123456 容器id
如果镜像不存在会自动下载 
访问测试: 服务器ip:15672
默认的账号密码:账号:guest 密码:guest

Docker安装ElasticSearch

1.下载镜像 
docker pull elasticsearch:7.6.1 
2.安装运行 
docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m"  镜像ID 
3.访问测试 
http://阿里云服务器ip:9200/ 
ps:9200 是服务端的地址,9300为客户端地址

Docker安装Nacos 参考Docker安装nacos并配置mysql(详细)

1.拉取镜像
docker pull nacos/nacos-server:1.3.1
2.新建logs目录
mkdir -p /mydata/nacos/logs/   
mkdir -p /mydata/nacos/init.d/
3.查询mysql对应容器的IP
docker inspect mysql | grep IPAddress    # mysql是对应的容器名字
4.修改配置文件
vim /mydata/nacos/init.d/custom.properties 
5.custom.properties 配置文件 注意:如果mysql是容器安装,一定要配置对应容器的ip
erver.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848
spring.datasource.platform=mysql

db.num=1
# 这里要对应ip,以及对应的数据库
db.url.0=jdbc:mysql://172.18.0.4:3306/nacos_devtest_prod?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false

management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
nacos.naming.distro.taskDispatchThreadCount=1
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
nacos.naming.expireInstance=true
6.运行nacos
docker  run --name nacos -p 8848:8848   \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-v /mydata/nacos/logs:/home/nacos/logs \
-v /mydata/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
-d nacos/nacos-server:1.3.1
7.访问
192.168.1.25:8848/nacos

Docker安装sentinel 参考Docker部署sentinel

1.拉取sentinel镜像
docker pull bladex/sentinel-dashboard:1.7.0
2.运行sentinel
docker run --name sentinel -d  -p 8858:8858  bladex/sentinel-dashboard:1.7.0
3.访问
192.168.1.25:8858

Docker安装zipkin 参考docker 搭建 zipkin

1.拉取zipkin镜像
docker pull openzipkin/zipkin
2.运行zipkin
docker run -d --restart always -p 9411:9411 --name zipkin openzipkin/zipkin 
3.访问
192.168.1.25:9411/zipkin/

Docker安装rocketMQ

1.拉取rocketmq
docker pull rocketmqinc/rocketmq:4.4.0
2.部署Namesrv注册中心
docker run -u root -d -p 9876:9876 -v /mydata/rocketmq/logs:/root/logs -v /mydata/rocketmq/store:/root/store --name rmqnamesrv -e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketmq:4.4.0 sh mqnamesrv
3.创建/logs、/store、broker.conf
mkdir ....
4.编辑broker.conf
vim broker.conf

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
// 如果在局域网内部使用的话,服务器ip即可,如果提供外部访问,则为外部公网ip
brokerIP1 = 198.1.16.66{服务器 IP}
5.部署broker 服务器
docker run -d -p 10911:10911 -p 10909:10909 -v  /mydata/rocketmq/logs:/root/logs -v  /mydata/rocketmq/store:/root/store -v /mydata/rocketmq/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" rocketmqinc/rocketmq:4.4.0 sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
6.拉取rabbitmq控制台镜像
docker pull styletang/rocketmq-console-ng
7.部署rocketmq控制台
docker run -d -p 5673:8080 --name rmqconsole -e "JAVA_OPTS=-Drocketmq.namesrv.addr=198.1.16.66:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -t styletang/rocketmq-console-ng

原生搭建rocketmq

1.拉取rocketmq
https://rocketmq.apache.org/dowloading/releases/
注:拉取Rocketmq-all-4.9.1-bin-release.zip
2.将文件移动到linux中创建的rocketmq文件夹下
3.解压
[root@localhost rocketmq]# unzip rocketmq-all-4.6.1-bin-release.zip 
4.修改broker.conf
[root@localhost rocketmq]# cd rocketmq-all-4.6.1-bin-release/conf
[root@localhost conf]# vim broker.conf 
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
#将aclEnable设置为true,开启用户名密码
aclEnable = true
#设置服务器ip(默认端口9876)
brokerIP1 = 172.15.2.68
namesrvAddr = 172.15.2.68:9876
autoCreateTopicEnable=true

5.修改plain_acl.yml 
[root@localhost conf]# vim plain_acl.yml
#注释掉放行白名单
globalWhiteRemoteAddresses:
#- 10.10.103.*
#- 192.168.0.*

accounts:
- accessKey: RocketMQ
  secretKey: 12345678
  whiteRemoteAddress:
  admin: false
  defaultTopicPerm: DENY
  defaultGroupPerm: SUB
  topicPerms:
  - topicA=DENY
  - topicB=PUB|SUB
  - topicC=SUB
  groupPerms:
  # the group should convert to retry topic
  - groupA=DENY
  - groupB=PUB|SUB
  - groupC=SUB
#设置消息发送和接收用户名密码,(区别于console用于登录的用户名密码)
- accessKey: root
  secretKey: 09cda2c93e794a89e
  whiteRemoteAddress: 
  # if it is admin, it could access all resources
  admin: true
6.后台运行 mqnamesrv (注意端口冲突)
[root@localhost rocketmq-all-4.6.1-bin-release]# nohup sh bin/mqnamesrv > /dev/null 2> /dev/null &
或:非后台运行,退出之后就down掉了 sh bin/mqnamesrv
7.后台运行 mqbroker 
[root@localhost rocketmq-all-4.6.1-bin-release]# nohup sh bin/mqbroker -c conf/broker.conf > /dev/null 2> /dev/null &
或:sh bin/mqbroker -c conf/broker.conf(作用同上,都是以配置文件形式运行,区别于后台运行)
8.拉取 rocketmq-console-ng-2.0.0 控制台,修改application.properties
server.address=0.0.0.0
# =============修改端口为19876=============
server.port=19876
 
### SSL setting
#server.ssl.key-store=classpath:rmqcngkeystore.jks
#server.ssl.key-store-password=rocketmq
#server.ssl.keyStoreType=PKCS12
#server.ssl.keyAlias=rmqcngkey
 
#spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
logging.level.root=INFO
logging.config=classpath:logback.xml
#if this value is empty,use env value rocketmq.config.namesrvAddr  NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
# =============修改namesrv地址,如果是多个请以分号;分隔(此处修改成你自己安装的rocket namesrv地址ip即可)=============
rocketmq.config.namesrvAddr=172.15.2.68:9876
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=false
#rocketmq-console's data path:dashboard/monitor
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don't want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true
#set the message track trace topic if you don't want use the default one
rocketmq.config.msgTrackTopicName=
rocketmq.config.ticketKey=ticket
 
#Must create userInfo file: ${rocketmq.config.dataPath}/users.properties if the login is required
# =============开启控制台账户密码登录(为true表示开启,为false表示关闭)=============
rocketmq.config.loginRequired=true
#这里的用户名密码要和 plain_acl.yml中的保持一致
#set the accessKey and secretKey if you used acl
rocketmq.config.accessKey=root
rocketmq.config.secretKey=09cda2c93e794a89e
9.修改 users.properties
# This file supports hot change, any change will be auto-reloaded without Console restarting.
# Format: a user per line, username=password[,N] #N is optional, 0 (Normal User); 1 (Admin)
 
# Define Admin
# =============用户名和密码规则「用户名=密码,权限」,这里的权限为1表示管理员,为0表示普通用户=============
# 例如:admin=admin123,1
admin=123456,1
 
 
# Define Users
# =============屏蔽下边两个账户=============
#user1=user1
#user2=user2
10.打包发布
[root@localhost rocketmq]# nohup java -jar rocketmq-console-ng-2.0.0.jar >/dev/null 2>&1 & 
注:67服务器使用sh start.sh启动控制台
11.查询程序是否启动成功
[root@localhost rocketmq]# ps aux|grep mqbroker

补充:
# namesrv 停止语法
sh bin/mqshutdown namesrv
# 输出如下内容,表示停止成功
The mqnamesrv(16200) is running...
Send shutdown request to mqnamesrv(16200) OK
  
# broker 停止语法
sh bin/mqshutdown broker
# 输出如下内存,表示停止成功
The mqbroker(16447) is running...
Send shutdown request to mqbroker(16447) OK

参考链接:
https://www.sunjs.com/article/detail/6d8877b9d86745fdb8b520691f96b3c7.html
https://www.sunjs.com/article/detail/a44ed76899194d1fa1cc883c70b99c1f.html
https://www.cnblogs.com/leva/p/14738864.html
https://blog.csdn.net/dbcjh/article/details/110948542
console下载:https://gitee.com/ralph81/rocketmq-console?_from=gitee_search
文件提取:
链接:https://pan.baidu.com/s/19CeAAoGMrYkzGFiy7MEbGg
提取码:pwpa

搭建webrtc音视频通话中的turn服务器

1.安装ssh
yum -y install openssl-devel
注:若安装超时,需修改镜像源
2.生成签名
openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes
执行之后一直按回车就可以了
注:后续的安装执行必须依赖openssl-devel的环境
3.安装libevent
wget --no-check-certificate https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
	3.1解压缩
	tar -zxvf libevent-2.1.12-stable.tar.gz
	3.2 进入目录
	cd libevent-2.1.12-stable/
	3.3 运行config
	./configure
	3.4 执行make
	make
	3.5 执行make install
	make install
4.退出当前目录,下载turn服务器
wget --no-check-certificate https://github.com/coturn/coturn/archive/4.5.1.1.tar.gz
	4.1解压缩
	tar -zxvf 4.5.1.1.tar.gz
	4.2 进入目录
	cd coturn-4.5.1.1
	4.3 运行config
	./configure
	4.4 执行make
	make
	4.5 执行make install
	make install
	4.6 生成用户
	turnadmin -a -u chr -p 11111 -r xxx.com
	注:将创建用户chr,密码为11111 ,同时指定realm为xxx.com
	4.7 进入配置文件目录
	cd /usr/local/etc
	4.8 查看ip地址,配置中需要用到
	ifconfig //查看服务器ip
	curl ifconfig.me //查看公网ip
	4.9 编辑conf
	vim turnserver.conf
	插入配置文件
	#与前ifconfig查到的网卡名称一致
	relay-device=eth0
	#内网IP
	listening-ip=10.0.16.7
	#公网IP
	external-ip=159.75.239.36
	#用户名密码,创建IceServer时用
	user=chr:123456
	#一般与turnadmin创建用户时指定的realm一致
	realm=chr.com
	#端口号
	listening-port=3478
	#不开启会报CONFIG ERROR: Empty cli-password, and so telnet cli interface is disabled! Please set a non empty cli-			password!错误
	cli-password=qwerty

	cert=/etc/turn_server_cert.pem
	pkey=/etc/turn_server_pkey.pem
5.查看tcp和udp的3478端口是否开放
firewall-cmd --zone=public --query-port=3478/tcp
firewall-cmd --zone=public --query-port=3478/udp
注:如果防火墙没有开启可以不关注这个
6.进入到turn服务器下开启服务
turnserver -a -f -r xxx.com
turnserver -a -o -f -r xxx.com //后台启动
7.测试turn服务器
webrtc-samples官网提供了一个测试用的地址
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

以公网ip加入测试
注:公私网ip端口要达成映射关系,否则测试不通过
在这里插入图片描述
测试成功!
在这里插入图片描述
参考链接:
https://blog.csdn.net/qq_44938451/article/details/122158975

Tomcat访问失败解决方案

先查看防火墙状况
service firewalld status
如果防火墙没关闭,先关闭防火墙
service firewalld stop
确定防火墙关闭但访问Tomcat还是失败之后,使用如下命名进入Tomcat的目录
docker exec -it c110e520cdd1(启动的Tomcat容器的容器id) /bin/bash
例:docker exec -it 1c84be52db15 /bin/bash
使用命令查看当前文件夹内的所有文件
ls -l
进入webapps文件夹下
cd webapps
查看webapps下的文件
ls -l
显示total 0,问题就出在这里,webapps文件夹下没有东西
cd ..
删除webapps文件夹(-r是级联删除,-f是强制删除,不然文件夹是删不掉的)
rm -rf webapps
将webapps.dist文件夹下的内容复制到给webapps文件夹
rm webapps.dist webapps 或 mv webapps.dist webapps
exit退出到docker

项目发布

将打包好的war包,先放到服务器根目录下,
docker cp ***.war(打包好的项目名) 1c84be52db15(docker中tomcat服务器的id):/usr/local/tomcat/webapps
例:docker cp ***.war 1c84be22db38:/usr/local/tomcat/webapps

文件导入成功之后,服务器自动解压
在浏览器输入http://服务器公网ip:端口号/项目名称/xxx.html

删除项目

进入到tomcat容器中
docker exec -it c110e520cdd1(启动的Tomcat容器的容器id) /bin/bash
进入到webapps目录下
cd webapps
查看webapps下的所有文件,找到想要删除的文件
ls -l
rm -rf xxx.war 和rm -rf xxx 再ls -l 查看是否还存在,

项目原生发布

打包

先clean掉之前的垃圾文件

再重新启动项目

然后再使用package打包到target文件夹下

发布

1.在home目录下新建项目文件夹

2.将项目的.jar文件放入到项目文件夹下

 cd /home/ ****  查看项目文件夹下的jar

3. 查看项目是否发布成功(是否含有java -jar命令)进程查看命令
 命令:ps aux|grep aaaa-1.0-SNAPSHOT.jar  

 或命令:ps -ef|grep aaaa-1.0-SNAPSHOT.jar  

4. 设置项目为后台启动(返回的端口号即项目发布的端口号)
 nohup java -jar $jarFile  --spring.profiles.active=dev >/dev/null 2>&1 &
例如:nohup java -jar aaaa-1.0-SNAPSHOT.jar >/dev/null 2>&1 & 
 
5.  kill 1748 杀掉项目所在端口(含有java -jar的端口)

版权声明:本文为One_the_road原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。