[Python] 파이썬 웹크롤링봇 만들기 -6- AWS에서 새글 알림봇 띄우기

in #kr7 years ago (edited)

Main

마지막 마무리 글을 너무 늦게 올렸네요.. 그나마 지키던 10일간격도 한달이 가까이 되다니. 죄송합니다.

이번 글에서는 크게 두가지를 진행하게 됩니다.

첫째, AWS EC2 세팅
두번째, 이전글에 작성한 알람봇 코드를 AWS에서 실행

이번글이 새글 알림봇에 대한 마지막입니다. 감사합니다!


6.1. AWS 설정하기

노트북에서 벗어나 자신만의 서버를 만들어 봅니다.
AWS(아마존 웹서비스)에서 ec2 12개월 무료 가상pc를 부여받을 수 있습니다. (가상pc를 보통 인스턴스라고 생각하시면 됩니다)

AWS 에서 회원 가입을 했다는 전제로 시작하겠습니다.

6.1.AWS 설정하기
6.1.1. AWS 회원가입
6.1.2. 콘솔 로그인 EC2 Instance 생성
6.1.3. EC2 Instance Shell에 접속하기
- 맥에서에서 접속하기
- 윈도우에서 접속하기
6.1.4. 서버(인스턴스)에 Jupyter notebook 설치하기
6.2. 새글 알림봇 환경 설정 및 실행
6.2.1. Jupyter notebook 암호 설정하기
6.2.2. Code Upload 및 실행

6.1.1. AWS 회원가입

특별한 사항이 없습니다. 전화인증과 카드인증 과정이 있습니다.
(카드인증은 1$ 승인처리만 되고 과금이 되지 않습니다.)

정상적으로 가입하고 로그인 하면 아래와 같은 화면이 나옵니다.
aws_1

6.1.2. EC2 Instance 생성하기

클라우드에 가상PC를 생성하기 위해서는 EC2 대시보드로 들어가야 합니다. 아래 과정에서 벗어나서 잘못하면 과금이 될 수 있으므로 선택옵션들을 잘지켜서 생성하도록 합니다.
aws_2

여기서 가운데 인스턴스 시작을 누릅니다.
aws_3

인스턴스에 불러들일 이미지를 선택합니다. 우리가 가지고 있는 데스크탑이나 노트북이 클라우드라고 가정한다면, 이미지는 인스턴스에 설치CD를 넣는것과 마찬가지라고 생각하시면됩니다.
여기서 우리는 'Ubuntu Server 16.04 ~' 를 선택합니다.
aws_4

여기서 '검토 및 시작' 을 누르지 마시고 '다음 : 인스턴스 세부 정보 구성' 을 선택합니다.
물론 인스턴스 시작한 이후 설정 변경가능합니다.
aws_5

두가지를 선택하여야 합니다.
'서브넷'은 기본설정 -> subnet 둘중 하나를 선택합니다. 화면에서는 us-west-1b로 선택하였습니다.

바로 아래 퍼블릭 IP자동할당 을 '활성화'로 선택하여 줍니다. [다음]으로 넘어갑니다. (Default 설정값이긴 하나 확실히 하기 위해서..)
aws_6

스토리지선택에서는 최대크기 30G까지 가능합니다. 기본 설정 8기가만 할당하고 넘어가겠습니다.
만약 리눅스 + 윈도우 무료 인스턴스를 쓰신다면 둘의 인스턴스 스토리지의 합이 30G가 넘어가면 과금이 될 수 있습니다.
aws_7

태그는 설정할 필요가 없습니다.
aws_8

외부에서 접속 가능한 네트워크 포트를 성정하는 부분입니다. 모두 오픈하는 경우 보안에 취약해지니 필요한것만 추가하도록 하겠습니다.

기본적으로는 SSH가 TCP 22포트로 설정되어 있고.
규칙추가를 눌러 TCP 를 선택하여 포트범위 8888, 8443 두개를 아래 그림과 같이 설정합니다.

8888은 Jupyter notebook접속을 위한 포트이고 8443은 텔레그램 서버와 통신하는데 사용될 포트입니다. 22포트는 shell원격 접속을 위한 기본 포트입니다.

소스 의미는 외부에서 접속가능한 Ip 주소를 말합니다. 그림에서와 같이 0.0.0.0은 모두 아이피로 부터 접속을 받는다는 뜻입니다.

검토 및 시작을 눌러서 인스턴스를 시작합니다.
aws_9

시작을 누르면 아래와 같이 키페어를 생성할지 묻는 화면이 나옵니다. 해당 서버에 접속하려면 이 키페어 파일이 필요합니다.

새키를 생성하여 다운로드 합니다. 키파일 이름을 지정해 주어야 합니다. 해당 파일이 없으면 접속이 불가하니 잘 관리해주세요.

aws_10

