만들기/EagleEye

[EagleEye][환경세팅] 채팅 서버 설치 (Vartalap) - 1차 시도

pythaac 2022. 5. 3. 15:54

https://github.com/pythaac/chat-server

 

GitHub - pythaac/chat-server: A chat server based on the microservice architecture to ensure high availability, high throughput,

A chat server based on the microservice architecture to ensure high availability, high throughput, horizontal scalability - GitHub - pythaac/chat-server: A chat server based on the microservice a...

github.com

 

 

1차 예상 구성

환경 세팅

  • npm 설치
    >> sudo apt install npm -y

 

Steps 따라해보기

  • RaspberryPi-1 / zk01 / server-1 에서 진행
  • 1. Clone the master branch of the project
    >> mkdir vartalap
    >> cd vartalap
    >> git clone https://github.com/pythaac/chat-server.git
  • 2. Install dependencies
    >> cd chat-server && npm install

  • 3. Make copy of .env.tmpl to .env and update the required variables
    >> cp .env.tmpl .env
    >> vi .env
  • 수정해본 것
    • 8002 포트 열기 (???)
      >> ufw allow 8002
    • 27017 포트 열기 (MongoDB)
      >> ufw allow 27017
    • MongoDB
      - MONGO_URL=mongodb://zk03:27017/chat
      - MONGO_USER / MONGO_PASSWORD
    • Redis
      - REDIS_ENDPOINT=zk02:6379
    • Firebase
      >> npm install firebase
      - FIREBASE_PROJECT_ID
      - 서비스 계정 키 생성
서비스 계정 키 생성
1. 프로젝트 설정 > 서비스 계정
2. Firebase Admin SDK > Node.js > 새 비공개 키 생성
3. 생성된 file을 FIREBASE_ADMIN_CRED_JSON_PATH에 copy (service.json으로 rename)

  • 4. (일단 해보기) initialize Kafka
    >> cd deployment/scripts
    >> ./init-kafka.bash /usr/local/kafka ../../.env

/deployment/scripts/setup.bash
- 기본적으로 필요한 파일을 생성하는듯?
discovery_service도 생성해서 만들어야할듯

  • discovery_service 설정파일 생성
    >> cp services.json.example services.json

 

  • [실패] 실행 시도
    >> docker-compose -f docker-compose.yml -f docker-compose.local.yml up -d

  • [에러] Version unsupported
    • 내 compose version이 1.25
    • 아래 docs에서 확인하니 1.27 버전 이상이여야 한다고 함

 

Docker-compose 버전 업데이트

  • docker-compose 삭제
    >> sudo apt remove docker-compose -y
    >> sudo apt purge docker-compose -y (not installed로 뜸)
  • [실패] 업그레이드 하면 버전 올라간대서 해봄
    >> sudo apt-get upgrade
    (커널버전 올라가길래 딱히 종속성 있는 게 없는 것 같아서 3대 모두 진행)

https://dev.to/elalemanyo/how-to-install-docker-and-docker-compose-on-raspberry-pi-1mo

 

How To Install Docker and Docker-Compose On Raspberry Pi

RaspberryPi ARMed with Docker and Docker-Compose

dev.to

  • pip3로 설치 시도
    >> sudo apt-get install libffi-dev libssl-dev -y
    >> sudo apt install python3-dev -y
    >> sudo apt-get install -y python3 python3-pip
  • [에러] docker-compose가 실행되지 않음
    >> docker-compose version

https://serverfault.com/questions/1007807/why-does-docker-compose-issue-a-no-such-file-or-directory-when-the-file-is-the

 

Why does docker-compose issue a "No such file or directory" when the file is there?

I am testing a bare metal recovery of my server which basically starts a set of docker container with my services. I recovered from a backup /etc/docker, where I keep all the configuration and pers...

serverfault.com

  • [해결] 아래 명령으로 문제 해결
    >> su
    >> pip3 install --upgrade --force-reinstall --no-cache-dir docker-compose && ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose

 

환경 변수 불러오기

