Gitea 저장소를 별도의 볼륨에 설정하는 방법

소개

Gitea는 버전 관리 시스템인 Git을 기반으로 한 소스 코드 저장소입니다. GitLab 및 Gogs와 같은 여러 자체 호스팅 솔루션이 있지만, Gitea는 가벼운 장점이 있어 비교적 작은 서버에서 실행할 수 있습니다.

그러나 VPS 영역에서 특히 작은 서버를 가지고 있다는 것은 종종 공간이 제한된다는 것을 의미합니다. 다행히도 많은 호스팅 공급 업체가 외부 볼륨, 블록 저장소 또는 네트워크 파일 저장(NFS) 형식의 추가 저장 공간을 제공합니다. 이를 통해 사용자는 저장 공간을 희생하지 않고 애플리케이션용 작은 VPS 호스트에서 돈을 절약할 수 있습니다.

Gitea와 소스 코드가 저장될 위치를 결정할 수 있는 기능을 통해 프로젝트와 파일이 확장할 공간이 있다고 확신할 수 있습니다. 이 튜토리얼에서는 외부 저장 볼륨을 마운트 지점에 마운트하고 Gitea가 해당 볼륨에서 적절한 정보를 읽도록 보장합니다. 마지막에는 저장소와 기타 중요한 정보를 별도의 저장 볼륨에 저장하는 Gitea 설치가 준비됩니다.

전제 조건

시작하기 전에 다음이 필요합니다:

  • 우분투 20.04 서버는 우리의 우분투 20.04 초기 서버 설정 가이드에 따라 설정되었습니다. 이 서버에는 sudo 권한이 있는 루트 사용자가 아닌 사용자와 방화벽이 활성화되어 있습니다.
  • 외부 볼륨은 NFS 또는 블록 저장소 볼륨과 같은 것입니다. 디지털오션의 블록 저장소 볼륨을 설정하려면 제품 문서를 따르세요.
  • 도메인 이름을 통해 액세스할 수 있는 서버에 Gitea가 설치되어 있습니다. 이 가이드는 Gitea를 도커에 설치한 것으로 가정하며, 이는 우리의 우분투 20.04에 Gitea 설치하는 방법 튜토리얼에 설명되어 있습니다. 이를 위해서는 서버에 Docker와 Docker Compose가 설치되어 있어야 합니다. 이러한 도구를 설치하려면 다음 튜토리얼의 단계를 따르십시오:
    • 우분투 20.04에 Docker 설치 및 사용하는 방법의 단계 1 및 2
    • 우분투 20.04에 Docker Compose 설치 및 사용하는 방법의 단계 1

이전 요구 사항에서 설명된 방법과 다른 방법으로 Gitea를 설치한 경우 시스템의 특정 파일 및 디렉토리의 이름과 위치가이 안내서의 예에서 언급하는 것과 다를 수 있습니다. 그러나이 자습서에 개요된 개념은 모든 Gitea 설치에 적용될 수 있어야 합니다.

단계 1 – 블록 스토리지 볼륨 마운트

A volume can take many different forms. It could be an NFS volume, which is storage available on the network provided via a file share. Another possibility is that it takes the form of block storage via a service such as DigitalOcean’s Volumes. In both cases, storage is mounted on a system using the mount command.

이러한 볼륨은 /dev에 저장된 장치 파일로 볼 수 있습니다. 이 파일들은 커널이 스토리지 장치 자체와 통신하는 방법입니다. 이 파일들은 실제로 저장에 사용되지 않습니다. 저장 장치에 파일을 저장하려면 mount 명령을 사용하여이를 마운트해야합니다.

먼저, 장치와 연관된 폴더로 데이터가 저장되어 해당 장치에 저장되도록하는 마운트 지점을 만들어야합니다. 이와 같은 저장 장치의 마운트 지점은 일반적으로 /mnt 디렉토리에 있습니다.

mkdir 명령을 사용하여 일반 디렉토리를 만드는 방식으로 gitea라는 마운트 지점을 만듭니다:

  1. sudo mkdir /mnt/gitea

여기서는 그 디렉터리에 장치를 마운트하여 해당 저장 공간에 액세스할 수 있습니다. 장치를 마운트하려면 mount 명령을 사용하세요:

  1. sudo mount -t ext4 -o defaults,noatime /dev/disk/by-id/your_disk_id /mnt/gitea

