:::

jQuery動態載入CKEditor注意事項

jQuery動態載入CKEditor注意事項

image

最近在寫標註工具的API,完成之前沒有好好做的載入器(loader),目標是要讓人用一行程式碼就能載入全部需要的工具。

在我做的KALS標註工具當中使用到了CKEditor,而要讓他與jQuery搭配,則需要額外載入一個調配器(adapters)。但是傳統的用法都是在<head>寫<script>標籤,這跟我要的動態載入不太一樣。

在四處碰壁嘗試之後,終於找到了正確的作法。在此做個筆記。


不可用的方法

由於我是要在網頁讀取完之後才開始動態載入,因此不能用document.write,否則會洗掉整個網頁。

原本我也想利用DOM建立<script>標籤,內含src屬性載入CKEditor,插入<head>當中,但卻發現這個插入的<script>標籤並不會執行,簡單來說就是沒有效果。

後來改用jQuery的getScript()方法,就能夠確實地讀取並執行CKEditor。不過仍有其他細節需要注意,以下說明。

正確的方法

正確的作法是:

  1. 建立<script src=”[CKEditor的網址]”></script>貼到<head>之中,供CKEditor本身去搜尋連結,自動載入其他檔案。
  2. 以jQuery.getScript()載入並執行CKEditor。
  3. 先載入CKEditor主程式,再載入調配器。

以下是簡單的範例程式碼:

//在這之前,你已經確認載入了jQuery

//路徑宣告
var _ckeditor_url = "/ckeditor/ckeditor.js";
var _adapters_url = "/ckeditor/adapters/jquery.js";

//載入函式
var _load_lib = function (_url, _callback) {
var _script_tag = $('<script type="text/javascript" src="' + _url + '"></script>');
_script_tag.appendTo($('head'));

$.getScript(_url, function () {
if (typeof(_callback) == 'function')
_callback();
});
};

//開始載入
_load_lib(_ckeditor_url, function () {
_load_lib(_adapters_url, function () {

//你接下來要做的其他程式

});
});

這是截自KALS載入器的部分程式,並沒有經過測試。有任何錯誤,請提醒我再檢查、修正。

(more...)

Proxmox VE建立虛擬區域網路 (VLAN) 方案 (3) 操作說明

Proxmox VE建立虛擬區域網路 (VLAN) 方案 (3) 操作說明

proxmox_logo 3 excute

終於來到了Proxmox VE虛擬區域網路方案的最後一篇。這一篇是介紹每建立一台虛擬機器時所需要的設定。儘管大部分的設定都在前一篇環境配置中設定完了,不過每一台虛擬機器還是需要手動設定不少參數。這邊也會介紹如何使用反向代理伺服器連接FQDN跟虛擬機器喔。

Proxmox VE建立虛擬區域網路(VLAN)方案目錄:

  1. 方案說明
  2. 環境配置
  3. 操作說明

1. 建立虛擬機器的網路設定

好,講了老半天,我們終於要在Proxmox VE建立虛擬機器了。登入Proxmox VE管理介面的網址是「https://192.168.11.13」,注意是https,而不是http。

由於它的介面已經很容易操作了,在此我就不再一步一步講述,只講需要注意的重點。

1-1. 建立虛擬機器

2011-10-24_155244 create vm - draw

  • 虛擬機器類型(Type):OpenVZ
  • 虛擬機器樣板(Template):Joomla! Content Management    debian-6.0-joomla_1.6-3_i386.tar.gz
  • 網路類型(Network Type):Brdged Ethernet (veth)
  • First DNS Server:140.119.1.110

最重要的是網路類型必須為veth,本篇不使用venet。其他的參數則就視你的需求做調整。

2011-10-22_001631 Open VNC console

建立好之後,就把這台虛擬機器開起來吧。進入主控台的位置在Open VNC console,如上圖。

1-2. 虛擬機器網路設定

這邊的網路設定必須要透過Proxmox VE的VNC console進入虛擬機器的指令列模式設定。

因為每一種Linux發行版的網路設定都不大相同,這邊介紹的是Debian。其實RedHat系的Linux發行版設定起來也差不多,可以參考使用CentOS的鳥哥教學

1-2-1. 編輯設定檔

請用vi修改/etc/network/interfaces 網路配置檔:

vi /etc/network/interfaces

因為目前還沒辦法連上網路安裝vim,所以只好先用vi。

預設的網路配置檔幾乎什麼都沒有設定,所以是無法連線到網際網路的。

設定網路的方式有兩種:DHCP與靜態網路,請選用其中一種來配置。

1-2-2a. 網路模式:DHCP

如果只是暫時要連到網際網路,而不需要讓網際網路的電腦連線至虛擬機器、讓它提供服務的話,你可以採用DHCP的配置方式。

