먼저 가비아에 들어가서 도메인을 구매하자
내가 자주쓰는 kk21로 하고 검색했다

근데 마음에 드는 건 꽤나 비싸다 ...
쩝

고민하다가 .dev가 그래두 맘에 들어서 구매!
근데 .dev나 .app은 제한이 조금 있지만 .. 뭐 괜찮아서 그냥...
챱챱 구매하기

구매 완료!!!

구매한 도메인이 바로 안 떠서 당황했는데,,,,
찾아보니깐 첫 구매하고 한 10분정도는 걸릴 수 있다고 해서 얌전히 기다렸다

한 5분 정도 기다리니깐 바로 떴다 !!!

문자도 왔다!
이번에는 DNS를 위해 CloudFlare를 설정하자


먼저 회원가입을 하자

회원가입 후 링크로 들어가게 되면 이런 화면이 뜬다

저기 입력칸에 방금 구매한 도메인을 입력하자

continue 버튼을 누르면 위 처럼 화면이 바뀐다

이번에는 DNS 레코드를 추가해보자
3가지 옵션이 있는데 추천 옵션인 Quick로 해보자

여러 요금제가 있는데....
나는 뭐 간단한 홈서버에 1년짜리 도메인이니깐 Free로 선택해야지 ㅎㅎ

무료는 이정도 ...

들어오면 레코드가 없으므로 레코드를 추가해보자!

아래로 조금 내리면 레코드 추가가 있다
이걸 눌러보자

이렇게 뜨는데 일단 A로 도메인부타 등록하자
이때
먼저 DNS에 레코드를 추가해야 한다
아래처럼 하자

이번에는 네임서버를 바꿔보자!
먼저 가비아에서 네임서버를 보면 가비아 껄로 3차까지 들어가있다

이렇게 3개인데 수정해야 한다

아래처럼 제공하는 걸로 바꾸자

소유자 인증을 해야 한다

인증 완료되면 적용 누르기

확인을 하면 끝

확인 메일도 온다 ㅎㅎ

활성 상태 굿굿

