테스트 용도의 https://publicip.sslip.io 접근 시 접근불가
클라우드 방화벽 확인
HTTPS(443)/HTTP(80) 포트의 0.0.0.0/0 Inbound Allow 확인
sslip.io 도메인 차단 우회
ubuntu@web-ide:~$ curl -vk https://localhost
* Host localhost:443 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
* Trying [::1]:443...
* connect to ::1 port 443 from ::1 port 52466 failed: Connection refused
* Trying 127.0.0.1:443...
* connect to 127.0.0.1 port 443 from 127.0.0.1 port 59452 failed: Connection refused
* Failed to connect to localhost port 443 after 2 ms: Couldn't connect to server
* Closing connection
curl: (7) Failed to connect to localhost port 443 after 2 ms: Couldn't connect to server
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0330a5a4c896 cwj3688/code-server-hol3 "/usr/bin/entrypoint…" 14 minutes ago Up 14 minutes 0.0.0.0:3000->3000/tcp, [::]:3000->3000/tcp, 0.0.0.0:80->8080/tcp, [::]:80->8080/tcp code-server-hol3
서비스 확인 시 443포트로 오픈되어 있지 않음
services:
code-server:
image: cwj3688/code-server-hol3
container_name: code-server-hol3
restart: always
ports:
- "3000:3000"
- "80:8080"
volumes:
- /home/ubuntu/project:/home/coder/project
- /var/run/docker.sock:/var/run/docker.sock
- /home/ubuntu/.scp:/home/coder/.scp
- /home/ubuntu/.scpconf:/home/coder/.scpconf
- /home/ubuntu/.kube:/home/coder/.kube
- /home/ubuntu/.config:/home/coder/.config
- /home/ubuntu/.local:/home/coder/.local
environment:
# - PASSWORD=admin12345!!
- PASSWORD=${PASSWORD}
command: /home/coder/project
# command: --auth none /home/coder/project
group_add:
# - $(shell getent group docker | cut -d: -f3)
- ${DOCKER_GID}
services:
code-server:
image: cwj3688/code-server-hol3
container_name: code-server-hol3
restart: always
ports:
- "3000:3000"
volumes:
- /home/ubuntu/project:/home/coder/project
- /var/run/docker.sock:/var/run/docker.sock
- /home/ubuntu/.scp:/home/coder/.scp
- /home/ubuntu/.scpconf:/home/coder/.scpconf
- /home/ubuntu/.kube:/home/coder/.kube
- /home/ubuntu/.config:/home/coder/.config
- /home/ubuntu/.local:/home/coder/.local
environment:
- PASSWORD=${PASSWORD}
command: /home/coder/project
group_add:
- ${DOCKER_GID}
# 새롭게 추가된 Caddy(HTTPS 프록시) 컨테이너
caddy:
image: caddy:alpine
container_name: caddy-proxy
restart: always
ports:
- "80:80"
- "443:443"
command: caddy reverse-proxy --from 123.41.35.83.sslip.io --to http://code-server:8080
volumes:
- caddy_data:/data
volumes:
caddy_data:
# 1. 기존 컨테이너 종료
sudo docker compose down
# 2. 비밀번호 및 권한 변수 다시 불러오기
PASSWORD=$(cat /home/ubuntu/project/env-info.txt | grep "Password:" | awk '{print $NF}')
DOCKER_GID=$(getent group docker | cut -d: -f3)
# 3. 새로운 구성(Code-Server + Caddy)으로 띄우기
sudo PASSWORD=$PASSWORD DOCKER_GID=$DOCKER_GID docker compose up -d
리버스 프록시(Reverse Proxy) 역할
위 내용 '[확인]' 부분 확인 시 Code-Server 컨테이너는 HTTP(8080 포트)로만 통신
그래서 Caddy가 외부에서 들어오는 HTTPS 요청을 자기가 대신 받아서,
내부의 Code-Server에게 HTTP로 안전하게 토스
무료 보안 인증서 자동 세팅
원래 https:// 자물쇠 마크를 띄우려면 인증 기관에 가서 도메인을 증명하고 복잡한 인증서를 발급받아 서버에 세팅해야 함
하지만 Caddy는 Publicip.sslip.io 라는 주소만 알려주면,
자기가 알아서 Let's Encrypt 같은 기관과 통신해 무료 보안 인증서를 받아오고 주기적으로 갱신까지 해줌