无奈开始使用Guacamole

鉴于新工作给的电脑实在太次,根本没法用来工作,只好祭出大杀器Guacamole来救场。

Intro

先说这玩意儿是啥. Guacamole是一个Apache基金会维护的一个无客户端的远程管理工具. 也不能说是无客户端, 无专用客户端. 类似向日葵, TeamViewer之类的工具, 都需要安装额外的客户端才能正常通讯. 而Guacamole呢, 有个现代的浏览器就够用了.

Guacamole通过各种插件来支持不同的协议. 最基础的就是SSH, RDP, VNC. 本来呢, Windows自带的远程桌面已经足够好用了. 正常来说我不太需要一个额外的工具, 如果只是从一台Windows连接到另一台Windows的时候. 可现实是公司的破本子连远程桌面都不给用. 甚至我装了个Visual Studio Code都被IT给删了.

Deployment

虽然可以禁一些网站, 但是工作要用的腾讯云总还是通的. 于是浏览器就是我最终的选择了. 那么怎么在浏览器里干活呢. 如果只是开发, JetBrains 曾经出过一个叫做Projector的工具, 可以让用户在浏览器里使用他家的IDE. 不过后来不再单独发布了, 整合进了他家远程开发解决方案. 然而他家那个方案, 又是需要安装客户端的. 于是虽然版本稍老, 但是依然下载的到当时官方发布的IntelliJ idea的使用了Projector的Docker镜像. 这个方案也尝试过, 能用, 不过不太好用...太经常会遇到页面卡顿的问题. 就要时不时的刷新页面...还是不太爽.

总之找到这么个方案之后, 就开始着手干了.

Guacamole官方的架构图

根据Guacamole的架构图, 只需要部署server的部分. 然后因为开发机只有一台, 我又不想把环境搞得很乱. 那么就上Docker吧. Guacamole的官方文档上也提供了Docker部署的方式. 概括一下就是, 他的Server实际上是两部分. 用于管理连接, 用户的Guacamole, 和用于实际去建立连接的Guacd.

先说Guacd. 官方也有提供build好的容器镜像. 直接拉下来用也行. 但是会有个问题, 就是官方的镜像没有装中文字体. 于是经由Guacd的SSH连接, 会有中文乱码的问题. 好解决, 魔改一下镜像, 装个字体就完了.

Dockerfile_guacd:

FROM guacamole/guacd

RUN apk add wqy-zenhei --update-cache --repository https://nl.alpinelinux.org/alpine/edge/testing

build:

sudo docker build -t guacd-chinese -f Dockerfile_guacd

除了guacd还需要一个用来做用户认证的组件. Guacamole支持的认证方式非常丰富, 不过鉴于我的开发机上已经有MySQL了, 我就选了MySQL这个方式. 选择MySQL的话, 需要先初始化一些库/表.

sudo docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > initdb.sql

上面是官方文档提供的获取初始化语句的方式. 接下来, 创建个库和用户给Guacamole.

CREATE DATABASE guacamole;
CREATE USER 'guacamole'@'%' IDENTIFIED BY 'guacamole@Password';
GRANT ALL PRIVILEGES ON guacamole.* TO 'guacamole'@'%';
FLUSH PRIVILEGES;

之后就把前面Guacamole生成的表初始化语句导入刚刚创建的库就好了.

mysql -u guacamole -p guacamole < ./initdb.sql

好了, 到这儿就配齐了. 启动Guacd和Guacamole两个容器就能用了.

sudo docker run --name guacd -d guacd-chinese
sudo docker run --name guacamole --link mysql:mysql --link guacd:guacd -p 8080:8080 -e MYSQL_DATABASE=guacamole -e MYSQL_USER=guacamole -e MYSQL_PASSWORD=guacamole@Password -d guacamole/guacamole
Configuration

Guacamole启动之后就可以去浏览器登陆了. 初始用户密码都是guacadmin.

差不多就是长这样

之后配置连接就很简单了. 遇到配置连接问题的, 去看官方文档. 该有的都有.


Advanced

基础的配置和使用上面那些就够了. 我这个情况需要点儿别的. 比如frpnginx.

给不带nginx的版本开了个Github仓库, 调试好的. 包含四个组件. frps, MySQL, Guacd, Guacamole. 除了对应改几个端口跟token, 其他都可以不用动. 直接运行 up.sh 就可以了.