문제 상황
- 학교를 졸업하면서 학교 구글 계정이 사라진다. 그런데, Google Cloud Platform에 올렸던 서버가 학교 구글 계정이라, 서버를 다른 계정으로 옮겨야 했다.
1. VM 인스턴스 생성
1. 구글에 'Google Cloud Platform' 검색해서 최상단 페이지 클릭
2. '콘솔로 이동' 클릭
3. 'Compute Engine' 클릭
4. '사용' 클릭
5. 좌측 상단 햄버거 바에서 'Compute Engine' > 'VM 인스턴스' 클릭
6. '인스턴스 만들기' 클릭
7. 인스턴스 설정
리전 : 'us-west1 (오리건)' 또는 아이오와, 사우스캐롤라이나 중 하나로 지정
머신 구성 : E2
머신 유형 : e2-micro
부팅 디스크 : 운영체제 - Ubuntu , 버전 - Ubuntu 20.04 LTS
8. ID 및 API 액세스 설정
액세스 범위 : 모든 Cloud API에 대한 전체 액세스 허용
방화벽 : HTTP 트래픽 허용 / HTTPS 트래픽 허용 / 부하 분산기 상태 점검 허용
9. '만들기' 버튼 클릭
10. VM 인스턴스 페이지에서 'SSH' 클릭
2. SSH 설정 및 라이브러리 설치
파이썬 프로그램을 돌리기 위해 내 코드에서 썼던 모듈들을 다운로드 해주어야 한다.
beautifulsoup4,pyperclip,requests,selenium,chromedriver-autoinstaller,undetected-chromedriver,pyautogui,discord.py,asyncio 라이브러리를 설치한다.
1. Ubuntu에서는 pip가 설치되어 있지 않아 pip을 설치해주어야 한다.
- 1) pip 설치 명령어
wget https://bootstrap.pypa.io/get-pip.py
- 2) 최고 권한으로 실행
sudo python3 get-pip.py
- 3) Ubuntu을 업그레이드 해준다.
sudo apt-get update
- 4) python 설치 확인
python3 --version
2-A. beautifulsoup4,pyperclip,requests,selenium,chromedriver-autoinstaller,undetected-chromedriver,pyautogui,discord.py,asyncio 라이브러리를 설치
pip3 install beautifulsoup4 pyperclip requests selenium chromedriver-autoinstaller undetected-chromedriver pyautogui discord.py asyncio
만약 설치 시 중간에 아래 사진와 같은 경고가 발생한다면?
-> chromedriver-path 스크립트가 설치된 경로가 현재의 실행 PATH에 포함되어 있지 않아 생기는 경고이므로 이 문제를 해결 하기 위해서 다음과 같은 절차를 실행한다.
WARNING: The script chromedriver-path is installed in '/home/hhs0991/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
방법1) PATH에 경로 추가하기(1회성)
1) 경고가 언급한 경로(/home/hhs0991/.local/bin)를 현재 사용자의 PATH에 추가합니다. 이렇게 하면 시스템에서 이 경로의 스크립트를 찾을 수 있게 됩니다. 이를 위해 다음과 같은 명령을 사용할 수 있습니다.
export PATH=$PATH:/home/hhs0991/.local/bin
방법2[추천]) 영구적으로 PATH에 경로 추가하기
1) .bashrc 또는 .profile 파일 열기
nano ~/.bashrc
2) PATH에 경로 추가하기
파일의 맨 끝에 아래 코드와 같은 문구를 추가합니다.
export PATH=$PATH:/home/hhs0991/.local/bin
3) Ctrl+숫자0 을 눌러 파일을 저장하고, Ctrl+X을 눌러 텍스트 편집기를 종료합니다.
4) 변경사항 적용하기
source ~/.bashrc
2-B. 기존 개발 환경 파일 (requirements.txt) 을 업로드하고 개발 환경을 서버에도 똑같이 적용하기 (2-A보다 추천하는 방법)
pip install -r requirements.txt
3. 파일 올리기
1. '파일 업로드' 를 통해 필요한 파일을 모두 올립니다.
2. ls 명령어를 통해 파일이 정상적으로 올라갔는지 확인합니다.
4. 파이썬 프로그램 서버에서 실행
1. 프로그램 소스 코드가 있는 notice_bot 파일로 이동합니다.
2. 실시간 모니터링 프로그램의 경우 시간이 중요합니다. 우분투 서버 시간을 한국 시간으로 바꿉니다.
sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
3. SSH 창을 종료해도 프로그램이 계속해서 돌아가도록 하기 위해 nohup 명령어를 사용합니다.
=> nohup 명령어 : 프로세스를 실행한 터미널의 세션 연결이 끊기더라도 지금 실행시킨 프로그램을 종료하지 않도록 하는 명령어이다.
nohup python3 crawling+discord.py &
명령어를 치고 엔터를 한 번 더 칩니다.
정상적인 경우) 엔터해도 아무것도 뜨지 않는다.
ps 명령어를 통해 실행중인 프로세스를 조회해보면 python3가 실행중임을 볼 수 있다.
오류)
위와 같이 뜨면 crawling+discord.py 파일의 실행 중 문제가 있는 것이므로 nohup.out 의 로그를 살펴보아야 합니다.
** 실행 파일에 문제가 있는 경우 (자기 컴퓨터에서는 정상 작동했다가 서버에서 작동하지 않는 경우 원인 파악 방법)
A) nohup.out 을 열어봅니다.
명령어 : cat nohup.out