이제는 한 도메인에서 여러 서비스를 쓰기 위해 nginx로 proxy 를 설정할 것이다
일단 내 목표는
각각 서비스를 항상 도커로 특정 포트로 열어서 실행하고
특정 주소로 들어가면 특정 포트의 도커 안 서비스로 실행되게 하고 싶다
순서로 보면 아래처럼
[사용자 브라우저] │ 1) [https://시스템명.도메인] 요청 (443) ▼ [Cloudflare DNS] │ 2) [https://시스템명.도메인] <공인IP> 응답 ▼ [인터넷] ▼ [공유기] │ 3) 포트포워딩: 443(외부) → 443(내부 서버) ▼ ┌───────────────────────────────────────────────────────────┐ │ 내부 서버(리눅스) │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Nginx Proxy Manager (NPM) 컨테이너 :443/:80 │ | │ │ - SSL 종료/적용(LE 인증서) | | │ │ - Host 헤더로 가상호스트 구분 │ │ │ └───────┬─────────────────────────────────────────────┘ │ │ │ 4) 프록시 라우팅 (도메인 기준으로 분기) | │ ▼ │ │ Docker 네트워크 "web" (내부 전용 L2) | │ └──────────────→ [새컨테이너]◀ 현재 요청 | │ (컨테이너 이름으로 접근) | └───────────────────────────────────────────────────────────┘ [컨테이너 응답] → NPM → 공유기 → 인터넷 → Cloudflare → 브라우저
이런 느낌으로 흐름이 가고 싶었따
참고로 내 홈서버는 와이파이에 물려 있다 ...
자 그럼 이제 천천히 해보자
먼저 도커끼리 소통을 하기 위해서 network를 만들자!
sudo docker network create web
ls로 확인하면아래와 같다


명령어로 컨테이너를 생성한다

나는 80 포트가 잡혀있다고 해서 확인해보았다

서버 세팅할 때 초반에 apache를 썼었어서 80이 아파치로 잡혀있다
apache랑 nginx를 비교했을 때 apache가 더 무겁기도 하고 요새 잘 안 쓰인다고 해서 이제 nginx로 갈아탈 예정 ...
ssl let's로 했을 때 충돌나서 apache로 했었는데 ssl은 이제 내가 신경 안 써도 되니깐 ...
그러니 중단 3종 세트를 일단 하자 !!!
sudo systemctl stop apache2 sudo systemctl disable apache2 sudo systemctl mask apache2
그리고 머 어차피 안 쓸거니깐 그냥 지워버리자 .. ^>^
sudo apt purge -y apache2 apache2-bin apache2-data sudo apt autoremove -y
이제 아까 만들어졌던 이미지랑 컨테이너를 없애서 아무것도 없게 만들자
docker rm [컨테이너] docker rmi [이미지 이름]아래처럼 아무것도 안 나와야 한다
이제 다시 실행해보자!
잘 실행이 되어서 확인해보니 잘 떴다

http://서버 ip:81
위 주소로 접속하면 아래처럼 로그인 화면이 뜬다

먼저 기본 계정으로 로그인해보자
Email: admin@example.com
Password: changeme
로그인하면 아래처럼 뜬다

이때 계정 정보를 설정하자

비밀번호까지 입력하고 save를 누르면 계정 정보가 뜬다

이렇게 관리자로 잘 설정이된다 !!
테스트로 streamlit 컨테이너를 하나 켜보자
sudo docker run -d \ --name sys1 \ --network web \ -p 1222:1222 \ python:3.11 \ bash -lc "pip install -q streamlit && streamlit hello --server.port=1222 --server.address=0.0.0.0"

잘 돌았다
이제 proxy Host 설정을 해보자
먼저 다시 웹에서 host-Proxy Host를 들어가자

그러면 아래처럼 사진이 뜬다

Add Proxy Host를 누르고 아래 정보를 넣자

테스트 정보로 이렇게 채워봤다

그리고 save를 눌러 저장하자 !!
이번에는 ssl 설정을 해보자
먼저 cloudflare에서 ssl 설정이 필요하다
SSL/TLS 아래 Overview를 누르면 아래처럼 나온다

이걸 일단 Flexible로 바꾸자

다음 우리가 만들었던 host를 edit을 눌르고 ssl 탭을 누른다
그러면 양식이 뜨는ㅔ 이렇게 채우자

그러고 save를 누르면 아래처럼 ssl칸이 채워진다

이제 다시 cloudflare에서 ssl을 full로 변경하자

이제 주소로 접속해보자 !!

그러면 잘 뜬 걸 볼 수 있다 ..^.^
이제 새로운 서비스를 배포할 땐 여기부터 쭉 하면 된다 ~~~
먼저 개발을 한다
테스트로 fastapi 코드를 작성했다

이번에는 Dockerfile을 작성하자

파일이 이렇게 있어야 한다

docker build -t test-main:latest .
docker iamges
docker run -d --name test-main --network web -p 3333:3333 test-main:latest-p 3333:3333은 테스트용하기 위해 포함시켰다
만약 테스트 필요없다면 제거해도 된다
컨테이너까지 잘 실행이 됐다면 이제 터미널에서 하는 건 없다

파란색 add record를 누르자

Type은
A
Nmae은접속할 이름
IPv4 address본인 서버의 외부 주소
Proxy status꼭 회색으로 설정
TTLAuto

Add Proxy Host를 누르자

Domain Names 에는 위에서 설정한이름.도메인이름
즉, 여기서는 test.kk21.dev
Forward Hostnamed은 컨테이너 이름
여기서는 test-main
Forward Post는 설정한 포트 번호
소켓 사용하면 Websockets Support 켜기 (선택)
Block Common Exploits 켜기

이번에는 ssl 탭
SSL Certificate는 Request a new SSL Certificate
Force SSL 켜기
HTTP/2 SUpport 켜기
HSTS Enabed 켜기
이제 설정한 경로로 들어가면 잘 뜨는 걸 볼 수 있다 ^.^

일단은 이렇게 도메인 적용 끝!!!
역시 네트워크랑 서버쪽은 어려운데 쉽고 재미있는데 어렵다 🙄
지금은 npm으로 하지만.. 다음에는 쿠버네티스로 변경하는 걸 정리해봐야겠다 !!!
쿠버네티스로 쓰면 흐름은 이렇게..
쿠버네티스 도메인 흐름
Cloudflare ↓ Ingress Controller (ex: Nginx Ingress / Traefik / Istio) ↓ Ingress (도메인 라우팅 규칙) ↓ Service (로컬 DNS, 로드밸런서) ↓ Pods (FastAPI, Streamlit, etc)
그럼 오늘 기록 끝 !