본문 바로가기

개발 노트/Linux

[EC2] Linux code-server 개발환경 구축하기

반응형

#1. AWS EC2 인스턴스 생성하기

 

기본적으로 나는 Cloud 환경에서 개발 및 서비스를 하는게 목표였기 때문에 여러 무료 Cloud 서비스들을 조사해 봤다. 

AWS, Google Cloud, NBP Cloud 등 클라우드 솔루션부터 무료 Docker 호스팅 서비스 (Heroku, Kubesail 등) 들을 비교해 보았을 때 역시 AWS가 가장 저렴 했다. (괜히 업계 1위가...)

따라서 AWS 의 EC2 서비스를 이용하기로 했으며 AWS 는 가입 후 1년 동안은 프리 티어이며 특정 조건 안에서는 서비스를 무료로 이용할 수 있다. EC2는 다음과 같은 상황에서 무료로 이용 가능하다.

AWS 프리 티어에는 1년간 매달 750시간의 Linux 및 Windows t2.micro 인스턴스(t2.micro가 제공되지 않는 리전의 경우 t3.micro) 사용 시간이 포함됩니다. 프리 티어를 계속 유지하려면 EC2 마이크로 인스턴스만 사용하십시오.

요약하면 1년간 매달이기 때문에 (1달은 24hours X 31days = 744hours) 1개의 t2.micro 인스턴스는 종료하지 않고 계속 사용해도 무료이다.

EC2 는 간단하게 설명하면 Cloud 에 있는 가상머신(VM)이며 OS 는 우분투, CentOS, Windows Server 등 다양하게 선택할 수 있다.

 

EC2 인스턴스 이미지 생성 화면
EC2 인스턴스 성능 선택

 

우선 EC2 에서 사용할 OS 를 선택하면 다음으로 인스턴스 Spec 을 고를 수 있다.
프리 티어는 t2.micro 만 가능하며 1vCPUs, 메모리 1GB 이다.
고성능을 필요로 하는 서비스를 운영할 게 아니라면 충분한 성능이라고 한다.

이후 3 ~ 6 단계까지 세부 설정을 할 수 있지만 "검토 및 시작"을 누르면 바로 7 단계의 생성 단계로 넘어갈 수 있다.

 

EC2 인스턴스 시작

 

자세한 세부 사항은 생성 후에도 컨트롤 할 수 있으므로 그냥 생성을 시작한다.

"시작하기" 버튼을 클릭 시 EC2에 SSH 접속하기 위한 Private Key 파일을 선택해야 하며 없는 경우 생성하면 된다.

 

Private Key 페어 생성

 

키 페어 이름을 입력 후 키 페어 다운로드를 하면 Download 경로에 [키 페어 이름].pem 파일이 다운로드가 된다.

이로써 EC2 인스턴스 생성은 완료 되었다.

 

#2. EC2 인스턴스 SSH 접속

EC2에서 개발 및 개발환경을 구성하기 위해 SSH 접속이 필요하다. SSH 접속은 인스턴스 생성 시 지정한 Private Key 로 접속이 가능하다. 나는 WSL(Windows Subsystem for Linux) 을 이용하여 SSH 접속 환경을 구성하였다. WSL 설치는 Microsoft 에서 제공해주는 Doc을 보고 설치했다. 

우분투를 설치하여 Windows 에서 SSH 로 EC2 인스턴스에 접근하기 위해서는 우분투에 이전에 다운받은
[키 페어 이름].pem 파일을 우분투에 복사해 넣어주어야 한다.

WSL 우분투에 파일 공유하는 방법은 해당 링크를 참조했다. 요약은 아래 참고

1. Open C:\Users\[사용자명]\AppData\Local\Packages

2. Ubuntu 이름이 들어간 폴더 선택

 

 
3. ...Ubuntu18.04onWindows...\LocalState\rootfs\root 경로에 파일 ([키 페어 이름].pem) 복사

 

4. Private Key 파일 (pem 파일) 의 권한을 600으로 설정 (600이 아닌 경우 권한문제로 접속이 안될 수 있음)

chmod 600 [키 페어 이름].pem

 

 

Private Key 를 SSH 에 지정하여 로그인 하는 방법은 다음과 같다.

ssh -i [키 페어 이름].pem ubuntu@[퍼블릭 IPv4 주소]

EC2 인스턴스의 퍼블릭 IPv4 주소로 Private Key 와 함께 SSH 접속을 할 수 있다.

 

#3. code-server 설치

이제 AWS에 내 Ubuntu 서버가 생겼다. 이 서버에 우선 개발 환경을 구성하기 위해 IDE (VSCode) 를 설치한다.

MS의 VSCode 는 무료이며 다양한 플러그인들을 설치하여 여러 언어로 개발이 가능한, 가장 인기있는 IDE 중 하나이다. VSCode 는 브라우저에서도 실행 가능한 앱의 형태로 되어 있으며 설치도 간단하다. 설치는 해당 링크를 참고했다.

 

