gitlab 的備份是一個 tar 檔案,用 tar xf 解開以後,會依照你 gitlab 裡的 user/group 區分目錄,解開以後,會發現裏面又是一堆 .bundle 檔案。
.bundle 該怎麼解開呢?其實它也是一個 tar 檔案,用 tar tf 就可以看到內容,所以如果要還原的話,就先建一個目錄,再切到該目錄下解開就可以了。
Just thinking more…
gitlab 的備份是一個 tar 檔案,用 tar xf 解開以後,會依照你 gitlab 裡的 user/group 區分目錄,解開以後,會發現裏面又是一堆 .bundle 檔案。
.bundle 該怎麼解開呢?其實它也是一個 tar 檔案,用 tar tf 就可以看到內容,所以如果要還原的話,就先建一個目錄,再切到該目錄下解開就可以了。
在公司 Zabbix dashboard 上看到這訊息,但明明 CPU 就沒飆到那麼高,後來去 google 了一下,主要是參考這兩篇:
文章裡提到的訊息有點差異,不過都是改 /etc/zabbix/zabbix_server.conf 裡的 StartXXXX 設定,將數值調高即可。例如 discoverer 就調高 StartDiscoverers 的數值,ping 就調高 StartPingers 的數值,以此類推。
改完,重新啟動即可,Zabbix Dashboard 上應該就看不到這訊息了。
P.S. 好像應該來開個 「IT 日常」的分類?!
最近開 terminal 時,都會看到這樣的錯:
pyenv: no such command `virtualenv-init’
今天終於想要解決這問題了,找了一下,源頭是在 oh-my-zsh 的 virtualenv plugin 裡,裏面用了 eval “$(pyenv virtualenv-init – zsh)” ,循線追到 pyenv,發現是 pyenv 沒有 pyenv-virtualenv plugin 的關係。
依照 yyuu/pyenv-virtualenv 上的說明,執行以下指令,就解決問題了。
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
最後,順道更新 pyenv :cd ~/.pyenv && git pull –rebase origin master
同事找到這篇介紹 OpenKM 的文章:開源OpenKM文管系統 立即打造知識管理平台
想說就裝起來試試看好了,看到有人用 docker 搭起來,就照著做囉:使用docker在centos6.5上部署openkm详细过程
不過這篇文做法的缺點是,把原本的 /usr/local/tomcat 都移到 volume 裡去,這就等於是程式都放到外面去了。或許應該參考原本 mcsaky/openkm 的 Dockerfile 與 OpenKM Installation ,再來改寫 Dockerfile 會比較好一點。
反正只是先試試看,所以我也沒有用 nginx 擋在前面,直接用 tomcat ,就先這樣用吧~ 有需要的時候,再來研究看怎麼改寫。
主要是看入門指南跟摸索後的筆記。
執行 otto compile 以後,會自動依據所在的目錄去猜測是哪種語言開發的,並且產生以下目錄跟檔案:
.ottoid 應該要加入到版本控制系統裡,這檔案如果被刪除可能會出錯;.otto 目錄下則是放產生出來的檔案:
看起來照預設設定是佈署到 Amazon VPC 上。
執行 otto dev 以後,會開始下載 vagrant box ,這時間有點久,等下載完成會設置開發環境。等到完成以後,使用 otto dev ssh 就可以登入,/otto/foundation-1/ 下可以看到 main.sh ,這些檔案的原始檔是在 .otto/compiled/app/foundation-consul/app-dev 下。
執行你的 web application 以後,開另外一個 terminal,執行 otto dev address 可以看到 IP,接著就可以到瀏覽器輸入 IP:port 看到畫面了。
用 otto infra 就會在 Amazon 上建立 infrastructure。infra 看起來主要是配置 VPC 裡的 gateway、subnet、routing 與資源等等。(目前只支援 AWS)
用 otto build 是會建立 Amazon image ,最後就是用 otto deploy 佈署上去。
在 infra, build, deploy 時,都會問 AWS 的資訊,在問了以後,otto 會存到加密過的檔案裡。如果不想 otto 問這些,也可以預先設置好這些環境變數:AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SSH_PUBLIC_KEY_PATH
一般來說,otto 會自動猜測,使用猜出來的 Appfile,也可以自己手寫 Appfile (完整的 Appfile 說明)。如果有使用到相依的服務,也可以在 Appfile 裡寫 https://ottoproject.io/intro/getting-started/deps.html 。
otto dev destroy 是清除掉開發環境,otto infra destroy 跟 otto deploy destroy 則是清理 Amazon 上的機器。
安裝:wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh
在現有的 web application project 目錄裡輸入 heroku create ,這會自動去遠端 (就 heroku) 開一個 app project,然後把 git repository 放到 git remote 裡。
git remote -v 裡會多出一個 heroku ,當你把 master branch push 到 heroku 時 (git push heroku master),就會自動佈署到 heroku 上。
這裡要注意的是 heroku 只認定 master,只有推 master 上去時,才會真正的進行佈署,如果是其他 branch 名稱,heroku 不鳥你。
多台機器開發,我是指一下在 A 機器開發,一下又在 B 機器開發的情況。那這時候怎麼處理 project ?
第1種情況是,直接從 heroku 取得專案:heroku git:clone -a your_heroku_app_name the_directory
第2種情況是,你已經先從你的 git repository 取得專案,那麼這時候就先切換到專案目錄下,再用 heroku git:remote -a your_heroku_app_name 這個指令來自動在 git remote 裡增加一個 heroku 的 remote repository。
安裝資料庫的 Addon
MySQL
Heroku 本身不提供 MySQL,只有合作廠商所提供的 ClearDB,但實質上 ClearDB 就是 MySQL。
ClearDB 有提供4個方案,Ignite 是免費的,雖然免費,但是安裝前,還是要先填信用卡資訊。
安裝方法:heroku addons:create cleardb:ignite
安裝以後,連線字串會放在 CLEARDB_DATABASE_URL 這個環境變數裡,程式只要存取這個環境變數就可以取得連線字串,用 heroku config:get CLEARDB_DATABASE_URL 則可以看到連接字串。
參考這篇文,就可以用本地端的 MySQL Query Browser (MySQL GUI 工具) 連上遠端的 ClearDB。
簡單說,就是從連線字串拆解出 username/password/host ,然後套進去用就可以了。
PostgreSQL
Heroku 預設提供的 database,不過還是要安裝。
安裝方法:heroku addons:add heroku-postgresql:dev
連線字串一樣是在環境變數裡:HEROKU_POSTGRESQL_BRONZE_URL 。
Prometheus 是一個 Monitor 的服務,要收集 host 資訊要搭配 node-exporter,要有 dashboard ,可以搭配 promdash。
而這三者,都有 docker container image 可以下載,但是要怎麼搭在一起,可就讓人傷腦筋了。花了一些時間把他們三個兜在一起,寫成 docker-compose.yml ,這樣就可以用 docker-compose up 直接啟動這三個 container。
過程裡遇到幾個難題:
大概就這樣,目前執行結果看起來是沒問題,用一陣子看看吧。另外有在 https://hub.docker.com/u/prom/ 這裡看到不少 container image 可以拉下來組合的,以及 google 的 cAdvisor,有機會再來看看。
後記:實驗結果發現 node-exporter 不適合放在 docker container 裏面執行(跟 node-exporter 對應的,還有一個 container-exporter 專案,是專門收集 container 資訊的),因為會無法收集到關於 host 的資訊,所以 node-exporter 最好還是放在 host 執行,然後讓 prometheus 能存取到。另外,在找關於連結到 host 的部份時,看到有人提報一個 issue 給 docker,建議應該提供一個 –link-host 的功能,讓 container 裏面也能存取到 host,而不需要額外繞路取得。一般的繞路手法是透過 route 取得 gateway 位址,在某些情況下是還蠻麻煩的。
參考這篇來做:How to specify a testing database in Laravel 5?
有打勾的 Best answer 就是了,主要修改部份有兩個,第一個是在 config/database.php 裡,這裡添加給測試環境用的資料庫設定;第二個是在基礎的 TestCase 類別裡,去放置給測試環境用的環境變數。
原理是這樣的,因為 Laravel 應用程式在啟動時,會根據環境變數或是 .env 來決定要啟用哪組資料庫設定,這部份可以在 .env 與 config/database.php 裡看到。所以就可以這樣動手腳來切換,避免 production 與 testing 的資料庫混用。
文章裡有一點是比較不建議的作法,這是我在 Two scoops of Django 這本書上看到的,就是 testing 與 production 的資料庫要一致,不要 production 用 mysql,testing 又用 sqlite 這樣子。畢竟在實際應用時,資料庫的不同仍有可能造成測試結果的不同,那就會導致測試時都沒問題,正式上線時卻出包的情況。
我這邊照著改的時候,有失敗的情況,仔細檢查以後,發現文章裡是用 DB_DEFAULT,而用 Laravel 產生出來的專案框架裡是用 DB_CONNECTION,這邊調整一下就沒有問題了,我猜想可能是 Laravel 版本的關係。
要使用 consul 這個軟體必須要有 server,server 啟動的方式有三種:
這裏面當然是用 atlas 最方便,除了有提供 Web UI 可以做監控之外,還可以使用 vagrantup 跟 terraform 等來做管理,只是使用這項服務是有代價的,超過 10 個 node 每個月收費 40 美金。
參考資料:
Ubuntu 14.04 預載了 Golang 1.2 ,如果想要其他版本的呢?到官方網站去找,會發現根本找不到下載連結。用 ppa 去找,是可以找到這個 golang 1.4 : Jay R. Wren 。
為了安全起見,還是用 Version manager 好了,Golang 的 Version manager 在網路上可以找到兩個:govm 跟 GVM,目前看起來比較常見的是 GVM。GVM 的安裝可以參考這篇:7 Easy Steps to Install Go (Golang) on Ubuntu
摘錄安裝步驟如下:
使用方法: