当前位置:   article > 正文

微服务day06-Docker&阿里云部署_获取阿里云docker

获取阿里云docker

Docker&阿里云部署

之前是在自己的虚拟机上进行部署,但是在本机上运行虚拟机以及众多服务会对本机造成非常大的压力,基于这种考虑,将部分内容移动到阿里云服务器上进行使用,以减轻本机压力,本机只需要通过xshell连接到阿里云服务器开启相关服务即可

1.获取一个阿里云服务器

可以去官网购买,阿里云,我是趁折扣时期买了一台ECS云服务器…系统是CentOS7.9

2.安装docker

1.卸载旧版本docker,如果是新的服务器可以跳过这步

 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
# 或者
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

2.安装yum工具,yum工具服务器上通常会自带

yum install -y yum-utils \ 
		   device-mapper-persistent-data \
           lvm2 --skip-broken
  • 1
  • 2
  • 3

3.设置docker镜像源,可以提高下载速度

yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
  • 1
  • 2
  • 3
  • 4
  • 5

4.下载以及安装docker-ce(社区免费版)

yum install -y docker-ce
  • 1

5.完成之后,不要着急启动docker,当时踩坑安装之后直接启动了docker结果导致后续部分容器启动不起来,报错:

docker: Error response from daemon: 
driver failed programming external connectivity on endpoint
  • 1
  • 2

经过查阅很多资料,了解到该错误似乎是由于未启动防火墙,而优先启动了docker导致的,如果你先启动了docker,然后才启动的防火墙可以使用如下操作:

# 关闭docker
systemctl stop docker 

# 关闭防火墙命令:
systemctl stop firewalld

# 在防火墙中,添加开放端口命令:这一步可以选择开放你未来需要使用的端口比如mysql的3306
firewall-cmd --add-port=3306/tcp --permanent

# 重新加载防火墙,添加开放端口之后记得从新加载防火墙
firewall-cmd --reload

# 重新启动docker
systemctl start docker 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

综上所述,应该优先启动防火墙:

systemctl start firewalld
  • 1

然后再启动docker

systemctl start docker 
  • 1

通过docker -v查看docker版本,如果有版本提示则成功

docker -v
  • 1

3.启动相关容器

在微服务项目中会使用众多的容器,我们逐个讨论。

3.1 mysql

1.拉取镜像,我使用的mysql版本是8.0.33

docker pull mysql:8.0.33
  • 1

2.创建并启动容器

# --name指定容器名字 -v目录挂载 -p指定端口映射  -e设置mysql参数 -d后台运行
docker run -p 3306:3306 --name mysql \
-v /mount/mysql/logs:/logs \
-v /mount/mysql/data:/var/lib/mysql \
-v /mount/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456\
-d mysql:8.0.33 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

-v目录挂载,如果没有在宿主机上提前创建目录,执行该命令时会自动创建挂载目录。

3.容器启动之后进入容器内部并使用密码登陆

# 查看运行的容器
docker ps
# 查看所有的容器
docker ps -a
# 进入容器
docker exec -it mysql /bin/bash
# 进入mysql 
mysql -u root -p (回车)
输入自己的密码
# 退出mysql
exit
# 退出容器
exit
# 设置MySQL开机自启
docker update mysql --restart=always
# 重启mysql
docker restart mysql
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

此时mysql服务已经正常启动了,但是我们仍然无法在外部使用公网IP+端口号访问mysql,因此还需要再阿里云的安全组规则中进行配置(安全组出方向默认允许所有访问,即从安全组内ECS访问外部都是放行的。但是入方向,即从外部访问服务器的端口是受到限制的),注意,服务器的防火墙也需要开放对应端口,就是通过2.5中的那种方式开放端口
在这里插入图片描述
“手动添加”入方向端口号
在这里插入图片描述
点击“保存”,随后在navicat中测试连接,如图连接成功,然后我们就可以在本机直接操作服务器中的mysql了。

3.2 nacos

一个微服务项目必然会用到的就是注册中心了,这里我们选择目前主流的nacos注册中心

1.拉取镜像
我使用的nacos版本是1.4.1

docker pull nacos/nacos-server:1.4.1
  • 1

