拉取镜像
docker pull guacamole/guacamole
docker pull guacamole/guacd
docker pull mysql/mysql-server
初始化数据库
docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > initdb.sql
docker run --name mysql --restart=always -e MYSQL_ROOT_PASSWORD=123456 -d mysql/mysql-server:5.7
docker cp initdb.sql mysql:/usr/local
docker exec -it mysql bash
mysql -u root -p123456
CREATE DATABASE guacamole;
CREATE USER 'guacamole'@'%' IDENTIFIED BY 'guacamole';
GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole.* TO 'guacamole'@'%';
use guacamole;
source /usr/local/initdb.sql;
FLUSH PRIVILEGES;
quit;
exit;
前期准备工作
# 创建程序主目录
mkdir -p /extdatas/guacamole
# 创建插件目录
mkdir -p /extdatas/guacamole/extensions
# 创建录像目录
mkdir -p /extdatas/guacamole/recordings
# 下载快速链接插件
curl -O https://archive.apache.org/dist/guacamole/1.5.1/binary/guacamole-auth-quickconnect-1.5.1.tar.gz
# 下载录像存储插件
curl -O https://archive.apache.org/dist/guacamole/1.5.1/binary/guacamole-history-recording-storage-1.5.1.tar.gz
# 解压插件
tar -zxvf guacamole-auth-quickconnect-1.5.1.tar.gz
tar -zxvf guacamole-history-recording-storage-1.5.1.tar.gz
# 移动插件至插件目录
mv guacamole-auth-quickconnect-1.5.1/guacamole-auth-quickconnect-1.5.1.jar /extdatas/guacamole/extensions/
mv guacamole-history-recording-storage-1.5.1/guacamole-history-recording-storage-1.5.1.jar /extdatas/guacamole/extensions/
创建路径后,必须修改其权限和所有权,以使_以下两项均成立_:
- guacd 服务可以写入该目录。
- Servlet 容器(通常是 Tomcat)可以从目录中读取数据,也可以读取放置在该目录中的任何文件。
最简单的方法是确保:
- 该目录由运行 guacd 服务的用户和 运行 Tomcat 服务的_组拥有。_
- 该目录具有用户的读/写/执行权限(以便 guacd 可以在此处写入),以及组的读/执行权限(以便 Tomcat 可以在此处读取,并且这样放置在此的任何文件都自动拥有Tomcat 用户组)。
# 配置插件目录所有者 1001为guacamole容器内的guacamole用户UID和GID
chown -R 1001.1001 /extdatas/guacamole/extensions
# 配置插件目录权限
chmod -R 644 /extdatas/guacamole/extensions
# 配置录像目录所有者
# 1000为guacd容器内的guacd用户UID
# 1001为guacamole容器内的guacamole用户组GID
chown 1000.1001 /extdatas/guacamole/recordings
# 配置插件目录权限
chmod 2750 /extdatas/guacamole/recordings
启动Guacd
docker run --name some-guacd \
-p 4822:4822 --restart=always \
-v /extdatas/guacamole/recordings:/var/lib/guacamole/recordings \
-d guacamole/guacd
启动Guacamole
docker run --name some-guacamole -d \
-p 38080:8080 \
-e EXTENSION_PRIORITY=mysql -e MYSQL_HOSTNAME=mysql \
-e MYSQL_DATABASE='guacamole' \
-e MYSQL_USER='guacamole' -e MYSQL_PASSWORD='guacamole' \
-v /extdatas/guacamole/recordings:/var/lib/guacamole/recordings \
-v /extdatas/guacamole/extensions:/etc/guacamole/extensions \
-e GUACAMOLE_HOME=/etc/guacamole \
-e GUACD_HOSTNAME=some-guacd \
-e GUACD_PORT=4822 \
--user root \
guacamole/guacamole
嵌入Springboot中的Guacamole调用录像功能
在WebSocketTunnel的createTunnel方法中加入
String fileName = getNowTime()+ ".guac";//文件名
String outputFilePath = "/var/lib/guacamole/recordings";
//添加会话录制--录屏
configuration.setParameter("recording-path", outputFilePath);
configuration.setParameter("create-recording-path", "true");
configuration.setParameter("recording-name", fileName);
上述代码中的outputFilePath编写的位置为Docker镜像中存储的位置,在宿主机中的位置对应的镜像创建时映射的位置。
录像文件文件转化为MP4文件
启动镜像
docker pull litios/guacenc
docker run -v /extdatas/guacamole/recordings/:/recordings -d -it --name guacenc litios/guacenc
.guac文件转换为.m4v
docker exec -it guacenc guacenc -f /recordings/20230831124552.guac
将.m4v转换为.mp4
docker exec -it guacenc ffmpeg -i /recordings/20230831124552.guac.m4v /recordings/20230831124552.guac.mp4
https://hub.docker.com/r/litios/guacenc
使用上述方法得到的mp4文件清晰度可能不够
对单一文件进行编码
docker exec -it guacenc guacenc -s 1280x720 -r 20000000 -f /recordings/20230831124552.guac
guacenc -s 1280x720 -r 20000000 -f 文件名称