开源项目管理工具Plane

news2024/9/28 21:20:57

在这里插入图片描述

本文软件由网友 不长到一百四誓不改名 推荐,不过这次是在他推荐之前,就已经完成了的 🙂

什么是 Plane ?

Plane 是一个简单的、可扩展的、开源的项目和产品管理工具。它允许用户从一个基本的任务跟踪工具开始,逐步采用各种项目管理框架,如 AgileWaterfall 等。

命令行安装

在群晖上以 Docker 方式安装。

老苏折腾时,latest 对应 0.7

新建安装目录

# 新建文件夹 plane 和 子目录
mkdir -p /volume1/docker/plane/{pgdata,redisdata,uploads}

# 进入 plane 目录
cd /volume1/docker/plane

env.txt

官方的提供了 .env.example 文件,地址在:https://github.com/makeplane/plane/blob/develop/.env.example,你可以在本地复制粘贴生成后,上传到 plane 目录,也可以直接用下面的命令下载

# 下载 env.txt
wget -O env.txt https://raw.githubusercontent.com/makeplane/plane/develop/.env.example

# 下不动的话可以加个代理
wget -O env.txt https://ghproxy.com/raw.githubusercontent.com/makeplane/plane/develop/.env.example

虽然参数很多,但是要跑起来,需要修改的并不多,原本的内容老苏只填了 email 部分,因为要通过邮件邀请团队成员

# Email Settings
EMAIL_HOST=smtp.88.com
EMAIL_HOST_USER=wbsu2003@88.com
EMAIL_HOST_PASSWORD=<第三方邮件客户端密码>
EMAIL_PORT=25
EMAIL_FROM="laosu <wbsu2003@88.com>"

其他的部分未做修改,但是要跑起来,还需要在文件的最后面加上 3 行内容

# Auto generated and Required that will be generated from setup.sh
NEXT_PUBLIC_API_BASE_URL=https://plane.laosu.ml:444
WEB_URL=https://plane.laosu.ml:444
SECRET_KEY=IVBfieeGdbKOIXC1a+Pqb989ju41Swyv6sxNUZLv6ZA=
  • SECRET_KEY:可以用命令 openssl rand -base64 32 来生成;

在这里插入图片描述

  • NEXT_PUBLIC_API_BASE_URL:后端 API 的地址;
  • WEB_URL:前端网页地址;

以上两个地址,老苏曾经尝试过用局域网 IP + 端口,但在登录时会显示 404 错误,实际地址变成了 http://192.168.0.197:3639/api/api/users/me/, 显然应该是多了一层 api,不确定是不是 bug,用域名或者干脆留空的话,是可以正常登录的

# Default Creds
DEFAULT_EMAIL="captain@plane.so"
DEFAULT_PASSWORD="password123"

设置的是缺省的用户和密码,你可以改出你自己的

nginx.conf

将下面的内容保存为 nginx.conf

upstream plane {
    server plane-nginx:80;
}

error_log /var/log/nginx/error.log;

server {
    listen       80;
    root   /www/data/;
    access_log /var/log/nginx/access.log;
    location / {
        proxy_pass http://plane-web:3000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /api/ {
        proxy_pass http://plane-api:8000/api/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /uploads/ {
        proxy_pass http://plane-minio:9000/uploads/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

docker-compose.yml

官方的示例:https://github.com/makeplane/plane/blob/develop/docker-compose-hub.yml

你可以下载下来自己修改

# 下载 docker-compose.yml
wget -O docker-compose.yml https://raw.githubusercontent.com/makeplane/plane/develop/docker-compose-hub.yml

# 下不动的话可以加个代理
wget -O docker-compose.yml https://ghproxy.com/raw.githubusercontent.com/makeplane/plane/develop/docker-compose-hub.yml

也可以直接将下面老苏修改后的内容保存为 docker-compose.yml 文件

version: "3.8"

services:
  plane-web:
    container_name: plane-frontend
    image: makeplane/plane-frontend:latest
    restart: always
    command: /usr/local/bin/start.sh
    environment:
      NEXT_PUBLIC_API_BASE_URL: ${NEXT_PUBLIC_API_BASE_URL}
      NEXT_PUBLIC_GOOGLE_CLIENTID: 0
      NEXT_PUBLIC_GITHUB_APP_NAME: 0
      NEXT_PUBLIC_GITHUB_ID: 0
      NEXT_PUBLIC_SENTRY_DSN: 0
      NEXT_PUBLIC_ENABLE_OAUTH: 0
      NEXT_PUBLIC_ENABLE_SENTRY: 0
    #ports:
    #  - 3636:3000

  plane-api:
    container_name: plane-backend
    image: makeplane/plane-backend:latest
    restart: always
    command: ./bin/takeoff
    environment:
      DJANGO_SETTINGS_MODULE: plane.settings.production
      DATABASE_URL: postgres://${PGUSER}:${PGPASSWORD}@${PGHOST}:5432/${PGDATABASE}
      REDIS_URL: redis://plane-redis:6379/
      EMAIL_HOST: ${EMAIL_HOST}
      EMAIL_HOST_USER: ${EMAIL_HOST_USER}
      EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD}
      EMAIL_PORT: ${EMAIL_PORT}
      EMAIL_FROM: ${EMAIL_FROM}
      AWS_REGION: ${AWS_REGION}
      AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
      AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
      AWS_S3_BUCKET_NAME: ${AWS_S3_BUCKET_NAME}
      FILE_SIZE_LIMIT: ${FILE_SIZE_LIMIT}
      WEB_URL: ${WEB_URL}
      GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET}
      DISABLE_COLLECTSTATIC: 1
      DOCKERIZED: 1
      OPENAI_API_KEY: ${OPENAI_API_KEY}
      GPT_ENGINE: ${GPT_ENGINE}
      SECRET_KEY: ${SECRET_KEY}
      DEFAULT_EMAIL: ${DEFAULT_EMAIL}
      DEFAULT_PASSWORD: ${DEFAULT_PASSWORD}
      USE_MINIO: 1
    depends_on:
      - plane-db
      - plane-redis
    #ports:
    #  - 3637:8000

  plane-worker:
    container_name: plane-worker
    image: makeplane/plane-worker:latest
    restart: always
    command: ./bin/worker
    environment:
      DJANGO_SETTINGS_MODULE: plane.settings.production
      DATABASE_URL: postgres://${PGUSER}:${PGPASSWORD}@${PGHOST}:5432/${PGDATABASE}
      REDIS_URL: redis://plane-redis:6379/
      EMAIL_HOST: ${EMAIL_HOST}
      EMAIL_HOST_USER: ${EMAIL_HOST_USER}
      EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD}
      EMAIL_PORT: ${EMAIL_PORT}
      EMAIL_FROM: ${EMAIL_FROM}
      AWS_REGION: ${AWS_REGION}
      AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
      AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
      AWS_S3_BUCKET_NAME: ${AWS_S3_BUCKET_NAME}
      FILE_SIZE_LIMIT: ${FILE_SIZE_LIMIT}
      WEB_URL: ${WEB_URL}
      GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET}
      DISABLE_COLLECTSTATIC: 1
      DOCKERIZED: 1
      OPENAI_API_KEY: ${OPENAI_API_KEY}
      GPT_ENGINE: ${GPT_ENGINE}
      SECRET_KEY: ${SECRET_KEY}
      DEFAULT_EMAIL: ${DEFAULT_EMAIL}
      DEFAULT_PASSWORD: ${DEFAULT_PASSWORD}
      USE_MINIO: 1
    depends_on:
      - plane-api
      - plane-db
      - plane-redis

  plane-db:
    container_name: plane-db
    image: postgres:14
    restart: always
    command: postgres -c 'max_connections=1000'
    environment:
      POSTGRES_USER: ${PGUSER}
      POSTGRES_DB: ${PGDATABASE}
      POSTGRES_PASSWORD: ${PGPASSWORD}
    volumes:
      - ./pgdata:/var/lib/postgresql/data

  plane-redis:
    container_name: plane-redis
    image: redis:6.2
    restart: always
    volumes:
      - ./redisdata:/data

  plane-minio:
    container_name: plane-minio
    image: minio/minio
    volumes:
      - ./uploads:/export
    environment:
      MINIO_ROOT_USER: ${AWS_ACCESS_KEY_ID}
      MINIO_ROOT_PASSWORD: ${AWS_SECRET_ACCESS_KEY}
    command: server /export --console-address ":9090"
    #ports:
    #  - 3638:9000

  createbuckets:
    image: minio/mc
    depends_on:
      - plane-minio
    entrypoint: >
      /bin/sh -c " /usr/bin/mc config host add plane-minio http://plane-minio:9000 \$AWS_ACCESS_KEY_ID \$AWS_SECRET_ACCESS_KEY; /usr/bin/mc mb plane-minio/\$AWS_S3_BUCKET_NAME; /usr/bin/mc anonymous set download plane-minio/\$AWS_S3_BUCKET_NAME; exit 0; "

  plane-nginx:
    container_name: plane-nginx
    image: nginx
    ports:  
      - 3639:80
    volumes:  
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    depends_on:
      - plane-web
      - plane-api

然后执行下面的命令

# 新建文件夹 plane 和 子目录
mkdir -p /volume1/docker/plane/{pgdata,redisdata,uploads}

# 进入 plane 目录
cd /volume1/docker/plane

# 将 docker-compose.yml、env.txt、nginx.conf 放入当前目录

# 一键运行  
docker-compose --env-file env.txt up -d

在这里插入图片描述

如果没意外的话,除了 plane_createbuckets_1 外,另外 7 个容器应该都是正常启动的

在这里插入图片描述

老苏将用到的 env.txtconfig.conf docker-compose.yml 文件放到了 https://github.com/wbsu2003/synology/tree/main/Plane,方便大家对比着看

运行

在浏览器中输入 https://plane.laosu.ml:444 就能看到登录界面

在这里插入图片描述

默认用户:captain@plane.so,密码为:password123

需要设置角色

在这里插入图片描述

创建工作区

在这里插入图片描述

邀请成员

输入要邀请的人员

在这里插入图片描述

可以一次输入多个邮件地址

在这里插入图片描述

接下来的提示界面看看就可以了

在这里插入图片描述

完成后就可以看到 Dashboard 界面了

在这里插入图片描述

团队成员

如果邮件设置没问题,受邀请的成员很快会收到邮件

在这里插入图片描述

在这里插入图片描述

但是实际上地址存在问题,获取的地址是 http:///workspace-member-invitation/1a927b8e-ed1b-4f16-8383-07eee3cf1392?email=wbsu2003@hotmail.com

需要自行添加域名后变成 https://plane.laosu.ml:444/workspace-member-invitation/1a927b8e-ed1b-4f16-8383-07eee3cf1392?email=wbsu2003@hotmail.com

可以选择接受或者忽略

在这里插入图片描述

尚未接受邀请的成员会有 Pending 标志

在这里插入图片描述

接下来就可以开始建项目( Create Project),功能就留给需要的人自己摸索吧

在这里插入图片描述

遗留问题

  1. 就是上面提到的邮件的邀请链接问题;
  2. 上传图片没解决;

不知道是设置问题还是软件本身的 bug

参考文档

makeplane/plane: Plane helps you track your issues, epics, and product roadmaps in the simplest way possible.
地址:https://github.com/makeplane/plane

Plane - The open source project management tool
地址:https://plane.so/

Plane Documentation
地址:https://docs.plane.so/

Plane - Open-source project planning tool to streamline issues, sprints, and product roadmaps. (W.I.P., Linear/JIRA Alternative) - New release update v0.2-dev 🚀 🍰 : selfhosted
地址:https://www.reddit.com/r/selfhosted/comments/10q7h1z/plane_opensource_project_planning_tool_to/

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

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

相关文章

初步学习使用SpringBoot框架

对于SpringBoot框架介绍大家可以看看这个这篇文章&#xff0c;SpringBoot优缺点以及如何安装使用 以下我是按照老师给的安装方法进行安装使用SpringBoot框架&#xff1a; 大家安装SpringBoot框架时候&#xff0c;最好安装3.0以下的&#xff0c;不然需要对应较高版本的JDK版本&…

导航栏,封装Api接口,数据处理 过滤器,Echarts使用(二)

文章目录 一、左侧导航栏El的元素颜色重写导航开启router模式导航栏折叠&#xff08;兄弟页面传数据 借助父亲&#xff09; 二、封装请求的Api接口接口地址管理配置跨域 三、数据处理 过滤器四、使用EchartsDemo: 使用 ECharts项目中使用Echarts 接上篇&#xff08;一&#xff…

时序预测 | MATLAB实现BO-NARX贝叶斯优化非线性自回归外生模型股票价格预测

时序预测 | MATLAB实现BO-NARX贝叶斯优化非线性自回归外生模型股票价格预测 目录 时序预测 | MATLAB实现BO-NARX贝叶斯优化非线性自回归外生模型股票价格预测效果一览基本介绍研究过程程序设计参考资料效果一览

好视力、南卡、欧普护眼台灯哪个护眼效果更出色?看完这篇测评你就明白了

现在的孩子&#xff0c;学习任务都非常繁重&#xff0c;想想我们小时候基本上没什么作业&#xff0c;但是现在的孩子感觉每天都有做不完的功课和试卷&#xff0c;除此之外&#xff0c;还有家长给报的各种学习班、技艺班&#xff0c;为了一个更好的前途&#xff0c;这也是没办法…

office 2003 default regedit

office版本这么多&#xff0c;感觉还是2003简单&#xff0c;唉 "D:\Microsoft-Office-2003\OFFICE11\EXCEL.EXE" /regserver "D:\Microsoft-Office-2003\OFFICE11\WINPROJ.EXE" /regserver "D:\Microsoft-Office-2003\OFFICE11\POWERPNT.exe" /r…

IDEA恢复误删除的文件

idea将删除的文件放在idea文件缓存中&#xff0c;文件的更改等信息都放在这个缓存中&#xff0c;所以短时间内删除的文件可以尝试恢复。

每日一面系列-spring中@Autowired 和 @Resource 区别?

Autowired注解是由Spring提供的&#xff0c;它可以用来对构造方法、成员变量及方法参数进行标注&#xff0c;它能够根据对象类型完成自动注入&#xff0c;代码如下。 public class Service {// 构造方法注入 Autowired public Service(Service service) { this.s…

0122 绪论

目录 1.绪论 1.1数据结构的基本概念 1.1部分习题 1.2算法和算法评价 1.2部分习题 1.绪论 1.1数据结构的基本概念 数据&#xff1a;信息的载体 数据元素&#xff1a;数据的基本单位&#xff0c;由若干数据项组成 数据项&#xff1a;构成数据元素的不可分割的最小单位 数…

leetcode-060-排列序列

