Python + Flask + Selenium + Chromedriver + Lightsail + SSL

1. 서버 보안





# edit the configuration file
sudo nano /etc/ssh/sshd_config

# set these lines, if not already set
PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication no
PubkeyAuthentication yes

# restart the service
sudo service ssh restart


2. 종속성 설치





sudo apt-get -y update
sudo apt-get -y install python3 python3-venv python3-dev
sudo apt-get -y install supervisor nginx git


3. 애플리케이션 설치




저장소 지침을 따르십시오. 가상 환경 내에 모든 것을 설치해야 합니다.

4. Gunicorn 및 감독자 설정





sudo nano /etc/supervisor/conf.d/transit.conf

# example file
[program:transit-cu]
command=/home/ubuntu/transit-cu/venv/bin/gunicorn -b localhost:8000 -w 3 transit:app
directory=/home/ubuntu/transit-cu
user=ubuntu
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true


5. Lightsail HTTPS 규칙 활성화 및 프라이빗 주소 생성






6. DNS에서 A 레코드 업데이트




내 도메인은 Godaddy에 등록되어 있고 내 서버 이름으로 설정할 하위 도메인도 생성되었습니다. DNS 관리자 페이지로 이동하여 호스트가 Lightsail에서 제공하는 정적 IP 주소를 가리키는 A 레코드를 업데이트하거나 생성합니다.

7. NGINX 설정





sudo rm /etc/nginx/sites-enabled/default
sudo nano /etc/nginx/sites-enabled/transit


"transit"을 앱 이름으로 바꿉니다.



8. Let's Encrypt 설정



certbot --nginx가 내 도메인에 도달하지 못했기 때문에 인증서를 수동으로 설치하기로 결정했습니다. 그러나 나중에 certbot 챌린지를 해결할 수 있게 된 후에 작동했습니다.
sudo certbot -d mydomain.com --manual --preferred-challenges dns certonly
필요한 단계를 확인한 다음 도메인 DNS 관리자에서 TXT 레코드를 만듭니다. 제 경우에는 다음과 같이 진행되었습니다.



이름은 _acme-challenge.rsscraper로 cerbot이 표시한 것과 다릅니다. 실제로 전체 문자열의 첫 번째 부분입니다.

9. Ubuntu Server 18.04에 Chrome(헤드리스) 및 Chromedriver 설치




이것은 까다로운 부분이므로 프로젝트 종속성으로 돌아가 보겠습니다. 다음 명령을 사용하여 사용 가능한 최신 Chrome 버전을 설치하십시오.

curl https://intoli.com/install-google-chrome.sh | bash

sudo mv /usr/bin/google-chrome-stable /usr/bin/google-chrome

google-chrome --version && which google-chrome


그런 다음 해당 크롬 드라이버를 설치하고 이site로 이동하여 wget를 사용하여 다운로드한 다음 패키지의 압축을 풀고 바이너리 폴더로 이동해야 합니다.

cd/tmp/
wget https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
sudo mv chromedriver /usr/bin/chromedriver
chromedriver --version


위의 코드는 예시일 뿐입니다.

Chrome 드라이버와 함께 Selenium을 사용하는 방법이 다음과 같은지 확인하십시오.

from selenium.webdriver.chrome.options import Options
options = Options()
options.headless = True
browser = webdriver.Chrome("./chromedriver", options=options)
browser.set_window_size(1920, 1080)


이 드라이버에 set_window_size가 필요한지 확실하지 않지만 사이트의 응답성으로 인해 브라우저 화면이 다른 요소를 볼 수 없고 요소를 찾으려고 할 때 스크랩 코드가 실패할 수 있는 문제를 해결합니다.

여기서 중요한 부분은 크롬 드라이버의 바이너리 위치를 지정하거나 프로젝트의 루트 위치에 두어야 한다는 것입니다(내 경우처럼).

Chrome 버전과의 드라이버 비호환성으로 인해 문제가 발생할 수 있으므로 프로젝트 내부에 포함하는 것이 더 좋았습니다.

발생할 수 있는 또 다른 가능한 문제는 모니터에 연결되지 않은 서버 버전을 사용하고 있기 때문에 일부lib 라이브러리와 관련이 있습니다. 문제는 디스플레이와 관련이 있으며 Google 검색으로 쉽게 해결할 수 있습니다.

10. 서비스 초기화




모든 프로젝트 종속성과 함께 모든 것이 올바르게 완료되었으면 다음 명령을 실행한 후 사용자 지정 도메인 이름을 사용하여 끝점에 액세스할 수 있어야 합니다.

// Reload supervisor

sudo supervisorctl reload
sudo supervisorctl status

// Check Nginx syntax and reload

sudo nginx -t
sudo service nginx reload


참조


  • https://github.com/dandalpiaz/lightsail-flask
  • https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xvii-deployment-on-linux
  • http://chromedriver.chromium.org/downloads
  • https://medium.com/@praneeth.jm/running-chromedriver-and-selenium-in-python-on-an-aws-ec2-instance-2fb4ad633bb5
  • https://stackoverflow.com/questions/43382548/can-i-still-specify-a-path-to-chromedriver-using-chromeoptions-in-python
  • https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-using-lets-encrypt-certificates-with-nginx#request-a-lets-encrypt-certificate-nginx
  • https://www.godaddy.com/community/Managing-Domains/Problem-adding-txt-record-for-letsencrypt/td-p/115376#
  • 좋은 웹페이지 즐겨찾기