반응형
이번 시간에는 AWS의 EC2(Ubuntu)에 Docker Compose를 사용하여 Nginx, Matomo, Mysql을 연결하여 구축하는 방법을 설명하겠다.
참고로 이 순서를 그대로 따라가서 matomo를 구축한다면 중간중간 필자가 만난 오류를 해결해 가는 과정을 그대로 따라가게 된다. 그것이 불편하다면 따라하지 않는것을 추천한다.
1. Docker와 Docker Compose 설치
- 아직 Docker와 Docker Compose가 설치되지 않았다면, 우선 설치하자
# Docker 설치
sudo apt update
sudo apt install docker.io
# Docker Compose 설치
sudo apt install docker-compose
1-1. ubuntu 서버에 docker를 설치한다.
- sudo apt update
- sudo apt install docker.io
1-2. docker-compose 설치
- sudo apt install docker-compose
2. docker-compose.yml 파일 작성
- 작업할 디렉토리를 하나 생성하고, 그 안에 docker-compose.yml 파일을 작성한다.
mkdir matomo-docker
cd matomo-docker
vim docker-compose.yml
- docker-compose.yml안에 다음과 같은 내용을 적는다.
version: '3'
services:
web:
image: nginx:latest
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
ports:
- "8080:80"
depends_on:
- matomo
matomo:
image: matomo:latest
volumes:
- matomo_data:/var/www/html
environment:
- MATOMO_DATABASE_HOST=db
- MATOMO_DATABASE_USERNAME=matomo
- MATOMO_DATABASE_PASSWORD=matomo
depends_on:
- db
db:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_DATABASE=matomo
- MYSQL_USER=matomo
- MYSQL_PASSWORD=matomo
volumes:
matomo_data:
3. Nginx 설정 파일 작성
- 위에서 설정한것처럼 nginx.conf 파일이 Nginx 컨테이너에 마운트되도록 설정했다. 이 파일을 작성해보자.
docker-compose.yml 파일이 있는 같은 폴더에 nginx.conf 파일을 작성해야 한다.
이렇게 하면 docker-compose up -d 명령을 실행할 때, docker-compose.yml 파일에서 지정한 대로 Nginx 컨테이너가 해당 nginx.conf 파일을 /etc/nginx/nginx.conf 위치에 마운트하게 된다. 따라서 두 파일은 같은 디렉토리에 위치해야 한다.
- 명령어 입력
vim nginx.conf
- 코드 내용 입력
- events { worker_connections 1024; } 부분은 Nginx가 동시에 처리할 수 있는 연결 수를 설정하는 곳이다.
- events: 이 블록은 Nginx가 동시에 처리할 수 있는 네트워크 연결에 대한 설정을 담고 있다.
- worker_connections: 이 지시어는 하나의 워커 프로세스가 동시에 처리할 수 있는 연결의 최대 수를 지정한다. 이 경우 1024개의 동시 연결을 허용하도록 설정되어 있다.
Nginx는 이벤트 기반 모델을 사용하여 매우 높은 수준의 동시 연결을 처리할 수 있다.
따라서 worker_connections의 값을 적절하게 설정하면 Nginx의 성능을 최적화할 수 있다.
간단하게 말해서, 이 설정은 하나의 Nginx 워커 프로세스가 최대 1024개의 동시 네트워크 연결을 처리할 수 있게 해준다.
이는 대규모 트래픽을 처리할 수 있도록 도와주며, 필요에 따라 이 값을 조절할 수 있다.
events { worker_connections 1024; }
http {
server {
listen 80;
location / {
proxy_pass http://matomo:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
4. 컨테이너 구동
4-1. docker-compose 실행하기
- 이제 docker-compose.yml 파일과 nginx.conf 파일이 준비되었으니 Docker Compose로 컨테이너를 시작한다.
sudo docker-compose up -d
- 명령어 앞에 sudo를 꼭 적어주자 -> PermissionError가 발생할수도 있다.
4-2. 모든 동작 중인 컨테이너 목록 확인
4-3. Docker Compose 프로젝트의 컨테이너 상태 확인
- 이 명령어는 docker-compose.yml 파일이 위치한 디렉토리에서 실행해야 하며, 해당 프로젝트에 속한 컨테이너의 상태를 보여준다.
4-4. 컨테이너 로그 확인
- 이 명령어는 docker-compose.yml 파일이 있는 위치에서 실행하면 해당 프로젝트의 모든 컨테이너의 로그를 보여준다.
- 특정 컨테이너만의 로그를 보려면 docker-compose logs [서비스 이름] 형식으로 실행하면 된다.
- 예를 들어, Matomo 서비스의 로그만 보고 싶다면 docker-compose logs matomo라고 실행하면 됩니다.
4-5. 에러 사항 파악
Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message: 이 메시지는 Apache가 서버의 완전한 도메인 이름을 안전하게 확인하지 못했다는 것을 알려준다.
이는 대부분의 경우 문제가 되지 않는다. 하지만, 'ServerName' 지시문을 Apache 설정에 추가하여 이 메시지를 숨길 수 있다. Apache/2.4.57 (Debian) PHP/8.1.24 configured -- resuming normal operations: 이 부분은 Apache가 정상적으로 작동하고 있음을 나타낸다.
따라서 로그에 나타난 메시지는 크리티컬한 에러를 나타내는 것은 아니며, Matomo 컨테이너가 정상적으로 작동하고 있는 것으로 판단된다. 만약 'ServerName' 지시문을 설정하고 싶다면 Apache 설정 파일에 해당 내용을 추가할 수 있다.
여기서 생긴 궁금증은 왜 Nginx를 웹서버로 사용해서 Matomo가 실행되도록 설정했는데 Apache 웹서버 관련 에러가 뜰까?
- 그 이유를 알아보니 Matomo Docker 이미지는 Apache 웹 서버를 내장하고 있다. 따라서 Matomo 컨테이너가 실행될 때 Apache가 자동으로 실행되는 구조다.
- 즉, 그냥 지금 위에서 해온 설정을 그대로 따라와서 지금처럼 3개의 이미지를 담은 docker-compose를 사용해도 문제가 발생하지 않는다. (nginx는 없애도 괜찮을것 같다.)
Nginx를 사용하고 싶다면 여러 가지 방법이 있다.
- 리버스 프록시:
- Nginx를 리버스 프록시로 사용하여 내부적으로 Apache가 실행되는 Matomo로 트래픽을 전달할 수 있다.
- 이렇게 하면 외부로 노출되는 웹 서버는 Nginx가 되고, 내부에서는 Apache가 Matomo를 서빙하게 된다.
- 직접 설정:
- Matomo가 지원하는 다른 웹 서버로 설정을 바꾸는 복잡한 방법도 있습니다만, 이 경우 Matomo의 모든 설정을 수동으로 해야 하므로 권장되지 않는다.
- Apache만 사용:
- 이미 Matomo Docker 이미지가 Apache를 포함하고 있으니, Nginx 없이 그대로 사용하는 것도 한 방법이다.
5. Matomo 설치
5-1. 마토모 연결 오류사항 해결
- 지금 내 설정을 보면 내 퍼블릭 ip는 ubuntu@ip-172-31-28-153이므로 브라우저에 172-31-28-153:8080으로 접속을 시도했다.
- 여기서 문제가 발생했다. 접속이 불가능하다.
sudo docker compose ps 명령어로 상태를 확인했는데 컨테이너는 다 up 상태였다. -> 그럼 문제점은 방화벽일 것이라고 생각했다.
나는 aws를 사용중이니 인바운드 규칙을 수정했다. 만약 aws가 아니라 그냥 ubuntu라면 다음과 같은 단계를 따르자
5-2. 방화벽 설정을 확인하려면 다음 명령어를 사용하자
sudo ufw status
5-3. 8080 포트를 허용하려면 다음과 같이 명령어를 실행해라
sudo ufw allow 8080/tcp
5-4. aws는 8080포트를 인바운드 규칙을 추가한다.
5-5. url 접속 방법도 잘못했다.
- AWS에서 실행되는 인스턴스의 경우, 프라이빗 IPv4 주소는 VPC 내에서만 접근 가능하다.
- 인터넷을 통해 접속하려면 퍼블릭 IPv4 주소나 DNS 이름을 사용해야 한다.
5-6. 재접속 시도 (이 ec2는 이걸 적고 삭제할 예정이라 주소를 공개한다.)
다음 포스트에서 구축완료 후 웹에서 상세설정하는 내용을 설명하겠다.
2023.10.22 - [웹분석tool (GA, Matomo)] - Matomo 웹 분석 설정: 웹 인터페이스를 통한 구성 (2편)
반응형
'DevOps > 웹분석tool (GA, Matomo)' 카테고리의 다른 글
Matomo 추적 스크립트 설정: 웹사이트에 적용 및 테스트하기 (5편) (0) | 2023.10.22 |
---|---|
Matomo 웹 분석 설정: SSL 로그인 오류 해결 (4편) (0) | 2023.10.22 |
Matomo 웹 분석 설정: SSL 로그인 오류 진단하기 (3편) (0) | 2023.10.22 |
Matomo 웹 분석 설정: 웹 인터페이스를 통한 구성 (2편) (0) | 2023.10.22 |
Matomo Analytics (웹 분석도구): 데이터의 미래를 설계하다 (0) | 2023.10.22 |