殺手級 WordPress 體檢項目:101 個建立新網站的超簡易捷徑!

本文參考資料為 Killer WordPress Checklist: 101+ easy steps to launch your next website!,已取得原作者 Nirav Dave 授權。

你正在與 WordPress 專案奮戰嗎?棒極了!在設定一個 WordPress 網站時,有許多我們必須遵照的原則,例如我先前曾經寫過「安裝 WordPress 後你應該做的 25 件事」或是「9 個提升 WordPress 網站安全性的方法」。國外部落客 Nirav Dave 決定要製作一份殺手級 WordPress 檢查清單,裡頭涵蓋從啟動網站前的方向、開發過程,到後續的搜尋引擎最佳化(SEO)、維護和安全性等項目。如果你想營運一個 WordPress 網站,最好可以參考這份清單,來確保這些項目都已經完成。

快速檢視本清單涵蓋的項目:

我們的「殺手級」體檢清單被劃分為七個主要項目,包括啟動新網站、開發,以及後續如何成功維護一個 WordPress 網站。

你需要做的就是仔細按照每一個步驟走,開始吧!沒有時間猶豫了。

  • 一、從這開始
  • 二、WordPress 準備清單
  • 三、WordPress 開發清單
  • 四、WordPress 上線清單
  • 五、WordPress SEO 清單
  • 六、WordPress 安全清單
  • 七、WordPress 維護清單
  • 八、值得一讀的文章(Bonus—收錄在文章最後 PDF 文件裡,英文)
  • 九、便利工具(Bonus—收錄在文章最後 PDF 文件裡,英文)

一、從這開始

我們都知道正確開始的重要性。

如果你從一開始,就能正確了解基礎知識,那麼接下來就能進行得很順利。因此,請確保你有系統地按照以下的步驟前進,以獲得最佳效果。

1-1. 選擇虛擬主機
根據你的需求來選擇一個合適的虛擬主機。一些熱門的選項包括 Bigrock | Bluehost | HostGator。

1-2. 下載 WordPress 最新版本:
從 WordPress.org 官方網站來下載 WordPress 正體中文版。

1-3. 使用 FTP 工具:
最好的 FTP 客戶端軟體,下載 FileZilla。

1-4. 線上或本機?
選擇一個合適的開發環境,然後安裝 WordPress。你有兩個選擇:使用 XAMPP 安裝於本機電腦,或是把網站託管在一個虛擬主機。

 

二、WordPress 準備清單

那麼你準備好要開始了嗎?

這可能是突然出現在你腦海中的第一個問題。這份檢查列表回答了這個問題。無論你是初學者,或是 WordPress 專家,這份特殊的列表將有利於開展一個新的 WordPress 網站。

2-1. 選擇正確的目錄:
選擇一個目錄,或安裝在 public_html。不要使用「root」或「WordPress」等名稱。

2-2. 變更資料表名稱:
使用隨機產生的字元/數字組合來命名,取代預設的 wp_ 資料表名稱。有需要可以試試看 Change DB Prefix 外掛。

2-3. 使用獨特的登入帳號/密碼:
避免使用 admin/admin 來做為管理員的帳號/密碼。或者,你可以參考以下範例:

  • 使用者名稱— CMW(舉例)
  • 密碼—(使用 Strong Password Generator 外掛產生)。
  • 你也可以使用你的 Email 做為登入名稱,需要安裝 WP Email Login 外掛。

2-4. 從搜尋引擎隱藏你的測試網站: 
請確認已在「設定 -> 閱讀」內勾選「阻擋搜尋引擎索引這個網站」,以確保能將你的網站從搜尋引擎隱藏。

2-5. 額外步驟:
當你安裝完成,這裡有一些額外項目必須做。

  • 使用免費的 SeedProd Coming Soon 外掛或 WP Maintenance Mode 外掛來建立一個「Coming Soon(即將開站)」畫面。
  • 現在,你必須在「設定 -> 一般」裡進行一些變更。選擇 WordPress 網站位址是否要包含 www 或者不要。
    // 把 non-www 網址重新導向 www,將以下代碼加入 .htaccess。
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
    // 把 www 網址重新導向 non-www,將以下代碼加入 .htaccess。
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
    RewriteRule ^(.*) http://%1/$1 [R=301,NE,L]

2-6. 設定預設日期、時間:
別忘記更新時區、時期格式,在「設定 > 一般」。

2-7. 更新網站標題:
很重要的是記得在「設定 > 一般」底下更新網誌標題和描述。

2-8. 變更媒體設定:
在「設定 > 媒體」底下,取消勾選「將我所上傳的檔案安排為以『月』及『年』為基準的目錄」 選項。

2-9. 變更網誌分類:
同樣的,在「文章 >分類」底下,重新命名「未分類」 ,並為文章設定一個預設分類。

2-10. 以密碼保護測試網站:
為你的測試網站增加安全性,可以安裝 Password Protected 外掛。

2-11. 刪除範例設定檔:
最後,別忘記把範例設定檔移除,wp-config-sample.php 在你的根目錄底下。

2-12. 額外步驟:

  • 開啟除錯模式(Debug Mode)
    define(‘WP_DEBUG’, true);
  • 盡可能使用 WordPress 預先載入的第三方 JS 庫。
  • 做為管理員,你應該能夠上傳/刪除媒體檔案,依照你的需求安裝新外掛。

三、WordPress 開發清單

現在來到最重要的確認項目。

有為數眾多的設定和變更選項必須在建立網站後進行,用以讓一個網站符合你的需求。這就是為什麼,我們把 WordPress 上線清單列為最重要的步驟,即便是非常微小的部分,也千萬不要錯過。

3-1. 移除預設內容:
在這裡,第一件要做的工作是把 WordPress 預設內容移除,像是文章、迴響等等。

3-2. 建立一個網站地圖(Sitemap):
下一步,以記事本、Word 或 Excel 建立一個網站地圖邏輯,並根據此地圖加入頁面,像是關於我們、聯繫我們等等。

3-3. 在網址使用連接號(-):
確認你在網址使用「-」而不是下底線「_」。

3-4. 加入網誌分類:
在「文章 > 分類」底下,新增適當的網誌分類。

3-5. 加入標籤、媒體:
在你加入網誌分類後,你就可以加入適當的文章、標籤和媒體檔案。

3-6. 更新選單:
然後,根據前面設計的網站地圖來加入選單,選單功能在「外觀 > 選單」。

3-7. 使用 ALT 標籤:
別忘記為所有網站圖片加入 alt 標籤。你也可以使用 Search Friendly Images 外掛。

3-8. 加入電子報訂閱:
為電子報訂閱加入 Email 表單功能。你也可以使用 Newsletter 外掛。我們使用 Jetpack 內建的訂閱模組。

3-9. 建立一份外掛列表:
幫你想要安裝的外掛建立一份列表。一些建議的外掛如下:

  • SeedProd Coming Soon:
    https://wordpress.org/plugins/coming-soon/
  • WordPress SEO by Yoast:
    https://wordpress.org/plugins/wordpress-seo/
  • Google Analytics by Yoast:
    https://yoast.com/wordpress/plugins/google-analytics/
  • BackUpWordPress:
    http://wordpress.org/plugins/backupwordpress/
  • WordPress Backup to Dropbox:
    https://wordpress.org/plugins/wordpress-backup-to-dropbox/
  • Broken Link Checker:
    http://wordpress.org/extend/plugins/broken-link-checker/
  • Redirection:
    https://wordpress.org/plugins/redirection/
  • WP-reCAPTCHA:
    https://wordpress.org/plugins/wp-recaptcha/
  • Contact Form 7:
    https://wordpress.org/plugins/contact-form-7/
  • Contact Form 7 reCAPTCHA Extension:
    https://wordpress.org/plugins/contact-form-7-recaptcha-extension/
  • BBQ: Block Bad Queries:
    https://wordpress.org/plugins/block-bad-queries/
  • WP-Optimize:
    https://wordpress.org/plugins/wp-optimize/
  • WP-PageNavi:
    https://wordpress.org/plugins/wp-pagenavi/
  • WP Super Cache:
    https://wordpress.org/plugins/wp-super-cache/
  • iThemes Security:
    https://wordpress.org/plugins/better-wp-security/
  • Revision Control:
    http://wordpress.org/extend/plugins/revision-control/
  • Error Log Monitor:
    https://wordpress.org/plugins/error-log-monitor/

3-10. 加入社交網站圖示:
加入社群網站的圖示或鏈結,像是 Facebook、Twitter、Google+、Pinterest、LinkedIn 等等。你也可以使用 AddThis、ShareThis 或 Share Bar 外掛。

3-11. 加入社交網站 Feeds:

  • Facebook Page Plugin
  • Twitter Plugin
  • Google Plus

3-12. 建立社交網站頁面:

  • Facebook 粉絲專頁
  • Twitter
  • Google Plus
  • Pinterest

3-13. 為置頂文章加入特殊樣式:
讓置頂文章跟一般文章的樣式不同,以確保它們能發揮應有的效果。更多資訊可以參考 RoadtoBlogging.com。

3-14. 檢查內容是否破壞版面:
確保文章內的圖片不會破壞內容欄位,或太大擠壓到內容畫面。在這種情況下,使用 Overflow: Hidden 可以解決問題。

3-15. 高亮作者迴響:
確保作者迴響以不同樣式顯示。 可以參考 WPBeginner 寫的這篇文章:Highlight Author’s Comments。

3-16. 使用大頭貼(Gravatars):
檢查使用者頭像或 Gravatars 可以正確顯示。TodayMade.com 在這裡有完整說明。

3-17. 加入迴響已關閉訊息:
迴響表單能夠正確被「迴響關閉」之類的訊息取代。

3-18. 建立 404 頁面:
另一件重要的事情是確保 404 頁面已經建立而且自訂完成。到 1stwebdesigner.com 查看如何在 WordPress 裡建立一個自訂的 404 頁面。

3-19. 測試搜尋頁面:
請檢查搜尋頁面是否能被使用者存取。直接開啟 http://yoursite.com/?s=Test 來檢查。

3-20. 使用、測試分頁鏈結:
測試文章分頁 WP-PageNavi 外掛是否運作正常。

3-21. 加入網站圖示(Favicon):
使用 Custom Favicon 外掛加入自訂網站圖示。

3-22. 使用麵包屑(Breadcrumb):
別忘記使用麵包屑來提供更簡易的導覽。這是 WordPress SEO by Yoast 外掛的一部份。

3-23. 連結 Logo:
在首頁連結公司的 Logo 圖示。

3-24. 移除 Lorem Ipsum(測試文字):
最後,確認你已經移除網站內的所有測試文字。

 

四、WordPress 上線清單

恭喜!你終於把棘手的開發流程完成了!

現在,你必須做好準備才能順利讓你的網站上線,而不會出現任何問題。你要知道,在實際讓網站上線前,會有許多的步驟必須遵循,我們已經把所有你需要的細節都放在同一個地方,讓你更容易進行。

