본문 바로가기
시스템/쿠버네티스

[쿠버네티스] 깃랩(Giglab) 설치

by cbwstar 2024. 1. 10.
728x90
반응형

참고 사이트 : https://workshop.infograb.io/setup-gitlab/3_setup_gitlab/1_create_working_directory/

 

설치 디렉토리 생성 - Setup CI/CD System with GitLab

설치 디렉토리 생성 모든 Repository 데이터를 저장할 수 있을 만큼의 여유 공간이 있는 경로에 GitLab 작업 디렉토리 (Working directory)를 생성합니다. sudo mkdir -p /data/gitlab && cd /data/gitlab GitLab 데이터를

workshop.infograb.io

1. 도커 컴포즈 파일 생성

 - 설치 폴더 생성

    mkdir -p /home/docker/gitlab

 - vi docker-compose.yml

version: '3.9'

services:
  gitlab:
    image: 'gitlab/gitlab-ee:latest'
    container_name: gitlab
    restart: always
    hostname: "invako"
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://invako.com:4443'
        gitlab_rails['gitlab_shell_ssh_port'] = 8022
        # Add any other gitlab.rb configuration here, each on its own line        
      TZ: 'Asia/Seoul'
    ports:
      - '8090:80'
      - '4443:443'
      - '8022:22'
    volumes:
      - './config:/etc/gitlab'
      - './logs:/var/log/gitlab'
      - './data:/var/opt/gitlab'

 

2. 기동

docker compose up -d

3. 종료

docker compose down

4. 로그 확인

docker compose logs -f

5. 설치확인

사용자계정 : root
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

설치한 GitLab이 정상 동작하는지 Web으로 접속하여 확인합니다.
external_url로 설정했던 URL(예: https://gitlab.example.com)에 접속합니다

 

/* 위에 방법으로 설치시  nginx에서 도메인으로 ssl 인증서 생성시 도메인이 없는 경우가 발생하여 설치가 안될수도 있습니다. 도메인이 없는 경우에는 그냥 하나씩 다운 받아서 설치 합니다. */

깃허브에서 도커 우분투 22.04버전 이미지를 다운받습니다.

 

6. 도커 우분투 22.04 에 깃랩 설치하기

   vi Dockerfile

FROM ubuntu:22.04

ARG DEBIAN_FRONTEND=noninteractive

ENV TZ=Asia/Seoul

RUN sed -i 's/kr.archive.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list

RUN apt update \
  && apt install -qq -y init systemd \
  && apt install -qq -y build-essential \
  && apt install -qq -y tzdata \
  && apt install -qq -y vim curl telnet net-tools \
  && apt-get clean autoclean \
  && apt-get autoremove -y \
  && rm -rf /var/lib/{apt,dpkg,cache,log}

CMD ["/sbin/init"]

 1) 도커 이미지 생성

도커 빌드 : docker build --tag [생성될 이미지 태그명] .[.은 현재디렉토리에 Dockfile 선택]
docker build --tag cbwstar/ubuntu:22.04 .

2) 이미지 생성 확인

  docker images

3) 도커 실행

    vi docker_ubuntu_22.04_container.sh

#!/usr/bin/env bash

docker network create --subnet 192.168.10.0/24 --gateway 192.168.10.1 apps_net

docker run -d --name gitlab \
       -p 8090:80 -p 8022:22 -p 4443:443 -p 587:587 \
       --privileged=true \
       --hostname gitlab \
       --restart always \
       --net apps_net \
       --ip 192.168.10.2 \
       -v ./config:/etc/gitlab \
       -v ./logs:/var/log/gitlab \
       -v ./data:/var/opt/gitlab \
       cbwstar/ubuntu:22.04 \
       /sbin/init

4) 실행권한 부여

    chmod 777 *.sh

5) Shell 실행

root@master:/home/docker/gitlab# ./docker_ubuntu_22.04_container.sh 
a2b4efe6b765c6f0208d4593486426c7758c0e2489a4041fb68c93d785dfecc4

6) 도커 컨테이너 접속

   docker ps -a

   컨테이너 아이디 확인후 접속 명령어로 컨테이너 접속

    docker exec -it gitlab /bin/bash

7) 우분투22.04 컨테이너 접속후 깃랩 설치

필수 의존성 라이브러리 설치
apt-get update
apt-get install -y openssh-server ca-certificates 
Gitlab 패키지 레퍼지토리 추가 후 설치
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | bash

