본문 바로가기
Docker

nginx(ssl) + django + elk 컨테이너(docker) 기반 서버 배포하기 -2

by reo.l 2021. 10. 1.

 

elk

다음으로는 elk 스택을 구성할 것이다. elk 스택의 경우 elasticsearch, logstash, kibana 각각 dockerFile을 작성하지 않고 docker-compose에서 바로 컨테이너로 올리고 이를 network로 연결하여 사용할 것이다. elk 기본 설정의 경우에는 전에 정리했던 글을 참고하길 바란다.

elk stack 설정 참고 :  https://reo-l.tistory.com/126

 

ubuntu 18.04 에 ELK 설치하기

aws 인스턴스에서 ubuntu 18.04에 ELK를 설치하려고 한다. elk 스택은 java 기반으로 실행되기 때문에 먼저 java 8 버전을 설치하여 준다. $ sudo add-apt-repository ppa:webupd8team/java $ sudo apt-get updat..

reo-l.tistory.com

 

설정 시 주의할 점은 logstash나 kibana 설정에서 host를 작성할 때 localhost 나 ip 가 아닌 컨테이너 명을 적어주어야 한다는 점이다. 

 

elasticsearch.hosts: ["http://elasticsearch:9200"]

 

elk 설정을 완료했다면 docker-compose.yml 파일을 작성해준다.

 

version: '3.3'

services:
    elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.8.1
        command: elasticsearch-plugin install analysis-nori
        volumes:
            - ./ELK/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
            - ./ELK/elasticsearch/config/pipelines.yml:/usr/share/elasticsearch/config/pipelines.yml
            - ./ELK/elasticsearch/data:/usr/share/elasticsearch/data
            - ./ELK/elasticsearch/logs:/var/log/elasticsearch
        ports:
            - "9200:9200"
            - "9300:9300"
        environment:
            ES_JAVA_OPTS: "-Xmx256m -Xms256m"
            ELASTIC_PASSWORD: 'bolt'
        networks:
            - elk

    logstash:
        image: docker.elastic.co/logstash/logstash:7.8.1
        volumes:
            - ./ELK/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
            - ./ELK/logstash/config/pipelines.yml:/usr/share/logstash/config/pipelines.yml
            - ./ELK/logstash/pipeline:/usr/share/logstash/pipeline
            - ./ELK/logstash/postgresql-42.2.23.jar:/usr/share/logstash/postgresql-42.2.23.jar
            - ./ELK/logstash/lib:/var/lib/logstash
            - ./ELK/logstash/log:/var/log/logstash

        ports:
            - "5001:5001/tcp"
            - "5001:5001/udp"
            - "9600:9600"
        environment:
            LS_JAVA_OPTS: "-Xmx256m -Xms256m"
        networks:
            - elk
        depends_on:
            - elasticsearch
    kibana:
        image: docker.elastic.co/kibana/kibana:7.8.1
        volumes:
            - ./ELK/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
        ports:
            - "5601:5601"
        networks:
            - elk
        depends_on:
            - elasticsearch
networks:
    elk:
        driver: bridge

 

ELK/elasticsearch, ELK/logstash, ELK/kibana 에 각각 설정 파일들을 넣어주고 volumes로 연결하면 컨테이너에 설정 파일이 적용된다. elasticsearch 설정을 보면 nori 필터를 사용할 예정이기에 command로 설치해주었고 environment의 경우 ES_JAVA_OPTS 설정에 heap 사이즈를 정해주는데 이때 최솟값과 최댓값을 같게 설정하기를 권장한다고 하여 256m으로 설정하였다. 필요한 경우 더 늘려도 된다. logstash와 kibana의 경우 elasticsearch가 up 한 후에 실행되어야 하기 때문에 depends_on: elasticsearch를 설정하여 준다. 마지막으로 bridge network를 설정하였는데 컨테이너 애플리케이션 통신이 필요하기에 설정하였다(networks로 연결된 elk 스택은 각 port로 열려 서로 연결되어 실행되게 된다).

 

이렇게 하면 elk docker-compose 설정은 끝이 났다. 이제 전에 만든 nginx + django와 elk를 연결하기만 해 주면 끝이 난다.

 

nginx + django + elk

 

version: '3.4'

services:

    web:
        image: nginx:latest
        volumes:
          - ./boltnnut_platform:/srv/docker-server
          - ./conf.d:/etc/nginx/conf.d
          - ./certbot/conf:/etc/nginx/ssl
          - ./certbot/data:/var/www/certbot
        ports:
            - 80:80
            - 443:443
        networks:
            - elk
        depends_on:
            - django

    django:
        container_name: django
        build: .
        image: test/django
        restart: always
        command: uwsgi --ini .config/uwsgi/uwsgi.ini
        volumes:
        - ./boltnnut_platform:/srv/docker-server
        - ./log:/var/log/uwsgi

    certbot:
        image: certbot/certbot:latest
        command: certonly --webroot --webroot-path=/var/www/certbot --email test@gmail.com --agree-tos --no-eff-email -d test.platform.com
        volumes:
            - ./certbot/conf:/etc/letsencrypt
            - ./certbot/logs:/var/log/letsencrypt
            - ./certbot/data:/var/www/certbot


    elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.8.1
        command: elasticsearch-plugin install analysis-nori
        volumes:
            - ./ELK/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
            - ./ELK/elasticsearch/config/pipelines.yml:/usr/share/elasticsearch/config/pipelines.yml
            - ./ELK/elasticsearch/data:/usr/share/elasticsearch/data
            - ./ELK/elasticsearch/logs:/var/log/elasticsearch
        ports:
            - "9200:9200"
            - "9300:9300"
        environment:
            ES_JAVA_OPTS: "-Xmx256m -Xms256m"
            ELASTIC_PASSWORD: 'bolt'
        networks:
            - elk

    logstash:
        image: docker.elastic.co/logstash/logstash:7.8.1
        volumes:
            - ./ELK/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
            - ./ELK/logstash/config/pipelines.yml:/usr/share/logstash/config/pipelines.yml
            - ./ELK/logstash/pipeline:/usr/share/logstash/pipeline
            - ./ELK/logstash/postgresql-42.2.23.jar:/usr/share/logstash/postgresql-42.2.23.jar
            - ./ELK/logstash/lib:/var/lib/logstash
            - ./ELK/logstash/log:/var/log/logstash

        ports:
            - "5001:5001/tcp"
            - "5001:5001/udp"
            - "9600:9600"
        environment:
            LS_JAVA_OPTS: "-Xmx256m -Xms256m"
        networks:
            - elk
        depends_on:
            - elasticsearch
    kibana:
        image: docker.elastic.co/kibana/kibana:7.8.1
        volumes:
            - ./ELK/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
        ports:
            - "5601:5601"
        networks:
            - elk
        depends_on:
            - elasticsearch
networks:
    elk:
        driver: bridge

 

여기서 전에 만들었던 elk의 networks를  nginx에도 연결하여 실행되도록 nginx에 networks: elk를 설정해 주고 실행해주면 이미지가 생성되고 컨테이너가 실행된다.

 

docker-compose up --build

 

 

 

 

 

댓글