只要按照這些步驟走,就能讓網站輕鬆上線!

4-1. 採取備份:
當你將你的網站上線,最重要的是定期備份。你可以使用外掛來建立備份:BackUpWordPress(免費)| BackupBuddy(付費)| WordPress Back to Dropbox(免費)。

4-2. 檢查內容結構:
檢查結構與內容,是否包含了頁面、分類、網址、送出表單等等。

4-3. 更新管理員 Email:
在「設定 > 一般」底下,更新管理員的電子郵件地址,同時也檢查社交網站、聯繫資訊內的管理員 Email 是否正確。

4-4. 安全性:
請確保所有資料皆處於安全位置,像是密碼強度、檔案和資料夾權限等等。使用 iThemes Security 外掛。

4-5. 確認跨瀏覽器相容性:
檢查你的網站是否能在不同瀏覽器通過相容性測試。免費試用 Cross Browser Testing。

4-6. 允許網站被搜尋引擎抓取:
在「設定 > 閱讀」下取消選取「阻擋搜尋引擎索引這個網站」選項,讓網站可以被搜尋引擎爬蟲抓取。

4-7. 停用「即將開站(Coming Soon)」頁面:
啟用外掛 SeedProd 然後停用即將開站頁面。

4-8. 測試響應式設計:
確保你的網站能在行動裝置瀏覽。執行 Google’s Mobile Friendly Test。

4-9. 檢查載入速度:
你也必須改進頁面載入速度,從 Google’s Page Speed Insights 獲得更多說明。

4-10. 壓縮圖片:
使用 TinyPNG 或 WP Smush 外掛來壓縮 PNG 和 JPG 檔案,讓圖片尺寸減少 50%。

4-11. 使用最新的 WP 版本:
確認你已經使用最新版本的 WordPress。如果不是,在網站上線前先升級吧。

4-12. 升級外掛:
在網站上線前把使用的所有外掛更新到最新版本也是相當重要的。

4-13. 在新分頁開啟鏈結:
檢查你的所有外部鏈結是否都會在新分頁開啟。使用類似下面的原始碼。

<a href="#" target="_blank"></a>

4-14. 檢查破損鏈結:
記得檢查網站是否有無法連結的超鏈結,也可以使用 Broken Link Checker 外掛來檢查。

4-15. White Label(白標籤,選用):
如果你為客戶開發一個 WordPress 網站,可以使用 White Label CMS 之類的外掛來改造 WordPress 登入頁面。

4-16. 上線:
當所有步驟都完成後,你可以準備讓網站上線了!

 

五、WordPress SEO 清單

你或許已擁有一個 WordPress 網站,但如果沒有適當的進行搜尋引擎最佳化(SEO),那麼它可能就不那麼完美了。

藉由我們提供的全面性搜尋引擎最佳化確認項目,你就不用再去其他地方學習 SEO。

仔細照著每個步驟走,你就能得到一個搜尋引擎最佳化的網站。

5-1. 管理 301 重新轉向:
使用 Redirection 外掛來協助你管理網站的 301 重新導向。

5-2. 允許網站被搜尋引擎抓取:
在「設定 > 閱讀」裡將網站能見度開啟,如果你之前還沒這麼做。

5-3. 使用 H1 標籤:
確認你在每個頁面只有使用一個 H1 標籤。

5-4. 使用 H2 標籤:
也確認在你的內容標題使用 H2 標籤。

5-5. 將 Alt 加入圖片:
別忘記在網站所有圖片加入 Alt 標籤。你也可以使用 Search Friendly Images 外掛。

5-6. 測試 XML Sitemap 網站地圖:
檢查 WordPress SEO Plugin 內建的網站地圖功能有沒有正常作用,或者安裝 Google XML Sitemap 外掛。

5-7. 檢查 Robots.txt:
下一步,很重要的是確認 Robots.txt 已經存在而且最佳化。更多資訊可參考 ElegantThemes.com。

5-8. 壓縮圖片:
使用 WPSmush.it 外掛來調整圖片大小。

5-9.  www 或 non-www:
將「www」重新導向至「non-www」網址,或者相反,只要選擇其中一種格式。

5-10. 註冊網站管理員工具:
如果你已經發現任何網站的問題,註冊 Google 網站管理員工具並修復這些問題。請確保你已經提交「www」和「non-www」版本。

5-11. 測試麵包屑:
確保麵包屑鏈結可以正常運作。

5-12. 限制 Meta 標籤 Title 部分:
另一件事是確保 Meta Title 只有 55 個字元長度,包括空格。WordPress SEO 有內建這項功能。

5-13. 限制 Meta 標籤 Desc 部分:
一樣地,Meta Description 只能包含 155 個字元長度,包括空格。

5-14. 使用 LSI 關鍵字:
LSI 關鍵字(Latent Semantic Indexing, 隱含語意索引) 對於 SEO 非常重要。確認你已經置入足夠的數量在內容裡。使用 Google Keyword Planner 、UberSuggest.org 或 Google 搜尋來找尋 LSI (提示:在完成搜尋後於頁面底部尋找關鍵字)。

5-15. 檢查雙重內容:
非常重要的是確保你的內容原創,而且網站內沒有多重內容。使用 CopyScape。

5-16. 互連內容:
互相連結也是 SEO 裡相當重要的一個環節。因此,確保你有網站的內部連結。

5-17. 連結至外部鏈結:
擁有外部鏈結並連到其他網站資源也是很重要的。

5-18. 最佳化網站:
再一次提醒,使用 GTMetrix 和 Pingdom 等工具來最佳化你的 WordPress 網站。因為它能幫你節省一些時間,用來清除錯誤。

5-19. 改善頁面載入速度:
使用 Google’s PageSpeed Insights 來幫忙你改善頁面載入速度。

5-20. 確認響應式設計:
使用 Google’s Mobile Friendly 來測試你的網站能在行動裝置上正常瀏覽。

5-21. 使用 Schema 產生器:
利用 Schema Creator 外掛來為網站內容加入結構化資料。

5-22. 建立短網址:
為頁面選擇一個更短的鏈結,例如:http://www.sitename.com/killer-wordpress-checklist/。

5-23. 提交 Local Listing:
如果你的網站是關於在地商家,請確認已經它提交到 Google 我的商家。

5-24. 重新檢視分析:
別忘記加入 Google 分析,然後重新檢視取得的資訊。

5-25. 檢查頁面內容:
檢查所有 OnPage SEO 相關內容,在網站上線之前。有一篇必讀的文章,是來自 Backlinko.com 的 Brian Dean「On-Page SEO Guide」。

5-26. 校對內容:
在內容上線前,確保你的網站整體內容的拼寫、語法是否正確。

5-27. 使用 CDN:
明智的作法是使用 CDN 網路,像是 MaxCDN 以確保更好的速度和可用性。(編按:如果不想付費,可以考慮使用 WordPress 提供的免費 CDN 服務「Photon」)

5-28. 從流量分析排除 IP:
在 Google 分析裡將家裡和辦公室的 IP 位址排除。 更多關於排除內部流量的方法可以參考 Google 分析說明。

5-29. 加入社群分享圖示:
別忘了在 WordPress 網站的所有頁面加入社群媒體圖示。你也可以使用 AddThis 、ShareThis 或 Share Bar 外掛。

 

六、WordPress 安全清單

現在讓我告訴你,安全性是網站開發非常重要的一個層面。

因此,在決定將 WordPress 網站公諸於世前,確保你已經過嚴格的安全檢查是當務之急。透過這個清單,你會學到保護網站免於惡意威脅的外掛和附加設定。

6-1. 防止目錄存取:
防止進入所有目錄,把以下程式碼加入 .htaccess 檔案裡。

# 防止目錄瀏覽
Options All -Indexes

6-2. 監測網站效能:
利用 P3 – Plugin Performance Profiler 外掛來取得你的網站效能報告。

6-3. 刪除安裝和升級檔案:
刪除 /wp-admin/install.php 和 /wp-admin/upgrade.php 在每次 WordPress 安裝或升級後。

6-4. 限制可疑的登入嘗試:
透過 Limit Login Attempts 或 Login Lockdown 外掛來限制登入嘗試次數,把有問題的登入拒於門外。(編按:Jetpack 內建的「保護」功能可以善加運用)

6-5. 使用 iThemes Security:
我們強烈建議你使用最全面的安全外掛—iThemes Security,因為它是免費的,而且能發現已知的所有安全問題。

6-6. 保護你的 wp-config.php 檔案:
正如 wp-config.php 檔案包含了你的網站所有保密細節,不惜一切保護它是非常重要的。一個簡單的方法來保護這個檔案,只要把下面程式碼加入伺服器的 .htaccess 檔案。

<files wp-config.php>
order allow,deny
deny from all
</files>

6-7. 停用佈景主題和外掛編輯器:
如果你想從控制台內停用編輯器鏈結,你可以把以下程式碼加入 wp-config.php,其他人就無法在控制台內直接編輯佈景主題 。

define( 'DISALLOW_FILE_EDIT', true);

6-8. 隱藏你的 WordPress 版本:
把你當前使用的 WordPress 版本隱藏起來是非常重要的。將以下程式碼加入你的 functions.php  檔案裡。

function remove_version() {
 return '';
}
add_filter('the_generator', 'remove_version');

6-9. 隱藏登入錯誤訊息:
登入錯誤訊息可能會暴露你的網站,使駭客得到更多關於帳號密碼正確、錯誤的資訊,反之亦然。隱藏登入錯誤訊息是明智的選擇,只要把以下程式碼加入 functions.php 。

function wrong_login() {
 return 'Wrong username or password.';
}
add_filter('login_errors', 'wrong_login');

 

七、WordPress 維護清單

到這裡,你已經完成了大部分對於 WordPress 網站的檢查。現在,你必須知道如何有效的維護它。此維護清單將讓你的網站在運作時更順利,記得定期進行檢查,以確保它的功能沒有任何問題。

7-1. 清理垃圾迴響:
使用 Delete Pending Comments 外掛來解決數以千計的垃圾迴響。(編按:一般情況下其實使用 Akismet 外掛就綽綽有餘)。

7-2. 測試表單:
測試你的聯繫表單,使用它傳送一次資料看看有無問題。

7-3. 檢查壞掉的鏈結:
使用 Chrome 瀏覽器的 CheckMyLink 擴充功能和 Broken Link Checker 外掛來檢查你的網站是否有損壞的鏈結。

7-4. 控制文章版本:
使用 Revision Control 外掛來取得你的文章版本系統完整控制權。

7-5. 回覆迴響:
確保你已經檢查了你的迴響,回答了讀者的問題。

7-6. 更新外掛:
把外掛升級、更新到最新版本。

7-7. 採取定期備份:
別忘記使用外掛來備份最新資料庫和檔案,包括 BackUpWordPress(免費)| BackupBuddy(付費)| WordPress Backup to Dropbox(免費)。

7-8. 檢查 Google 分析:
定期檢查 Google 分析紀錄有無任何變化。

