외부에서도 장비나 환경에 구애받지 않고 인터넷이 되는 환경이면 개발을 할 수 있도록 과거에 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 화 할 수 있다.
'개발 노트 > Etc.' 카테고리의 다른 글
[API] 네이버 Finance 주식 시세 가져오기 (2) | 2021.06.05 |
---|---|
[Macbook] lrzsz 설치 (0) | 2021.06.05 |
[Docker] Ubuntu CLI 한글 입력 (0) | 2021.04.22 |
[Docker] x509: certificate signed by unknown authority 에러 (2) | 2021.04.15 |
[PostgreSQL] 비밀번호 초기화 방법 (0) | 2020.12.08 |