請在網路配置檔加上以下設定:

auto eth0
iface eth0 inet dhcp
1-2-2b. 網路模式:靜態網路

如果是要對網際網路的電腦提供服務的虛擬機器,請使用靜態網路配置。配置如下:

auto eth0
iface eth0 inet static
address 10.10.10.1
netmask 255.255.255.0
gateway 10.10.10.254

設定時必須指定區域網路IP,在此使用10.10.10.1。同一個區域網路裡面不能有相同的IP,因此你可能需要另外的管理方法來確保IP之間不會相互衝突。

2011-10-24_161511 notes

我通常會將虛擬機器的區域網路IP跟FQDN資訊寫在Notes中,如上圖。

1-2-3. 重新啟動網路

請輸入以下指令以重新啟動網路:

/etc/init.d/networking restart

如果沒有錯誤訊息的話,那應該就是順利設定完成了。

1-2-4. 測試網路連線

你可以用最常見的ping指令,測試看看虛擬機器能不能連到Google:

ping www.google.com

如果順利的話,你可以看到以下畫面:

2011-10-22_012750 ping google

確認沒問題之後,按Ctrl + c取消ping指令。

如果網路順利接通的話,你就可以順便安裝vim,指令為:

apt-get install vim

到此為止,虛擬機器連到網際網路已經沒有問題了。但是反過來,若要網際網路的電腦能夠連到虛擬機器,那還需要其他的設定。以下繼續介紹。


2. Proxmox VE 網路路由設定

接下來我們要想辦法讓網際網路的電腦能夠連上虛擬機器。而這之間的橋接者,就是Proxmox VE了。

讓虛擬機器提供服務的方式有許多種,在此要介紹的是透過連接埠轉遞(port forwarding)跟反向代理伺服器(reverse proxy)的方法。

2-1. 網路設定規劃

在設定之前,有必要先釐清預期的網路設定。以下介紹中,我要讓人能夠連線到架設Joomla的虛擬機器。該虛擬機器是以靜態網路配置,區域網路IP為10.10.10.1。Joomla是走HTTP服務,連接埠80,在此設定Proxmox VE時,我規劃以31080連接埠轉遞到他的80連接埠;我們也希望能夠以SSH管理虛擬機器,SSH的連接埠為22,在此設定Proxmox VE時,我規劃以31022連接埠轉遞到他的22連接埠。但我們只希望特定的IP範圍能夠使用SSH連線到虛擬機器,範圍是192.168.11.0/24,也就是僅給192.168.11.0到192.168.11.254的IP連線。關於IP與子網路遮照的表示法,請參考Wikipedia的子網路介紹

此外,我們也設置了一個FQDN「joomla.example.com」,希望能夠讓網際網路的電腦透過此FQDN連線到虛擬機器。設定FQDN一般需要借助你網路環境中的DNS Server幫忙,或是你也可以修改自己電腦的hosts檔案,暫時加入IP與FQDN的對應表,以方便測試。Windows的hosts檔案位於C:\Windows\System32\drivers\etc\hosts,詳細請參考Wikipedia的介紹

2-2. 連接埠轉遞 (port forwarding)

簡單來說,我們要設定兩套連接埠轉遞的規則:(Proxmox VE表示實體機器,Joomla表示虛擬機器)

  • Proxmox VE:31080 –> Joomla:80
  • Proxmox VE:31022 –> Joomla:22

連到Proxmox VE的31080連接埠,就等於連到Joomla虛擬機器的80連接埠,提供HTTP服務;連到Proxmox VE的31022連接埠,就等於連到虛擬機器的22連接埠,提供SSH服務。其中第二套規則要加上來源IP的限制。

至於31080跟31022的設定,只是我自己的管理規劃。要用哪個連接埠並沒有特別技術上的限制,只要不要跟Proxmox使用的連接埠443衝突即可。

這些動作可以使用Webmin的Linux Firewall模組來進行,以下一一介紹。

2-2-1. 進入Linux Firewall模組的NAT設定

2011-10-22_013619 linux firewall - draw

請先登入Webmin,然後從左邊導覽列進入 Networking > Linux Firewall模組。然後點選Showing IPtable: Network address translation (nat),以進入NAT的設定頁面。

2-2-2. 新增規則

2011-10-24_170421 Linux Firewall Add Rule

我們要設定的規則是屬於Packets before routing (PREROUTING,封包被路由前的規則)鏈,請在PREROUTING右下角找到「Add Rule」進入新增。

2011-10-24_170816 Add Rule - HTTP 

剛進去的時候可能會被他繁雜的選項嚇到。別擔心,一步一步照著我以下的介紹來設定吧。

2-2-3. 新增HTTP的規則

2011-10-24_170816 Add Rule - HTTP - draw

首先先新增HTTP的連接埠轉遞。以下是要設定的欄位與建議參數,我將參數以粗體顯示。

Chain and action details的部份:

  • Rule comment: Joomla HTTP
  • Action to take: Destination NAT
  • IPs and ports for DNAT
    • IP range: 10.10.10.1 to 10.10.10.1
    • Port range: 80 to 80

Condition details的部份:

  • Destination address or network: Equals 192.168.11.13/32
  • Incoming interface: Equals eth0
  • Network protocal: Equals TCP
  • Destination TCP or UDP port: Equals Port(s) 31080

然後按左下角的「Create」按鈕,完成規則的建立。

2-2-4. 新增SSH的規則

接著新增SSH的連接埠轉遞。以下是要設定的欄位與建議參數,我將參數以粗體顯示。

Chain and action details的部份:

  • Rule comment: Joomla SSH
  • Action to take: Destination NAT
  • IPs and ports for DNAT
    • IP range: 10.10.10.1 to 10.10.10.1
    • Port range: 22 to 22

Condition details的部份:

  • Source address or network: Equals 192.168.11.0/24
  • Destination address or network: Equals 192.168.11.13/32
  • Incoming interface: Equals eth0
  • Network protocal: Equals TCP
  • Destination TCP or UDP port: Equals Port(s) 31022

跟HTTP規則相比,SSH規則多加了來源位置的限制,如上面紅字所示。然後按左下角的「Create」按鈕,完成規則的建立。

2-2-5. 套用設定

2011-10-24_172556 Firewall Apply Configuration

在Linux Firewall模組底下,按下「Apply Configuration」按鈕,套用上述設定即可。

2-3. 反向代理伺服器 (reverse proxy)

設定反向代理伺服器之後,就能夠用FQDN:joomla.example.com連到Joomla虛擬機器。

反向代理伺服器Pound的設定必須靠SSH連入Proxmox VE的指令列模式來操作。步驟很簡單,敘述如下:

2-3-1. 編輯設定檔

請以vim編輯/etc/pound/pound.cfg:

vim /etc/pound/pound.cfg

在設定檔最後加入以下設定:

ListenHTTP
Address 192.168.11.13
Port 80
Service
HeadRequire "Host: joomla.example.com.*"
BackEnd
Address 10.10.10.1
Port 80
End
End
End

你可以注意到,首先要設定Proxmox VE的IP、連接埠80;封包對象的FQDN網址規則「joomla.example.com.*」,表示是以「joomla.example.com」開頭的網址;以及要傳遞到區域網路的虛擬機器IP:10.10.10.1與連接埠80。

2-3-2. 重新啟動Pound與測試

重新啟動的指令如下:

/etc/init.d/pound restart

如果沒有任何錯誤訊息的話,那就是設定成功了。

你可以試著從自己電腦的瀏覽器打開「http://joomla.example.com/」順利的話就會出現以下畫面:

2011-10-24_203502 joomla.example.com

看到Joomla網站的話就大功告成啦!


結語

經由上述的方法,就能夠以一台伺服器、一個對外IP,架設起Proxmox VE環境。他可以讓虛擬機器處於一個區域網路中,並透過連接埠轉遞跟反向代理伺服器提供服務。儘管操作上是沒有VirtualBox這麼簡單,但是防火牆設定、反向代理伺服器等功能較符合網管的需求。

讓我覺得遺憾的是,Webmin還是太過複雜,儘管許多名詞已經註明,但是光看名詞也很難理解所有功能的意義。因此在操作的時候請務必多多參考鳥哥的Linux私房菜,不要冒然猜測設定參數的意義。

我本來是希望能找到能夠安裝在Debian,簡單易懂的防火牆設定工具。但是大多數防火牆工具都是像Zentyal這種套裝的系統,而不是讓人簡單安裝在Debian、並提供網頁服務的工具。

另一個方法是用KVM虛擬機器安裝獨立的防火牆系統,不過我目前缺少具備VT-x / AMD-V的伺服器,因此實際上我還沒用過KVM的功能。原本我在VMware ESXi的時候的確做過這樣的設定,但是這要耗掉兩個對外IP:VMware ESXi伺服器、以及防火牆伺服器。不過如果照上述的方法來設定的話,應該會有更簡單的作法才是。我簡單的規劃草圖如下,不過這樣的規劃究竟是否可行,也得等未來有機器之後再繼續研究吧。

Proxmox VE結合防火牆套件建構虛擬區域網路 

