基于docker+reveal.js搭建一个属于自己的在线ppt网站
前言
最近热衷于Docker,由于这段时间使用Docker来折腾自己的服务器,越来越感觉这是一种极其被应该推广的技术,因此想在公司内部也做一次技术分享。当然,如果只是做的PPT,我就不写这文章了。既然把Docker说这么好,那就想办法用Docker来搭建一个在线的PPT展示网站吧。
寻找合适的工具
在网上搜了一下,发现reveal.js这个工具的展示效果非常好,它基于HTML即可完成在线PPT的制作,而且在移动设备上也有非常好的兼容性,同时也支持直接用markdown语法来写,毫无疑问,这个就是我要找的工具,在Docker hub上搜索了一下,果然已经有现成的镜像,对比了一下,最后决定选用nbrown/revealjs。当然如果你完全不懂HTML,官方也提供了一个在线版的可视化编辑器:https://slides.com/
开始搭建
还记得之前写的这篇:Centos7.4下用Docker-Compose部署WordPress(续)-服务器端用Nginx作为反向代理并添加SSL证书(阿里云免费DV证书) 的文章吗?
基于之前的环境,我们已经有了:
- 安装好的docker和docker compose环境
- Docker network nginx-proxy
- ssl证书存放的目录:wp_certs
- 从阿里云申请免费DV的方法
假设上面这些都已经完成,搭建一个基于HTTPS的在线PPT演示网站就是分分钟的事?确实,我们仅需要再写一个docker-compose.yml配置文件即可:
version: '3'
services:
revealjs:
#image: nbrown/revealjs:latest
image: nbrown/revealjs:3.5.0-onbuild
container_name: myppt
restart: always
expose:
- 8000 # 这个是镜像默认的端口
volumes:
- $PWD/content/index.html:/reveal.js/index.html # 首页
- $PWD/content/tutorial/docker/index.html:/reveal.js/tutorial/docker/index.html # Docker教程作为一个独立的页面
environment:
VIRTUAL_HOST: ppt.fujiabin.com # 选用这个域名,需要在域名解析中绑定一下A记录
networks:
default:
external:
name: nginx-proxy # 这个很眼熟,就是以前nginx反向代理的那个docker网络
执行:
docker-compose up -d
网站就建设完成了。
开始编写PPT
从revealjs的github源码上下载源码,在demo.html中,包含了所有的使用方法,我根据自己的使用过程简单整理下它的基本功能。
键盘事件
esc: 可以切换到PPT页面的预览模式b: 黑屏模式,可以在需要暂停演示但又不想听众被PPT内容吸引的时候进入这个模式s: Speader View模式,可以在扩展屏幕上展示提示内容、当前时间、已经展示的时间、下一屏内容等信息方向键: 上下左右切换PPT(对,你没看错,revealjs也可以写上下切换的PPT)
样式及动画效果
revealjs支持好多种PPT的过场动画效果、主题样式,也支持自定义PPT背景(支持图片、视频和gif)。
你可以在demo.html中找到所有你喜欢的这些内容并应用在自己的PPT中。
语法简介
所有的PPT页,需要包含到<div class="slides"></div>这个标签中,每一页是一个<section></section>语块。
用markdown语法解析内容
语块上加上标签data-markdown即可:<section data-markdown></section>。
当前页上可上下切换的内容
在第一级<section></section>中嵌套加入<section></section>,每个语块即为当前页面可上下切换的内容块。
当前页分段显示
在<section id="fragments"></section>标签内部,每个class="fragment"的元素都将作为分段内容来进行展示。
高亮代码块

<pre><code class="hljs" data-trim contenteditable>
xxxx
</code></pre>
漂亮的表格

<table>
<thead>
<tr>
<th>Item</th>
<th>Value</th>
<th>Quantity</th>
</tr>
</thead>
<tbody>
<tr>
<td>Apples</td>
<td>$1</td>
<td>7</td>
</tr>
<tr>
<td>Lemonade</td>
<td>$2</td>
<td>18</td>
</tr>
<tr>
<td>Bread</td>
<td>$3</td>
<td>2</td>
</tr>
</tbody>
</table>
内容引用

<blockquote cite="xxxxx">
</blockquote>
非常实用的Speaker View功能
在<aside class="notes">标签中的内容,页面上不可见,但在Speaker View模式下写一些演讲提示内容:
<aside class="notes">
Oh hey, these are some notes. They'll be hidden in your presentation, but you can see them if you open the speaker notes window (hit 's' on your keyboard).
</aside>

