一个人能不能快速搭建一套微服务环境
一、背景
大型软件系统的开发现在往往需要多人的协助,特别是前后端分离的情况下下,分工越来越细,那么一个人是否也能快速搭建一套微服务系统呢? 答案是能的。看我是怎么操作的吧。
二、搭建过程
1、首先需要一套逆向代码生成工具,只需要设计好数据库表就能生成微服务,该源码已经上传到我的资源分享里面
1、修改dbConfig.xml文件配置数据源信息。
2、修改project.xml文件配置微服务信息。
?? ?2.0、修改name为对应数据库,支持mysql、oracle、postgresql
?? ?2.1、修改schema为据库名称
?? ?2.2、修改table为表名,多个表以逗号分隔
?? ?2.3、修改version版本号
?? ?2.4、修改author为自己的OA名称
?? ?2.5、修改service为服务名称
?? ?2.6、修改module为模块名称
?? ?2.7、修改rootPackage为根包名称
?? ?2.8、修改application为启动类名称
?? ?2.9、其他内容无需修改
3、运行Run.java,生成代码,路径为out目录下 。
2.相关的yml文件需要准备好
application.yml
#数据库配置信息
spring:
datasource:
url: ${member-plat.jdbc.member-sys.url}
driver-class-name: ${member-plat.jdbc.member-sys.driver-class-name}
username: ${member-plat.jdbc.member-sys.username}
password: ${member-plat.jdbc.member-sys.password}
#hikari数据源特性配置
hikari:
maximum-pool-size: 100 #最大连接数,默认值10.
minimum-idle: 20 #最小空闲连接,默认值10.
connection-timeout: 60000 #连接超时时间(毫秒),默认值30秒.
#空闲连接超时时间,默认值600000(10分钟),只有空闲连接数大于最大连接数且空闲时间超过该值,才会被释放
#如果大于等于 max-lifetime 且 max-lifetime>0,则会被重置为0.
idle-timeout: 600000
max-lifetime: 3000000 #连接最大存活时间,默认值30分钟.设置应该比mysql设置的超时时间短
connection-test-query: select 1 #连接测试查询
bootstrap.yml
#应用ID
app:
id: member-plat
#应用端口
server:
port: 8305
#服务名称
spring:
application:
name: cdj-project
servlet:
multipart:
max-file-size: 1024MB #指定上传文件允许的最大大小。 默认值为1MB
max-request-size: 10240MB #指定multipart/form-data请求允许的最大大小。 默认值为10MB。
#配置注册中心
eureka:
instance:
prefer-ip-address: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
client:
service-url:
defaultZone: ${eureka.defaultZone} #服务注册到的地址
fetch-registry: true
#阿波罗配置信息
apollo:
bootstrap:
enabled: true
namespaces: application,txyunjdbc.yml,redis.yml,weixin.yml,oss.yml,member.yml,txrocketMq.yml
meta: http://member-config:8080
mybatis:
#mapper配置文件
mapper-locations: classpath:mapper/*.xml
#开启驼峰命名法
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mybatis-plus:
configuration:
# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
id-type: ASSIGN_UUID
#日志级别配置信息
logging:
level:
root: INFO
cn.member.dao: DEBUG
?3、注册中心准备好?eureka 源码已经上传的自研共享
4、apollo配置组件准备好,开源下载就行
5、准备一份部署文档,安装jdk 安装docker,安装nginx这些,编写好微服务启动脚本这些
三、部署文档
1.1服务器资源
操作系统版本:Linux?CentOS 7.6
JAVA环境:openjdk version "1.8.0_312"
数据库:MYSQL8.0 或PostgreSQL 12.8
1.2 yum准备
1.2.1 更新yum
yum update yum
1.2.2 安装yum工具
yum -y install yum-utils
1.2.3查看yum版本?
yum –version
版本为3.4.3或之后的最新版本即可
1.3 JAVA部署
JAVA安装命令:
yum install java-1.8.0-openjdk.x86_64
查看JAVA版本:?java -version
1.4 docker环境及部署
1.4.1版本
Client: Docker Engine – Community version:?20.10.12
Server: Docker Engine – Community version:?20.10.12
1.4.2 部署
1.用yum拉取阿里云镜像:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2. yum安装:
yum install docker-ce
3.查看docker版本:
docker version
4.启动docker:
systemctl start docker
5.设置docker开机自启
systemctl enable docker
1.4.3 文件夹
1.在系统的/home路径下创建一个命名为“docker”的文件夹,用于存放docker相关文件。
2.在/home/docker路径下创建两个文件夹“script”和“apps”,用于存放脚本文件与镜像文件。
1.4.4 docker常用命令
1.查看docker镜像:?docker images
2.查看docker正在运行容器:?docker ps
3.查看docker里的容器:?docker ps -a
1.5 nginx部署
端口需要:80
1.5.1 docker部署nginx
docker pull nginx:latest
1.5.2 脚本文件
在/home/docker/script路径下创建一个脚本文件“nginx.sh”,内容为:
docker run -d \
?? --name nginx \
?? --net=host \
?? -v /home/docker/apps/nginx/www:/usr/share/nginx/html \
?? -v /home/docker/apps/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
?? -v /home/docker/apps/nginx/logs:/var/log/nginx \
?? -v /home/docker/apps/nginx/conf.d:/etc/nginx/conf.d \
?? -v /home/docker/apps/nginx/cert:/etc/nginx/cert \
?? nginx
(注意:以上内容需注意linux中的特殊字符,可用vim编辑文件,去掉特殊字符,否则运行脚本文件时会报错;cert为安全证书相关,不需要时可以去掉)
1.5.3 nginx文件
1.在/home/docker/apps路径下创建“nginx”文件夹
2.在/home/docker/apps/nginx路径下分别创建“www”、 “logs”、 “conf”、 “conf.d”四个文件夹;”www”文件夹用于存放前端代码,“logs”文件夹用于存放日志,“conf”文件夹用于存放nginx总配置文件,“conf.d”用于存放项目配置文件;如需安全证书相关,还要创建“cert”文件夹。
3.nginx总配置文件:
在/home/docker/apps/nginx/conf路径下创建“nginx.conf”文件,作为nginx的总配置文件,内容为:
user ?nginx;
worker_processes ?auto;
error_log ?/var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
????worker_connections ?1024;
}
http {
????include ??????/etc/nginx/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 ?/var/log/nginx/access.log ?main;
????sendfile ???????on;
????#tcp_nopush ????on;
????keepalive_timeout ?65;
????#gzip ?on;
????client_max_body_size 1024m;
????include /etc/nginx/conf.d/*.conf;
}
4.项目配置分文件
在/home/dokcer/apps/nginx/conf.d路径下创建“xxx.conf”文件,“xxx”为项目名,内容为:
#server
#{
??## 80端口是http正常访问的接口
??#listen 80;
??#server_name XXX.com;
??## 在这里,我做了https全加密处理,在访问http的时候自动跳转到https
??#rewrite ^(.*) https://${server_name}$1 permanent;
#}
server {
# listen 自定义监听端口
????listen ??????80;
#定义使用 访问域名
????server_name ?localhost;
# 如需域名则配置如下
# 侦听443端口,这个是ssl访问端口
# listen 443 ssl;
# ssl_certificate /etc/nginx/cert/xxx.crt;
????# ssl_certificate_key /etc/nginx/cert/安全私钥文件名;
????location / {
????????root ??/var/nginx/html/xxx;
????????index ?index.html index.htm;
????}
????error_page ??500 502 503 504 ?/50x.html;
????location = /404.html {
????????????root ?error;
????}
}
1.5.4 运行nginx
1.通过脚本文件nginx.sh运行,脚本文件的运行需授予权限,在文件目录下命令:
chmod 755 nginx.sh
2.运行脚本命令:./nginx.sh
1.5.4 nginx常用命令
1.启动: docker start nginx
2.重启: docker?restart nginx
3.停止:?docker stop nginx
1.6 注册中心eureka部署(非必要)
端口需要:8761
1.6.1 准备
部署注册中心eureka,使用docker部署。在/home/docker/apps路径下创建“eureka”文件夹,并存放一个ctg-eureka.jar的镜像文件和构建镜像的Dockerfile文本文件。eureka.jar文件可使用别的服务器同目录下的ctg-eureka.jar文件。
Dockerfile文件的内容:
FROM java:8
VOLUME /tmp
ADD ctg-eureka.jar ctg-eureka.jar
EXPOSE 8761
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/ctg-eureka.jar"]
1.6.2 脚本文件
在/home/docker/script路径下创建一个脚本文件“eureka.sh”,内容为:
docker run --name ctg-eureka -d -p 8761:8761 ctg-eureka
1.6.3 运行eureka
1.通过脚本文件eureka.sh运行,脚本文件的运行需授予权限,在文件目录下命令:
chmod 755 eureka.sh
2.运行脚本命令:./ eureka.sh
1.6.4 eureka常用命令
1.启动: docker start ctg-eureka
2.重启: docker restart ctg-eureka
3.停止: docker stop ctg-eureka
1.7 配置中心Apollo部署(非必要)
端口需要: 8070,8080,8090
1.7.1 准备工作
Apllo的部署需要Mysql数据库,需要5.6.5以上版本。
1.7.2 创建数据库
Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB,我们把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可。
执行两个sql文件
sql/apolloportaldb.sql
sql/apolloconfigdb.sql
会创建两个数据库
sql文件可在官网:Quick Start · apolloconfig/apollo Wiki · GitHub?下载
1.7.3 脚本文件
1.在/home/docker/script路径下创建“apollo”文件夹
2.在/home/docker/script/apollo路径下创建“apollo-portal.sh”脚本文件,内容为:
docker run -d \
????--name apollo-portal \
????--net=host \
????-v /tmp/logs:/opt/logs \
????-e SPRING_DATASOURCE_URL=
"jdbc:mysql://数据库地址/ctg_apollo_portal_test?characterEncoding=utf8" \
????-e SPRING_DATASOURCE_USERNAME=数据库账号\
????-e SPRING_DATASOURCE_PASSWORD=数据库密码\
????-e APOLLO_PORTAL_ENVS=test \
????-e TEST_META=http://服务器ip地址:8080 \
????apolloconfig/apollo-portal:1.9.1
3.在/home/docker/script/apollo路径下创建“apollo-config.sh”脚本文件,内容为:
docker run -d \
????--name apollo-configservice \
????--net=host \
????-v /tmp/logs:/opt/logs \
????-e SPRING_DATASOURCE_URL=
"jdbc:mysql://数据库地址/ctg_apollo_config_test?characterEncoding=utf8" \
????-e SPRING_DATASOURCE_USERNAME=数据库账号\
????-e SPRING_DATASOURCE_PASSWORD=数据库密码\
????apolloconfig/apollo-configservice:1.9.1
4.?在/home/docker/script/apollo路径下创建“apollo-admin.sh”脚本文件,内容为:
docker run -d \
????--name apollo-adminservice \
????--net=host \
????-v /tmp/logs:/opt/logs \
????-e SPRING_DATASOURCE_URL=
"jdbc:mysql://数据库地址/ctg_apollo_config_test?characterEncoding=utf8" \
????-e SPRING_DATASOURCE_USERNAME=数据库账号\
????-e SPRING_DATASOURCE_PASSWORD=数据库密码\
????apolloconfig/apollo-adminservice:1.9.1
1.7.4 docker拉取apollo
命令:
- docker pull apolloconfig/apollo-configservice:1.9.1
- docker pull apolloconfig/apollo-adminservice:1.9.1
- docker pull apolloconfig/apollo-portal:1.9.1
1.7.5 运行apollo
在/home/docker/script/apollo路径下运行指令
1. chmod 755 apollo-portal.sh
2. chmod 755 apollo-config.sh
3. chmod 755 apollo-admin.sh
执行运行命令
1. ./ apollo-portal.sh
2. ./ apollo-config.sh
3. ./ apollo-admin.sh
1.7.6 使用Apollo配置中心
访问服务器IP:8070可以进行访问,默认的用户名是apollo,密码是admin。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!