Excalidraw是一个安全、支持多人协作的手写风格绘图工具。因为是开源项目,可以很方便的进行私有化部署。
前置准备
- 一个域名:不管是万网、腾讯云、Cloudflare、Godaddy都可以注册。如果部署在国内的话,需要提前进行备案。
- 一台服务器:腾讯云、阿里云、或者其他香港、日本、美国等地的 VPS 均可。
- 域名解析平台:可以使用域名注册商自己的,也可以使用 DNSPod 、阿里云、 Cloudflare 。
系统安装准备
- 安装 Nginx,以我用的 Debian 系统为例:
apt install nginx
- 安装 Docker,还是以我用的 Debian 系统为例
# 删除部分旧的软件
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
# 添加 Docker 官方的 GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 添加 Apt 仓库源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# 安装 Docker 服务
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 安装 acme.sh ,方便申请 https 证书
curl https://get.acme.sh | sh -s email=my@example.com
申请https证书
我这里为了方便,直接申请通配符证书,这种方式由于需要添加 DNS 解析项,所以需要添加域名解析服务商的凭据,我这里使用的 Cloudflare,就以它为例。
Cloudflare的令牌申请可以参考 https://shiping.date/82.html 这篇文章。
# 上一步申请的令牌
export CF_Token="xxxxxxxxxxxx"
# Cloudflare 账号的邮箱
export CF_Email="xxx@xxx.com"
# 区域 id可以在具体域名管理页面右侧看到
export CF_Zone_ID="xxxxx"
# 用户 id,也可以在具体域名管理页面右侧看到
export CF_Account_ID="xxxx"
# 申请证书
acme.sh --issue --dns dns_cf -d aaa.me -d *.aaa.me
最终证书会存储在/root/.acme.sh/
目录下,以我申请的为例,最终主要文件如下:
- 证书:
/root/.acme.sh/aaa.me_ecc/fullchain.cer
- 证书 key:
/root/.acme.sh/aaa.me_ecc/aaa.me.key
部署 Excalidraw-Room 服务
在自己的目录创建并保存如下docker-compose.yml
文件:
services:
excalidraw-room:
image: excalidraw/excalidraw-room
container_name: excalidraw-room
ports:
- "5001:80"
restart: on-failure
通过命令启动服务:
docker compose up -d
如果需要关闭,可以运行如下命令:
docker compose down
配置 nginx
找到nginx配置文件目录,如果不知道的话,可以运行nginx -V
命令,可以看到--conf-path=/etc/nginx/nginx.conf
这样的字符串。
查看nginx.conf
文件,可以看到如下的字符串,不同系统可能不一样:
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
我这里就可以添加/etc/nginx/sites-enabled/excalidraw-room
配置文件,内容如下:
server {
listen 80;
listen [::]:80;
server_name collab.aaa.me;
# 所有的 http 请求都跳转到 https
location / {
return 301 https://$server_name$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443;
server_name collab.aaa.me;
# 配置https相关内容
ssl_certificate "/root/.acme.sh/aaa.me_ecc/fullchain.cer";
ssl_certificate_key "/root/.acme.sh/aaa.me_ecc/aaa.me.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256::!MD5;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000";
location / {
proxy_http_version 1.1;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_set_header Host $host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_pass http://127.0.0.1:5001;
}
}
然后运行nginx -t
查看 nginx 配置文件是否正确。如果没有问题的话,运行nginx -s reload
重载 nginx 服务即可。