其他特性
- 局部内容放大
- 内部页面跳转
- 导出为PDF
- 可扩展javascript api
- 自动播放
- 自定义键盘事件
- ...等
最终,在本地完成了HTML文件后,将文件上传或拷贝到服务器上指定的位置,我的成品如下:Docker入门,虽然也没用到所有特性,但是常用的那些基本都有涉及。
本文在博客园和我的个人博客www.fujiabin.com上同步发布。转载请注明来源。
参考文档
基于docker+reveal.js搭建一个属于自己的在线ppt网站的更多相关文章
- 使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课
序:这段时间忙于奔波,好久没有更新了,今天更新一下,继续上节课的完善讲解,算是对前段时间的一个总结吧.披星戴月的时光也算有点应用效果了. 对于webgl(three.js)性能这一块我在上节课< ...
- 如何用webgl(three.js)搭建一个3D库房,3D密集架,3D档案室(升级版)
很长一段时间没有写3D库房,3D密集架相关的效果文章了,刚好最近有相关项目落地,索性总结一下 与之前我写的3D库房密集架文章<如何用webgl(three.js)搭建一个3D库房,3D密集架,3 ...
- 如何用webgl(three.js)搭建一个3D库房,3D仓库,3D码头,3D集装箱可视化孪生系统——第十五课
序 又是快两个月没写随笔了,长时间不总结项目,不锻炼文笔,一开篇,多少都会有些生疏,不知道如何开篇,如何写下去.有点江郎才尽,黔驴技穷的感觉. 写随笔,通常三步走,第一步,搭建框架,先把你要写的内容框 ...
- 如何用webgl(three.js)搭建一个3D库房,3D仓库3D码头,3D集装箱,车辆定位,叉车定位可视化孪生系统——第十五课
序 又是快两个月没写随笔了,长时间不总结项目,不锻炼文笔,一开篇,多少都会有些生疏,不知道如何开篇,如何写下去.有点江郎才尽,黔驴技穷的感觉. 写随笔,通常三步走,第一步,搭建框架,先把你要写的内容框 ...
- 手把手搭建一个属于自己的在线 IDE
背景 这几个月在公司内做一个跨前端项目之间共享组件/区块的工程,主要思路就是在 Bit 的基础上进行开发.Bit 主要目的是实现不同项目 共享 与 同步 组件/区块,大致思路如下: 在 A 项目中通过 ...
- 如何使用 VuePress 搭建一个 element-ui 风格的文档网站
如何使用 VuePress 搭建一个 element-ui 风格的文档网站 { "devDependencies": { "vuepress": "1 ...
- 基于Idea从零搭建一个最简单的vue项目
一.需要了解的基本知识 node.js Node.js是一个Javascript运行环境(runtime),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装.N ...
- 如何用webgl(three.js)搭建一个3D库房-第一课
今天我们来讨论一下如何使用当前流行的WebGL技术搭建一个库房并且实现实时有效交互 第一步.搭建一个3D库房首先你得知道库房长啥样,我们先来瞅瞅库房长啥样(这是我在网上找的一个库房图片,百度了“库房” ...
- 基于Docker的服务器搭建
-----------基于Docker的多种服务器搭建----------- 开发环境 本机上的虚拟机 Centos7.4 Docker1.13.1 Openssl1.1.1 1 Nginx 1.1 ...
随机推荐
- 【机器学习实战】第7章 集成方法 ensemble method
第7章 集成方法 ensemble method 集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是对其他算法进行组合的一种形式. 通俗来说: 当做重 ...
- JS中apply和call的区别和用法
Javascript中有一个call和apply方法,其作用基本相同,但是它们也有略微不同的地方. JS手册中对call方法的解释是: call方法:调用一个对象的一个方法,以另一个对象替换当前对象. ...
- junit搭配hamcrest使用
开篇 - 快速进行软件编码,与功能测试应该是每个写代码的人,应该掌握的技能,如何进行优雅的写代码,把测试的时间压缩,腾出时间来休息.下面听我一一道来: 依赖:junit 4.4 hamcrest 1. ...
- Android性能优化之启动速度优化
Android性能优化之启动速度优化 Android app 启动速度优化,首先谈谈为什么会走到优化这一步,如果一开始创建 app 项目的时候就把这个启动速度考虑进去,那么肯定就不需要重新再来优化 ...
- LINUX 笔记-条件测试
格式:test condition 文件测试状态 -d 目录 -s 文件长度大于0,非空 -f 正规文件 -w 可写 -l 符号链接 -u 文件有suid位设置 -r 可读 -x 可执行 字符串测试 ...
- 项目总结一:响应式之CSS3 媒体查询
1.<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scala ...
- Loadrunner Http接口Get/Post方法性能测试脚本解析
最近使用LoadRunner 11进行了一次完整的Http WEB接口性能测试,下面介绍下Http接口Get/Post方法性能测试脚本通用编写方法. 1. Http接口性能测试基本流程 首先定义了一个 ...
- 跨域资源共享CORS实现
问题描述: 本地已经实现的restful接口,在地址栏输入url:loaclhost:8080/admins即可得到预期的json字符串,在网页上显示如下: [{"id":1,&q ...
- abapGit简介与教程
你是ABAP开发者?你用abapGit吗? 看到这个问题,读者也许会想,什么是abapGit?就让我们从这个问题开始.简单地说,abapGit是一个以ABAP写成为ABAP服务的Git客户端. 有的读 ...
- python 模块的概念介绍
模块 模块:本质就是一个.py文件分为三部分:内置模块.第三方模块,自定义模块 模块: 顶层文件 python模块python模块可以将代码量较大的程序分割成多个有组织的.彼此独立但又能互相交互的代码 ...