일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- oh-my-zsh
- 자바스크립개념
- ion-range
- angular5
- getElementsByClassName
- ChangeDetectorRef
- aab 배포
- code .
- JavaScript
- IONIC3
- sealize
- Ionic
- 변화감지
- Git
- error
- border-width
- VSCode
- angular
- change detection
- rxjs
- typescript
- NVM
- php
- zsh
- fromEvent
- Sentry
- 테두리굵기
- 이미지바꾸기
- hashchange
- Visual Studio Code
- Today
- Total
hsunny study blog
웹서비스 배포를 위한 서버 git 설정 본문
웹서비스 배포를 위해 서버에 Git을 설정해봤습니다.
GitLab에서 프로젝트를 생성하고 생성된 프로젝트에 꾸준히 작업해오고 있었지만, 서버에 직접 설치해본 것은 처음이었습니다.
여러 블로그들의 글을 읽으며 도움을 받았던 이유로, 저도 도움을 드리고자 제가 겪었던 내용들에 대해서 글로 작성해보려고 합니다!
※ 정리에 참고한 페이지는 링크 연결하였습니다.
간단히 개념 집고 넘어가겠습니다!
* Git이란
소스코드를 효과적으로 관리하기 위해 개발된 '분산형 버전 관리 시스템'입니다.
Git으로 파일을 관리하면, 업데이트 이력이 Git에 저장되므로 백업용 파일 복사본을 만들 필요가 없어 가볍습니다.
* 저장소란
파일이나 폴더를 저장해두는 곳으로 두 종류의 저장소를 제공합니다.
Remote 저장소와 Local 저장소가 있습니다.
Remote Storage
여러 사람이 함께 공유하기 위한 저장소
Local Storage
내 PC에 파일이 저장되는 개인 전용 저장소
이미 서비스 중인 웹서버는 존재했기 때문에 새로운 Bare Storage를 생성하고 서버스 배포에 사용하는 폴더는 Git Storage로 만들어 버전 관리가 가능하도록 만들어야 했습니다.
그림으로 나타내면 아래와 같습니다.
Bare 저장소 : 워킹 디렉토리가 없는 저장소
어떤 서버를 설치하더라도 일단 저장소를 Bare 저장소로 만들어야 합니다.
작업자들은 Bare Storage를 Clone하여 개인 PC에서 Push, Pull 등의 작업을 수행합니다.
이 저장소에는 작업 파일, 디렉토리들이 생성되지 않고 objects 폴더에 변경이력만 생성됩니다.
Bare 저장소 디렉토리는 관례에 따라 .git 확장자로 끝납니다.
2. 웹서비스 배포를 위한 서버 Git 설정
*웹서비스 폴더를 Git Storage로 만들기(non-bare Storage)
$pwd
/myfolder/
$ls
service.co.kr
$cd service.co.kr
$git init
$git add .
$git commit
$cd ..
Bare Storage를 Clone했을 때, 서버의 파일들이 모두 개인 PC 작업영역에 저장되도록 하기 위해 모두 commit하는 작업을 수행했습니다.
*Bare Storage 생성
$mkdir service.git
$cd service.git
$git init --bare
Non-bare Storage과 Bare Storage의 추가 차이점
Non-bare Storage 내에는 .git 폴더가 생성되지만 Bare Strorage 내부에 생성되는 .git 폴더는 없습니다.
*Bare Storage 에 자동으로 그룹 쓰기 권한 추가하기
$git init --bare --shared
저장소가 존재하는 디렉토리에 읽기 권한이 있는 다른 사용자들은 SSH로 접근이 가능합니다.
디렉토리에 쓰기 권한까지 가지고 있으면 SSH로 접근할 수 있는 사용자는 바로 Push 할 수 있습니다.
--shared 옵션을 붙이는 것이 Git으로 자동으로 그룹 쓰기 권한을 추가하는 방법입니다.
$git remote add [단축이름] [url]
$cd ..
$cd service.co.kr
$git remote add origin ../service.git
$git remote –v
origin ../service.git (fetch)
origin ../service.git (push)
non-bare Storage에 원격 저장소를 추가해주어야 합니다.
위와 같이 url을 상대경로로 지정해주었습니다.
3. 웹서비스 배포를 위한 클라이언트 설정
서버에 있는 파일을 Clone 해와야 합니다.
Clone 하기 위해서는 서버의 주소, 나의 계정, 복사할 저장소 에 대한 정보가 필요합니다.
ex)
서버주소 |
git.example.com |
계정 |
sunny |
복사할 저장소 |
/myfolder/service.git |
> pwd
Path
----
C:\Users\USER\Desktop\hs_git
> git clone sunny@git.example.com:/myfolder/service.git
> ls
디렉터리: C:\Users\USER\Desktop\hs_git
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2019/03/18 오후 4:29 service
> cd service
Clone을 수행하면 위와 같이 저장소이름으로 폴더가 생성됩니다.
4. 웹서비스 폴더(Non-bare Storage)에 클라이언트에서 Push한 파일 자동으로 생성되도록 하기
Bare Storage의 훅을 이용하면 됩니다.
이벤트가 생겼을 때 Git의 훅을 이용하여 자동으로 스크립트를 실행할 수 있습니다.
.git/hooks 폴더 안에 10개의 샘플파일(.sample)이 생성됩니다.
(*저의 경우 post-receive.sample를 제외한 9개의 파일이 생성되어 있었습니다.)
사용할 때엔 .sample을 지우고 동작시키려는 작업을 넣어주면 됩니다.
*post-receive 훅 만들기
$cd service.git/hooks
$vi post-receive
$cat post-receive
echo "post-receive running..."
cd <non-bare storage path> || exit
echo "move complete"
unset GIT_DIR
echo "unset complete"
git pull origin master
echo "post-receive pull complete"
$chmod 755 post-receive
*post-receive 파일을 새롭게 생성하였습니다.
*echo는 진행 상황을 확인하기 위하여 추가했습니다.
*클라이언트에서 파일을 사용할 수 있도록 파일의 권한을 재조정해줬습니다.
post-receive 파일은 Push 이후에 동작하는 훅입니다.
시간이 오래걸리는 스크립트는 작업할 때 조심해야 합니다. 이유는 이곳에서 확인하시면 됩니다.
*훅 동작 모습
(다른 저장소 캡쳐화면이며 post-receive의 내용은 같습니다.)
위와 같이 클라이언트에서 훅이 동작하는 것을 확인할 수 있습니다.
이렇게 하면 Non-bare Storage에 파일들이 생성되어 웹서비스에 바로 적용됩니다.
'programming > GIT' 카테고리의 다른 글
원격브랜치 가져오기 (0) | 2020.12.29 |
---|---|
git stash 사용하기 (0) | 2020.12.28 |
commit 되돌리기 (0) | 2019.11.24 |
원격(remote)저장소 확인하기 (0) | 2019.11.12 |