문자열 ext4 옵션은 파일 시스템 유형을 지정합니다. 이 경우 ext4이지만 볼륨의 파일 시스템 유형에 따라 xfs 또는 nfs와 같은 다른 값일 수 있습니다. 볼륨이 사용하는 유형을 확인하려면 옵션 없이 mount 명령을 실행하세요:

  1. mount

이 명령은 각 마운트된 파일 시스템에 대한 출력 라인을 제공합니다. 방금 마운트한 것이기 때문에 목록에서 마지막에 나올 것입니다:

Output
. . . /dev/sda on /mnt/gitea type ext4 (rw,noatime,discard)

이는 파일 시스템 유형이 ext4임을 보여줍니다.

이 명령은 해당 ID로 지정된 장치를 /mnt/gitea에 마운트합니다. -o 옵션은 마운트할 때 사용되는 옵션을 지정합니다. 이 경우, 읽기/쓰기 파일 시스템을 마운트할 수 있는 기본 옵션을 사용하고, noatime 옵션은 더 효율적으로 하기 위해 커널이 장치의 파일과 디렉터리에 대한 마지막 액세스 시간을 업데이트하지 않아야 함을 지정합니다.

장치를 마운트했으므로 시스템이 켜져 있는 동안 마운트된 상태로 유지됩니다. 그러나 시스템이 다시 시작되면 더 이상 마운트되지 않습니다(데이터는 볼륨에 남아 있음). 따라서 시스템이 시작될 때 볼륨을 마운트하도록 시스템에 알려주어야 합니다. 이를 위해 /etc/fstab(‘file systems table’) 파일을 사용합니다. 이 파일은 사용 가능한 파일 시스템과 마운트 지점을 탭으로 구분된 형식으로 나열합니다.

echotee를 사용하여 /etc/fstab의 끝에 새로운 줄을 추가하세요:

  1. echo '/dev/disk/by-id/your_disk_id /mnt/gitea ext4 defaults,nofail,noatime 0 0' | sudo tee /etc/fstab

이 명령은 문자열 /dev/disk/by-uid/your_disk_idfstab 파일에 추가하고 화면에 출력합니다. 이전 mount 명령과 마찬가지로 기기를 마운트 포인트에 defaults, nofail, noatime 옵션을 사용하여 마운트합니다.

/etc/fstab에 변경 사항을 적용하면 커널이 부팅 시 볼륨을 마운트합니다.

참고: Linux의 저장 장치는 매우 유연하며 네트워크 파일 시스템(NFS)에서 일반 하드 드라이브까지 다양한 유형이 있습니다. Linux에서 블록 저장 및 장치에 대해 자세히 알아보려면 Linux에서 저장 용어 및 개념 소개에서 저장 관련 개념에 대해 더 읽어보세요.

단계 2 — 블록 저장 볼륨에 데이터 저장을 위한 Gitea 구성

Gitea는 모든 리포지토리를 중앙 위치에 유지합니다. 이에는 모든 사용자 및 조직의 리포지토리가 포함됩니다. 다른 방식으로 구성되지 않는 경우 모든 정보가 단일 디렉터리에 유지됩니다. 기본 설치에서 이 디렉터리는 data로 명명됩니다. 이 튜토리얼의 목적을 위해 위에 링크된 튜토리얼과 동일한 Docker에서 실행되는 Gitea 버전을 사용할 것입니다.

먼저, 이 데이터 디렉터리가 무엇을 포함하고 있는지 파악해 봅시다. 데이터 디렉터리로 이동하여 ls 명령을 실행하여 이를 확인할 수 있습니다. -l 형식을 사용하면 파일에 대한 더 많은 정보를 알려줍니다:

  1. cd gitea
  2. ls -l

이는 다음과 같은 목록을 제공할 것입니다:

Output
total 20 drwxr-xr-x 5 root root 4096 Jun 23 22:34 ./ drwxrwxr-x 3 sammy sammy 4096 Jun 26 22:35 ../ drwxr-xr-x 5 git git 4096 Jun 23 22:42 git/ drwxr-xr-x 12 git git 4096 Jun 26 22:35 gitea/ drwx------ 2 root root 4096 Jun 23 22:34 ssh/

