Visual Studio codeのserver版がpreviewながら公式からリリースされたので、SSL/TLS+Basic認証/クライアント認証を施し、systemdのサービスとして起動するように手持ちのVPSサーバ上に設定してみた。
これでブラウザがあれば、どこからでもサーバのファイルを編集できるようになった。
設定方法 (Ubuntu 20.04使用)
フロントエンドにNginxをReverse Proxyとして設定し、ここでSSLなどのセキュリティをかける。VS code server自体はバックエンドにする。Websocketが通らないため、Apacheをフロントエンドにはできないので注意。
Visual Studio code server 設定
以下のようにインストールした後、サービスとして登録するため、systemdファイルを作成する。
# インストール sudo wget -O- https://aka.ms/install-vscode-server/setup.sh | sh # systemd unitファイル作成 途中のUser/Groupは書き換えること。 sudo vi /lib/systemd/system/vscodeserver.service --- [Unit] Description=vs code server After=network-online.target [Service] ExecStart=/usr/local/bin/code-server serve-local --accept-server-license-terms --disable-telemetry Restart=always User=yourUserName Group=yourGroupName UMask=002 [Install] WantedBy=multi-user.target ---
systemdに登録し実行する。(上のunitdファイルに記述したユーザ/グループで実行される。)
# 登録 sudo systemctl enable vscodeserver # 開始 sudo systemctl start vscodeserver
初回起動時のみ起動に時間がかかるため、1,2分待ち、起動した後に表示される接続先のURLを取得しておく。
# statusの中のWeb UI available atにあるURLを取得する。 sudo systemctl status vscodeserver --- Jul 13 07:20:14 devserver001 code-server[367393]: Server bound to 127.0.0.1:8000 (IPv4) Jul 13 07:20:14 devserver001 code-server[367393]: Extension host agent listening on 8000 Jul 13 07:20:14 devserver001 code-server[367393]: Web UI available at http://localhost:8000/?tkn=6de5345a-b644-48cd-a7f9-3433bcc031e3 Jul 13 07:20:14 devserver001 code-server[367393]: [07:20:14] Extension host agent started. Jul 13 07:20:14 devserver001 code-server[367393]: [07:20:14] Deleted from disk ms-ceintl.vscode-language-pack-ja /home/yourname/.vscode-server/extensions/ms-ceintl.vscode-language-pack-ja-1.67.3 Jul 13 07:20:14 devserver001 code-server[367393]: [07:20:14] Deleted from disk xdebug.php-debug /home/yourname/.vscode-server/extensions/xdebug.php-debug-1.26.1 ---
ここでは、http://localhost:8000/?tkn=6de5345a-b644-48cd-a7f9-3433bcc031e3であるのでこれを控えておく。
上の「sudo systemctl status vscodeserver」で「Web UI available at」の行が見つからない場合は、「journalctl –no-pager | grep -e ‘code-server’」で起動時間あたりの情報を探すこと。
Nginx設定
Nginxにはリバースプロキシ、SSL、Basic認証(もしくはクライアント認証)を設定する。SSLの各種ファイルはLet’s Encryptなどで取得済みとする。
Nginxをインストールしていない場合はインストール
sudo apt install nginx
基本の設定ファイルを設定する。このあたりは各自の環境に合わせて設定してほしい。私のサーバは私一人しか使わないため最小限の設定にしている。デフォルトでも問題ないはず。
sudo vi /etc/nginx/nginx.conf --- user yourUser yourGroup; worker_processes 1; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 50; multi_accept on; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 3; types_hash_max_size 2048; server_tokens off; include /etc/nginx/mime.types; default_type application/octet-stream; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; access_log off; error_log /var/log/nginx/error.log; include /etc/nginx/sites-enabled/*; } ---
Basic認証の下準備。
# basic認証 sudo apt install apache2-utils sudo htpasswd -c /etc/nginx/.htpasswd testuser # ここでBasic認証のパスワードを設定する。testuser/設定passwordがbasic認証のログインアカウントになる。
以下が肝心の設定ファイル。Basic認証でやる場合は以下。server_name、ssl_certificateとssl_certificate_keyは変更のこと。
# virtual host sudo vi /etc/nginx/sites-available/vscodeFront --- server { listen 443 ssl http2; server_name yourServerName.com; # SSL 環境に応じて変更のこと ssl_certificate /etc/letsencrypt/live/yourServerName.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourServerName.com/privkey.pem; location / { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass http://127.0.0.1:8000/; proxy_set_header Host $http_host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_redirect off; } } ---
クライアント認証の場合だと以下。クライアント認証の作り方は割愛。
sudo vi /etc/nginx/sites-available/vscodeFront --- server { listen 443 ssl http2; server_name yourServerName.com; # server側 ssl_certificate /etc/letsencrypt/live/yourServerName.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourServerName.com/privkey.pem; # client認証 ssl_verify_client on; ssl_client_certificate /opt/myCA/cacert.pem; ssl_crl /opt/myCA/crl.pem; location / { proxy_pass http://127.0.0.1:8000/; proxy_set_header Host $http_host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_redirect off; } } ---
設定が終わったら、virtual hostの設定を有効にして、Nginx再起動。
sudo ln -s /etc/nginx/sites-available/vscodeFront /etc/nginx/sites-enabled/ sudo systemctl restart nginx
ここで、VS code serverの設定時に控えておいた「http://localhost:8000/?tkn=6de5345a-b644-48cd-a7f9-3433bcc031e3」の?から下の部分(赤色部分)を切り取り、https://yourServerName.com/?tkn=6de5345a-b644-48cd-a7f9-3433bcc031e3にアクセスするとVS code serverが表示される。
Port 8000は外部からアクセスできないようにしておくこと。
感想
現時点では、vscode serverの非公式WEB版であるCoderのcode-serverのほうが若干動作が軽く、日本語化もできるので使いやすい。ただ、こちらのvscode serverは公式なので、いずれ非公式のCoder版は廃れる気がする。公式版の不満点としては、使えない拡張機能があることと、日本語化できないことであるが、まだpreview版なのでいずれ対応してくれるのでは、という期待がある。
とりあえず、Coder版から乗り換えた。