關於反向代理伺服器選擇Pound的理由。網路上常見以Apache跟Squid這兩套工具來做反向代理伺服器,但是他們在設定上相較於Pound複雜很多。不過Pound並沒有快取功能,他純粹是封包轉遞、負載平衡而已。請端看你的需求選擇反向代理伺服器。

話說回來,光是寫這篇就花掉我好幾天,能寫到結語真是太令人感動了。有時候精神不佳寫起來不是很清楚,或是有筆誤的地方,請不吝糾正,感謝。

總之,還有許多要研究的議題,這次就先走到這邊即可。未來還有進一步的研究發現,我會在上來跟大家分享。一起加油吧。

(more...)

Proxmox VE建立虛擬區域網路 (VLAN) 方案 (2) 環境配置

Proxmox VE建立虛擬區域網路 (VLAN) 方案 (2) 環境配置

proxmox_logo 2 configuration

繼前一篇講方案說明之後,這一篇則是講Proxmox VE的環境配置。基本上這些配置只要做一次,之後建立虛擬機器時就不用重複再做。步驟有點複雜,如果有講錯的地方,請不吝指正。

Proxmox VE建立虛擬區域網路(VLAN)方案目錄:

  1. 方案說明
  2. 環境配置
  3. 操作說明

1. 安裝Proxmox VE

Proxmox VE是採空機安裝的方式,你可以從官方網站下載ISO光碟映像檔,燒錄成CD光碟,然後就可以像是安裝一般作業系統一樣地安裝Proxmox VE。為了測試方便,我是安裝在VirtualBox 4.1.0虛擬機器中。

安裝過程中,他會要你配置網路與root管理者密碼。網路的部份,本文配置的IP為192.168.11.13。

本文是用Proxmox VE 1.8-60版安裝,不過目前Proxmox VE已經出到1.9版。變更功能並不大。

安裝完之後可以看到以下登入畫面,請用root跟剛剛設定的密碼來登入吧。

2011-10-24_203537 vm

2. 安裝vim編輯器

在確認網路能夠正常連線之後,我會習慣先安裝vim編輯器,以取代Proxmox VE原本的vi編輯器。安裝的指令為

apt-get install vim

image

關於vim的操作方式,請參考鳥哥的Linux私房菜

3. 網路卡設定調整成NAT模式

安裝Proxmox VE時,它會要求你設定網路。這個設定是寫入在/etc/network/interfaces檔案中,預設的內容如下:

auto lo
iface lo inet loopback

auto vmbr0
iface vmbr0 inet static
address 192.168.11.13
netmask 255.255.255.0
gateway 192.168.11.1
bridge_ports eth0
bridge_stp off
bridge_fd 0

你應該可以輕易發現到該檔案的address、netmask、gateway的參數都是在安裝Proxmox VE的過程中輸入的資料。為了避免之後修改發生錯誤,請先備份/etc/network/interfaces檔案

為了要讓Proxmox VE具備NAT的網路功能,我們要把eth0實體網路卡跟虛擬交換器vmbr0分開設定。設定參考自Proxmox VE的說明,具體設定細節如下:

# network interface settings
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.11.13
netmask 255.255.255.0
gateway 192.168.11.1
post-up echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
post-up iptables-restore < /etc/iptables.up.rules #Webmin的Firewall的設定

auto vmbr0
iface vmbr0 inet static
address 10.10.10.254
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o eth0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eth0 -j MASQUERAD

eth0配置IP為192.168.11.13,而vmbr0則配置成不同網段,設IP為10.10.10.254。這兩者不同的網路裝置之間是以iptables傳遞封包,vmbr0接收或送出到的封包都會轉給eth0。

eth0最後一行iptables-restore設定是Webmin加上去的,稍後會繼續說明。

整個網路設定完之後,不能只靠/etc/init.d/networking restart重新啟動就能生效,必須要將整個Proxmox VE重新開機才行。

附帶說明的是,這些設定並不會影響網路類型是venet的虛擬機器,請安心。

4. Webmin安裝

儘管SSH指令列操作可以完成大部分的功能,但我個人仍希望有簡單易用的網頁介面作為管理網路與防火牆的工具。

image

在本文中使用的是知名的Linux伺服器管理工具Webmin。Proxmox VE的作業系統為Debian,安裝方式可以參考Installing on Debian的說明

簡單來說,步驟如下:

  1. wget http://prdownloads.sourceforge.net/webadmin/webmin-1.570_all.deb
  2. apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python
  3. dpkg --install webmin_1.570_all.deb

順利的話,就能夠看到Webmin安裝完成的訊息。

如果webmin-1.570_all.deb已經不能下載,那也可以下載我傳到SkyDrive的備份。SkyDrive無法用wget直接連線,請以網頁下載之後,再上傳到Proxmox VE吧。