환경 변수 설정과 함께  gitlab-ce 를 설치한다
EXTERNAL_URL="http://192.168.2.50:8090/" apt-get install gitlab-ce

 

It looks like GitLab has not been configured yet; skipping the upgrade script.

       *.                  *.
      ***                 ***
     *****               *****
    .******             *******
    ********            ********
   ,,,,,,,,,***********,,,,,,,,,
  ,,,,,,,,,,,*********,,,,,,,,,,,
  .,,,,,,,,,,,*******,,,,,,,,,,,,
      ,,,,,,,,,*****,,,,,,,,,.
         ,,,,,,,****,,,,,,
            .,,,***,,,,
                ,*,.
  


     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ `/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/
  

Thank you for installing GitLab!
GitLab should be available at http://192.168.2.50:8090/

For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md

Help us improve the installation experience, let us know how we did with a 1 minute survey:
https://gitlab.fra1.qualtrics.com/jfe/form/SV_6kVqZANThUQ1bZb?installation=omnibus&release=16-7

이렇게 나오면 설치가 완료 되었다.

/* 기본적으로 실행하면 ssl 인증서 때문에 오류가 발생한다.

 

7. 사설 인증서를 만든다.

 mkdir -p /home/docker/gitlab/config/ssl

 cd /home/docker/gitlab/config/ssl

1. 인증기관 인증서 생성
     프로덕션 환경에서는 CA로부터 인증서을 받아야 합니다. 테스트 또는 개발 환경에서는 자체 CA를 생성 할 수 있습니다.
  1) CA 인증서 개인 키를 생성합니다.
openssl genrsa -out ca.key 4096
   2) CA 인증서를 생성합니다.
openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Osong/L=Osong/O=invako/OU=Personal/CN=192.168.2.50" \
 -key ca.key \
 -out ca.crt
2. 서버 인증서를 생성합니다.
  1) 개인키(비밀키) 생성
/* 아이피(192.168.2.50) hosts (invako.com) 또는 도메인 입력 */
vi /etc/hosts
10.0.100.2 master
10.0.100.3 node1
10.0.100.4 node2
10.0.100.5 node3

192.168.2.50 invako.com invako
/* 호스트 파일에 테스트용 도메인 등록 */

openssl genrsa -out invako.com.key 4096

   2) 인증서 서명 요청(CSR)을 생성합니다.
/* CN은 도메인이나 아이피 입력 */
openssl req -sha512 -new \
    -subj "/C=CN/ST=South/L=Osong/O=invako/OU=Personal/CN=invako.com" \
    -key invako.com.key \
    -out invako.com.csr
   3) x509 v3 확장 파일을 생성합니다. 
Harbor 호스트에 연결하기 위해 FQDN 또는 IP 주소를 사용하는지 여부에 관계없이
SAN(주체 대체 이름) 및 x509 v3을 준수하는 Harbor 호스트에 대한 인증서를 생성할 수 있도록
이 파일을 생성해야 합니다.
확장 요구 사항. DNS도메인을 반영하도록 항목 을 바꿉니다.

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=invako.com
DNS.2=invako
DNS.3=master
EOF
  4) v3.ext 파일을 사용하여 호스트에 대한 인증서를 생성한다.
openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in invako.com.csr \
    -out invako.com.crt

8. 깃랩 환경변수 편집

   

vi /etc/gitlab/gitlab.rb
:set number    #라인넘버표시
30 ##! address from AWS. For more details, see:
31 ##! https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
32 external_url "https://invako.com:8090/"
/* 32 라인에 외부 접속 https주소 설정 */

/* nginx 주석 해제하고 접속정보 및 인증서 경로 설정 */
1629 ################################################################################
1630 ## GitLab NGINX
1631 ##! Docs: https://docs.gitlab.com/omnibus/settings/nginx.html
1632 ################################################################################
1633 
1634 nginx['enable'] = true
1635 nginx['client_max_body_size'] = '250m'
1636 nginx['redirect_http_to_https'] = false
1637 # nginx['redirect_http_to_https_port'] = 80
1638 
1639 ##! Most root CA's are included by default
1640 nginx['ssl_client_certificate'] = "/etc/gitlab/ssl/ca.crt"
1641 
1642 ##! enable/disable 2-way SSL client authentication
1643 # nginx['ssl_verify_client'] = "off"
1644 
1645 ##! if ssl_verify_client on, verification depth in the client certificates chain
1646 # nginx['ssl_verify_depth'] = "1"
1647 
1648 nginx['ssl_certificate'] = "/etc/gitlab/ssl/invako.com.crt"
1649 nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/invako.com.key"
1650 # nginx['ssl_ciphers'] = "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDS     A-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"
1651 # nginx['ssl_prefer_server_ciphers'] = "off"
1652 
1653 ##! **Recommended by: https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
1654 ##!                   https://cipherli.st/**
1655 nginx['ssl_protocols'] = "TLSv1.2 TLSv1.3"
1656 
1657 ##! **Recommended in: https://nginx.org/en/docs/http/ngx_http_ssl_module.html**
1658 # nginx['ssl_session_cache'] = "shared:SSL:10m"
1659 
1660 ##! **Recommended in: https://ssl-config.mozilla.org/#server=nginx&version=1.17.7&config=intermediate&openssl=1.1.1d&ocsp=false&guideline=5.6**
1661 # nginx['ssl_session_tickets'] = "off"
1662 
1663 ##! **Default according to https://nginx.org/en/docs/http/ngx_http_ssl_module.html**
1664 # nginx['ssl_session_timeout'] = "1d"
1665 
1666 # nginx['ssl_dhparam'] = nil # Path to dhparams.pem, eg. /etc/gitlab/ssl/dhparams.pem
1667 # nginx['ssl_password_file'] = nil # Path to file with passphrases for ssl certificate secret keys
1668 nginx['listen_addresses'] = ['*', '[::]']
1669 
1670 ##! **Defaults to forcing web browsers to always communicate using only HTTPS**
1671 ##! Docs: https://docs.gitlab.com/omnibus/settings/nginx.html#setting-http-strict-transport-security
1672 nginx['hsts_max_age'] = 63072000
1673 # nginx['hsts_include_subdomains'] = false
1674 
1675 ##! Defaults to stripping path information when making cross-origin requests
1676 # nginx['referrer_policy'] = 'strict-origin-when-cross-origin'
1677 
1678 ##! **Docs: http://nginx.org/en/docs/http/ngx_http_gzip_module.html**
1679 nginx['gzip_enabled'] = true
1680 
1681 ##! **Override only if you use a reverse proxy**
1682 ##! Docs: https://docs.gitlab.com/omnibus/settings/nginx.html#setting-the-nginx-listen-port
1683 nginx['listen_port'] = 4443
1684 
1685 ##! **Override only if your reverse proxy internally communicates over HTTP**
1686 ##! Docs: https://docs.gitlab.com/omnibus/settings/nginx.html#supporting-proxied-ssl
1687 nginx['listen_https'] = false
1688 
1689 ##! **Override only if you use a reverse proxy with proxy protocol enabled**

/* Let's Encrypt 인증오류가 난다면 사용안함 false 처리 */
2736 ################################################################################
2737 # Let's Encrypt integration
2738 ################################################################################
2739 letsencrypt['enable'] = false
2740 # letsencrypt['contact_emails'] = [] # This should be an array of email addresses to add as contacts
2741 # letsencrypt['group'] = 'root'
2742 # letsencrypt['key_size'] = 2048
2743 # letsencrypt['owner'] = 'root'

9. 설정 내용 반영

$ gitlab-ctl reconfigure

10. gitlab 시작

$ gitlab-ctl start

11. 깃랩 서비스 포트 확인

$ netstat -nltp

12. 깃랩 상태 확인

$ gitlab-ctl status

 

13 깃랩 삭제

/* 삭제방법 */
sudo gitlab-ctl cleanse
sudo gitlab-ctl uninstall

sudo apt-get remove gitlab-ce
sudo apt-get purge gitlab-ce

/* 폴더 삭제 */
/opt/gitlab
/var/opt/gitlab
/etc/gitlab
/var/log/gitlab
/etc/yum.repos.d/gitlab 관련파일

 

14. 깃랩 root 계정 비밀번호 설정 방법

/* 초기 비밀번호 확인 */
사용자계정 : root
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

/* 비밀번호 변경 */
# sudo gitlab-rails console -e production
# user = User.where(id: 1).first
# => #<User id:1 @root>
# user.password='[변경할 비밀번호]'
# user.password_confirmation='[변경할 비밀번호]'
# user.save
# => true
# exit

 

15. 깃랩 관련 명령어

- 설정적용

gitlab-ctl reconfigure

- 서비스 재시작

gitlab-ctl restart

- 서비스 상태확인

gitlab-ctl status

서비스 중지

gitlab-ctl stop

 

16. 외부에서 최종 접속 화면

https://invako.com:8090/

728x90
반응형

댓글



"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

loading