이 명령의 출력을 분석해 보겠습니다. 각 줄마다 하나의 파일 또는 디렉터리가 나열됩니다. 이 경우 다섯 개의 디렉터리가 나열되어 있습니다. . 항목은 현재 디렉터리를 나타내는 특별한 항목이며, ..은 한 단계 위의 디렉터리를 나타냅니다. 이 출력은 현재 디렉터리가 root 사용자에 의해 소유되어 있음을 보여주며, Docker가 권한이 있는 사용자로 실행되므로 이 경우에는 해당됩니다. 한 단계 위의 디렉터리는 sammy에 의해 소유되어 있습니다.

git 디렉터리는 중요합니다. 왜냐하면 여기에는 별도의 볼륨에 저장할 수 있는 모든 저장소가 포함되어 있기 때문입니다. 디렉터리의 내용을 나열합니다:

  1. ls -l git

이는 디렉터리의 긴 목록을 제공할 것입니다:

Output
total 24 drwxr-xr-x 5 git git 4096 Jun 23 22:42 ./ drwxr-xr-x 6 root root 4096 Jun 27 14:21 ../ -rw-r--r-- 1 git git 190 Jun 23 22:42 .gitconfig drwxr-xr-x 2 root root 4096 Jun 23 22:34 .ssh/ drwxr-xr-x 2 git git 4096 Jun 23 22:42 lfs/ drwxr-xr-x 5 git git 4096 Jun 30 20:03 repositories/

여기에는 주목해야 할 두 개의 디렉터리가 있습니다. 사용자/조직별로 정렬된 Gitea에 의해 관리되는 git 저장소가 포함된 repositories 디렉터리와 Git의 대형 파일 저장 기능용 데이터가 포함된 lfs 디렉터리입니다. gitea 디렉터리에는 Gitea가 백그라운드에서 사용하는 정보가 포함되어 있습니다. 여기에는 예전 저장소의 아카이브와 웹 서비스에서 사용하는 사용자 및 저장소 정보와 같은 데이터베이스도 포함됩니다. ssh 디렉터리에는 Gitea가 사용하는 여러 SSH 키 쌍이 포함되어 있습니다.

이 디렉터리에 저장된 모든 정보가 중요하기 때문에, 첨부된 볼륨에 전체 디렉터리 내용을 포함하고 싶을 것입니다.

이 시점에서 따를 수 있는 두 가지 경로가 있으며, 이 튜토리얼을 설치 프로세스 중에 완료하는 새로운 Gitea 설치와 작업하는지 여부에 따라 다릅니다. 첫 번째 경로에서는 설치를 완료하기 전에 위치를 지정할 수 있으며, 두 번째 경로에서는 기존 설치를 이동하는 방법을 배우게 될 것입니다.

Gitea의 새로운 설치 설정

새로운 Gitea 설치를 시작하는 경우 구성 프로세스 중에 모든 정보가 저장된 위치를 지정할 수 있습니다. 예를 들어, Docker Compose를 사용하여 Gitea를 설정하는 경우 볼륨을 연결된 볼륨으로 매핑할 수 있습니다.

선호하는 텍스트 편집기를 사용하여 docker-compose.yml 파일을 엽니다. 다음 예제에서는 nano를 사용합니다:

  1. nano docker-compose.yml

파일을 열었으면, 컴포즈 파일에서 volumes 항목을 찾고 :의 왼쪽에있는 매핑을 Gitea 데이터 디렉터리의 적절한 위치로 지정합니다.

docker-compose.yml
...

    volumes:
      - /mnt/gitea:/data
      - /home/git/.ssh/:/data/git/.ssh
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro

...

정보를 설정한 후 파일을 저장하고 닫습니다. nano를 사용하는 경우, 이를 끝내려면 CTRL + X, Y, 그리고 ENTER를 누르면 됩니다.

경고: SSH 서버는 Git 사용자(git의 경우)의 홈 디렉토리에서 .ssh 디렉토리를 찾습니다. 이 디렉토리에는 Gitea가 사용할 모든 SSH 키가 포함되어 있으므로 이 Docker 볼륨의 마운트를 이동하는 것은 권장되지 않습니다. 이 위치를 볼륨에 백업하려면 cron 작업과 같은 다른 솔루션을 사용하는 것이 가장 좋습니다. 자세한 내용은 예약된 작업을 관리하기 위해 cron을 사용하는 튜토리얼을 확인하세요.

docker-compose를 실행하고 Gitea를 설치하면 블록 스토리지 볼륨을 사용하여 데이터를 저장합니다.

만약 데이터 위치를 관리하기 위해 Docker 볼륨을 사용하지 않는다면 — 예를 들어, Gitea를 이 서버에 이진 릴리스를 통해 설치하는 경우, Gitea의 이 지침에 따라 — 설정 파일(일반적으로 /etc/gitea/app.ini) 내에서 모든 값을 설정하고 최종 설치 단계를 브라우저에서 수행하기 전에 위치를 수정해야 합니다. 예를 들어, 다음과 같이 설정할 수 있습니다:

app.ini
...

# 데이터베이스로 SQLite를 사용하는 경우, 이 섹션 내의 PATH를 변경해야 합니다.
# 변수
[database]
...
PATH = /mnt/gitea/gitea.db

[server]
...
LFS_CONTENT_PATH = /mnt/gitea/lfs

[repository]
ROOT = /mnt/gitea/gitea-repositories

...

참고: 이 위치에 대한 git 사용자의 쓰기 액세스가 있는지 확인하십시오. 리눅스 권한에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

기존 Gitea 설치 이동

이미 Gitea가 설치되어 실행 중인 경우에도 데이터를 별도의 볼륨에 저장할 수 있지만, 모든 데이터가 안전하고 Gitea에서 접근 가능하도록하는 데 몇 가지 주의가 필요합니다.

참고: 데이터와 관련된 모든 작업과 마찬가지로 모든 것의 최신 백업이 있는지 확인하는 것이 중요합니다. 이 경우 데이터 디렉토리의 모든 파일(SSH 파일, gitea-repositorieslfs 디렉토리, 데이터베이스 등)을 안전한 위치로 백업해야합니다.

새 볼륨으로 데이터를 이동하는 두 가지 옵션이 있습니다. 첫 번째 방법은 Gitea 데이터를 보조 위치로 복사한 다음 원래 위치를 볼륨의 마운트 지점으로 변환하는 것입니다. 데이터를 해당 위치로 다시 복사할 때 해당 볼륨으로 복사되며 Gitea 자체에서는 변경 사항이 필요하지 않습니다. 단순히 이전과 같이 계속됩니다. 그러나 그 볼륨에 전체 장치를 마운트하지 않으려는 경우(예: Gitea 데이터가 해당 볼륨의 유일한 것이 아닌 경우) 두 번째 옵션은 모든 Gitea 데이터를 해당 볼륨의 새 위치로 이동하고 Gitea 자체에 그 위치를 사용하도록 지시하는 것입니다.

무슨 옵션을 선택하든지, 먼저 Gitea 웹 서비스를 중지하세요.

Docker Compose를 통해 Gitea를 설치한 경우 docker-compose를 사용하여 서비스를 중지합니다. docker-compose.yml 파일이 있는 동일한 디렉터리 내에서 다음을 실행합니다:

  1. docker-compose down

시스템드 서비스로 설치한 경우 systemctl 명령을 사용하세요:

  1. sudo systemctl stop gitea

Gitea가 중지되면 데이터 디렉토리의 전체 내용을 단계 1에서 만든 마운트 지점으로 이동합니다:

  1. sudo mv * /mnt/gitea

현재 디렉터리의 내용을 나열하여 모든 파일이 이동되었는지 확인합니다:

  1. ls -la

이것은 현재 디렉터리 및 상위 디렉터리 항목만 반환합니다:

total 8
drwxrwxr-x 2 sammy sammy 4096 Jun 27 13:56 ./
drwxr-xr-x 7 sammy sammy 4096 Jun 27 13:56 ../

모든 데이터를 이동한 후 새 데이터 디렉토리로 변경합니다:

  1. cd /mnt/gitea

ls를 사용하여 모든 것이 올바르게 보이는지 확인합니다:

  1. ls -l

이것은 디렉터리의 내용을 보여줍니다:

Output
total 36 drwxr-xr-x 6 root root 4096 Jun 27 14:21 ./ drwxr-xr-x 3 root root 4096 Jun 27 14:21 ../ drwxr-xr-x 5 git git 4096 Jun 23 22:42 git/ drwxr-xr-x 13 git git 4096 Jul 11 08:25 gitea/ drwx------ 2 root root 16384 Jun 27 03:46 lost+found/ drwx------ 2 root root 4096 Jun 23 22:34 ssh/

