본문 바로가기

개발 노트/Etc.

[Docker] code-server https 개발환경 구축

반응형

외부에서도 장비나 환경에 구애받지 않고 인터넷이 되는 환경이면 개발을 할 수 있도록 과거에 EC2에 code-server (online vscode) 를 설치하여 올려봤었다. (참고 : Linux code-server 개발환경 구축하기)

 

하지만 EC2 의 프리티어 성능으로는 개발을 하기에 도저히 불가능하였기에 집에서 놀고 있던 노트북에 ubuntu 20.04 를 설치하여 서버로 사용하기로 했다.

 

개발환경의 경우 가상머신이나 Docker 와 같은 Host 서버와 독립적으로 구성하는게 좋기에 Docker 로 구성하기로 하였고 이전에 했던 것처럼 최소한의 보안을 위해 https 설정까지 포함하였다.

 

Docker 의 사용법은 인터넷에 이미 많이 있고 배우기 쉬우므로 여기서는 간단하게

https code-server 를 Docker 이미지를 생성하는 방법에 대해서만 정리하겠다.

 

Dockerfile

FROM ubuntu:20.04
RUN apt update -y && apt upgrade -y && apt install -y curl nginx vim net-tools telnet ssh
RUN curl -fsSL https://code-server.dev/install.sh | sh
ADD cert.tar.gz /root/
COPY code-server.conf /etc/nginx/sites-available/
RUN ln -s /etc/nginx/sites-available/code-server.conf /etc/nginx/sites-enabled/code-server.conf
COPY execute_codeserver.sh /tmp/
CMD ["/bin/bash", "/tmp/execute_codeserver.sh"]

위 Dockerfile 은 ubuntu 20.04 를 베이스 이미지로 code-server 와 nginx 설치를 하여 실행시켜주는 스크립트이다.

 

여기서 필요한 파일들은 https 에서 사용할 (1) cert 파일들, 

https proxy 로 사용하기 위한 nginx 설정 파일 (2) code-server.conf ,

백그라운드로 nginx 와 code-server 를 수행하기 위한 (3) 스크립트 총 3가지가 있다.

 

(1) cert.tar.gz

$ openssl genrsa -aes256 -out tmp-ssl.key 2048 # 공개키 생성 (명령어 후 비밀번호 입력 필요함)
$ 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
$ tar -zcf cert.tar.gz cert.*

위 명령어로 openssl 로 https 설정에 사용할 cert.crt 와 cert.key 파일을 생성해 준다.

(2) code-server.conf

server {
        listen 443 ssl;
        ssl_certificate /root/cert.crt;
        ssl_certificate_key /root/cert.key;
        server_name 172.28.105.10;
        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;
        }
}

nginx 를 proxy로 사용하여 client 와 https 세션을 맺고 code-server 의 http 서버로 통신하도록 해주는 설정이다.

 

 

(3) execute_codeserver.sh

#!/bin/bash
code-server > /dev/null &
nginx -t && nginx
while true ; do
        sleep 600;
done

Docker 는 Background process 를 수행할 수 없기 때문에 nginx 와 code-server 를 background 수행 후 tty 를 계속 holding 할 수 있도록 별도의 스크립트를 작성하여 수행시켜 준다.

 

Docker build

$ docker build --tag code-server:1.0 .

위에 명시한 파일들 3개와 Dockerfile 들이 있는 디렉터리에서 docker build 명령어를 수행하면 https code-server 가 실행 중인 도커 이미지를 얻을 수 있다.

 

Docker run

$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
dev_server   0.1       fcdb8ce0aa38   1 hours ago   691MB
$ docker run --rm -idtp 443:443 -v /home/user/data:/data -e PASSWORD=yourpassword --name dev_server dev_server:0.1

위 명령어로 Docker image 를 확인하고 run 으로 실행 시 생성한 이미지대로 code-server 를 구동할 수 있다.

docker run 옵션을 간략하게 설명하자면

  • -idtp : daemon 방식 tty interaction 가능한 컨테이너를 수행한다는 의미이며, p 옵션은 Host:Container 순서로 포트포워딩을 의미한다.
  • -v : volume 을 공유할 수 있도록 지정하는 옵션이며 포트와 마찬가지로 Host:Container 순서이다. 해당 옵션 수행 시 사용자의 home 경로에 있는 data 디렉터리가 contiainer 의 /data 경로로 공유된다.
  • -e : docker 에서 환경변수를 설정할 수 있는 옵션이며 code-server 에서는 $PASSWORD 환경변수를 vscode 접속 시 웹 암호로 설정하기 때문에 해당 옵션으로 개발자가 원하는 패스워드를 간단하게 설정할 수 있다.
  • --name : 컨테이너의 이름을 지정할 수 있는 옵션으로 지정하지 않으면 docker 에서 랜덤하게 지정을 한다.

이렇게 설정한 Docker container 의 Host IP로 https 접속을 한 후 환경변수로 지정한 PASSWORD 입력 시 아래와 같은 vscode 화면을 브라우저에서 볼 수 있다.

 

 

참고

위 docker image 에서 추가로 필요한 개발 도구들을 설치하면 본인 만의 개발 환경을 구축하여 image 화 할 수 있다.

반응형