IoTTalk system by liny@cs.nctu.edu.tw ( 林一平 )

Guide to Install IoTTalk Server on Ubuntu ... IoTtalk安裝指南
      點這看快速懶人安裝法 Click here to See Quick Installation guide
      點這看 IoTTalk 開發者手冊 (IoTTalk Server 架構與重要檔案資訊(開新窗)
      如果沒碰過 Python 和 Flask 框架, 可以 點這看 Python/Flask 新手快速入門 (開新窗)

VPS (Virtual Private Server/System) running Linux     iottalk.me     iottalk.cc
(一)System Environment 環境部分:(optional)
    ( use root or use an account whitch can DO sudo)

(1) Create user account for IotTalk server, for example, iotsvr
             sudo adduser iotsvr
      (You can use sudo passwd iotsvr to change password for iotsvr)

(2) Let the IoT server account iotsvr can sudo with NO password

  Simple way: 
   cd /etc/sudoers.d
   sudo echo 'iotsvr ALL=(ALL) NOPASSWD : ALL' >> iotsvrHaHa

Alternative  way to do so: 
 cd /etc/sudoers.d
 sudo touch iotsvrHaHa      (can be any file name)
 sudo vi iotsvrHaHa
 輸入 iotsvr ALL=(ALL) NOPASSWD : ALL  
 按下ESCape並打入  :wq!  

(3) put screenrc in your home directory

  sudo apt-get install wget -y  ### make sure we have wget
  cd
  wget iottalk.vip/screenrc
  cp -p screenrc .screenrc
 # make sure you have screen  Utility
 sudo apt-get install screen

(4)system/database utility

sudo apt-get update -y
sudo apt-get upgrade -y

sudo apt-get install vim -y
sudo apt-get install ssh -y
sudo /etc/init.d/ssh  restart

# # sqlite3
sudo apt-get install sqlite sqlite3 -y
sudo apt-get install libsqlite3-dev -y

# # openssl
sudo apt-get install openssl  -y
sudo apt-get install libssl-dev -y

# gcc/g++ ...  (build-essential)
sudo apt-get install build-essential -y

#zlib  for unzip files
sudo apt-get install zlibc  zlib1g zlib1g-dev  -y
# Centos: sudo yum install zlib  zlib-devel  -y

(5)Prepare/Install Python3

 cd
 wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
 tar xzvf Python-3.6.5.tgz
# Build Python3
 cd Python-3.6.5
 ./configure --prefix=/usr/local
 make -j 2  
 sudo make install 
 sudo pip3 install --upgrade pip
(5b)補充說明
# ///pip is already installed if you are using Python 2 >=2.7.9  .. 
# /// ..  or Python 3 >=3.4 downloaded from python.org or //
# /// or  if you are working in a Virtual Environment created by virtualenv or pyvenv.
# // If you have no PIP, do:
# // curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
# // python get-pip.py
# // Reference: https://pip.pypa.io/en/stable/installing/
# ///////
(二) IoTTalk Server 部分: 
(6) Obtain iotTalk
# Grab the iottalk_server_1.0   using git clone
 cd
 # git clone https://IoTtalk_Share:iottalkshare2016@bitbucket.org/IoTtalk/iottalk_server_1.0.git
 # sorry the above github NO Longer exist now
# # Now require Authorization; You need a GitLab account, and ..
# # Please contact "林勻蔚博士"<jyneda@gmail.com>

 git clone https://gitlab.com/IoTtalk/iottalk-v1.git iottalk_server_1.0
或 把帳號密碼寫進去命令列 (用 script 就需要這樣):
 git clone https://gitlab帳號:gitlab密碼@gitlab.com/IoTtalk/iottalk-v1.git iottalk_server_1.0

 cd iottalk_server_1.0       
 sudo pip3 install -r requirements.txt


(7) Mail utility, and  you may also need uwsgi, nginx
  (7a) Mail utility  --   (Cyber device: Message的功能需要) 
     # for Ubuntu/Debian/LinuxMint:
       sudo apt-get install mailutils -y

  (7b) nginx   ( as reverse Proxy ; 搭配 uwsgi 跑 CSM 和 CCM ) 
      sudo -H apt-get install nginx -y

  (7c) uwsgi   (should be done after Python3 installed)
      sudo -H apt install libpcre3 libpcre3-dev -y
      sudo -H pip3 install uwsgi

  (7d)如果選用 uwsgi 執行 CSM 和 CCM,
      則在 lib/startup.sh 內必須:
        d1) 選用 uwsgi 執行 CSM
        d2) 選用 uwsgi 執行 CCM
        d3) 不要執行 web.py
        d4) 要正確設定 nginx 讓 http 正確轉接 (d1) 和 (d2)  
  (7e)可以 點這看 nginx 設定檔範例 http://iottalk.vip/wsgi_nginx_conf/
      (其中 iottalkuser 要換成你執行 IoTTalk server 的帳號名稱,
       這檔案 和 以下兩檔案有關: (裡面 uid = iottalk  要改為  uid = 你IoTtalk帳號)
          lib/wsgi_csm.ini      for CSM
          lib/ccm/wsgi_ccm.ini  for CCM 
  (7f)如果你使用 source iotubu快速自動部署 IoTTalk server,
       則以上 iotubu 會自動幫忙完成 ! 
       你可以用 wget http://iottalk.vip/iotubu 取得這檔案; 
      或:
        點這看 iottalk.vip/iotubu 檔案

 
(8) test to see if it works?
  sudo -u iottalk /home/iottalk/iottalk_server_1.0/setup/startup.sh

 # then, ..
 # use browser to test your site
 # for example:
   http://iottalk.vip
 

(9) Make it run automatically
  modify /etc/rc.local

 #add the following line   (Note that we assume the account is iotsvr)
 sudo -u iotsvr  /home/iotsvr/iottalk_server_1.0/setup/startup.sh


(10) Reboot the system
 Then, reboot your system to let IoTTalk Server RUN  automatically using the account iotsvr

  sudo reboot 



(三) How to check if IoTTalk Server is running OK ?  
    Make sure you are login as iotsvr  (你執行 IotTalk server 的帳號)
    screen -r
    then use Ctrl+ RIGHT_KEY to switch to next screen window
    use Ctrl+A d   to detach the screen console

   重開機後,下指令 screen -ls,先看有沒有看到screen 在跑,
   然後再下指令 screen -r,去看裡面有沒有五個分頁 
      (按 ctrl + 方向鍵會切換分頁),若以上都有看到,
         且分頁內最後一行不是錯誤訊息,則表示安裝成功。
     敲 CTRL_A 然後敲 d 讓 screen 回到背後跑。
  * 萬一不小心打了 screen 沒帶參數 -r  會啟動另一支 screen 此時沒分頁, 可敲 CTRL_d 結束此新 screen !!
  * 萬一不小心打了 screen 沒帶參數 -r  然後又敲了 CTRL_A + d 把它踢到後面, 此時再打 screen -r 會說有多個 screen, 
    此時可以照畫面指示先把沒用的 screen 叫回來並敲 CTRL_D 結束它。

	 
附錄: 安裝python3.7出現ModuleNotFoundError: No module named ‘_ctypes’解決辦法: sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus sudo apt-get install build-essential libncursesw5-dev libgdbm-dev libc6-dev sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev sudo apt-get install libssl-dev openssl sudo apt-get install libffi-dev
  Quick Installation for IoTTalk Server on Linux:

(1) for Ubuntu system:
    wget iottalk.vip/iotubu
    source iotubu

(2) for Fedora system:
    wget iottalk.vip/iotfed
    source iotfed

(3) for CentOS system:
    wget iottalk.vip/iotcen
    source iotcen

以上原則上都是做完後重新開機即可(建議往下看看補充說明):
      sudo reboot

      當然, 重新開機後隨時可以用 Putty 或 Pietty 連線,
並以該 IoTTalk Server 帳號(預設是 iotsvr) 登入,
然後用 screen -r 命令觀察各 screen 分頁執行狀況
    (按 ctrl + 往右 方向鍵 會切換分頁)
** 記得, 不看了就 敲 CTRL_A 然後敲 d 讓 screen 回到背後跑。

注意如果你安裝 Ubuntu 16.x 則它 /etc/rc.local 內預設有 exit 0
這個 exit 0 不能拿掉, 否則你從 SSH 遠程連線視窗做 sudo reboot 將會開機開不起來;
這時只能登入 VPS 廠商的主控台把該機器 Off (Turn Off; 會很久要耐心等待)然後再 On 起來 !!!
所以, 採用 iotubu 腳本做自動部署 IoTtalk 時, 記得要自己修改 /etc/rc.local 把該 exit 0 搬到最後一句,
阿不然還沒執行 IoTtalk 的 startup.sh 之前就做到 exit 0 結束了 /etc/rc.local
(歹勢 , iotubu 寫得不夠聰明, 沒自動把 執行 setup/startup.sh 那句寫在 exit 0 那句之前 :-)
** 補充: 現在已經改聰明了一點, 會自動幫你把那個 exit 0註解掉並在最後補新的exit 0了 :-)  
** Ubuntu 18.x 系統預設 /etc/rc.local 這檔案並不存在, 結尾沒有 exit 0 好像也沒關係 :-)
      所以, Ubuntu18.x 做完 source iotubu 之後直接做 sudo reboot 就可以了。