7-9. 檢查網站管理員工具:
同樣地,定期檢查 Google 網站管理員工具。

7-10. 檢查系統資源使用情形:
使用 P3 – Plugin Performance Profiler 外掛來監控你的資源使用情形。

7-11. 監控統計:
使用 WP Statistics 外掛來監控你的 WordPress 網站統計。

7-12. 進行安全檢測:
WP Security Scan 是一個很好用的外掛,可以掃描你的 WordPress 安裝並給予一些安全上的建議。這個外掛也會檢查以下部分:

  • 密碼
  • 檔案權限
  • 資料庫安全性
  • WordPress 控制台保護

7-13 其他:
如果你已經完成以下所有項目,但還希望可以為網站增加額外的附加功能,那麼請按照下面的步驟,將程式碼加入 wp-config.php:

– 停用除錯模式:

define('WP_DEBUG', false);

– 停用 WordPress 更新:

// 完整停用自動更新
define( 'AUTOMATIC_UPDATER_DISABLED', true );
// 停用所有核心更新
define( 'WP_AUTO_UPDATE_CORE', true );

– 控制文章版本:

// 限制儲存的文章版本。限制為 10 個。
define('WP_POST_REVISIONS', 3);
// 完整停用文章版本功能。
define('WP_POST_REVISIONS', false);

– 清空垃圾:

// 每七天自動清除。
define('EMPTY_TRASH_DAYS', 7);
// 完整停用垃圾桶功能。
define('EMPTY_TRASH_DAYS', 0);

– 增加記憶體限制:

// 將記憶體限制設定為 64 MB。
define('WP_MEMORY_LIMIT', '64M');
// 將記憶體限制設定為 96 MB。
define('WP_MEMORY_LIMIT', '96M');
// 將記憶體限制設定為 128 MB。
define('WP_MEMORY_LIMIT', '128M');

– 設定自動存檔時間間隔:

define('AUTOSAVE_INTERVAL', 300 );

 

Bonus:下載免費 WordPress 檢查清單 PDF 檔(英文),這份文件會教你如何利用本文列出的七個最重要的 WordPress 體檢項目。包括兩個 Bonus 章節:1. 值得一讀的文章、2. 便利工具。

這份清單很長,沒錯吧?

但這正是我們希望帶給你的,一份詳盡的 WordPress 檢核列表,無論你是 WordPress 開發者、設計師和使用者,它都能派上用場。

你可以下載這份清單的部分內容,取決於你的需求,將它用於你的 WordPress 網站。

我們在這份檢查列表裡分享了所有關於 WordPress 的知識。現在,輪到你告訴我們:

  • 這份清單的那部分對你來說最實用?
  • 你認為我們還可以增加或補充那些內容?

如果你有任何可以加入這份清單的部分,歡迎提供你的建議!只要在迴響部分留下你的想法,我們就會收錄你的意見並擴充這份體檢清單。

  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

想知道網站建置、網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計及後台網頁設計

帶您來看台北網站建置台北網頁設計,各種案例分享

廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

TinyPNG 也有 WordPress 圖片壓縮外掛,上傳後自動最佳化(Compress JPEG & PNG images)

本文章介紹的 Compress JPEG & PNG images 外掛程式僅適用於 WordPress 自架網站的使用者,若你是使用 WordPress.com 免費網誌服務則無法安裝。

TinyPNG 是我個人相當喜愛的圖片壓縮工具,後來推出 TinyJPG 後,使它原先支援的格式除了 PNG 外又多了一項 JPG,對於大部分使用者來說已經相當夠用,可惜先前它並沒有針對 WordPress 推出外掛功能,要壓縮圖片都必須手動上傳,然後再把壓縮好的圖片下載插入文章裡,雖然這麼做不會花太多時間,但如果能夠跟 WordPress 整合那就更方便了!

一直以來,WordPress 都沒有很好用的圖片壓縮外掛,也就只能勉強使用 WP Smush 這款很老牌的外掛工具,但它的壓縮效果、速度並不是很理想。

今年二月 TinyPNG 終於推出了官方版的 WordPress 外掛,現在使用者可以免費下載、將 TinyPNG 安裝到自己的網站,利用它自動壓縮、最佳化上傳的圖片特性,大幅減少圖片佔用的空間,同時也能提升網站圖片載入速度,尤其在 Google 將網站開啟速度列為搜尋排名的參考因素後,壓縮圖片對於搜尋引擎最佳化(SEO)來說有正面的影響。

這款名為 Compress JPEG & PNG images 的圖片壓縮外掛來自 TinyPNG,利用 API 串連的功能,讓你的 WordPress 媒體庫可以直接使用 TinyPNG 技術來壓縮圖片,免費方案每個月可以免費壓縮 500 張圖片,超過才會開始計價收費,對一般網站來說,每月 500 張的配額其實已經相當夠用。

外掛名稱:Compress JPEG & PNG images
外掛鏈結:https://wordpress.org/plugins/tiny-compress-images/

使用教學

STEP 1

開啟你的 WordPress 控制台,點選左側選單的「外掛」->「安裝外掛」,在右上角的搜尋框輸入「tinypng」,可以找到本文介紹的「Compress JPEG & PNG images」外掛,點選右上角的「立刻安裝」就能從 WordPress 官方資料庫下載、安裝這個外掛功能。

STEP 2

安裝後,點選「啟用外掛」來開啟這項功能。

STEP 3

接著從「設定」裡找到「媒體」功能,將頁面往下拉,會有一個 TinyPNG API Key 欄位需要設定,第一次使用請先點選下方的 TinyPNG Developer section 來申請 API 金鑰。

此外,預設情況下,TinyPNG 會針對原圖、縮圖、中型尺寸、大型尺寸等圖片格式進行最佳化處理,若你沒有用到其他格式的圖片,建議可以只勾選「Original」原始尺寸即可。

STEP 4

開啟 TinyPNG Developer API 頁面,在上方藍色欄位填入你的姓名、Email,點選右邊的 Get your API key 按鈕後,就能立即收到一封 TinyPNG 郵件,點選信中的鏈結開啟,即可找到你的 API 金鑰。

回到上一個畫面,把 API key 貼上,儲存後就能啟用 WordPress 外掛內的圖片壓縮功能。

STEP 5

在安裝完 Compress JPEG & PNG images 後,每次上傳圖片至媒體庫時,就會透過 TinyPNG 全自動進行壓縮,你再也不用手動開啟 TinyPNG 網站然後上傳、壓縮圖片。

如果你網站之前已經有許多圖片,可以透過「工具」->「Compress All Images」功能來批次自動壓縮、最佳化網站內的所有圖片,不過要注意如果超過五百張圖片,必須回 TinyPNG 網站輸入你的信用卡資料,才能夠繼續壓縮,因為每月的免費額度為 500 張。

STEP 6

點選 Compress All Images 後,就會對網站媒體庫內的圖片進行自動壓縮、上傳,不過記得要把網站分頁開著,若是跳出頁面,壓縮工具就會暫停。

若你有大量需求,TinyPNG 在超過 500 張圖片後才會開始計費,每張圖片 $0.009 美元,若單月超過一萬張圖片,價格會壓低至 $0.002 美元,若拿來交換速度、頻寬跟 CDN 開銷那其實是很划算的投資,如有需要的話不妨參考一下。

值得一試的三個理由:

  1. 利用 TinyPNG 技術壓縮、最佳化網站圖片
  2. 搭配 WordPress 外掛可以自動對圖片進行壓縮處理
  3. 內建批次壓縮工具,可一鍵處理媒體庫內的所有圖片
  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師"嚨底家"!!

WordPress Hosting 架站空間精選,最多人推薦的五個國外虛擬主機方案

近年來因為使用 WordPress 架站的需求大增,一些虛擬主機也紛紛推出為 WordPress 特別設計的架站空間,通常被稱為 WordPress Hosting強調以 WordPress 架站為主要考量,經過調校、最佳化且適合架設 WordPress 的主機環境,對於網站或部落格來說有更好的效能。當然,這也很可能只是虛擬主機商的噱頭,無論如何,我想就我個人接觸過的 WordPress Hosting 來做個簡單的彙整介紹,也提供給免費資源網路社群的讀者做為參考。

我之前在「無名搬家到自架 WordPress,我推薦的五個虛擬主機服務」一文介紹過了自行架站的好處,如果你覺得自架網站太麻煩、太花錢,後續維護需要花太多時間,最基本的是註冊一個網域名稱,這對於要長久耕耘網路內容的站長來說是個最棒的投資,至少未來當 BSP 平台發生變化,我們可以帶著這塊「招牌」另起爐灶,就不會造成太多問題。

本文要介紹、推薦一些專注於 WordPress 的虛擬主機空間,這些空間你可能都聽過,但或許不知道它有個專為 WordPress 提供的方案規格,價格可能比一般虛擬主機稍微高些,有些則會限制每個月的瀏覽次數,這些都是 WordPress Hosting 的特色,當然,如果你確定要使用 WordPress 來架站,這些空間相較於一般的虛擬主機來說會更加合適

什麼是 WordPress Hosting?

說到 WordPress Hosting,也就是特別為 WordPress 設計的架站空間,最大的特色是針對該平台所打造的最佳化環境,如果有用 WordPress 架過網站的經驗,一定知道它雖然外表看起來樸實簡單,實際上要把網站調整到最佳狀態,是需要花非常多時間、下苦心研究,甚至投入更多成本才能達成。

但一般虛擬主機最大的問題是:使用者並沒有設定主機核心參數的權限。這使得要調整網站變得更為麻煩,且受限在既有的權限裡,倘若有個專為 WordPress 使用而調整、最佳化後的環境,就可以大幅省去這些問題,至少我們可以確保網站在這個主機上的運作是更快速、更有效率的,且在主機上大部分都是運作 WordPress,也會使環境更單純、更安全。

而這個空間,就是本文要介紹的 WordPress Hosting。

WordPress Hosting 有好多種,那一種適合你?

WordPress 架站空間的選擇很多,但大致可以分成兩大類型。

一種是本文要介紹的空間型態,類似於虛擬主機,但使用者必須自己架設 WordPress,且擁有 FTP 權限,也是比較適合入門、新手或普通網站站長使用。因為主機核心參數已經進行過調整、最佳化,更符合 WordPress 的需求,也就能提高 WordPress 網站效能,在架站後應該就能明顯感覺到跟一般虛擬主機的差異。

另一種則是專業型 WordPress Hosting,像是知名的 WP Engine,主要是提供一個「客製化」的 WordPress 環境,透過他們的技術重新改寫 WordPress ,使它的運作效能提升,降低負載等等。這類方案的價格普遍都高很多(主要是有人完整協助你管理 WordPress 核心部分),如果對於一般的網站,其實不太需要用到這樣的規格。

WordPress Hosting 可以升級嗎?

