brunch

You can make anything
by writing

C.S.Lewis

by 시류아 Dec 10. 2020

우분투에 GitLab/ MySQL
설치 및 저장소 변경

GitLab과 MySQL를 설치하고 저장소 경로를 바꾸어보자


최근 시연을 목적으로 테스트 베드를 제작하면서 여러 장비 내 펌웨어 및 제어 프로그램 소스코드 관리, 그리고 수집된 데이터를 관리 및 활용할 수 있도록 시스템을 구축했습니다.


우분투 20.04 LTS를 기반으로 코드 관리 목적의 GitLab CE, 데이터 관리 목적의 MySQL, 마지막으로 DB 계정 등 권한 관리를 조금 편하게 하기 위해 phpMyAdmin을 설치해서 저장 경로 변경 등의 작업을 진행하여 환경을 구축했는데요?


차후에 비슷한 환경을 다시 구축해야 될 때, 편하게 따라 할 겸, 약간의 수고를 들인 것을 잊지 않고 기억하기 위해서 정리하여 남겨두고자 합니다.




시스템 구성 하드웨어

intel i5 Desktop PC

SSD 500 GB → OS 설치

HDD 6 TB → Git 및 DB 데이터 저장


시스템 구성 소프트웨어

Ubuntu 20.04 LTS → OS

Gitlab CE → 소스코드 관리

MySQL → 데이터베이스, 수집 데이터 관리

phpMyAdmin → MySQL 관리




가. 패키지 업데이트 및 업그레이드

$ sudo apt-get update
$ sudo apt-get upgrade



나. SSH 설치

$ sudo apt-get install ssh openssh-server

참고사항, ssh만 설치해도 openssh-server 같이 설치됨



다. GitLab CE 설치

여러 기능이 많은 엔터프라이즈 에디션도 나쁘지 않지만, 코어만 있어도 기본적인 관리가 가능하니 커뮤니티 에디션 설치


1. 설치 전 필요 패키지 설치

$ sudo apt-get install -y curl ca-certificates tzdata


2. 메일 발송을 위한 postfix 설치

$ sudo apt-get install -y postfix

[General type of mail configuration]에서 [Internet Site] 선택

[System mail name]에서 사용 중인 메일 또는 사용하고 있는 DNS 기반 이메일 주소 입력
예시. siryua@kakao.com 또는 admin@siryua.net 등


3. GitLab 패키지 repo 추가

$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

커뮤니티 에디션이 아닌 엔터프라이즈 에디션을 설치하고자 한다면 중간에 [gitlab-ce]를 [gitlab-ee]로 변경


4. Gitlab 기본 주소 설정 및 설치

$ sudo EXTERNAL_URL="http://localhost" apt-get install gitlab-ce

커뮤니티 에디션이 아닌 엔터프라이즈 에디션을 설치하고자 한다면 [gitlab-ce]를 [gitlab-ee]로 변경

GitLab 접속 포트를 설정하고자 한다면 EXTERNAL_URL의 주솟값에 포트를 포함하여 기입
예시. EXTERNAL_URL="http://localhost:8080" 등

DNS 주소로 접속하고 싶다면 DNS 주소 입력
예시. EXTERNAL_URL="https://gitlab.siryua.net" 등


5. 브라우저에서 설정해둔 주소로 로그인 및 root 계정 비밀번호 설정


6. root 계정 로그인 후 개인 설정 진행



라. HDD 포맷 및 마운트

저장소로 사용할 HDD 포맷 및 마운트 진행


1. 하드 디스크 확인

$ sudo fdisk -l


2. 파티션 생성

$ sudo parted /dev/sda

[/dev/sda]는 하드 연결에 따라 달라짐, 넘버링에 따라 변경하면 됨


mklabel 입력 후 gpt

 내부 데이터가 모두 사라진다는 메시지에 [yes] 입력


unit GB 입력하여 단위 변환
print 입력하여 용량 확인
mkpart primary 0GB XXXXGB 입력 (용량에 맞추어 XXXX 입력)
q 입력하여 커맨드로 복귀

 * 귀찮을 경우 기본 내장되어 있는 [디스크] 프로그램 사용해도 됨.


3. 파티션 포맷

$ mkfs.ext4 /dev/sda


4. UUID 확인

