Category Archives: 工程筆記

Software programming related notes and knowhow.

Redmine建置筆記

想必如果有專案管理需求的人應該常會遇到一個共同的困擾,就是專案一開始的計畫與管控做得還算不錯,但當專案進行到一陣子後,就會開始出現各種分支以及問題,進度也因此而容易滑掉,如果是小團隊還可以隨時開會動態調配,但如果是團隊成員距離比較遠或是專案本身比較複雜的話,開發的進程以及小細節的追蹤就很容易掉棒。也因為如此,市面上才會有各式各樣的專案管控系統,讓參與專案的人員可以有一個共同的環境去得到案子進度的全貌。

今天要介紹的主角Redmine,它就是一個老牌的線上專案管控系統,雖然它的UI框架比較不像當前比較潮的Jira一樣有較高的彈性,但依然是非常好用的管理團隊開發進度的工具,而且如果自行架設的話還可以免費使用呢!

最近因為工作需求而需要研究一下Redmine的架設,雖然以往有使用Redmine經驗,但架設Redmine可以說又是另一種層次上的考驗了,所以在這邊特別把這次研究中成功的案例重點記錄在這邊,希望對有需要的人當作一些參考。

首先,與大多數網路應用程式一樣,架設Redmine系統小編把它分做兩個主要的層面:

  • 系統本身使用的軟體堆疊 – 就是需要那些軟體一起搭配,如何設定串連在一起
    • 架設一個完整的Redmine需要:
      • Unix, Linux, macOS and Windows
      • Ruby on rails
      • 資料庫 (PostgreSQL, MySQL, Microsoft SQL Server, SQLite)
      • 郵件伺服器 (非必要,但通常都會使用)
  • 整個系統是要架設在本地的電腦還是外部伺服器上

以及實際架設所需要使用到的設備(本地或雲端):

  • 本地端的伺服器,電腦,準系統,等等
    • 成本可高可低
    • 需要視使用狀況維護硬體
  • 外部網路託管主機
    • Amazon AWS
    • Google Cloud
    • Microsoft Azura
    • 其他(實際上國內外都有類似主機託管服務,差別只在於需要多少的技術含量可以自己簡單搞定)

由於一開始架設的需求是給內部20人以下的小團隊使用而已,使用率不高也不需要外部可以連結,所以第一個閃過小編的念頭是使用Docker做建置就好,然後如果有外部連線的需求就使用固網IP或是NO-IP達成目的。實際幾次溝通之後,團隊傾向將Redmine架設在外部電腦上,一方面希望減少對硬體維護的需求,但另一方面又希望可以便宜且方便維護。於是小編花了幾天找尋各種可能組合,最後找到了Bitnami以及雲服務商(如: AWS, Google Cloud, Microsoft Azura)等方案。

雖然在實際操作前已經有心理準備,但真正操作下來還是讓我碰到各種突發狀況,所以在這邊特別將各種方案的重點記錄下來,方便日後查找抑或是對各位看官有幫助 🙂

方案的選擇因人而異,最適合運營團隊所能掌握的方案就是算是最佳方案了!

Docker是近幾年來一個滿夯的應用,基本上可以視Docker為虛擬機的一種型態,跟VMware、VirtualBox一樣都是依附在作業系統內的軟體空間,使用者可以將軟體或設定在這些容器(虛擬機)內運行,而不影響原先的作業系統。只不過Docker是更輕量級別的架構,可以透過各種Docker容器的堆疊,建構出希望達到的環境。通常開發者在本機環境開發完成後,將Docker的運行腳本提供給其他人員,便可以在幾個步驟內架設出一樣的環境了,所以非常適合需要大量建構環境的IT人員,或是相關基礎知識含量少的使用者使用,簡單來說就是接近一鍵安裝的那種感覺吧。小編將完整Docker架設的步驟,記錄在Docker實際應用-Redmine專案管理系統建置

Bitnami是一個開源的Web應用專案,在Bitnami官網內可以找到許多已經開發好的應用堆疊,其中也包含這次的主角Redmine,都是已經整合好的套裝堆疊,可以快速導入到適合的環境上做使用。截至這篇文章上傳的時間,我們在Bitnami的官方網站上可以找到以下幾種架設的方式:

  • On the cloud – 在網路上的雲服務系統商建置
    • Amazon AWS (也是這次小編實際使用Bitnami應用的方法)
    • Google Cloud
    • Microsoft Azure
  • Containers – 使用虛擬容器建置
    • Docker (Bitnami Docker與小編在前面的Docker段落介紹的方法類似,但小編沒有實際操作Bitnami Docker的方案所以並沒有驗證過有沒有缺少的步驟)
    • Kubernates
  • On my computer – 在本地電腦建置

基本上如果您有AWS的帳號,從左邊的連結內可以直接用幾個步驟導入Bitnami整合好的AMI在指定的AWS服務器上面,接著使用AWS主控台設定,可以在幾分鐘內得到一個建置好的Redmine網站做使用,非常的方便。後面整理好後,小編會再將步驟發布供有需要的人參考。

Google Cloud在這次小編的使用上,相較於同性質的AWS讓我較快完成Redmine架設,當中的原因一部分小編認為是因為有前面幾個架設的基礎,很多該遇到的坑都已經大概有解決的方法了,另一個單純是我比較熟悉在Google Cloud在主控台的設計上面找到我需要的設定跟資訊。

