백엔드 개발자

[#2 Mattermost 알림봇 만들기] -서버연결 본문

SSAFY

[#2 Mattermost 알림봇 만들기] -서버연결

임잠탱 2023. 6. 27. 02:15

 

//ec2 서버 ssh 연결

AWS ec2서버를 만들어 준다.

나는 아마존 리눅스 이미지로 만들어줬다.

 

그리고 연결을 해주려하였는데

bad permissions 이 나왔다. 

chmod 400 ~/downloads/mmkey.cer

만들어준 키의 권한을 제한해줘야한다.

이것은 필수로 요구된다.

 

//다시 연결

ssh -i "~/downloads/mmkey.cer" ec2-user@ec2-54-145-71-82.compute-1.amazonaws.com

SSH 클라이언트 방식으로 연결해주었다.

연결에 성공하면 멋진 새를 볼 수 있다.

 

ssh key 생성

ssh-keygen -t rsa -b 4096 -m PEM

--> Your public key has been saved in /home/ec2-user/.ssh/id_rsa.pub

생성 후 저장된 위치를 알려준다.

 

cd /home/ec2-user/.ssh
cat id_rsa.pub

ssh key 가 생성된 위치로 이동 후 출력하여 복사해주었다.

 

//github 에 등록

내 깃허브로 가서 settings -> SSH and GPG Keys 에 ssh key를 등록해준다.

복사해준 key로 만들어준다.

 

//ec2서버에 git 설치

sudo yum install git
git clone [원하는 레파지토리 ssh]

깃을 설치해 준 후 내 레파지토리와 연결해 주었다.

이제 내 코드 변경 사항을 쉽게 가져오고 쓸 수 있다.

 

//추가로 git 정보도 등록해주겠다.

git config --global user.name [이름]

git config --global user.email [이메일]

git config --list // 확인

 

//python 설치

sudo yum install python

우리의 프로그램을 실행하기 위해 python을 설치해주었다.

 

//가상환경

//격리된 공간에서 라이브러리 관리 해주기.

python -m venv myenv
source myenv/bin/activate

가상환경을 만들고 활성화 시켜주었다.

 

cd mattermostBot
python main.py

git pull 로 받아온 내 프로젝트의 이름이 mattermostBot이다.

이동 후 실행해주었다.

 

//필요한 module 이 없다고 나온다.

//pip install apscheduler;

pip insatll [module]로 없는 것들 모두 설치해준다.

 

이렇게 다 설치해주고

 

pip freeze

이 명령어로 설치된 모듈들을 모두 확인할 수 있다.

 

패키지 관리를 한 곳에서 해주기 위해 requirements.txt 파일을 만들어 한 곳에서 관리해 줄 것이다.

 

pip freeze > requirements.txt

requirements.txt에 저장하여 관리해주도록 하겠다.

 

여기서도 urllib3 를 버전 1.26.6로 변경해주어야 한다.

vim requirements.txt

들어가서 i누르고 버전을 수정한다.

그리고 esc 키를 누르고 :wq로 저장하여 나온다.

source ~/requirements.txt // 변경내용 저장.

 

pip install -r requirements.txt
// 다시 이 파일에 기록된 버전으로 설치한다.

 

## 문제 발생

 

이제 다 완료되었는데 안돼서 정말 엄청나게 삽질을 했다.

모듈이 하나 없는게 있었는데 그것때문인줄 알고 엄청 고생했는데 서버시간 동기화가 안돼서 원하는 결과가 안나오는 것이었다

 

date 명령어로 시간을 확인하니 내 local 시간과 다르게 나왔고 서버시간과 동기화를 해주었다.

https://anggeum.tistory.com/entry/AWS-EC2-%EC%84%9C%EB%B2%84-%EC%8B%9C%EA%B0%84-%EB%8F%99%EA%B8%B0%ED%99%94-%EB%B0%8F-%ED%83%80%EC%9E%84%EC%A1%B4-%EC%84%A4%EC%A0%95

이 글을 참조했다.

 

sudo vim /etc/chrony.conf

# use the Amazon Time Sync Service (if available)

server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4

이 코드를 추가해준다.

 

# 시스템 부팅될 때마다 시작하도록 설정

sudo chkconfig chronyd on

 

sudo vim /etc/sysconfig/clock

//기존코드를 seoul로 설정하기 위해 대체해준다.

ZONE="Asia/Seoul" KST=True

 

//UTC 삭제

sudo rm /etc/localtime

 

//한국 표준시간대로 변경

sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

 

이제 date 를 확인해보면 제대로 나오는 것을 볼 수 있다.

 

이제 프로젝트로 이동하여

코드의 변경사항이 있다면 pull 해주고 실행해본다.

 

-> cd 프로젝트명

-> git pull

 

pip install -r requirements.txt //안되면 pip3로 변경

 

//실행해준다.

python main.py 

 

//mm 봇알림 화면

이제 드디어 원하는 결과를 얻는데 성공했다!!!

 

자 그런데 이제 터미널을 종료해도 ->  서버와 연결이 끊어져도 

프로그램은 항상 실행이 되게 해주어야한다.

demon프로그램으로 실행되도록 할 수 있지만 자동배포 빌드까지 관리해주기 위해 jenkins를 도전해보자!!!

 

그럼 여기부터 다음편에 이어지겠다 ~~

 

 

 

Comments