最近搞了一個(gè)阿里云輕量應(yīng)用服務(wù)器,就想搗騰一番。試著用了
docker搭建es,kibana,nginx實(shí)現(xiàn)認(rèn)證登錄kibana,中途遇到一些坑。這里記錄一下,幫助有需要的人。
效果如下:

這里我使用的系統(tǒng)是Centos7!??!
1. 首先要搞定的的是docker
centos 系統(tǒng)中docker必須在內(nèi)核版本高于 3.10的環(huán)境中才能運(yùn)行 ,所以來檢查一下自己的系統(tǒng)是否滿足條件吧。
1.1 執(zhí)行下面的命令(顯示內(nèi)核版本):
uname -r

1.2 安裝docker
yum -y install docker-ce
就是上面一行代碼就可以安裝好docker,使用yum docker的安裝還是比較簡單的,這里的docker-ce其實(shí)是社區(qū)免費(fèi)版,docker也有商業(yè)版,不過要收費(fèi)。
1.3 啟動(dòng)docker
systemctl start docker
2. 然后要搞定的的是es,nginx,kibana鏡像下載
docker安裝elasticsearch也是很方便的,我們可以先用docker的search命令搜索一下。
docker search elasticsearch

按照名稱下載第一個(gè)就可以了
默認(rèn)是下載最新版的,如果要指定版本,可以直接進(jìn)docker hub

這里我直接下載最新版的
docker pull elasticsearch
同樣的方式我這里就一起將nginx和kibana一起下載了。
docker pull nginx
docker pull kibana
命令執(zhí)行完。我們就可以通過docker images或docker image ls查看下載好的鏡像了。

這里有一點(diǎn)要注意,
kibana的版本要和elasticsearch保持一致。
3. 接著要搞定的的是es,nginx,kibana容器運(yùn)行
首先把網(wǎng)絡(luò)創(chuàng)建出來,docker network命令,使用方式如下圖

使用命令創(chuàng)建網(wǎng)絡(luò):
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
這個(gè)時(shí)候容器就都創(chuàng)建好并且運(yùn)行起來了。
后面只需要進(jìn)入各個(gè)容器中將配置文件改成自己需要的就既可以了。
4. 接著要搞定配置文件
nginx設(shè)置了掛載目錄和配置文件,直接在本地文件系統(tǒng)中/home/nginx/conf/nginx.conf編輯這個(gè)文件就可以。剛開始是沒有這個(gè)文件的,我們需要自己創(chuàng)建。也可以直接復(fù)制nginx容器中的進(jìn)行編輯。

/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之間有個(gè)空格的啊
#gzip壓縮文件格式,以下涵蓋了一般所需的類型
gzip_types text/plain application/x-javascript text/css application/xml application/javascript application/json;
#gzip壓縮等級(jí),數(shù)值越高壓縮得越狠,也越占資源
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 / {
# 設(shè)置 auth
auth_basic "kibana login auth";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
# 轉(zhuǎn)發(fā)到 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只需要配置上面兩個(gè)就可以了,這樣就可以實(shí)現(xiàn)kibana認(rèn)證登錄才能訪問了。
5. 遇到的坑和要注意的事項(xiàng)
-
上面創(chuàng)建容器時(shí)配置了端口映射,但是還是訪問不到的,可能你防火墻限制了
阿里云防火墻配置圖
