如何在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容器非常简单,只需一行命令即可快速实现本地部署。

image-20240206172031658

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

image-20240206172328932

然后执行查看镜像命令:

sudo docker images

image-20240206172422782

可以看到成功拉取了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 ** :设置容器在在后台一直运行。

image-20240206172707031

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

sudo docker ps

image-20240206172810409

可以看到刚才创建的Excalidraw容器正在运行中。

4. 本地连接测试

现在我们可以通过浏览器直接访问 localhost:5000 端口的 Excalidraw 服务:

image-20240206172909607

可以看到,本地连接 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 管理界面配置即可。

image-20230831171159175

5.2 创建远程连接公网地址

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:

  • 隧道名称:可自定义,注意不要与已有的隧道名称重复,本例使用了:exdraw
  • 协议:http
  • 本地地址:5000
  • 域名类型:随机域名
  • 地区:选择China Top

点击创建

image-20240207095612018

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

image-20240207095720991

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

image-20240207095940715

小结

为了方便演示,我们在上边的操作过程中使用了cpolar生成的HTTP公网地址隧道,其公网地址是随机生成的。

这种随机地址的优势在于建立速度快,可以立即使用。然而,它的缺点是网址是随机生成,这个地址在24小时内会发生随机变化,更适合于临时使用。

如果有长期远程访问本地Excalidraw服务的需求,但又不想每天重新配置公网地址,还想地址好看又好记,那我推荐大家选择使用固定的二级子域名方式来远程访问。

5.3 使用固定公网地址远程访问

登录cpolar官网,点击左侧的预留,选择保留二级子域名,地区选择China VIP,设置一个二级子域名名称,点击保留,保留成功后复制保留的二级子域名名称,这里我填写的是exdraw,大家也可以自定义喜欢的名称。

image-20240207100140130

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

image-20240207100319169

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名:exdraw
  • 地区:选择China VIP

点击更新(注意,点击一次更新即可,不需要重复提交)

image-20240207100431685

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

image-20240207100508737

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

image-20240207100658129
以上就是如何在Ubuntu系统使用Docker部署Excalidraw容器,并结合cpolar内网穿透工具实现公网远程访问内网本地服务的全部流程,感谢您的观看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/760405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务配置nacos

参考地址: Maven引入nacos的版本问题以及如何在阿里Maven仓库中找到想要的jar和Maven中的groupId、artifactId、version_cannot resolve com.alibaba.cloud:spring-cloud-star-CSDN博客 pom文件中报错: Could not find artifact com.alibaba.cloud:sp…

JavaSE、JavaEE和Jakarta EE的历史、区别与联系

