Plane.so Docker 自架教学|完整设定、备份还原与 Nginx 反向代理实作
针对想用 Docker 自架 Plane.so 的使用者,提供详细安装、设定、备份与还原脚本,并示范 Nginx 反向代理整合多服务,解决多服务共用 80 Port 问题,确保系统稳定运作与资料安全。
Click here to view the English version of this article.
點擊這裡查看本文章正體中文版本。
基于 SEO 考量,本文标题与描述经 AI 调整,原始版本请参考内文。
Plane.so Docker Self-Hosted 自架纪录
Plane Self-Hosted Docker 自架、备份、还原、Nginx Domain 反向代理设定教学
️⚠️️️️⚠️️️️⚠️️️️2025 Update️ ⚠️️️️⚠️️️️⚠️️️️
已不推荐使用 Plane.so,原因是 Plane.so 初期依靠开源专案与支援自架崛起,但在后续的版本终将许多功能都放入付费计划中,即使是自架也需要购买凭证才能开通功能,就算是自架也会有使用者人数限制,已不符合当初的想像;另外就是收费计划非常混乱,有终身、Pro、Business…难保就算花钱购买,会不会又推出新的方案,新功能又只在新方案之中。
前言
Plane.so 是一套免费开源且支援 Self-Hosted 自架的类似 Asana, Jira, Clickup 专案管理工具,成立于 2022 年,第一版于 2023 年释出,目前扔在开发阶段。
详细使用操作与开发流程结合介绍,请参考上篇文章「 Plane.so 免费开源且支援 Self-Hosted 的类 Asana/Jira 专案管理工具 」本篇仅记录 Plane.so 使用 Docker 自架的过程。
Self-Hosted Plane
支援 Docker, K8s / Cloud, 私人地端 安装
Self-Hosted 为 Community Edition (官方简称 CE) 版
Self-Hosted 不一定会包含所有 Cloud 版功能
Self-Hosted 版功能预设比照的是 Cloud 免费版, 若要使用其他功能依然要升级付费版 。
本文为 Docker + 私人地端安装为例
目前官方不提供从 Cloud 汇出,汇入到 Self-Hosted 版本,只能自己透过 API 串接实现
官方提示:超过 50 位使用者需提升机器性能
We have seen performance degradation beyond 50 users on our recommended 4 GB, 2vCPU infra. Increased infra will help with more users.
使用 AGPL-3.0 license 开源,第一版 2023/01 推出,目前扔持续在开发阶段,尚未提供正式 Relase 版。
请注意开源, 支援 Self-Hosted 不等于免费。
文末有附上完整设定范例 Repo。
Docker 安装
本文不多做介绍,请参考 官方 Docker 安装方式 ,完成本地 Docker 环境安装、设定,以下以 macOS Docker 为例。
Plane @ Docker 安装
参考 官方手册 。
- 建立目录&下载安装 Script
1
2
3
4
5
6
7
mkdir plane-selfhost
cd plane-selfhost
curl -fsSL -o setup.sh https://raw.githubusercontent.com/makeplane/plane/master/deploy/selfhost/install.sh
chmod +x setup.sh
- 确保 Docker 环境安装好& Docker 启动中,执行 Script
1
./setup.sh
- 输入
1
进行安装(下载 Images)
- 等待 Plane 使用到的 Images Pulled 完成
- Images Pulled 完成后,进入
./plane-app
资料夹打开.env
设定档案
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
APP_RELEASE=stable
WEB_REPLICAS=1
SPACE_REPLICAS=1
ADMIN_REPLICAS=1
API_REPLICAS=1
NGINX_PORT=80
WEB_URL=http://localhost
DEBUG=0
SENTRY_DSN=
SENTRY_ENVIRONMENT=production
CORS_ALLOWED_ORIGINS=http://localhost
#DB SETTINGS
PGHOST=plane-db
PGDATABASE=plane
POSTGRES_USER=plane
POSTGRES_PASSWORD=plane
POSTGRES_DB=plane
POSTGRES_PORT=5432
PGDATA=/var/lib/postgresql/data
DATABASE_URL=
# REDIS SETTINGS
REDIS_HOST=plane-redis
REDIS_PORT=6379
REDIS_URL=
# Secret Key
SECRET_KEY=60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5
# DATA STORE SETTINGS
USE_MINIO=1
AWS_REGION=
AWS_ACCESS_KEY_ID=access-key
AWS_SECRET_ACCESS_KEY=secret-key
AWS_S3_ENDPOINT_URL=http://plane-minio:9000
AWS_S3_BUCKET_NAME=uploads
MINIO_ROOT_USER=access-key
MINIO_ROOT_PASSWORD=secret-key
BUCKET_NAME=uploads
FILE_SIZE_LIMIT=5242880
# Gunicorn Workers
GUNICORN_WORKERS=1
# UNCOMMENT `DOCKER_PLATFORM` IF YOU ARE ON `ARM64` AND DOCKER IMAGE IS NOT AVAILABLE FOR RESPECTIVE `APP_RELEASE`
# DOCKER_PLATFORM=linux/amd64
预设使用
:80
Port 启动 Plane 服务,如果有冲突可以修 Port完成设置调整 (不建议直接更改
docker-compose.yml
因为日后 Plane 更新会直接覆盖掉此档案)
Plane @ Docker 启动
- 再次进入 ./setup.sh
- 输入
2
启动 Plane:
- 完成启动,且确认都启动成功后,打开网址
/
god-mode/
进行首次设定:
这边设定的帐号密码为最高管理权限(God/Admin Mode)
基于安全考量,密码须包含特殊符号、超过 8 个字元、包含数字、大小写英文,否则无法送出
此步骤未设定进入首页登入会显示
Instance not configured. Please contact your administrator.
Plane God/Admin Mode 管理后台
可以从 Plane 网址 /god-mode/
进入,这边可设定整个 Plane 服务的环境。
General Settings:
一般设定。
Email:
- Email 通知 SMTP 设定
懒得自己弄 SMTP Server 可以 直接使用 GMAIL SMTP 寄信:
Host:
smtp.gmail.com
Port:
465
Sender email address: 信件显示信箱 e.g.
noreply@zhgchg.li
Username: 你的 Gmail 帐号
Password: 你的 Gmail 密码, 如果有两阶段验证要使用应用程式密码 。
如果设定完没反应请检查 Port, Email Security 对应设定 (TLS/STARTTLS: 使用端口 587、SSL: 使用端口 465)
另外有个发想,因为 Plane 暂时不支援 Slack 通知,因此其实也可以起一个 SMTP Server 壳将信件通知自己透过 Python 脚本转换成 Slack 通知。
Authentication
Plane 服务登入使用验证方式,如果要绑定只有 Google 组织内的信箱帐户可使用,可以关闭「Password based login」只启用「Google」登入功能,再从 Google 登入那边产生仅限组织帐号内使用的登入 App 即可。
Artificial Intelligence
AI 相关设定,目前功用不大,有埋 Key 就能在 Issue 上使用 AI 协助撰写 Issue Description。
Image in Plane
同样目前功用不大,有埋 Unsplash Key 就能在专案封面图选择时透过 Unsplash API 抓取图片并套用。
⚠️⚠️声明⚠️⚠️
以上是 2024–05–25 v0.20-Dev 版的使用介绍,官方仍如火如荼开发新功能与优化使用者体验,请以最新版的设定为主。
God/Admin Mode 设定好之后就差不多能如同使用 Cloud 版一样使用。
详细使用操作与开发流程结合介绍,请参考上篇文章「 Plane.so 免费开源且支援 Self-Hosted 的类 Asana/Jira 专案管理工具 」
Plane @ Docker 升级
如同前述,Plane 仍处于开发阶段,约每两到三周会释出新版,更动内容可能也会蛮巨大的;建议详细阅读 Release Note 改动与需要调整的设定,确定没问题后再进行升级。
⚠️升级前务必备份!⚠️ 升级完成务必检查排成备份脚本是否依然正常。
⚠️升级前务必备份!⚠️ 升级完成务必检查排成备份脚本是否依然正常。
⚠️升级前务必备份!⚠️ 升级完成务必检查排成备份脚本是否依然正常。
因 Plane 处在开发阶段,不稳定,不能保证升级不会造成资料遗失,因此建议操作前务必备份,备份方式下方会说明。
升级方式:
- 再次进入 ./setup.sh
输入
5
升级 Plane (其实也就只是拉新的 Images 下来 & Restart)Images Pulled 完成后可以 Restart 重启服务
升级后 .env 可能有所更动,请参考 Release Note 进行调整
Plane @ Docker 备份
自 0.20-dev
开始 ./setup.sh
新增一个 Backup Data 指令,但 翻阅官方手册 ,只提到如何把 Backup Data Restore 到他们的 One 收费服务上;因此这边还是用我自己土炮备份上传档案、Redis、备份 Postgresql Docker Container 的方式。
备份脚本
./plane-backup.sh
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/bin/bash
# 备份 Plane 资料
# Author: zhgchgli (https://zhgchg.li)
##### 执行方式
# ./plane-backup.sh [备份到目标资料夹路径] [Plane 的 Docker 专案名称] [Plane 备份档案最大保留数量,超过删除最旧的备份]
# e.g. ./plane-backup.sh /backup/plane plane-app 14
###### 设定
# 备份到目标资料夹
backup_dir=${1:-.}
# Plane 的 Docker 专案名称
docker_project_name=${2:-"plane-app"}
# Plane 备份档案最大保留数量,超过删除最旧的备份
keep_count=${3:-7}
######
# 检查目录是否存在
if [ ! -d "$backup_dir" ]; then
echo "备份失败,目录不存在:$backup_dir"
exit;
fi
# Remove oldest
count=$(find "$backup_dir" -mindepth 1 -type d \\| wc -l)
while [ "$count" -ge $keep_count ]; do
oldest_dir=$(find "$backup_dir" -mindepth 1 -maxdepth 1 -type d \\| while read dir; do
# 使用 stat 命令获取修改时间
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS 系统
echo "$(stat -f %m "$dir") $dir"
else
# Linux 系统
echo "$(stat -c %Y "$dir") $dir"
fi
done \\| sort -n \\| head -n 1 \\| cut -d ' ' -f 2-)
echo "Remove oldest backup: $oldest_dir"
rm -rf "$oldest_dir"
count=$(find "$backup_dir" -mindepth 1 -type d \\| wc -l)
done
#
# Backup new
date_dir=$(date "+%Y_%m_%d_%H_%M_%S")
target_dir="$backup_dir/$date_dir"
mkdir -p "$target_dir"
echo "Backuping to: $target_dir"
# Plane's Postgresql .SQL dump
docker exec -i $docker_project_name-plane-db-1 pg_dump --dbname=postgresql://plane:plane@plane-db/plane -c > $target_dir/dump.sql
# Plane's redis
docker run --rm -v $docker_project_name-redis-1:/volume -v $target_dir:/backup ubuntu tar cvf /backup/plane-app_redis.tar /volume > /dev/null 2>&1
# Plane's uploaded files
docker run --rm -v ${docker_project_name}_uploads:/volume -v $target_dir:/backup ubuntu tar cvf /backup/plane-app_uploads.tar /volume > /dev/null 2>&1
echo "Backup up Success!"
第一次建立 Script 档案记得先: chmod +x ./plane-backup.sh
执行方式:
1
./plane-backup.sh [备份到目标资料夹路径] [Plane 的 Docker 专案名称] [Plane 备份档案最大保留数量,超过删除最旧的备份]
备份到目标资料夹路径: e.g
/backup/plane/
or./
Plane 的 Docker 专案名称: Plane Docker Compose Project 名称
- Plane 备份档案最大保留数量,超过删除最旧的备份: 预设 7 份
执行范例:
1
./plane-backup.sh /backup/plane plane-app 14
- 执行时要确保 Plane 是启动中的状态。
只要将以上指令加入 Crontab 就能定时自动备份 Plane。
如果遇到执行错误,找不到 Container 请确认 Plane Docker Compose Project 名称 或检查脚本与 Docker 的容器名称 (可能官方改名了)。
还原脚本
./plane-restore.sh
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/bin/bash
# 恢复 Plane 备份资料
# Author: zhgchgli (https://zhgchg.li)
##### 执行方式
# ./plane-restore.sh
#
inputBackupDir() {
read -p "欲恢复的 Plane 备份档案资料夹 (e.g. /backup/plane/2024_05_25_19_14_12): " backup_dir
}
inputBackupDir
if [[ -z $backup_dir ]]; then
echo "请提供备份资料夹 (e.g. sh /backup/docker/plane/2024_04_09_17_46_39)"
exit;
fi
inputDockerProjectName() {
read -p "Plane 的 Docker 专案名称 (留空使用预设 plane-app): " input_docker_project_name
}
inputDockerProjectName
docker_project_name=${input_docker_project_name:-"plane-app"}
confirm() {
read -p "您确定要执行 Restore Plane.so 资料? [y/N] " response
# Check the response
case "$response" in
[yY][eE][sS]\\|[yY])
true
;;
*)
false
;;
esac
}
if ! confirm; then
echo "Action cancelled."
exit
fi
# 恢复
echo "Restoring..."
docker cp $backup_dir/dump.sql $docker_project_name-plane-db-1:/dump.sql && docker exec -i $docker_project_name-plane-db-1 psql postgresql://plane:plane@plane-db/plane -f /dump.sql
# 恢复 Redis
docker run --rm -v ${docker_project_name}-redis-1:/volume -v $backup_dir:/backup alpine tar xf /backup/plane-app_redis.tar --strip-component=1 -C /volume
# 恢复上传的档案
docker run --rm -v ${docker_project_name}_uploads:/volume -v $backup_dir:/backup alpine tar xf /backup/plane-app_uploads.tar --strip-component=1 -C /volume
echo "Restore Success!"
第一次建立 Script 档案记得先: chmod +x ./plane-restore.sh
执行方式:
1
2
3
4
./plane-restore.sh
输入:欲恢复的 Plane 备份档案资料夹 (e.g. /backup/plane/2024_05_25_19_14_12)
输入:Plane 的 Docker 专案名称 (留空使用预设 plane-app)
输入:您确定要执行 Restore Plane.so 资料? [y/N] y
看到 Restore Success!
成功后,需要重启 Plane 才会生效。
使用 Plane ./setup.sh
输入 4
Restart:
回到网站上重新整理、登入 Workspace 检查是否恢复成功:
完成!
⚠️建议备份、还原流程要定期测试,确保出意外时备份能派上用场。
Plane @ Docker 升级
如同前述,Plane 仍处于开发阶段,约每两到三周会释出新版,更动内容可能也会蛮巨大的;建议详细阅读 Release Note 改动与需要调整的设定,确定没问题后再进行升级。
⚠️升级前务必备份!⚠️ 升级完成务必检查排成备份脚本是否依然正常。
⚠️升级前务必备份!⚠️ 升级完成务必检查排成备份脚本是否依然正常。
⚠️升级前务必备份!⚠️ 升级完成务必检查排成备份脚本是否依然正常。
因 Plane 处在开发阶段,不稳定,不能保证升级不会造成资料遗失,因此建议操作前务必备份。
升级方式:
- 再次进入 ./setup.sh
输入
5
升级 Plane (其实也就只是拉新的 Images 下来 & Restart)Images Pulled 完成后可以 Restart 重启服务
升级后 .env 可能有所更动,请参考 Release Note 进行调整
升级完成务必检查排成备份脚本是否依然正常
如果 Container Name 有变动需更改备份、还原、下方介绍的 Nginx 反向代理脚本
使用 Nginx + Plane 进行 Reverse Proxy 反向代理
因为我们同时可能会有需多 Web 服务需要提供,例如: Self-Hosted LibreChat (ChatGPT) 、 Self-Hosted Wiki.js 、 Self-Hosted Bitwarden … 每个服务预设都需要 80 Port,如果我们不想在使用时在网址指定 Port,则可需要启动一个 Docker Nginx 当作 Web 服务的反向代理。
效果如下:
1
2
3
4
5
chat.zhgchg.li -> LibreChat :8082
wiki.zhgchg.li -> Wiki.js :8083
pwd.zhgchg.li -> Bitwarden :8084
plane.zhgchg.li -> Plane.so :8081
要达成以上效果需要先把 ./plane-selfhost
目录移动到一个统一目录下,这边取名 webServices
。
最终目录结构预览:
调整 webServices/plane-selfhost/plane-app/.env
环境设定档案:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
APP_RELEASE=stable
WEB_REPLICAS=1
SPACE_REPLICAS=1
ADMIN_REPLICAS=1
API_REPLICAS=1
NGINX_PORT=8081
WEB_URL=http://plane.zhgchg.li
DEBUG=0
SENTRY_DSN=
SENTRY_ENVIRONMENT=production
CORS_ALLOWED_ORIGINS=http://plane.zhgchg.li
#DB SETTINGS
PGHOST=plane-db
PGDATABASE=plane
POSTGRES_USER=plane
POSTGRES_PASSWORD=plane
POSTGRES_DB=plane
POSTGRES_PORT=5432
PGDATA=/var/lib/postgresql/data
DATABASE_URL=
# REDIS SETTINGS
REDIS_HOST=plane-redis
REDIS_PORT=6379
REDIS_URL=
# Secret Key
SECRET_KEY=60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5
# DATA STORE SETTINGS
USE_MINIO=1
AWS_REGION=
AWS_ACCESS_KEY_ID=access-key
AWS_SECRET_ACCESS_KEY=secret-key
AWS_S3_ENDPOINT_URL=http://plane-minio:9000
AWS_S3_BUCKET_NAME=uploads
MINIO_ROOT_USER=access-key
MINIO_ROOT_PASSWORD=secret-key
BUCKET_NAME=uploads
FILE_SIZE_LIMIT=5242880
# Gunicorn Workers
GUNICORN_WORKERS=1
# UNCOMMENT `DOCKER_PLATFORM` IF YOU ARE ON `ARM64` AND DOCKER IMAGE IS NOT AVAILABLE FOR RESPECTIVE `APP_RELEASE`
# DOCKER_PLATFORM=linux/amd64
将网址替换为我们想要的网址,以
plane.zhgchg.li
为例NGINX_PORT 换成
8081
把原本的80
让改反向代理 Nginx
webServices/
下建立一个 docker-compose.yml
档案用来放 Nginx:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version: '3.8'
services:
webServices-nginx:
image: nginx
restart: unless-stopped
volumes:
- ./nginx/conf.d/plane.zhgchg.li.conf:/etc/nginx/conf.d/plane.zhgchg.li.conf
ports:
- 80:80
- 443:443
networks:
- plane-app_default #plane 所使用的网路
networks:
plane-app_default:
external: true
- 我们需要把 Plane app 的网路加入到 Nginx
webServices/
下建立 /conf.d
目录& plane.zhgchg.li.conf
档案:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# For plane.zhgchg.li
# http example:
server {
listen 80;
server_name plane.zhgchg.li;
client_max_body_size 0;
location / {
proxy_pass http://plane-app-proxy-1; # plane proxy-1 服务名称
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 X-Forwarded-Proto $scheme;
}
}
# https & http example:
# server {
# listen 443 ssl;
# server_name plane.zhgchg.li;
# #ssl
# ssl_certificate /etc/nginx/conf/ssl/zhgchgli.crt; # 替换成你域名的 crt & 记得把 key 加到 docker-compose.yml volumes Mount 进 Docker
# ssl_certificate_key /etc/nginx/conf/ssl/zhgchgli.key; # 替换成你域名的 key & 记得把 key 加到 docker-compose.yml volumes Mount 进 Docker
# ssl_prefer_server_ciphers on;
# ssl_protocols TLSv1.1 TLSv1.2;
# ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
# ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
# ssl_session_timeout 10m;
# ssl_session_cache shared:SSL:10m;
# add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
# client_max_body_size 0;
# location / {
# proxy_pass http://plane-app-proxy-1; # plane proxy-1 服务名称
# 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 X-Forwarded-Proto $scheme;
# }
# }
# server {
# listen 80;
# server_name plane.zhgchg.li;
# return 301 https://plane.zhgchg.li$request_uri;
# }
proxy_pass 输入 Plane 网路中的 服务入口
这边只以 HTTP 当范例,若要支援 HTTPS 可参考 自行签名凭证 的方式。
因为有多个 docker-compose.yml 需要个别启动,再启动 Nginx 反向代理,因此我们可以把所有启动脚本都放到同一个 Shell Script。
webServices/
下建立 /start.sh
档案:
1
2
3
4
5
6
7
8
9
10
#!/bin/sh
# 封装启动 Script
# 先启动 Plane..等其他服务
docker compose -f ./plane-selfhost/plane-app/docker-compose.yaml --env-file ./plane-selfhost/plane-app/.env up -d
# 最后才启动 Nginx
docker compose -f ./docker-compose.yml --env-file ./.env up -d
第一次建立 Script 档案记得先: chmod +x ./start.sh
停止服务也可以建立一个, webServices/
下建立 /stop.sh
档案:
1
2
3
4
5
6
7
#!/bin/sh
# 封装停止 Script
docker compose -f ./plane-selfhost/plane-app/docker-compose.yaml --env-file ./plane-selfhost/plane-app/.env down
docker compose -f ./docker-compose.yml --env-file ./.env down
第一次建立 Script 档案记得先: chmod +x ./stop.sh
启动
- 我们封装好 Nginx 反向代理+Plane 服务+其他…之后就可以直接下
./start.sh
启动所有服务
1
./start.sh
DNS 设定
架设在内网地端,需要请 IT 部门在内网 DNS 加上 plane.zhgchg.li -> 伺服器 IP 位址的 DNS 纪录。
1
plane.zhgchg.li 伺服器 IP 位址
如果你是在自己的电脑本地测试,可以在 /private/etc/hosts 档案中加入:
1
127.0.0.1 plane.zhgchg.li
DNS 设定完成后 进入 plane.zhgchg.li 就能开启 Plane 啰!
常见问题
Nginx 启动失败,一直 Restarting,进入看 Log 显示 nginx: [emerg] host not found in upstream 代表 Nginx 反向代理服务找不到 Plane 服务,要检查
http://plane-app-proxy-1
名称是否正确、Nginx docker-compose.yml 网路设定是否正确出现 502 Bad Gateway 启动顺序有误(确保 Nginx 反向代理是最后启动)或 Plane 进程有重启过,尝试重新启动应该就可以了。
出现 Nginx 默认首页
welcome to nginx!
,使用反向代理你将不再能使用原本 IP:80 方式进入 Plane,要使用网址网址无法解析、找不到主机,请确认 DNS 网路设定是否正常。
⚠️⚠️资安问题⚠️⚠️
因 Plane 专案正在开发中并且是开源专案,尚不确定有无严重系统漏洞,最严重可能会变成入侵入口;因此不建议将 Plane.so Self-Hosted 建立在公开网路上,可多加一层安全验证(Tunnel or 凭证 or VPN)通过才能连入;架设在内网也最好隔离开来。
开发中专案难免有 Bug、体验、安全问题,请大家多给 Plane.so 团队一点耐心;有任何问题也欢迎到下方回报:
完整 Self-Hosted Repo 范例下载
Plane.so 使用与 Scurm 流程结合教学
有任何问题及指教欢迎 与我联络 。
本文首次发表于 Medium (点击查看原始版本),由 ZMediumToMarkdown 提供自动转换与同步技术。