GitLab CE/EE 설치

  • 기존 apache서버가 가동중인 우분투20.04 서버에 설치한 내용입니다.
  • Gitlab공식패키지(Omnibus)를 사용하여 설치합니다.
  • HTTPS적용과 Email(gmail연동)발송까지 다룹니다.

CE vs EE

  • CE: 무료버전으로 기능제한이 있음(MIT라이선스)
  • EE: 기본적으로 무료사용(GitLab EE라이선스). 필요시 유료기능 업그레이드 가능(추천)
  • 설치방법은 CE와 EE 동일합니다.

종속성 설치

1
2
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl

메일링을 위한 postfix 설치

1
sudo apt-get install -y postfix

GitLab 패키지 저장소를 추가 및 설치

  • EXTERNAL_URL은 사용하고자하는 도메인 또는 IP주소를 입력합니다.
  • 특정포트를 사용하는 것도 가능합니다.
    1
    2
    3
    4
    5
    6
    # CE
    curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
    sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ce
    # 또는 EE
    curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
    sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ee

설치완료

  • 초기 관리자 계정
  • ID: root
  • Password: /etc/gitlab/initial_root_password 파일에 임시 비밀번호가 24시간 동안 저장 되어있습니다.
    1
    cat /etc/gitlab/initial_root_password

HTTPS적용

  • apache모듈을 설치/활성화 합니다.(이미 되어있는 경우 생략가능)
  • 도메인 연동(예: gitlab.example.com)
    • gitlab ce/ee는 1218포트로 사용을 예시로 합니다.
  • SLL인증서 적용(certbot 사용)
  • gitlab은 기본 nginx서버를 사용합니다. nginx사용을 비활성화하고 적용합니다.

APACHE 모듈 설치/활성화

  • Reverse Proxy를 사용하여 GitLab ce/ee포트로 연결하기 위해 필요합니다.
  • CSRF Token오류해결을 위해 headers 모듈도 설치합니다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 필요한 Apache 모듈 설치
    sudo apt update
    sudo apt install libapache2-mod-headers libapache2-mod-ssl

    # 모듈 활성화
    sudo a2enmod headers
    sudo a2enmod ssl
    sudo a2enmod proxy
    sudo a2enmod proxy_http

APACHE(Reverse Proxy로 1218포트로 연결)

  1. /etc/apache2/site-available/gitlab.example.com.conf (가상호스트 파일)을 생성하고 다음과 같이 작성합니다.
    1
    sudo nano /etc/apache2/site-available/gitlab.example.com.conf
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName gitlab.example.com
    DocumentRoot "/opt/gitlab/embedded/service/gitlab-rails/public"
    ProxyRequests Off

    <Location />
    ProxyPreserveHost On
    ProxyPass http://0.0.0.0:1218/
    proxyPassReverse http://0.0.0.0:1218/
    </Location>
    RewriteEngine on
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
    RewriteRule .* http://0.0.0.0:1218%{REQUEST_URI} [P,QSA]

    <IfModule mod_headers.c>
    RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
    RequestHeader set "X-Forwarded-SSL" expr=%{HTTPS}
    </IfModule>
    </VirtualHost>
    • CSRF Token오류로 인한 로그인 문제해결을 위해 RequestHeader부분을 하단에 추가했습니다.
  2. apache에 가상호스트 등록 / apache 재시작
    1
    2
    sudo a2ensite gitlab.example.com.conf
    sudo service apache2 restart

SSL 인증서 적용(certbot 으로 let’s encrypt 인증서 발급)

  1. certbot 설치:
    1
    2
    sudo apt update
    sudo apt install certbot python3-certbot-apache
  2. 인증서 발급
    • 아래명령 실행 후 gitlab.example.com를 선택하여 SSL인증서를 발급받습니다.
    • 이메일주소 입력부분이 있고 나머지는 대부분 동의만 하면됩니다.
      1
      sudo certbot --apache
  3. 인증서 자동갱신(crontab 사용)
    • let’s encrypt 인증서는 90일 주기로 갱신이 필요합니다.
      1
      2
      3
      4
      5
      6
      crontab -e

      # 아래 두줄을 추가합니다.

      45 3 * * 1 sudo certbot renew --dry-run
      45 3 * * 1 /usr/sbin/service apache2 reload

E-MAIL발송 설정: Gmail STMP사용하기

Gmail 앱비밀번호 생성/ 메일POP사용 설정: 따로 다루지 않습니다.

