도메인을 구입하거나 무료 도메인을 서버 또는 PC의 IP에 할당하신 분들은 관련 없지만 테스트 목적으로 이 문서를 참고하여 구성 하시는 분들 께서는 OS의 hosts를 편집하여 테스트 할 도메인과 ip를 mapping 해주셔야 합니다.
테스트에 필요한 목록은 아래와 같습니다.
# hosts
xxx.xxx.xxx.xxx nexus.doamin.com
xxx.xxx.xxx.xxx registry.nexus.domain.com
xxx.xxx.xxx.xxx gitlab.doamin.com
xxx.xxx.xxx.xxx registry.gitlab.domain.com
xxx.xxx.xxx.xxx minio.domain.com
xxx.xxx.xxx.xxx console.minio.domain.com
Docker container의 hosts 설정은 docker-compose extra_hosts에 정의하시면 됩니다. (docker-compose service 설정 시)
services:
service-name:
extra_hosts:
- gitlab.domain.com:xxx.xxx.xxx.xxx
- registry.gitlab.domain.com:xxx.xxx.xxx.xxx
- nexus.domain.com:xxx.xxx.xxx.xxx
- registry.nexus.domain.com:xxx.xxx.xxx.xxx
- minio.domain.com:xxx.xxx.xxx.xxx
gitlab-runner의 hosts 설정은 config.toml에 정의하시면 됩니다. (gitlab-runner 설정 시)
[[runners]]
extra_hosts = [
"gitlab.domain.com:xxx.xxx.xxx.xxx",
"registry.gitlab.domain.com:xxx.xxx.xxx.xxx",
"nexus.domain.com:xxx.xxx.xxx.xxx",
"registry.nexus.domain.com:xxx.xxx.xxx.xxx",
"minio.domain.com:xxx.xxx.xxx.xxx"
]
(생략)
[runners.docker]
extra_hosts = [
"gitlab.domain.com:xxx.xxx.xxx.xxx",
"registry.gitlab.domain.com:xxx.xxx.xxx.xxx",
"nexus.domain.com:xxx.xxx.xxx.xxx",
"registry.nexus.domain.com:xxx.xxx.xxx.xxx",
"minio.domain.com:xxx.xxx.xxx.xxx"
]
Docker 내부에 가상 네트워크를 구성할 수 있습니다. 도커 내부에 배포되는 컨테이너들은 이 가상 네트워크에 연결됩니다.
# ./docker-compose.yml
version: "3.9"
network:
docker-host:
name: docker-host
ipam:
driver: default
config:
- subnet: 172.20.0.0/16
gateway: 172.20.0.1
nginx 배포에 앞서 nginx 설정을 편하게 하기 위해 nginx의 설정파일을 호스트 파일 시스템에 생성합니다. 경로는 ./nginx/nginx.conf 입니다.
# ./nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf; # 이 경로에 Reverse proxy 구성을 위한 설정을 추가
}
docker-compose에 reverse-proxy 서비스를 아래와 같이 구성합니다.
Host의 ./nginx/config 경로에 reverse proxy 구성 파일들(*.conf)이 위치하게 됩니다.
# ./docker-compose.yml
services:
nginx-proxy:
image: nginx:1.23.2
container_name: nginx-proxy
hostname: nginx-proxy
restart: always
ports:
- "80:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx-proxy/config:/etc/nginx/conf.d
networks:
docker-host:
ipv4_address: 172.20.0.2
다른 서비스들을 구성 한 뒤에 만들겠지만 /etc/nginx/conf.d에 생성하게 될 설정 파일의 예시 입니다.
# ./nginx/config/example.conf
upstream example.domain.com {
server example-host:8081;
}
server {
server_name example.domain.com;
listen 80 ;
location / {
proxy_pass http://example.domain.com;
}
}
폴더와 파일은 아래와 같이 만들어 집니다.
├─ nginx
│ ├─ config
│ └─ nginx.conf
└─ docker-compose.yml
docker-compose.yml이 존재하는 위치에서 아래 명령을 실행합니다.
$ docker-compsoe up -d nginx-proxy
작성된 코드는 아래 Repository에 올려두었습니다.
다음은 Nexus를 구성하고 설정하겠습니다.
- Self managed repository and CI #1 - Overview
- Self managed repository and CI #2 - Docker network, Nginx reverse proxyㆍ현재 글
- Self managed repository and CI #3 - Nexus3
- Self managed repository and CI #4 - Minio
- Self managed repository and CI #5 - Gitlab
- Self managed repository and CI #6 - Gitlab-runner
- Self managed repository and CI #7 - Gitlab-CI