[Git Tip] AWS EC2 VM을 이용한 Git 서버설정과 git 기본 사용법
git(깃) 서버를 Amazon EC2 인스턴스에 설치하고, Repo를 운영 관리하는 기초과정 정리
* 준비해야 할 것들
- 서버: AWS EC2 t2.micro, ubuntu 14.4, 접속주소: ec2-xx.amazonaws.com
- 클라이언트: Ubuntu 14.4 PC, EC2 vm ssh 접속을 위한 보안 키파일(여기서는 AWSKP_as1.pem)
EC2 vm측, git 서버 설치 과정
* 필수 패키지 설치
root@aws-ubt14-as01:~# apt-get install git-core
root@aws-ubt14-as01:~# apt-get install openssh-server
* linux 계정(=gituser) 추가, 권한 설정 및 key pair 생성
* 이 방법은 git 계정을 공용으로 사용하는 경우로 사용자 개별 설정은 불가(사용자별 권한 설정 등 세부적인 관리가 필요할 경우 gitolite 와 같은 관리 패키지 사용 필요)
root@aws-ubt14-as01:~# adduser --home /home/gituser --shell /bin/bash gituser
root@aws-ubt14-as01:~# visudo <== 아래 line 추가
...
gituser ALL=(ALL) ALL
...
root@aws-ubt14-as01:~# su - gituser
* 생성된 Key pair의 공용(public)키 부분을 .ssh/authorized_keys 에 추가
gituser@aws-ubt14-as01:~$ ssh-keygen -b 1024 -f gituser -t dsa
gituser@aws-ubt14-as01:~$ cat gituser.pub >> .ssh/authorized_keys
gituser@aws-ubt14-as01:~$ chmod 600 .ssh/authorized_keys
gituser@aws-ubt14-as01:~$ sudo chown -R gituser.gituser .ssh/
gituser@aws-ubt14-as01:~$ mkdir repos; cd repos
* Remote client에서 사용할 작업디렉토리 생성, repo 설정
* 새로운 repo 가 필요해질 때마다 별도로 작업해 주어야 함
gituser@aws-ubt14-as01:~/repos$ mkdir ec2new.git; cd ec2new.git
gituser@aws-ubt14-as01:~/repos/testprj.git$ git init --bare --shared
Remote client(개발자 PC)측 git 설정
* 기존 ec2new 프로젝트를 Local PC에서 git 서버에 push(업로드&동기화)하는 과정까지...
* EC2 vm에서 생성한 key pair의 개인(private)키 파일을 local 로 복사해 와서 저장
* ssh-add 로 키 파일이 자동 적용되게 한 후, EC2 vm 의 gituser 계정에 ssh 로그인이 가능한지 확인
bryan@bryan-XenPC:~$ scp -i AWSKP_as1.pem root@ec2-xxx.amazonaws.com:/home/gituser/gituser ./gituser.pem
bryan@bryan-XenPC:~$ ssh-add /home/bryan/gituser.pem
bryan@bryan-XenPC:~$ ssh gituser@ec2-xxx.amazonaws.com
* 작업 디렉토리(프로젝트: ec2new) 가 있다고 가정
bryan@bryan-XenPC:~/git-test/ec2new$ ls -l
합계 12
-rw-rw-r-- 1 bryan bryan 6 7월 22 20:39 README
-rw-rw-r-- 1 bryan bryan 31 7월 22 20:39 a.c
-rw-rw-r-- 1 bryan bryan 51 7월 22 22:33 b.cpp
* 현재 디렉토리를 git repo 등록(초기화)
bryan@bryan-XenPC:~/git-test/ec2new$ git init
* git repo에 현재 디렉토리의 모든 파일 추가(tracking 가능=staging상태=index에 등록)
bryan@bryan-XenPC:~/git-test/ec2new$ git add .
* a.c 파일을 수정하였다면 수정 사실을 git에 알린다(관리 대상으로 등록 의미)
bryan@bryan-XenPC:~/git-test/ec2new$ git add a.c
* Commit 이전까지는 Staging 단계, commit 이되면 HEAD에 기록(= local에 commit)됨
* 즉, git에서 commit 은 local 에서의 최종 저장 단계
bryan@bryan-XenPC:~/git-test/ec2new$ git commit -m "1st commit"
[master 346b586] Modified a.c
1 file changed, 1 insertion(+)
* Remote repo 주소를 git에게 알림
bryan@bryan-XenPC:~/git-test/ec2new$ git remote add ec2new ssh://gituser@ec2-xxx.amazonaws.com/home/gituser/repos/ec2new.git
* Remote repo 확인
bryan@bryan-XenPC:~/git-test/ec2new$ git remote -v
ec2new ssh://gituser@ec2-xxx.amazonaws.com/home/gituser/repos/ec2new.git (fetch)
ec2new ssh://gituser@ec2-xxx.amazonaws.com/home/gituser/repos/ec2new.git (push)
* Remote repo 에 업로드(최종 기록)
bryan@bryan-XenPC:~/git-test/ec2new$ git push ec2new master
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 341 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://gituser@ec2-xxx.amazonaws.com/home/gituser/repos/ec2new.git
eaacfc7..346b586 master -> master
[관련 글]
2015/07/24 - [Technical/Development] - [Git Tip] Git에 대한 궁금증들
- Barracuda -