이전과 마찬가지로 ssh, git, 그리고 gitea 디렉터리가 포함되어 있어야 합니다. Gitea를 관리하기 위해 SQLite를 데이터베이스로 사용하는 경우, gitea 디렉터리에 gitea.db라는 파일도 포함될 것입니다.

모든 데이터가 이동되었음을 확신하면 볼륨을 데이터 디렉터리에 마운트하는 시간입니다.

먼저, 이전에 있던 데이터 디렉터리의 상위 디렉터리로 이동합니다. 이 예제에서는 사전 준비 단계에서 링크된 튜토리얼에서 설명한 대로 Docker Compose를 사용하여 Gitea를 설치한 경우, 여기에는 docker-compose.yml 파일이 포함된 디렉터리가 됩니다.

  1. cd ~/gitea/

이전과 마찬가지로 mount 명령을 사용하지만, 이번에는 방금 비운 디렉터리를 대상으로 사용합니다:

  1. sudo mount -o defaults,noatime /dev/disk/by-id/your_disk_id gitea

이제 해당 디렉터리의 내용물을 나열하면 모든 파일이 제자리에 있어야 합니다:

  1. ls -la gitea

이 명령은 예상한 정보를 출력합니다. 볼륨의 파일 시스템 유형에 따라 추가적인 lost+found이라는 디렉터리를 찾을 수도 있습니다. 이는 정상적이며 일상적인 파일 시스템 사용의 일부입니다:

total 36
drwxr-xr-x  6 root  root   4096 Jun 27 13:58 ./
drwxrwxr-x  3 sammy sammy  4096 Jun 27 02:23 ../
drwxr-xr-x  5 git   git    4096 Jun 23 22:42 git/
drwxr-xr-x 12 git   git    4096 Jun 27 00:00 gitea/
drwx------  2 root  root   16384 Jun 27 03:46 lost+found/
drwx------  2 root  root   4096 Jun 23 22:34 ssh/

언급한 대로, Gitea가 블록 스토리지 볼륨 내의 디렉터리를 사용하도록 원하는 경우, Gitea를 다시 실행하기 전에 추가 단계를 완료해야 합니다. 예를 들어, /mnt/gitea에 마운트된 볼륨에서 scm이라는 폴더를 사용하고 싶다고 가정해 보겠습니다. 모든 Gitea 데이터를 /mnt/gitea/scm으로 이동한 후, 이전 데이터 디렉터리에서 새로운 디렉터리로 심볼릭 링크를 생성해야 합니다. 이를 위해 ln 명령을 사용합니다:

  1. sudo ln -s /mnt/gitea/scm gitea

이 시점에서 Gitea를 다시 시작할 수 있습니다. Gitea를 systemd 서비스로 사용하는 경우 다음을 실행하십시오:

  1. sudo systemctl restart gitea

Gitea를 Docker Compose를 사용하여 Docker 컨테이너로 실행 중인 경우 다음을 실행하십시오:

  1. docker-compose up -d

모든 것이 가동 중이고 작동하는지 확인하려면 브라우저에서 Gitea 인스턴스를 방문하고 모든 것이 예상대로 작동하는지 확인하십시오. Gitea에서 새로운 객체를 생성할 수 있어야 합니다. 예를 들어 저장소, 이슈 등입니다. SSH 셈을 사용하여 Gitea를 설정한 경우에는 저장소를 git clone하고 git push를 사용하여 체크아웃하고 푸시할 수도 있어야 합니다.

결론

이 튜토리얼에서는 모든 Gitea 데이터를 블록 저장소 볼륨으로 이동했습니다. 이러한 볼륨은 매우 유연하며 많은 이점을 제공합니다. 예를 들어 모든 데이터를 더 큰 디스크, RAID 볼륨, 네트워크 파일 시스템에 저장하거나 디지털오션 볼륨과 같은 블록 저장소를 사용하여 저장 비용을 절감할 수 있습니다. 또한 전체 디스크를 백업하기 위해 스냅샷을 찍어서 재해 발생 시 내용을 복원할 수 있습니다.

Source:
https://www.digitalocean.com/community/tutorials/how-to-store-gitea-repositories-on-a-separate-volume