사이트 변경사항을 추적하는 서비스를 클라우드 인스턴스에 안전하게 구축해보자.
먼저 이미지를 받아서 올려본다.
git clone https://github.com/dgtlmoon/changedetection.io.git
cd changedetection.io
sudo docker-compose up -d
만약 실행이 안되면 docker-compse 를 설치해준다.
sudo apt update
sudo apt install docker-compose
서비스를 실행해본다.
sudo docker-compose up -d
실행 된 컨테이너를 확인해보면 로컬에서만 접근 가능한 상태로 실행됨을 알 수 있다. (127.0.0.1:5000->5000/tcp)
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b8141806946 ghcr.io/dgtlmoon/changedetection.io "python ./changedete…" 7 minutes ago Up 7 minutes 127.0.0.1:5000->5000/tcp changedetection
yml 파일을 열어서 포트 정보를 수정한다.
cd /home/USERNAME/chagedetection.io
nano docker-compose.yml
ports:
- 0.0.0.0:5000:5000
컨테이너를 내렸다가 다시 올려본다.
sudo docker-compose down
Stopping changedetection ... done
Removing changedetection ... done
Removing network changedetectionio_default
sudo docker-compose up -d
Creating network "changedetectionio_default" with the default driver
Creating changedetection ... done
http://<도메인>:5000 으로 접속해본다.
http 이므로 안전한 사이트가 아니라는 경고가 나오더라도 그대로 접속하면 된다.
그런데 이 상태로는 아무나 웹 사이트에 접근이 가능해져버리는 문제가 있으므로
접속 포트를 변경하고, 인증을 추가하도록 한다.
그러기 위해 nginx 를 거쳐서 들어오도록 해야한다.
우선 패스워드 파일을 생성한다.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd <로그인에 사용할 ID>
New password:
Re-type new password:
Adding password for user ****
nginx 설정파일에서 인증 파일 정보를 추가해준다. (/etc/nginx/site-avaliable/default)
server {
server_name yourdomain.com;
listen 사용할 포트 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/xxxxxxxx/fullchain.pem; # Let's Encrypt 인증서 경로
ssl_certificate_key /etc/letsencrypt/live/xxxxxxxxx/privkey.pem; # Let's Encrypt 개인 키 경로
location / {
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port "사용할 포트";
proxy_pass http://localhost:5000;
}
}
nginx 설정 정합성 확인 후, 서비스를 재시작 해준다.
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
sudo systemctl restart nginx
인증이 필요한 상태가 되는지 한 번 접속해본다.
근데 이걸로는 대부분의 사이트를 탐지하지 못한다.
브라우저가 반드시 필요하다..
docker-compose.yml 을 다시 아래와 같이 수정한다.
services:
changedetection:
image: ghcr.io/dgtlmoon/changedetection.io
container_name: changedetection
hostname: changedetection
volumes:
- changedetection-data:/datastore
environment:
- PLAYWRIGHT_DRIVER_URL=ws://sockpuppetbrowser:3000
ports:
- 5000:5000
restart: unless-stopped
sockpuppetbrowser:
hostname: sockpuppetbrowser
image: dgtlmoon/sockpuppetbrowser:latest
cap_add:
- SYS_ADMIN
restart: unless-stopped
environment:
- SCREEN_WIDTH=1920
- SCREEN_HEIGHT=1024
- SCREEN_DEPTH=16
- MAX_CONCURRENT_CHROME_PROCESSES=10
volumes:
changedetection-data:
컨테이너를 내리고 이미지를 pull 하고 다시 실행한다.
sudo docker-compose down
sudo docker-compose pull
sudo docker-compose up -d
실제로 웹 페이지를 렌더링 해줄 백엔드 컨테이너가 같이 실행됨을 확인할 수 있다.
이제 다시 브라우저로 가서 아마존 제품URL을 넣어서 테스트 해보면...
header 에 agent 정보를 넣어봤지만...
amazon 은 쉽지 않다..