# OpenProject 安裝

讓有經驗的DevOps，可以一天建立OpenProject專案管理系統。

另外官網建議14.5或以上，應該改用 docker compose方式
https://github.com/opf/openproject-docker-compose/issues

但是到目前為止，用 docker 可直接一路升級到 15.3.2 不須改用docker compose

# Docker安裝

<p class="callout info">docker-ce 版本 24.0.2-1 或 以上</p>

```
docker volume create project_assets
docker volume create project_pgdata

# 14.0.0版以前(不含14.0.0)
docker run -d --restart=always -p 8091:80 --name openproject  -e OPENPROJECT_DEFAULT__LANGUAGE=zh-TW -e OPENPROJECT_HTTPS=false -e OPENPROJECT_SECRET_KEY_BASE=安全密碼 -v project_pgdata:/var/openproject/pgdata -v project_assets:/var/openproject/assets -v project_fonts:/app/public/fonts openproject/community:13.4.1

# 14.0.0版以後(含14.0.0)
docker run -d --restart=always -p 8091:80 --name openproject  -e OPENPROJECT_DEFAULT__LANGUAGE=zh-TW -e OPENPROJECT_HTTPS=false -e OPENPROJECT_SECRET_KEY_BASE=安全密碼 -v project_pgdata:/var/openproject/pgdata -v project_assets:/var/openproject/assets -v project_fonts:/app/public/fonts openproject/openproject:14.0.1

#以上參數需要修改如下
8091:80  ->  8091為主機的port(沒被佔用)
OPENPROJECT_DEFAULT__LANGUAGE=zh-TW  -> zh-CN or en 
OPENPROJECT_HTTPS=false  -> 網站內部使用，所以不需要https，https交給代理伺服器即可
OPENPROJECT_SECRET_KEY_BASE=安全密碼 

#若需要開放資料庫(postgres)給外部使用， 則加上 -p 5432:5432 , 且新增一個superuser連線

#新增superuser
docker exec -it --user postgres openproject bash
psql
postgres=# CREATE ROLE root WITH LOGIN SUPERUSER PASSWORD '密碼';

#外面連線進來
psql -h <ip>  -U <帳號> <資料庫>
ex:
psql -h 172.17.0.2 -U root openproject



```

<p class="callout info">安裝openproject<span style="color: rgb(224, 62, 45); background-color: rgb(255, 255, 255);">(**不需要內建的postgres資料庫**)</span></p>

```
docker run -d --restart=always -p 8091:80 --name openproject  -e OPENPROJECT_DEFAULT__LANGUAGE=zh-TW -e OPENPROJECT_HTTPS=false -e OPENPROJECT_SECRET_KEY_BASE=安全密碼 -e DATABASE_URL=postgres://user:pass@host:port/dbname -v project_assets:/var/openproject/assets -v project_fonts:/app/public/fonts openproject/openproject:15.4.0

#以上參數需要修改如下
8091:80  ->  8091為主機的port(沒被佔用)
OPENPROJECT_DEFAULT__LANGUAGE=zh-TW  ## 簡中zh-CN or 英文en 
OPENPROJECT_HTTPS=false  # 網站內部使用，所以不需要https，https交給代理伺服器即可
OPENPROJECT_SECRET_KEY_BASE=安全密碼 #老實說我也不知幹嘛的，沒認真K文件
DATABASE_URL=postgres://user:pass@host:port/dbname   # 外部已預先安裝好的postgres

```

<p class="callout success">安裝完畢，瀏覽器輸入http://ip:8091 ，登入預設 **admin/admin**</p>



##### <span style="color: rgb(0, 0, 0);">匯出PDF出現繁體中文亂碼解決方式  
</span>

