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
$ sudo apt-get install ssh openssh-server
참고사항, ssh만 설치해도 openssh-server 같이 설치됨
여러 기능이 많은 엔터프라이즈 에디션도 나쁘지 않지만, 코어만 있어도 기본적인 관리가 가능하니 커뮤니티 에디션 설치
$ sudo apt-get install -y curl ca-certificates tzdata
$ sudo apt-get install -y postfix
[General type of mail configuration]에서 [Internet Site] 선택
[System mail name]에서 사용 중인 메일 또는 사용하고 있는 DNS 기반 이메일 주소 입력
예시. siryua@kakao.com 또는 admin@siryua.net 등
$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
커뮤니티 에디션이 아닌 엔터프라이즈 에디션을 설치하고자 한다면 중간에 [gitlab-ce]를 [gitlab-ee]로 변경
$ 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" 등
저장소로 사용할 HDD 포맷 및 마운트 진행
$ sudo fdisk -l
$ sudo parted /dev/sda
[/dev/sda]는 하드 연결에 따라 달라짐, 넘버링에 따라 변경하면 됨
mklabel 입력 후 gpt
내부 데이터가 모두 사라진다는 메시지에 [yes] 입력
unit GB 입력하여 단위 변환
print 입력하여 용량 확인
mkpart primary 0GB XXXXGB 입력 (용량에 맞추어 XXXX 입력)
q 입력하여 커맨드로 복귀
* 귀찮을 경우 기본 내장되어 있는 [디스크] 프로그램 사용해도 됨.
$ mkfs.ext4 /dev/sda
$ sudo blkid
/dev/sda의 UUID 기록 (C+V)
$ sudo mkdir /hdd
$ sudo gedit /etc/fstab
gedit 대신 nano 나 vim 사용해도 됨
UUID=[/dev/sda 의 UUID] /hdd ext4 defaults 0 1
맨 마지막 줄에 위와 같이 추가 후 저장
$ sudo mount -a
$ df -h
정상적으로 마운트 되면 하드디스크 정보가 표기됨
SSD에는 다른 패키지도 여럿 설치가 이루어져야 되고, 많은 데이터를 저장하기에는 용량이 부족하니 추가한 HDD로 GitLab 저장소 위치 추가 및 변경
$ sudo gitlab-ctl stop
수정 중 문제가 없도록 서비스 중지
$ 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"으로 기입
수정이 완료되었으면 저장
$ 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]로 읽을 수 있도록 설정
$ sudo gitlab-ctl reconfigure
권한 문제가 발생한다면 모든 경로의 권한 확인 진행
오류가 발생한다면 다음과 같이 입력해서 캐시 삭제
$ gitlab-rake cache:clear Rails_ENV=production
$ sudo gitlab-ctl start
이상 없이 수정 반영이 완료되었으면 서비스 다시 시작
GitLab > 로그인 > 관리자 영역 > 설정 > 저장소 > 저장소의 저장 공간 > Storage nodes for new repositories
한글 기준 설정 경로
[Storage nodes for new repositories]에 있는 퍼센트 값을 조절하여 저장소 경로 조절 가능
추가한 [HDD]만 사용하고 싶다면 [default]를 0으로 설정하고 [HDD]를 100으로 설정
장비에서 올라오는 많은 실시간 데이터를 기록하고 관리하여 생산물을 만들어내기 위한 데이터베이스 설치
$ sudo apt-get install mysql-server
$ sudo ufw allow mysql
$ sudo systemctl start mysql
$ 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]는 사용하고자 하는 값으로 변경
mysql> exit;
$ mysql -u root -p
sql 프롬프트가 정상적으로 시작된다면 이상 없음
정상적으로 로딩 안될 경우 4번 다시 진행
GitLab과 마찬가지로 SSD에는 많은 데이터를 저장하기에는 용량이 부족하니 추가한 HDD로 MySQL 저장소 경로 변경
$ sudo mkdir /hdd/mysql
$ sudo chmod 755 /hdd // GitLab 설정하면서 안 준 경우
$ sudo service mysql stop
$ sudo cp -r /var/lib/mysql/* /hdd/mysql
$ sudo chown -R mysql:mysql /hdd/mysql
$ sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf
#datadir = /var/lib/mysql
datadir = /hdd/mysql
gedit 대신 nano 나 vim 사용해도 됨
기존 경로 주석 처리 후 새로운 경로를 [datadir] 값으로 수정
$ 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 계정 및 그룹으로 소유권 부여는 필수적으로 진행해야 함.
$ 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] 항목에서 기존 저장 경로를 신규 저장 경로로 변경 후 저장
$ sudo gedit /etc/apparmor.d/tunables/alias
gedit 대신 nano 나 vim 사용해도 됨
alias /var/lib/mysql/ -> /hdd/mysql, // 신규 경로 지정하면 됨
하단에 위의 구문 추가 후 저장
$ sudo /etc/init.d/apparmor reload
$ sudo service mysql start
MySQL DB 관리를 편하게 진행하기 위해서 진행하는 설치, 불필요할 경우 굳이 할 필요 없음
$ sudo apt-get -y install phpmyadmin
* [Web server to reconfigure automatically] 값은 [apache2] 선택
* [Configure database for phpmyadmin with dbconfig-commmon?]는 [No] 선택
dbconfig-common이 기본적인 설정을 진행해 주기 때문에 편리하나,
MySQL 설정을 한 이상 굳이 할 이유는 없음
$ sudo gedit /etc/apache2/apache2.conf
gedit 대신 nano 나 vim 사용해도 됨
# phpMyAdmin
Include /etc/phpmyadmin/apache.conf
* 제일 마지막에 위의 내용 추가하고 저장
$ sudo /etc/init.d/apache2 restart
재시작 이후 브라우저에서 [http://localhost/phpmyadmin]을 접속하여 접속 잘 되는지 확인
간단하게 수정하거나 추가해 줘야 되는 것이 있을 뿐.. 설정 과정 자체에 있어서는 그리 어려운 것도 아닙니다. 스크립트로 만들어서 처리하는 것도 충분히 가능할 것 같은데, 나중에 한 번 진지하게 자동 설치 및 설정 스크립트 만들어두는 것도 생각해 봐야겠습니다.