HackpadG0V開源社群愛用的線上文件協同編輯平台,在學運期間通過1500人壓測一戰成名

Hackpad 基本是個簡便易用的網路共筆平台,支援多人共用即時更新,編輯文字、上傳圖檔還算便利,能追蹤編修歷程,比Wiki系統好用,我們開發團隊一直覺得用它整理系統架構文件、共用程式庫規格、茶包處理FAQ…等,會是很棒的選擇。但是對不少企業來說,這類「雲端服務」解決方案最大的致命傷始終在於「資訊儲放在網際網路可能外洩」的疑慮,用腳底板想都知道一提出來就會被網管或資安打槍(雖然放在公司裡也不保證絕對安全)。唯一的途徑是像Hipchat一樣,採自建伺服器自行管理模式才可能過關。

前天跟同事正好就聊到這個,才在感嘆可惜Hackpad沒有私服方案,追到 Github 找到 Hackpad 公司帳號,只發現一個空空如也的Hackpad Repository,唉~ 看來得想其他解決方案。

昨天早上,在FB看到一則好消息:Dropbox finally open-sources its Hackpad collaborative document editor。讀完才知故事始末,去年四月Dropbox併購了Hackpad,在今年四月左右Hackpad開發團隊曾發了通知說幾週後將會讓Hackpad開源,但近四個月過去什麼沒發生,還在Github討論區引發一些質疑。就在前天晚上,Dropbox終於釋出Hackpad原始碼

說曹操曹操到的巧合真令人開心,馬上來試裝看看。懶得自己重灌VM,用MSDN訂閱附贈的額度在Azure開一台Ubuntu做測試,幾分鐘就有一台灌好OS的新VM可以玩,對於抱著玩膩就甩掉心態的花心IT,Azure真是搞一夜情做Lab的好地方。選Ubuntu的原因是想貼近Hackpad原有的開發執行環境,應能少踩一些雷,另一方面,也為將來的ASP.NET 5 on Linux預做準備,該好好溫一下Linux操作。

關於在Azure上開Ubuntu VM,小歐有一篇圖文並茂的說明:Linux on Azure:如何跨出第一步,不熟Azure操作的同學可以參考。Azure管理畫面已改版過,但步驟跟輸入欄位差不多。要留意一點,記得選A2以上等級,一開始我選A1 單核 1.5G RAM,啟動Hackpad時冒出記憶體不足的訊息,糗!後來調成A2 雙核 3.5G 才成功。

我選的OS是Ubuntu Server 15.04版(Ubuntu Server 14.x LTS是較穩定的版本,反正我是練刀沒差),依小歐的文件,我只裝到可用Putty登入,桌面環境跟遠端桌面就不裝了,純當Server用,靠指令搞定就好。

Github上的Hackpad 安裝文件寫得還算詳細,照著做就能成功安裝,以下是我的筆記:(要搞定還是需要基本Linux知識)

  1. 先更新套件資訊
    sudo apt-get update
  2. 安裝JDK 1.7 參考 
    sudo apt-get install default-jre 預設裝的就是1.7版
    sudo apt-get install default-jdk 預設裝的就是1.7版
  3. 安裝MySQL 參考:Ubuntu 安裝和設定 MySQL
    sudo apt-get install mysql-server
  4. 安裝MySQL Connect/J
    (Java連MySQL的程式庫,這個安裝文件沒提到,有可能被當成常識吧!)
    sudo apt-get install libmysql-java
  5. 安裝Scala
    直接 sudo apt-get install scala 只會裝2.9版,而安裝文件要求2.11
    所以要用以下步驟 參考
    sudo apt-get remove scala-library scala
    wget http://www.scala-lang.org/files/archive/scala-2.11.7.deb
    sudo dpkg -i scala-2.11.7.deb
    sudo apt-get update
    sudo apt-get install scala
  6. 由Github取回Hackpad程式碼
    wget https://github.com/dropbox/hackpad/archive/master.zip
    sudo apt-get install unzip
    unzip master.zip
    將檔案解到hackpad-master目錄下
  7. 修改 hackpad-master/bin/exports.sh
    nano exports.sh (建議用nano文字編輯器)
    修改以下項目(依Ubuntu版本、環境或操作步驟不同,路徑可能有異,請自行校正)
    export SCALA_HOME="/usr/share/scala"
    export SCALA_LIBRARY_JAR="$SCALA_HOME/lib/scala-library.jar"
    export JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64"
    export MYSQL_CONNECTOR_JAR="/usr/share/java/mysql.jar"
  8. 緊張的開獎時間
    執行hackpad-master/bin/build.sh 編譯程式 

    編譯過程冒出一些警告(Warning)搞得氣氛有點緊張,所幸人品通過檢測,編譯成功!
  9. 設定資料庫
    執行hackpad-master/contrib/scripts/setup-mysql-db.sh
    Creating database hackpad...
    Enter password: 輸入MySQL root密碼
    Granting priviliges...
    Enter password:
    Success
  10. 建立設定檔
    將hackpad-master/etherpad/etc下的etherpad.localdev-default.properties複製成 etherpad.local.properties
    nano etherpad.local.properties 使用nano修改設定 參考
    我只按安裝說明改了以下兩項
    etherpad.superUserEmailAddresses = 管理者email
    topdomains = localhost,xxxx.cloudapp.net
  11. 安裝gemoji表情字型
    wget https://github.com/github/gemoji/archive/master.zip
    unzip master.zip
    將gemoji-master/images/emoji/unicode下的png檔複製到
    hackpad-master/etherpad/src/static/img/emoji/unicode


懶得打通Facebook、Google帳號整合認證(反正未來在公司內部跑也用不到),也不想花時間搞定SMTP送信,使用者註冊只能選輸入電子郵件:

畫面提示需收信點連結才能完成認證程序,但你知道我知道獨眼龍也知道,等一輩子也不會等到信滴。

解決方法是直接下SQL,到MySQL資料庫由hackpad.email_signup查出token:

自行組出身分認證連結URL,httq://localhost:9000/ep/account/validate-email?email=YOUR_EMAIL&token=TOKEN,用瀏覽器直接開啟連結就可完成認證開始使用。

就這樣,一台Hackpad私服就安裝完成囉!

經過簡單測試,新増文件、編輯都OK,但部分功能有點小問題,例如圖檔上傳不Work、表格無法打字,而前後端不時連線Dropbox及Facebook(可能是某些整合沒關閉),看來還有不少怪要打,但這已是極好的第一步。

感謝Hackpad開發團隊,Open Source萬歲!


Comments

# by jimmy

你好,請問可以用IP連hackpad網頁嗎? 我用IP連會出現錯誤

# by Jeffrey

to jimmy, 依我自己測試,答案是不行。程式似乎預設URL一定是用FQDN(aaa.bbb.ccc),改用IP會出錯,要克服恐得改程式。我是先在hosts裡自設對應繞過去。

# by Jason_linux

或許proxy seever可以處理這個問題

# by hooligan

自行組出身分認證連結URL,httq://localhost:9000/ep/account/validate-email?email=YOUR_EMAIL&token=TOKEN,用瀏覽器直接開啟連結就可完成認證開始使用.到这一步总是登录不了,要输密码,输入注册时的密码,也登录不了,有调回输入密码界面。

# by jeney

自行組出身分認證連結URL,httq://localhost:9000/ep/account/validate-email?email=YOUR_EMAIL&token=TOKEN,用瀏覽器直接開啟連結就可完成認證開始使用。到这里之后就要输入密码,总是登录不了啊。ubuntu 140.10.

# by jeney

敬请帮助,详情http://jys001.wiki.baihui.com/主页.html。

# by jeney

jys001.wiki.baihui.com/主页.html

# by Jeffrey

to jeney, 確認一下,wiki baihui的圖例寫token=TOKEN是事後故意將真實token=S1iLQpWY...改成token=TOKEN字樣,還是就真的寫token=TOKEN?

# by jeney

to Jeffrey,谢谢,已经解决,token后面要用破解到的数据。

# by Aiden

我看在 github 上有人發 issue 說 bug 很多,不知道有沒有人碰到過

# by Aiden

另外提醒一下,設定有錯字喔, export SCALA_LIBRARY_JAR="$SCALAHOME/lib/scala-library.jar" $SCALAHOME -> $SCALA_HOME

# by Jeffrey

to Aiden, 感謝提醒,錯字已校正。我自己架了一台私服商轉中,還蠻好用的。程式碼有不少地方寫死跟Dropbox/AWS整合,沒有開關可以關閉,並沒有包裝成可以安裝於不同應用情境的獨立系統,有待要應用的人自己努力。不過Hackpad核心功能幾乎都可用,已是功德無量了。

# by Lvmaple

请问一下,我在最后执行run.sh的时候总是报错解决不了:/run.sh: line 30: /home/test/Desktop/hackpad-master/etherpad/data/etherpad.pid: No such file or directory 以及OpenJDK 64-Bit Server VM warning: Cannot open file ./data/logs/backend/jvm-gc.log due to No such file or directory 有什么解决办法?谢谢(网络不好,如果发了很多次,请见谅)

# by Jeffrey

to Lvmaple, 依我所知,成功啟動Etherpad後,其Process ID會被寫入/data/eetherpad.pid,若缺少該檔案代表程序未啟動,至於未啟動原因為何,恐得由其他地方找線索。

# by Lvmaple

to Jeffrey,谢谢,这两个问题解决了,第一个:用管理员权限重启了一下Apache;第二个:手动新建了文件就好了

# by Lvmaple

再打扰一下,请问您搭起来的私服能上传图片吗

# by Jeffrey

to Lvmaple, 原始碼要搭配AWS,不然就得自己改程式,我嘗試過用ASP.NET Core寫圖床(另一半動機是想嚐鮮練功),但架構複雜了點( Facebook貼文https://goo.gl/31GD9L ),實務上可能要考慮改Scala原始碼,將檔案存在Hackpad伺服器上較簡潔方便。

# by 徐世杰

我输入邮件之后 不会出现welcome to hackpad的提示框,然后我自己在email_signup表里面加了 email和token但是并不能顺利验证,输入自己组的url还是要输入密码

# by Jeffrey

to 徐世杰,我自己在email_signup表里面加了 email和token<=這部分可能會有問題,輸入Email後Hackpad除了寫入email_signup可能還有其他動作,光新增email、token我不確定可行。要不就得解決沒有出現welcome to hackpad的問題,再不就是要查出中間Hackpad還寫入了什麼資料。

# by BowenHsu

您好,想請問版主,如何 "先在hosts裡自設對應繞過去"呢? 以及,如果要能夠將 上傳圖片 功能修正的話,是不是有個方向可循呢 謝謝您 !

# by Jeffrey

to BowenHsu, 自設對應是指在windows/system32/drivers/etc/hosts自訂IP與Domain Name對應,將指定網域名稱對應成特定IP,但只在該台機器上有效。 Hackpad是用Scala(http://openhome.cc/Gossip/Scala/)開發的,它是Open Source,修改伺服器端程式,將上傳檔案直接存入伺服器硬碟應是最簡單有效的改法。

Post a comment