1. EC2 인스터스에 SSH 접속 (ssh -i [키 페어 이름].pem ubuntu@[퍼블릭 IPv4 주소])

# ~/.profile 에 alias 추가시 이후 편하게 접속할 수 있다.
echo 'alias sshec2="ssh -i [키 페어 이름].pem ubuntu@[퍼블릭 IPv4 주소]"' >> ~/.profile
source ~/.profile
sshec2


2. curl -fsSL https://code-server.dev/install.sh | sh 실행 

 

 


3. systemctl --user enable --now code-server 실행

4. sudo apt install nginx 실행하여 nginx 설치


5. sudo vim /etc/nginx/sites-available/code-server.conf 로 config 설정

server {
        listen 80;
        listen [::]:80;
        server_name <instance ip>;
        location / {
                proxy_pass http://127.0.0.1:8080/;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection upgrade;
                proxy_set_header Accept-Encoding gzip;
        }
}

 

6. sudo ln -s /etc/nginx/sites-available/code-server.conf /etc/nginx/sites-enabled/code-server.conf 실행 

 

7. sudo nginx -t && sudo systemctl restart nginx 실행 

 

8. loginctl enable-linger ubuntu 실행

 

9. AWS 관리 페이지에서 EC2 > 보안 그룹 > [인스턴스 보안그룹 명] 에 접속하여 인바운드 규칙을 수정한다.

 

인스턴스의 보안그룹에 접속하면 인바운드 규칙을 수정할 수 있다.

 

 

 

기존 SSH 이외에 HTTP, HTTPS 를 추가해 준다.

 

인바운드 규칙에 Default 로 SSH 가 설정되어 있으며 추가로 HTTP , HTTPS규칙을 입력하였다.
고정 IP 사용하는 환경에서 보안 수준을 강화하고 싶다면 소스를 내 IP만 접속 가능하도록 설정하면 된다.

 

10. 브라우저에서 인스턴스의 퍼블릭 IP로 HTTP 접속 시 code-server 의 login 페이지가 뜨는걸 볼 수 있다.

 

 

SSH 접속 후 ~/.config/code-server/config.yaml 파일의 Password 를 확인하여 로그인 한다.

 

EC2에 VSCode 설치 완료

 

이로써 기본적인 개발 환경 구성은 완성하였다.
사실 HTTP 만으로 code-server 를 운영하기에는 보안상 문제가 있으므로 SSL 설정까지 해주어야 한다.

 

#4. SSL 설정

앞의 code-server 설치에 나와있는 링크에서는 도메인을 신청(유료)하여 certbot 을 이용한 SSL 설정으로 https 서버 동작을 시켰다. 그 설명으르 보고 도메인만 있으면 되는 줄 알고 EC2에서 제공하는 퍼블릭 도메인을 이용해서 certbot 설정을 시도하니 결론적으로는 certbot 정책 상 EC2의 도메인으로는 certbot 으로 https 설정을 할 수 없었다.

 

따라서 사설 SSL 인증서로 SSL 설정을 했다. 만약 이 작업을 하지 않는다면 code-server 에 암호를 입력하고 코드를 작성한다 하더라도 네트워크가 스니핑되고 있다면 code-server의 암호가 평문으로 보이게 되므로 반드시 필요한 절차이다.

 

1. openssl genrsa -aes256 -out tmp-ssl.key 2048 명령어로 공개키 생성 (명령어 후 비밀번호 입력 필요함)

 

2. 생성된 key 파일로 key, crt, csr 파일을 생성해줌 

$ openssl rsa -in tmp-ssl.key -out cert.key
$ openssl req -new -key cert.key -out cert.csr
$ openssl x509 -req -days 365 -in cert.csr -signkey cert.key -out cert.crt

 

3. sudo vi /etc/nginx/sites-available/code-server.conf 파일에 SSL 내용 추가

server {
        listen 443 ssl;
        ssl_certificate <cert 경로>/cert.crt;
        ssl_certificate_key <key 경로>/cert.key;
        server_name <instance ip>;

        location / {
                proxy_pass http://127.0.0.1:8080/;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection upgrade;
                proxy_set_header Accept-Encoding gzip;
        }
}

 

4. sudo nginx -t && sudo systemctl restart nginx 실행 

 

 

서버 재시작 후 HTTPS 로 code-server 에 접속이 가능해진다. 사설 인증서이므로 최초 HTTPS 로 접속 시 경고창이 뜬다.

이 때, 고급에 들어가 "<instance ip>(안전하지 않음)(으)로 이동"으로 이동을 통해 접속이 가능하다.

 

"주의 요함" 이 뜨긴 하지만 HTTPS 접속이므로 네트워크 단에서 안전하다. 이제 개발을 시작할 수 있다.

반응형