$ sudo blkid

/dev/sda의 UUID 기록 (C+V)


5. 마운트 할 경로 생성

$ sudo mkdir /hdd


6. OS 재시작 시 자동 마운트 설정

$ sudo gedit /etc/fstab

gedit 대신 nano 나 vim 사용해도 됨


UUID=[/dev/sda 의 UUID] /hdd ext4 defaults 0 1

맨 마지막 줄에 위와 같이 추가 후 저장


7. 마운트 후 이상 유무 확인

$ sudo mount -a
$ df -h

 정상적으로 마운트 되면 하드디스크 정보가 표기됨



마. GitLab 저장소 위치 추가 및 변경하기

SSD에는 다른 패키지도 여럿 설치가 이루어져야 되고, 많은 데이터를 저장하기에는 용량이 부족하니 추가한 HDD로 GitLab 저장소 위치 추가 및 변경


1. 서비스 중지

$ sudo gitlab-ctl stop

수정 중 문제가 없도록 서비스 중지


2. gitlab 설정 파일 수정

$ sudo gedit /etc/gitlab/gitlab.rb

gedit 대신 nano 나 vim 사용해도 됨


git_data_dirs({
  "default" => { "path" => "/var/opt/gitlab/git-data"},
  "hdd" => { "path" => "/hdd/gitlab/git-data" }
})

user['username'] = "git"
user['group'] = "git"

git_data_dirs는 레포지토리 저장 경로 관련, 주석 해제 후 추가한 [HDD] 마운트 경로 추가

user['user name'] 과 user['group'] 은 GitLab 기본 사용자 설정, 주석 해제 후 "git"으로 기입

수정이 완료되었으면 저장


3. 레포지토리 저장 경로 생성 후 권한 부여

$ sudo mkdir /hdd/gitlab/git-data
$ sudo chmod 755 /hdd
$ sudo chmod 755 /hdd/gitlab
$ sudo chown -R git:git /hdd/gitlab/git-data/

[git-data] 폴더는 [git] 유저가 소유자가 되어있어야 에러가 발생 안 함

[/hdd] 와 [/hdd/gitlab] 폴더를 접근할 수 없다면 [git-data] 소유자 권한 있어도 사용 불가
[퍼미션 755]로 읽을 수 있도록 설정


 4. 수정사항 반영하기

$ sudo gitlab-ctl reconfigure

권한 문제가 발생한다면 모든 경로의 권한 확인 진행

오류가 발생한다면 다음과 같이 입력해서 캐시 삭제

$ gitlab-rake cache:clear Rails_ENV=production


5. 서비스 재시작 및 저장소 설정

$ sudo gitlab-ctl start

이상 없이 수정 반영이 완료되었으면 서비스 다시 시작


GitLab > 로그인 > 관리자 영역 > 설정 > 저장소 > 저장소의 저장 공간 > Storage nodes for new repositories

한글 기준 설정 경로

[Storage nodes for new repositories]에 있는 퍼센트 값을 조절하여 저장소 경로 조절 가능

추가한 [HDD]만 사용하고 싶다면 [default]를 0으로 설정하고 [HDD]를 100으로 설정



바. MySQL 설치 및 설정

장비에서 올라오는 많은 실시간 데이터를 기록하고 관리하여 생산물을 만들어내기 위한 데이터베이스 설치


1. 설치

$ sudo apt-get install mysql-server


2. 포트(3306) 오픈

$ sudo ufw allow mysql


3. 서비스 시작

$ sudo systemctl start mysql


4. MySQL 접속 및 root 계정 설정

$ sudo /usr/bin/mysql -u root -p

정상적으로 접속되었다면 SQL 프롬프트 보임


mysql> use mysql

주의사항, SQL 프롬프트 내 진행

미리 해두면 phpMyAdmin 설정할 때 오류를 줄일 수 있음


mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
| root             | auth_socket           |
+------------------+-----------------------+

auth_socket으로 되어있는 경우 아래와 같이 진행하여 [mysql_native_password]로 변경

[mysql_native_password]로 변경하지 않을 경우 [phpMyAdmin] 설정 후 로그인 오류 발생함


mysql> update user set plugin='mysql_native_password' where user='root';
mysql> flush privileges;
mysql> select user, host, plugin from user;
+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
| root             | mysql_native_password |
+------------------+-----------------------+

