홈서버 구축기 -1
시작하게 된 이유
부트캠프를 진행하면서 AWS를 사용할때 좋지도 않은 성능의 서버를 쓰면서 과금이 될까봐 조마조마 한것이 늘 불만중에 하나였다.
집에서 놀고있는 몇년 지난 노트북 조차도 프리티어로 제공되는 서버에 비하면 양반이었기 때문인데
그래서 더욱 도커를 활용한 나만의 서버를 구축하는것에 욕심이 생기게 되었다.
도커는 무엇일까?
내가 Mac OS를 쓰고있는 지금, 만약 window 운영체제를 사용하고 싶다면 가상환경을 설치해서 그 위에 돌리는 수밖에 없을것이다. 그러면 내 현재 기본 운영체제인 Mac 위에 window를 또 설치해서 불필요한 OS 가 탑재가 되고
그 위에서 window의 프로그램만 돌아가는 상황인데 여기서 중요한 점
내가 필요한건 프로그램이지 window가 아니다
윈도우는 필요 없고 프로그램만 쓸수 없을까? 해서 OS에 구애받지 않고 해당 프로그램만 사용하게끔 해준것이 바로 도커.
현재의 운영체제의 리소스를 사용하면서 원하는 프로그램을 사용할수 있는 환경을 구성하게끔 해줄수 있는것이다.
Docker 설치 및 환경세팅 후의 문제
1. 도커에 이미지를 pull 받고 Container 로 등록하기 전, 나는 컨테이너를 삭제했다가 다시 등록하는 경우에도 DB 의 데이터가 살아남아있길 원했기 때문에 volume 설정까지 해주려 했다.
docker run --name [CONTAINER_NAME] -e MYSQL_ROOT_PASSWORD=[PASSWORD] -v [로컬 경로]:/ -p 3306:3306 -d mysql
-e => mysql 의 환경변수 설정
-v => 내 로컬 환경과 도커 내의 Mysql 데이터 맵핑 설정
-d => 백그라운드에서 실행
2. 도커 내 실행된 mysql의 컨테이너 이름은 'mysqlContainer' 로 지정 해줬고,
실행된 컨테이너에 접속해 관리자 계정을 새로이 생성해주는 작업을 했다.
docker exec -it mysqlContainer bash
# 도커 접속 이후 아래 명령어 입력 후 root 계정의 password 입력 후 접속
mysql -u root -p
# 데이터 베이스 목록 확인 후, 내가 사용할 DB 생성
show databases;
CREATE DATABASE [DATABASE_NAME];
# mysql 관리자 계정 생성
# '%' => 외부 접근 허용, USER_NAME => 생성할 ID, PASSWORD => 접속시 비밀번호
CREATE USER 'USER_NAME'@'%' IDENTIFIED BY 'PASSWORD';
# 모든 데이터 베이스에 대한 접근권한 설정
GRANT ALL PRIVILEGES ON *.* to 'USER_NAME'@'%';
# 특정 데이터 베이스로 국한하고 싶을경우
GRANT ALL PRIVILEGES ON 'DATABASE_NAME'.* to 'USER_NAME'@'%';
# 권한에 대한 설정값 저장
FLUSH PRIVILEGES;
나는 ' 외부 접근 허용 '%' 값도 주었고, 유저 생성까지 마무리 해줬으니 끝났겠지? ' 라는 안일한 생각을 했다.
해서 DBeaver에 연결을 시도해보았으나 보란듯이 '실패'
'대체 왜지?' 라는 생각으로 에러 메세지를 분석해본 결과 자세한 내용은 안나와 있었고,
연결에 혼동이 있다 정도로만 분석이 되었었다.
1번째 해결 시도
MySQL을 띄웠을때 해당 주소에는 보안이 걸려있는 상태가 아니기 때문에 useSSL 옵션을 false를 주고
allowPublicKeyRetrieval 값이 false 로 되어 있던것을 true 로 변경해주었다.
이것을 처리 해줌으로서 해결을 볼수 있었던 것은
'로컬 환경' 만 가능했다.
로컬 환경도 마찬가지로 보안 연결에 대한 부분을 위와 같이 처리를 해주어야 정상적으로 연결이 되는것을 확인할 수 있었는데
결론적으로는 내가 하고자 하는 '외부 접속' 에 대해서는 해결이 되지 않았다.
2번째 해결 시도 ( 해결 )
1번째를 하고 난 후, 문득 든 생각
' 도커 컨테이너 생성시 외부 접속에 대한 포트를 지정을 해줬었는데 그건 상관이 없나? ' 였다.
그 생각을 기점으로 꼬리에 꼬리를 물다 닿은 해결 질문은 이거였다.
' 현재 내 로컬 환경은 집에 있는 공유기를 통해 사설 IP, 즉 NAT 환경 속에 있는데,
그렇다면 공인 IP 로 접근을 해줬을때 내 사설 IP로 포트포워딩을 해줘야 하지 않을까? '
위 사진처럼 구도를 생각해보면 될 것 같다.
내 사설 IP 로 포트포워딩을 해주자 너무나도 반가운 초록색 체크 마크가 뜨며 연결이 잘 되었단 메세지를 확인할 수 있었다.