如何在Ubuntu系统搭建Excalidraw容器并实现公网访问本地绘制流程图
文章目录
- 1. 安装Docker
- 2. 使用Docker拉取Excalidraw镜像
- 3. 创建并启动Excalidraw容器
- 4. 本地连接测试
- 5. 公网远程访问本地Excalidraw
- 5.1 内网穿透工具安装
- 5.2 创建远程连接公网地址
- 5.3 使用固定公网地址远程访问
本文主要介绍如何在Ubuntu系统使用Docker部署开源白板工具Excalidraw,并结合cpolar内网穿透工具实现公网远程访问绘制流程图。
Excalidraw是一款手绘风格流程图、示意图、架构图在线绘制工具,界面简洁,交互细致,上手简单,操作习惯和大部分制图软件相似。使用Docker部署Excalidraw容器非常简单,只需一行命令即可快速实现本地部署。

1. 安装Docker
本教程操作环境为Linux Ubuntu系统,在开始之前,我们需要先安装Docker。
在终端中执行下方命令:
添加Docker源
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg# Add the repository to Apt sources:
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
安装Dokcer包
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
通过运行映像来验证 Docker 引擎安装是否成功
sudo docker run hello-world
2. 使用Docker拉取Excalidraw镜像
sudo docker pull excalidraw/excalidraw

然后执行查看镜像命令:
sudo docker images

可以看到成功拉取了Excalidraw镜像。
3. 创建并启动Excalidraw容器
成功拉取Excalidraw镜像后,我们可以使用该镜像创建并运行一个Excalidraw容器。
在终端执行以下命令:
$ sudo docker run -d --name excalidraw -p 5000:80 excalidraw/excalidraw
参数说明:
- –name excalidraw:本例容器名称为excalidraw,大家可以自己起名。
- -p 5000:80: 端口进行映射,将本地 5000 端口映射到容器内部的 80 端口。
- **-d ** :设置容器在在后台一直运行。

然后执行下方命令查看容器是否正在运行:
sudo docker ps

可以看到刚才创建的Excalidraw容器正在运行中。
4. 本地连接测试
现在我们可以通过浏览器直接访问 localhost:5000 端口的 Excalidraw 服务:

可以看到,本地连接 Excalidraw 服务测试成功。
5. 公网远程访问本地Excalidraw
不过我们目前只能在本地连接刚刚使用docker部署的Excalidraw服务,如果身在异地,想要远程访问在本地部署的Excalidraw容器,但又没有公网ip怎么办呢?
我们可以使用cpolar内网穿透工具来实现无公网ip环境下的远程访问需求。
5.1 内网穿透工具安装
下面是安装cpolar步骤:
cpolar官网地址: https://www.cpolar.com
- 使用一键脚本安装命令
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
- 向系统添加服务
sudo systemctl enable cpolar
- 启动cpolar服务
sudo systemctl start cpolar
cpolar安装成功后,在外部浏览器上访问Linux 的9200端口即:【http://服务器的局域网ip:9200】,使用cpolar账号登录,登录后即可看到cpolar web 配置界面,结下来在web 管理界面配置即可。

5.2 创建远程连接公网地址
登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:
- 隧道名称:可自定义,注意不要与已有的隧道名称重复,本例使用了:exdraw
- 协议:http
- 本地地址:5000
- 域名类型:随机域名
- 地区:选择China Top
点击创建

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了两个公网地址,接下来就可以在其他电脑(异地)上,使用任意一个地址在浏览器中访问即可。

如下图所示,成功实现在公网环境访问本地部署的Excalidraw服务!

小结
为了方便演示,我们在上边的操作过程中使用了cpolar生成的HTTP公网地址隧道,其公网地址是随机生成的。
这种随机地址的优势在于建立速度快,可以立即使用。然而,它的缺点是网址是随机生成,这个地址在24小时内会发生随机变化,更适合于临时使用。
如果有长期远程访问本地Excalidraw服务的需求,但又不想每天重新配置公网地址,还想地址好看又好记,那我推荐大家选择使用固定的二级子域名方式来远程访问。
5.3 使用固定公网地址远程访问
登录cpolar官网,点击左侧的预留,选择保留二级子域名,地区选择China VIP,设置一个二级子域名名称,点击保留,保留成功后复制保留的二级子域名名称,这里我填写的是exdraw,大家也可以自定义喜欢的名称。

