기준은 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
만약 잘 안된다면 여기다 물어보지 않는다.
기초밖에 몰라서 기초편밖에 없을것이다.
더 많은걸 알고있거나 알게 된 분들은,
나도 좀 알려줘..
'내가 자꾸 까먹어서 쓰는 개발 이야기 > Linux Server' 카테고리의 다른 글
[Ubuntu 16.04] qemu kvm & WebVirtMgr - 생성하기 (0) | 2017.04.25 |
---|---|
[Ubuntu 16.04] qemu kvm & WebVirtMgr - 설치하기 (0) | 2017.04.24 |
apt-get에서 Problem with MergeList 오류가 나는 경우 (0) | 2014.12.24 |
[LinuxMint] 멀티 부팅 상태일 때 부팅 순서 바꾸기 (0) | 2014.12.09 |
[Ubuntu Desktop] Nautilus에서 RabbitVCS의 콘텍스트메뉴가 동작하지 않는 경우 (0) | 2014.09.22 |
최근댓글