這個問題依照不同虛擬主機商的方案而定。有些 WordPress Hosting 會提供不同的規格來劃分價格,有些則是只有單一規格,在租用前可以先評估一下自己的需要,盡量在最節省成本的考量下取得最實惠的價格方案,就能把資金做最有效的運用。

如前面所述,WordPress Hosting 大多會限制流量或者每月瀏覽次數,這是為了讓一個主機內的資源能做最好的分配,以免因為其他人的網站流量過大而影響到使用品質,當然我們不能確定主機商是否有超賣(Overselling)的情形,但 WordPress Hosting 就跟虛擬主機一樣都有提供試用、不滿意退款保證,你可以先訂購、實際操作後,再評估看看是不是符合自己需求。

租用 WordPress Hosting 需要注意什麼?

跟一般虛擬主機一樣,WordPress Hosting 只不過是針對 WordPress 進行最佳化的環境,一般情況下價格可能會略高於虛擬主機一些(但價差不會很大),購買時可以注意看看不同方案、規格間的差異,例如可用容量、流量和瀏覽次數限制。

選擇一個最適合自己的方案來做購買即可,有些虛擬主機商提供多種 WordPress Hosting 規格定價,也可以在不敷使用時快速升級到另外一個方案。

此外,租用時大多會需要用到信用卡或 Paypal 付款,如果你的 Paypal 沒有餘額,那就必須綁定信用卡,直接從信用卡來線上支付費用。不過並不是每個虛擬主機商都支援 Paypal 線上支付,有些時候會需要使用信用卡付費。

不過 Pseric 還是建議使用 Paypal 付款,透過中間的支付平台為你的消費紀錄把關,當發生糾紛時還能夠提出申訴或請求退款(而且不會洩漏信用卡資料給第三方公司)。

先付費試用,不滿意退款

在租用虛擬主機(或 WordPress Hosting)前,我通常會先了解該公司的計價策略,以及是否提供不滿意退款保證(Money Back Guarantee),大部分的公司都有提供「付費試用,不滿意全額退款」,甚至在你超過試用期間後,退租時仍可以拿回部分的費用(但這取決於每家公司的規定),大部分的差別在於試用期間多寡,短至七天、長的甚至可達 90 天。

推薦使用的 WordPress Hosting

在介紹完基本的 WordPress 虛擬主機後,接下來就可以開始挑選適合你的 WordPress Hosting 啦!以下介紹的五個 WordPress 空間都是 Pseric 實際使用過,也認為能夠勝任大部分使用者需求的選擇,我會稍微就它們提供的規格做簡單的介紹,大家可以比較看看,那一個方案或空間最適合自己的需要。

就租用 WordPress Hosting 來說,會比租用虛擬主機來得更為單純一些,只需要選擇符合自己的流量規格,然後比較一下價格上的差異,就可以下手啦!

SiteGround

很多人可能沒聽過這家公司,事實上,SiteGround 開始於 2004 年,總部在巴拿馬,至今已經託管全世界超過二十五萬個網站。它們提供包括虛擬主機、雲端主機、獨立主機和經銷主機,而旗下的 WordPress Hosting 是許多網站的首要推薦項目。

SiteGround 的 WordPress Hosting 方案分為三種規格:StartUp、GrowBig 和 GoGeek,差異在於每月訪客數、空間大小和可託管的網站數量,起始方案價格在每月 $3.95 美元,摺合台幣只要一百多元左右,其實價格算是非常實惠的。比較特別的是 GrowBig 以上的方案提供由 SiteGround 自行開發的「Special Cache」快取功能,號稱能夠最佳化網站速度。

若你想要從 SiteGround 開始,我會建議選擇 GrowBig 以上方案來使用它提供的客製化快取功能。此外,它也附送一個網域名稱(每年價格 $14.95 美元,但不在可退費的範圍),以及 30 天不滿意全額退款保證。

DreamHost

DreamHost 旗下有個名為「DreamPress」的 WordPress Hosting 方案,是專為 WordPress 設計的架站平台,比較特別的是不同於一般的虛擬主機,DreamPress 採用將網站空間與資料庫分離的設計,每一個 WordPress 網站都是在虛擬專屬主機(Virtual Private Servers,簡稱 VPS)運作,即使你不懂技術也沒關係,DreamHost 讓這些都全自動處理,號稱能承載每月超過兩百萬的訪客數量。

DreamPress 2 的起始價格為每月 $19.95 美元(年繳),採用 WordPress 全自動化安裝、更新維護,以及每日自動備份,對於想要架設 WordPress 的使用者來說,DreamPress 是個相當不錯的選擇。

Media Temple

Media Temple 是頗有知名度的網站空間提供商,一直以來以穩定、安全、可信賴的服務而聞名,早先最多人推薦的是他們的 VPS 服務,不過後來也推出 WordPress Hosting ,成為旗下的主要產品。跟前面的 DreamPress 一樣,Media Temple 也提供客製化的安裝平台,讓你無須使用傳統的安裝方法即可快速建立自己的 WordPress 網站。

Media Temple 的 WordPress Hosting 提供數種規格,差異在於可託管的網站數量、可用空間和每月訪客數限制不同,最便宜的方案每月 $20 美元起跳,年繳還可享受兩個月免費,一次繳兩年、三年的優惠更多。

HostGator

我先前已經在虛擬主機推薦裡介紹過 HostGator,也使用 HostGator 來實際操作租用、架設 WordPress 網站教學,相信大家對它都不陌生。HostGator 堪稱是世界數一數二的虛擬主機提供商,旗下有相當多的用戶和託管網站,當然價格、穩定性方面也不在話下。

HostGator 有號稱為 WordPress 設計的 WordPress Hosting,不過倒是比較像一般虛擬主機下去做宣傳、推廣而已,沒有其他特殊功能(但用 HostGator 倒還蠻穩定的,而且沒有流量和訪客數量限制)。註冊時可使用本站提供的折扣代碼 FREEGROUP25 ,享受到總金額折抵 25% 的優惠,也就是平均每個月只要 $5.22 USD。

Bluehost

Bluehost 跟 HostGator 一樣,也是非常老牌、世界級的虛擬主機提供商,不過 Bluehost 是 WordPress 官方推薦使用的虛擬主機,它針對 WordPress 推出最佳化的空間(Optimized Hosting),建立在 VPS 技術上,讓 WordPress 有更好的效能表現。

Bluehost 的 WordPress Hosting 是以訪客數、容量、記憶體和可託管的網站數來做價格上的劃分,最便宜的起始方案第一個月是 $12.49 美元,提供 30 天試用,不滿意退款保證。以它提供的方案來說,最便宜的 Blogger 方案應該已經符合大部分中小型網站的需要。

接下來,交給你了!

在介紹完五個我推薦的 WordPress Hosting,相信對於想要架站的朋友來說,又多了一些不同的選擇。接下來,你可以參考以下我之前寫過的文章,或許對於要搬家的你來說會有一些幫助,不過別忘記了,這是 WordPress Hosting,你可能無須手動安裝 WordPress。

  • 自架 WordPress 虛擬主機租用教學,將網誌備份匯出、匯入到新家

對於 WordPress Hosting,你還有更多的推薦選項嗎?歡迎在文章下方提供給大家,與我進行交流,下一步我會實際以 WordPress Hosting 來快速架設一個 WordPress 網站教學,希望大家會喜歡囉!

  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

如何下載、匯入 WordPress 佈景主題開發測試範例元件(Theme Unit Test)?

說到 WordPress,最為人津津樂道的就是它的外掛和佈景主題資料庫相當龐大,也因為它提供了非常完整的開發資源,讓每個人都能設計自己所需的元件或模版樣式。如果你也想為自己的 WordPress 網站開發獨特的版面設計,官方說明文件(WordPress Codex)提供了一個測試範例元件檔案,能產生一堆用來開發測試用的內容,非常好用。

這個檔案收錄在「Theme Unit Test」裡,可能很多人不知道,其實它就是一個包含許多測試內容的 xml 文件,幾乎用到了所有 WordPress 裡可能出現的功能和內容,包括不同階層標題、項目符號、表格、文字樣式、圖片、特殊字元、分類標籤、分頁、多媒體等等。

利用 WordPress 本身的匯入功能,即可把這些內容快速置入測試用網站裡。

使用教學

接下來的步驟會匯入大量的測試開發元件,請在全新的 WordPress 網站進行操作,以免發生問題。

STEP 1

開啟 WordPress Codex 的 Theme Unit Test 頁面,從 Setup 的第一項來下載測試資料,下載後是一個 .xml 的檔案格式,稍後我會再教你怎麼把資料正確匯入 WordPress。

STEP 2

登入剛架設好的 WordPress 網站控制台(記得用全新的網站測試),從左側選單點選「工具」內的「匯入」,然後找到 WordPress 。

第一次使用時會先安裝 WordPress Importer 外掛,點選右下角的「立刻安裝」,安裝後啟用外掛,即可進入匯入工具。

STEP 3

接著回到匯入工具,在 Import WordPress 頁面裡點選「瀏覽」來選取剛才下載的開發測試檔案(theme-unit-test-data.xml),然後按下「上傳檔案並匯入」按鈕。

STEP 4

接著會開始進行匯入檔案前的設定,在這裡別忘記勾選 Import Attachments 下方的「Download and import file attachments」來下載、匯入附件檔案,勾選後按下「Submit」就會將測試元件匯入 WordPress 網站。

STEP 5

匯入完成,你可以看到原先空蕩蕩的 WordPress 網站裡瞬間多出很多測試用的內容。

回到 WordPress 網站首頁,也可以看到各種類型的文章、分頁和分類彙整被加入,這些內容涵蓋許多設計佈景主題時會用到的測試內容,協助開發者在製作佈景主題樣式時可以直接檢視效果,而不需要再自行手動產生測試用的元件。

  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

想知道網站建置、網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計及後台網頁設計

帶您來看台北網站建置台北網頁設計,各種案例分享

廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

啟用 Jetpack「單一登入」機制教學,讓你的 WordPress 網站更安全(含兩步驟驗證)

好像有一段時間沒有寫關於 WordPress 架站的相關文章,事實上,最近找到一個能夠有效提升 WordPress 安全性的方法,簡單來說,啟用內建於 Jetpack 外掛的「單一登入」模組,也就是 Single Sign On(SSO)功能,然後把原本帳號密碼驗證方式關閉停用,將驗證導回讓 WordPress.com 處理。

這麼做有那些好處呢?除了可為帳號加上兩階段驗證保護,從應用程式或手機來接受驗證碼,提高帳號安全性以外,更大的優點是自己的網站無須負載被暴力攻擊、破解的資源耗費問題,因為驗證會被導向 WordPress.com,這個由 Automattic 營運的平台將提供更好的安全性防護。

使用 WordPress 架站的話一定知道:WordPress 登入畫面預設是對外開放的,這也表示任何人都可以存取你的登入頁面,甚至可能從其他地方取得密碼並登入網站。為了更好的安全性,建議要妥善保護好登入頁面(延伸閱讀:安裝 WordPress 後你應該做的 25 件事、9 個提升 WordPress 網站安全性的方法)。