gitlab.rb파일 설정(문서)

  1. /etc/gitlab/gitlab.rb의 내용을 수정합니다.
    1
    sudo nano /etc/gitlab/gitlab.rb
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    external_url "https://gitlab.example.com"

    # 기존내용에서 아래 부분을 추가합니다.

    # nginx비활성화 및 apache연동
    nginx['enable'] = false # nginx 비활성화
    gitlab_workhorse['listen_network'] = "tcp"
    gitlab_workhorse['listen_addr'] = "0.0.0.0:1218" # 1218포트 설정

    # gmail SMTP
    gitlab_rails['smtp_enable'] = true
    gitlab_rails['smtp_address'] = "smtp.gmail.com"
    gitlab_rails['smtp_port'] = 587
    gitlab_rails['smtp_user_name'] = "mygmail@gmail.com" # 구글계정(이메일주소)
    gitlab_rails['smtp_password'] = "#### #### #### ####" # 구글계정 앱 비밀번호
    gitlab_rails['smtp_domain'] = "smtp.gmail.com"
    gitlab_rails['smtp_authentication'] = "login"
    gitlab_rails['smtp_enable_starttls_auto'] = true
    gitlab_rails['smtp_tls'] = false
    gitlab_rails['smtp_openssl_verify_mode'] = 'peer'

    # 이부분은 Google Workspace 사용시 가능(선택)
    # gitlab_rails['gitlab_email_from'] = 'gitlab@example.com' # 발송자 메일주소를 다르게 표시
    # gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.com' # 답변받을 매일주소를 다르게 설정
  2. 저장 후 gitlab설정파일을 다시로드합니다.
    1
    sudo gitlab-ctl reconfigure
  3. 재시작이 필요하면
    1
    sudo gitlab-ctl restart

설정 적용 후 약간의 딜레이가 있는 것 같습니다.(5분이내)


STEP 1: Gitlab/Github에 프로젝트 생성

프로젝트명

프로젝트 이름을 사용자계정 또는 그룹명에 맞게 아래와 같이 설정해야 Gitlab/Github의 서브도메인으로 블로그에 접속할 수 있습니다.

  • [계정명].gitlab.io
  • [그룹명].gitlab.io

빈프로젝트/공개프로젝트로 만들기

  • README파일도 생성하지않는 빈프로젝트로 만들어줍니다.
  • 모두에게 공개할 예정이면 Public으로 설정.
  • (참고) Gitlab의 경우 그룹도메인으로 생성할 경우 그룹자체를 public으로 만들어야 합니다.

STEP 2: Hexo설치(리눅스 예시)

  • Git이 설치 되어있어야 합니다.(Git설치 방법은 생략)

npm으로 Hexo설치

1
npm install -g hexo-cli

git으로 deploy하기위한 플러그인 설치(선택)

1
npm install hexo-deployer-git --save

새로운 Hexo 블로그 디렉터리 생성 및 초기화:

Hexo 블로그를 새로운 디렉터리에 초기화합니다.
터미널에서 다음 명령을 사용합니다:

1
2
3
hexo init myblog
cd myblog
npm install

로컬에서 Git 초기화:

Hexo 블로그 디렉터리에서 Git을 초기화합니다:

1
git init

Gitlab/Github에서 새로운 레포지토리 생성:

STEP1에서 만든 GIT의 레포지토리와 연결합니다.

1
git remote add origin [새로운 레포지토리 URL]

GitLab CI/CD 설정:

Hexo 블로그 디렉터리에 .gitlab-ci.yml 파일을 생성하고, 아래의 내용을 추가합니다:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
image: node:latest

before_script:
- npm install -g hexo-cli
- npm install

pages:
script:
- hexo generate
artifacts:
paths:
- public
only:
- master

이 파일은 Hexo 블로그를 빌드하고 결과물을 GitLab Pages에 업로드합니다.


Hexo _config.yml 수정:

Hexo 블로그 디렉터리에 있는 _config.yml 파일을 열어서 url 값을 설정합니다:

1
url: https://사용자명.gitlab.io

로컬에서 블로그 미리보기 및 업데이트 확인:

Hexo 서버를 실행하여 변경 사항을 로컬에서 확인합니다:

1
hexo server

테스트 글 작성

1
hexo new post '새로운 글'

변경된 내용을 기반으로 블로그를 업데이트합니다:

1
2
hexo generate
hexo deploy

또는

1
hexo g -d

Git에 변경사항 커밋 및 푸시

위에서 deploy가 안될경우 hexo g 로 빌드만 하고 직접 commit & push합니다.

1
2
3
git add .
git commit -m "블로그 초기화 및 업데이트"
git push -u origin master

이제 GitLab에 있는 프로젝트도 초기화되었고, 새로운 Hexo 블로그가 설정되어 다시 시작됩니다. 이를 통해 새로운 프로젝트로부터 Hexo 블로그를 다시 설정하고 시작할 수 있습니다.


참고

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

Ubuntu: SSH Key 생성

ssh-key 생성

1
ssh-keygen -t sra

원격서버에 공개키 전송

1
scp ~/.ssh/id_rsa.pub ubuntu@[IP_ADDRESS]:~/

원격 서버에서 공개키 등록

