페이지 목차
- Code Server - 구축편
컨텐츠 목차
- 소개
- 구축
- code-server 구축 및 설정
- code-server 구축
- code-server 운영 옵션
- code-server 시스템 서비스 설정
- NginX 구축 및 설정
- NginX 구축
- NginX의 패스워드 인증 구성
- NginX와 Certbot을 이용한 https 통신 설정
- code-server 구축 및 설정
- 참고
소개
대 클라우드 시대가 시작되면서 IDE를 로컬에 설치할 필요 없이 서버에 IDE를 구축하고 언제 어디서든 브라우저로 코딩을 할 수 있는 시대가 왔다. 이러한 환경은 개발자가 자신이 개발한 코드를 Github에 Push하고 다른 개발자가 Pull하여 받은 다음 개발하고, 충돌 문제를 해결하는 등의 환경을 실시간 동시 개발을 진행하도록 도와주어 더욱 편리한 개발을 할 수 있게 해준다. 또한 로컬에 설치된 라이브러리나 쿠버네틱스와 같은 환경도 일원화할 수 있다는 장점이 있다. 대표적인 클라우드 IDE는 구글의 Cloud Code, Amazon의 Cloud9과 구름의 goormIDE가 있다.
여기서 소개하려는 Cloud IDE는 Visual Studio Code를 서버 버전으로 제작된 code-server다. Visual Studio Code가 익숙하다면 code-server를 사용하는 것이 편리하다. 구글의 Cloud Code에서 Visual Studio Code를 사용할 수 있으나, 클라우드 IDE는 테스트하는 여러 환경에 대한 비용이 발생한다. 따라서, Private으로 운영하기 위해 자체 서버에 구축을 진행했다. code-server는 오픈소스고 공개되어 있다. 아주 감사하게도 라이선스는 MIT 라이선스를 채택했다. 상용/비사용 여부를 떠나 어떠한 조건 없이 무료로 사용할 수 있는 라이선스다.
구축
code-server 구축 및 설정
code-server 구축
구축은 우분투 서버 18.04에서 진행되었다. 초기 운영체제 설치 시 운영체제 업데이트를 진행했고, 설치가 끝나면 openssh-server를 설치했다. 설치는 단순하게 다음 명령으로 진행할 수 있다. 포스팅하는 과정에 설치되는 버전은 3.5.0이다.
curl -fsSL https://code-server.dev/install.sh | sh
Ubuntu 18.04.5 LTS
Installing v3.5.0 deb package from GitHub releases.
+ mkdir -p ~/.cache/code-server
+ curl -#fL -o ~/.cache/code-server/code-server_3.5.0_amd64.deb.incomplete -C - https://github.com/cdr/code-server/releases/download/v3.5.0/code-server_3.5.0_amd64.deb
######################################################################## 100.0%######################################################################### 100.0%
+ mv ~/.cache/code-server/code-server_3.5.0_amd64.deb.incomplete ~/.cache/code-server/code-server_3.5.0_amd64.deb
+ sudo dpkg -i ~/.cache/code-server/code-server_3.5.0_amd64.deb
Selecting previously unselected package code-server.
(Reading database ... 67091 files and directories currently installed.)
Preparing to unpack .../code-server_3.5.0_amd64.deb ...
Unpacking code-server (3.5.0) ...
Setting up code-server (3.5.0) ...
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 명령으로 서버를 실행할 수 있다.
code-server
[2020-10-02T13:28:04.566Z] info Wrote default config file to ~/.config/code-server/config.yaml
[2020-10-02T13:28:04.568Z] info Using config file ~/.config/code-server/config.yaml
[2020-10-02T13:28:04.827Z] info Using user-data-dir ~/.local/share/code-server
[2020-10-02T13:28:04.831Z] info code-server 3.5.0 de41646fc402b968ca6d555fdf2da7de9554d28a
[2020-10-02T13:28:04.834Z] info HTTP server listening on http://127.0.0.1:8080
[2020-10-02T13:28:04.834Z] info - Using password from ~/.config/code-server/config.yaml
[2020-10-02T13:28:04.835Z] info - To disable use `--auth none`
[2020-10-02T13:28:04.835Z] info - Not serving HTTPS
code-server 운영 옵션
code-server는 환경 변수에 값을 설정하거나, 서버 동작시 옵션을 주거나, 설정 파일을 지정하여 다양한 옵션을 활용하여 서비스를 운영할 수 있다. code-server.dev/install.sh
로 설치한 경우 설치한 사용자 디렉터리에서 .config/code-server/config.yaml
파일이 기본 설정 파일이 된다. 이 설정 파일에는 네 가지 설정이 구성된다.
bind-addr
은 서버의 아이피와 포트 정보를 설정하며, auth
는 패스워드 설정 유무(password 또는 none을 지정)를 결정한다. 패스워드 유형은 단순한 형태로 config.yaml을 수정하여 OTP를 사용하거나 LDAP, AD에 Join할 수 없다. auth
를 password로 설정한 경우 password
키에 지정한 값으로 code-server에 로그인할 수 있다. 마지막으로 cert
는 https 통신에 사용할 인증서를 의미한다. true로 설정하여 사용한 경우 로컬 인증서를 자동 생성해서 사용하는데 안전하진 않다. 사설 인증서를 사용할 경우 cert
대신 cert-key
를 사용하여 인증서 경로를 지정할 수 있다.
vim .config/code-server/config.yaml
bind-addr: 127.0.0.1:8080
auth: password
password: 1bc76233f828b459af0a4a6f
cert: false
개인적으로 이런 방식의 서버 구성을 지원하는 것은 단편적인 사용에 용이할 수 있으나 확장성과 서버 운영 안전성에 좋진 않은 것 같다. 따라서 NginX를 구성하여 인증과 https 통신을 구성하는 것을 추천한다. 따라서 다음과 같이 설정을 변경한다.
vim .config/code-server/config.yaml
bind-addr: 127.0.0.1:8080
auth: none
code-server가 사용할 수 있는 옵션과 환경 변수 이름 등은 help 명령을 통해 확인할 수 있다.
code-server --help
[2020-10-02T15:44:33.999Z] info Using config file ~/.config/code-server/config.yaml
code-server 3.5.0 de41646fc402b968ca6d555fdf2da7de9554d28a
Usage: code-server [options] [path]
Options
--auth The type of authentication to use. [password, none]
--password The password for password authentication (can only be passed in via $PASSWORD or the config file).
--cert Path to certificate. Generated if no path is provided.
--cert-key Path to certificate key when using non-generated cert.
--disable-telemetry Disable telemetry.
-h --help Show this output.
--open Open in browser on startup. Does not work remotely.
--bind-addr Address to bind to in host:port. You can also use $PORT to override the port.
--config Path to yaml config file. Every flag maps directly to a key in the config file.
--socket Path to a socket (bind-addr will be ignored).
-v --version Display version information.
--user-data-dir Path to the user data directory.
--extensions-dir Path to the extensions directory.
--list-extensions List installed VS Code extensions.
--force Avoid prompts when installing VS Code extensions.
--install-extension Install or update a VS Code extension by id or vsix. The identifier of an extension is `${publisher}.${name}`. To install a specific version provide `@${version}`. For example: 'vscode.csharp@1.2.3'.
--enable-proposed-api Enable proposed API features for extensions. Can receive one or more extension IDs to enable individually.
--uninstall-extension Uninstall a VS Code extension by id.
--show-versions Show VS Code extension versions.
--proxy-domain Domain used for proxying ports.
-n --new-window Force to open a new window. (use with open-in)
-r --reuse-window Force to open a file or folder in an already opened window. (use with open-in)
-vvv --verbose Enable verbose logging.
code-server 시스템 서비스 설정
code-server가 백그라운드에서 동작, 시스템이 부팅 시 자동으로 실행 등 운영에 있어 보조적으로 도움이 되도록 운영하려면 시스템이 관리하도록 설정하는 것이 좋다.
systemctl --user enable --now code-server
Created symlink /home/hakawati/.config/systemd/user/default.target.wants/code-server.service → /usr/lib/systemd/user/code-server.service.
이렇게 설정하면 바로 code-server는 systemctl의 관리 대상에 포함된다. 잘 동작하는지는 다음과 같이 확인할 수 있다.
systemctl --user status code-server
● code-server.service - code-server
Loaded: loaded (/usr/lib/systemd/user/code-server.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-10-02 15:54:22 UTC; 4min 40s ago
Main PID: 7389 (node)
CGroup: /user.slice/user-1000.slice/user@1000.service/code-server.service
├─7389 /usr/lib/code-server/lib/node /usr/lib/code-server
├─7407 /usr/lib/code-server/lib/node /usr/lib/code-server
├─7420 /usr/lib/code-server/lib/node /usr/lib/code-server/lib/vscode/out/vs/server/fork
└─7434 /usr/lib/code-server/lib/node /usr/lib/code-server/lib/vscode/out/bootstrap-fork --type=extensionHost
Oct 02 15:54:22 codeserver systemd[1381]: Started code-server.
Oct 02 15:54:23 codeserver code-server[7389]: [2020-10-02T15:54:23.018Z] info Using config file ~/.config/code-server/config.yaml
Oct 02 15:54:23 codeserver code-server[7389]: [2020-10-02T15:54:23.155Z] info Using user-data-dir ~/.local/share/code-server
Oct 02 15:54:23 codeserver code-server[7389]: [2020-10-02T15:54:23.158Z] info code-server 3.5.0 de41646fc402b968ca6d555fdf2da7de9554d28a
Oct 02 15:54:23 codeserver code-server[7389]: [2020-10-02T15:54:23.160Z] info HTTP server listening on http://127.0.0.1:8080
Oct 02 15:54:23 codeserver code-server[7389]: [2020-10-02T15:54:23.160Z] info - No authentication
Oct 02 15:54:23 codeserver code-server[7389]: [2020-10-02T15:54:23.160Z] info - Not serving HTTPS
이제 시스템에 문제가 생겨 재부팅이 되더라도 자동으로 code-server가 운영될 것이다. 로그는 남겨지지 않도록 설정해도된다. NginX에서 시스템 로그로 생성되기 때문이다.
NginX 구축 및 설정
NginX 구축
NginX는 Apache처럼 웹 서버 애플리케이션이다. 여기서는 code.hakawati.co.kr(필자가 code-server에 할당할 도메인)로 접속하면 NginX가 수신한 후 code-server의 127.0.0.1:8080으로 리디렉션하여 IDE를 브라우저로 사용할 수 있다. 이렇게 사용하려면 Proxy Redirection 역할을 하도록 구성한다. 설치는 apt로 간단하게 진행한다.
sudo apt install nginx
Proxy Redirection을 위해 NginX 설정 파일을 생성할 필요가 있는데, https 통신을 설정하기 앞서 http 통신으로 접속하도록 설정 파일을 생성한다.
sudo vim /etc/nginx/sites-available/code-server.conf
upstream code-server {
server 127.0.0.1:8080;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name codeserver;
location / {
proxy_pass http://code-server;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Host $host;
proxy_set_header Accept-Encoding gzip;
}
}
Apache 디폴트 페이지 처럼 NginX도 디폴트 페이지가 있다. 디폴트 페이지를 비활성화하고, code-server는 활성화하는 작업을 진행한다.
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/code-server.conf /etc/nginx/sites-enabled/code-server.conf
설정 파일에 오타가 없는지, 동작하는데 문제가 없는지 테스트를 진행하고, 문제가 없다면 NginX 서비스를 재시작한다. code-server에 http로 접근되는 것을 확인할 수 있다.
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
sudo systemctl reload nginx.service
NginX의 패스워드 인증 구성
웹 서비스에 로그인 없이 바로 접근되는 것은 불안한 일이다. code-server는 터미널을 제공하기에 만약 공인 아이피였다면 공격자가 시스템에 침투한 것과 동일한 수준의 서비스를 제공한다. NginX의 간단한 사용자 인증 기능을 넣어 안전성을 조금이라도 높일 수 있다. NginX의 패스워드 설정은 htpasswd를 이용하여 구성할 수 있다. htpasswd를 사용하려면 apache2의 유틸리티를 설치하여 htpasswd
명령을 이용하거나 Openssl의 passwd
명령을 이용하여 구성할 수 있다.
sudo apt install apache2-utils
code-server의 패스워드 인증은 사용자 구분을 할 수 없는데, htpasswd는 사용자별 패스워드를 구성할 수 있다. 최초 사용자와 패스워드 파일을 생성할 때 -c
옵션을 사용하며, 추가 사용자와 패스워드 파일을 생성할 땐 -c
옵션을 빼고 사용한다.
sudo htpasswd -c /etc/nginx/.htpasswd hakawati
New password:
Re-type new password:
Adding password for user hakawati
NginX의 설정 파일인 code-server.conf
파일의 location /
에 auth_basic
와 auth_basic_user_file
를 설정한다.
sudo vim /etc/nginx/sites-available/code-server.conf
upstream code-server {
server 127.0.0.1:8080;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name codeserver;
location / {
proxy_pass http://code-server;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Host $host;
proxy_set_header Accept-Encoding gzip;
auth_basic "Authentication Page";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
sudo nginx -t 명령으로 설정 파일에 오류가 있는지 확인하고, 문제 없다면 sudo systemctl reload nginx.server
로 NginX를 재시작한다. 그리고 다시 code-server에 방문하면 다음과 같이 계정과 패스워드를 입력하는 창을 볼 수 있다.
NginX와 Certbot을 이용한 https 통신 설정
암호화 통신은 네트워크 통신에 있어서 중요한 보안 요소 중 하나다. NginX를 이용하고 있다면 Certbot으로 무료 인증서를 쉽게 설정할 수 있다. Certbot을 설치한다.
sudo apt install certbot python3-certbot-nginx
certbot은 http-01 방식과 dns-01 방식으로 https 인증서를 발행하기 앞서 정당한 인증서 발행인지 확인하는 과정을 진행한다. http-01 방식은 공인 아이피가 필요하고, dns-01 방식은 도메인이 필요하다. 목적에 따라 사용하는 방식이 다르기에 도메인은 고정으로 사용하고 서버 아이피를 자유롭게 변경하고 싶다면, 또는 서브 도메인이 어떤 것이 오든 인증서가 받아들이게 구성하려면 dns-01 방식을 사용해야한다. 도메인 소유주가 도메인의 txt 레코드에 인증 값을 설정하여 인증서를 발행할 수 있다.
Are you OK with your IP being logged? 질문에 무조건 y
를 해야 진행할 수 있다. 생성된 8TFRb_ecZvl8wxj8uY81Xo41rRdAGxDaJhEybeOqM3g
값은 _acme-challenge.code.hakawati.co.kr
키로 매칭되도록 도메인의 TXT 레코드에 등록한다. 그리고 Enter를 누르면 TXT 키의 값을 확인하고 검증이 통과되면 /etc/letsencrypt/live/code.hakawati.co.kr/
디렉터리에 공개키인 fullchain.pem
과 비밀키인 privkey.pem
이 생성된 것을 확인할 수 있다.
sudo certbot -d code.hakawati.co.kr --manual --preferred-challenges dns certonly
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for code.hakawati.co.kr
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.
Are you OK with your IP being logged?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.code.hakawati.co.kr with the following value:
8TFRb_ecZvl8wxj8uY81Xo41rRdAGxDaJhEybeOqM3g
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/code.hakawati.co.kr/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/code.hakawati.co.kr/privkey.pem
Your cert will expire on 2020-12-31. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
이제 NginX의 설정 파일인 code-server.conf 파일을 수정하여 https 통신을 하도록 구성한다. 이 과정은 certbot이 자동으로 구성하도록 도와주기 때문에 다음과 같이 진행한다.
첫번째 질문은 인증서를 다시 설치하겠는가? 아니면 인증서를 다시 받을 것인가? 를 질문하는 것이다. 다시 설치하는 1
을 선택한다. 두번째 질문은 http로 접근하면 https로 리디렉션하겠는가의 질문이다. 리디렉션하도록 2
을 선택한다.
sudo certbot --nginx -d code.hakawati.co.kr
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Cert not yet due for renewal
You have an existing certificate that has exactly the same domains or certificate name you requested and isn't close to expiry.
(ref: /etc/letsencrypt/renewal/code.hakawati.co.kr.conf)
What would you like to do?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Attempt to reinstall this existing certificate
2: Renew & replace the cert (limit ~5 per 7 days)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
Keeping the existing certificate
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/code-server.conf
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/code-server.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://code.hakawati.co.kr
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=code.hakawati.co.kr
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/code.hakawati.co.kr/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/code.hakawati.co.kr/privkey.pem
Your cert will expire on 2020-12-31. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
인증서가 잘 생성되었는지는 다음과 같이 확인할 수 있다.
sudo certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
Certificate Name: code.hakawati.co.kr
Domains: code.hakawati.co.kr
Expiry Date: 2020-12-31 14:23:20+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/code.hakawati.co.kr/fullchain.pem
Private Key Path: /etc/letsencrypt/live/code.hakawati.co.kr/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
설정 로그처럼 code-server.conf
파일을 자동으로 인식하여 https 통신을 하도록 내용이 구성된다. 기존에 우리가 구성했던 부분을 삭제하여 설정을 정리한다.
삭제된 설정
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name codeserver;
location / {
proxy_pass http://code-server;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Host $host;
proxy_set_header Accept-Encoding gzip;
auth_basic "Authentication Page";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
최종 설정
upstream code-server {
server 127.0.0.1:8080;
}
server {
server_name code.hakawati.co.kr; # managed by Certbot
location / {
proxy_pass http://code-server;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Host $host;
proxy_set_header Accept-Encoding gzip;
auth_basic "Authentication Page";
auth_basic_user_file /etc/nginx/.htpasswd;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/code.hakawati.co.kr/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/code.hakawati.co.kr/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = code.hakawati.co.kr) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 ;
listen [::]:80 ;
server_name code.hakawati.co.kr;
return 404; # managed by Certbot
}
이제 https로 접속하면 code-server가 잘 동작하는 것을 확인할 수 있다.
certbot을 통해 설정한 무료 인증서는 90일 갱신 주기를 가지며, certbot의 유료 인증서의 갱신 주기는 1년이다. 공인 아이피로 인증하는 http-01이 아닌 dns-01 방식으로 구성했기에 자동 갱신이 되지 않는다. 수동으로 갱신하려면 다음 명령 후 2번을 선택하면 수동 갱신(특히 이 명령으로 갱신할 경우 강제 갱신된다.)을 할 수 있다.
sudo certbot -d code.hakawati.co.kr --manual --preferred-challenges dns certonly
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Cert not yet due for renewal
You have an existing certificate that has exactly the same domains or certificate name you requested and isn't close to expiry.
(ref: /etc/letsencrypt/renewal/code.hakawati.co.kr.conf)
What would you like to do?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Keep the existing certificate for now
2: Renew & replace the cert (limit ~5 per 7 days)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Renewing an existing certificate
Performing the following challenges:
dns-01 challenge for code.hakawati.co.kr
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.
Are you OK with your IP being logged?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.code.hakawati.co.kr with the following value:
8TFRb_ecZvl8wxj8uY81Xo41rRdAGxDaJhEybeOqM3g
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/code.hakawati.co.kr/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/code.hakawati.co.kr/privkey.pem
Your cert will expire on 2020-12-31. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
인터넷 검색을 열심히 해본 결과 certbot의 숨겨진 옵션과 리눅스의 명령을 조합해 자동화 할 수 있다. 아래 명령을 쉘 스크립트 파일로 만들고 crontab을 이용하여 3달마다 갱신하도록 설정하면 된다. 당연히 crontab에 의해 실행되는 명령의 주체는 root 여야 한다. 참고로 crontab은 sudo crontab -e
를 이용하면 기본으로 root 권한으로 동작하게 설정되며, /etc/crontab
파일을 수정할 경우 root 사용자로 실행한다는 것을 명시해야 한다.
echo "\n" | sudo certbot --text --agree-tos -d code.hakawati.co.kr --manual --preferred-challenges dns --expand --renew-by-default --manual-public-ip-logging-ok certonly --post-hook "systemctl start nginx.service"
인증서 기간까지 고려해 스크립트를 만든다면 다음과 같다.
#!⁄bin⁄bash
VALID=($(certbot certificates | grep VALID))
VALID_DATE=$(expr ${VALID[5]})
if [ $VALID_DATE -lt 30 ]; then
echo "\n" | certbot --text --agree-tos -d code.hakawati.co.kr --manual --preferred-challenges dns --expand --renew-by-default --manual-public-ip-logging-ok certonly --post-hook "systemctl start nginx.service"
fi
참고
'Information Technology > Programming' 카테고리의 다른 글
vscode server cli 구축하기 (0) | 2023.07.02 |
---|---|
자바스크립트 동등 연산자, 일치 연산자 그리고 데이터 성질의 이해 (3) | 2016.01.19 |
보안뉴스 기사글 형태소 분석 및 빈도수 측정 (0) | 2016.01.08 |
MIT 6.00 컴퓨터 공학과 프로그래밍(Python) 오픈 코스 (9) | 2015.12.11 |
자바스크립트 언어적 특징과 난독화 (0) | 2015.07.30 |