不過,現在不用這麼麻煩了!因為 Jetpack 的 Single Sign On(SSO)把登入驗證的任務交給 WordPress.com 為你把關,拋棄那些第三方登入、兩階段驗證的相關外掛吧!照著接下來的教學,我會教你如何快速有效提升網站的登入頁面安全性。

使用「單一登入」功能保護你的 WordPress

WordPress 的「單一登入(SSO)」功能提供了一個更安全的驗證方法,以保護你的網站免於受到暴力破解攻擊。一旦啟用,你原有的 WordPress 登入畫面會被關閉,你必須登入 WordPress.com 帳號才能進入自己的 WordPress 網站控制台。

Digital Inspiration 在這篇文章提到開啟「單一登入」有這些好處:

  1. 由於 WordPress.com 已經支援兩階段驗證,現在啟用後將能為你的網站提供相同等級的安全防護機制,而且不需要安裝額外的外掛功能。
  2. 你網站所有登入請求,包括惡意登入嘗試,現在都會被導向 WordPress.com,進而減少伺服器和資料庫的負載
  3. 如果你管理多個網站,你可以使用單一 WordPress.com 帳戶來登入、管理,無須記住多組不同的帳號密碼組合。

如何使用 Jetpack 實現「單一登入」?

STEP 1

如果你從來沒用過 Jetpack 外掛,那麼你可能也沒有 WordPress.com 帳戶,可以先開啟這個鏈結,填入 Email、使用者名稱、密碼等相關資訊來建立一個 WP.com 帳號。在註冊時你可能會被要求建立一個 WordPress 網誌,但這不會影響接下來的操作。

STEP 2

申請好 WordPress.com 帳號後,開啟這個鏈結,為你的帳號設定「兩步驟驗證」,增添額外的安全防護。設定前要先填入自己的手機號碼,下載兩階段驗證專用的手機應用程式,跟著網頁步驟操作即可完成設定。

延伸閱讀:

  • 8 個線上服務「兩步驟驗證」設定說明,確保帳戶免於威脅

一旦啟用你的 WordPress.com 兩步驟驗證後,未來當你登入帳號時不僅要輸入正確的使用者名稱、密碼,同時也要輸入一組由行動裝置產生的驗證碼。

STEP 3

回到你的 WordPress 網站,從「外掛 | 安裝外掛」頁面找到 Jetpack,點選「立刻安裝」來自動下載、安裝到你的網站。

第一次使用 Jetpack 時會要求連接到你的 WordPress.com 帳戶,按下連接、登入帳號後,點選「Approve」藍色按鈕即可把網站與你的帳號連結。

STEP 4

設定好 Jetpack 後,即可開啟相關模組功能(在 Jetpack 3.8 版時出現一個問題,那就是介面會變成英文版,不過不影響使用)。

找到我們需要的「單一登入(英文為 Single Sign On)」,然後將它啟用。

STEP 5

以 FTP、SFTP 或 SSH 連接到你的 WordPress 伺服器,開啟當前使用的佈景主題資料夾(路徑為 wp-content/themes/theme-name),編輯 functions.php 檔。複製以下程式碼,貼到檔案後儲存:

add_filter( 'jetpack_sso_bypass_login_forward_wpcom', '__return_true' );

這個步驟主要用於「停用 WordPress 內建的登入頁面」,改由重新導向至 WordPress.com 進行登入及驗證身份。如果你的網誌是屬於多人協作,或者你希望保留原有的登入畫面,可跳過此步驟。

STEP 6

前往「帳號 | 個人資訊」頁面,可以在最底部找到「Log in with WordPress.com」按鈕,這是用來把你的網站登入帳號連結 WordPress.com 帳號。登入後,你就能看到如下畫面,表示已成功連結(Connected)至這個帳號,同時也啟用了兩步驟驗證。

STEP 7

最後,當你登出、重新登入 WordPress 時,就不會出現原有的登入頁面,而是被引導至 WordPress.com 網站,你必須在這裡登入已連結的 WordPress.com 帳號,通過驗證後就可以進入你的控制台囉!

若你在設定途中發現任何問題,導致無法正確登入網站的話,可以把步驟五的程式碼從檔案裡移除,然後將 Jetpack 外掛資料夾整個刪除,就能暫時關閉、停用「單一登入」。

另外,Jetpack 裡也提供了幾個非常實用的模組,建議開啟:

  • Photon 免費 CDN 圖片分流、加速服務,每個 WordPress 用戶都該開啟的外掛
  • Jetpack Monitor 免費 24/7 網站監測服務,WordPress 無法連線自動發送提醒
  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師"嚨底家"!!

Zabbix監控ActiveMQ

當我們在線上使用了ActiveMQ 后,我們需要對一些參數進行監控,比如 消息是否有阻塞,哪個消息隊列阻塞了,總的消息數是多少等等。下面我們就通過 Zabbix 結合 Python 腳本來實現對 ActiveMQ的監控。

一、創建 Activemq Python 監控腳本

因為 CentOS 系統默認安裝的是 Python2.7,為了避免麻煩,我們這裏的腳本也是對應的 Python2

Python2 監控腳本

# -*- coding: utf-8 -*-
# @Time    : 2019/6/25 9:26
# @Author  : djx
# @Email   : djxlsp@163.com
# @File    : mointer_mq_python2.py
# @Software: PyCharm
# @Python_version: python2.7

import base64
import urllib2
import json
import logging
import sys


def activemq_mointer(userinfo_encode):
    # 總的消息阻塞數
    pending_queue_sum = 0
    # 阻塞消息的隊列名稱
    pending_queue_lists = ''
    # 總的消息數
    mq_sum = 0
    headers = {
        'Authorization': 'Basic {}'.format(userinfo_encode),
        'ua': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36'
    }
    url = 'http://' + ip + ':' + port + \
          '/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/Queues/'
    request = urllib2.Request(url=url, headers=headers)
    try:
        response = urllib2.urlopen(request)
    except Exception as e:
        logging.error(e)
        return {'pending_queue_sum': 110, 'pending_queue_lists': '110', 'mq_sum': 0}  # 當服務不可用時,返回預警数字,用於預警。
    activemq_info = response.read()
    activemq_info_json = json.loads(activemq_info)
    activemq_queues = activemq_info_json['value']
    for i in activemq_queues:
        queue_url = 'http://' + ip + ':' + port + \
            '/api/jolokia/read/' + i['objectName']
        queue_request = urllib2.Request(url=queue_url, headers=headers)
        try:
            queue_response = urllib2.urlopen(queue_request)
        except Exception as e:
            logging.error(e)
            return {'pending_queue_sum': 110, 'pending_queue_lists': '110', 'mq_sum': 0}
        queue_info = queue_response.read()
        info_dict = json.loads(queue_info)
        mq_sum += info_dict['value']['EnqueueCount']
        if int(info_dict['value']['QueueSize']
               ) > 0:  # 取值 QueueSize ,就是未消費的消息數量
            pending_queue_sum += info_dict['value']['QueueSize']
            pending_queue_lists += info_dict['value']['Name']
            pending_queue_lists += ' and '
            logging.info(
                "消息隊列--{}--有阻塞消息--{} 條".format(
                    info_dict['value']['Name'],
                    info_dict['value']['QueueSize']))
    return {'pending_queue_sum': pending_queue_sum, 'pending_queue_lists': pending_queue_lists, 'mq_sum': mq_sum}


if __name__ == '__main__':
    # ActiveMQ 服務器信息
    username = 'admin'
    password = 'admin'
    ip = '127.0.0.1'
    port = '8161'
    userinfo = username + ':' + password
    userinfo_encode = base64.b64encode(userinfo.encode('utf8'))
    # 日誌配置,注意下面日誌文件的路徑是採用相對路徑的。
    logging.basicConfig(
        filename="activemq_mointer.log",
        filemode="a",
        format="%(asctime)s %(name)s:%(levelname)s:%(message)s",
        datefmt="%Y-%m-%d %H:%M:%S",
        level=logging.DEBUG)
    if len(sys.argv) == 2:
        mointer_argv = sys.argv[1]
        if mointer_argv in ('pending', 'pending_lists', 'queue_sum'):
            mq_re = activemq_mointer(userinfo_encode)
            if mointer_argv == 'pending':
                print(mq_re['pending_queue_sum'])
            elif mointer_argv == 'pending_lists':
                print(mq_re['pending_queue_lists'])
            else:
                print(mq_re['mq_sum'])
        else:
            # 錯誤提示
            print("Please enter the correct parameters pending|pending_lists|queue_sum")
    else:
        # 錯誤提示
        print("Please enter the correct parameters pending|pending_lists|queue_sum")

使用該腳本注意事項:

  1. 傳入參數只能一個 ,而且只能是 pending, pending_lists, queue_sum ,分別代表阻塞消息數、阻塞消息隊列名稱、總的消息數。

  2. 腳本有日誌記錄和異常記錄,注意設置 日誌文件路徑,假設腳本路徑位於 /opt/scripts/,我們在該目錄下進行執行腳本的話,activemq_mointer.log 日誌文件也就會產生在當前目錄下。我們可以在路徑中通過相對路徑來指定文件夾 形如 ../..//var/log/activemq_mointer.log

  3. 該腳本是由 zabbix agent 進行使用 ,所以我們需要設置該 腳本的權限,以及保證該腳本的用戶有創建日誌文件的權限(或者我們先前創建好對應權限日誌文件)

    sudo chown  zabbix:zabbix  mointer_mq_python2.py
    sudo  chmod 744 mointer_mq_python2.py
    sudo  touch /var/log/activemq_mointer.log
    sudo chown  zabbix:zabbix  /var/log/activemq_mointer.log

二 、設置 zabbix agent

設置 zabbix agent

# 將監控項配置寫入配置文件
sudo echo "UserParameter=activemq.mointer[*],python /opt/scripts/mointer_mq_python2.py \$1 " >> /opt/zabbix-agent/etc/zabbix_agentd.conf
# 重啟zabbix agent
sudo systemctl restart  zabbix-agent 

三、導入監控項:

監控模板 xml 文件。(該監控模板包含三個監控項,一個觸發器)