题目及测试 package pid060; /* 60. 排列序列 给出集合 [1,2,3,...,n]&#xff0c;其所有元素共有 n! 种排列。按大小顺序列出所有排列情况&#xff0c;并一一标记&#xff0c;当 n 3 时, 所有排列如下&#xff1a;"123" "132" "213" "23…

银行数字化转型导师坚鹏:银行数字化营销面临的5大痛点

银行数字化营销在助力银行业实现转型与发展的同时&#xff0c;也面临一些痛点问题。以下是银行数字化营销必须解决的五大痛点&#xff1a; 1) 数据质量和完整性&#xff1a;银行在数字化营销中需要利用大数据技术&#xff0c;但数据质量和完整性仍然是一个关键问题。银行需要确…

最强的″矛″ 验关键的″盾″|赛宁数字孪生靶场验证湖南工业互联网安全

​​为深入推动“智赋万企”数字安全屏障工程&#xff0c;由工业和信息化部网络安全管理局指导&#xff0c;湖南省工信厅和湖南省通管局主办的“铸网—2023”湖南省工业互联网企业网络安全实战攻防演练&#xff0c;于近日圆满收官。赛宁网安以数字孪生靶场为基础&#xff0c;构…

SpringMVC (八) 拦截器+文件上传下载

学习回顾&#xff1a;SpringMVC &#xff08;七&#xff09; Ajax研究 概述 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。 过滤器与拦截器的区别&#xff1a;拦截器是AOP思想的…

实现窗户特效的Unity Shader解析

本文将详细介绍一种使用Unity Shader实现窗户特效的方法。通过分析代码&#xff0c;我们将解释每个关键部分的作用&#xff0c;以及如何将其组合在一起以实现逼真的窗户效果。希望本文能为Shader编程初学者和Unity开发者提供一些有用的指导。 引言&#xff1a; 在游戏和虚拟现实…

taro 小程序自定义地图选点功能

效果&#xff1a; 1、添加中心点 icon, 保证icon 处于地图中间 .map-box {width: 100vw;height: 36vh;position: relative;// 中心icon.center-icon-box {position: absolute;top: calc(50% - 30rpx); // 保证icon 处于地图中心点left: 50%;transform: translate(-50%, -50%)…

JavaScript内存管理和闭包

1 JavaScript内存管理 2 垃圾回收机制算法 3 闭包的概念理解 4 闭包的形成过程 5 闭包的内存泄漏 一个函数只有调用了外部的变量&#xff0c;才算是闭包。函数内和函数外会写成闭包。 深入JS闭包-闭包的访问过程 <!DOCTYPE html> <html lang"en"> &l…

Jenkins用户权限设置和运行节点配置实战

这里写目录标题 一、Jenkins用户权限设置实战1、用户权限配置2、用户权限分配 二、Jenkins运行节点配置实战1、增加运行节点的好处2、实战B-1:添加Jenkins运行节点实战1、相关字段说明&#xff1a;2、SSH连接方式 实战B-2:配置不同类型的节点-Python 节点实战B-3:配置不同类型的…

STM32F4 读/写 EEPROM【EEPROM、串口显示】

将姓名&#xff08;拼音&#xff09;学号写入EEPROM并在启动时通过串口显示 本篇博客将介绍如何使用STM32F4开发板将姓名&#xff08;拼音&#xff09;学号写入EEPROM&#xff0c;并在启动时通过串口显示。我们将使用核心实现函数EEPROM_WR_Test来完成这个功能。 准备工作 在…

Dubbo【Dubbo实战(用户更新业务消费者实现、用户删除业务消费者实现、复习内容) 】(六)-全面详解(学习总结---从入门到深化)

目录 Dubbo实战_用户更新业务消费者实现 Dubbo实战_用户删除业务消费者实现 复习内容&#xff1a; Dubbo实战_用户更新业务消费者实现 在Consumer中调用更新用户业务 /*** 根据用户id修改用户名字* param users* return*/Integer updateUsers(User users);/*** 根据用户id查…

Apollo分布式配置中心(二)

上一篇&#xff1a; 上一篇已经知道Apollo是什么东西了&#xff0c;接下来实践一下 目录 一、创建应用 1、 新增配置 2、创建Namespace ​3、同步配置 4、灰度发布 添加灰度配置项 ​编辑 配置灰度规则 二、删除应用、集群、appNamespace 三、springBoot整合Apollo …

JAVA设计模式介绍

一、什么是设计模式 设计模式&#xff08;Design pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计…