[![image.png](https://book.kafeiou.pw/uploads/images/gallery/2024-02/scaled-1680-/zJGimage.png)](https://book.kafeiou.pw/uploads/images/gallery/2024-02/zJGimage.png)

1. 下載 [NotoSansTC ](https://fonts.google.com/noto/specimen/Noto+Sans+TC)繁體中文，  
    或是建議下載可簡繁正確顯示(簡變成繁)  
    [獅尾繁中黑體 Swei Fan Sans](https://github.com/max32002/swei-fan-sans/tree/master/CJK%20TC)的[SweiFanSansCJKtc-Regular.ttf](https://github.com/max32002/swei-fan-sans/blob/master/CJK%20TC/SweiFanSansCJKtc-Regular.ttf "SweiFanSansCJKtc-Regular.ttf")檔案
2. 將 NotoSansTC-xxx.ttf 或 SweiFanSansCJKtc-Regular.ttf 複製並取代 /app/public/fonts/noto/ 的所有ttf檔案  
    [![image.png](https://book.kafeiou.pw/uploads/images/gallery/2024-02/scaled-1680-/Y7timage.png)](https://book.kafeiou.pw/uploads/images/gallery/2024-02/Y7timage.png)
3. 此時就可以正常匯出了(但字型就只會有一種)  
    [![image.png](https://book.kafeiou.pw/uploads/images/gallery/2024-02/scaled-1680-/rYVimage.png)](https://book.kafeiou.pw/uploads/images/gallery/2024-02/rYVimage.png)

# 體驗企業版

1. 目前測試14.x.x -&gt; 15.1.0測試ok
2. 申請試用   
    [https://www.openproject.org/docs/enterprise-guide/enterprise-on-premises-guide/enterprise-on-premises-trial/](https://www.openproject.org/docs/enterprise-guide/enterprise-on-premises-guide/enterprise-on-premises-trial/)
3. 神人協助  
    [https://gist.github.com/markasoftware](https://gist.github.com/markasoftware)

```
#  version >= 16.0.0 
https://gist.githubusercontent.com/markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45/raw/2c8d1c49030901f95952293a8331ae8bbeb01a39/enterprise_token.rb

# version < 16.0.0
https://gist.github.com/markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45/raw/148c5067e30eae04f96e3233144b4404f70ade47/enterprise_token.rb

############ REPLACE app/models/enterprise_token.rb in the source code with this file! ################
############ also be sure to RESTART OpenProject after replacing the file.             ################
############ it doesn't show that enterprise mode is enabled in the settings, but all  ################
############ enterprise mode features, such as KanBan boards, are enabled.             ################
```

# 資料庫備份

OP使用的是postgres資料庫，備份也使用標準的postgres指令

```
# 備份OP資料庫
docker exec -it <OP容器名稱> su - postgres -c 'pg_dump -d openproject -x -O' > openproject.sql

# 若資料庫非內建
docker exec -it <資料庫容器名稱> pg_dump -U postgres -d openproject -x -O > openproject.sql

```

postgres 連線指令

```
# -U 帳號
# -d 資料庫名稱
# -h 主機
# -W 需要輸入密碼
# -p 埠(預設5432)
psql -U root -d openproject -p 5432 -h localhost -W

```

# 升級

OP升級很友善，與nextcloud一樣會自動判斷，自行升級

```
# 拉下最新版
docker pull openproject/openproject:14.1.1

# 備份資料庫
docker exec -it openproject su - postgres -c 'pg_dump -d openproject -x -O' > openproject.sql
# 備份檔案(除非大版本更新，否則可以省略)

# 升級
docker stop openproject
docker rename openproject openproject_20240806

# 這裡我將postgres開放並改port為5433、http port改8091
docker run -d --restart=always -p 8091:80 -p 5433:5432 --name openproject  -e OPENPROJECT_DEFAULT__LANGUAGE=zh-TW -e OPENPROJECT_HTTPS=true -e OPENPROJECT_SECRET_KEY_BASE=<密碼> -v project_pgdata:/var/openproject/pgdata -v project_assets:/var/openproject/assets openproject/openproject:14.1.1

# 查看執行狀況
docker logs -f openproject
```