<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
    <version>4.0</version>
    <date>2019-06-26T03:49:47Z</date>
    <groups>
        <group>
            <name>AWS-1688</name>
        </group>
        <group>
            <name>Fy-hbg</name>
        </group>
    </groups>
    <templates>
        <template>
            <template>Template App ActiveMQ</template>
            <name>Template App ActiveMQ</name>
            <description/>
            <groups>
                <group>
                    <name>AWS-1688</name>
                </group>
                <group>
                    <name>Fy-hbg</name>
                </group>
            </groups>
            <applications>
                <application>
                    <name>ActiveMQ</name>
                </application>
            </applications>
            <items>
                <item>
                    <name>activemq pending amount</name>
                    <type>0</type>
                    <snmp_community/>
                    <snmp_oid/>
                    <key>activemq.mointer[pending]</key>
                    <delay>1m</delay>
                    <history>90d</history>
                    <trends>365d</trends>
                    <status>0</status>
                    <value_type>3</value_type>
                    <allowed_hosts/>
                    <units>條</units>
                    <snmpv3_contextname/>
                    <snmpv3_securityname/>
                    <snmpv3_securitylevel>0</snmpv3_securitylevel>
                    <snmpv3_authprotocol>0</snmpv3_authprotocol>
                    <snmpv3_authpassphrase/>
                    <snmpv3_privprotocol>0</snmpv3_privprotocol>
                    <snmpv3_privpassphrase/>
                    <params/>
                    <ipmi_sensor/>
                    <authtype>0</authtype>
                    <username/>
                    <password/>
                    <publickey/>
                    <privatekey/>
                    <port/>
                    <description/>
                    <inventory_link>0</inventory_link>
                    <applications>
                        <application>
                            <name>ActiveMQ</name>
                        </application>
                    </applications>
                    <valuemap/>
                    <logtimefmt/>
                    <preprocessing/>
                    <jmx_endpoint/>
                    <timeout>3s</timeout>
                    <url/>
                    <query_fields/>
                    <posts/>
                    <status_codes>200</status_codes>
                    <follow_redirects>1</follow_redirects>
                    <post_type>0</post_type>
                    <http_proxy/>
                    <headers/>
                    <retrieve_mode>0</retrieve_mode>
                    <request_method>0</request_method>
                    <output_format>0</output_format>
                    <allow_traps>0</allow_traps>
                    <ssl_cert_file/>
                    <ssl_key_file/>
                    <ssl_key_password/>
                    <verify_peer>0</verify_peer>
                    <verify_host>0</verify_host>
                    <master_item/>
                </item>
                <item>
                    <name>activemq pending queue name</name>
                    <type>0</type>
                    <snmp_community/>
                    <snmp_oid/>
                    <key>activemq.mointer[pending_lists]</key>
                    <delay>1m</delay>
                    <history>90d</history>
                    <trends>0</trends>
                    <status>0</status>
                    <value_type>1</value_type>
                    <allowed_hosts/>
                    <units/>
                    <snmpv3_contextname/>
                    <snmpv3_securityname/>
                    <snmpv3_securitylevel>0</snmpv3_securitylevel>
                    <snmpv3_authprotocol>0</snmpv3_authprotocol>
                    <snmpv3_authpassphrase/>
                    <snmpv3_privprotocol>0</snmpv3_privprotocol>
                    <snmpv3_privpassphrase/>
                    <params/>
                    <ipmi_sensor/>
                    <authtype>0</authtype>
                    <username/>
                    <password/>
                    <publickey/>
                    <privatekey/>
                    <port/>
                    <description/>
                    <inventory_link>0</inventory_link>
                    <applications>
                        <application>
                            <name>ActiveMQ</name>
                        </application>
                    </applications>
                    <valuemap/>
                    <logtimefmt/>
                    <preprocessing/>
                    <jmx_endpoint/>
                    <timeout>3s</timeout>
                    <url/>
                    <query_fields/>
                    <posts/>
                    <status_codes>200</status_codes>
                    <follow_redirects>1</follow_redirects>
                    <post_type>0</post_type>
                    <http_proxy/>
                    <headers/>
                    <retrieve_mode>0</retrieve_mode>
                    <request_method>0</request_method>
                    <output_format>0</output_format>
                    <allow_traps>0</allow_traps>
                    <ssl_cert_file/>
                    <ssl_key_file/>
                    <ssl_key_password/>
                    <verify_peer>0</verify_peer>
                    <verify_host>0</verify_host>
                    <master_item/>
                </item>
                <item>
                    <name>Total number of  activemq msg</name>
                    <type>0</type>
                    <snmp_community/>
                    <snmp_oid/>
                    <key>activemq.mointer[queue_sum]</key>
                    <delay>1m</delay>
                    <history>90d</history>
                    <trends>365d</trends>
                    <status>0</status>
                    <value_type>3</value_type>
                    <allowed_hosts/>
                    <units>條</units>
                    <snmpv3_contextname/>
                    <snmpv3_securityname/>
                    <snmpv3_securitylevel>0</snmpv3_securitylevel>
                    <snmpv3_authprotocol>0</snmpv3_authprotocol>
                    <snmpv3_authpassphrase/>
                    <snmpv3_privprotocol>0</snmpv3_privprotocol>
                    <snmpv3_privpassphrase/>
                    <params/>
                    <ipmi_sensor/>
                    <authtype>0</authtype>
                    <username/>
                    <password/>
                    <publickey/>
                    <privatekey/>
                    <port/>
                    <description/>
                    <inventory_link>0</inventory_link>
                    <applications>
                        <application>
                            <name>ActiveMQ</name>
                        </application>
                    </applications>
                    <valuemap/>
                    <logtimefmt/>
                    <preprocessing/>
                    <jmx_endpoint/>
                    <timeout>3s</timeout>
                    <url/>
                    <query_fields/>
                    <posts/>
                    <status_codes>200</status_codes>
                    <follow_redirects>1</follow_redirects>
                    <post_type>0</post_type>
                    <http_proxy/>
                    <headers/>
                    <retrieve_mode>0</retrieve_mode>
                    <request_method>0</request_method>
                    <output_format>0</output_format>
                    <allow_traps>0</allow_traps>
                    <ssl_cert_file/>
                    <ssl_key_file/>
                    <ssl_key_password/>
                    <verify_peer>0</verify_peer>
                    <verify_host>0</verify_host>
                    <master_item/>
                </item>
            </items>
            <discovery_rules/>
            <httptests/>
            <macros/>
            <templates/>
            <screens/>
        </template>
    </templates>
    <triggers>
        <trigger>
            <expression>{Template App ActiveMQ:activemq.mointer[pending].avg(10m)}&gt;=5</expression>
            <recovery_mode>1</recovery_mode>
            <recovery_expression>{Template App ActiveMQ:activemq.mointer[pending].avg(5m)}=0</recovery_expression>
            <name>activemq queue  pending on {HOST.NAME}</name>
            <correlation_mode>0</correlation_mode>
            <correlation_tag/>
            <url/>
            <status>0</status>
            <priority>3</priority>
            <description>activemq 消息發生阻塞,10分鐘內平均阻塞消息數超過5條</description>
            <type>0</type>
            <manual_close>0</manual_close>
            <dependencies/>
            <tags/>
        </trigger>
    </triggers>
</zabbix_export>

將該監控模板鏈接到對應的主機。

我們可以看到我們監控的數據了。

至此,ActiveMQ 的監控項都已經配置好了。

【精選推薦文章】

自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

Java 轉PPT為圖片、PDF、SVG、XPS、ODP以及PPT和PPTX互轉

同一文檔,在不同的文檔查看器或者編譯環境中,需要對該文檔進行相應的格式轉換。下面的內容中,將介紹通過Java編程來實現PPT文檔格式轉換的方法。

使用工具:

  • Spire.Presentation for Java
  • IntelliJ IDEA

 

Jar文件獲取及導入

方法1通過官網獲取jar文件包。下載文件后,解壓,並將lib文件夾下的Spire.Presentation.jar文件導入IDEA程序。

方法2:通過maven倉庫安裝導入

 

Java代碼示例(供參考)

【示例1】PPT轉為圖片

import com.spire.presentation.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

public class PPTtoPNG {
    public static void main(String[] args) throws Exception{
        //創建Presentation對象
        Presentation ppt = new Presentation();

        //加載示例文檔
        ppt.loadFromFile("sample.pptx");

        //遍歷幻燈片
        for (int i = 0; i < ppt.getSlides().getCount(); i++) {
            //將幻燈片保存為BufferedImage對象
            BufferedImage image = ppt.getSlides().get(i).saveAsImage();

            //將BufferedImage保存為PNG格式文件
            String fileName =  String.format("ToImage.png", i);
            ImageIO.write(image, "PNG",new File(fileName));
        }
        ppt.dispose();

    }
}

PPT轉圖片效果:

【示例2PPT轉為PDF

import com.spire.presentation.FileFormat;
import com.spire.presentation.Presentation;

public class PPTtoPDF {
    public static void main(String[] args) throws Exception{
        //創建Presentation對象
        Presentation ppt = new Presentation();

        //加載示例文檔
        ppt.loadFromFile("sample.pptx");

        //保存為PDF文檔
        ppt.saveToFile("ToPDF.pdf", FileFormat.PDF);
        ppt.dispose();
    }
}

PPT轉PDF效果:

 

【示例3PPT轉為SVG

import com.spire.presentation.*;
import java.io.FileOutputStream;
import java.util.ArrayList;

public class PPTtoSVG {
    public static void main(String[] args) throws Exception{
        //創建Presentation對象
        Presentation ppt = new Presentation();

        //加載示例文檔
        ppt.loadFromFile("sample.pptx");

        //將PowerPoint文檔轉換為SVG格式,並以byte數組的形式保存於ArrayList
        ArrayList<byte[]> svgBytes =(ArrayList<byte[]>) ppt.saveToSVG();

        //遍歷ArrayList中的byte數組
        for (int i = 0; i < svgBytes.size(); i++)
        {

            //將byte數組保存為SVG格式文件
            byte[] bytes = svgBytes.get(i);
            FileOutputStream stream = new FileOutputStream(String.format("ToSVG.svg", i));
            stream.write(bytes);
        }
        ppt.dispose();

    }
}

PPT轉SVG效果:

 

【示例4PPT轉為XPS

import com.spire.presentation.*;

public class PPTtoXPS {
    public static void main(String[] args) throws  Exception{
        //加載測試文檔
        Presentation ppt = new Presentation();
        ppt.loadFromFile("sample.pptx");

        //保存為XPS
        ppt.saveToFile("ToXPS.xps",FileFormat.XPS);
        ppt.dispose();
    }
}

PPT轉XPS效果:

 

【示例5PPT轉為ODP

import com.spire.presentation.*;

public class PPTtoODP {
    public static void main(String[] args) throws Exception {
        //加載測試文檔
        Presentation ppt = new Presentation();
        ppt.loadFromFile("sample.pptx");

        //保存為ODP
        ppt.saveToFile("ToODP.odp",FileFormat.ODP);
    }
}

 

【示例6PPTPPTX互轉

import com.spire.presentation.*;

public class PPTXtoPPT {
    public static void main( String[] args) throws Exception{
        //創建Presentation對象
        Presentation ppt = new Presentation();

        //加載PPTX文檔
        ppt.loadFromFile("sample.pptx");

        //保存為PPT
        ppt.saveToFile("ToPPT.ppt", FileFormat.PPT);

        //PPT轉為PPTX
        //ppt.loadFromFile("sample.ppt");
        //ppt.saveToFile("ToPPTX.pptx",FileFormat.PPTX_2013);
        ppt.dispose();
    }
}

 

(本文完)