1
2
3
4
5
6
ssh ubuntu@[IP_ADDRESS]

#.ssh폴더가 없으면 만들어줍니다.(있으면 생략)
mkdir 700 .ssh

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

scrcpy 설치

1
sudo apt install android-tools-adb
1
sudo snap install scrcpy

스마트폰 개발자 모드 on

PC와 스마트폰 USB로 연결

scrcpy 실행

그놈 터미널(gnome-terminal) 프로파일 백업/복원

  • 새로운 PC에 그놈터미널 프로파일 초기설정하는게 귀찮아서 정리합니다.
  • 우분투에서 지원하는 기본 터미널인 그놈 터미널의 프로파일은 백업과 불러오기 기능이 지원하지 않아 dconf를 이용해야 합니다.

백업(backup)

1
dconf dump /org/gnome/terminal/ > gnome_terminal_settings_backup.txt

복원 전 재설정(삭제) – (실제로 필요하지 않을 수 있음)

1
dconf reset -f /org/gnome/terminal/

복원(restore)

1
dconf load /org/gnome/terminal/ < gnome_terminal_settings_backup.txt

git ignore 적용하기

  • .gitignore파일을 설정해도 적용이 안될 시
    1
    2
    3
    git rm -r --cached .
    git add .
    git commit -m "Apply .gitignore"

PyPi란?

Python Package Index (PyPI)는 Python 프로그래밍 언어 용 소프트웨어(패키지) 저장소입니다. 본 포스트에서는 pip의 private 저장소를 우분투서버에 설치하는 방법을 정리했습니다.

pypi-server 설치하기

1
pip install pypiserver

계정/암호 생성

1
2
3
4
5
6
7
8
9
10
11
# htpasswd사용을 위한 apache2 패키지 설치
sudo apt update
sudo apt install apache2

# 암호화된 파일을 사용하기위한 passlib 패키지 설치
pip install passlib

# 암호생성
# htpasswd -sc [암호화된 파일&경로] [계정ID]
htpasswd -sc .htpasswd userid
# 비밀번호를 2회 입력해준다. -> 현재경로에 .htpasswd파일이 생성됩니다.

PyPi 서버 실행

패키지가 저장될 경로(./pypi_packages)는 알맞게 수정

1
2
# pypi-server -p [Port] -P [htpasswd파일 경로] [패키지가 저장될 경로] &
pypi-server -p 8888 -P .htpasswd ./pypi_packages &

사용하기

  • 사용하려는 사용자 홈(우분투 기준)에 .pypirc파일을 아래와 같이 작성해 준다.
    .pypirc
    1
    2
    3
    4
    5
    6
    7
    8
    [distutils]
    index-servers =
    local

    [local]
    repository: http://localhost:8888
    username: userid
    password: userpassword
  • 만약에 외부 서버에 도메인을 연동하여 사용중이라면 pip를 사용할때 --trusted-host 옵션을 붙여 줘야한다.
    1
    2
    # 예
    pip install some_lib --trusted-host mypypi_server_domain.com

우분투에 도커 설치

오라클 클라우드(OCI)에서 CPU에 따라 APT 저장소가 달라 구분해서 작성해 둡니다.

AMD(OCI E2 micro 등..)

1
2
3
4
5
6
7
8
9
sudo apt update -y && sudo apt install nano curl -y \
&& sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y \
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - \
&& sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" -y \
&& sudo apt update -y \
&& sudo apt install docker-ce docker-ce-cli containerd.io -y \
&& COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d\" -f4) \
&& sudo curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
&& sudo chmod +x /usr/local/bin/docker-compose;

ARM(OCI A1 등..)

1
2
3
4
5
6
7
8
9
sudo apt update -y && sudo apt install nano curl -y \
&& sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y \
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - \
&& sudo add-apt-repository "deb [arch=arm64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" -y \
&& sudo apt update -y \
&& sudo apt install docker-ce docker-ce-cli containerd.io -y \
&& COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d\" -f4) \
&& sudo curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
&& sudo chmod +x /usr/local/bin/docker-compose;

[Git] git-prompt(깃 프롬프트) 설정하기

아래는 .bashrc까지 등록해서 자동으로 적용되는 스크립트입니다.(export부분은 취향에 맞게 수정)

1
2
3
4
5
cd ~ \
&& wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -O .git-prompt.sh \
&& echo -e "\nsource ~/.git-prompt.sh" >> .bashrc \
&& echo -e "export PS1='\[\033[0;32m\]\[\033[0m\033[0;32m\]\u\[\033[0;36m\]@\[\033[0;36m\]\h:\w\[\033[0;32m\]\$(__git_ps1)\\\\n\[\033[0;32m\]└─\[\033[0m\033[0;32m\]\$\[\033[0m\033[0;32m\]▶\[\033[0m\] '" >> .bashrc \
&& source .bashrc;
0%