ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [깃랩설치형서버] 크론탭으로 자동 백업 설정하기
    홈서버 2022. 8. 30. 12:19
    반응형

      깃랩은 프로젝트 생성 시 깃 레파지토리 2개를 생성한다.  

     

    root@git:/var/opt/gitlab/git-data/repositories/@hashed/6b/86# ll
    total 16
    drwxr-s--- 4 git git 4096 Jan  5  2022 ./
    drwxr-s--- 3 git git 4096 Jan  5  2022 ../
    drwx--S--- 5 git git 4096 Aug 29 12:00 6b86b273ff34fce19d6b804effada4eaa22f1d49c01e52ddb7875b4b.git/
    drwx--S--- 5 git git 4096 Aug 29 12:00 6b86b273ff34fce19d6b804effada4eaa22f1d49c01e52ddb7875b4b.wiki.git/
    root@git:/var/opt/gitlab/git-data/repositories/@hashed/6b/86#

     

      하나는 소스 코드 레파지토리, 또 하나는 깃랩에서 제공하는 위키라는 페이지의 레파지토리다.  위키도 깃 레파지토리로 구성되어 있어 형상관리를 한다.  그래서 깃 레파지토리만 따로 클론 하거나 복구할 때 /var/opt/gitlab/git-data/repositories 디렉터리를 이용하기도 한다. 물론 위의 파란색 글씨처럼 깃랩에서 생성한 레파지토리기 때문에 알 수 없는 명명규칙으로 깃 레파지토리를 생성한다.

     

      깃랩 설치형 모듈은 백업을 제공해주고 있다.  이를 이용해야 깃 레파지토리는 물론이고, 이슈 및 머지리퀘스트 같은 DB 데이터도 같이 백업이 된다.  필자는 편의상 root 계정을 활용하였다.

     

     

    Back up GitLab | GitLab

    Documentation for GitLab Community Edition, GitLab Enterprise Edition, Omnibus GitLab, and GitLab Runner.

    docs.gitlab.com

     

      공식문서에선 12.1 이전버전과 12.2 이후 버전의 명령어가 다른다.  필자의 버전은 gitlab-ce v.14.6.1이기 때문에 다음 명령어를 사용하였다.

     

    root@git:/opt/gitlab/bin# ll
    total 40
    drwxr-xr-x  2 root root 4096 Aug 22 17:01 ./
    drwxr-xr-x 11 root root 4096 Jan  5  2022 ../
    -rwxr-xr-x  1 root root 3679 Jan  5  2022 gitlab-backup*
    -rwxr-xr-x  1 root root 1418 Jan  5  2022 gitlab-ctl*
    -rwxr-xr-x  1 root root  250 Jan  5  2022 gitlab-healthcheck*
    -rwxr-xr-x  1 root root  702 Jan  5  2022 gitlab-psql*
    -rwxr-xr-x  1 root root 1288 Jan  5  2022 gitlab-rails*
    -rwxr-xr-x  1 root root 1287 Jan  5  2022 gitlab-rake*
    -rwxr-xr-x  1 root root  724 Jan  5  2022 gitlab-redis-cli*
    -rwxr-xr-x  1 root root 1287 Jan  5  2022 gitlab-ruby*
    root@git:/opt/gitlab/bin# /opt/gitlab/bin/gitlab-backup create

     

      이 후 백업이 정상적으로 진행되었다면 /var/opt/gitlab/backups 경로에 아래와 같이 파일이 생성될 것이다.

     

    root@git:/var/opt/gitlab/backups# ll
    total 5108480
    drwx------  2 git  root      12288 Aug 30 11:08 ./
    drwxr-xr-x 21 root root       4096 Jun 27 16:28 ../
    -rw-------  1 git  git  5231063040 Aug 30 11:08 1661825215_2022_08_30_14.6.1_gitlab_backup.tar

     

      생성된 이 tar 파일로 필요시 복구를 진행하면 된다.  필자는 다른 디스크에 백업하기 위해  scp 명령어를 사용하여 다른 서버에 해당 파일을 전송하였다.   

     

    root@git:/var/opt/gitlab/backups# scp 1661825215_2022_08_30_14.6.1_gitlab_backup.tar  root@xxx.xxx.xxx.xxx:/var/opt/gitlab/backups/

     

      비밀번호 입력 없이 key 접근을 위해 대상 서버 ~/.ssh/authorized_keys 파일에 전송 서버의 ssh-rsa 키도 등록해 놓았다.

      scp 명령어로 파일 전송 후 대상 서버 /var/opt/gitlab/backups 디렉터리에 파일이 존재하는지 확인하였다.

      이 작업의 자동화를 위해 crontab에 등록하는 작업을 하겠다.  다음 명령어로 crontab을 수정한다.

     

    root@git:~# crontab -e
    0 2 * * * /opt/gitlab/bin/gitlab-backup create
    0 3 * * * find /var/opt/gitlab/backups -type f -name '*gitlab_backup.tar' -ctime 0 -exec scp {} root@xxx.xxx.xxx.xxx:/var/opt/gitlab/backups/ \;
    30 3 * * * find /var/opt/gitlab/backups -type f -name '*gitlab_backup.tar' -ctime +10 -exec rm {} \;

     

      매일 2시 /opt/gitlab/bin/gitlab-backup create 명령어로 gitlab_backup.tar 파일을 만든다.

      매일 3시 /var/opt/gitlab/backups 디렉토리에 당일 생성된 gitlab_backup.tar 파일을 찾아 scp로 대상 서버에 전송한다.

      매일 3시 30분 ctime 기준으로 10일 이후의 파일들은 삭제한다.

      위 내용을 기입 후 저장으로 나온다.

     

    root@git:~# /etc/init.d/cron restart

     

      크론탭을 재시작하면 작업이 완료된다.  한 가지 주의할 점은 백업 시 레파지토리 이상(파일 깨짐 등등)으로 진행되지 않을 경우가 있다.  문제는 그 레파지토리만 건너뛰는 것이 아니라 모든 레파지토리의 백업이 중단된다.   꾸준한 모니터링은 필요하다.

    반응형

    댓글

Designed by Tistory.