** 注意 Kurento Server至今(2018/12/09)只能安裝到 Ubuntu 16.x, 還不支援 Ubuntu 18.x, 請看這篇文章

阿不對, 忽然想到如果是 CentOS, 做完後還要手動做一個小動作 . .
螢幕有提示你還要手動做 sudo visudo 修改預設的 secure_path
請仔細看螢幕顯示的提示 !
這原因是因為 OS 在設計上, 基於安全的理由,
當我們用 sudo 時的命令路徑(command path)是根據 secure_path
在CentOS預設的 secure_path  不包括 /usr/local/bin
可是 Python3 是被安裝在 /usr/local/bin 
那為何 Ubuntu 和 Fedora 不必做 sudo visudo 呢?
因為這兩系統預設的 secure_path 有包括  /usr/local/bin
注意 sudo visudo 改的檔案其實是 /etc/sudoers 這文字檔;
但該檔案內有提醒你務必用 sudo visudo 修改它 !! 

說明:
該 iot??? Script 會先幫建立一個帳號 iotsvr 並加入 sudoers 使其可執行 sudo 免密碼!
如果你不想要用 iotsvr 這帳號名稱,
你可以在 wget 回來之後先修改再做 source 該檔案,
應該是在第三行或第四行 iotuser='iotsvr'
腳本會先問你要給該帳號的密碼, 打了要記住喔, 因為我偷懶沒問兩次比對 :-)
可以先在網頁上看看: iottalk.vip/iotubu

? 既然 Ubuntu 和 Fedora 都把 /usr/local/bin 放在預設 secure_path,
    為何 CentOS 預設不放呢?
Ans: 好問題, 這個問題的答案可以去問柯南 或問 柯 P 或問 柯P的對頭葛特曼(Ethan Gutmann),
      哈哈 ! 不過這裡也有人討論過:

      https://security.stackexchange.com/questions/136990/whats-the-motivation-for-excluing-usr-local-bin-from-roots-path

如果你重複執行以上的 Script, 則 /etc/rc.local 檔案會有多筆 sudo 命令 執行 iottalk server
If you run the script more than once, then in /etc/rc.local may have Multiple sudo command to run iottalk server
In this case, please edit/modify the file /etc/rc.local by yourself.
請自行把 /etc/rc.local 內不需要的 sudo 命令 用井字號 # 註解掉 :
 
如果使用 vi / vim 時發現彩色的字都看不清楚:
 
這時可以打入命令 :synt off 把語法關聯到顏色功能關閉 :syntax off
之後需要看彩色就打入 :synt on

 
如果你沒有自己的 Linux Server,
可考慮Amarzon 亞馬遜 一年免費試用的 AWS EC2 免費 VPS (還有 DigitlOcean、Hostwinds、Linode 等);
   (注意流量超過 15GB/月要收錢, 所以只能拿來自己試用, 最好不要開放給別人用 !)
或是 點這連到DigitalOcean網站建新帳號就可獲贈 US$100.0, 有效期兩個月,
   綁信用卡不必先給扣錢(好像會扣US$1.0驗證), 等於如果選 US$5.0的可以建立 10部VPS連續用兩個月不要錢 !
   Digital Ocean 還有個好處, 就是當基本流量(至少1TB)超過後, 只要 US$0.01/GB, 應該是最便宜的;
   那個Amazon AWS 至少要 US$0.09/GB; Linode.com 要 US$0.02/GB 也還算便宜 :-)

或是 租用一個 hostwinds.com 的VPS也很便宜, 每月大約台幣不到150元即可,
   但是 Hostwinds.com 流量超過則會暫停服務直到你付錢升級或帳單週期結束進入下個週期(有點不方便)
     If you don't hava a real computer with Linux,
     You MAY try AWS EC2 free solution with limited bandwith(15GB/Month).
or if 15GB/month is NOT enough for you,
     You can consider to use DigitalOcean VPS(贈送US$100) OR Hostwinds VPS
.
點這連入 DigitalOcean VPS 第一次贈送 US$100元, 這 100美元在 60天內可抵扣任何帳單, 過了60天餘額失效 !
*$* 點這可以看更多其他 VPS Hosting Providers 介紹


Hostwinds VPS ( 選那個最便宜的方案即可, 現在應該是 4.49/Month, 美金啦 )
      進入後 uncheck SSD 不要勾選 SSD 則又可省大約 0.9 美元 ! (當然 HDD 硬碟比較慢)
      You can save us$0.9 if you uncheck SSD :-) But SSD IS FASTER THAN HDD.


You need a terminal emulator, like PuTTY or PieTTY, to connect to your VPS.
Click here to visit PuTTY official site to Download PuTTY

or

Visit PieTTY project official site

You may want to download Pietty0400b14.zip from here

Note that you should use SSH private key
to connect to your VPS as root at the very first time.
After Login as root, you can create a normal user account with sudo privilege.

注意 Hostwinds 的 VPS 需要建立 SSH Key 綁定以便遠端登入為 root 管理機器
登入後建議立即建立一個帳號(例如 iottalk), 並給予 sudo 權限 !

Memo for choosing Hostwinds VPS:

(1) Choose the cheapest, Unmanaged Linux, 
    選最便宜的方案, 大約只要台幣 150元/月
    不要選 Managed (被管理的)
(2) HDD is cheaper than SSD  (save US$1.0)
    不要勾選 SSD 通常會省大約一元美金 (當然 HDD 硬碟比  SSD 慢很多囉)
(3) Do NOT select Cpanel/WHM (expensive)
    Cpanel/WHM 主控台通常是搭配 Managed (被管理的), 
    給不太會 Unix Command Line 的人很好用,
    但是很貴, 每月約台幣400元)
(4) You can Re-Install your VPS Instance any time
    你隨時可以把你 VPS 伺服器執行重灌,
    有多種 OS 可以選擇, 每次重灌大約只要三分鐘
    (約 1.5分鐘重灌完成, 再等1.5分鐘才可重新連接上)
(5) SSH key is required to Login as root 
  (a)for the target machine Instance, Click Manage Button
  (b)Click Manage Server
  (c)Click MANAGE SSH KEY
     then, Input a name for the Key pair, click  Create Key
  (d)Download the Private key  (Choose PuTTY mode)
     注意下載前要勾選 PuTTY 模式 , 不要勾選 OpenSSL  
  (e)Click CHANGE SSH Key, bind your machine with the key
  (f)Reboot your machine to let the key effective
     重開機後新綁的 Key 才有效
  (g)Use PuTTY or PieTTY (in PuTTY mode) to connect your VPS
     Provide your SSH Private Key for SSH Authentication
  (h)type root as user name
     After Login as root, you might want to add a user account:       
     sudo adduser iottalk
     sudo passwd iottalk 
  為何不愛用國貨選國內的 VPS 方案?

主要是國內的貴很多ㄟ .. 來看看智邦的 VPS 租用方案
看到沒? 最便宜的一年要台幣一萬多且流量一個月只有 300GB, 硬碟只有 10GB
Hostwinds 每月 150元台幣的方案是 流量 1TB/月 + 硬碟 30GB;
所以智邦的 VPS 容量、流量是 HostWinds 的三分之一不到,價格卻是五倍多ㄟ !
若要加購 Cpanel 圖形化管理界面則智邦每年要兩萬元,Hostwinds 大約每年五千元台幣!
還有,用 Hostwinds, 你隨時可以執行"重灌"作業系統,
Ubuntu, CentOS, Fedora 等可以選擇。

(若選 Windows 則要加錢喔,因為 Bill Gates 也要賺啊 !)
如果你找到比 Hostwinds 更便宜的請記得告訴我 :-)      
注意 Hostwinds.com 建立 VPS 機器系統之後第一次用 root 登入必須綁定 SSH key:
    (a)找到 MANAGE SSH KEY 按鈕, 輸入容易記的代表該 KeyPair名稱, 執行 Create Key
    (b)此時私鑰 (Private Key)會出現讓你下載,
        記得先點選 PuTTY 模式再下載 Private Key 存檔
,
        之後 PuTTY 或 PieTTY 的 SSH Auth 認證要用到!
    (c)確定有把 SSH Key 綁定你的 VPS 伺服器
        點 CHANGE SSH Key 以便 管理綁定/刪除 SSH Key
    (d)注意必須重新開機 (Reboot) 後剛綁定的 SSH Key 才有效 !
    (e)如果有勾選預設使用, 之後建立的 VPS 會自動綁定該 SSH Key Pair
    (f)一部機器(VPS)可以綁定多個 Key Pair, 一個 Key Pair 也可綁到多個 VPS 主機伺服器
    *** 如果你在網咖或公用電腦使用, 結束後記得刪除電腦上的私鑰檔案,
      ** 最好也把伺服器上的該 SSH Key 刪除, 以免被偷用 root 權限 !


針對你要管理的機器點按 Manage 按鈕 : (廢話 :-)

在左邊點選 Manage Server ,  這時就會有 CHANGE SSH KEYS 和 MANAGE SSH KWYS 可以點選


點了 MANAGE SSH KEYS 之後, 準備建立新的金鑰對 (Key Pair),
先輸入一個簡單容易記得用來做啥的英文名稱, 然後點按 Create Key

建立新的 SSH Key Pair 後, 它把 Private 丟到我們電腦上,
還特別聲明在 Server 端都沒有儲存喔 ! (廢話, 不燃怎叫做 Private Key 私鑰 !?)

注意上圖, 鑰儲存之前 key format 記得點選 PuTTY, 然後再點按 Download

再來, 要確定該新建立的 Key 有綁定你要登入為 root 的該機器 (VPS)


要點 SELECT SSH KEYs 那格子空白才會出現你有哪些 Key 可以選
都選好之後, 要在格子外面任意空白按一下才會出現 Confirm 確認按鈕可以點按

如上圖, 都選好之後, 要在格子外面任意空白按一下才會出現 Confirm 確認按鈕可以點按

 再來必須重開機 (Reboot) 新綁定的 SSH Key 才有效喔 !

 重開機 (Reboot) 之前先看清楚真的有綁定新的 SSH Key 以免白白重開機!


 執行對該 VPS 重開機 (Reboot) 之前先看清楚真的有綁定新的 SSH Key 以免白白重開機!
 執行對該 VPS 重開機 (Reboot) 之後,
 大約三分鐘後就可用 PuTTY 或 PieTTY 連到該機器並登入為 root



Use PieTTY to connect to your VPS:
第一執行 PieTTY 必須選 PuTTY 模式才有辦法認證 SSH Key 輸入 IP address 或綁定的 Domain name (注意 Domain name 是另外要錢的) 點 SSH 展開後點 Auth 然後瀏覽到該 Private Key 打開以便與 VPS 認證 然後點 Open 就會開啟一個黑色 Console 窗連入該 VPS 伺服器, 打入 root 不必輸入密碼 (也不知道 root 的密碼啊 :-)


You can also Use PuTTY to connect to your VPS:
輸入 IP address 或綁定的 Domain name (注意 Domain name 是另外要錢的)
 # File name:  .screenrc 

#  This is the The file  .screenrc
# Title:        screenrc file
# Author:       darkgerm

# ==================== Status Line ===================={{{1

# examples
#caption always "%{=u .G} %-w%<%{=ub .y}%n %t%{=u .G}%+w "
#hardstatus alwayslastline "%{= .K} [%l]%<%=%{= .W}@%H %e %=%{= .y}%Y/%m/%d%{= .m} %C %A"

#caption always "%{= wk} %{= KY} [%n]%t @ %H %{-} %= %{= KR} %l %{-} | %{= KG} %Y-%m-%d %{-} "
#hardstatus alwayslastline " %-Lw%{= Bw}%n%f %t%{-}%+Lw %=| %0c:%s "


#backtick 1 0 0 echo $LESS  # use this with %1`
hardstatus alwaysignore
caption always "%{=u bw} %-w%{=ub kG} %n %t %{-}%+w %= %{= KR} %l %{-} %{= KC} %m/%d %c %{-} %{= KY} %H $STY %{-} "
#every time you want to 'make a block', use %=
# { }
#
# attribute:
#   =   clear all before
#   -   remove the set from the current attributes. (rollback to last one)
#   u   underline
#   b   bold
#
# modifier:    capitalized means bright
#   k   black
#   r   red
#   g   green
#   y   yellow
#   b   blue
#   m   magenta
#   c   cyan
#   w   white

# set STY when create a new screen to enable $STY feature.
# ex: sc() { STY=$1 screen -S $1 ; }


# ==================== Settings ===================={{{1

# `bind` need prefix key, while `bindkey` doesn't
bindkey \033[D prev     # for putty/mac iTerm ctrl+arrow
bindkey \033[C next
bindkey ^[b prev        # for mac terminal ctrl+arrow
bindkey ^[f next
bindkey ^[[5D prev      # for mac terminal alt+arrow
bindkey ^[[5C next
bindkey \033[1;9D prev  # for mac iTerm alt+arrow
bindkey \033[1;9C next
bindkey \033[1;5D prev  # for cygwin terminal ctrl+arrow
bindkey \033[1;5C next

escape ^Aa          # use "^a a" to insert ^A to the shell
#bind ^I             # unbind the `focus` key (rebind when split window)


defutf8 on
defencoding utf8
bind b encoding big5 utf8
bind u encoding utf8 utf8

# ssh ProxyCommand need this. Please make a soft link if path is not right.
shell /bin/bash

defc1 off
defflow on
vbell off
startup_message off
defbce on       # erase background with current bg color
shelltitle '% |-'
defscrollback 10000
#cjkwidth off


# ==================== Non-use Settings Backup  ===================={{{1
# Colours
#termcapinfo xterm "Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm"
#term xterm


Domainname (網域名稱)通常一年年費在台幣 800元以下,
有些甚至第一年不要 100元, 但是有些因為被網域蟑螂買走了, 很貴 ..




推薦 Domainname 可在 Godaddy.com 購買, 它的 管理 DNS 功能很好用 :



如何從 PC/Windows 把檔案傳到你的 VPS ?
只要你有安裝 PuTTY 就可以開Windows 的 CMD 命令窗用 scp 複製過去 !
想把檔案 godbuy.png 複製過去 iottalk.vip 這機器的帳號 iottalk,
假設你在該 VPS 有建立帳號 iottalk 且其家目錄(home directory)下有 temp/ 子目錄,
則這樣:
      scp godbuy.png iottalk@iottalk.vip:temp  


以下是利用 Godaddy.com 上管理 iottalk.vip 的轉網址功能轉到對應的 IP
186.iottalk.vip     187.iottalk.vip     188.iottalk.vip     189.iottalk.vip     190.iottalk.vip    
191.iottalk.vip     192.iottalk.vip     193.iottalk.vip     194.iottalk.vip     195.iottalk.vip    

Top     切換到 IoTtalk Server 系統開發者手冊
PuTTY official site to Download PuTTY   PieTTY project official site   Download Pietty0400b14.zip
  整理 by 蔡文能 tsaiwn@cs.nctu.edu.tw     交大資工系     tsaiwn.weebly.com     LINE ID: tsaiwn     FB: fb.me/tsaiwn     幾個英文字讀音   TOP