2.在数据库中添加nacos注册中心要用到的表结构(也可以不使用MySQL存储对应的数据内容,Nacos会直接使用自带的一个小型数据库)
nacos-db.sql,直接点击链接获取,如果你访问github非常慢,直接使用如下的sql即可:(建议先手动创建数据库,再在数据库中新建查询,然后将sql粘贴进去再运行)

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info   */
/******************************************/
CREATE TABLE `config_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) DEFAULT NULL,
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `c_desc` varchar(256) DEFAULT NULL,
  `c_use` varchar(64) DEFAULT NULL,
  `effect` varchar(64) DEFAULT NULL,
  `type` varchar(64) DEFAULT NULL,
  `c_schema` text,
  `encrypted_data_key` text NOT NULL COMMENT '密钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_aggr   */
/******************************************/
CREATE TABLE `config_info_aggr` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  `content` longtext NOT NULL COMMENT '内容',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_beta   */
/******************************************/
CREATE TABLE `config_info_beta` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` text NOT NULL COMMENT '密钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_tag   */
/******************************************/
CREATE TABLE `config_info_tag` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_tags_relation   */
/******************************************/
CREATE TABLE `config_tags_relation` (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
  `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `nid` bigint(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`nid`),
  UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = group_capacity   */
/******************************************/
CREATE TABLE `group_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (
  `id` bigint(64) unsigned NOT NULL,
  `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `data_id` varchar(255) NOT NULL,
  `group_id` varchar(128) NOT NULL,
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL,
  `md5` varchar(32) DEFAULT NULL,
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  `src_user` text,
  `src_ip` varchar(20) DEFAULT NULL,
  `op_type` char(10) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` text NOT NULL COMMENT '密钥',
  PRIMARY KEY (`nid`),
  KEY `idx_gmt_create` (`gmt_create`),
  KEY `idx_gmt_modified` (`gmt_modified`),
  KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = tenant_capacity   */
/******************************************/
CREATE TABLE `tenant_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';


CREATE TABLE `tenant_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `kp` varchar(128) NOT NULL COMMENT 'kp',
  `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
  `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
  `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
  `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
  `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
  `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';

CREATE TABLE users (
	username varchar(50) NOT NULL PRIMARY KEY,
	password varchar(500) NOT NULL,
	enabled boolean NOT NULL
);

CREATE TABLE roles (
	username varchar(50) NOT NULL,
	role varchar(50) NOT NULL,
	constraint uk_username_role UNIQUE (username,role)
);

CREATE TABLE permissions (
    role varchar(50) NOT NULL,
    resource varchar(512) NOT NULL,
    action varchar(8) NOT NULL,
    constraint uk_role_permission UNIQUE (role,resource,action)
);

INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);

INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
  • 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
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205

3.创建挂载目录并创建修改配置文件:

mkdir -p /mount/nacos/logs
mkdir -p /mount/nacos/init.d
#新建并修改nacos的配置文件
vim /mount/nacos/init.d/custom.properties    
  • 1
  • 2
  • 3
  • 4

4.添加配置文件custom.properties内容,注意db.url.0=jdbc:mysql://172.20.34.155:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true这里使用你服务器的内网IP,就是eth0对应的那个172开头的IP地址

server.servlet.contextPath=/nacos
server.port=8848

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://172.20.34.155:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456


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

  • 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

5.创建并运行nacos容器

# 创建并运行nacos容器
docker run \
 -p 8848:8488 \
--name nacos -d \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-v /mount/nacos/logs:/home/nacos/logs \
-v /mount/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
nacos/nacos-server:1.4.1

# 或者简易版本,如果使用这一套可以直接忽略上述步骤2,3,4
docker run --name nacos -d \
-p 8848:8848 \
-e MODE=standalone \
--restart=always \
nacos/nacos-server
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

6.开放对应的端口
一个好用的在线端口检测网站f端口在线监测传送门
事实上阿里云服务器是有2个防火墙的,一个是安全组,可以理解为阿里云统一管理的一个外围防火墙,服务器本身如果是CentOS7及以上版本,会使用firewalld防火墙,一个需要注意的点是即使你同时开放了2个防火墙的对应端口,你直接使用监测工具也是监测到端口关闭,因为没有响应的应用监听在这些端口,所以端口对外暴露实际上是三个步骤:1.开放阿里云安全组端口。2.开放服务器firewalld对应端口。3.在已经开放的端口上设置应用监听。
以Nacos注册中心使用的8848端口为例,介绍以下步骤:
1.在入方向手动添加端口8848
在这里插入图片描述

2.在服务器上手动开启端口8848

# 1.添加8848端口,永久生效
firewall-cmd --zone=public --add-port=8848/tcp --permanent

# 2.更新防火墙配置
firewall-cmd --reload

# 3.查看已经开放的端口
firewall-cmd --list-ports
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3.启动nacos容器开启nacos服务,然后使用nestat命令查看各个端口服务监听状况:

netstat -ntlp
  • 1

监听状况
如上图所示,8848有应用在监听

4(可选).在我的服务器上8848这个端口比较特殊,因为当时在开放3306端口的时候,经过上述三步端口已经打开,但是8848端口并不是这样,还需要在iptables再允许流量经过8848端口:

# 允许流量经过8848端口
iptables -A INPUT -p tcp --dport 8848-j ACCEPT

# 查看iptables规则内容(入方向)
iptables -L INPUT --line-numbers
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
如上图所示,最下方的规则8是我们新添加的内容。此时我们的8848端口就是开放的了,并且可以通过
“http://公网IP:8848/nacos”访问的nacos注册中心.
另外,需要注意的是:
第一点,如果你在配置了上述内容之后重新启动了服务器,那么之前添加的iptables规则会消失,还需要手动添加一次(或者有其他什么方案可以永久添加的,但是我并没有找到);
第二点,应该有先开启firewalld服务,再开启docker服务,如果你想要使用防火墙firewalld的话

然而,当我后来又重启服务器再次此时的时候,却发现即使不用第四步骤,只需要在netstat -ntlp的时候你需要的服务监听在对应的端口时,并且已经完成了1,2步骤,开放了对应的安全组端口和服务器防火墙端口即可。
还有一个就是,对于3306端口,没有防火墙firewalld时和有防火墙并开放了3306端口时是一样的;但是对于8848端口,没有防火墙时,是关闭的状态,反而是有防火墙并开放了对应的端口8848是开启的状态;我对此的推测是:首先firewalld是一个基于iptables而简化操作的防火墙,也就是firewalld是在iptables之上建立的,所以firewalld的指令会直接影响iptables的设置,所以关闭firewalld时,使用的是iptables自己的那一套,但是这套中并没有设置对应的端口规则,因此手动添加步骤4,如果开启了firewalld,由于已经在步骤3中设置了firewalld对于8848的规则,因此就使用这一套规则。

3.3 Minio

  Minio 是一个基于Apache License v2.0开源协议的对象存储服务,虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据。 例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几 kb 到最大 5T 不等。

1.拉取minio镜像(最新版本或者指定版本)或者从minio压缩包中获取;

# 默认拉取minio镜像,建议不要使用最新版,最新版与我们常用的版本变化差异较大
docker pull minio/minio:RELEASE.2021-06-17T00-10-46Z
  • 1
  • 2

2.创建并启动容器

# 创建并启动minio容器;
docker run -p 9000:9000 \
--name minio -d \
--restart=always \
-e "MINIO_ROOT_USER=minio" \
-e "MINIO_ROOT_PASSWORD=minio123456" \
-v /mount/minio/data:/data  \
-v /home/config:/root/.minio \
minio/minio:RELEASE.2021-06-17T00-10-46Z server /data
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

如果启动时报错:(类似的错误)

/usr/bin/docker-current: Error response from daemon: 
driver failed programming external connectivity on endpoint node 
(7e1282d78b546d89e53823c2f96b75e53c683a10c725f4ce2454ee08b00cace0):
(iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 
--dport 3000 -j DNAT --to-destination 172.17.0.2:3000 !
-i docker0: iptables: No chain/target/match by that name.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

则需要重启docker服务

如果出现了能正常启动,但是每当访问minio服务时minio容器会不断自动重启,使用

docker logs [容器ID]
  • 1

命令查看日志,如果日志中出现了:

ERROR Unable to initialize backend: format.json file: 
expected format-type: fs, found: xl
  • 1
  • 2

说明是由于挂载的数据卷已经被之前的minio占用了(之前别的minio启动时占用过),这时需要进入到挂载数据的目录下,我的是“/mount/minio/data”,使用

ls -a
  • 1

命令查看所有隐藏文件,并删除.minio.sys文件,删除命令为:

rm -rf .minio.sys
  • 1

3.开放9000端口
首先需要开启阿里云服务器安全组中的9000端口;
然后需要开启阿里云服务器上的防火墙firewalld的9000端口;

# 添加开放的端口 
firewall-cmd --add-port=9000 --zone=public ---permanent 

# 更新防火墙配置
firewall-cmd --reload

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

最后需要在/etc/sysconfig/iptables(也可能是iptables-config,iptables.config)中添加对应的端口号;总之都添加一遍就对了,然后保存,重启服务

# 添加的内容
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT

# 重启服务命令
systemctl restart firewalld 
  • 1
  • 2
  • 3
  • 4
  • 5
3.4 部署前端工程(未更新完)

1.上传前端工程和nginx包

2.配置nginx配置文件
首先创建在conf目录下创建一个目录,然后再在下边创建一个配置文件,在外围的配置文件nginx.conf中引用该里边的配置文件即可。

内部配置文件:

upstream  heima-app-gateway{
    server localhost:51601;
}

server {
	listen 8801;
	location / {
		root /home/software/front/app-web;  //使用的是前端工程的地址;
		index index.html;
	}
	
	location ~/app/(.*) {
		proxy_pass http://heima-app-gateway/$1;
		proxy_set_header HOST $host;  # 不改变源请求头的值
		proxy_pass_request_body on;  #开启获取请求体
		proxy_pass_request_headers on;  #开启获取请求头
		proxy_set_header X-Real-IP $remote_addr;   # 记录真实发出请求的客户端IP
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  #记录代理信息
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

外部配置文件nginx.conf

worker_processes  1;

events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
	# 引入自定义配置文件
	include leadnews.conf/*.conf;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3.使用容器启动nginx
3.1 拉取nginx镜像

# 查看容器镜像版本
docker search nginx 
  • 1
  • 2

这里发现找不到我们需要的1.18.0的nginx镜像文件

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/969081
推荐阅读
相关标签
  

闽ICP备14008679号