이 튜토리얼에서는 스테이징 또는 프로덕션 환경에 코드를 배포하는 가장 쉬운 방법에 대해 알아봅니다.
과거에는 FileZilla와 같은 FTP 클라이언트를 사용하는 것이 일반적이었지만, SCP, rsync 또는 배포 도구와 같은 코드를 보다 신뢰할 수 있는 방법으로 배포했기 때문에 이 클라이언트를 사용하는 것이 일반적입니다.
코드를 배포하는 데 도움이 되는 가장 일반적인 도구로는 Anable, Capistrano, Beanstalk, Deploy가 있습니다.
하지만 Git 후크를 사용하여 코드를 배포할 수 있습니다.
즉, Git 푸시만 하면 코드를 배포할 수 있습니다.
git push production master
이 포스팅의 목표는 위의 명령을 사용하여 마스터의 코드를 프로덕션 서버에 배포입니다.
필수 조건
시작하기 전에 프로덕션 서버를 사용할 준비가 되어 있고 서버에 GIT가 설치되어 있으며 코드가 GIT 저장소를 사용하는 로컬 개발 환경이 있다고 가정해야 합니다.
프로덕션 서버를 빨리 생성해야 한다면 DigitalOcean을 추천합니다.
DigitalOcean은 매우 빠른 서버를 가지고 있고 한 달에 5달러부터 매우 저렴합니다.
또한 프로덕션 서버에서는 SSH 키 쌍을 올바르게 설정하여 명령을 사용하여 서버에 로그인할 수 있는지 확인해야 합니다.
ssh root@xxx.xxx.xxx.xxx
Todo
프로덕션 서버에 배포 폴더를 생성합니다.
프로덕션 서버에 빈 Git 저장소를 생성합니다.
서버에 포스트 수신 GIT 후크를 추가합니다.
운영 서버에 원격 리포지토리를 추가합니다.
프로덕션 서버로 푸시합니다.
프로덕션 서버에 배포 폴더를 생성
먼저 SSH를 통해 프로덕션 프로덕션 서버에 로그온해야 합니다.
ssh root@xxx.xxx.xxx.xxx
로그인한 후 리포지토리에서 사용할 폴더를 만들 수 있습니다.
cd /var > mkdir repo && cd repo
Bare Git Repository를 생성
프로덕션 서버에 빈 Git 저장소를 생성하면 이 저장소에 코드를 넣을 수 있습니다.
mkdir site.git && cd site.git
git init --bare
site.git 폴더 내부에는 이제 빈 git 리포지토리가 있습니다.
이렇게 하면 리포지토리에 후크를 추가하여 리포지토리에 푸시된 코드의 작업 폴더를 설정할 수 있습니다.
서버에 GIT 후크를 추가
다음 코드를 사용하여 코드가 푸시될 때 실행할 사후 수신 후크를 만듭니다.
sudo nano /var/repo/site.git/hooks/post-receive
이 파일 내에서 코드의 작업 디렉토리(가상 호스트의 문서 루트)를 설정한 다음 리포지토리에서 작업 디렉토리로 코드를 강제로 체크아웃해야 합니다.
#!/bin/sh
git --work-tree=/var/www/website --git-dir=/var/repo/site.git checkout -f
Composer 설치와 같은 사후 배포 작업을 실행하려면 이 파일 끝에 이러한 명령을 추가할 수 있습니다.
Change Permissions
파일을 실행할 수 있도록 사후 수신 파일에 대한 권한을 변경해야 합니다.
> sudo chmod +x post-receive
원격 리포지토리를 로컬로 추가
로컬 작업 복사본 디렉토리 내에 원격 리포지토리를 추가하고 리포지토리의 이름을 특정 환경으로 지정해야 합니다.
cd ~/path/to/working-copy/
git remote add production ssh://root@xxx.xxx.xxx.xxx/var/repo/site.git
git remote add staging ssh://root@xxx.xxx.xxx.xxx/var/repo/site.git
코드 배포
로컬 환경에서 원격 리포지토리에 액세스할 수 있으므로 이제 git 푸시를 사용하여 환경에 코드를 배포할 수 있습니다.
git push production master
마스터만 배포
준비 환경에서는 모든 개발 분기를 배포할 수 있지만 프로덕션 분기에는 마스터 분기만 배포하도록 액세스를 제한할 수 있으므로 수신 후 파일에서 다음 코드를 사용할 수 있습니다.
#!/bin/bash
TARGET="/var/www/website"
GIT_DIR="/var/repo/site.git"
BRANCH="master"
while read oldrev newrev ref
do
# only checking out the master (or whatever branch you would like to deploy)
if [[ $ref = refs/heads/$BRANCH ]];
then
echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f
else
echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
fi
done
'SW > Git' 카테고리의 다른 글
Git : .gitignore : 파일과 디렉토리 무시 방법, 예제, 명령어 (0) | 2022.03.30 |
---|---|
Git : Push 전에 PHPUnit 테스트를 자동으로 실행 방법 : 예제, 구현 (0) | 2020.07.13 |
Git : Docker 이미지를 푸시하는 Github 작업 : 예제, 방법 (0) | 2020.07.11 |
git : Git Repository의 URL을 변경하기 : 명령어, 예제 (0) | 2020.07.10 |
제트브레인 : .idea : 역할, git 제외 방법 (0) | 2019.10.26 |