모든 과정이 끝나면 대시보드 메뉴에서 '인스턴스'를 눌러보면 생성된 가상PC를 확인 할수 있습니다.
하단부 인스턴스 정보에 IPv4 퍼블릭 IP 적어 놓습니다. 해당 숫자로 된 주소가 우리가 생성한 EC2서버 IP 주소(접속 주소)입니다.
바로 위의 '퍼블릭~~ 부분에' DNS 주소로도 접속 가능합니다.
aws_11

6.1.3. EC2 Instance Shell 에 접속하기.

기본적으로 리눅스 운영체제는 CLI- 커맨드라인 인터페이스를 사용해야합니다. 우분투os 는 윈도우와 같이 그래픽 인터페이스가 있지만 따로 설치를 해줘야 합니다. (본과정에서는 생략합니다.)

  • 맥에서 접속하기

    생성된 EC2 서버에 접속하려면 터미널을 통해서 커맨드를 입력해야 합니다. 터미널을 열어서 다운로드 받은 키파일이 있는 곳으로 이동합니다.

    터미널상에서 폴더 이동은 'cd [대상폴더 이름]' 명령어를 입력합니다. 기본적으로 '~'으로 표시되어 있는 부분은 home폴더로 지정되어 있음을 의미하며 터미널 오픈시 기본지정되는 경로입니다. 만약 download 폴더에 키파일 ([생성시이름].pem) 을 다운로드 하였다면, cd download로 해당 폴더 이동 후 아래 커맨드를 입력합니다.

접속 명령어
ssh -i [Key pair filename] ubuntu@[Public DNS]

aws_12

정상적으로 접속되었다면 아래와 같은 화면이 출력됩니다.
aws_13

  • 호스트 부분에 우리가 서버 생성 마지막에 적어 놓은 퍼블릭IP 를 입력합니다.

6.1.4. 서버에 Jupyter notebook 설치하기

역시 CLI로만 설치를 해야합니다. 만약 쉘로 서버에 접속을 완료하였다면 아래 명령으로 Anaconda를 다운로드 받습니다. ( Anconda 최신버전 확인은 여기서 )

wget https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86_64.sh

다운로드가 완료되었다면 아래 명령어로 설치를 진행합니다. 약관은 yes 입력, Anaconda 경로는 'Enter' 치시면 됩니다.

bash ./Anaconda3-5.1.0-Linux-x86_64.sh

conda_1

마지막, basrc 에 Anaconda 경로를 추가 할것인지에 대해서 묻습니다. yes로 해주어야 ubuntu에 기본적으로 설치된 python대신 Anaconda 패키지로 설치한 Python이 실행됩니다.
conds3

마지막인줄 알았는데, Microsoft VScode 설치 여부를 묻습니다. 저는 No를 선택하였습니다.

일단 설치가 완료되었다면 아래 명령어를 입력하여 설치한 python경로를 인식 시켜줘야 합니다. ( 잘 안되신다면 터미널을 재접속해봅니다. )

source .bashrc

그래도 되지 않는다면, 아래 명령어를 연속하여 입력하여 Anaconda의 Python 경로를 추가줍니다.

cd ~
echo export PATH="/home/ubuntu/anaconda3/bin:$PATH" >> .bashrc

제대로 설치되었는지 Jupyter notebook을 실행해 봅니다.

jupyter notebook --ip=0.0.0.0

서버의 암호를 설정하지 않은상태에서 실행하였기 때문에 http://0.0.0.0:8888/token? 형태의 주소가 화면에 출력됩니다.

출력된 주소에서 0.0.0.0 대신 초기에 적어 놓았던 퍼블릭 아이피 주소로 대치하여 브라우져에 입력하여 접속해봅니다. 조금은 익숙해진 Jupyter notebook이 뜬다면 성공하셨습니다. :)

conda_4

종료시 터미널에서 ctrl + c 키를 눌러 Jupyter notebook프로세스를 종료합니다.

6.2. 새글 알림봇 환경 설정 및 실행

6.1.5. Jupyter notebook 암호 설정하기

위에서 AWS 인스턴스의 8888포트 보안정책을 0.0.0.0 으로 설정하였기 때문에, 어느 누구나 Jupyter notebook으로 접속이 가능 합니다. 누구나 들어와서 코드들을 보게되면 곤란하겠죠. 이런 불상사를 막기 위해 Jupyter notebook에 암호를 설정해주어야 합니다.

우선 암호헤시코드를 생성하겠습니다.
터미널에서 ipython 을 실행하고 아래 코드를 차례대로 입력합니다.

from notebook.auth import passwd
passwd()

윈도우계열과는 다르게 리눅스는 암호입력이 보이지 않으니 암호 입력후 엔터치시면됩니다.

conda_5

'sha1:~' 으로 시작하는 코드를 클립보드에 복사해 둡니다.
ipython 을 exit 명령어로 종료합니다.

아래의 명령어를 터미널에 입력하여 Config 설정파일 생성합니다.

jupyter notebook --generate-config

Writing default config to: /home/ubuntu/.jupyter/jupyter_notebook_config.py

