お金をかけずにサーバーの勉強をしよう

code-serverインストール

2024年2月18日

メニューへ戻る

VS Codeを Webベースで使える code-serverをインストールして味わってみます。

こんにちは。

いつのことだったか、マイクロソフトの VS Codeを Webベースで使えるサービスがリリースされたニュースを聞きましたけど、自分の PCには VS Codeは入っていて、特にニーズもなくスルーしていた気がします。

先日この機能を提供するサーバープログラムが一般に公開されていると知りましたので、とりあえず環境を作ってみようと思いました。

GitHubなんですけど、こちらになります。
coder / code-server

「Highlights」ってところに code-server の存在意義というか利用価値が書いてありましたので、拙いながら翻訳を。

言われてみりゃそうかと思います。
私はスタバとかでコードを書いたりはしませんが…。


1.環境

サーバーには Ubuntu Server 22.04.4を使います。
2024年2月18日時点で code-serverの最新版は 4.21.1です。

開発用クライアントは、Lubuntu 22.04.4 の Firefox 122.0.1です。

2.インストール

ここにインストールの方法も書いてあります。
Getting started

1行でダウンロードとインストールを一度にやっています。

subro@UbuntuServer2204-1:~$ sudo curl -fsSL https://code-server.dev/install.sh | sh
Ubuntu 22.04.4 LTS
Installing v4.21.1 of the amd64 deb package from GitHub.

+ mkdir -p ~/.cache/code-server
+ curl -#fL -o ~/.cache/code-server/code-server_4.21.1_amd64.deb.incomplete -C - https://github.com/coder/code-server/releases/download/v4.21.1/code-server_4.21.1_amd64.deb
######################################################################## 100.0%
+ mv ~/.cache/code-server/code-server_4.21.1_amd64.deb.incomplete ~/.cache/code-server/code-server_4.21.1_amd64.deb
+ sudo dpkg -i ~/.cache/code-server/code-server_4.21.1_amd64.deb
[sudo] subro のパスワード: [UbuntuServer2204-1]サーバーの[subro]ユーザーのパスワード
以前に未選択のパッケージ code-server を選択しています。
(データベースを読み込んでいます ... 現在 174327 個のファイルとディレクトリがインストールされています。)
.../code-server_4.21.1_amd64.deb を展開する準備をしています ...
code-server (4.21.1) を展開しています...
code-server (4.21.1) を設定しています ...

deb package has been installed.

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

Deploy code-server for your team with Coder: https://github.com/coder/coder

自動で OSが何かも検出してインストールしてくれたようです。

インストール中のメッセージで、「起動時に systemdで開始する場合は有効化しろ」と言っていますので、ピンクの文字の通りにやっておきます。

subro@UbuntuServer2204-1:~$ sudo systemctl enable --now code-server@$USER
Created symlink /etc/systemd/system/default.target.wants/code-server@subro.service → /lib/systemd/system/code-server@.service.

この自動起動指定の仕方と、[/lib/systemd/system/code-server@.service]ファイルの内容は、個々のユーザーで起動する仕組みです。
実際にプロセスは [root]ユーザーではなく [subro]ユーザーが実行していますね。

subro@UbuntuServer2204-1:~$ ps -ef | grep code-server
subro       1725       1  0 11:12 ?        00:00:00 /usr/lib/code-server/lib/node /usr/lib/code-server
subro       1743    1725  0 11:12 ?        00:00:00 /usr/lib/code-server/lib/node /usr/lib/code-server/out/node/entry
subro       1758    1592  0 11:15 pts/0    00:00:00 grep --color=auto code-server

何かをサーバーで集中管理するのが目的ではなく、あくまで「PCでやる作業をサーバーで提供してあげますよ」という設計思想なんでしょう。

どのポートを使っているか確認してみます。

subro@UbuntuServer2204-1:~$ systemctl status code-server@subro
● code-server@subro.service - code-server
     Loaded: loaded (/lib/systemd/system/code-server@.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2024-02-18 11:12:40 JST; 4min 26s ago
   Main PID: 1725 (node)
      Tasks: 22 (limit: 9347)
     Memory: 54.2M
        CPU: 1.360s
     CGroup: /system.slice/system-code\x2dserver.slice/code-server@subro.service
             ├─1725 /usr/lib/code-server/lib/node /usr/lib/code-server
             └─1743 /usr/lib/code-server/lib/node /usr/lib/code-server/out/node/entry

 2月 18 11:12:40 UbuntuServer2204-1 systemd[1]: Started code-server.
 2月 18 11:12:41 UbuntuServer2204-1 code-server[1725]: [2024-02-18T02:12:41.193Z] info  Wrote default config file to /home/subro/.config/code-server/config.yaml
 2月 18 11:12:41 UbuntuServer2204-1 code-server[1725]: [2024-02-18T02:12:41.546Z] info  code-server 4.21.1 45164bf749515cf826e3ccdaa3d45c714dc55e63
 2月 18 11:12:41 UbuntuServer2204-1 code-server[1725]: [2024-02-18T02:12:41.547Z] info  Using user-data-dir /home/subro/.local/share/code-server
 2月 18 11:12:41 UbuntuServer2204-1 code-server[1725]: [2024-02-18T02:12:41.563Z] info  Using config file /home/subro/.config/code-server/config.yaml
 2月 18 11:12:41 UbuntuServer2204-1 code-server[1725]: [2024-02-18T02:12:41.563Z] info  HTTP server listening on http://127.0.0.1:8080/
 2月 18 11:12:41 UbuntuServer2204-1 code-server[1725]: [2024-02-18T02:12:41.563Z] info    - Authentication is enabled
 2月 18 11:12:41 UbuntuServer2204-1 code-server[1725]: [2024-02-18T02:12:41.563Z] info      - Using password from /home/subro/.config/code-server/config.yaml
 2月 18 11:12:41 UbuntuServer2204-1 code-server[1725]: [2024-02-18T02:12:41.563Z] info    - Not serving HTTPS
 2月 18 11:12:41 UbuntuServer2204-1 code-server[1725]: [2024-02-18T02:12:41.563Z] info  Session server listening on /home/subro/.local/share/code-server/code-server-ipc.sock

[8080/tcp] で動いちゃいるんですが、バインドされているネットワークインターフェイスは [127.0.0.1] で、これでは Webブラウザがインストールされていない Ubuntu Serverでは使えませぬ。

SSHトンネルを使っても良いのですが、そもそも [0.0.0.0](IP ALL) にできないんでしょうか。

設定ファイルをこんな感じなんで、ここを直せば行けそう。

subro@UbuntuServer2204-1:~$ cat ~/.config/code-server/config.yaml
bind-addr: 127.0.0.1:8080
auth: password
password: 629ce4ee4201b8c4a04c1a66
cert: false

[127.0.0.1] を [0.0.0.0] に変更しました。

subro@UbuntuServer2204-1:~$ cat ~/.config/code-server/config.yaml
bind-addr: 0.0.0.0:8080
auth: password
password: 629ce4ee4201b8c4a04c1a66  ← 覚えておく
cert: false

ここにあったパスワードは後で使いますので覚えておきましょう。
同じサーバーで他のユーザーが code-serverを使う場合は、ポートも他に誰も使ってないものに変えておく必要がありますね。

code-serverを再起動します。

subro@UbuntuServer2204-1:~$ systemctl restart code-server@subro
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
'code-server@subro.service'を再起動するには認証が必要です。
Authenticating as: Subro (subro)
Password: [UbuntuServer2204-1]サーバーの[subro]ユーザーのパスワード
==== AUTHENTICATION COMPLETE ===

状態を確認してみましょう。

subro@UbuntuServer2204-1:~$ systemctl status code-server@subro
● code-server@subro.service - code-server
     Loaded: loaded (/lib/systemd/system/code-server@.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2024-02-18 11:28:20 JST; 1min 14s ago
   Main PID: 1792 (node)
      Tasks: 22 (limit: 9347)
     Memory: 54.5M
        CPU: 1.270s
     CGroup: /system.slice/system-code\x2dserver.slice/code-server@subro.service
             ├─1792 /usr/lib/code-server/lib/node /usr/lib/code-server
             └─1811 /usr/lib/code-server/lib/node /usr/lib/code-server/out/node/entry

 2月 18 11:28:20 UbuntuServer2204-1 systemd[1]: Starting code-server...
 2月 18 11:28:20 UbuntuServer2204-1 systemd[1]: Started code-server.
 2月 18 11:28:21 UbuntuServer2204-1 code-server[1792]: [2024-02-18T02:28:21.255Z] info  code-server 4.21.1 45164bf749515cf826e3ccdaa3d45c714dc55e63
 2月 18 11:28:21 UbuntuServer2204-1 code-server[1792]: [2024-02-18T02:28:21.259Z] info  Using user-data-dir /home/subro/.local/share/code-server
 2月 18 11:28:21 UbuntuServer2204-1 code-server[1792]: [2024-02-18T02:28:21.273Z] info  Using config file /home/subro/.config/code-server/config.yaml
 2月 18 11:28:21 UbuntuServer2204-1 code-server[1792]: [2024-02-18T02:28:21.273Z] info  HTTP server listening on http://0.0.0.0:8080/
 2月 18 11:28:21 UbuntuServer2204-1 code-server[1792]: [2024-02-18T02:28:21.274Z] info    - Authentication is enabled
 2月 18 11:28:21 UbuntuServer2204-1 code-server[1792]: [2024-02-18T02:28:21.274Z] info      - Using password from /home/subro/.config/code-server/config.yaml
 2月 18 11:28:21 UbuntuServer2204-1 code-server[1792]: [2024-02-18T02:28:21.274Z] info    - Not serving HTTPS
 2月 18 11:28:21 UbuntuServer2204-1 code-server[1792]: [2024-02-18T02:28:21.275Z] info  Session server listening on /home/subro/.local/share/code-server/code-server-ipc.sock

良さげです。


3.クライアントからアクセス

では Webブラウザでアクセスしてみます。

私の環境の場合 [http://UbuntuServer2204-1:8080] です。

ちゃんとパスワード認証はあるんですよね。
だけどマルチユーザーじゃなく、立ち上げたユーザーオンリーなんでしょう。

2で覚えていたパスワードを入れて、SUBMITを押します。
code-server画面 1

こんな画面で、VS Codeまんまです。
code-server画面 2

日本語化しましょう。

左にある田の字から口が離れたようなアイコンをクリックすると、右の入力域が出るので「japanese」と入れてやるとこのプラグインが候補に出てきます。
installを押すとインストールされます。
code-server画面 3

一度リスタートを促されますので、Change Language and Restartを押します。
code-server画面 4

このように日本語化されました。
code-server画面 5

実際に使ってみると「うん、まぁ VS Codeだよね」って感じです。
code-server画面 6

環境構築はこれで終わりです。
特に難しいことがあるわけでもなく、簡単に動かし始めることができました。


==========
IDEがインストールされていない環境にいる人がこれを使うってのは分からないでもないですが、そんな仕事をしている人は IDEを入れてますよね。

私のように家でしかコードを書かないなら特に必要を感じませんし、VS Codeにリモート機能もあります。

でも世の中には最初に書いた「Highlights」のような要件が有る人がいるんですね。

「どんなデバイスからでも」ってことは、お外からスマホやタブレットでも開発できるってことなんですけど、私はそこまで余裕の無い開発しなくない…

Solaris・HP-UX・Aix・FreeBSDなどの UNIX周りを想定しているのかなぁ。


GitHubには、チームで code-serverをまとめて管理するのなら coder / coder を見てみろと書いてありました。

いずれ coder / coder の方もあたってみようと思いますが、それでもクライアントPCに VS Codeを入れているのに勝るものでもなさげ。

SaaSとして提供されているサーバー製品を公開してくれているというだけのことで、別にオンプレで使えって言ってる訳じゃないのかな?

とまぁ、使いどころの良く分からないものでした。
私がプログラマではないからでしょうか。