顯示具有 Docker 標籤的文章。 顯示所有文章
顯示具有 Docker 標籤的文章。 顯示所有文章

6/14/2019

架設公司私有的偽M$ Project - OpenProject篇

繼上一篇 架設公司私有的Yum repository for CentOS 7 又要來教學一篇買不起M$ Projects 怎麼省錢做專案時程管理 ?

WHY?

  1. 專案資料都是私有的,可以升級和擴充其他功能。
  2. 作為技術宅或是小主管當夾心餅乾,老闆要你估工作時程(很多號稱agile其實瀑布式的開發方式),很多時候你還是需要自己快速的粗估一個flow。
  3. 新創公司/小公司/工作室/許多業餘的side-project 都很適合,也可以給人專業感

Install

使用Docker安裝OpenProject (真的只需要一行)


docker run -p 8080:80 -v openproject-db:/var/lib/postgresql/9.4/main -v openproject-data:/var/db/openproject -e SECRET_KEY_BASE=MY012j38adasSECRET openproject/community:8

啟動和運行OpenProject:

預設管理密碼(登錄名:admin,密碼:) admin。然後,啟動瀏覽器http://localhost:8080/ 一般來說為了避免資料建立之後消失, 會用 -v (Volume) 將電腦內的空間掛進去, 這樣docker stop之後資料保持。
網頁登入後馬上就可以看到畫面, 登入之後可以開始建立你的第一個專案。
一般來說要先建立Users 和 Group 並且賦予不同角色。



如果你需要寄email, 例如通知人員開始執行工作包, 新的技術比較偏好用Webhook去通知你的工作IM, 例如Slack。參考官網說明的SMTP配置透過環境變數傳入docker預設情況下,docker容器將嘗試通過本地postfix發送電子郵件 。但是,以這種方式發送的電子郵件很可能會失敗或最終進入用戶的垃圾郵件收件箱。我們建議使用外部SMTP服務器發送您的電子郵件。

一個不錯的選擇是SendGrid,它提供每月最多12000封電子郵件的免費計劃。只需在網站上註冊,審請一個新的API密鑰並將其複製到某個設定(看起來像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)。您也可以使用您的SendGrid用戶名和密碼,但這不太安全。然後,您可以使用以下附加環境變數 (使用SendGrid,SMTP_USER_NAME始終是apikey。只需替換 SMTP_PASSWORD為您生成的API密鑰)

docker run -d \ -e EMAIL_DELIVERY_METHOD=smtp \ -e SMTP_ADDRESS=smtp.sendgrid.net \ -e SMTP_PORT=587 \ -e SMTP_DOMAIN=my.domain.com \ -e SMTP_AUTHENTICATION=login \ -e SMTP_ENABLE_STARTTLS_AUTO=true \ -e SMTP_USER_NAME="apikey" \ -e SMTP_PASSWORD="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" \ ...

您可以為其他SMTP提供程序調整這些設置,例如GMail。

這裡要小心,如果你用GMail,需要產生application password來代替寄信,不能用真實的user密碼(心裡背誦的那個)。

開始第一個scrum project

此處我們嘗試建立一個scrum project 切成2個phase, 第一個phase是功能開發, 第二個phase是管理介面和金流串接。

首先要有人, 所以從Users群組開始添加一些User帳號。這裡添加之後只是產生User帳號, 還必須把他們一一添加到專案中, 才可以在後續的Task assignment將工作包分配給他們。

OpenProject 有很方便的群組管理, 這裡我將潛在的專案成員依照在公司內的組織劃分為RD, PM, SQA測試。
接著在scrum project下面添加的work packages添加工作包。這裡一開始不是很確定在OpenProject內的 Phase, Task, feature, user story的相對關係, 通常來說是Phase包住另外三個。沒關係,等試驗之後再用Gantt Chart打開來看。




用open project可以很容易設定工作包的parent
點下工作包的information, 在右上角可以點一下設定parent。不需要從parent一個一個add child的方式。


反過來如果是初期的工作包展開, 從parent添加子工作包會比較直覺。
添加了一些工作包之後可以切換到Gantt Chart View。這裡暫時只有在第一個工作包下面增加第一個feature, 所以看起來是Phases/Tasks/Features



9/24/2015

Ansible結合Docker的使用方式

前言

