Overview
AWS에 Jenkins와 Nginx를 이용하여 vue project를 올리는 방법에 대하여 알아보자
이 때 git repository에 project commit이 push 될때 자동으로 빌드가 이루어지도록한다 (CD)
- EC2에 linux (or window) 인스턴스 생성
- EC2 인스턴스에 Security Group 설정
- git webhook 설정
- git credential token 발급
- EC2에 에 Jenkins 및 daemonize 문제 해결
- Jenkins 설정 변경 (git credential, item 생성)
- EC2에 nginx 설치
- nginx 설정 변경(conf.d)
- 빌드!
1. EC2에 linux 인스턴스 생성
관련 내용은 쉽고 넷상에 많이 나오므로 링크로 생략
https://victorydntmd.tistory.com/61
2. EC2 인스턴스에 Security Group 설정
aws console EC2 > 사용할 인스턴스 Detail로 페이지 > Security tab > secity groups 클릭
Edit inbound rules > 다음 개방 포트 추가
8080은 Jenkins가 작동할 포트이다. Jenkins 설정 변경을 위해 접속할 일이 있으니 열어두도록하자. 단, 진짜 서비스의 경우 개방 범위를 0.0.0.0/0으로 하면 모든 사람이 들어올 수 있으니 이 때는 제한하도록 하자.
포트 3000이나 80 둘중 하나만 열어도 된다. 웹서버 nginx가 web application을 띄울 포트를 열도록한다. 모든 사람이 접속할 수 있어야 하므로 개방 범위를 0.0.0.0/0으로 설정하자.
3. github webhook 설정 및 developer authentication 생성
GitHub Webhook
- Webhook을 사용하면 GitHub Apps 또는 OAuth Apps와 같은 integration을 빌드하거나 설정할 수 있다.
- 이러한 이벤트(예: commit code) 중 하나가 트리거되면 HTTP POST Payload를 webhook에 설정된 URL로 보낸다.
- webhook을 이용해 CI 빌드를 트리거하거나 production 서버에 배포할 수 있다.
vue project 의 repository > setting 탭 > webhook 탭
- Payload URL : "EC2에서 Jenkins 서비스 URL"/github-webhook/
- webhook POST request를 받을 서버의 URL 정의. jenkins의 경우 뒤에 github-webhook/ path를 명시해줘야 한다.
- Content type: application/json
- webhoook을 어떤 형태로 받을지에 대한 정의. 여기서는 json으로 받음
- Just the push event
- push event가 발생했을 시에만 webhook이 trigger되도록 함
4. git personal access token 발급
내 프로필 > settings > Developer settings 탭 > Personal access tokens 탭 > Generate new token > repo 체크
발급된 personal access token를 꼭 기억하도록 한다
git에서의 setting이 모두 끝났다. 이제 Jenkins 설치 및 설정 과정에대해 알아보자.
5. EC2에 Jenkins 및 Git 설치
Jenkins 설치
Jenkins 설치 방법은 넷상에 널려 있으니 이 또한 링크로 대체
https://bokyung.dev/2021/03/17/jenkins-install/
만약 설치 중간에 다음의 에러가 발생한다면
$ sudo yum install jenkins
...
Error: Package: jenkins-2.319.1-1.1.noarch (jenkins)
Requires: daemonize
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
다음의 명령어를 실행 시킨후 jenkins를 설치한다
$ sudo amazon-linux-extras install epel -y
$ sudo yum install jenkins
Git 설치
https://gamoo12.tistory.com/205
6. Jenkins git 연결 및 item 생성 (git credential, item 생성)
nodejs 환경 생성
시작하기 전 nodejs 환경을 만들어주기 위해 플러그인을 설치해주자.
jenkins 관리 > 플러그인 관리 > 설치 가능 탭 > nodejs 검색
설치가 완료되었다면 (jenkins service restart까지) jenkins 관리 > global tool configuration > NodeJs 환경 생성
git personal access token credential 저장
이전에 설정했던 github webhook을 설정하기 위해 jenkins에 git personal access token credential을 저장하도록하자.
jenkins 관리 > Manage Credentials > (global) > Add Credentials > 내용 입력
- Kind: Username with password
- Scope : Global
- Username : git username
- password : 이전에 발급받은 git personal access token
- ID : 임의로 지은 식별자
Item 생성
새로운 Item > 아이템 이름 지정 및 Freestyle project 선택 > 소스코드 관리에서 Git radio button 체크 > 다음 내용 입력
- Repository URL : vue project git HTTPS 주소
- Credential : 이전에 생성한 git personal access token credentail 선택
GitHub hook trigger for GITScm polling 체크 (webhook trigger) > Provide Node & npm bin/ folder to PATH 체크 > 이전에 만든 nodejs 환경 선택
Build Execute shell 선택 및 해당 내용 입력
asdfeeeee 는 내가 만든 Jenkins Item 이름이다. 각자의 이름에 맞게 변경토록하자.
npm run build는 만약 build 명령어가 다르다면 해당 명령어로 입력하면 된다.
7. nginx 설치
https://velog.io/@ant-now/AWS-%EC%84%9C%EB%B2%84%EC%97%90-Nginx-%EC%84%A4%EC%B9%98
8. nginx build file 경로 지정 및 서비스 포트 설정
$ cd /etc/nginx/conf.d
$ vim default.conf //아무 이름이나 만들어도 된다.
// default.conf에 다음내용을 입력한다.
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/lib/jenkins/workspace/asdfeeeee/dist;
index index.html index.htm;
server_name _;
location/{
try_files $uri $uri/ /index.html;
}
}
//설정 완료후
$ sudo service nginx restart
- 웹 페이지를 80번 포트에서 서비스 하기위해 80번 포트를 열었다.
- root의 경로를 build 시 build 파일이 생성되는 "jenkins item 경로"/dist 로 지정했다.
- 입력 한 conf값 저장후 nginx 웹서버를 재시작한다.
※만약 wq! 로 저장이 안된다면 현재 ec2-user linux 계정이 저장할 권한이 없는 것이다. 미리 sudo su 로 권한을 root로 변경하던지 저장할때 wq! 대신 w !sudo tee % > /dev/null 로 저장한다.
이제 public ip로 접속하면 만들어진 화면이 나옴을 볼 수 있다.
'VueJS' 카테고리의 다른 글
VueJS 3.0 form validating (0) | 2022.01.08 |
---|---|
Vue Authentication (0) | 2022.01.08 |
Vue 3 - 5. Props With Types (0) | 2021.12.28 |
Vue3 - 4.Custom type의 데이터 (0) | 2021.12.28 |
Vue3 - 3.Type Fundamentals (0) | 2021.12.28 |