在Synology NAS上用Docker跑redmine

Synology內建的Package Center有redmine可以安裝, 但是要搭配MariaDB. 我看redmine的官網, 似乎是跟PostgreSQL比較合拍. 所以想用Synology NAS裡的docker自己弄一個redmine + PostgreSQL的組合.

網路上找到的docker + redmine通常都是直接建議用sameersbn的image. 不過既然redminepostgres都有官方的image, 之後升級比較能處理, 還是用官方的好.

Synology內建的docker比較舊, 也不支援docker-compose, 所幸他的設定程式GUI寫得還不錯, 紀錄一下怎麼用.

  1. 下載image

    下載時我特別指定了現下最新的版本, 而非用latest tag. 原因是希望將版號鎖定, 之後同樣的動作才會有一樣的結果. 而postgres的部份選用alpine版, 因為這樣image會比較小, 僅38MB.
  2. 建立container
    1. DB
      Launch一個container, 命名為db. 選Advanced Settings.

      Volume的部份由這個image的Dockerfile中可看出volume是'/var/lib/postgresql/data', 在NAS裡建一個/docker/redmine/db mapping他.

      Networking與Port都不用特別設定, Environment variable的部份則是從docker hub這裡看到有POSTGRES_PASSWORD, POSTGRES_DB兩個變數要設.

      設定完之後直接launch, 在背景執行.
    2. Redmine
      用同樣手法建一個container, 命名為redmine. Volume從這裡得知將/usr/src/redmine/files指定為/docker/redmine/files. Port setting的部份因為這是公開服務, 就不能任由docker自行指定了, 指定為13000:3000. Links的部份, 指定剛才跑起來的postgres container db為db.
      Environment variable要設REDMINE_DB_POSTGRES, REDMINE_DB_PASSWORD. 設定完一樣跑起來.
  3. 執行
    兩個container都跑起來之後, redmine一開始會建database的table, 經過數分鐘後可以在log中看到

    再用browser開一下http://nas_ip:13000, 能否看到正常的redmine畫面. 至此docker的部份己經設定完成.
  4.  設定reverse proxy
    因為是公開服務, 通常會希望能有一個redmine.xxx.com的網域可以從外部直接使用. 但是現在是使用port 13000, 即使有付費的domain name, 也無法避免要打http://redmine.xxx.com:13000的窘境.
    這個時候的解答就是用reverse proxy, 先讓nginx當web server去聽port 80, 再讓它用virtual host的方式, 知道是要redmine.xxx.com的服務. 再內轉給nas_ip:13000. 如此一來對外的port 80, redmine.xxx.com就相當於redmine container的3000了.
    1. 在Synology裡的web server是Web Station這個程式, 有很多back-end server可以選, 為了輕量化及速度, 我是使用Nginx.
    2. 但是在Synology的設定UI裡, 並不能做reverse proxy的設定. 所以安裝好Web Station後, 用ssh連進NAS裡.
    3. sudo vi /etc/nginx/app.d/server.ReverseProxy.conf
    4. sudo nginx -s reload
      讓nginx重讀設定檔
  5. 測試
    再用browser來連http://redmine.xxx.com看看是否能看到redmine畫面. 至此已設定完成.
TODO
  • HTTPS版的reverse proxy

留言

這個網誌中的熱門文章

買車記

怎麼在兩台linux server間用scp而不需打密碼?