저번 글에서는 배포를 할려고 일단 꾸역꾸역 진행하긴 했으나 아주아주 잘못된 docker compose 설정을 변경하면서 오타로 인해 잘못된 볼륨 바인딩도 변경하였습니다.
1. 볼륨 바인딩 재설정 하기
지금까지 하나의 docker-compose.yml
에 WireGuard 와 nginx 를 설정하였습니다. 이러한 설정으로 인해 nginx 설정을 변경하고 docker compose down 을 하였을 때 모든 컨테이너가 중지되어 외부에서 접속을 못하는 상황이 생겼었습니다. 또한 오타로 인해 WireGuard 의 볼륨 바인딩이 잘못된 곳에 있어 수정하였습니다.
1.1 Docker 컨테이너 중지
먼저, 컨테이너가 실행 중인 상태에서 데이터를 이동하는 것은 위험하기 때문에 컨테이너를 먼저 중지하였습니다.
docker compose down
1.2 데이터 복사
/data/wg-easy-data/
에서 /data/wg-easy/data
로 데이터를 복사합니다.
rsync -av /data/wg-easy-data/ /data/wg-easy/data/
- -a : 복사할 때 파일의 모든 속성(소유권, 권한 등)을 유지
- -v : 진행 상황을 출력
1.3 복사된 데이터 확인 및 원본 데이터 삭제
데이터가 잘 복사 되었는지 확인한 후, 이전 디렉토리에서 데이터를 삭제하였습니다.
ls -la /data/wg-easy/data
rm -rf /data/wg-easy-data
2. Docker Compose 분리하기
2.1 디렉토리 생성
먼저, Nginx 를 옮길 디렉토리와 docker-compose.yml
파일부터 생성해주었습니다.
mkdir -p /data/nginx/data
mkdir -p /data/nginx/
sudo vim /data/nginx/docker-compose.yml
2.2 wg-easy 설정 (Docker Compose)
기존 wg-easy 에 있던 nginx 설정을 복사하면서 기존에 있던 내용들을 수정하였습니다.
services:
wg-easy:
environment:
- WG_HOST=
- PASSWORD=
image: weejewel/wg-easy
container_name: wg-easy
volumes:
- /data/wg-easy/data:/etc/wireguard
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
2.3 Nginx 설정 (Docker Compose, nginx.conf)
#Docker Compose
services:
nginx:
image: nginx:latest
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./univers:/usr/share/nginx/html/univers
restart: unless-stopped
nginx.conf 파일은 변경할 부분이 없기 때문에 복사하여 붙여넣는 방식을 활용하였습니다.
rsync -av /data/wg-easy/nginx.conf /data/nginx/nginx.conf
후에 기존에 남아있던 파일은 삭제해주었습니다.
sudo rm -rf /data/wg-easy/nginx.conf
3. Docker Compose 에서 같은 네트워크 사용하기
기존 Docker Compose 에 Nginx 와 WireGuard 가 같이 설정되어 있어 networks 를 따로 설정할 필요가 없었는데 이제는 두 서비스가 별도의 Docker Compose 파일에서 실행되고 있기 때문에 Nginx 가 wg-easy 컨테이너를 바로 참조할 수 없습니다. 따라서 Nginx 와 wg-easy가 동일한 네트워크에서 실행되도록 설정해야 합니다.
3.1 Docker Compose에서 같은 네트워크 사용하기
각 서비스의 Docker Compose 파일에 공유 네트워크를 추가합니다.
#nginx의 docker-compose.yml
services:
nginx:
image: nginx:latest
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- /usr/share/nginx/html/univers/:/usr/share/nginx/html/univers
networks:
- shared_network
restart: unless-stopped
networks:
shared_network:
external: true
#wg-easy의 docker-compose.yml
services:
wg-easy:
image: weejewel/wg-easy
container_name: wg-easy
environment:
- PASSWORD=yourpassword
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
volumes:
- ./wg-easy:/config
networks:
- shared_network
restart: unless-stopped
networks:
shared_network:
external: true
4. 현재 디렉토리 구조
다음과 같이 nginx 와 wg-easy 디렉토리를 따로 나누어 관리한다 !
이제 다음에는 VPN 연결 안되어 있어도 배포된 주소로 접속할 수 있게 해야겠다.
'라즈베리파이 가지고 놀기' 카테고리의 다른 글
라즈베리파이에 Object Storage Minio 설정하기 (3) | 2024.10.29 |
---|---|
외부에서 도메인으로 접속 가능하게 설정하기 (4) | 2024.10.22 |
라즈베리파이4에 nginx 올리기 (1) | 2024.10.18 |
라즈베리파이4에 wg-easy VPN 설정하여 외부에서 접속하기 (6) | 2024.10.18 |
라즈베리파이4에 Ubuntu 22.04.05 LTS 설치하기 (4) | 2024.10.17 |