當登入Google Cloud Console後,在上方搜尋框查找Redmine便可以得到以下兩項結果,眼尖的各位應該可以發現這邊也可以找到Bitnami所提供的Google Cloud方案,而由於先前小編已經試用過Bitnami的AWS方案了,所以這次想試試看Google Marketplace所提供的一鍵部署(Google Click to Deploy)方案。

在整個一鍵部屬的操作流程下,大概5分鐘內可以得到一個運行的Redmine系統,後面小編也會將步驟發布出來給有需要的人參考

Docker實際應用: Redmine專案管理系統建置

使用Docker架設Redmine,小編認為最主要的好處就是可以快速部屬到指定機器上了,當建置的設定在本地端的開發環境上面驗證完畢後,便可以透過幾個簡單的步驟在目標機器上面架出一樣的結果,減少人為操作上的差異跟出入,想必對於已經有Docker使用經驗的人來說,每每看到docker-compose up -d運行後的進度條,還是會油然升起一種舒坦的感受吧 😀

以下的內容記錄我在Windows 10作業系統透過Docker運行Redmine的步驟,希望對您有幫助!

環境需求:

建置步驟:

1. 安裝WSL2,在Windows內開啟Powershell.exe並執行以下指令
wsl -l -v
wsl --set-default-version 2
wsl --list --online
wsl --install -d Ubuntu-20.04

Note: 如果在過程中遇到0x800701bc錯誤,則按照以下指示更新kernel
https://learn.microsoft.com/zh-tw/windows/wsl/install-manual#step-4—download-the-linux-kernel-update-package

2. 下載並安裝Docker Desktop
3. 打開Docker Desktop並啟用WSL整合

4. 建立Redmine伺服器虛擬機(Docker)的設定檔

在硬碟內找到一個資料夾,在該資料夾下新增一個名為docker-compose.yml的檔案,檔案的內容如下:

version: '3'
services:
  postgres:
    hostname: PostgreSQL
    restart: always
    ports:
      - "5432:5432"
    volumes:
      - redmine_postgresql:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=redmine
      - POSTGRES_PASSWORD=xxxxxx
    image:
      postgres
  pgadmin:
    container_name: redmine_pgadmin4
    image: dpage/pgadmin4
    restart: always
    environment:
      PGADMIN_DEFAULT_EMAIL: admin@example.com
      PGADMIN_DEFAULT_PASSWORD: admin
    ports:
      - "5050:80"
  redmine:
    hostname: Redmine
    restart: always
    ports:
      - "3088:3000"
    volumes:
      - redmine_config:/usr/src/redmine/config
      - redmine_files:/usr/src/redmine/files/files
    environment:
      - REDMINE_DB_POSTGRES=postgres
      - REDMINE_DB_DATABASE=redmine
      - REDMINE_DB_USERNAME=redmine
      - REDMINE_DB_PASSWORD=xxxxxx
    links:
      - postgres:postgres
    image:
      redmine
volumes:
  redmine_postgresql:
  redmine_config:
  redmine_files:

Note: 在這邊pgadmin相關的章節其實不是一定需要,單純是為了方便有視覺化工具去操作PostgreSQL的資料庫而加入的。

5. 啟動 Redmine Server

請在 docker-compose.yml 目錄下執行用命令及提示字元(cmd.exe)執行以下指令:

docker-compose up -d

令人怦然心動的瞬間就這麼出現了!

若是第一次啟動,系統會自動搜尋 Docker Hub 的 postgres, pgadmin4,redmine Images,並從網路上下載至您的主機。

運行中的Redmine跟其他服務如PostgreSQL, pgAdmin4等等,都可以在Docker Desktop的運行的容器(Container)內找到,是不是很方便呢!

相關內容:

PostgreSQL資料

若要檢視Redmine背後使用PostgreSQL所儲存的資料,可以透過http://localhost:5050/進入我們稍早在docker-compose.yml內所設定的pgAdmin4控制介面。

使用者名稱以及預設密碼就是設定在docker-compose.yml內的資訊,登入後必須先做一件事情去連結PostgreSQL資料庫,在這邊我們在Powershell.exe內輸入以下指令:

docker inspect redmine_postgres_1 -f "{{json .NetworkSettings.Networks}}"

接著會得到redmine_postgres_1這裡所分配到的IP位置,接著將該位置填入欄位內(這邊的範例是172.18.0.3),然後就可以看到名為”redmine”的PostgreSQL資料庫了唷!

Docker Image

依照docker-compose.yml內的設計,在Docker容器啟動後,虛擬機的內容的資料檔存在以下位置,可使用檔案總管找到,必要的話可以對其做備份。

\\wsl$\docker-desktop-data\data\docker\volumes

後記:

在整個安裝的過程中,Redmine主架構可以透過上面的docker-compose.yml順利地搭建成功,但在Redmine內郵件系統的設定內,當下小編無法順利的完成設定,小編猜測的原因是因為Gmail阻擋了低安全性的第三方軟體去使用Gmail服務的原因,而這部分在後面使用Google Cloud架設的方案內,小編通過開通App Password的方式有成功讓Redmine使用Gmail,但暫時沒有時間回來Docker這邊驗證是否一樣可以成功。

若螢幕前的您有Docker架設Redmine的需求,希望這個沒有直接相關的測試結果可以幫到您!