轉載請註明出處!

 

【精選推薦文章】

智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

想知道網站建置、網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計及後台網頁設計

帶您來看台北網站建置台北網頁設計,各種案例分享

廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

SpringCloud微服務架構升級總結

一、背景

1.1 應用系統的架構歷史

1.2 什麼是微服務?

起源:微服務的概念源於 2014 年 3 月 Martin Fowler 所寫的一篇文章“Microservices”。文中內容提到:微服務架構是一種架構模式,它提倡將單一應用程序劃分成一組小的服務,服務之間互相協調、互相配合,為用戶提供最終價值。

通信方式:每個服務運行在其獨立的進程中,服務與服務間採用輕量級的通信機制互相溝通(通常是基於 HTTP 的 RESTful API)。

微服務的常規定義:微服務是一種架構風格,一個大型複雜軟件應用由一個或多個微服務組成。系統中的各個微服務可被獨立部署,各個微服務之間是松耦合的。每個微服務僅關注於完成一件任務。

把原來的一個完整的進程服務,拆分成兩個或兩個以上的進程服務,且互相之間存在調用關係,與原先單一的進程服務相比,就是“微服務”。(微服務是一個比較級的概念,而不是單一的概念)

1.3 微服務架構的優勢

  • 可擴展性:在增加業務功能時,單一應用架構需要在原先架構的代碼基礎上做比較大的調整,而微服務架構只需要增加新的微服務節點,並調整與之有關聯的微服務節點即可。在增加業務響應能力時,單一架構需要進行整體擴容,而微服務架構僅需要擴容響應能力不足的微服務節點。
  • 容錯性:在系統發生故障時,單一應用架構需要進行整個系統的修復,涉及到代碼的變更和應用的啟停,而微服務架構僅僅需要針對有問題的服務進行代碼的變更和服務的啟停。其他服務可通過重試、熔斷等機制實現應用層面的容錯。
  • 技術選型靈活:微服務架構下,每個微服務節點可以根據完成需求功能的不同,自由選擇最適合的技術棧,即使對單一的微服務節點進行重構,成本也非常低。
  • 開發運維效率更高:每個微服務節點都是一個單一進程,都專註於單一功能,並通過定義良好的接口清晰表述服務邊界。由於體積小、複雜度低,每個微服務可由一個小規模團隊或者個人完全掌控,易於保持高可維護性和開發效率。

Spring Cloud作為目前最流行的微服務開發框架,不是採用了Spring Cloud框架就實現了微服務架構,具備了微服務架構的優勢。正確的理解是使用Spring Cloud框架開發微服務架構的系統,使系統具備微服務架構的優勢(Spring Cloud就像工具,還需要“做”的過程)。

1.4 什麼是Spring Boot?什麼是Spring Cloud?

Spring Boot框架是由Pivotal團隊提供的全新框架,其設計目的是用來簡化基於Spring應用的初始搭建以及開發過程。SpringBoot框架使用了特定的方式來進行應用系統的配置,從而使開發人員不再需要耗費大量精力去定義模板化的配置文件。

Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中的配置管理、服務註冊,服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分佈式會話和集群狀態管理等操作提供了一種簡單的開發方式。

1.5 微服務、Spring Boot、Spring Cloud三者之間的關係

  • 思想:微服務是一種架構的理念,提出了微服務的設計原則,從理論為具體的技術落地提供了指導思想。
  • 腳手架:Spring Boot是一套快速配置腳手架,可以基於Spring Boot快速開發單個微服務。
  • 多個組件的集合:Spring Cloud是一個基於Spring Boot實現的服務治理工具包;Spring Boot專註於快速、方便集成的單個微服務個體;Spring Cloud關注全局的服務治理框架。

二、技術解析

2.1 Everything is jar, Everything is http

Spring Boot通過@SpringBootApplication註解標識為Spring Boot應用程序。所有的應用都通過jar包方式編譯,部署和運行。

@SpringBootApplication 
public class Application {     
    private static final Logger LOGGER = LoggerFactory.getLogger(Application.class);     
    public static void main(String[] args) {         
        SpringApplication.run(Application.class, args);         
        LOGGER.info(”啟動成功!");     
    } 
}

 

每個Spring Boot的應用都可以通過內嵌web容器的方式提供http服務,僅僅需要在pom文件中依賴spring-boot-start-web即可,原則上微服務架構希望每個獨立節點都提供http服務。

  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

 

2.2 Spring boot Task 任務啟動和定時任務

在Spring Boot需要啟動任務時,只要繼承CommandLineRunner接口實現其run方法即可。

@SpringBootApplication 
public class ClientDataListener implements CommandLineRunner
    public void run(String... strings) throws Exception {     
        clientInfoListenerHandler(); 
    }
}

 

在Spring Boot需要執行定時任務時,只需要在定時任務方法上增加@Scheduled(cron = “0 15 0 * * ?”)註解(支持標準cron表達式),並且在服務啟動類上增加@EnableScheduling的註解即可。

@SpringBootApplication
@EnableScheduling
public class Application {     
    private static final Logger LOGGER = LoggerFactory.getLogger(Application.class);     
    public static void main(String[] args) {         
        SpringApplication.run(Application.class, args);         
        LOGGER.info(”啟動成功!");     
    } 
}

 

// some class
@Scheduled(cron = "0 15 0 * * ?")
public void someTimeTask() {
    ***
}

 

2.3 Spring boot Actuator 監控

Actuator是spring boot提供的對應用系統自身進行監控的組件,在引入spring-boot-start-web基礎上引入spring-boot-starter-actuator即可。

 <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

 

2.4 Spring cloud Config 配置中心

在我們實現微服務架構時,每個微服務節點都需要自身的相關配置數據項,當節點眾多,維護就變得非常困難,因此需要建立一个中心配置服務。

Spring Cloud Config分為兩部分。Spring Cloud Config server作為一個服務進程,Spring Cloud Config File為配置文件存放位置。

2.5 Spring cloud Eureka 服務註冊中心

服務註冊的概念早在微服務架構之前就出現了,微服務架構更是把原先的單一應用節點拆分成非常多的微服務節點。互相之間的調用關係會非常複雜,Spring Cloud Eureka作為註冊中心,所有的微服務都可以將自身註冊到Spring Cloud Eureka進行統一的管理和訪問(Eureka和Zookeeper不同,在AOP原則中選擇了OP,更強調服務的有效性)

2.6 Spring cloud Zuul 服務端智能路由

當我們把所有的服務都註冊到Eureka(服務註冊中心)以後,就涉及到如何調用的問題。Spring Cloud Zuul是Spring Cloud提供的服務端代理組件,可以看做是網關,Zuul通過Eureka獲取到可用的服務,通過映射配置,客戶端通過訪問Zuul來訪問實際需要需要訪問的服務。所有的服務通過spring.application.name做標識,

不同IP地址,相同spring.application.name就是一個服務集群。當我們增加一個相同spring.application.name的節點,Zuul通過和Eureka通信獲取新增節點的信息實現智能路由,增加該類型服務的響應能力。

2.7 Spring cloud Ribbon 客戶端智能路由

與Spring Cloud Zuul的服務端代理相對應,Spring Cloud Ribbon提供了客戶端代理。在服務端代理中,客戶端並不需要知道最終是哪個微服務節點為之提供服務,而客戶端代理獲取實質提供服務的節點,並選擇一個進行服務調用。Ribbon和Zuul相似,也是通過和Eureka(服務註冊中心)進行通信來實現客戶端智能路由。

2.8 Spring cloud Sleuth 分佈式追蹤

2.9 Spring cloud Zipkin 調用鏈

2.10 Spring cloud Feign http客戶端

Spring Cloud Feign是一種聲明式、模板化的http客戶端。 使用Spring Cloud Feign請求遠程服務時能夠像調用本地方法一樣,讓開發者感覺不到這是遠程方法(Feign集成了Ribbon做負載均衡)。

把遠程服務和本地服務做映射

@FeignClient(name = "rabbitmq-http", url = "${SKYTRAIN_RABBITMQ_HTTP}") 
public interface TaskService {     
    @RequestMapping(value = "/api/queues", method = RequestMethod.GET)     
    public String query(@RequestHeader("Authorization") String token); 
}

 

以調用本地服務的方式調用遠程服務

@Autowired 
private TaskService taskService; 
private String queryRabbitmqStringInfo() {     
    byte[] credentials = Base64 .encodeBase64((rabbitmqHttpUserName + ":" + rabbitmqHttpPassword).getBytes(StandardCharsets.UTF_8));     
    String token = "Basic " + new String(credentials, StandardCharsets.UTF_8);     
    return taskService.query(token); 
}

 

2.11 Spring cloud Hystrix 斷路器

三、微服務實踐

3.1 我們開發的幾個微服務組件—應用管理中心

應用管理中心可以對每個已經註冊的微服務節點進行停止,編譯,打包,部署,啟動的完整的上線操作。

3.2 我們開發的幾個微服務組件—zookeeper數據查詢中心

zookeeper數據查詢中心根據zookeeper地址,端口,命令獲取zookeeper數據信息。

3.3 我們開發的幾個微服務組件—微服務健康檢測中心

健康檢測中心周期性檢查每個微服務的狀態,當發現有微服務狀態處於DOWN或連接超時時,觸發報警。

3.4 我們開發的幾個微服務組件—定時任務查詢中心

// 在BeanPostProcessor子類中攔截
@Component
public class SkytrainBeanPostProcessor implements BeanPostProcessor, Ordered {
    ***
    /**
     * Bean 實例化之後進行的處理
     */
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        beanPostProcessor.postProcessAfter(bean, beanName);
        return bean;
    }
    ***
}
// 攔截后獲取定時任務註解
***
public Object postProcessAfter(Object bean, String beanName) {
    Class targetClass = AopUtils.getTargetClass(bean);
    Map annotatedMethods = MethodIntrospector.selectMethods(targetClass,
            new MethodIntrospector.MetadataLookup() {
 
                public Set inspect(Method method) {
 
                    Set scheduledMethods = AnnotatedElementUtils.getMergedRepeatableAnnotations(method,
                            Scheduled.class, Schedules.class);
                    return (!scheduledMethods.isEmpty() ? scheduledMethods : null);
                }
            });
    if (!annotatedMethods.isEmpty()) {
        String className = targetClass.getName();
        for (Map.Entry entry : annotatedMethods.entrySet()) {
            Method method = entry.getKey();
            for (Scheduled scheduled : entry.getValue()) {
                String key = className + ":" + method.getName();
                String value = scheduled.toString();
                taskInfos.put(key, value);
            }
        }
    }
    return null;
}
***
 
// 獲取定時任務后註冊
***
public void taskRegister() {
    String nodeInfo = ipAddress + ":" + serverPort + ":";
    try {
        /**
         * 定時任務
         */
        Map infos = taskInfos;
        for (Entry item : infos.entrySet()) {
            String taskId = nodeInfo + item.getKey();
            String taskParameter = item.getValue();
            JSONObject info = new JSONObject();
            info.put("taskId", taskId);
            info.put("taskParameter", taskParameter);
            info.put("applicationName", applicationName);
            info.put("taskType", "schedule");
            LOGGER.info(info.toString());
            zooKeeperExecutor.createZKNode(SKYTRAIN_TASK_ZKNODE_PREFIX + taskId, info.toString());
        }
    }
    catch (Exception ex) {
        LOGGER.error("", ex);
    }
}
***

 

3.5 微服務的分類

  • 微服務平台組件
  • 公共服務組件
  • 基礎服務組件/業務服務組件

3.6 整體微服務架構圖

作者:梁鑫

來源:宜信技術學院

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師"嚨底家"!!

Open Live Writer 微軟最好用離線編輯器開放原始碼!支援 WordPress、Blogger 等網誌平台

剛開始寫網誌時,我曾是微軟 Windows Live Writer(又被稱為 WLW)離線編輯器的忠實使用者,這部分我也在「我如何寫出一篇文章?每日必用的寫作相關軟體彙整」提過,若說是 Windows 中最好用的免費離線編輯器也不為過!也是少數會被使用者推崇的微軟產品,可惜最後一次大更新距今已過三年多時間,隨著 Windows Live Essentials 逐漸式微,它的前景令人擔憂。

不過好消息是微軟近期將 Windows Live Writer 開放原始碼後釋出,並重新取名為 Open Live Writer(OLW)!這項計畫的背後開發者為 .NET Foundation,也是積極推動開放原始碼發展的組織。其實早在去年 Scott Hanselman 便預告將 Windows Live Writer 開源的想法,直到今年底才正式推出第一個版本。

Open Live Writer 是一款桌面版網誌發佈應用程式,俗稱部落格離線編輯器,透過這項軟體可以在電腦上利用所見即所得(WYSIWYG)編輯器來撰寫文章、發佈相片、地圖等等。尤其一般網誌平台內建的編輯器都不是很好用,而且必須要在網路連線情況下才能使用,透過離線編輯器就如同在 Word 等文字處理軟體上工作,可以等到有網路時再將文章發送出去。

Open Live Writer 支援 WordPress、Blogger、TypePad 及 WordPress.com 等平台(未來會支援更多平台),當然所有使用 XML-RPC 協議的網誌平台也能連結,例如:痞客邦。

雖然仍未出現眾多使用者期待的 Mac 或 Linux 版,但能夠開放原始碼還是一件值得慶祝的事,代表日後會有志願者繼續維護這項專案,當然你也可以自由加入 GitHub 專案頁面來貢獻心力,或者免費下載 Open Live Writer 來做為你的部落格寫作工具。

軟體資訊

軟體名稱:Open Live Writer
軟體語系:英文
作業系統:Windows
官方網站:http://openlivewriter.org/
下載鏈結:官方網站免費下載

使用教學

STEP 1

從官方網站點選「Download」下載安裝程式,安裝後即可開始設定 Open Live Writer。

STEP 2

對於使用過 Windows Live Writer 的朋友應該不陌生,大致就是選擇你的網誌平台,然後設定網址、帳號密碼,連接後即可透過編輯器來撰寫文章,處理網誌上的文章內容。

設定好你的網誌網址、使用者名稱及密碼,透過 Open Live Writer 進行連接。如果你的平台無法被 Open Live Writer 識別,可能就要設定一個特定的網址,這部分要自己去爬文找找看設定教學。若是自己使用 WordPress 架站,那麼輸入網址就能抓到網站了。

Open Live Writer 延續 WLW 的特色,會將你的佈景主題複製下來,直接套用到離線編輯器上,這麼做的好處是當你離線寫作時,能即時知道文章發佈到網站上的樣子,這也是其他編輯器比較少做到的,非常方便的功能喔!

STEP 3

下圖是我使用 Open Live Writer 連結到我的部落格呈現出來的效果,可以看到編輯器變成了我部落格的網站樣式(黑色背景),同時在文字處理上也有相對應的樣式效果,使用時就跟在部落格上寫作的感覺很像。

OLW 的原始介面並沒有大幅度的修改和調整,保留大部分原有功能與設計。

若你正在使用 Windows Live Writer,或者打算重新安裝這套軟體,那麼你可能會想知道有沒有轉換成 Open Live Writer 的必要性呢?我的想法是有的,而且建議盡早升級轉換,因為 Windows Live Writer 已經有段時間沒有更新,說穿了是原有團隊已經不再繼續維護軟體,雖然還能正常使用,但不確定日後會不會發生問題。

Open Live Writer 是個延續這項軟體的開放原始碼計畫,會有更多人投入心力,提出好的點子(這也是開源優勢),可能不一定會立刻有什麼大轉變,但相信未來會成為更好的離線編輯器,也期待日後可以在 Mac 或 Linux 平台推出。

值得一試的三個理由:

  1. 最好用的 Windows Live Writer 網誌離線編輯器開放原始碼了!
  2. 命名為 Open Live Writer,現已放上 GitHub 頁面
  3. 延續 WLW 優良功能,新版已經修復無法連線 Blogger 的問題
  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

Tap 免費 WordPress 架站空間,全管理式託管可安裝佈景主題外掛

近年來已經越來越多人捨棄 BSP(部落格服務提供商),轉而自己架設網站,畢竟價格和難度已不如以往,自架網站自由度高,可完整掌控網站的所有設定項目,使你在經營網站時能有更多調整空間。架設工具首推 WordPress,因為它非常簡單,而且在中文方面仍在持續維護更新,佈景主題及外掛資源也非常豐富,如果你想搬家,那麼我也推薦五個虛擬主機服務及 VPS,我還將租用到網誌備份匯入寫成一篇完整教學,只要照著做你也能輕鬆架站。

即便如此,仍然有許多人卻步而不知道該不該搬家或自架網站,或許在此之前,你可以先試試看 WordPress 的操作介面,再來考慮是否轉而投入 WordPress 平台。

本文要介紹這項服務「Tap」是一個全新的免費 WordPress 空間,更精確地說,它是一個全管理式虛擬主機(Managed WordPress hosting),若有租用過虛擬主機的話,應該對於這個名詞不陌生,「全管理式」虛擬主機空間讓你完全無須經手,你不用熟悉技術方面知識,操作上就如同一般網路服務那麼簡單。

但我使用後發現 Tap 其實更像是一個 WordPress Hosting(請參考:WordPress Hosting 架站空間精選,最多人推薦的五個國外虛擬主機方案),使用者只要在 Tap 上註冊帳戶,即可開啟 WordPress 網站,但跟 WordPress.com 或 Multisite 不同的是:每個網站都擁有最高權限,可隨時更新,或者安裝佈景主題、外掛,當然介面就跟自己架 WordPress 一樣。

不過要注意的是 Tap 分為兩種方案:免費及 Pro。付費方案每月 $5 美元,支援自訂網域名稱功能(Custom Domain),以及可使用 SFTP 來存取網站,也就是說若你使用免費方案,那麼只能使用 Tap 提供給你的子網域名稱(YourName.thisistap.com)。WordPress 可以直接在控制台內安裝外掛和佈景主題,所以 SFTP 部分就沒有影響,除非你想把一些檔案手動上傳到虛擬主機。

如果你想試試看自己架設 WordPress,但又擔心技術方面問題無法克服,Tap 或許是個不錯的折衷方案。當然 WordPress 本身有內建匯入匯出功能,你也可以很輕鬆地將其他網站的內容匯入,或者日後搬家,決定自架網站時再把 Tap 的內容匯出備份,不用擔心會被平台綁住而難以轉換。

網站名稱:Tap | Managed WordPress Hosting
網站鏈結:https://thisistap.com/

使用教學

STEP 1

開啟「Tap」網站後,點選網站中間的「Create My Free Site」來建立免費網站,註冊時需要填入你的姓名、Email 和密碼,勾選同意使用條款後就能取得帳號。

STEP 2

接著下一步,我們要在 Tap 平台內建立自己的 WordPress 網站,不過 WordPress 本身也有自己的安裝畫面,這裡只要設定你要使用的子網域名稱(YourName.thisistap.com),網站名稱及帳號密碼,但稍後在安裝 WordPress 時還會需要再輸入一次。

STEP 3

建立好網站後,你的 WordPress 網誌就會顯示在 Tap 的「My Sites」裡,那麼點選網站鏈結來繼續吧!(對了,如果你之後想要付費升級 Pro,也是在這個畫面點 Upgrade)

STEP 4

第一次開啟你的 WordPress 網站時會跳出安裝畫面,選擇語系將畫面拖曳到最下方,找到正體中文(繁體中文)選項,然後按「繼續」。

從這裡開始就是 WordPress 的範疇了,雖然它仍然是在 Tap 平台上,若有遇到任何使用上的問題,可以到 WordPress Taiwan 正體中文 Facebook 社團尋求協助。

設定相關資訊,包括網站標題、帳號、密碼、電子郵件等等,WordPress 安裝程式其實設計很簡單,只有簡單兩個步驟就能完成啦!安裝後會提示你開啟網站,或進入控制台。

STEP 5

在登入畫面輸入你在「安裝程式」(前一步驟)設定的帳號密碼,即可登入你的 WordPress 控制台,可以看到你能使用所有功能,包括新增文章、頁面、媒體,管理迴響,或者安裝佈景主題及外掛程式,以及管理帳號和設定網站等等。

WordPress 使用了最新的預設佈景主題。你可以從控制台來變更其他佈景主題,當然也可以自己安裝新的,不受限制。但免費版因為不提供 SFTP 功能,要安裝自己的佈景主題,必須先將整個資料夾壓縮成 Zip 檔,透過線上安裝的方式將它安裝到 WordPress。

STEP 6

最後,你就有一個自架的 WordPress 了!無論要做為一般生活記錄,或者設計成線上名片或個人網站,WordPress 都非常適合,不過如果想要長久經營,我建議還是申請一個網域名稱,付費升級 Pro 方案來設定自己的網址,這樣效果會比較理想。

或許有人會質疑 Tap 的穩定性,或者能否長久經營?我想無論是否使用此服務,或者自己租用虛擬空間來架設網站,基本上都會遇到類似問題,不過別擔心,Tap 允許使用者安裝外掛,那麼表示你也能夠使用外掛來備份內容(或者以內建的匯出工具),隨時將你寶貴的內容保存下來,當服務未來可能終止或不再繼續提供支援,也不會擔心內容無法轉出。

最好的方法還是建議註冊一個網址,未來要重起爐灶才不會又要重來。

值得一試的三個理由:

  1. 免費的「全管理式」空間(Managed WordPress Hosting)
  2. 可真正使用 WordPress 完整功能,包括自己安裝外掛、佈景主題
  3. 付費升級(每月 $5 美元)即可自訂網域名稱及使用 SFTP 功能
  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

想知道網站建置、網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計及後台網頁設計

帶您來看台北網站建置台北網頁設計,各種案例分享

廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益