google-code-prettify

星期二, 9月 25, 2018

【大冒險】偉大環道 小四換新鞋 海德瑙 K81 super sports

口白:
財富(版費)、名聲(美色)、勢力(粉絲)
---擁有全台灣美景的環島王 蕭胚‧P‧妹,
她在臨行前的一句話,讓人們趨之若鶩、奔向環道!

「想要我的財寶嗎?想要的話可以全部給你,去環吧!我把所有的財寶都放在那裡。」
 於是人們為了龐大的財寶,紛紛航向「偉大的環道」。讓台灣迎接「大環島時代」!

這世界,沒錯!一個追求自由任憑選擇的世界,
就在每個人的眼前無限地延伸。
如果我們的夢想可以引導你的方向的話,就去追尋吧,
在名為信念的旗幟下!

繼前篇【大冒險】偉大環道 是有多愛 SUZUKI大冒險 之後,在環道上,
並非風平浪靜~而是暗潮洶湧阿!!!

在9948.9公里時,油表又不正常了…

於是叫了八個小朋友去,去圍店…

分解後…疑似電阻有問題…改天再來修復看看囉…

在經歷了油表停擺…
重點來了…鞋子快磨穿了…
兩雙鞋的磨耗可是1比1…

從帶回家開始,就一直想買雙鞋給她…
像我這樣勤儉持家的…能省則省…(謎之音:能花就花吧…)

最中意的德國製的鞋子,海德瑙 K66 K81 兩個系列…

其中,K66 屬於3D全天候多功能胎 還能在雪地使用…鞋紋好像巧克力
但 K81 屬於 矽膠材質 超級運動胎…鞋紋簡單,這更是喜歡啦

於是,找了一雙 K81 前80/90-14 後90/90-14 德國製
再加上兩個金屬氣嘴


在鞋子磨了 10248 公里時…終於換上新鞋…
中秋回家跟沒力號姊姊團圓(謎之音:海德瑙是給你多少贊助費…還畫輪胎咧)

小四…會咬腳嗎?
我覺的你根本就是貼地飛行阿…

胎壓設定原本 irc 的前面設定29 後面設定31
根據這樣的設定沿用…那乾地抓地力真不是蓋的…

不過這樣的設定因該會磨很快…所以改了一下設定
改成前30 後32 來實驗看看磨耗囉

話說重點又花了多少…
這次帶了24個小朋友去圍店…帶了幾個老頭回家…

(未完待續…)

星期三, 3月 14, 2018

【大冒險】偉大環道 是有多愛 SUZUKI

口白:
財富(版費)、名聲(美色)、勢力(粉絲)
---擁有全台灣美景的環島王 蕭胚‧P‧妹,
她在臨行前的一句話,讓人們趨之若鶩、奔向環道!

「想要我的財寶嗎?想要的話可以全部給你,去環吧!我把所有的財寶都放在那裡。」
 於是人們為了龐大的財寶,紛紛航向「偉大的環道」。讓台灣迎接「大環島時代」!

這世界,沒錯!一個追求自由任憑選擇的世界,
就在每個人的眼前無限地延伸。
如果我們的夢想可以引導你的方向的話,就去追尋吧,
在名為信念的旗幟下!

繼前篇【大冒險】偉大環道 緣起 犀利小四 之後,在環道上,
並非風平浪靜~而是暗潮洶湧阿!!!

話說,從2017年初,就聽聞有新的妹子~
想說~再過幾年跟沒力號就要跑給鴿子追...於是開始了選妃之旅~

為沒力號(小三)添加個妹子(小四)後~再添加個妹子(小五),小老婆等著!我來了...

國產的兩陽…真沒興趣…

自從 Yamaha 拋棄我的沒力號後,這輩子不會再給它機會了…
想到這裡沒力號…心中莫名哀傷…老二無罪!還我路權!

因為打著環保口號~而被制裁的老二們!我沒有原廠的汽缸、曲軸、連2ss都絕版了!!!
為此!我發誓我再也不要帶我的沒力號回娘家!我的妞我自己救!!!
沒2ss以後就喝蓖麻油!!!
我要帶她再走幾十年!!!(握拳)(謎之音:那還選妃…)
老二不死!只是凋零了!

Honda 本田家族…唉~只能說它不爭氣…
Singer 大魔王訪問時,斬釘截鐵的說,不會投入白牌市場…如今咧…眼紅了吧
早一點把 CB150R 弄進來,你今年的財報會很漂亮才對…失望…
我真的很想支持你的…無緣啦…

既然都看到進口車了!
川崎咧?
我覺的台崎也不爭氣,如果把 Ninja 250 好好經營下去,這個級距因該是你的天下…
川崎‧來夢先拜(爆音少女)…看來我要成為哇沙密的日子是不可能了…

重點來了~四大家族中的Suzuki
嘴裡大叫我不要輸輸去!!!(謎之音:嘴裡說不要,身體還是挺老實的阿)

等了又等!鴿子被放了又飛回來....

台鈴要自己帶進來!台鈴要自己帶進來!台鈴要自己帶進來!
台本!別怪我不給你機會阿!!!

從年初等到5月...到6月…
終於可以下聘了…但是,一直想給台本機會…它不爭氣阿…
重點是沒錢阿…怎麼下聘…那個分期方案…又定不下去…先存錢…

台鈴一度發出新聞稿說…要2018年三月底前才能交車…

到了 2017/7/22 我家小四都跟了我一年又11天,
我算算日子…過年年終有的沒的費用評估了一下…
終於克制不住,從小想騎仿賽的夢想大爆發…
直接定下去囉…

其實還有個打算…
這樣我的因該會是2018年產…不是一年前的…哈



…光陰似箭~歲月如梭…
2017年7月22日 一段漫長的等待…
很多都在去年底就上岸了…小五你在海上漂會不會怕…
到了 2018年2月27 收到媒人通知,可以帶雙證件去辦一辦了....
趁著 228 放假,就跟小四一早,就狂飆回老家繳證件去啦~
等阿等阿等阿…3月3日台鈴才把相關文件寄出…
媒婆 3月4日休息…嗚~多等一個禮拜好了…八個月都等了…
娶小老婆就刮大風加冷氣團,這要好好請教一下劉伯溫國師…這是啥尛卦象阿!
希望牽車不要下雨阿…不要妨礙我跟我妞的相聚阿!!!
妞~妳等著!我一定帶你回家!!!
等阿等阿等阿…3月8日接到媒人電話,先把妞安置到他家去…




等阿等阿等阿…3月10日終於可以回家玩咪魯囉…
為什麼叫咪魯?因為之前GSX-250 就被稱為小阿魯阿
所以 GSX-R150 我叫它mini阿魯 簡稱咪魯…長幼有序阿~不能亂阿!
那125咧…micro阿魯…簡稱麥魯…反正我是沒錢買了,管他叫啥…

交付贖款後…媒人親自帶我操駕了一遍…
然後就帶回家研究啦…人生第一台擋車入手啦
趁著我還可以趴的下去…
趴不下去就把整流罩收起來,改成街車…
卜朧共海賊團終於又加入新成員囉

在空地玩了兩公里…






坐在路邊思考…這個性,待調校…
(謎之音:不會騎不要勉強阿…不會就不會…不要遷拖)
那個屁屁還多了小翅膀…看著就倒胃口
youshimura 吉村…下個任務就是你了…
(謎之音:你明明就是不花錢就會手癢!去看醫生啦)
編入年度預算…等議會開議…我一定會讓它通過的…

然後玩著玩著…熄火了…
嗚…練過頭沒油了…推回老家找救兵…


來~叫姊解…姊姊以後要跑給鴿子追,等一下就是靠它去解救你囉

練了一小時差不多了,有信心可以上路了…半離合的點抓住了
換檔還不熟…練個六十幾公里因該就夠了…
中野千雨一定會說座高785mm,這車不適合在路上跑…太危險了
我也是這麼打算…一路開啟零的領域…一定要避開紅燈…
萬事起頭難,一檔過了就當速可達來騎吧,笑…
(謎之音:笑個頭!去騎速克達啦!)

當然第一天就要給它震撼教育啦…慢慢凸回家

來~叫姊解…
(謎之音:又沒吃到凜的口水,體內又沒本田菌…到底台鈴是給你多少廣告費…這尛死忠)


咪魯:都不帶我出去玩…(耳朵都垂下來了)


免鑰匙可用撥剌阿工具撬開…有點像吉他的pick
編碼要記著…這以後會用到…不能給外人看…

最後~三個小老婆比較愛誰阿~小三?小四?小五?
這就像是南宋詩人盧梅坡那首…雪梅二首其一
梅雪爭春未肯降,騷人擱筆費評章。
梅須遜雪三分白,雪卻輸梅一段香。
(謎之音:你倒底是有多懶,到不想打部落格…有沒有新的阿)

(未完待續…)

星期二, 1月 09, 2018

【XenServer】用指令 (Command) 開機 (vm-start)、關機 (vm-shutdown)、建立快照 (vm-snapshot)、快照列表 (snapshot-list)、還原快照 (snapshot-revert)、刪除快照 (snapshot-uninstall)

口白:
流動的水沒有形狀,漂流的風找不到蹤跡,任何案件的 Coding 都取決於心
唯一看透真相的是,外表看似卜朧共,智慧卻低於常人的 名卜朧共 刻爛
(謎之音:把 Code 刻到爛簡稱刻爛.爛..爛...)
Music:
#表升半音 []表高八度
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 5 4 3 4 2 6 4 5 [2] [1] #6 6 5 6
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 4 3 2 4 2 6 4 5 [2] #6 6 5 6
口白:
刻爛:真実はいつも一つ!

環境:
Citrix XenServer 7.1

指令列表:
指令:xe help --all

[root@xenserver3 ~]# xe help --all
Usage: xe  [-s server] [-pw passwd] [-p port] [-u user] [-pwf password-file]
  [command specific arguments]

To get help on a specific command: xe help 

Full command list
-----------------
    host-all-editions, host-apply-edition, host-backup
    host-bugreport-upload, host-call-plugin, host-compute-free-memory
    host-compute-memory-overhead, host-cpu-info, host-cpu-list
    host-cpu-param-get, host-cpu-param-list, host-crashdump-destroy
    host-crashdump-list, host-crashdump-param-get, host-crashdump-param-list
    host-crashdump-upload, host-data-source-forget, host-data-source-list
    host-data-source-query, host-data-source-record, host-declare-dead
    host-disable, host-disable-display, host-disable-local-storage-caching
    host-dmesg, host-emergency-ha-disable
    host-emergency-management-reconfigure, host-enable, host-enable-display
    host-enable-local-storage-caching, host-evacuate, host-forget
    host-get-cpu-features, host-get-server-certificate
    host-get-sm-diagnostics, host-get-system-status
    host-get-system-status-capabilities, host-get-thread-diagnostics
    host-get-vms-which-prevent-evacuation, host-is-in-emergency-mode
    host-license-add, host-license-remove, host-license-view, host-list
    host-logs-download, host-management-disable, host-management-reconfigure
    host-param-add, host-param-clear, host-param-get, host-param-list
    host-param-remove, host-param-set, host-power-on, host-reboot
    host-restore, host-send-debug-keys, host-set-hostname-live
    host-set-power-on-mode, host-shutdown, host-shutdown-agent
    host-sm-dp-destroy, host-sync-data, host-syslog-reconfigure
    
    vm-assert-can-be-recovered, vm-call-plugin, vm-cd-add, vm-cd-eject
    vm-cd-insert, vm-cd-list, vm-cd-remove, vm-checkpoint, vm-clone
    vm-compute-maximum-memory, vm-compute-memory-overhead, vm-copy
    vm-copy-bios-strings, vm-crashdump-list, vm-data-source-forget
    vm-data-source-list, vm-data-source-query, vm-data-source-record
    vm-destroy, vm-disk-add, vm-disk-list, vm-disk-remove, vm-export
    vm-import, vm-install, vm-is-bios-customized, vm-list
    vm-memory-dynamic-range-set, vm-memory-limits-set, vm-memory-set
    vm-memory-shadow-multiplier-set, vm-memory-static-range-set
    vm-memory-target-set, vm-migrate, vm-param-add, vm-param-clear
    vm-param-get, vm-param-list, vm-param-remove, vm-param-set, vm-pause
    vm-reboot, vm-recover, vm-reset-powerstate, vm-resume
    vm-retrieve-wlb-recommendations, vm-shutdown, vm-snapshot
    vm-snapshot-with-quiesce, vm-start, vm-suspend, vm-uninstall, vm-unpause
    vm-vcpu-hotplug, vm-vif-list
    
    appliance-assert-can-be-recovered, appliance-create, appliance-destroy
    appliance-list, appliance-param-clear, appliance-param-get
    appliance-param-list, appliance-param-set, appliance-recover
    appliance-shutdown, appliance-start, audit-log-get, bond-create
    bond-destroy, bond-list, bond-param-clear, bond-param-get
    bond-param-list, bond-param-set, bond-set-mode, cd-list, console
    console-list, console-param-add, console-param-clear, console-param-get
    console-param-list, console-param-remove, console-param-set
    diagnostic-compact, diagnostic-db-log, diagnostic-db-stats
    diagnostic-gc-stats, diagnostic-license-status, diagnostic-net-stats
    diagnostic-timing-stats, diagnostic-vdi-status, diagnostic-vm-status
    drtask-create, drtask-destroy, drtask-list, drtask-param-get
    drtask-param-list, event-wait, gpu-group-create, gpu-group-destroy
    gpu-group-get-remaining-capacity, gpu-group-list, gpu-group-param-add
    gpu-group-param-clear, gpu-group-param-get, gpu-group-param-list
    gpu-group-param-remove, gpu-group-param-set, log-get, log-get-keys
    log-reopen, log-set-output, lvhd-enable-thin-provisioning
    message-create, message-destroy, message-list, message-param-get
    message-param-list, network-create, network-destroy, network-list
    network-param-add, network-param-clear, network-param-get
    network-param-list, network-param-remove, network-param-set, patch-apply
    patch-clean, patch-destroy, patch-list, patch-param-clear
    patch-param-get, patch-param-list, patch-pool-apply, patch-pool-clean
    patch-precheck, patch-upload, pbd-create, pbd-destroy, pbd-list
    pbd-param-add, pbd-param-clear, pbd-param-get, pbd-param-list
    pbd-param-remove, pbd-param-set, pbd-plug, pbd-unplug
    pgpu-disable-dom0-access, pgpu-enable-dom0-access, pgpu-list
    pgpu-param-add, pgpu-param-clear, pgpu-param-get, pgpu-param-list
    pgpu-param-remove, pgpu-param-set, pif-forget, pif-introduce, pif-list
    pif-param-add, pif-param-clear, pif-param-get, pif-param-list
    pif-param-remove, pif-param-set, pif-plug, pif-reconfigure-ip
    pif-reconfigure-ipv6, pif-scan, pif-set-primary-address-type, pif-unplug
    pool-apply-edition, pool-certificate-install, pool-certificate-list
    pool-certificate-sync, pool-certificate-uninstall, pool-crl-install
    pool-crl-list, pool-crl-uninstall, pool-deconfigure-wlb
    pool-designate-new-master, pool-disable-external-auth
    pool-disable-local-storage-caching, pool-disable-redo-log
    pool-disable-ssl-legacy, pool-dump-database, pool-eject
    pool-emergency-reset-master, pool-emergency-transition-to-master
    pool-enable-external-auth, pool-enable-local-storage-caching
    pool-enable-redo-log, pool-enable-ssl-legacy
    pool-ha-compute-hypothetical-max-host-failures-to-tolerate
    pool-ha-compute-max-host-failures-to-tolerate, pool-ha-disable
    pool-ha-enable, pool-initialize-wlb, pool-join, pool-list
    pool-param-add, pool-param-clear, pool-param-get, pool-param-list
    pool-param-remove, pool-param-set, pool-recover-slaves
    pool-restore-database, pool-retrieve-wlb-configuration
    pool-retrieve-wlb-diagnostics, pool-retrieve-wlb-recommendations
    pool-retrieve-wlb-report, pool-send-test-post
    pool-send-wlb-configuration, pool-sync-database, pool-vlan-create
    pvs-cache-storage-create, pvs-cache-storage-destroy
    pvs-cache-storage-list, pvs-cache-storage-param-get
    pvs-cache-storage-param-list, pvs-proxy-create, pvs-proxy-destroy
    pvs-proxy-list, pvs-proxy-param-get, pvs-proxy-param-list
    pvs-server-forget, pvs-server-introduce, pvs-server-list
    pvs-server-param-clear, pvs-server-param-get, pvs-server-param-list
    pvs-site-forget, pvs-site-introduce, pvs-site-list, pvs-site-param-clear
    pvs-site-param-get, pvs-site-param-list, pvs-site-param-set, role-list
    role-param-get, role-param-list, secret-create, secret-destroy
    secret-list, secret-param-clear, secret-param-get, secret-param-list
    secret-param-set, session-subject-identifier-list
    session-subject-identifier-logout, session-subject-identifier-logout-all
    sm-list, sm-param-clear, sm-param-get, sm-param-list, snapshot-clone
    snapshot-copy, snapshot-destroy, snapshot-disk-list
    snapshot-export-to-template, snapshot-list, snapshot-param-add
    snapshot-param-clear, snapshot-param-get, snapshot-param-list
    snapshot-param-remove, snapshot-param-set, snapshot-reset-powerstate
    snapshot-revert, snapshot-uninstall, sr-create, sr-data-source-forget
    sr-data-source-list, sr-data-source-query, sr-data-source-record
    sr-destroy, sr-disable-database-replication
    sr-enable-database-replication, sr-forget, sr-introduce, sr-list
    sr-param-add, sr-param-clear, sr-param-get, sr-param-list
    sr-param-remove, sr-param-set, sr-probe, sr-scan, sr-update, subject-add
    subject-list, subject-param-clear, subject-param-get, subject-param-list
    subject-remove, subject-role-add, subject-role-remove, task-cancel
    task-list, task-param-add, task-param-clear, task-param-get
    task-param-list, task-param-remove, task-param-set, template-export
    template-list, template-param-add, template-param-clear
    template-param-get, template-param-list, template-param-remove
    template-param-set, template-uninstall, tunnel-create, tunnel-destroy
    tunnel-list, tunnel-param-add, tunnel-param-clear, tunnel-param-get
    tunnel-param-list, tunnel-param-remove, tunnel-param-set, update-apply
    update-destroy, update-introduce, update-list, update-param-clear
    update-param-get, update-param-list, update-pool-apply
    update-pool-clean, update-precheck, update-upload, user-password-change
    vbd-create, vbd-destroy, vbd-eject, vbd-insert, vbd-list, vbd-param-add
    vbd-param-clear, vbd-param-get, vbd-param-list, vbd-param-remove
    vbd-param-set, vbd-plug, vbd-unplug, vdi-clone, vdi-copy, vdi-create
    vdi-destroy, vdi-export, vdi-forget, vdi-import, vdi-introduce, vdi-list
    vdi-param-add, vdi-param-clear, vdi-param-get, vdi-param-list
    vdi-param-remove, vdi-param-set, vdi-pool-migrate, vdi-resize
    vdi-snapshot, vdi-unlock, vdi-update, vgpu-create, vgpu-destroy
    vgpu-list, vgpu-param-add, vgpu-param-clear, vgpu-param-get
    vgpu-param-list, vgpu-param-remove, vgpu-param-set, vgpu-type-list
    vgpu-type-param-get, vgpu-type-param-list, vif-configure-ipv4
    vif-configure-ipv6, vif-create, vif-destroy, vif-list, vif-move
    vif-param-add, vif-param-clear, vif-param-get, vif-param-list
    vif-param-remove, vif-param-set, vif-plug, vif-unplug, vlan-create
    vlan-destroy, vlan-list, vlan-param-get, vlan-param-list

列表:
指令:xe vm-list
[root@xenserver3 ~]# xe vm-list 
uuid ( RO)           : 831797cb-265a-4469-856d-bacef341015d
     name-label ( RW): Control domain on host: xenserver3
    power-state ( RO): running

uuid ( RO)           : 11626c5a-463c-6303-a7c0-7bb51079365e
     name-label ( RW): LinuxMint18.3mate
    power-state ( RO): halted

開機:
指令:xe vm-start uuid=<vm uuid>
[root@xenserver3 ~]# xe vm-start uuid=11626c5a-463c-6303-a7c0-7bb51079365e

關機:
指令:xe vm-shutdown uuid=<vm uuid>
[root@xenserver3 ~]# xe vm-shutdown uuid=11626c5a-463c-6303-a7c0-7bb51079365e

建立快照:
指令:xe vm-snapshot uuid=<vm uuid>
[root@xenserver3 ~]# xe vm-snapshot new-name-label="LinuxMint18.3mate" vm=11626c5a-463c-6303-a7c0-7bb51079365e new-name-description="test Create snapshut"
0f5ef421-8ea6-0043-23c7-6c550066b0d5

快照列表:
指令:xe snapshot-list
[root@xenserver3 ~]# xe snapshot-list
uuid ( RO)                : 0f5ef421-8ea6-0043-23c7-6c550066b0d5
          name-label ( RW): LinuxMint18.3mate
    name-description ( RW): test Create snapshut

uuid ( RO)                : 24da34fe-5234-2dba-ee04-fe15dbbc7d6c
          name-label ( RW): 初始狀態
    name-description ( RW): 

還原快照:
指令:xe snapshot-revert snapshot-uuid=<還原點uuid>
[root@xenserver3 ~]# xe snapshot-revert snapshot-uuid=24da34fe-5234-2dba-ee04-fe15dbbc7d6c

刪除快照:
指令:xe snapshot-uninstall snapshot-uuid=<還原點uuid>
[root@xenserver3 ~]# xe snapshot-uninstall snapshot-uuid=0f5ef421-8ea6-0043-23c7-6c550066b0d5
The following items are about to be destroyed
VM : 0f5ef421-8ea6-0043-23c7-6c550066b0d5 (LinuxMint18.3mate)
VDI: 5c476c47-7643-4deb-a84d-1a81e0de56d0 (LinuxMint18.3mate 0) 
Type 'yes' to continue
yes
All objects destroyed

(謎之音…通通都抄來的…你還有什麼貢獻…)

【參考文獻】
(1) Restore/revert to snapshot
(2) How to take and restore VM snapshot using command line on XenServer
(3) How to export/import VM to/from a backup file using command line on XenServer
(4) Restore XenServer VM snapshots from the CLI / command line

星期三, 12月 20, 2017

【QGIS】將 QGIS Server 安裝在 windows 2016 的 IIS 10 手把手教學

口白:
流動的水沒有形狀,漂流的風找不到蹤跡,任何案件的 Coding 都取決於心
唯一看透真相的是,外表看似卜朧共,智慧卻低於常人的 名卜朧共 刻爛
(謎之音:把 Code 刻到爛簡稱刻爛.爛..爛...)
Music:
#表升半音 []表高八度
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 5 4 3 4 2 6 4 5 [2] [1] #6 6 5 6
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 4 3 2 4 2 6 4 5 [2] #6 6 5 6
口白:
刻爛:真実はいつも一つ!

環境:
Oracle VM VirtualBox 5.1.30
VM 作業系統:Windows 2016、Windows 2012
IIS 版本:10.0.14393、8.5(測試成功)7.x (理論上都一樣未試過)
qgis server:2.14.20 ltr
qgis desktop:2.14.20 ltr

狀況:
1. 台灣的代理商、經銷商,就像是水貨商一樣
賣你東西之前,說的他的東西有多好用…會飛天會遁地…
賣你東西之後,它錢收了爽完…就不理你了…就跟花錢玩的牛郎一樣(因該吧我也沒玩過)
2. 就是喜歡不一樣,要站在巨人的頭頂上(那裡風景好阿),不要塞在水貨商的屁眼裡!
在那兩個禮拜學會寫 python 的日子裡,看了 Mosky Liu youtube 影片 年會:群在故我在,你的簡單信念是什麼 ,為了讓那些像水貨商的代理商、經銷商去呷賽(吃屎、kiss ass hole),
為了著偉大的理想,發了一篇有極微貢獻的 blog 文章,讓 QGIS Server 因使用而產生價值!
更重要的是讓那些像水貨商的代理商、經銷商去呷賽
3. 實現奧卡姆剃刀原則
奧卡姆剃刀(英語:Occam's Razor, Ockham's Razor),又稱「奧卡姆的剃刀」,拉丁文為lex parsimoniae,意思是簡約之法則是由14世紀邏輯學家、聖方濟各會修士奧卡姆的威廉(William of Occam,約1287年至1347年,奧卡姆(Ockham)位於英格蘭的薩里郡)提出的一個解決問題的法則,而其中最流行的「若無必要,勿增實體」(Non sunt multiplicanda entia sine necessitate)
「切勿浪費較多東西,去做『用較少的東西,同樣可以做好的事情』。」
我深深的覺的QGIS SERVER做到了這點…

大綱:
1. 安裝基礎環境
2. QGIS LTR 安裝
2.1 下載 qgis server 安裝包
2.2 安裝程式
3. IIS 相關設定
3.1 在 IIS 安裝 fcgi
3.2 接下來設定系統變數吧
3.3 目錄權限設定
3.4 IIS 設定
4. 建立 qgis 地圖專案
5. 測試

概略說明:
在谷哥庇佑下,遍尋天下文章…找的安裝 QGIS Server 幾乎都是安裝在 Apache 下,
只有極少數的粗略說明,幾乎毫無幫助…
IIS 也一樣有提共網站服務阿,為什麼在 windows 下還要在裝 Apache?
基於奧卡姆剃刀原則,不因該拿牛刀殺雞雞…
我一定要找出方法…

安裝方法:
1. 安裝基礎環境
在 Windows 作業系統上,安裝 iis、DotFramework 2.x 3.x 4.x…

2. QGIS LTR 安裝
2.1 下載 qgis server 安裝包
去官網下載吧

下載存檔


2.2 安裝程式
執行安裝程式吧

選 Advenced Install

挑喜歡的安裝方式吧

下一步…

由於我選擇的是 Install from Internet ,所以要選擇安裝包的位置

下一步…

下一步…

挑選要裝的套件吧
基本上我只裝了 Desktop、Server

Desktop 選裝 2.14.21-1 ltr

Server 選裝 2.14.21-1 ltr

下一步…

下一步…

安裝中…

在經歷過無腦的下一步攻擊後,終於裝完


3. IIS 相關設定
3.1 在 IIS 安裝 fcgi
預設安裝好的 IIS 是沒有 FastCGI 的喔


開啟 伺服器管理員 > 新增角色及功能

下一步吧

選擇安裝類型 > 角色型或功能型安裝

下一步吧


將 CGI 勾選

我勾了這些

.NET Framework 我裝了這些

安裝

裝好啦

FastCGI 設定 出現啦

3.2 接下來設定系統變數吧
設定環境變數

系統變數 Path 增加:
C:\OSGeo4W64\bin
C:\OSGeo4W64\apps\qgis-ltr\bin
C:\OSGeo4W64\apps\grass\grass-@grassversion@\bin 
C:\OSGeo4W64\apps\grass\grass-@grassversion@\lib
(grass 沒裝應該不用設啦…)

2016 設定界面 長的不一樣…

新增系統變數QGIS_AUTH_DB_DIR_PATH、PYTHONHOME、PYTHONPATH、QGIS_PREFIX_PATH、QT_PLUGIN_PATH、GDAL_CACHEMAX、GDAL_DATA、GDAL_DRIVER_PATH、PDAL_DRIVER_PATH、PROJ_LIB

系統變數增加變數名稱為 QGIS_AUTH_DB_DIR_PATH
值為C:\OSGeo4W64\apps\qgis-ltr\resources

系統變數增加變數名稱為 PYTHONHOME
值為C:\OSGeo4W64\apps\Python27


系統變數增加變數名稱為 PYTHONPATH
值為C:\OSGeo4W64\apps\qgis-ltr\.\python;C:\OSGeo4W64\apps\qgis-ltr\.\python\plugins;C:\OSGeo4W64\apps\Python27\DLLs;C:\OSGeo4W64\apps\Python27\lib;C:\OSGeo4W64\bin;C:\OSGeo4W64\apps\Python27;C:\OSGeo4W64\apps\Python27\lib\site-packages;

系統變數增加變數名稱為 QGIS_PREFIX_PATH
值為 C:\OSGeo4W64\apps\qgis-ltr

系統變數增加變數名稱為 QT_PLUGIN_PATH
值為 C:\OSGeo4W64\apps\qgis-ltr\qtplugins;C:\OSGeo4W64\apps\qt4\plugins

 系統變數增加變數名稱為 GDAL_CACHEMAX
值為 64

 系統變數增加變數名稱為 GDAL_DATA
值為 C:\OSGeo4W64\share\gdal

 系統變數增加變數名稱為 GDAL_DRIVER_PATH
值為 C:\OSGeo4W64\bin

 系統變數增加變數名稱為 PDAL_DRIVER_PATH
值為 C:\OSGeo4W64\bin
(這是啥?我也不知道不要問我…我根據 Apache  環境設定抄來的,因該是沒作用吧)

系統變數增加變數名稱為  PROJ_LIB
值為 C:\OSGeo4W64\share\proj

接下來測試看看 QGIS Server 那隻 FastCGI 程式是否可以正常運作
開啟命令提示字元來測試吧…
基本上 path 設定完,不管在那都可以執行才對…
我測試時是先切換路徑到 qgis server 安裝路徑下,
路徑為 C:\OSGeo4W64\apps\qgis-ltr\bin
如果這隻qgis_mapserv.fcgi.exe,是會正常吐出 xml tag 那就成功一半了

3.3 目錄權限設定
將整個 qgis 安裝的目錄都設定iisuser權限給它
路徑為 C:\OSGeo4W64
使用者包含:IUSR、IIS_IUSRS

3.4 設定


新增虛擬目錄(其實直接新增應用程式也可以才對)

設定別名:qgis(可以隨便定,差別在於服務的網址路徑不同)
實體路徑:C:\OSGeo4W64\apps\qgis-ltr\bin

轉換成應用程式(好啦…我也違反奧卡姆剃刀原則,我當初測試畫面就是這樣嘛)

在 IIS 最根的那層,也就是電腦名稱那層,去設定 ISAPI及CGI限制
原因是底下都會繼承阿,就懶阿

先把 Active Server Page(ASP),限制設定為不允許

新增 ISAPI 或 CGI 限制
ISAPI 或 CGI 路徑:C:\OSGeo4W64\apps\qgis-ltr\bin\qgis_mapserv.fcgi.exe
描述:QGISSERVER (其實有定義沒定義都沒差啦)

允許延伸路徑執行,要打勾

接下來設定 FastCGI

點選 【FastCGI 設定】

新增 FastCGI 應用程式
完整路徑:C:\OSGeo4W64\apps\qgis-ltr\bin\qgis_mapserv.fcgi.exe

設定【處理常式對應】
點選 【處理常式對應】


新增模組對應
要求路徑:qgis_mapserv.fcgi.exe
(iis 收到要求的路徑或檔案來執行下列定義程式運算 也可叫wms*)

模組:FastCgiModule

執行檔:C:\OSGeo4W64\apps\qgis-ltr\bin\qgis_mapserv.fcgi.exe

名稱:qgis_mapserv.fcgi.exe
(可自行定義 叫 wms,不過要給它一個叫wms的 fcgi 檔案,我是這麼幹的…)

2018-05-30 補充:
我額外設定了一組模組對應,要求路徑叫wms*,模組一樣設定為 FastCgiModule,
執行檔也設為 C:\OSGeo4W64\apps\qgis-ltr\bin\qgis_mapserv.fcgi.exe,
名稱則叫做 wms。
copy qgis_mapserv.fcgi.exe ,檔名叫 wms 。

這麼做是wms server網址,可以改成其他的:
http://192.168.15.62/qgis/wms?...


要求限制 > 對應(看上圖吧)

要求限制 > 指令動詞(看上圖吧)GET,HEAD,POST

要求限制 > 存取(看上圖吧)



接下來~測試是否成功…


見證奇蹟的時刻…看到wms 回應的 xml 囉

4. 建立 qgis 地圖專案
於qgis server 路徑下來建立專案檔
qgis server 所安裝路徑為 C:\OSGeo4W64\apps\qgis-ltr\bin

編輯地圖並儲存專案檔 .qgs
Save paths 設為絕對路徑 absolute (這樣只要把 專案檔與fcgi程式放一起即可)

 Project > Project Properties

圖資設定編好後,來發 wms 服務吧
點選【OWS Server】頁籤
(1) Service Capabilities 勾起來,內容就依實況設吧
(2) WMS Capabilities > Advertised extent 勾起來,Boundary 就讓它自己抓吧
把 Use Current Canbas Extent 按下去就行了
(3) CRS restrictions,可以手動加,懶的話就用 Used 按下去,坐標系統就會長出來了
(4) Exclude composers 勾起來
按下 確定 ,然後儲存專案吧

5. 測試
開一空白專案來測試一下發布成果吧

先建立一個 WMS 連結
Name:  local (隨便定的)
URL:http://192.168.15.62/qgis/qgis_mapserv.fcgi.exe?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
(192.168.15.62 因為從另一台機器去測試;qgis是剛剛設的應用程式)

連接wms server
根據剛才設定wms 連結 來 Connect連接
按下Add 將圖層加入qgis ,來測試顯示結果


結果
成功,圖例就是 QGIS 設定的

再來一發,網頁上也接的到…
這樣一來…該是讓那些像水貨商的代理商、經銷商去呷賽啦~
很重要~所以說三次…

PS:
如果裝完發布沒反應…考慮重啟 IIS 服務吧…
在系統管理員身份的命令提示字元下…iisreset 吧…

【參考文獻】
(1) QGIS Server on Windows 10/Server 2012
(2) QGIS Server在IIS 7.0及以上中配置 (廢…勿入)
(2) QGIS Server 2.8 on Windows Server 2012