最近搞了一个阿里云轻量应用服务器,就想捣腾一番。试着用了
docker搭建es,kibana,nginx实现认证登录kibana,中途遇到一些坑。这里记录一下,帮助有需要的人。
效果如下:

这里我使用的系统是Centos7!!!
1. 首先要搞定的的是docker
centos 系统中docker必须在内核版本高于 3.10的环境中才能运行 ,所以来检查一下自己的系统是否满足条件吧。
1.1 执行下面的命令(显示内核版本):
uname -r

1.2 安装docker
yum -y install docker-ce
就是上面一行代码就可以安装好docker,使用yum docker的安装还是比较简单的,这里的docker-ce其实是社区免费版,docker也有商业版,不过要收费。
1.3 启动docker
systemctl start docker
2. 然后要搞定的的是es,nginx,kibana镜像下载
docker安装elasticsearch也是很方便的,我们可以先用docker的search命令搜索一下。
docker search elasticsearch

按照名称下载第一个就可以了
默认是下载最新版的,如果要指定版本,可以直接进docker hub

image.png
这里我直接下载最新版的
docker pull elasticsearch
同样的方式我这里就一起将nginx和kibana一起下载了。
docker pull nginx
docker pull kibana
命令执行完。我们就可以通过docker images或docker image ls查看下载好的镜像了。

这里有一点要注意,
kibana的版本要和elasticsearch保持一致。
3. 接着要搞定的的是es,nginx,kibana容器运行
首先把网络创建出来,docker network命令,使用方式如下图

使用命令创建网络:
docker network create es-net
然后把容器搞起来,使用如下命令即可:
es:
docker run -d -p 9200:9200 --network es-net --name es docker.id/elasticsearch(或使用镜像id)
docker run -e ES_JAVA_OPTS="-Xms1024m -Xmx1024m" -e "discovery.type=single-node" -d -p 9200:9200 -p 9300:9300 --name es elasticsearch
kibana:
docker run -p 5601:5601 --name kibana --network es-net -e \
"elasticsearch.hosts=http://es:9200" -d docker.id/kibana(获取镜像id)
nginx
docker run --name nginx -p 80:80 --network es-net \
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf.d:/etc/nginx/conf.d \
-v /home/nginx/www:/usr/share/nginx/html \
-d docker.io/nginx
这个时候容器就都创建好并且运行起来了。
后面只需要进入各个容器中将配置文件改成自己需要的就既可以了。
4. 接着要搞定配置文件
nginx设置了挂载目录和配置文件,直接在本地文件系统中/home/nginx/conf/nginx.conf编辑这个文件就可以。刚开始是没有这个文件的,我们需要自己创建。也可以直接复制nginx容器中的进行编辑。

/home/nginx/conf/nginx.conf
worker_processes 1;
error_log /var/log/nginx/error.log warn;
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;
#需要压缩文件的最小尺寸,单位是B
gzip_min_length 1000;
#gzip文件缓存大小
gzip_buffers 4 8k; # 4和8之间有个空格的啊
#gzip压缩文件格式,以下涵盖了一般所需的类型
gzip_types text/plain application/x-javascript text/css application/xml application/javascript application/json;
#gzip压缩等级,数值越高压缩得越狠,也越占资源
gzip_comp_level 3;
include /etc/nginx/conf.d/*.conf;
}
/home/nginx/conf.d/kibana.conf
server{
listen 80;
server_name kibana.infomany.cn;
location / {
# 设置 auth
auth_basic "kibana login auth";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
# 转发到 kibana
proxy_pass http://kibana:5601;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
nginx只需要配置上面两个就可以了,这样就可以实现kibana认证登录才能访问了。
5. 遇到的坑和要注意的事项
-
上面创建容器时配置了端口映射,但是还是访问不到的,可能你防火墙限制了
阿里云防火墙配置图