[mysql_native_password]로 변경했으면 비밀번호 역시 변경


mysql> arter user 'root'@'localhost' identified by 'password';

[password]는 사용하고자 하는 값으로 변경


5. MySQL 프롬프트 종료

mysql> exit;


6. root 접속 이상 유무 확인

$ mysql -u root -p

sql 프롬프트가 정상적으로 시작된다면 이상 없음

정상적으로 로딩 안될 경우 4번 다시 진행



사. MySQL 저장소 경로 변경

GitLab과 마찬가지로 SSD에는 많은 데이터를 저장하기에는 용량이 부족하니 추가한 HDD로 MySQL 저장소 경로 변경


1. 저장소 경로 생성

$ sudo mkdir /hdd/mysql
$ sudo chmod 755 /hdd                    // GitLab 설정하면서 안 준 경우


2. 서비스 중지

$ sudo service mysql stop


3. 기존 데이터 신규 저장소로 이전 및 권한 부여

$ sudo cp -r /var/lib/mysql/* /hdd/mysql
$ sudo chown -R mysql:mysql /hdd/mysql


4. 설정 파일 수정

$ sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf
#datadir = /var/lib/mysql
datadir = /hdd/mysql

gedit 대신 nano 나 vim 사용해도 됨

기존 경로 주석 처리 후 새로운 경로를 [datadir] 값으로 수정


5. 기존 경로 백업 및 신규 저장 경로 링크

$ cd /var/lib
$ sudo cp -r /var/lib/mysql /var/lib/mysql.bak
$ sudo rm -r /var/lib/mysql
$ sudo ln -s /hdd/mysql /var/lib/mysql
$ sudo chown -R mysql:mysql /var/lib/mysql

기존 경로 백업하지 않고 바로 진행해도 무관함

mysql 계정 및 그룹으로 소유권 부여는 필수적으로 진행해야 함.


6. usr.sbin.mysqld 설정 파일 편집

$ sudo gedit /etc/apparmor.d/usr.sbin.mysqld

gedit 대신 nano 나 vim 사용해도 됨


#/var/lib/mysql/ r,
#/var/lib/mysql/** rwk,
/hdd/mysql/ r,
/hdd/mysql/** rwk,

[Allow data dir access] 항목에서 기존 저장 경로를 신규 저장 경로로 변경 후 저장


7. alias 수정

$ sudo gedit /etc/apparmor.d/tunables/alias

gedit 대신 nano 나 vim 사용해도 됨


alias /var/lib/mysql/ -> /hdd/mysql,   // 신규 경로 지정하면 됨

하단에 위의 구문 추가 후 저장


8. apparmor profiles 리로드

$ sudo /etc/init.d/apparmor reload


9. MySQL Service 시작

$ sudo service mysql start



아. phpMyAdmin 설치

MySQL DB 관리를 편하게 진행하기 위해서 진행하는 설치, 불필요할 경우 굳이 할 필요 없음


1. phpMyAdmin 설치

$ sudo apt-get -y install phpmyadmin

* [Web server to reconfigure automatically] 값은 [apache2] 선택

* [Configure database for phpmyadmin with dbconfig-commmon?]는 [No] 선택
dbconfig-common이 기본적인 설정을 진행해 주기 때문에 편리하나,
MySQL 설정을 한 이상 굳이 할 이유는 없음


2. apache2.config 수정

$ sudo gedit /etc/apache2/apache2.conf

gedit 대신 nano 나 vim 사용해도 됨


# phpMyAdmin
Include /etc/phpmyadmin/apache.conf

 * 제일 마지막에 위의 내용 추가하고 저장


3. 아파치 재시작

$ sudo /etc/init.d/apache2 restart

재시작 이후 브라우저에서 [http://localhost/phpmyadmin]을 접속하여 접속 잘 되는지 확인




간단하게 수정하거나 추가해 줘야 되는 것이 있을 뿐.. 설정 과정 자체에 있어서는 그리 어려운 것도 아닙니다. 스크립트로 만들어서 처리하는 것도 충분히 가능할 것 같은데, 나중에 한 번 진지하게 자동 설치 및 설정 스크립트 만들어두는 것도 생각해 봐야겠습니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari