分享程式代碼相關筆記
目前文章總數:182 篇
最後更新:2025年 05月 31日
OpenProject官網連結
OpenProject 文件手冊
OpenProject is free and open source software for classical as well as agile project management to support your team along the entire project life-cycle. OpenProject is available in more than 30 languages.
OpenProject is licensed under GNU GPL V3. The source code is freely published on GitHub. We understand free as in free speech. We do offer paid subscriptions for our software.
OpenProject exists since 2011 and is a fork of the deprecated ChiliProject which was a fork of Redmine.
簡單說:OpenProject 是一套免費的專案管理系統,可以用來協助團隊追蹤進度。
※目前 2025 年市面最主流的仍是 Jira ,但是需收費,OpenProject 是一個不錯的免費選擇替換方案
付費方案較多,但是仍有提供免費方案,大型方案付費價格是以每人為單位計算。
方案 | 適用場景 | 價格模式 | 價格 |
---|---|---|---|
Community | 小型團隊、非商業用途 | 免費 | |
Basic | 中小型團隊或部門 | 付費 | 每人每月 5.95 歐 |
Professional | 中大型組織 | 付費 | 每人每月 10.95 歐 |
Premium | 大型企業 | 付費 | 每人每月 15.95 歐 |
Corporate | 大型跨國企業 | 企業定制價格 | 洽談 |
以下功能無論在免費、付費都會提供,在專案管理、追蹤專案開發進度、提供分析報表、文件管理、知識分享,都可以對企業提供很大的幫助
功能 |
---|
項目概述頁面 |
工作包管理 |
甘特圖/時間線 |
基本敏捷看板 |
排程功能 |
會議管理 |
日曆 |
時間追蹤 |
成本管理 |
報表 |
預算管理 |
Bug跟蹤 |
Wiki |
文檔管理 |
論壇 |
自定義字段 |
用戶組與權限 |
工作包模板 |
項目模板 |
個人儀表板 |
全文搜索 |
API接口 |
以下是付費版提供的功能,若有需要可以再深入分析
功能 | Basic | Professional | Premium | Corporate |
---|---|---|---|---|
基準比較 | ✓ | ✓ | ✓ | ✓ |
狀態看板 (看板) | ✓ | ✓ | ✓ | ✓ |
團隊看板 | ✓ | ✓ | ✓ | ✓ |
版本看板 | ✓ | ✓ | ✓ | ✓ |
子項目看板 | ✓ | ✓ | ✓ | ✓ |
工作分解結構 | ✓ | ✓ | ✓ | ✓ |
團隊規劃器 | ✓ | ✓ | ✓ | ✓ |
與外部用戶共享工作包 | ✓ | ✓ | ✓ | ✓ |
自定義主題和標誌 | ✓ | ✓ | ✓ | ✓ |
項目概述頁面圖表 | ✓ | ✓ | ✓ | ✓ |
智能工作流程與自定義操作按鈕 | ✓ | ✓ | ✓ | ✓ |
日期提醒 | ✓ | ✓ | ✓ | ✓ |
工作包唯讀模式 | ✓ | ✓ | ✓ | ✓ |
LDAP認證 | ✓ | ✓ | ✓ | ✓ |
雙因素認證 | ✓ | ✓ | ✓ | ✓ |
安全警報 | ✓ | ✓ | ✓ | ✓ |
OneDrive/SharePoint整合 | ✓ | ✓ | ✓ | ✓ |
LDAP用戶和組同步 | ✓ | ✓ | ✓ | |
單點登錄 (SSO) | ✓ | ✓ | ✓ |
基本上免費版,提供的服務有限,要自行從網路中搜尋、詢問AI,獲取相關資源。
EX: 安裝異常、如何使用某些功能…
支持項目 | Community | Basic | Professional | Premium | Corporate |
---|---|---|---|---|---|
支持渠道 | 社區論壇 | 票務系統 | 票務系統+電話 | 票務系統+電話+遠程支持 | 票務系統+電話+遠程+現場支持 |
服務時間 | 週一至週五 9:30-16:00 CET |
週一至週五 9:30-17:00 CET |
週一至週五 9:30-17:30 CET |
週一至週五 9:00-18:00 CET |
定制 |
關鍵事件響應時間 | 8小時 | 6小時 | 2小時 | 2小時 | 定制 |
主要事件響應時間 | 盡力而為 | 12小時 | 6小時 | 6小時 | 定制 |
次要事件響應時間 | 盡力而為 | 48小時 | 24小時 | 24小時 | 定制 |
指定支持聯絡人 | 1人 | 3人 | 8人 | 更多 | 更多 |
個人化入職經理 | ✓ | ✓ | ✓ | ||
優先開發和升級 | ✓ | ✓ |
官網安裝指南資訊,有建議安裝需求:
以下是最低限制:
Minimum Hardware Requirements
CPU: Quad Core CPU (>= 2ghz)
Memory: 4096 MB
Free disk space: 20 GB
This is for a single server running OpenProject for up to 200 total users. Depending on your number of concurrent users, these requirements might vary drastically.
1. 記憶體 4096 MB |
2. 最小 CPU 2 核心 |
2. 20GB 硬碟 |
另外,官方也給了自行安裝免費 Community 有以下使用者數量對應配置 (200以下, 500以上, 1500以上)
這邊會用官方教學的方式,docker-compose.yml 的方式安裝
但如果直接照上面的做會遇到一些問題,後續會解釋,先進入自己 Ubuntu 目錄下執行以下,抓取 Source
git clone https://github.com/opf/openproject-deploy --depth=1 --branch=stable/15 openproject
資料結構應會如圖:
接著進行環境變數的複製
cp .env.example .env
這邊都用 WinScp 操作,也可以用 Nano 或 vim 自己擅長的方式進行,開啟檔案
進入後,官方會提供預設的參數,如下:
輸入以下指令拉取最新 image
OPENPROJECT_HTTPS=false docker-compose pull
完成後輸入以下指令,關閉 Https ,並且我們是內部網路使用
OPENPROJECT_HTTPS=false docker-compose up -d --build
安裝完成後,進入 portainer 可以觀察到,所有的容器都是透過 proxy 容器做代理,再讓使用者對 web_1 容器訪問
依照自己機器的位置,輸入對應 IP + 8080 可以看到網站已經啟動
http://192.168.51.93:8080
在 setp4. 的時候,有編輯 env 參數的地方,通常 8080 都會被占用,這時就需要換 Port 號
進行添加自己想要提供訪問的 Port 號,localhost 的地方也可以改成明確的內部 IP 位置
接著要編輯 docker-compose.yml ,找出 OPENPROJECT_HOST__NAME 將 8080 改為 3535(這邊範例用的 Port)
依次輸入以下,如果已經安裝過的,要輸入 docker-compose down 將所有容器移除。
docker-compose down
PORT=3535 OPENPROJECT_HTTPS=false docker-compose pull
PORT=3535 OPENPROJECT_HTTPS=false docker-compose up -d --build
用新的 Port 號,就可以正常訪問了
http://192.168.51.93:3535
以下是調整過 Port 號,微調整官方的 docker-compose.yml ,也是啟用 port 3535 的.yml 檔案
# 定義 Docker 網絡,前端和後端分離以提高安全性
networks:
frontend: # 前端網絡,用於連接代理服務器和web服務
backend: # 後端網絡,用於內部服務之間的通信
# 定義持久化存儲卷
volumes:
pgdata: # PostgreSQL 資料庫數據存儲
opdata: # OpenProject 資產存儲
# 定義錨點(anchors),用於在YAML中復用配置
x-op-restart-policy: &restart_policy
restart: unless-stopped # 容器自動重啟策略,除非手動停止
x-op-image: &image
image: openproject/openproject:${TAG:-15-slim} # 使用的鏡像,預設為15-slim版本
# 定義基本應用配置,所有OpenProject服務都會繼承這個配置
x-op-app: &app
<<: [*image, *restart_policy] # 引用前面定義的image和restart_policy
environment:
# HTTPS相關設置
OPENPROJECT_HTTPS: "${OPENPROJECT_HTTPS:-false}" # 是否啟用HTTPS,預設為true
OPENPROJECT_HOST__NAME: "${OPENPROJECT_HOST__NAME:-localhost:3535}" # 主機名,已修改為3535端口
OPENPROJECT_HSTS: "${OPENPROJECT_HSTS:-true}" # HTTP嚴格傳輸安全,預設啟用
# 緩存和資料庫設置
RAILS_CACHE_STORE: "memcache" # 使用memcached作為緩存
OPENPROJECT_CACHE__MEMCACHE__SERVER: "cache:11211" # memcached服務地址和端口
OPENPROJECT_RAILS__RELATIVE__URL__ROOT: "${OPENPROJECT_RAILS__RELATIVE__URL__ROOT:-}" # 相對URL根路徑,如果部署在子路徑
DATABASE_URL: "${DATABASE_URL:-postgres://postgres:p4ssw0rd@db/openproject?pool=20&encoding=unicode&reconnect=true}" # 資料庫連接URL
# 執行緒配置
RAILS_MIN_THREADS: ${RAILS_MIN_THREADS:-4} # 最小執行緒數
RAILS_MAX_THREADS: ${RAILS_MAX_THREADS:-16} # 最大執行緒數
# 郵件設置
IMAP_ENABLED: "${IMAP_ENABLED:-false}" # 是否啟用郵件接收功能,預設關閉
volumes:
- "${OPDATA:-opdata}:/var/openproject/assets" # 掛載資產存儲卷
# 定義具體服務
services:
# PostgreSQL 資料庫服務
db:
image: postgres:13 # 使用PostgreSQL 13版本
<<: *restart_policy
stop_grace_period: "3s" # 優雅停止時間
volumes:
- "${PGDATA:-pgdata}:/var/lib/postgresql/data" # 掛載資料庫數據卷
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-p4ssw0rd} # 資料庫密碼
POSTGRES_DB: openproject # 資料庫名稱
networks:
- backend # 連接到後端網絡
# Memcached 緩存服務
cache:
image: memcached
<<: *restart_policy
networks:
- backend
# Nginx代理服務
proxy:
build:
context: ./proxy
args:
APP_HOST: web # 指定應用主機為web服務
image: openproject/proxy
<<: *restart_policy
ports:
- "${PORT:-3535}:80" # 將容器的80端口映射到主機的3535端口,已修改
depends_on:
- web # 依賴web服務
networks:
- frontend # 連接到前端網絡
# OpenProject Web服務
web:
<<: *app
command: "./docker/prod/web" # 啟動命令
networks:
- frontend # 連接到前端網絡
- backend # 連接到後端網絡
depends_on:
- db
- cache
- seeder
labels:
- autoheal=true # 啟用自動修復標籤
healthcheck: # 健康檢查配置
test: ["CMD", "curl", "-f", "http://localhost:8080${OPENPROJECT_RAILS__RELATIVE__URL__ROOT:-}/health_checks/default"]
interval: 10s
timeout: 3s
retries: 3
start_period: 30s
# 自動修復服務,用於重啟不健康的容器
autoheal:
image: willfarrell/autoheal:1.2.0
volumes:
- "/var/run/docker.sock:/var/run/docker.sock" # 掛載Docker socket以控制容器
environment:
AUTOHEAL_CONTAINER_LABEL: autoheal # 要監控的容器標籤
AUTOHEAL_START_PERIOD: 600 # 啟動後等待時間(秒)
AUTOHEAL_INTERVAL: 30 # 檢查間隔(秒)
# 後台工作服務,處理異步任務
worker:
<<: *app
command: "./docker/prod/worker"
networks:
- backend
depends_on:
- db
- cache
- seeder
# 計劃任務服務,處理定時任務
cron:
<<: *app
command: "./docker/prod/cron"
networks:
- backend
depends_on:
- db
- cache
- seeder
# 資料填充服務,負責初始化資料
seeder:
<<: *app
command: "./docker/prod/seeder"
restart: on-failure # 只在失敗時重啟
networks:
- backend
官方給的說明照著 docker-compose.yml 安裝後,啟動的預設帳號密碼都是 admin
會遇到無法登入的問題,這裡提供 2 種解法:
解法1 : 自己建立 admin 帳號 |
解法2 : 解決 volumn 錯誤,不應使用官方預設的值(編輯 .env 重裝整個過程) |
在 WebUI 上,選擇建立帳號,建立一個 admin (可以自己定義)
輸入以下進入資料庫
docker exec -it openproject_db_1 psql -U postgres -d openproject
SQL 語法為以下,將 login 替換成自己剛剛建立的帳號
SELECT id, login, admin, status FROM users WHERE login = 'your_username';
這邊用 admin 建立,因此如下
SELECT id, login, admin, status FROM users WHERE login = 'admin';
查詢後可以看到,有剛剛建立的帳號
SQL 語法為以下,將 login 替換成自己剛剛建立的帳號,這裡是將權權限提高
UPDATE users SET admin = true WHERE login = 'admin';
SQL 語法為以下,將 login 替換成自己剛剛建立的帳號,這裡是將啟用狀態設為啟用
UPDATE users SET status = 1 WHERE login = 'admin';
最後退出編輯 SQL 模式
\q
接著就可以從 WebUI 正常登入的,這種方式預設會提供選擇語言。但不提供導覽。
※視為已經有登入過
http://192.168.51.93:3535
解法2 移除所有容器重建,是另一種解法,一樣需編輯 .env 的檔案
可以看到以下的參數值必須移除
移除後如下:
然後移除所有容器,再次重新啟動
docker-compose down
PORT=3535 OPENPROJECT_HTTPS=false docker-compose pull
PORT=3535 OPENPROJECT_HTTPS=false docker-compose up -d --build
接著就可以從 WebUI 正常登入的,強制第一次登入要更換密碼
原理是
http://192.168.51.93:3535
並且會提供首次使用的導覽說明
有很多人使用官方文件安裝,但無法正常登入,最終有反饋此解法