본문 바로가기
개발/AWS

AWS에 vscode 서버 만들기

by ny0011 2021. 3. 16.
반응형

웹으로 vscode를 볼 수 있다구?

 

AWS에 VS Code server를 만들어두면 내 public IP로 접속해서 바로 코딩할 수 있는 환경이 생기니까

아이패드에서 terminus를 사용하지 않고 웹으로 코딩할 수 있는 게 큰 장점인 것 같다.

 

code-server를 사용하면 VS Code를 브라우저에서 실행할 수 있다고 한다.

github.com/cdr/code-server

 

cdr/code-server

VS Code in the browser. Contribute to cdr/code-server development by creating an account on GitHub.

github.com

code-server를 설치하기 전에 어떤 걸 하는지 궁금하면 --dry-run 옵션을 사용해서 확인할 수 있다

~$ curl -fsSL https://code-server.dev/install.sh | sh -s -- --dry-run
Ubuntu 18.04.5 LTS
Installing v3.9.1 deb package from GitHub releases.

+ Reusing ~/.cache/code-server/code-server_3.9.1_amd64.deb
+ sudo dpkg -i ~/.cache/code-server/code-server_3.9.1_amd64.deb

To have systemd start code-server now and restart on boot:
  sudo systemctl enable --now code-server@$USER
Or, if you don't want/need a background service you can run:
  code-server

 

code-server를 실제로 설치해보자

~$ curl -fsSL https://code-server.dev/install.sh | sh

code-server를 systemd에 등록해서 서비스로 돌리고 싶으면 아래처럼 등록한다.

sudo systemctl enable --now code-server@$USER

code-server 시작 명령

sudo systemctl start code-server@$USER

 

code-server에 아무런 설정을 하지 않았으면 http://[AWS 서비스 주소]:8080으로 실행된다.

그렇지만 공식 문서에서는 아무런 인증 수단 없이 code-server가 개방된 인터넷 공간으로 나오는 걸 반대함

 

기본적으로 code-server에 접속하려면 비밀번호를 입력해야 한다.

로컬에서 사용할 때는 기본 설정대로 해도 되지만

AWS를 사용하려고 했던 건 결국 외부에서도 사용하고 싶은거니까

보안 설정도 같이 해준다.

 

code-server의 기본 설정은 ~/.config에서 확인할 수 있다.

$ cat ~/.config/code-server/config.yaml
bind-addr: 127.0.0.1:8080
auth: password
password: xxxx
cert: false

 

1. ssh forwarding

공식 문서는 이 방법을 아주 추천한다고 한다. 

ssh server를 통해 접속하는 것 뿐이라서 다른 방법보다 쉽게 설정할 수 있다.

그치만 아이패드 같이 ssh client가 없는 기기에서는 사용할 수 없으니 다른 방법을 사용해야 함😥

 

1) [code-server:server] 인증 방식을 password -> none으로 변경

sed -i.bak 's/auth: password/auth: none/' ~/.config/code-server/config.yaml

2) [code-server:server] code-server 재시작

sudo systemctl restart code-server@$USER

3) [code-server:client] ssh로 portforwarding을 한다.

aws의 공개키로 로그인해야 한다면 -i 옵션을 사용해서 공개키 파일명을 적어준다

ssh -N -L 8080:127.0.0.1:8080 [user]@<instance-ip> -i "aws-key.pem"

4) [code-server:client] http://localhost:8080 에 접속한다.

 

접속 된다~~

그래도... 혹시 모르니 아이패드 terminus에서 접속 가능한지 한번 봐야겠다ㅠㅠ

 

+) 된다! 그치만 한글로 적으니ㅋㅋㅋㅋㅋㅋ 다중 입력이 되는지 이이이러러러렇ㅎ헤게ㅔㅔ된다

 

2. 도메인 설정 + nginx로 웹 서버 설정 + TLS 적용

도메인을 설정하는 데 꽤 오래걸렸다. 로컬에서 그냥 정할 수 있을 줄 알았는데.. 안되네!

내가 했던 순서는 nginx -> domain -> tls인데 제대로 했으면 domain 부터 추가해야 편하다.

 

1) 도메인 만들기

공식 문서는 Google Domain을 쓰라고 하지만 유료다ㅠㅠ

제일 싼 요금이 page(1년에 $10)인데 다음에 필요할 때 사용해봐야지..

이번엔 무료로 도메인을 제공해주는 freenom을 사용해보기로 했다.

 

내 웹 주소가 될 문자(영어/숫자로 해야 함)를 검색해본다

 

위쪽 파랑색은 무료, 아래 노랑색은 유료다.

사람들이 잘 안쓰는 도메인 이름을 공짜로 주는듯.

근데 ml은 머신러닝이 생각나서 나중에 꽤 많이 쓰일 듯?

 

Get it now!로 선택하고 로그인을 한다.

로그인은 이메일 주소만 제대로 적고 나머지는 아무렇게나..

아래처럼 호스트이름과 IP 등록을 할 수 있다.

보통 www 적지 않는 경우도 있어서 둘다 적게 하는건가봄..?

IP address에는 두 곳 모두 내 AWS Public IP를 적는다.

 

내 이메일 주소로 인증을 하면 내 웹 주소가 생겼다!

 

2) nginx 웹 서버 설정하기

요기서부턴 문서를 참고했다

 

- nginx 설치

sudo apt update
sudo apt install -y nginx 

 

3) TLS 적용

TLS(SSL) 적용이 필요한 이유는 웹 접속 시 보안 연결(HTTPS)을 해주기 위해서다

개인 정보를 그래도 안전하게 전송해주려고ㅎㅎㅎ

문서에는 무료로 SSL을 발급해주는 Let's Encrypt의 certbot을 사용했다.

 

내 AWS는 ubuntu 18.04, nginx 웹 서버를 사용하니 아래 주소대로 설정을 진행한다.

certbot.eff.org/lets-encrypt/ubuntubionic-nginx

 

Certbot - Ubuntubionic Nginx

a project of the Electronic Frontier Foundation certbot instructions To use Certbot, you'll need... comfort with the command line command line ...and an HTTP website HTTP website that is already online already online with an open port 80 port 80 ...which i

certbot.eff.org

- certbot 설치

# snap이 최신 버전인지 확인
sudo snap install core; sudo snap refresh core

# 기존에 설치된 certbot 삭제
sudo apt-get remove certbot

# certbot 설치
sudo snap install --classic certbot

- certbot 명령어 준비

certbot을 실행할 수 있게 /usr/bin 위치로 심볼릭 링크를 만들어준다

sudo ln -s /snap/bin/certbot /usr/bin/certbot

- certbot 실행

d 옵션은 1)에서 만든 웹 주소, m 옵션은 내 메일 주소를 적으면 된다.

메일 주소 잘못 적으면 안되던가...? 잘 모르겠다.

sudo certbot --non-interactive --redirect --agree-tos --nginx -d 0011test.tk -m test@google.com

 

4) nginx 설정 수정하기

certbot이 /etc/nginx/sites-available/default를 수정했기 때문에

/로 이동했을 때 code-server가 실행되게 proxy 설정이 필요하다

 

- location / 부분만 아래처럼 수정

# vi /etc/nginx/sites-available/default

server {
    listen 80;
    listen [::]:80;
    server_name 0011test.tk;

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

 

 

끝!!!!!

이제 nginx를 재시작 해주자

sudo systemctl restart nginx

 

 

 

 

댓글