5. 進入Webmin

image

安裝完成之後,就能夠以https://192.168.11.13:10000/進入Webmin的管理介面。登入帳號與密碼如同Proxmox VE的使用者,你可以用預設的root使用者與之前設定的密碼來登入Webmin。

image

一開始常常會被他複雜的功能弄得不知所措。不過並不是所有功能都需要學習,本文主要是關注在Firewall防火牆與DHCP伺服器這兩個功能。以下一一說明要使用的功能。

6. 安裝Webmin模組

Webmin安裝完預設只有基本功能,如果要其他的功能,則必須安裝模組(module)。

2011-10-21_235306 webmin modules - draw

安裝Webmin模組的位置在左側導覽列 > Webmin > Webmin Configuration > Webmin Modules,如上圖。

2011-10-21_235815 install - draw

以下的模組是要從www.webmin.com下載。請選擇Install from Standard module from www.webmin.com ,然後再按右邊「…」按鈕開啟選單。

接著請安裝以下模組。

7. 安裝firewall模組

firewall模組是用iptables設定Linux的防火牆,能夠編輯所有的表格(table)、鏈(chain)、規則(rule)與選項(option)。

上面網路卡設定NAT模式時也使用了iptables,iptables可說是非常強大、靈活的防火牆工具。然而也由於他太複雜的,光靠指令操作實在難以管理,因此我才希望仰賴Webmin透過網頁管理。

關於iptables的功能,可以參考鳥哥的介紹。之後也會有詳細的介紹。

8. 安裝dhcpd模組

dhcpd模組是管理分享的網路(network)、子網路(subnet)與ISC DHCPS群組的工具。

安裝dhcpd模組時,因為Proxmox VE並沒有安裝dhcpd-server,所以Webmin會顯示提示,並指引你一起安裝dhcpd-server3。所有操作都是在網頁端進行,一下子就完成。我也對Webmin的高整合性感到相當的驚艷。

關於dhcpd-server的功能,一樣可以參考鳥哥的DHCP伺服器介紹。下一節則會講述如何從Webmin設定。

9. 設定DHCP Server

安裝完dhcpd模組之後,我們就可以馬上來設定DHCP Server,以便之後提供虛擬機器DHCP服務。

9-1. 進入DHCP Server設定

 2011-10-22_002932 enter dhcp server - draw

DHCP Server可從左邊導覽列 > Servers > DHCP Server進入。首先,我們先來Add a new subnet (新增子網域)。

9-2. 新增子網域 Create Subnet

image

在Create Subnet中,我們要設定的參數主要有四項,其他都用預設值即可:

  • Subnet description: vlan
  • Network address: 10.10.10.0
  • Netmask: 255.255.255.0
  • Address ranges: 10.10.10.101- 10.10.10.200

Subnet description任意名稱皆可,而Address ranges表示這個子網域的電腦可以從10.10.10.101分配到10.10.10.200,可提供100臺伺服器。根據OpenVZ的介紹來看,一臺配備良好的Proxmox VE應該可以架設100臺提供Apache靜態網頁的伺服器。

至於為何IP是從10.10.10.101開始呢?那是因為10.10.10.1到10.10.10.100是留給靜態分配IP的伺服器使用,而使用DHCP服務的伺服器則是用101後面的IP。

這部份都可以自行規劃。

9-3. 編輯預設路由器與DNS伺服器

新增完子網域之後,接著還要編輯子網域中各個客戶端(client)的選項。請編輯剛剛新增的子網域,並按下面的「Edit Client Option」按鈕進入編輯客戶端選項介面中。

2011-10-24_150759 Client Options

在這邊要編輯的只有兩個選項:

  • Default routers: 10.10.10.254
  • DNS Servers: 140.119.1.110

這邊的路由器(router)是指虛擬交換器vmbr0,也是負責與外面網際網路交接的閘道(gateway)。DNS Servers則是配置你所在網路環境的DNS伺服器即可。由於我在政大網路中,DNS就是配置140.119.1.110。

接著按「Save」一路回到DHCP Server管理模組。

9-4. 選擇網路介面 Edti Network Interface

在DHCP Server模組下面,請點「Edit Network Interface」按鈕進入編輯網路介面的畫面。

2011-10-22_013156 dhcp listen

在此我們只針對連接到vmbr0的客戶端提供DHCP服務。請選擇vmbr0,然後按下「Save」儲存。

9-5. 套用變更 Apply Changes

在DHCP Server模組下面,請點選「Apply Changes」按鈕以套用剛剛的設定。

10. 安裝Pound

為了提供反向代理伺服器(reverse proxy)的功能,在此我使用的是Pound。以下介紹安裝前注意事項、安裝方式、設定方式。

