1 | 크로키 서비스 서버를 위한 배포 스크립트
|
2 |
|
3 | # 적용
|
4 |
|
5 | 1. deploy.yaml을 작성한다.
|
6 | 1. devDependencies에 "@croquiscom/croquis.deployer": "0.10.0" 추가
|
7 | 1. Cakefile에 require '@croquiscom/croquis.deployer/cakefile' 추가
|
8 |
|
9 | # 사용법
|
10 |
|
11 | * cake deploy - 서버에 배포
|
12 | * cake run - 개발 모드로 서버 실행
|
13 | * cake run:test - 테스트 모드로 서버 실행
|
14 | * cake start - 실 서버에서 데몬으로 서비스 실행
|
15 | * cake stop - 데몬 중지
|
16 |
|
17 | # EC2 배포
|
18 |
|
19 | ## deploy.yaml 설정
|
20 | * server: 배포할 서버 주소
|
21 | * project: 프로젝트 명. 디렉토리 이름이 된다
|
22 |
|
23 | ## 과정
|
24 | cake deploy를 실행하면
|
25 |
|
26 | bin/deploy (클라이언트)
|
27 | 1. 현 디렉토리를 서버의 work/<project> 디렉토리에 복사한다.
|
28 | 1. 서버에서 bin/\_deploy\_on\_server.sh를 실행한다.
|
29 |
|
30 | bin/\_deploy\_on\_server.sh (서버)
|
31 | 1. 필요한 모듈을 설치한다.
|
32 | 1. running/<project>/versions 밑에 신선한 복사본을 만든다. (문제가 생겼을 떄 되돌아가기 쉽게 하기 위해서)
|
33 | 1. running/<project>/current에 최신 복사본에 대한 링크를 건다.
|
34 | 1. bin/start를 실행한다.
|
35 |
|
36 | bin/start
|
37 | 1. forever로 lib/server.js를 데몬으로 띄운다.
|
38 |
|
39 | # Elastic Beanstalk 배포
|
40 |
|
41 | ## deploy.yaml 설정
|
42 | * elasticbeanstalk.region: 배포 리전
|
43 | * elasticbeanstalk.application\_name: 어플리케이션 이름
|
44 | * elasticbeanstalk.environment\_name: 환경 이름
|
45 |
|
46 | ## AWS 설정
|
47 | * awscli 설치: pip install awscli
|
48 | * jq 설치: brew install jq
|
49 | * IAM 설정
|
50 | ```
|
51 | {
|
52 | "Version": "2012-10-17",
|
53 | "Statement": [
|
54 | {
|
55 | "Effect": "Allow",
|
56 | "Action": [
|
57 | "elasticbeanstalk:*",
|
58 | "elasticloadbalancing:*",
|
59 | "autoscaling:*",
|
60 | "s3:*",
|
61 | "cloudformation:*"
|
62 | ],
|
63 | "Resource": "*"
|
64 | }
|
65 | ]
|
66 | }
|
67 | ```
|
68 |
|
69 | # 시그널
|
70 |
|
71 | server.js 프로세스에 시그널을 보내면 다음과 같은 처리를 한다.
|
72 |
|
73 | * SIGHUP
|
74 | * 모든 Worker를 재시작한다.
|
75 | * SIGUSR2
|
76 | * 로그파일을 다시 연다.
|
77 |
|
78 | server.js 프로세스는 자식 Worker를 재시작할 때 기존 자식 프로세스에 SIGTERM을 보낸다.
|