guacamole을 이용해서 GCP의 window VM을 web에 띄우는 방법을 연구해 봐야겠다. 이렇게 생각하게 된 이유는...
0) 메인 개발용으로 code-server를 vm에 상시 띄워두고 있다.
1) react native 개발을 해야 하는데, 그걸 못한다. (사지방 환경 수쥰..)
2) 원래 검색 서버로 ubuntu를 쓰고 있었고 계속 켜 두고 있었는데, 많이많이 느리다.
1. 다른 GCP VM에서 instance를 켜고 끌 수 있게 설정
먼저 code server를 올린 곳에서 gcloud를 설치해야 원격 켜기/끄기가 가능할 것이다. 아래 링크를 참고해 항상 열어둘 서버(상시 서버라고 하겠다)에서 gcloud를 설정한다.
https://cloud.google.com/sdk/docs/install-sdk
아래 명령어로 원격으로 인스턴스를 켜고 끌 수 있다.
# instance 목록
gcloud compute instances list
# instance 시작
gcloud compute instances start [INSTANCE_NAME]
# instance 중지
gcloud compute instances stop [INSTANCE_NAME]
# instance 삭제
gcloud compute instances delete [INSTANCE_NAME]
# 윈도우 VM 비밀번호 리셋
gcloud compute reset-windows-password [INSTANCE_NAME]
2. 상시 서버에 guacamole 설치 및 배포
상시 서버에 guacamole을 설치할지, 아니면 window server에 guacamole을 설치할지 고민을 많이 했는데 상시 서버에서 vm을 끄고 켜고 할 것이기 때문에 guacamole로 접속하기 편할 것 같았다. 또 window server에 guacamole은 docker로 설치해야 하는데, 이 경우 window가 켜지면 docker도 실행시켜야 했기 때문에 항시 서버에 guacamole을 설치하기로 했다.
상시 서버에는 이미 code-server가 nginx 위에서 8080 포트로 돌아가고 있다. (https://hyelie.tistory.com/entry/GCP-VS-Code-Server?category=947331) guacamole은 8080으로 돌아가고 있으며, (https://hyelie.tistory.com/entry/RDP-using-HTTP-connection-with-GCP-feat-guacamole?category=947331#--%--Reverse%--Proxy%--%EC%--%A-%EC%A-%--) 여기서 둘의 포트가 중복되기 때문에 code-server의 port를 8080에서 8081로 변경하고자 한다.
code-server 포트 변경
먼저 code-server 포트를 변경한다. 나의 경우에는 8081로 설정했다. 아래 명령어로 code-server port를 변경한다.
vim ~/.config/code-server/config.yaml
config.yaml
bind-addr: 127.0.0.1:8081
auth: password
password: ...
cert: ...
이어서 nginx 포트를 변경한다. 위에서 바꾼 포트로 적용하면 된다.
vim /etc/nginx/sites-enabled/default
default
location / {
proxy_pass http://localhost:8081/;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
}
아래 명령어를 입력하고, 원래 접속하던 곳으로 접속해서 잘 되는지 확인해 보자.
sudo service nginx restart
nginx에 code-server, guacamole 2개 배포
nginx에서 별다른 설정을 하지 않으면 default 파일에 있는 정보로 돌아간다. 그러나 이제는 2개의 포트를 열어두고 2개의 입력을 받을 것이기 때문에 nginx의 default config file을 지우고, 다른 파일로 대체할 것이다. 나의 경우는 code-server, 그리고 guacamole을 배포할 것이기 때문에 2개의 config file을 생성하겠다.
각각의 config 파일에 각각 사용할 domain과 포트를 미리 지정해 두어야 한다. (guacamole의 경우 8080으로, code-server의 경우 바로 위에서 8081로 변경했음.)
cd /etc/nginx/sites-available # enable에 있는 기존 default 복사
cp default codeserver.conf
cp default gaucamole.conf
rm /etc/nginx/sites-enabled/default # default 파일 삭제
vim codeserver.conf # guacamole.conf 수정
# codeserver.conf 수정
codeserver.conf
...
server_name [CODE 서버로 쓸 DOMAIN];
location / {
proxy_pass http://localhost:8081/; # 포트는 code server에서 사용할 것으로 지정
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
}
vim guacamole.conf # guacamole.conf 수정
guacamole.conf
...
server_name [GUACAMOLE 서버로 쓸 DOMAIN];
location / {
proxy_pass http://localhost:8080/; # 포트는 guacamole에서 사용할 것으로 지정
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
}
# 마지막으로 만든 파일을 활성화시킨다.
sudo ln -s /etc/nginx/sites-available/codeserver.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/guacamole.conf /etc/nginx/sites-enabled/
sudo service nginx restart
# 원한다면 SSL를 활성화시킨다.
sudo certbot --nginx
이렇게 지정하면, [code서버 domain]은 code server를 열어주고, [guacamole서버 domain]은 guacamole을 열어주는 쪽으로 포트포워딩 하게 된다.
guacamole로 window vm에 연결
이제 익숙한 그 파트다. guacamole로 로그인해 연결을 만들면 된다. 아래 사진과 같이 호스트 이름은 외부 IP, 포트는 3389, 사용자 이름은 window id, password는 window password를 넣으면 된다.
다만 window vm에 연결할 때는 주의점이 있다. 안전 모드는 NLA로, 서버 인증서 무시를 체크해야 한다.
끝!!
'DevOps > Environment Set Up' 카테고리의 다른 글
[Troubleshooting] Jenkins 잘 되던 build가 안 될 때 (0) | 2022.10.04 |
---|---|
[React Native Tutorial] React Native + Expo + Android Emulator on Windows (feat. GCP) (0) | 2022.09.28 |
[Node.js Tutorial] Install NVM & typescript-express-starter on Ubuntu (0) | 2022.09.20 |
[GCP Tutorial] RDP through HTTPs connection using guacamole (feat. GCP) (0) | 2022.09.04 |
[Java Tutorial] Ubuntu Java 개발환경 세팅 (0) | 2022.08.17 |