B) 문제의 원인을 파악하고 해결합니다.
[참고 명령어]
nohup.out 안의 내용 초기화
> nohup.out
nohup.out 내용 조회
cat nohup.out
5. 기타 오류 해결 과정
오류1) /usr/lib/python3/dist-packages/requests/__init__.py:89: RequestsDependencyWarning: urllib3 (2.2.1) or chardet (3.0.4) doesn't match a supported version! 오류
원인 : requests 패키지의 버전이 urllib3 또는 chardet과 호환되지 않음
해결 : Ubuntu(SSH)에서 아래 STEP1~STEP2 명령어 실행
STEP 1) requests 패키지를 최신 버전으로 업데이트
pip install --upgrade requests
STEP 2) urllib3, chardet 패키지 최신 버전으로 업데이트
pip install --upgrade urllib3 chardet
오류2) ValueError: No chrome executable found on PATH
원인 : Chrome 브라우저의 실행 파일이 시스템의 PATH에 존재하지 않아서 발생하는 문제
해결 : Ubuntu(SSH)에서 아래 2개 명령어 입력
sudo apt update
sudo apt install -y chromium-browser
오류3) xdg-settings: not found 오류
원인 : Linux 시스템에서 사용되는 명령어인 xdg-settings을 찾을 수 없을 때 발생
해결 : Ubuntu(SSH)에서 아래 STEP1~STEP2 명령어 실행
STEP 1) xdg-utils 설치
sudo apt-get install xdg-utils
STEP 2) 환경 변수 설정
export PATH="/usr/bin/xdg-settings:$PATH"
오류4) /home/hyeonseok2297/.local/lib/python3.8/site-packages/chromedriver_autoinstaller/127/chromedriver: error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory 오류
원인 : libnss3.so 라이브러리가 설치되지 않아서 발생
해결 : libnss3.so 라이브러리 설치
sudo apt-get update
sudo apt-get install libnss3
오류5) `cannot connect to chrome at 127.0.0.1:37541` when using undetected-chromedriver with Python 오류
원인 : selenium 사용 시 특정 브라우저와 드라이버가 호환이 되지 않아서 생기는 문제
해결 : undetected-chromedriver 버전을 3.0.6 버전으로 설치, 크롬 재설치, 버전에 맞는 크롬드라이버 설치
주의 : 복붙하는 과정에서 - 를 복사 붙여넣기로 하면 잘 되지 않을 수도 있음. 이런 경우에는 직접 입력
# A) undetected-chromedriver 3.0.6 버전으로 재설치
python3.8 -m pip uninstall undetected-chromedriver # undetected-chromedriver를 제거
python3.8 -m pip install undetected-chromedriver==3.0.6 #undetected-chromedriver 라이브러리 3.0.6 버전으로 설치
sudo ln -s /usr/bin/google-chrome-stable /bin/chrome # 심볼릭 링크 설정
# B) 우분투의 패키지들 업데이트 (저장소 목록을 새로 가져오기)
sudo apt-get update
# C) 크롬 설치
sudo apt install wget –y #wget 설치
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb #Chrome 패키지 다운로드
sudo dpkg –i ./google-chrome-stable_current_amd64.deb #Chrome 패키지 설치
# C-error) 만약 설치 중 오류가 발생한다면, 의존성 패키지 설치
sudo apt update
sudo apt install -f
# D) 크롬 버전 확인
google-chrome –version
# E) 버전에 맞는 크롬드라이버 설치
다운로드 사이트(이전 버전) : https://chromedriver.chromium.org/downloads
다운로드 사이트(최신 버전) : https://googlechromelabs.github.io/chrome-for-testing/
다운로드 사이트를 들어가서 자기 환경에 맞는 파일을 우클릭해서 링크 복사를 진행한다.
wget [복사한 링크명]
wget https://storage.googleapis.com/chrome-for-testing-public/123.0.6312.86/linux64/chromedriver-linux64.zip # 해당 파일 다운로드
sudo apt install unzip # unzip 프로그램 설치
unzip chromedriver-linux64.zip # 다운받은 파일 압축해제
오류 6) AttributeError: 'NoneType' object has no attribute 'implicitly_wait' 오류
원인 : driver가 열리지 않음.
해결 : chromedriver path를 파이썬 파일에서 지정합니다.
useragent.txt 파일의 경로 또한 파이썬 파일에서 지정합니다. 그리고 google cloud platform에 옮겨놓습니다.
undetected-chromedriver 버전 3.0.6, selenium 버전 4.9 으로 호환을 맞춥니다.
#1) 파이썬 코드에서 uc.Chrome 의 인자값으로 excutable_path = 'chromedriver_path' 추가/수정 합니다.
# excutable_path는 chromdriver가 위치한 경로를 적어주면 된다.
driver = uc.Chrome(executable_path='chromedriver')
#2) useragents.txt 파일을 google cloud platform에 /home/사용자명(hyeonseok2297) 경로에 옮깁니다.
#3) selenium 4.9 버전을 설치합니다.
pip uninstall selenium #현재 설치된 selenium 제거
pip install selenium==4.9.0 # selenium 4.9.0 설치
pip show selenium # 버전 확인