10-1. 關閉Apache2的80連接埠

由於Proxmox VE網頁管理介面的Apache2伺服器佔用了80連接埠,這會導致Pound無法使用80連接埠做反向代理伺服器,因此在此要先調整Apache2伺服器的設定。

請編輯/etc/apache2/port.conf,並將「Listen 80」設定註解掉,改成「#Listen 80」。僅保留「Listen 443」就好。

由於Proxmox VE的管理介面本來就是用443連接埠以https提供服務,所以80連接埠不使用也無所謂。

10-2. 安裝Pound

安裝Pound的指令為:

apt-get install pound

沒意外的話應該可以順利安裝完成。不過安裝的時候他會提示你要設定Pound,否則無法順利運作。

10-3. 設定Pound自動啟動

請編輯/etc/default/pound,設定「startup=1」。

10-4. 重新啟動Pound

指令為:

/etc/init.d/pound restart

沒有任何錯誤訊息的話,就代表設定成功。

當然,這樣子還不算是完成,這只是基本環境配置而已。下一篇建立虛擬機器時,會介紹如何設定一個FQDN,並透過Pound轉遞到虛擬機器,讓虛擬機器提供服務。

11. 重新開機

上述設定完成之後,接著是把Proxmox VE重新開機,以便讓所有設定確實生效(特別是網路的部份)。

重新啟動的指令為「reboot」。

如果順利重新啟動的話,那Proxmox VE的環境配置就差不多完成囉。

(more...)

Proxmox VE建立虛擬區域網路 (VLAN) 方案 (1) 方案說明

Proxmox VE建立虛擬區域網路 (VLAN) 方案 (1) 方案說明

proxmox_logo 1 introduction

這次是繼上次的伺服器虛擬化技術研究之後,特別針對Proxmox VE的虛擬網路建立深入鑽研的進階研究。這篇預設的讀者是對伺服器虛擬化技術Proxmox感興趣,也具備網路相關概念,這樣比較容易知道我在講些什麼。由於Proxmox VE是在Debian環境下運作,所以熟悉Linux──特別是Debian──當然是必備條件。

由於內容頗多,我分成三篇來撰寫,各別是(1) 方案說明(2) 環境配置(3) 操作說明。這篇是介紹這個方案的背景、目標、環境,並簡單介紹Proxmox VE的網路模型。

Proxmox VE建立虛擬區域網路(VLAN)方案目錄:

  1. 方案說明
  2. 環境配置
  3. 操作說明

方案背景

之前我比較了多種不同伺服器虛擬化技術,目前採用Proxmox VE作為架設伺服器的虛擬環境。然而大部分的伺服器虛擬化技術在網路架構上都比較單純,都只提供橋接模式(Bridged Network)或是虛擬交換器(Virtual Switch,類似的名詞很多)。前者是讓虛擬機器(GuestOS)的網路有如實體機器(HostOS)一樣,暴露在同一網段中;後者則是虛擬機器與實體機器、虛擬機器與虛擬機器之間連線用,由實體電腦模擬出來的虛擬交換器。Proxmox VE使用的網路模型比較特殊,有venet跟veth兩種,但其實用起來也跟前面講的兩種是很類似的。

在橋接模式中,虛擬機器也跟實體機器一樣,需要一個能夠對外連線的IP。在IP有限的環境中,我實在不想讓每台虛擬機器都佔用IP。因此我之前是將Proxmox VE架設在區域網路中,讓它透過一台路由器連線到網際網路。這樣子對外的IP只需要配給路由器,可以達到節省IP的目的。但是相對的,這也必須配置兩台實體機器:Proxmox VE伺服器,以及路由器。

反觀桌面端虛擬機器,如VirtualBox,它們都有提供多樣化的網路架構。最實用的莫過於NAT模式(Network Address Translation,網路地址轉換),它可以在同一台實體機器中,將指定連接埠配置給虛擬機器,達到一個對外IP(配給實體機器)、一台機器(實體機器)的目的。

Proxmox VE能夠架設成NAT的網路架構嗎?之前我在摸索VMware ESXi的時候也有類似的困擾。VMware ESXi是閹割的Linux,大多功能都無法調整。但是開放原始碼的Proxmox VE可就沒這種限制,要設定iptables防火牆、要架DHCP伺服器、或甚至是配置反向代理伺服器(Reverse Proxy),什麼都可以自己來。

因此,這次我打算繼續深入鑽研Proxmox VE的網路架構,讓Proxmox VE更容易使用。

方案目標

