Self managed repository and CI #2 - Nginx reverse proxy

Jinwon Seo·2022년 11월 30일
0
post-thumbnail

Hosts 구성 (Optional)

도메인을 구입하거나 무료 도메인을 서버 또는 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 network

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 reverse proxy

Nginx 설정파일 생성

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 구성을 위한 설정을 추가
}

Nginx 구성

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에 올려두었습니다.

Github - self-managed-repository-and-ci

Next

다음은 Nexus를 구성하고 설정하겠습니다.

  1. Self managed repository and CI #1 - Overview
  2. Self managed repository and CI #2 - Docker network, Nginx reverse proxyㆍ현재 글
  3. Self managed repository and CI #3 - Nexus3
  4. Self managed repository and CI #4 - Minio
  5. Self managed repository and CI #5 - Gitlab
  6. Self managed repository and CI #6 - Gitlab-runner
  7. Self managed repository and CI #7 - Gitlab-CI

0개의 댓글