為什麼不直接用Docker就好?
以現況來說,如果服務暫時無法移植到container執行, 要在私有雲上跑, 仍然需使用Ansible或是Chef或是Puppet這一類的工具。

目標

讓習慣Ansible的開發人員用原有的腳本在筆電上重複進行部署測試。
單純利用Docker的好處節省在開發機上安裝一堆VM (節省安裝OS的時間&空間)。
學習少量的Docker指令。

觀念

Ansible是從common role負責安裝所有的機器, 再由其他role安裝與設定其他各式Server。
Ansible需要為各種role撰寫playbook。
Docker的觀念是通過建立自己的base image 例如from Cent OS 7, 設置防火牆 VPN 與時區校正之後, commit, tag, 再從base image上安裝軟體變成各式Server。
用docker-compose以及links可以直接組裝許多Official images, 基本上只需要設計服務所需要的Application layer的images。
Docker需要為各種image撰寫Dockerfile。

安裝Docker

請按照官方步驟在Mac安裝完Docker環境之後在spotlight可以找到docker QuickStart Terminal 
你會得到一隻鯨魚以及一個IP, 那個就是虛擬機的IP, 請抄起來。

假設我們需要1台空白機讓Ansible管理, 執行:
bash-3.2$ docker run -d shooding/docker-ubuntu-openssh
bash-3.2$ docker ps
你會看到1台機器(container)正在執行。

這裏我解釋一下參數
-d = daemon背景模式執行
shooding/docker-ubuntu-openssh 是我放在docker hub上面的image名稱
如果有興趣可以看一下Dockerfile的寫法, 這裏使用的是Ubuntu 14.04 LTS版本。

安裝Ansible
$ brew install ansible

設定Inventory

Inventory就是要被Ansible管理的機器群。
剛剛已經用docker開好1台機器(container), 一般會分成staging和production來區分環境。
現在是在筆電上進行測試, 使用staging
把container的資訊加入到~/staging

$ vim ~/staging

請把IP換成你剛剛抄起來的IP。請把account換成你的User名稱。
[app_servers] 
app-1 ansible_ssh_host=192.168.99.100 ansible_ssh_port=2222

[app_servers:vars]

ansible_connection=ssh
ansible_ssh_user=root

將Ansible的Inventory路徑設定到環境變數當作預設值
$ vim ~/.profile
$ export ANSIBLE_HOSTS=/Users/shooding/staging
$ source ~/.profile

測試一下對於1台機器的連接狀況
$ ansible all -m ping 
你會得到...

用過Ansible就知道它是透過SSH連到被控制的主機(node)

因此我們需要將docker的SSH port forward出來, 並且將公鑰複製進去被控制的機器。
如果你還不會產生SSH 公鑰/私鑰, 請先完成產生SSH金鑰 的步驟。
或是直接執行:
$ ssh-keygen
會產生~/.ssh/id_rsa和~/.ssh/id_rsa.pub

那麼...

剛剛忘記把docker的port forward出來, 再進行一次吧
先停止所有的機器
bash-3.2$ docker stop $(docker ps -q)
bash-3.2$ docker run -d -p "2222:22" shooding/docker-ubuntu-openssh

參數說明 -p port forward 將SSH port 22 對應到外埠2222
也就是在ansible裡面設定的ansible_ssh_port = 2222

接著將公鑰複製進去被控制的機器
bash-3.2$ docker cp ~/.ssh/id_rsa.pub 660246bd6146:/root/.ssh/authorized_keys
660246bd6146 (這裏請換成你的 container id )

使用Ansible測試連接是否成功?
$ ansible all -m ping
參數說明: 使用ping module測試所有機器
XXXX | success >> {
    "changed": false,
    "ping": "pong"
}


成功了, 在這之後就可以照原來Ansible的使用方法囉!

附錄小幫手
如果你需要所有機器的private IP, 有時候建置互相連接的cluster會用到
bash-3.2$ docker inspect $(docker ps -q) | grep '"IPAddress"'

TODO
其實我很想要省掉docker cp的操作, 而直接將id_rsa.pub透過 docker -v 參數分享空間到
container裡面。例如開機器的時候改成:
docker run -d -p "2222:22" -v ~/.ssh/id_rsa.pub:/root/.ssh/authorized_keys shooding/docker-ubuntu-openssh

但是很可惜這樣做會造成SSH無法登入, 大神請在回應中點評一下。