https://sistinafibel.github.io/2019/07/18/Node-%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98%EB%A5%BC-%EA%B4%80%EB%A6%AC%ED%95%98%EB%8A%94-.env%ED%8C%8C%EC%9D%BC-%EB%A7%8C%EB%93%A4%EA%B8%B0.html

 

[Node] 환경변수를 관리하는 .env파일 만들기 - DevLog

개발과 세상 사는 이야기를 담았습니다.

sistinafibel.github.io

https://blog.leocat.kr/notes/2021/05/15/docker-use-env-file

 

[Docker] docker-compose 파일에서 환경설정(.env file) 사용하기

docker-compose를 사용할 때 환경 마다 다른 설정값을 사용하고 싶을 때가 있다.

blog.leocat.kr

  • dotenv 설치
    >> npm install dotenv
  • [실패] 다시 실행
    >> sudo docker-compose --env-file ../.env -f docker-compose.yml -f docker-compose.local.yml up -d

  • .env에 CONFIG_DIR 추가
    - CONFIG_DIR=/home/ubuntu/vartalap/chat-server/deployment/config
  • .env에 CHAT_SERVER_TAG추가
    • [실패] docker image의 tag 확인하기
      - 여러 방법들이 있지만 docker hub의 remote registry의 tag를 확인하는 편한 방법은 없음
    • docker pull로 땡겨오기
      >> docker pull ramank775/chatserver
      - tag가 default로 latest로 붙음
    • 다음을 추가
      - CHAT_SERVER_TAG=latest
  • [실패] 재시도
    >> sudo docker-compose --env-file ../.env -f docker-compose.yml -f docker-compose.local.yml up -d

  • [실패] 해당 서버에서 nginx가 실행중이라 그런듯
    • nginx를 죽임
      >> systemctl stop nginx.service
      >> systemctl status nginx.service (죽었는지 확인)
    • 재시도
      >> sudo docker-compose down (컨테이너를 모두 죽임)
      >> sudo docker-compose --env-file ../.env -f docker-compose.yml -f docker-compose.local.yml up
      - 똑같음
  • 8080을 사용하는 프로세스 찾기
    • port를 사용하는 프로세스의 PID
      >> sudo lsof -t -i:8080
    • PID의 프로세스 찾기
      >> netstat -nltp

 

Zookeeper admin port 바꾸기

  • Zookeeper였음
    • zookeeper가 admin default port로 8080을 사용

https://stackoverflow.com/questions/59943241/zookeeper-admin-server-port

 

Zookeeper admin server Port

Installed zookeeper 3.5.6 bin on windows. Getting error: Unable to start AdminServer, exiting abnormally org.apache.zookeeper.server.admin.AdminServer$AdminServerException: Problem starting AdminSe...

stackoverflow.com

  • zookeeper admin port 바꾸기
    >> sudo vi /usr/local/zookeeper/conf/zoo.cfg
    - admin.serverPort=59959
  • zookeeper 내렸다 올리기
    >> systemctl restart zookeeper-server.service
  • 8080 포트 확인
    >> sudo lsof -t -i:8080

 

  • [실패] 재시도
    >> sudo docker-compose down
    >> sudo docker-compose --env-file ../.env -f docker-compose.yml -f docker-compose.local.yml up

  • .../deplyment/config/nginx에 nginx.conf라는 폴더를 생성
    - 왜지? 싶어서 설정을 바꿔봄
  • .env의 CONF_DIR를 바꾸기
    >> vi .env
    - CONF_DIR=/home/ubuntu/vartalap/chat-server/tmp
  • [실패] 재시도
    >> sudo docker-compose down
    >> sudo docker-compose --env-file ../.env -f docker-compose.yml -f docker-compose.local.yml up -d
    - 똑같음

 

중간 진행사항 정리

  • 로컬 환경에서 docker에 모두 잘 올라가는 것까지 확인하려했으나 너무 길어져서 실패
    - nginx 외에는 잘 동작하는듯
  • Todo
    • Nginx 정상 동작으로 만들기
    • 위 진행사항을 실패한 내용 빼고 정리하기