참고 사이트 : https://workshop.infograb.io/setup-gitlab/3_setup_gitlab/1_create_working_directory/
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. 외부에서 최종 접속 화면
'시스템 > 쿠버네티스' 카테고리의 다른 글
[쿠버네티스] 플러그인 패키지 매니저 krew설치 (0) | 2024.01.12 |
---|---|
[쿠버네티스] 깃랩 SSL certificate problem: unable to get local issuer certificate (0) | 2024.01.11 |
[쿠버네티스] Harbor(하버) 설치하기 TLS CA키 생성 (0) | 2024.01.10 |
[쿠버네티스] 우분투22.04 도커 설치하기 (0) | 2024.01.09 |
[쿠버네티스] 헬름 설치 (0) | 2024.01.09 |
댓글