Archives
11-24 22:42
Today
15
Total
287,672
관리 메뉴

FILife

"DEPLOYER"를 통한 배포 본문

내가 자꾸 까먹어서 쓰는 개발 이야기/PHP

"DEPLOYER"를 통한 배포

FIL 2017. 2. 16. 11:06
728x90

https://deployer.org/


Capistrano가 ruby를 사용하여 배포하는 관계로, 사용하려면 ruby와 rubygems를 설치해줘야 했었다.


deployer는 PHP 전용 배포도구로, PHP만 있으면 된다. (!!)


직접 사용해보니 아래와 같은 장점들이 있었다.


1. PHP만으로 배포

2. 멀티서버 배포 가능

3. 버전별 관리 및 롤백

4. codeigniter, laravel 등 메이저 framework에 대한 배포 preset 지원

5. composer vendor compoenent 자동 설치

6. 배포 시 slack 메신저에 배포 메시지 전달 가능


0. 공통 준비사항

- 개발서버와 배포 대상 서버 모두 git을 설치한다.


- git repository에 배포 대상서버에서 생성한 public key를 등록 해 둔다.


1. 설치하기

늘 그렇듯 다짜고짜 설치부터 해보자.


설정 기준은 최근 관심사에 따라 Laravel, 저장소는 git이다.


위에 적은 웹페이지의 Documentation > Installation 으로 들어가면 친절하게 설명이 되어있다.


배포할때 커맨드가 길면 짜증을 유발할 수 있으므로 curl과 composer를 통한 설치를 모두 한다.


$ curl -LO https://deployer.org/deployer.phar

$ mv deployer.phar /usr/local/bin/dep

$ chmod +x /usr/local/bin/dep

어느 경로에서나 사용할 수 있는 "dep" 명령어가 생성되었다.


기분좋은 사용을 위해 최신 버전으로 업데이트 해주자.


$ dep self-update --upgrade


다음은 project 디렉토리로 가서 compsoer에 추가시켜 주자.

[:project]$ composer require deployer/deployer


2. 설정파일(recipe) 생성하기

라라벨 배포에 관한 내용은 https://deployer.org/blog/how-to-deploy-laravel 에 가보면 잘 나와있다.


[:project]$ dep init -t Laravel


위 명령어를 입력하면 프로젝트 디렉토리에 deploy.php 파일이 생성된다.



3. deploy.php 설정하기

기본적인 프리셋이 내장되어 있으므로, vi, nano 등 에디터로 열어 필요한 부분만 편집해주면 준비가 완료 된다.


set('repository', 'git@github.com:user/project.git'); 부분에 저장소 url을 넣어주자.


server('production', 'domain.org')

    ->user('name')

    ->identityFile()

    ->set('deploy_path', '/var/www/html');


부분의 도메인, 사용자, 배포 경로를 수정 해 주고 나중에 나올 단계를 위해 적절한 stage이름을 추가해주자.


server('production', 'www.my_domain.com')

    ->user('my_server_username')

    ->identityFile()

    ->set('deploy_path', '/var/www/my_project')

    ->stage('project_live');



4. slack 배포 메시지 송신 설정하기 (선택)

slack 을 사용하는 경우에만 필요하므로, 사용하지 않는 경우 건너뛰도록 하자.

먼저 slack을 사용중인 팀으로 로그인 하여 API 키를 발급받는다. -> https://api.slack.com/docs/oauth-test-tokens

발급받은 토큰을 토대로 deploy.php 파일 상단의 set 이 모인 부분에 아래와 같이 설정을 추가한다.

set('slack', [
'token' => 'xoxp-....',
'team' => 'API 페이지에 있는 팀명',
'app' => '프로젝트의 app name',
'channel' => '#메시지를_보낼_채널', //설정하지 않는 경우 #general로 송신됨.
]);

https://github.com/deployphp/recipes/blob/master/recipe/slack.php 파일을 project/vendor/deployer/deployer/recipe 경로에 저장한다.

deploy.php 파일 상단에 다음 코드를 추가한다.

require 'recipe/slack.php';


그리고 맨 아래에 다음 줄을 추가한다.


after('deploy', 'deploy:slack');



5. 서비스 서버 sudo 권한 설정

deployer가 수행하는 기본 작업에 php-fpm 서비스를 재시작 하도록 되어있다.

이를 위해 서비스 서버에서 사용되는 계정이 패스워드 입력 없이 해당 서비스를 재시작 할 수 있도록 설정해주어야 한다.

서비스 서버에 ssh로 들어가 아래 명령어를 통해 권한을 추가해준다. (Ubuntu 16.04 기준)

$ sudo visudo -f /etc/sudoers


추가할 내용은 아래와 같다.


user_id_on_live_server ALL=NOPASSWD:/bin/systemctl restart php-fpm.service


주의할 점은, "php-fpm.service" 부분은 php5-fpm.service / php7.0-fpm.service 등 버전에 따라 다를 수 있다.


이 부분이 잘못되면 sudo 명령을 실행하지 못하는 혼란에 빠질 벼룩잡다 초가삼간 다 태워먹을수 있으니 주의하도록 하자.



6. 배포하기

드디어 배포를 할 시간이다.

위에서 stage를 추가했으므로 배포 시 서버 또는 스테이지 이름을 입력해 주어야 한다.


서버명 기준: dep deploy production


스테이지 기준: dep deploy project_live


스테이지 기준 배포를 하는 경우, 여러 서버가 스테이지에 포함되어 있다면 포함된 모든 서버에 대해 배포가 수행 될 것이다.


4번을 설정한 경우 Slack에 Deployment Complete 라는 메시지가 온다.


매우 아름답다.

0 Comments
댓글쓰기 폼