保留成功后复制保留成功的二级子域名的名称:exdraw,返回登录Cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道exdraw,点击右侧的编辑:

修改隧道信息,将保留成功的二级子域名配置到隧道中
- 域名类型:选择二级子域名
- Sub Domain:填写保留成功的二级子域名:exdraw
- 地区:选择China VIP
点击更新(注意,点击一次更新即可,不需要重复提交)

更新完成后,打开在线隧道列表,此时可以看到公网地址已经发生变化,地址名称也变成了固定的二级子域名名称的域名:

最后,我们使用任意一个固定公网地址在浏览器访问,可以看到访问成功,这样一个固定且永久不变的公网地址就设置好了,随时随地都可以远程访问本地部署的Excalidraw服务了!

以上就是如何在Ubuntu系统使用Docker部署Excalidraw容器,并结合cpolar内网穿透工具实现公网远程访问内网本地服务的全部流程,感谢您的观看。
相关文章:
如何在Ubuntu系统搭建Excalidraw容器并实现公网访问本地绘制流程图
文章目录 1. 安装Docker2. 使用Docker拉取Excalidraw镜像3. 创建并启动Excalidraw容器4. 本地连接测试5. 公网远程访问本地Excalidraw5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 本文主要介绍如何在Ubuntu系统使用Docker部署开源白板工具Excal…...
PostgreSQL和MySQL的异同
0.前言 MySQL是一个关系数据库管理系统(DBMS),通过该系统,您可以将数据存储为包含行和列的二维表格。它是一个常用系统,支持许多 Web 应用程序、动态网站和嵌入式系统。PostgreSQL 是一个对象关系数据库管理系统&…...
有ai写文案的工具吗?分享5款好用的工具!
在数字化时代,人工智能(AI)已渗透到我们生活的方方面面,包括内容创作领域。AI写文案的软件以其高效、便捷的特点,正逐渐受到广大内容创作者、营销人员、甚至普通用户的青睐。本文将为您盘点几款热门的AI写文案软件&…...
docker+k8s相关面试题
dockerk8s k8s详细介绍docker的工作原理docker的组成docker与传统虚拟机的区别docker技术的三大核心概念centos镜像几个G,但是docker centos镜像才几百兆镜像的分层结构以及为什么要使用镜像的分层结构容器的copy-on-write特性,修改容器里面的内容会修改…...
力扣爆刷第101天之hot100五连刷91-95
力扣爆刷第101天之hot100五连刷91-95 文章目录 力扣爆刷第101天之hot100五连刷91-95一、62. 不同路径二、64. 最小路径和三、5. 最长回文子串四、1143. 最长公共子序列五、72. 编辑距离 一、62. 不同路径 题目链接:https://leetcode.cn/problems/unique-paths/desc…...
前端vue实现甘特图
1 什么是甘特图 甘特图(Gantt chart)又称为横道图、条状图(Bar chart)。以提出者亨利L甘特先生的名字命名,是项目管理、生产排程、节点管理中非常常见的一个功能。 甘特图内在思想简单,即以图示的方式通过活动列表和时间刻度形象地表示出任何特定项目的…...
SQLiteC/C++接口详细介绍之sqlite3类(十五)
返回目录:SQLite—免费开源数据库系列文章目录 上一篇:SQLiteC/C接口详细介绍之sqlite3类(十四) 下一篇:SQLiteC/C接口详细介绍之sqlite3类(十六) 47.sqlite3_set_authorizer 用法ÿ…...
每日三个JAVA经典面试题(十八)
1.volatile 关键字的作用 在Java中,volatile关键字用于声明变量,以确保该变量的更新对所有线程都是可见的,即当一个线程修改了一个volatile变量的值,这个新值对于其他线程来说是立即得知的。volatile关键字有两个主要作用&#x…...
RPC 和 序列化
RPC 1 RPC调用流程 1.1 clerk客户端调用远程服务 Clerk::PutAppend() raftServerRpcUtil::PutAppend() raftServerRpcUtil是client与kvserver通信的入口, 包含kvserver功能的一对一映射:Get/PutAppend,通过stub对象——raftKVRpcProctoc:…...
【原创】三十分钟实时数据可视化网站前后端教程 Scrapy + Django + React 保姆级教程向
这个本来是想做视频的,所以是以讲稿的形式写的。最后没做视频,但是觉得这篇文还是值得记录一下。真的要多记录,不然一些不常用的东西即使做过几个月又有点陌生了。 文章目录 爬虫 SCRAPYxpath 后端 DJANGO前端 REACT Hello大家好这里是小鱼&a…...
MySQL的备份
为什么要备份: 1.保证重要的数据不丢失 2.数据转移 MySQL数据库备份的方式: 1.直接拷贝物理文件 2.在可视化工具中手动导出 (1)在想要导出的表或者数据库中,右键,选择备份或导出 使用命令行导出 MyS…...
Linux 磁盘的一生
注意:实验环境都是使用VMware模拟 磁盘接口类型这里vm中是SCSI,扩展sata,ide(有时间可以看看或者磁盘的历史) 总结:磁盘从有到无—类似于建房子到可以住 ————————————————————————————————————…...
C#配置连接数据库字段
在Web.config文件中 添加如下配置 <!--连接数据库字段--><connectionStrings><add name"sql" connectionString"server.;uidsa;pwd8888;databaseArticleWebSite" /></connectionStrings>...
QCOM和其他常见芯片平台术语缩写
1 QCOM 1.1 General Qualcomm: Quality Communications ALSA DCP:ALSA由DAI、Codec、Platform三部分组成 ALSA TLV:Type-Length-Value Alternative Mode: 替代模式 ANC:Automatic Noise Canceller ASM: Anntena Switch Module AT:…...
css页面布局
CSS属性书写顺序(重点) 建议遵循以下顺序: 布局定位属性:display / position/ float / clear / visibility / overflow(建议display第一个写,毕竟关系到模式) 自身属性:width / height / margin / padding / border / background…...
6、Design Script之列表
Range 在DesignScript中,Range是从起点到终点的一系列数字,使用指定的步距(间距类型),并有以下的初始化方法: start..end..step; start..end..#amount; start..end..~approximate; Range可以是数字的,也可以是字母的。 字母范围因大小写而异。 开始,结束. .#数量范围(…...
Mysql数据库的多实例部署
mysql多实例部署 先进行软件下载 上传二进制格式的mysql软件包 [rootcjy ~]# ls anaconda-ks.cfg mysql-8.0.35-linux-glibc2.28-x86_64.tar.xz配置用户和组并解压二进制程序至/usr/local下 创建用户和组 [rootcjy ~]# useradd -r -s /sbin/nologin -M mysql解压软件至/usr…...
陈巍:Sora大模型技术精要万字详解(上)——原理、关键技术、模型架构详解与应用
目录 收起 1 Sora的技术特点与原理 1.1 技术特点概述 1.2 时间长度与时序一致性 1.3 真实世界物理状态模拟 1.4 Sora原理 1.4.1扩散模型与单帧图像的生成 1.4.2 Transformer模型与连续视频语义的生成 1.4.3 从文本输入到视频生成 2 Sora的关键技术 2.1 传统文生图技…...
JS原型和原型链的理解
原型链图,图中Parent是构造函数,p1是通过Parent实例化出来的一个对象 前置知识 js中对象和函数的关系,函数其实是对象的一种 函数、构造函数的区别,任何函数都可以作为构造函数,但是并不能将任意函数叫做构造函数&…...
力扣题单(小白友好)
力扣题单 算法小白自用题单,目前对于一些简单的数据结构感觉掌握的还可以,但是力扣很多题还是需要看题解,不够熟练;故整理了一份题单,用于巩固练习; 网上确实有很多对于算法分类讲解的网站,but:有一丢丢选择困难症,每天不知道该刷什么题,再加上网站对于一类题一般就有十几道题目…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