總結以上背景需求,這一篇方案想要達到的目標有以下四點:

  1. 僅使用一台實體機器與一個對外連線的IP。
    實體機器當然是架設Proxmox VE。
    在此篇介紹中,對外IP使用的是192.168.11.13。
  2. Proxmox VE中建立的虛擬機器皆可使用區域網路,透過DHCP或靜態設定配置區域網路的IP。
    在此篇介紹中,區域網路的範圍是10.10.10.0/24,10.10.10.0到10.10.10.253都可以配置,而10.10.10.254則是配給實體機器的虛擬交換器。
  3. 可透過網頁管理伺服器。
    Proxmox VE本身就提供網頁端管理,而網路路由設定的部份是以Webmin為主。
  4. 可使用反向代理伺服器(reverse proxy)。
    可以透過FQDN直接連線到虛擬機器。在此篇介紹中,我設定了一個FQDN:joomla.example.com,欲連線到架設Joomla的虛擬機器。

這次的目標有點多,又要虛擬機器方便配置,又要虛擬機器方便架站,因此要講的東西也挺多的。如果哪些細節我講錯了,請不吝指正。

環境架構說明

20111022 Proxmox   Webmin 架構圖

目標方向比較抽象,現在來說明這個方案的具體架構。

首先,跟網際網路(internet)連線的是實體電腦Proxmox VE。在此篇介紹中,它的對外IP是192.168.11.13,連線網卡代號eth0

為了能夠讓它提供網頁管理伺服器的能力,它本身有Apache2Webmin,前者管理Proxmox VE虛擬機器,後者管理伺服器網路環境。然後為了讓內部的虛擬網路能夠方便連線,Proxmox VE還架設dhcped-server提供DHCP服務,以及利用pound實作反向代理伺服器的功能。

Proxmox VE中虛擬機器網路是連線到虛擬的交換器,代號vmbr0。作為內部網路的閘道(gateway),vmbr0的IP是10.10.10.254。而虛擬機器是以veth模式連線到vmbr0,設定區域網路IP的範圍為10.10.10.0/24。其中一台虛擬機器架設Joomla,其區域網路IP為10.10.10.1。

軟體說明

上述各種軟體的說明與版本記錄如下:

  • Proxmox VE 1.8-60:Proxmox Virtual Environment,伺服器虛擬化方案。Proxmox VE網站可以找到它的ISO檔案,檔案名稱為proxmox-ve_1.8-60.iso。它的作業系統是Debian 5。在寫作本文的時候,Proxmox VE已經出到1.9了。
  • Webmin 1.570:Linux知名的網頁管理工具。(SkyDrive備份)
  • dhcpd-server3:提供DHCP服務。
  • pound 2.4.3:提供反向代理伺服器的功能。
  • Joomla:在本篇中,它只是一個網頁服務而已。其實是什麼網站都無所謂啦。
名詞解釋

在本篇介紹與相關文章中,有兩個名詞需要特別說明:

  • 實體機器(Physical Machine):在虛擬機器環境中,它叫做Host OS,又稱為主端電腦。在本篇介紹中,它主要是指架設Proxmox VE的實體機器。
  • 虛擬機器(Virtual Machine,簡稱VM):在虛擬機器環境中,它叫做Guest OS,又稱為客端電腦。Proxmox VE的虛擬機器技術有很多種,其中以OpenVZ技術虛擬的機器又稱為Container(容器,簡稱CT)。儘管名詞有點複雜,但它們都是指在Proxmox VE中架設的虛擬機器。

至於網路(Network)方面比較複雜,我會在下節說明Proxmox VE的網路模型。

有時候我會將Proxmox VE打成Proxmox,這是筆誤。實際上Proxmox是一家公司,開發Proxmox VE這個產品,他們是有所區別的。

Proxmox VE的網路模型 (Network Model)

這邊的介紹是參考自Proxmox VE的Network Model來撰寫。

在預設的情況中,Proxmox VE使用的是橋接網路模型(bridged networking model)。橋接器(bridge)就像是實體網路交換器(switch)一樣,不過是透過Proxmox VE以虛擬出來的軟體。所有的虛擬機器都可以共用一個橋接器,配置對外TCP/IP,透過該橋接器連上網路。

Proxmox VE提供虛擬機器兩種網路類型:venet與veth。venet (Virtual NETwork)只有OpenVZ的容器虛擬化機器可以使用,是OpenVZ的預設選項,可以直接透過指令配置虛擬機器的IP;veth (Virtual eTHernet)則是OpenVZ跟KVM都能使用,是KVM的預設選項,可讓虛擬機器接上虛擬交換器藉以連到網際網路,但是必須手動進入虛擬機器設定網路IP。

以下表格比較兩種網路類型的差異:

