728x90

기준은 Ubuntu 16.04LTS 다.


개발 서버의 사용자 계정명은 dev-slave다.


그래, 개발노예..


다짜고짜 설치부터 한다.


$ sudo apt-get install ruby-full


귀찮으니까 full로 설치한다.


ruby를 설치했으면 capistrano를 설치한다.


대상 서버에서 sudo 명령을 날릴 것에 대비해 sshkit-sudo도 함께 설치한다.


$ sudo gem install capistrano

$ sudo gem install sshkit-sudo


프로젝트에 포함시켜도 좋고 포함시키지 않아도 좋겠지만,


버전관리에 포함시키면 clone 한번 뜨는것 만으로 배포 환경이 따라오므로 나는 포함시킨다.


staging은 개발용 테스트 서버(development)와 LIVE서버(production) 두가지로 한다.


$ cd ~/home/dev-slave/projects/my_project

my_project$ mkdir capistrano

my_project$ cd capistrano

capistrano$ cap install STAGES=development,production


사실 staging과 production으로 기본 생성되긴 한다.


복사해서 써도 된다.


다음으로 Capfile에 sshkit-sudo를 require 추가해 준다.


capistrano$ vi Capfile


require들 중 맨 아래에 아래 줄을 추가해준다.


require "sshkit/sudo"


다음으로, deploy.rb 파일을 수정한다.


대부분 주석처리 된 상태로 이미 기재되어 있으니 해당 줄을 찾아 주석 제거 후 필요한 부분을 수정 해 주면 된다.


set :application, 'my_project' #프로젝트명 설정

set :repo_url, 'git@git-server.com:my-repository/my_project.git' #저장소 지정

set :deploy_to, '/var/www/my_project' #배포될 디렉토리 경로 설정


append :linked_dirs, 'upload_files', 'logs' #symlink 될 디렉토리들을 넣어준다. shared_path 내부와 동일한 경로로 symlink 된다.

append :linked_files, 'db_config.php' #symlink 될 파일들이다. 위와 같다.


task :task_name do

on roles :all do

execute :ls, '/var/www/my_project' #코드 적용이 완료된 후 실행할 명령이다.

sudo :service, 'apache2 restart' #코드 적용이 완료된 후 실행할 sudo 명령이다. execute! 로도 실행 가능하다. (참고)

end

end

after "deploy:finished", "task_name" #위에 적용한 task_name task를 deploy:finished 이벤트 발생 시 실행하도록 설정.


마지막으로 staging 파일들을 수정한다.


마찬가지로 주석처리 된 내용들이 대부분 들어있다.


# server-based syntax #이부분은 각 서버별로 web, app, db등을 모두 배포할때 사용한다. 난 안쓰니까 패스.

# role-based syntax #동일한 내용으로 여러 서버에 배포할때 사용한다.

role :web, %w{deploy@192.168.0.100 deploy@192.168.0.101}


set :ssh_options, {

keys: %{/home/dev-slave/.ssh/id_rsa),

forward_agent: false,

auth_method: %w(publickey)

}


위 내용에서 눈치 챘는지 모르겠지만,


타겟 서버 ssh 접속과 git 저장소에서 배포용 clone을 떠올 공개키가 필요하다.


먼저 생성부터 한다. (이곳에 잘 나와있다.)


$ cat ~/.ssh/id_rsa.pub


이 커맨드를 입력했을때 오류가 아닌 ssh-rsa 어쩌고 하는게 표시된다면 생성 부분은 건너뛰면 된다.


그딴 파일 없다고 오류가 났다면 키를 생성 해 준다.


ssh-keygen -t rsa -C "dev-slave@hell-chosun.com" (이대로 하지말고 git 서버에 등록된 당신의 이메일을 써라.)


이렇게 하면 ~/.ssh/ 디렉토리에 id_rsa, id_rsa.pub 파일이 생성된다.


내용을 콘솔에 출력하자.


cat ~/.ssh/id_rsa.pub


ssh-rsa 어쩌고 하는 긴 문자열이 보일것이다.


ssh-rsa 부분부터 끝까지 복사한다. 각자 알아서 잘 복사한다.


이 키를 git 서버의 deploy keys에 추가 해 준다. (github, gitlab 등 서버마다 다르므로 알아서 잘 해본다.)


마찬가지로 같은 키를 배포할 서버들에 추가해준다. 배포 시 사용 될 ssh 계정으로 로그인 해서 추가해야 한다.


각 서버의 ~/.ssh/authoried_keys 파일에 추가해주면 된다. vi 또는 cap <<  등을 이용하면 되겠다.



다됐다.


cap install을 실행했던 경로로 가서 배포가 잘 되는지 테스트 해 보자.


capistrano$ cap development deploy


만약 잘 안된다면 여기다 물어보지 않는다.


기초밖에 몰라서 기초편밖에 없을것이다.


더 많은걸 알고있거나 알게 된 분들은,


나도 좀 알려줘..

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기