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 배포 메시지 송신 설정하기 (선택)
set('slack', [ 'token' => 'xoxp-....', 'team' => 'API 페이지에 있는 팀명', 'app' => '프로젝트의 app name', 'channel' => '#메시지를_보낼_채널', //설정하지 않는 경우 #general로 송신됨.]);
require 'recipe/slack.php';
그리고 맨 아래에 다음 줄을 추가한다.
after('deploy', 'deploy:slack');
5. 서비스 서버 sudo 권한 설정
$ 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. 배포하기
서버명 기준: dep deploy production
스테이지 기준: dep deploy project_live
스테이지 기준 배포를 하는 경우, 여러 서버가 스테이지에 포함되어 있다면 포함된 모든 서버에 대해 배포가 수행 될 것이다.
4번을 설정한 경우 Slack에 Deployment Complete 라는 메시지가 온다.
매우 아름답다.
'내가 자꾸 까먹어서 쓰는 개발 이야기 > PHP' 카테고리의 다른 글
PHP로 메일 발송 시 한글이 깨질때 (0) | 2018.03.15 |
---|---|
PHPStorm에서 Gitlab merge request 사용하기 (0) | 2017.05.31 |
Ubuntu 16.04: PHP 7.0에서 7.1로 업데이트 하기 (0) | 2016.12.07 |
Codeigniter 3 with Propel 2 ORM (Ubuntu 16.04) (0) | 2016.12.06 |
curl 사용 시 페이지가 redirect 되는 경우 (0) | 2014.11.05 |
최근댓글