veth跟venet的差異
Feature
特徵
veth venet
可使用的虛擬機器類型 OpenVZ
KVM
OpenVZ
可透過網頁管理
直接配置網路IP
No Yes
MAC address
網卡位置
Yes No
Broadcasts inside CT
封包會在虛擬機器間廣播
Yes No
Traffic sniffing
封包攔截
Yes No
Network security
網路安全
Low High
Can be used in bridges
可否用於橋接器
Yes No
IPv6 ready
可否使用IPv6
Yes Yes
Performance
效能
Fast Fastest

資料來源參考自:Differences between venet and veth

為了達到NAT複雜的虛擬網路架構,本篇主要談論的虛擬機器網路類型都是指veth,而虛擬交換器則是用內建的vmbr0。詳細的設定,下一篇將會繼續深入說明。

Proxmox VE除了提供上述的虛擬區域網路(VLAN,IEEE 802.1q)之外,還有網路綁定/聚合(networking bounding/aggregation)功能。網路綁定是利用兩張實體網路卡分散網路流量的技術,並不是本篇主要探討的對象。

(more...)

從臺灣博碩士論文知識加值系統匯入書目到Zotero

布丁布丁吃布丁

從臺灣博碩士論文知識加值系統匯入書目到Zotero

image

Zotero一直是我寫論文、整理文件的得力利器。而作為一個研究生,參考我國的臺灣博碩士論文知識加值系統(原名:全國博碩士論文網,以下仍簡稱博碩士論文網)也是很正常的一件事情。

由於Zotero是國外開發的工具,文獻管理主要是以國外知名的資料庫為主,包括Google Scholar。我們的博碩士論文網就沒有在Zotero的解析器清單中,因此如果要將博碩士論文網的書目匯入Zotero,就不能用點網址列右方的快速匯入功能,而是用類似EndNote的RIS format檔案匯入。

以下我將介紹如何從博碩士論文網中匯入書目資料到Zotero的過程。


工具介紹

原本Zotero是Firefox的一個擴充套件,但是由於Firefox往往會跟太複雜的擴充套件起衝突、造成運作效能不佳,因此後來Zotero又推出了獨立運作(standalone)的版本。我現在多是用獨立版本的Zotero,目前用起來很順利,沒什麼大問題。

獨立版本的Zotero可以跟Google ChromeSafari等瀏覽器搭配運作,但是要為瀏覽器安裝額外的Zotero Standalone Connectors套件。我目前使用的是Google Chrome Portable 12.0.742.100。


匯入步驟

接下來就是在博碩士論文網中找書目匯入Zotero的教學囉。

1. 用搜尋功能找到指定文獻

2011-10-01_202025 search (mask)

現在我以「基於數位閱讀標註行為探勘影響閱讀焦慮因素 提升閱讀成效」這篇論文為例。先用博碩士論文網的搜尋功能找到這篇論文,如上圖。勾選論文左邊的核取方塊,然後看到右邊的「輸出管理」功能。

2. 輸出管理匯出檔案

2011-10-01_202356 ris

在輸出管理中, 勾選「書目資料輸出格式」的「RIS format (EndNote…)」選項,然後按下最下面「TXT檔」旁邊的「儲存」按鈕,系統會給你一個「ris」副檔名的檔案,例如fb111001.ris

3. 匯入Zotero

image

接著再到Zotero視窗中,選擇「檔案」中的「匯入」功能(獨立版本的翻譯沒有很完整,所以實際上還是很多英文單字混雜),指定你剛剛下載的ris檔案。

2011-10-01_202840 imported

接著左邊的收集(collection)就會多出你剛剛匯入的檔案名稱,而該收集裡面就是你剛剛輸出的書目資料囉。


結語:EndNote做得到的,Zotero也能辦到

上述步驟其實是參考研究生好幫手(二)--筆記給您攢便便.EndNote 學習快易通這一篇的教學。事實上,只要是有提供EndNote匯出功能的資料庫,像是臺灣大學圖書館羅列的常用電子資源匯入教學,其中大部分也都能用在Zotero上。

現在學校的研究方法教學仍是以EndNote為主。我個人並不是很喜歡EndNote,而習慣使用Zotero。一方面是因為EndNote對中文支援仍有待改善(這是我三年前對它的印象,現在應該有改進了吧?),另一方面,我認為作為未來仍會長時間使用的書目管理工具來說,EndNote會受限於只有學校才能購買的窘境,而Zotero則沒有這方面的困擾。到現在,還是偶爾會有畢業的同學找我索取學校的EndNote,而這種學校外使用的違法行為,當然不是你我願意看到的事情。既然如此,為何不要一開始就用免費的Zotero呢?

希望這些教學能夠幫助大家輕鬆地從EndNote跳到Zotero,快快樂樂地寫論文。加油。

(more...)