领先的项目协作管理软件OpenProject

在这里插入图片描述

本文软件由网友 不长到一百四誓不改名 推荐;

什么是 OpenProject ?

OpenProject 是一个开源、基于 Web 的项目管理系统,提供了免费的社区版和收费的企业版。OpenProject 拥有完善的文档,API,及丰富的功能,可以为项目团队提供整个项目生命周期的支持,因而成为企业的一个很好的选择。

前言

使用 Docker 安装 OpenProject 有两种方式:一种是多容器方式,适合生产环境,另一种是单容器方式,安装简单但不适应于生产环境

群晖本身并不适合作为生产环境的服务器,所以这次老苏选择了单容器方式安装,用于体验功能还是可以的

其实两种方式老苏都尝试了,但是在日常运行的小机器上均失败了,老苏猜测可能是两个原因:

  • 机器内存太小

熟悉老苏的读者都知道,老苏日常安装的小机器只有 4G 内存,很多时候安装失败,可能都是这个原因导致的;

  • 无法生成足够的随机数

老苏在跟踪容器的日志时,发现有一条👇下面这样的错误

rake aborted!  
failed to get urandom

最近几个基于 Ruby 的项目都是这个错误,所以老苏咨询了 ChatGPT,它给出的结论是:因为系统缺乏随机性,无法生成足够的随机数。

老苏用 ChatGPT 给的命令查了一下群晖系统的熵池状态,按照 ChatGPT 的说法,如果该值小于 1000,则表示熵池的可用熵值不足,就可能会导致 failed to get urandom 错误。

cat /proc/sys/kernel/random/entropy_avail

在日常的小机器上,这个值只有 130

而在另一台上,这个值超过了 1000

在这里插入图片描述

至于原因,老苏猜测可能跟系统内核有关系,这也让老苏联想到了,原本基于 Apache 的镜像总会遇到的随机数错误: Function not implemented: AH00141: Could not initialize random number generator

虽然跟ChatGPT 经过了多轮交互,但是给的方案并不能解决这个问题,它提出的办法是通过增加系统负载来增加系统熵池的可用熵值,从而有助于解决 failed to get urandom 错误。

例如:

# 安装群晖诊断工具 Diagnosis Tool
sudo synogear install

# 在 60 秒内使用 4 个工作进程以随机写入方式写入 4GB 的数据。
sudo fio --name=test --ioengine=sync --rw=randwrite --bs=4k --numjobs=4 --size=4G --runtime=60 --time_based

但是老苏发现并没有什么用,和之前的 AH00141 一样,最后还是只能换机器安装

安装

终于到了安装环节了,还是在群晖上以 Docker 方式安装。

在注册表中搜索 openproject ,选择第一个 openproject/community,版本选择 12

之所以选 12 而不是更高版本,是因为在这里,12 相当于往常使用的 latest

docker 文件夹中,创建一个新文件夹 openproject,并在其中建两个子文件夹,分别是 assetspgdata

文件夹装载路径说明
docker/openproject/assets/var/openproject/assets存放资源,例如上传的附件等
docker/openproject/pgdata/var/openproject/pgdata存放数据库

端口

本地端口不冲突就行,不确定的话可以用命令查一下

# 查看端口占用
netstat -tunlp | grep 端口号
本地端口容器端口
709080

默认情况下,容器对外暴露了 PostgreSQL数据库端口5432

老苏觉得没必要,只留下了 Web 端口

环境

可变
OPENPROJECT_HOST__NAMEurl 地址,可以是 IP 也可以是域名
OPENPROJECT_HTTPS是否使用 https 协议
OPENPROJECT_SECRET_KEY_BASE密码,可以用openssl rand -hex 64 生成

SECRET_KEY 可以用 Vaultwarden 的密码生成器,也可以用 openssl rand -hex 64

老苏只修改了几个必要的环境变量

更多的环境变量,可以去看官方文档:https://www.openproject.org/docs/installation-and-operations/configuration/environment/

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

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

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

# 运行容器(局域网)
docker run -d \
   --restart unless-stopped \
   --name openproject \
   -p 7090:80 \
   -v $(pwd)/pgdata:/var/openproject/pgdata \
   -v $(pwd)/assets:/var/openproject/assets \
   -e OPENPROJECT_HOST__NAME=192.168.0.199:7090 \
   -e OPENPROJECT_HTTPS=false \
   -e OPENPROJECT_SECRET_KEY_BASE=$(openssl rand -hex 64) \
   openproject/community:12

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

version: '3'

services:
  cherry:
    image: openproject/community:12
    container_name: openproject
    restart: unless-stopped
    ports:
      - 7090:80
    volumes:
      - ./pgdata:/var/openproject/pgdata
      - ./assets:/var/openproject/assets
    environment:  
      - OPENPROJECT_HOST__NAME=192.168.0.199:7090 
      - OPENPROJECT_HTTPS=false
      - OPENPROJECT_SECRET_KEY_BASE=cb160b11cfaa0419cc979050194fbe974e5151cb11a15241679618d1c12338aea29d00479841376bea0204a3ef3be74fb9c3adb6f0739ddcd712cf1ef7efdc3b

然后执行下面的命令

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

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

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

第一次启动会花费一些时间

CPU 占用会先飙升,然后逐渐降低

在这里插入图片描述

但是内存会逐渐上升

当日志中看到 Listening on http://0.0.0.0:8080 时,就可以开始访问了

在这里插入图片描述

在浏览器中输入 http://群晖IP:7090 就能看到主界面

在这里插入图片描述

点右上角登录

默认的账号:admin,密码:admin

在这里插入图片描述

第一次需要修改密码

可以选择简体中文

跟着设置向导,完成之后就可以开始使用了

系统提供了演示两个项目

在这里插入图片描述

其中 Demo project 是经典项目管理,而 Scrum project 则是敏捷管理

反向代理

假设我们使用域名 https://project.laosu.ml:444

Openproject 的设置

docker cli 为例,需要修改环境变量,其中:

  • OPENPROJECT_HOST__NAME:主机名改为了域名,有端口的也要的带上;
  • OPENPROJECT_HTTPS:要启动 https 协议,所以要设为 true
# 运行容器(互联网)
docker run -d \
   --restart unless-stopped \
   --name openproject \
   -p 7090:80 \
   -v $(pwd)/pgdata:/var/openproject/pgdata \
   -v $(pwd)/assets:/var/openproject/assets \
   -e OPENPROJECT_HOST__NAME=project.laosu.ml:444 \
   -e OPENPROJECT_HTTPS=true \
   -e OPENPROJECT_SECRET_KEY_BASE=$(openssl rand -hex 64) \
   openproject/community:12

当然你已经安装过的话,可以直接编辑、修改环境变量

在这里插入图片描述

npm 的设置

域名局域网地址备注
project.laosu.ml192.168.0.199:7090Openproject 访问地址

npm 中的设置

SSL 都勾选了

在这里插入图片描述

如果只是这么设置,可以正常打开 https://project.laosu.ml:444,但是在登录时会显示错误

  • 英文会显示👇
[Error 422] Unable to verify Cross-Site Request Forgery token. Did you try to submit data on multiple browsers or tabs? Please close all tabs and try again.
  • 中文会显示👇
[错误 422] 无法验证跨站请求伪造令牌。您是否曾尝试在多个浏览器或选项卡上提交数据?请关闭所有选项卡并重试。

所以老苏又掏出了那段百试百灵的 截端口 代码放入了 Advanced

location / {  
    proxy_set_header Host $host:444;  
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Protocol $scheme;
    proxy_pass  http://192.168.0.199:7090;  
    proxy_redirect http:// https://;  
}

果然问题解决了 😂

参考文档

opf/openproject: OpenProject is the leading open source project management software.
地址:https://github.com/opf/openproject

opf/openproject-deploy: Recipes to deploy OpenProject with Docker, Docker Compose, Kubernetes, etc.
地址:https://github.com/opf/openproject-deploy

OpenProject - open source project management software
地址:https://www.openproject.org/

Install OpenProject with Docker
地址:https://www.openproject.org/docs/installation-and-operations/installation/docker/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STL--stack queue deque

stack 一、stack介绍 stack是一种容器适配器&#xff0c;专门设计用于后进先出&#xff0c;其中元素仅从容器的一端插入和提取 template <class T, class Container deque<T> > class stack; 二、stack接口 函数名称功能说明empty判断容器是否为空size返回容器…

软考--快速掌握七层模型与各种协议的划分

目录 协议族 网络层涉及的协议 传输层涉及的协议 应用层涉及的协议 协议族 认识几个协议族&#xff0c;所谓协议族就是说他不是单一的协议。而是很多协议拼在一起的。 TCP/IP协议族是internet的标准协议族&#xff0c;所以使用广&#xff0c;但是tcp/ip协议族传输效率是比较…

【刷题笔记】不要二+把字符串转换为整数

一、不要二 题目&#xff1a; 牛客网链接&#xff1a;不要二_牛客题霸_牛客网 描述 二货小易有一个W*H的网格盒子&#xff0c;网格的行编号为0~W-1&#xff0c;网格的列编号为0~H-1。每个格子至多可以放一块蛋糕&#xff0c;任意两块蛋糕的欧几里得距离不能等于2。 对…

深度学习技巧应用12-神经网络训练中批归一化的应用

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用12-神经网络训练中批归一化的应用,在深度学习中,批归一化(Batch Normalization,简称BN)是一种重要的技巧,它在许多神经网络中都得到了广泛应用。本文将详细介绍批归一化的原理和应用,并结合PyTorch框架构建一个简…

排队论_M/M/1/inf/inf 问题

例:某修理店只有一一个修理工人&#xff0c;来修理的顾客到达数服从泊松分布&#xff0c;平均每小时4人;修理时间服从负指数分布&#xff0c;平均需6分钟。求: (1)修理店空闲的概率; (2)店内有3个顾客的概率; (3)店内至少有1个顾客的概率; (4)店内顾客的平均数; (5)顾客在店内的…

Android系统启动流程(三)——属性服务

1 属性服务 属性服务的启动在init进程中&#xff0c;init进程初始化的第二阶段初始化中启动了属性服务。 system/core/init/init.cpp int SecondStageMain(int argc, char** argv) {...PropertyInit();...StartPropertyService(&property_fd);...2 启动属性服务 system/…

Vue Emelent-UI表格合并行或列rowspan和colspan的作用

Vue Element-UI的table组件支持合并行或者列&#xff0c;在这里做个简单的学习笔记。 我们可以通过rowspan和colspan来进行单元格合并&#xff0c;那么这两个属性是什么意思呢&#xff0c;通过官方给的demo来探讨下。 上述单元格将行index为奇数的第一列和第二列合并为一个单…

从【连接受限】看Android网络

从连接受限看Android网络 现象摸索从通知开始是Handler发的通知看看NetworkStateTrackerHandler NetworkMonitor做了什么NetworkMonitor是一个状态机CaptivePortalProbeResult从何而来连接受限的直接原因 嗅探是怎样进行的ProbeThread 回过头看看InternalHanderregisterNetwork…

【自然语言处理】【大模型】CodeGeeX:用于代码生成的多语言预训练模型

CodeGeeX&#xff1a;用于代码生成的多语言预训练模型 《CodeGeeX: A Pre-Trained Model for Code Generation with Multilingual Evaluations on HumanEval-X》 论文地址&#xff1a;https://arxiv.org/pdf/2303.17568.pdf 相关博客 【自然语言处理】【大模型】CodeGen&#x…

十分钟教你搭建类似ChatGPT的安卓应用程序

大家好&#xff0c;我是易安&#xff01; Chat GPT 是当今著名的人工智能工具&#xff0c;就像聊天机器人一样。Chat GPT会回答发送给它的所有查询。今天&#xff0c;我将通过集成 OpenAI API (ChatGPT)构建一个简单的类似 ChatGPT 的 android 应用程序&#xff0c;我们可以在其…

C++ MFC调用JS代码获取返回值

C有时候会需要调用JS代码&#xff0c;这对于C来说或者对于国内来说一直是比较蛋疼的问题&#xff0c;主要是资料少&#xff0c;微软提供了一个COM组件&#xff0c;里面包含有JS引擎&#xff0c;这个组件就是&#xff1a;msscript.dll。 此文件在C:\Windows\SysWOW64目录下&…

基于springboot的4S店车辆管理系统(源码等)

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

浅谈osgEarth操控器类的createLocalCoordFrame函数如何将局部坐标系的点转为世界坐标系下的Martix(ENU坐标)

在osgEarth操控器类的EarthManipulator中的如下函数&#xff1a; void EarthManipulator::setLookAt(const osg::Vec3d& center,double azim,double pitch,double range,const osg::Vec3d& posOffset) {setCenter( center );.... //…

10个优秀设计网站盘点

从平面广告设计、包装设计和标志设计到游戏特效&#xff0c;都与我们的生活息息相关。过去&#xff0c;设计师依靠一张图纸和一支笔&#xff0c;但进入数字时代后&#xff0c;设计工作从图纸转移到了电脑上。 各种设计网站和在线设计工具相继衍生&#xff0c;简化了工作步骤&a…

备战花了2个月,春招3轮顺利拿下字节offer

PART1&#xff1a;个人情况简介 菜 J 一枚&#xff0c;本硕都是计算机&#xff08;普通二本&#xff09;&#xff0c;2021 届应届硕士&#xff0c;软件测试方向。个人也比较喜欢看书&#xff0c;技术书之类的都有看&#xff0c;最后下面也会推荐一些经典书籍。 先说一下春招结…

使用宝塔在Linux面板搭建网站,并实现公网远程访问「内网穿透」

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 转载自远程内网穿透的文章&#xff1a;Linux使用宝塔面板搭建网站&#xff0c;并内网穿透实现公网访问 前言 宝塔面板作为简单好用的服务器运维管理面板&#…

【LeetCode】-66. 加一

1. 题目 66. 加一 给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 2. 示例 输入&#xff1a;dig…

【Nodejs】Express实现接口

介绍 Express 是一个第三方模块&#xff0c;用于快速搭建服务器 类似于jquery与DOMExpress 是一个基于 Node.js 平台&#xff0c;快速、开放、极简的 web 开发框架。express保留了http模块的基本API&#xff0c;使用express的时候&#xff0c;也能使用http的APIexpress还额外封…

Vue3学习笔记

我目前接手公司的项目是Vue2&#xff0c;但是马上就要接触Vue3的项目了&#xff0c;把Vue3学习一下 1.Vue 3 1.1 简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09; 耗时2年多、2600次提交、30个RFC、60…

运维——ssh无法登录云服务器

0x00 概述 一般来讲&#xff0c;无法登录ssh的原因挺多&#xff0c;如果无法登录云服务器&#xff0c;则除了要检查ssh端口是否放行&#xff0c;防火墙状态外&#xff0c;还需要检查云服务器web控制台入站规则是否开放了对应端口。如果你前面检查都是正常&#xff0c;那么还需…
最新文章