위와 같은 메시지가 나오면 jupyter notebook 설정파일이 생성된 것입니다. 해당 파일 마지막줄에 echo명령어로 암호를 추가줍니다. ( 암호헤시코드 대신 sha1:~ 으로 우리가 생성한 암호 헤시를 대신 넣습니다. ' 가 반드시 들어가야 함에 주의해주세요. )

echo c.NotebookApp.password = u’sha1:암호헤시코드’ >> /home/ubuntu/.jupyter/jupyter_notebook_config.py

마지막으로 제대로 암호가 들어갔는지 확인해봅니다.

tail /home/ubuntu/.jupyter/jupyter_notebook_config.py

( 위의 tail 명령어는 파일 내용의 마지막을 출력하는 linux 명령어 입니다.)

다시 터미널에 jupyter notebook --ip=0.0.0.0을 실행하여 암호 입력화면이 뜨는지 확인합니다.
conda_6

암호헤시를 생성할때 입력하였던 암호로 로그인합니다!

이제 암호를 입력해야만 Jupyter notebook에 접속할 수 있게 되었습니다. 그래도 해킹의 위험이 남아 있으니 중요한 파일은 AWS에 가급적 올리지 않는 것이 좋습니다.

한가지 문제가 있는데요, 터미널을 종료하게 되면 Jupyter notebook도 종료하게 됩니다.
터미널이 종료되어도 프로세스를 계속 유지 하는 명령어가 있는데, 아래와 같이 터미널에 입력합니다.

nohup jupyter notebook --ip=0.0.0.0

이전과는 다르게 아무것도 출력되지 않습니다. 그래도 정상적으로 작동하고 있으니 이대로 터미널을 종료하고 앞으로는 Jupyter notebook으로 접속해서 파이썬과 터미널 작업등을 합니다.

6.2.2. 알림봇 코드 파일 작성 및 실행

대망의 마지막, 이전글 에서 작성한 코드를 입력해봅니다. 알람봇 코드는 Gist 에도 업로드 하였으니 복사해서 붙여 넣으시면 되겠습니다.

우측 New 버튼을 누르고 Text file을 선택하면 에디터 화면이 띄워집니다.
bot_1

이 에디터 화면에 복사해둔 코드를 붙여넣습니다. 상단에 Untitle 을 수정하여 파일 확장자를 .py 로 변경해주면 코드가 하이라이팅 됩니다.
bot_2

상단 메뉴의 File - Save 로 파일을 저장해 줍니다.

우리가 AWS에서 새로 설치한 Python 에는 telegram라이브러리가 없으니 터미널을 열어서 설치하도록 하겠습니다. ( 이전글 [Python] 파이썬 웹크롤링봇 만들기 -5- 에서는 Notebook 셀에 명령어를 입력하여 설치하였습니다. )

Jupyter notebook에서도 Terminel 접근이 가능한데요, 아까 보셨던 New에 Terminal을 클릭하시면 브라우저에서도 터미널에 명령어를 실행 할 수 있습니다.

터미널을 열어서 아래 두개의 명령어로 필요한 라이브러리를 설치합니다.

pip install python-telegram-bot
pip install feedparser
pip install cssselect
bot_5

이제 알람봇을 실행해보겠습니다.
bot_6

coindesk_news.txt 파일이 없어서 URL을 참고할 곳이 없군요. New - Text File 로 동일 경로에 파일을 생성하고 저장해줍니다. 메인 페이지를 보면 아래와 같은 파일들이 보입니다.
bot_7

다시 python alarm_bot.py 로 터미널에 입력하면, 우리가 바로 이전글에서 실행하였던 봇이 작동함을 볼 수 있습니다. Yay.

이제 로컬 PC를 종료하여도 AWS에서 계속해서 봇이 돌아가니, 우리는 Telegram에서 새글만 확인 하면 됩니다. ( Jupyter notebook 브라우저만 종료하시면 됩니다. )

여기까지 따라오신 모든 분들 고생 많으셨습니다.
감사합니다.

이전글 보기
[Python] 파이썬 웹크롤링봇 만들기 -1-
[Python] 파이썬 웹크롤링봇 만들기 -2- First Scraper
[Python] 파이썬 웹크롤링봇 만들기 -3- 암호화폐뉴스사이트 크롤링
[Python] 파이썬 웹크롤링봇 만들기 -4- 파싱툴을 활용한 본문 추출하기
[Python] 파이썬 웹크롤링봇 만들기 -5- Telegram API를 통한 새글 알리미 만들기

Sort:  

steemit에 오신 것을 환영합니다.
이 불협화음 채널에 참여하여 steemit에서 성공하고 비즈니스,시, 예술, 암호를 배우고 동기 부여를 얻는 방법에 대해 배우고 좋은 글과 댓글을 쓰는 방법과 표절을하지 않는 글을 가르치는 법을 배울 수 있습니다.
https://discord.gg/WaeJXmE
불화의 채널에 오늘 가입하고 아카데미에서 뭔가를 배웁니다.

Congratulations @sifnax! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

Upvote this notification to help all Steemit users. Learn why here!