由于文章中包含了很多你可能用到的例子和命令,所以這這份指南會很長。
這份安裝指南是基于 Ubuntu/Debian 創(chuàng)建的,已經(jīng)在上述的系統(tǒng)上完成測試。請閱讀必需的硬件和操作系統(tǒng)來了解所需的軟硬件要求。
這是官方用來指導(dǎo)部署生產(chǎn)環(huán)境下 Huginn 的指南。如果需要在開發(fā)環(huán)境中進(jìn)行安裝或者想了解其他安裝選項,請查看開始。
以下步驟已被證明是有效的,在使用本指南時請務(wù)必謹(jǐn)慎以免有所偏離,并確保你沒有違反任何我們所要求的安裝環(huán)境。舉個例子,很多人運行會出現(xiàn)權(quán)限問題,是因為他們改變了文件夾的位置,或者用其他用戶運行了服務(wù)。
如果你在這份指導(dǎo)上發(fā)現(xiàn)任何 bug 或者錯誤,請?zhí)峤灰粋€ pull request。
如果沒有特別聲明,所有的命令都將運行在超級用戶權(quán)限下。
當(dāng)你在安裝中遇到任何問題的時候,請查看問題解決一章節(jié)。
Huginn的安裝需要以下幾個部分
Debian 沒有默認(rèn)安裝 sudo,要確保你的系統(tǒng)是最新的然后安裝。
注釋: 在整個安裝過程中,一些文件需要人工修改,如果你對 vim 很熟悉的話,可以將 vim 設(shè)置為命令行下默認(rèn)的編輯器。如果你不熟悉 vim 的話,請?zhí)^這一步,并繼續(xù)使用默認(rèn)的編輯器。
引入 node.js 倉庫(Ubuntu 和 Debian Jessie 可以跳過這一步)
安裝需要的包(需要先編譯 Ruby 和本地 Ruby gems 的擴展)
在 Huginn 的生產(chǎn)版本中,如果使用了像 RVM, rbenv 或者 chruby 這種 Ruby 的版本管理工具,會經(jīng)常導(dǎo)致難以診斷的問題。所以我們不建議用版本管理程序來安裝 Ruby,我們強烈建議各位根據(jù)我們下面的步驟使用系統(tǒng)自帶的 Ruby。
如果有老版本的 Ruby 版本,先移除:
下載新的 Ruby 版本并且進(jìn)行編譯:
用 gem 安裝 bundler 和 foreman:
安裝數(shù)據(jù)庫的包
檢查安裝的 MySQL 版本(只有當(dāng)版本號大于 5.5.3 才能讓.env
配置文件正常運行)
保證安裝安全
登陸 MySQL
創(chuàng)建一個 Huginn 的用戶,不要先鍵入 mysql>
,這部分是要先做的。之后,選擇一個真正的密碼,并在命令行中替換 $password
確保你可以使用 InnoDB 引擎,它可以保證一個長索引。
保證 Huginn 用戶可以允許訪問數(shù)據(jù)庫
退出數(shù)據(jù)庫
嘗試用新用戶連接新的數(shù)據(jù)庫
你現(xiàn)在應(yīng)該看到 ERROR 1049 (42000): Unknown database 'huginn_production'
,這說明我們操作是正確的。因為我們將會一會再創(chuàng)建數(shù)據(jù)庫。
現(xiàn)在完成了數(shù)據(jù)庫部分的安裝,你可以繼續(xù)剩下部分的安裝。
如果你使用本地的數(shù)據(jù)庫服務(wù)器,數(shù)據(jù)庫的配置文件看起來會是這樣(使用你先前設(shè)置的 huginn 的 MySQL 用戶密碼):
注意: 注釋了 RAILS_ENV 設(shè)置以確保實在生產(chǎn)環(huán)境中運行的 Huginn
如果有需要的話,改變 Unicorn 的配置文件,在requirements.md中有一部分是專門解釋并且建議合適的 unicorn 數(shù)量。
注意: 保證你修改了 .env
和 unicorn.rb
來確保程序正常運行
注意: 我們建議使用 HTTPS,如果有需要的話,請訪問 使用 HTTPS 查看附加的步驟。
注釋: 為了保證你的修改被保存,每次完成初始安裝的時候,都要重新導(dǎo)入開始的腳本文件到 .env
, unicorn.rb
或 Procfile
!(詳情見 Install Init Script)
注釋: 在bundler 1.5.2 版本,你可以使用 bundle install -jN
(N 是進(jìn)程數(shù)量)喚起多個進(jìn)程來進(jìn)行安裝,還可以在一個可測量的差別時間內(nèi)安裝多個gem(快 60%)。用 nproc
檢查你的處理器數(shù)量。更多信息請看 post。首先要確定你的 bundler >= 1.5.2 (運行 bundle -v
),有很多 issues 已經(jīng)在1.5.2版本修復(fù)。
當(dāng)完成的時候查看 See the Huginn Wiki for more Agent examples! https://github.com/cantino/huginn/wiki
注釋: 這將會創(chuàng)建初始用戶,你可以通過設(shè)置環(huán)境變量中的 SEED_USERNAME
和 SEED_PASSWORD
來改變你的用戶名和密碼。如果你不想改變密碼(將會設(shè)置為默認(rèn)密碼),請等待全部安裝完畢上線到互聯(lián)網(wǎng)之后,你可以登陸到服務(wù)器上來改變你的密碼。
Huginn 使用 foreman ,它會根據(jù) Procfile
來遷移初始化腳本
修改 Procfile,并選擇一個我們建議的修改方案來適應(yīng)生產(chǎn)環(huán)境。
注釋這兩行
引入初始化腳本:
注釋: 當(dāng)你每次修改 .env
或者 Procfile
的時候,一定要重新導(dǎo)入初始化腳本。
注釋: Nginx 是一個官方建議給 Huginn 使用的服務(wù)器。如果你不想使用 Nginx 作為你的服務(wù)器,你可以移步到 wiki 查看 apache 的使用
拷貝示例的網(wǎng)頁設(shè)置:
確保你修改了配置文件來保證你的建立,如果你運行了多個 nginx 網(wǎng)頁,那么要 listen
指令中移出 default_server
參數(shù)。
如果 nginx 只運行了一個 huginn 服務(wù),那么刪除默認(rèn)的 nginx 初始網(wǎng)頁:
注釋: 如果你想使用我們建議的 HTTPS,用 huginn-ssl
代替 Nginx 配置文件中的 huginn
。在 使用 HTTPS 查看更多細(xì)節(jié)。
使用下面的命令測試你的 Nginx 配置文件是否正確:
你應(yīng)該看到 syntax is okay
和 test is successful
。如果你看到錯誤信息,那么檢查你 Nginx 配置文件中的huginn
或 huginn-ssl
的排印錯誤等,根據(jù)錯誤信息來排查錯誤。
在瀏覽器中登陸你的服務(wù)器地址,進(jìn)行第一次 Huginn 的登陸。Huginn 已經(jīng)建立好了一個默認(rèn)的賬號給你,你可以使用下面的來登陸:
享受吧! :sparkles: :star: :fireworks:
你可以使用 cd /home/huginn/huginn && sudo bundle exec rake production:start
and cd /home/huginn/huginn && sudo bundle exec rake production:stop
來開始或者停止你的 Huginn 服務(wù)。
確保你已經(jīng)閱讀了在完成 Huginn 安裝后怎么去更新它!你還可以用 Capistrano 來保證你的安裝始終是最新版本的。
在 Huginn 上使用 HTTPS。
FORCE_SSL
為 true
。huginn-ssl
代替 huginn
配置:
sudo cp deployment/nginx/huginn-ssl /etc/nginx/sites-available/huginn
YOUR_SERVER_FQDN
ssl_certificate
和 ssl_certificate_key
.重啟 Nginx,導(dǎo)入初始化的腳本,然后重新啟動 Huginn:
不鼓勵使用自簽名的證書,如果使用的話,你必須按照正確順序的步驟,之后生成證書。
如果在安裝過程中遇到了問題,請確保你是按照正確的順序安裝,沒有錯過其中的任何一步。
當(dāng)你的 Huginn 實例沒有運行,運行下面的腳本來進(jìn)行檢查。
如果還有其他的問題,我們很遺憾的告訴你需要查看各種日志文件來確定錯誤信息。
/var/log/nginx/huginn_error.log
這個文件應(yīng)該是空的,但是是第一個你需要檢查的地方。因為 nginx
是第一個處理發(fā)送到 Huginn 請求的應(yīng)用。
通常的問題:
connect() to unix:/home/huginn/huginn/tmp/sockets/unicorn.socket failed
:這個是 Unicorn 應(yīng)用的服務(wù)沒有運行,確保你注釋了 Profile 文件中,位于 PRODUCTION
下面的兩個示例配置文件中的一個。同時你的 unicorn 的配置文件要存在。138 open() "/home/huginn/huginn/public/..." failed (13: Permission denied)
: nginx 用戶(默認(rèn)是www-data
)需要能讀取 /home/huginn/huginn/public
目錄/home/huginn/huginn/log/unicorn.log
這里應(yīng)該包含了 HTTP 請求的入口,類似于:10.0.2.2 - - [18/Aug/2015:21:15:12 +0000] "GET / HTTP/1.0" 200 - 0.0110
如果你發(fā)現(xiàn)了 ruby 的回溯信息,或者以下的其他錯誤信息:
/home/huginn/huginn/config/unicorn.rb
的配置文件不存在/home/huginn/huginn/log/production.log
這個文件非常的冗長,如果在你使用 Huginn 的時候出現(xiàn) We're sorry, but something went wrong.
,這是一個典型的示例回溯信息,可以幫助你或者 Huginn 的開發(fā)者定位問題。
NoMethodError (undefined method
name' for nil:NilClass):
index'
app/controllers/jobs_controller.rb:6:in
config/initializers/silence_worker_status_logger.rb:5:in `call_with_silence_worker_status'
如果你的某一個 agent 沒有正確的運行,這些文件會包含錯誤信息或者其他回溯信息。最簡單的調(diào)試 agent 的方式就是看你的日志文件,當(dāng)你在 Huginn 的網(wǎng)頁上改變或者觸發(fā) agent 的時候,都會產(chǎn)生這些日志文件。
這些日志文件的位置取決于你的 Procfile 文件,這些命令會給你可用的日志文件列表:
ls -al /home/huginn/huginn/log/*/current
當(dāng)你想要觀察后臺進(jìn)程的時候,你可以輕松的查看所有改變的文件:
tail -f /home/huginn/huginn/log/*/current
你可能發(fā)現(xiàn)其他你無法解決的錯誤信息或者意外的回溯信息。請新建一個新的包含足夠的信息的 issue ,這樣你可以獲得這個問題的解決辦法。
本文由 Huginn 中文網(wǎng) 翻譯,已經(jīng)獲得項目作者授權(quán),原文請訪問 Installation from source
我的博客即將同步至騰訊云+社區(qū),邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=9bmt0ib957kd