先月こんなブログを書きましたが、noVNCでブラウザからUbuntu Desktopにログインはできるようになったものの、複数ログインができないという事象を発見しまして、対応として別ポートでユーザごとに設定しようと試みたところうまくいかずといった状態でした。今回はnoVNCを使わずにApache Guacamoleコンテナを利用して管理や複数ユーザーログインする方法をブログしたいと思います。
Multiuser VNC Idea #121
https://github.com/novnc/noVNC/issues/121
Not a bad idea, but really outside the scope of this project. Also the maintainer has been pretty busy so expanding the project to server work is probably not going to happen. Have you looked at TigerVNC or some of the other existing servers?
noVNC will work with most of them so I’d try to talk with one of those projects if I were you.
noVNCはマルチユーザ対応しないの?というissueを発見しまして、メンテしにくいから厳しいですとのことでした。TigerVNCでユーザー指定と別ポートで接続できると思うよとのことで色々と調べてみました。とりあえずVNCの起動方法はそれでいくとして、ブラウザからのアクセスはどうするかと調査していたところ、クラメソさんがApache Guacamoleを利用してブラウザから各Ubuntu Desktopのユーザーログインができるとのことで早速試してみました。
Apache Guacamoleとは
https://hub.docker.com/r/guacamole/guacd
https://dev.classmethod.jp/articles/setup-apache-guacamole/
- クライアントレスのリモートデスクトップゲートウェイ
- VNC、RDP、SSHなどの標準プロトコルをサポート
- Dockerをサポート
■構成
前回のAWS EC2/Ubuntuの中にdocker-composeをインストールして、ターゲットグループで8080を80にリバースプロキシしているだけというシンプルな構成にしました。以前はApache Guacamoleを別サーバーで管理して、Ubuntu Desktopをコンテナでチャレンジしていましたが、コンテナだとGoogle Chromeが動作しなかったりなど色々と成約がありました。早速Apache GuacamoleをDockerで起動してみましょう。
Docker run Apache Guacamole
1 2 3 4 5 6 7 |
~/guacamole$ tree . ├── docker-compose.yml ├── pgdata │ └── guacamole └── pginit └── initdb.sql |
- docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
version: '2' services: guacd: image: guacamole/guacd:latest expose: - "4822" guacamole: image: guacamole/guacamole:latest ports: - "8080:8080" environment: GUACD_HOSTNAME: guacd POSTGRES_DATABASE: guacamole POSTGRES_HOSTNAME: postgres POSTGRES_PASSWORD: hogeeeeeee POSTGRES_USER: guacamole_ depends_on: - postgres - guacd postgres: image: postgres:12 restart: unless-stopped environment: PGDATA: /var/lib/postgresql/data/guacamole POSTGRES_DB: guacamole POSTGRES_PASSWORD: hogeeeeee POSTGRES_USER: guacamole_ volumes: - ./pginit:/docker-entrypoint-initdb.d - ./pgdata:/var/lib/postgresql/data |
- Setting docker-compose
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ mkdir ~/guacamole $ vim docker-compose.yml $ mkdir pgdata pginit $ chmod -R +x ./pginit $ docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --postgres > ./pginit/initdb.sql # docker-compose up -d # docker-compose ps Name Command State Ports -------------------------------------------------------------------------------------- gucamole_guacamole_1 /opt/guacamole/bin/start.sh Up 0.0.0.0:8080->8080/tcp gucamole_guacd_1 /bin/sh -c /usr/local/guac ... Up 4822/tcp gucamole_postgres_1 docker-entrypoint.sh postgres Up 5432/tcp |
始めはMySQLコンテナで試してみましたが、httpsで接続しようとしていたのでオフにしてもアプリがMySQLにまったく接続できず、途方に暮れてしまったのでPostgreSQLコンテナに変更したところうまくいきました。エラー出たらdocker logs -fでコンテナのログを見るといいですね。ちなみにpostgres:14では動かなかった….
1 2 |
02:21:30.886 [http-nio-8080-exec-17] ERROR o.a.g.rest.RESTExceptionMapper - Unexpected internal error: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure |
Setting TigerVNC
- make test01 user
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
$ sudo su - # adduser test01 # passwd test01 # visudo test01 ALL=(ALL) NOPASSWD: ALL #追加 - vncセットアップ # su - test01 $ vim .vnc/xstartup #!/bin/sh [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources vncconfig -iconic & dbus-launch --exit-with-session gnome-session & $ tigervncpasswd $ exit - vncserverの起動 # /usr/sbin/runuser -l test01 -c "/usr/bin/vncserver :1 -localhost no -geometry 1152x864 -depth 24" - 確認 $ ps aux |grep vnc test01 5593 0.0 0.4 1060200 73144 ? Sl 11:47 0:08 /usr/bin/Xtigervnc :1 -desktop test01:1 (dev01) -auth /home/test01/.Xauthority -geometry 1152x864 -depth 24 -rfbwait 30000 -rfbauth /home/test01/.vnc/passwd -rfbport 5901 -pn -SecurityTypes VncAuth,TLSVnc |
今回はtest01ユーザを作成して、TigerVNCで各ユーザーごとにportを割り振って起動するようにしました。psコマンドでプロセスを確認してみるとポート5901になっていることがわかります。test02ユーザを作る場合も同様です。vncserverを起動するときに :2
と指定するようにしましょう。以下起動シェルスクリプトもあると便利です。実際はsystemctl化したほうが楽ですがいったんこれで…Ansible化もしたほうが良き。(後で追記します)
1 2 3 4 5 6 7 8 |
# cat run-vnc.sh #!/bin/bash /usr/sbin/runuser -l test01 -c "/usr/bin/vncserver :1 -localhost no -geometry 1152x864 -depth 24" /usr/sbin/runuser -l test02 -c "/usr/bin/vncserver :2 -localhost no -geometry 1152x864 -depth 24" /usr/sbin/runuser -l test03 -c "/usr/bin/vncserver :3 -localhost no -geometry 1152x864 -depth 24" /usr/sbin/runuser -l test04 -c "/usr/bin/vncserver :4 -localhost no -geometry 1152x864 -depth 24" /usr/sbin/runuser -l test05 -c "/usr/bin/vncserver :5 -localhost no -geometry 1152x864 -depth 24" |
Setting Apache Guacamole
https://hoge.adachin.me/guacamole
user:guacadmin
pass:guacadmin
Guacamoleにブラウザでログインしたらまずは設定画面からtest01で接続できるように設定しましょう。自分は5つ分のユーザを作成しました。
上記のようにログインできれば完了です!日本語も打てるし問題なさそう。ちょい重いくらいかなというレスポンスでした。スケールアップかな。
まとめ
インスタンスタイプをt3a.xlargeにスケールアップしましたが、メモリー利用率はあまり上がることなく、CPU/ロードアベレージが食いそうですね。これから色々試していきたいと思います!にしても構築するの大変だった…
0件のコメント