java微服务开发(基础环境篇)
我们的目标是~~浩瀚的宇宙~~ 全栈开发
俗话说的好 工欲善其事 必先利其器 对于一个开发者来说 一个好的开发环境可以带来的收益是巨大的
本篇的重点主要是linux上一的一些环境的安装 主要是docker
本篇涉及到的是一些开发时候使用到的环境包括Windows环境和Linux环境
Windows环境
我的日常开发环境就是Windows 虽然大伙都推荐程序员使用mac 但是没办法 咱们也没有闲钱啊 所以一个正常的Windows开发环境就非常重要了
Windows版本建议使用Windows10或者Windows7
推荐:Windows10 下载安装地址:链接
内存: 推荐内存16G
不会现在还有人用4g内存的Windows10开发微服务吧 不会吧 不会吧
基础环境配置
基础环境没啥好说的 jdk你的会安装配置吧 不管是Windows还是Linux
git的基本使用你得会用吧
现在都是spring boot项目了 maven要会使吧,到处copy jar包到resources spring的几个jar不兼容 maven都可以解决这些难题
Windows基础环境配置主要是jdk,git,maven
jdk
jdk可是Java程序员的命根子了 入门和他打交道 到达架构师级别 也要和他打交道 面试会问jvm 工作要依赖他跑项目 我愿称之为java程序员的一生之敌
jdk是开发Java必备的环境 推荐为jdk1.8及其以上
下载后默认安装
配置环境变量: 百度
不会还有人觉得我会在这里详细写安装jdk和配置环境变量吧
git
git也是工作中常用的工具了,不管你的项目是大还是小 我都建议使用git来管理 并且找一个稳定的git仓库来保存
比如国外的github 国内的gitee也可以自建gitlab 或者gogs
GIT(分布式版本控制系统)
是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
下载地址: 链接
下载后默认安装
maven
maven啊 通俗一点就是一个管理jar包的工具 让你可以不用手动的去copy jar 管理各个版本的jar包
比如spring4下.的jar 和spring5.x的jar肯定是有兼容问题的 可以通过maven方便的管理 只要给出jar的坐标就可以了
maven是现在主流的项目构建工具,但是目前spring正在淡化maven 转而推荐gradle
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件
maven官网地址: 链接
下载地址: 链接
配置: 链接
配置maven的中央仓库地址
编辑maven_home/config/settings.xml
找到
在最后添加如下xml代码
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
配置localRepository (本地仓库存放地址 即为存放jar包和坐标的地址)
编辑maven_home/config/settings.xml
找到settings
在下面添加如下代码 (这里的E:\repo为E盘下的repo文件夹 如果没有 请提前创建 可替换成自己的文件夹)
<localRepository>E:\repo</localRepository>
验证maven安装
C:\Users\Administrator>mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: D:\maven-3.6.3\bin\..
Java version: 11.0.2, vendor: Oracle Corporation, runtime: D:\jdk
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
开发工具配置
开发工具为日常开发中我使用到的一些开发工具
IDEA
IDEA 和 eclipse都是比较常用的java开发ide 在我刚学习的时候我就使用的是eclipse 在后来的某一次使用过IDEA后就很少打开eclipse了
IDEA是我推荐使用的Java开发的IDE也是我正在使用的主力IDE
官网地址: 链接
下载地址: 链接
如何激活 以及其他快捷配置 请问百度: 链接
下载后默认安装
配置IDEA 主要配置maven
打开-File-Settings
Visual Studio Code
vs code是微软出的一个ide 目前我也就使用它开发过前端 开发Java我觉得还是idea好
vs code是一个基本上还算是全能的ide了 但是我还是觉得用来开发前端 html vue比较方便
visual studio code官网: 链接
下载地址: 链接
配置vs code
主要在扩展中启用如下扩展
XShell
xshell是目前主流的ssh链接工具 (主要是Free for Home xshell中一个窗口不能超过4个链接Xftp中不能超过2个)
官网: 链接
下载地址: 链接
下载完成后默认安装
Navicat Premium 12
Navicat Premium 12是一款数据库可视化工具 可以用于管理mysql,postgre,oracle,sqlite,sqlserver,mariadb,mongondb链接
官网: 链接
下载地址: 链接
下载完成后解压默认安装
PDMan
PDMan是一款开源免费的数据库模型建模工具,支持Windows,Mac,Linux等操作系统,是PowerDesigner之外,更好的免费的替代方案。他具有颜值高,使用简单的特点。包含数据库建模,灵活自动的自动生成代码模板,自动生成文档等多种开发人员实用的功能。
下载地址: 链接
下载完成后默认安装
AnotherRedisDesktopManager
Redis桌面管理器 - 是一个用于Windows,Linux和MacOS的快速开源Redis数据库管理应用程序。
官网地址: 链接
下载地址: 链接
下载完成后默认安装
Postman
Postman是一款功能强大的网页调试与发送网页HTTP请求的软件
官网地址: 链接
下载地址: 链接
下载完成后解压默认安装
Linux环境
作为一个开发人员 肯定要对Linux环境比较熟悉才行 其实Linux对于开发人员来说 说要掌握的命令并不是很多 日常的命令+一些中间件的操作命令一般就够了
Linux环境对Linux的发行版本没有具体要求 只要不是太老的一般都可以 后面的中间件都是运行在docker上面
Linux的发行版本太多了 我这里推荐 Centos7+ Ubuntu16+ 我使用的是centos7.7
基础环境配置
本次演示使用centos7作为演示
centos7下载地址: 链接
安装Linux
下载上面提供的镜像
在VMware里的前置安装请百度: 地址
建议cpu: 4核 内存: 8G
启动虚拟机后选择install centos 7
语言直接默认 点击continue
配置网络
等待一会后点击NETWORK & HOSTNAME
按下图修改
配置安装位置
点击INSTALLATION DESTINATION
选中硬盘 然后点击Done
开始安装
点击Begin Installation
配置root账号的密码
点击 ROOT PASSWORD
输入root密码 两次一致 点击Done 一次不行就两次(实际上是密码太短 点击两次确认使用弱密码)
等待一段时间 点击reboot
重启完成后登录
用户名:root
密码:你设置的密码
验证安装
登录完成后 使用 ip addr 查看你的IP地址
至此 centos的基本安装完毕
配置Linux
XShell登录
使用上节记录查看到的ip地址用XShell登录
更新
首先先更新一下centos的依赖
yum update -y
安装vim
这个centos是最小安装的镜像 默认没有安装vim文本编辑
等待上面更新的命令执行完毕后 执行以下命令
yum install vim -y
关闭防火墙
因为是开发环境的配置 为了方便我们开发 所以先关闭掉centos的防火墙
systemctl stop firewalld
systemctl disable firewalld
附: centos防火墙基本使用
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用: systemctl disable firewalld
开机启用: systemctl enable firewalld
至此 centos的基本配置完毕
Docker安装
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
docker是现在非常火热的容器化平台
基于centos7.7安装docker
卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
使用yum 安装依赖
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
添加依赖
sudo yum-config-manager \
--add-repo \
https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
安装docker ce
sudo yum makecache fast
sudo yum install docker-ce -y
启动docker
sudo systemctl enable docker
sudo systemctl start docker
测试 Docker 是否安装正确
docker run hello-world
配置docker的镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://uz6p4blc.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
验证docker镜像加速
使用docker info命令
[root@centos ~]# docker info
Client:
Debug Mode: false
Server:
Containers: 7
Running: 6
Paused: 0
Stopped: 1
Images: 7
Server Version: 19.03.12
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-862.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 7.545GiB
Name: centos
ID: 3QOG:3RWM:H72U:QIRL:NBYC:4ZHN:AAUA:AWZI:PWSE:3VTY:TPL3:KZTY
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://uz6p4blc.mirror.aliyuncs.com/
Live Restore Enabled: false
[root@centos ~]#
看到Registry Mirrors是你刚刚配置的即为配置成功
docker-compose安装
docker-compose是docker三剑客的其中一个 docker-compose可以大量简化我们得Linux命令 只用一个yml文件就可以实现对docker容器得编排
可以说非常方便了 而且以后的k8s里也运用到了大量的yml 这里可以提前熟悉一下这些语法
Docker Compose是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用。使用 compose,我们可以通过 YAML 文件声明式的定义应用程序的各个服务,并由单个命令完成应用的创建和启动
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
验证docker-compose是否安装正确
[root@centos ~]# docker-compose -v
docker-compose version 1.25.4, build 8d51620a
开发环境配置
完成docker的以及docker-compose的安装以后 开始陆续进行一些基础中间件的安装
在下面都使用docker-compose进行安装
安装MySQL
mysql可以说是最常用的关系型数据库之一了
# 在/root/新建一个mysql文件夹
mkdir msqyl
cd mysql
# 新建一个mysql.yml的文件
vim mysql.yml
# 按键盘上的i进入插入模式
粘贴下面的任意一个yml配置文件到mysql.yml然后按esc 输入 :wq
MySQL 5.7
version: '3.1'
services:
mysql:
restart: always
image: mysql:5.7.22
container_name: mysql
ports:
- 3306:3306
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=128M
--sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
MySQL 8.x
version: '3.1'
services:
db:
image: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
ports:
- 3306:3306
volumes:
- ./data:/var/lib/mysql
完成后执行
docker-compose -f mysql.yml up -d
等待启动
验证msyql的运行
输入docker ps
[root@centos mysql]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
31b2d245e8e3 adminer "entrypoint.sh docke…" 16 seconds ago Up 15 seconds 0.0.0.0:8080->8080/tcp mysql_adminer_1
f82b2c585931 mysql "docker-entrypoint.s…" 16 seconds ago Up 15 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql_db_1
使用Navicat Premium 12链接msyql
输入连接名 你的主机地址
用户名:root
密码: 123456
显示链接成功即可
安装redis
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助
redis是目前最火热的非关系行数据库 key-value类型的数据库
# 在/root/新建一个redis文件夹
mkdir redis
cd redis
# 新建一个redis.yml的文件
vim redis.yml
# 按键盘上的i进入插入模式
粘贴下面的yml配置文件到redis.yml然后按esc 输入 :wq
version: '3.1'
services:
master:
image: redis
container_name: redis-master
ports:
- 6379:6379
完成后执行
docker-compose -f redis.yml up -d
等待启动
验证redis的运行
输入docker ps
[root@centos redis]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5eeb447fc8dc redis "docker-entrypoint.s…" 35 seconds ago Up 34 seconds 0.0.0.0:6379->6379/tcp redis-master
31b2d245e8e3 adminer "entrypoint.sh docke…" 6 minutes ago Up 6 minutes 0.0.0.0:8080->8080/tcp mysql_adminer_1
f82b2c585931 mysql "docker-entrypoint.s…" 6 minutes ago Up 6 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql_db_1
使用RedisDesktopManager链接redis
点击链接到redis
输入名字 地址后
点击测试链接 显示链接redis服务器成功即可
安装rabbitmq
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
rabbitmq是目前我经常使用的一块消息队列中间件
# 在/root/新建一个rabbitmq文件夹
mkdir rabbitmq
cd rabbitmq
# 新建一个rabbitmq.yml的文件
vim rabbitmq.yml
# 按键盘上的i进入插入模式
粘贴下面的yml配置文件到redis.yml然后按esc 输入 :wq
version: '3.1'
services:
rabbitmq:
restart: always
image: rabbitmq:management
container_name: rabbitmq
ports:
- 5672:5672
- 15672:15672
environment:
TZ: Asia/Shanghai
RABBITMQ_DEFAULT_USER: rabbit
RABBITMQ_DEFAULT_PASS: 123456
volumes:
- ./data:/var/lib/rabbitmq
完成后执行
docker-compose -f rabbitmq.yml up -d
等待启动
验证rabbitmq的运行
[root@centos rabbitmq]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f422789ff3f1 rabbitmq:management "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp rabbitmq
5eeb447fc8dc redis "docker-entrypoint.s…" 31 minutes ago Up 31 minutes 0.0.0.0:6379->6379/tcp redis-master
31b2d245e8e3 adminer "entrypoint.sh docke…" 36 minutes ago Up 36 minutes 0.0.0.0:8080->8080/tcp mysql_adminer_1
f82b2c585931 mysql "docker-entrypoint.s…" 36 minutes ago Up 36 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql_db_1
浏览器上输入ip:15672
用户名: rabbit
密码: 123456
安装elk日志收集
ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称。市面上也被成为Elastic Stack。其中Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用Elasticsearch作为底层支持框架,可见Elasticsearch提供的搜索能力确实强大,市面上很多时候我们简称Elasticsearch为es。Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。Kibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能。
# 在/root/新建一个elk文件夹
mkdir elk
cd elk
# 新建一个elk.yml的文件
vim elk.yml
# 按键盘上的i进入插入模式
复制如下内容到elk.yml
elk.yml
version: "3"
services:
elasticsearch:
image: registry.cn-hangzhou.aliyuncs.com/yalong_lee_release/elasticsearch:v7.4.1
ports:
- "9200:9200"
- "9300:9300"
restart: "always"
container_name: elasticsearch
hostname: elasticsearch
environment:
- "discovery.type=single-node"
- "cluster.name=EsForLog"
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- ./data:/usr/share/elasticsearch/data
kibana:
image: registry.cn-hangzhou.aliyuncs.com/htsec/kibana:7.4.1
restart: "always"
container_name: kibana
hostname: kibana
volumes:
- ./kibana.yml:/usr/share/kibana/config/kibana.yml
links:
- elasticsearch:es01
depends_on:
- elasticsearch
ports:
- "5601:5601"
logstash:
image: registry.cn-hangzhou.aliyuncs.com/logss/logstash:7.4.1
restart: "always"
container_name: logstash
hostname: logstash
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
links:
- elasticsearch:es01
depends_on:
- elasticsearch
ports:
- "5044:5044"
在elk目录下创建一个data 并且给与权限
mkdir data
chmod 777 data
在elk下创建kibana配置文件
vim kibana.yml
复制如下内容到kibana.yml
kibana.yml
elasticsearch.hosts: http://es01:9200
server.host: "0.0.0.0"
server.name: kibana
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: zh-CN
在elk下创建logstash配置文件
vim logstash.conf
复制如下内容到logstash.conf
logstash.conf
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 5044
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["http://es01:9200"]
index => "%{[appname]}-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
}
}
完善上述操作后执行
docker-compose -f elk.yml up -d
等待elk的运行
[root@centos elk]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eb6edbb49907 registry.cn-hangzhou.aliyuncs.com/htsec/kibana:7.4.1 "/usr/local/bin/dumb…" 21 minutes ago Up 14 minutes 0.0.0.0:5601->5601/tcp kibana
c99c65029eb8 registry.cn-hangzhou.aliyuncs.com/logss/logstash:7.4.1 "/usr/local/bin/dock…" 21 minutes ago Up 14 minutes 0.0.0.0:5044->5044/tcp, 9600/tcp logstash
346cfcaf5f89 registry.cn-hangzhou.aliyuncs.com/yalong_lee_release/elasticsearch:v7.4.1 "/usr/local/bin/dock…" 21 minutes ago Up 14 minutes 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch
f422789ff3f1 rabbitmq:management "docker-entrypoint.s…" 50 minutes ago Up 50 minutes 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp rabbitmq
5eeb447fc8dc redis "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:6379->6379/tcp redis-master
31b2d245e8e3 adminer "entrypoint.sh docke…" About an hour ago Up About an hour 0.0.0.0:8080->8080/tcp mysql_adminer_1
f82b2c585931 mysql "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:3306->3306/tcp, 33060/tcp mysql_db_1
验证elk的运行
在浏览器输入ip:5601进入kibana的后台页面
附录: docker常用命令
### 查看运行容器
docker ps
### 查看所有容器
docker ps -a
## 进入容器
### 其中字符串为容器ID:
docker exec -it d27bd3008ad9 /bin/bash
### 停用全部运行中的容器:
docker stop $(docker ps -q)
### 删除全部容器:
docker rm $(docker ps -aq)
### 一条命令实现停用并删除容器:
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
### docker所有命令查看:
docker help
```~~中划线~~