JavaSE、JavaEE和Jakarta EE是Java平台中的三个重要组成部分,它们各自承担着不同的角色,同时也有着密切的联系。在理解它们之间的历史、区别和联系之前,我们首先需要了解它们的基本概念。 JavaSE(Java Standard Edition&#xff…

OpenCV图像处理模块详解

OpenCV 中的图像处理模块(Imgproc)提供了丰富的功能,用于对图像进行各种操作和处理。以下是对这些功能的详细说明: 图像变换(Image Transformation): 缩放(Resize)&#…

【Golang星辰图】 Go系统编程实战:利用Go-syslog、Go-procfs、Go-udev等库实现系统管理和监控

Go系统编程实战:从Go-syslog到Go-apparmor,掌握系统管理和监控技能 前言: 在Linux系统中,系统编程是指利用操作系统提供的接口和库,进行系统级别的编程。Go语言作为一种静态编译、垃圾回收、并发编程的现代编程语言&…

复用与多址的联系与区别

开头请记住一句话:复用针对资源,多址针对用户。 一、复用 1、复用是指一个信道传输多个信号,以提高资源利用率,针对的是信道资源。相当于高速公路上的车道,车道越多,传输速率越快,资源利用率也越…

Linux——进程信号(二)

目录 1、阻塞信号 1.1、信号其他相关常见概念 1.2、在内核中的表示 1.3、sigset_t 1.4、信号集操作函数 2、捕捉信号 2.1、内核如何捕捉信号 5.2、sigaction 1、阻塞信号 1.1、信号其他相关常见概念 实际执行信号的处理动作被称为信号递达(Delivery&#x…

sentinel黑白名单权限控制

黑白名单权限控制 规则配置 规则创建 创建一个 AuthorityRule 规则对象三个关键要素 setStrategy: 黑白名单类型setResource: 规则和资源的绑定关系setLimitApp: 限制的来源 调用 AuthorityRuleManager.loadRules()加载规则 监听器实例化和管理 AuthorityPropertyListener…

【Leetcode】top 100 链表

基础知识补充 单向链表结构:item存储数据 next指向下一结点地址 head保存首地址 class Node(object): # 创建结点def __init__(self, item): self.item item # item存放数据元素self.next None # next是下一个…

【教程】混淆代码保护与优化

在本文中,我们将介绍如何在iOS项目中利用混淆技术来保护源代码安全并实现优化。我们将分别针对Swift和OC项目,详细介绍如何使用脚本和工具进行代码混淆,并解决在混淆过程中可能遇到的问题。随着移动应用市场的不断扩大,iOS应用的安…

Mysql编译安装

首先准备两个包:mysql-5.7.17.tar.gz和boost_1_59_0.tar.gz yum -y install gcc gcc-c ncurses ncurses-devel bison cmake 然后创建程序用户管理 useradd -s /sbin/nologin mysql 接着解压包 tar zxvf mysql-5.7.17.tar.gz -C /opt tar zxvf boost_1_59_0.tar.…

美团一面3月20日

优选部门 1.面向对象编程是什么 2.面向对象特性,分别说说 3.Java里面有几种修饰符 4.不加修饰符和protect什么区别 5.接口和抽象类的区别 6.了解哪些设计模式 7.手写单例模式 8.写的synchronized什么作用,(.class)是什么意思&…

使用Pygame做一个乒乓球游戏

项目介绍 使用Pygame做一个乒乓球游戏。左侧为电脑,右侧为玩家。 视频地址-YT 视频搬运-B站 视频教程约90分钟。 代码地址 环境:需要pygame库,可用pip安装:pip install pygame 1. 基础版本 首先进行一些初始化,初始…

线性结构-线性表

线性结构-线性表 数据结构中的逻辑结构分为线性结构和非线性结构,线性结构是n个数据元素的有序(次序)集合,它有下列几个特征: 1.集合中必存在唯一的一个"第一个元素"; 2&#xff0…

java NIO群聊系统

demo要求: 1)编写一个NIO群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞) 2)实现多人群聊 3)服务器端:可以监测用户上线,离线,并实现消息转发功…

python 爬虫 地理空间DEM 制作中国地形

一.配置Python 爬虫 环境 from selenium import webdriver import time # from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keys # from selenium.webdriver.comm…

Langchain-chatchat+ChatGlm3-6b部署

我的环境 升级了下配置,加载知识库成功 内存:16GB 32B 显卡:GTX1060-6G RTX4080 Laptop-12G 1. 基础环境准备 1.1. 安装anaconda,创建环境python版本3.11 conda create -n chatglm3 python3.11 conda activate chatglm3 1.…

如何在CentOS搭建docker compose ui可视化工具并无公网IP远程管理容器

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

蓝桥杯 2023 省A 更小的数

主要思路: 输入一个长度为n的字符串,用二维数组dp[i][j]来记录子串[i, j]是否需要反转一次才能满足条件。使用动态规划自底向上地填充dp数组。根据问题的要求,需要考虑字符串的子串中字符的大小关系来判断是否需要反转。最后统计满足条件的子…

静态扭矩,是用公称扭矩还是最小动态扭矩作为对比?——​suntorque智能扭矩系统​

在机械工程和动力学领域,扭矩是一个至关重要的概念。当我们讨论到扭矩时,常常会遇到静态扭矩和动态扭矩的说法。特别是在实际应用中,工程师们经常需要对比和选择使用哪种扭矩作为参考。那么,静态扭矩,是用公称扭矩还是…

【C/C++】详解 assert() 断言(什么是assert? assert有什么作用?)

目录 一、前言 二、什么是 assert ? 三、assert 的用法 四、assert 案例解析 五、assert 断言的使用原则 六、共勉 一、前言 在编写程序过程中,尤其是调试代码时,往往需要一个提醒代码漏洞/Bug的小助手,以便于程序员及时修改和完善代码…