cài đặt website wordpress manhhung.me trên google cloud platform

Lần đầu tiên mình sử dụng wordpress là năm 2005, mình còn nhớ như in khi đó biết đến wordpress là do hay xem blog của anh Trần Lê DUy Tiên (nguoitapviet.info), giờ thì blog đó đã mất rồi, không còn nữa. Hồi đó chỉ có biết đến mấy dịch vụ rất cơ bản như Dreamhost hay Bluehost, và mình quyết định chọn dreamhost vì cái tên của nó nghe hay hơn.

Như các bạn đã biết, WordPress là một nền tảng rất mạnh, hầu hết các bạn dùng nó để làm blog, nhưng cũng có rất nhiều công ty dùng làm cms hoặc trang porfolio của họ. Tuy nhiên để tối ưu nó lại là một câu chuyện hoàn toàn khác, lần này mới là lần thứ 3 mình di chuyển trang blog của mình đi một nơi khác, và chắc chắn sẽ còn rất lâu để mình chuyển tiếp.

Vì sao là Google cloud platform?

mình ưu tiên tính ổn định hơn là giá cả và sức mạnh, hơn nữa việc bạn sẽ cài đặt 1 lần và bỏ mặc một cái blog trong thời gian mấy năm và vẫn yên tâm nó chạy tốt, điều này làm mình khó có thể tin tưởng các brand khác hơn là GOogle và amazon (xem thêm WHy google cloudAWS customer success)

Nói thật thì mình khá thiện cảm với các sản phẩm của GOogle, do việc ngày xưa GOogle cung cấp miễn phí các email domain cho đến việc ra Gmail là hộp thư dung lượng 1GB đầu tiên, chưa kể đến độ thống nhất về giao diện sử dụng của GOogle rất tuyệt vời, đơn giản, cái gì không cần là sẽ không xuất hiện, đơn giản đến bất ngờ (à, loại trừ android ra nhé).

Về google cloud thì tốc độ truy cập các server của họ tại Việt Nam luôn nhanh hơn khi so với AWS, đây là trải nghiệm cá nhân của mình qua các lần thử, blog manhhung.me mình chạy trên con server tại Mỹ nhưng tốc độ truy cập khi ở Việt Nam mình thấy khá là ngon, không gì có thể chê trách được.

Lựa chọn stack nào cho WordPress?

Có rất nhiều giải pháp để chạy một website wordpress, mình có thể liệt kê vài kiểu ra cho các bạn dễ hình dung:

ĐƠn giản, những phần cơ bản để chạy 1 website wordpress

  • Lamp stack: Linux, Apache, MySQL và PHP, đây là cách phổ biến nhất và là cũ nhất, gần như là chậm và lỗi thời vì còn apache.
  • lemp stack: Các thành phần cấu thành LEMP stack cũng gần tương tự với LAMP, chỉ khác là Apache sẽ được thay thế bởi nginx. Nginx được đọc là “engine-x”, giải thích cho chữ E trong “LEPM”, nginx cũng là một ứng dụng HTTP proxy, nó có ưu điểm là cho phép xử lý tốc độ tải cao hơn đối với các HTTP request.

phức tạp hơn, liên quan đến cache

  • nginx > varnish > apache: Đây là cách để có thể có được một website wordpress khá là hoàn thiện, varnish cache đi với wordpress rất tuyệt vời, vì nó cache trong bộ nhớ rồi dùng nginx ở lớp trên cho HTTPS, tuy nhiên để config varnish khá là mệt, có một số dịch vụ cài sẵn stack này, các bạn có thể tham khảo thêm dịch vụ của cloudways, nếu bạn xài gói giá rẻ của họ thì nên, nhưng các cấu hình cao hơn lại có một mức giá khá vô lý, mình thích cloudways vì họ đầy đủ giao diện và quản lý luôn cái root account của server, tức là bạn không thể làm gì được với con máy chủ của mình ngoại trừ chọn cấu hình và cài đặt application.
Varnish Http Cache

wordpress với varnish http cache, xưa cũ và rắc rối, với blog mà như vậy thì rất là tốn thời gian, chưa kể hiệu năng mang lại chưa chắc cao khi mà nginx fast-cgi đã rất tuyệt vời.
  • nginx: thuần nginx, đây là cách gọn nhẹ nhất ở thời điểm hiện tại, và có thể nói thuần nginx đạt được một tốc độ rất cao, cao đến kinh ngạc, nếu bạn dùng plugin wp-rocket có thể xem qua cách cài đặt rocket-nginx của anh Bibica ở đây, còn mình thì vốn rất ghét cài đặt nhiều plugin phức tạp, nhất là cache thì mình vẫn ưu liên mức độ server level cache hơn vì đây chỉ là một trang blog, mình không dùng widget bài viết mới hay comment, thậm chí là chỉ cần chừa mỗi cookies login và không cache trang admin là được, với mình, càng ít càng tốt, cái gì không cần thiết tốt nhất là không nên có mặt.
6882877b Cloudways Managed Panel

những dịch vụ có chữ “managed” thường quảng cáo rất nhiều từ managed panel cho đến managed tất cả, nhưng không phải cái nào cũng đúng nhất là về security, bạn nên thử và cân nhắc, mình từng thiết lập 1 website wordpress trên pagely và đến thời điểm này họ là giải pháp ổn nhất mà mình biết được, còn kinsta thì họ vừa giới hạn visit vừa giới hạn php-worker khá là tiền bạc.

Sử dụng các dịch vụ nào?

server

ở trang manhhung.me thì mình chỉ dùng 1 con server n2-standard của google, tuy nhiên mình chỉnh lại còn 4gb ram vì mình không cần đến 7gb bộ nhớ, với máy chủ thì càng dư càng tốt nhưng với blog này của mình thì 4gb là dư dùng đến 10 năm nữa cũng không có nhiều view đến cần phải có 1 con server như vậy.

Google Cloud Instance

google cloud instance, do mình không muốn phí thời gian để monitoring cho 1 cái blog vui vẻ, nên mình chọn cấu hình dư một tí cho khoẻ.

về database thì mình dùng chung luôn, không việc gì phải sử dụng 1 con riêng chạy database, nếu bạn có nhu cầu lớn bạn có thể xem qua cloud sql của google, hiệu năng khá ngon, sẽ đỡ đau đầu vì không cần phải config và tối ưu mysql, tuy nhiên các bạn nên lưu ý là tốc độ của ổ cứng google khá chậm cho dù là ssd, bạn không nên chạy sql và web trên cùng 1 ổ cứng, nên mình tạo 2 ổ cứng,trong đó 1 ổ riêng chỉ để chứa mysql, mỗi ổ 10gb là quá dư với mình.

Google Cloud Sql

thú thật thì mình vẫn thích dùng 1 em chay database riêng hơn, dù gì thì nó vẫn khoẻ hơn cho việc sử dụng lâu dài, nguyên tắc là càng ít thứ phải để ý đến thì càng khoẻ.

mount ổ cứng thứ 2 và sử dụng, do dùng ubuntu nên mình chạy vài câu là xong, ngoài ubuntu và debian mình cũng không thích tìm hiểu các os khác cho lắm:

blkid (tìm ổ đĩa, nếu có /dev/sdb1 là chia rồi, mà ở mình chưa chia, tất nhiên rồi, chia thôi)
cgdisk /dev/sdb
mkdir /database (tạo 1 folder để mount ổ đĩa thứ 2 vào, mình đặt là database cho trực quan)
uuid="c2c33…" /database ext4 defaults 0 2 (thêm 1 dòng kèm udid của ổ đĩa mới tạo vào file /etc/fstab là xong)

Nhớ là bạn phải tạo 2 cái snapshot schedule cho 2 cái ổ cứng để nó backup nhé, không thì nó không backup cái ổ thứ 2 đâu, mình giới hạn 2 ngày backup một lần và 1 tuần thì xoá cái cũ, cái blog này không cần thiết phải backup dày đặc và mình cấu hình vậy để tiết kiệm được một ít chi phí.

files và cdn + firewall

mình không thích lưu các file media vào thư mục của wordpress, vì đó là sở thích cá nhân, mình luôn lựa chọn offload nó, và wp-stateless là một lựa chọn hoàn hảo cho việc này, do chọn location là Asia (multiple regions in Asia) nên cũng không cần thiết phải tạo cdn cho nó để làm gì, chưa kể tạo cdn của google phải qua cái load balancing, rất là tốn thời gian.

Offload Google Storage WordPress

offload media của wordpress lên google cloud storage bằng wp-stateless

xong phần media, các phần còn lại như js và css mình sẽ để cho cloudflare lo, nó sẽ tự động tối ưu luôn cho mình mà không cần plugin cho việc đó, về cloudflare thì mình luôn chọn gói pro vì có sẵn waf, nếu bạn dùng cloudflare free thì nên xài cdn của một bên khác như keycdn hoặc cloudfront của aws, vì bản chất cloudflare là proxy cdn, nó sẽ có ttfb (một bài giải thích khá rõ ràng về ttfb của bạn Christophe) khá là lớn, nếu không có waf thì không việc gì phải đánh đổi cả, trên thực tế là bạn có thể lập page rule là cache everything để cách luôn html và giảm được ttfb nhưng với cá nhân mình, mình không thích cloudflare làm việc đó, nếu sử dụng cache everything mình sẽ cần tới cloudflare business (200$/tháng) cho việc “bybass cookies”, “Prefetching URLs của HTTP Headers” và nhất là “railgun”. Với manhhung.me, mình dùng bản pro là đủ, có waf.

argo nữa, mình luôn thích tính năng này của cloudflare dù rất nhiều bạn nói nó không đáng tiền, vì ngooài 5$ một tháng, chúng ta còn bị tính tiền băng thông (0.1$ cho 1 gb băng thông), nhưng phải nói, mình tin vào việc số tiền đó hoàn toàn xứng đáng cho những gì argo mang lại, nhất là argo tunnel, rất tuyệt vời, để cài nó cũng rất đơn giản, bạn có thể tham khảo bài viết của họ ở đây.

Cloudflare Argo Improve

cloudflare argo, họ nói là giảm được tới 35% latency nhưng thực tế trên blog mình nó còn hơn thế.

plugin

mình vốn thích wordpress vì nó là cái cms đầu tiên mình tiếp cận, nhưng không có nghĩa mình thích hết về nó, như plugin chẳng hạn, hầu hết vấn đề về tốc độ cũng như lỗi bảo mật đều từ plugin mà ra, tuy theo nhu cầu mà bạn sử dụng plugin, nhưng với mình thì có 3 tiêu chí để lựa chọn plugin:

  • Phải tốt, premium plugin càng tốt, nếu miễn phí thì phải từ những developer tên tuổi.
  • cái nào thực sự cần mới cài, đừng vì 1 tính năng nhỏ mà cài cả một plugin nhiều tính năng, như Jetpack chẳng hạn.
  • luôn test kỹ trước khi đưa vào bản chính thức, cài thì dễ, gỡ sạch mới là tốn công.

danh sách plugin mà mình dùng cho trang manhhung.me ở đây:

  • Disqus for WordPress (dùng cho comment system, comment gốc của wordpress không ngon, mình chỉ dùng disqus từ khi biết đến nó)
  • Custom Adobe Fonts – plugin này của theme Astra, xưa giờ mình luôn sử dụng Adobe font (typekit) thay cho google font.
Adobe Font Plugin Astra Theme

adobe font plugin cho phép chèn typekit font và chỉnh sửa typography cho astra theme của họ, như thường lệ, mình chỉ xài 1 font source sans pro và 4 font weights là đủ nhu cầu hiển thị.
  • Astra Pro – plugin này cũng của theme astra, nó cho phép mình cân chỉnh khảong cách cũng như nhiều cái để mình có thể customize cái astra theme theo ý mình hơn.
  • Clicky for WordPress – dùng để theo dõi lượng truy cập, mình thích bạn clicky này hơn là google analytics vì độ đơn giản của nó, giá cũng rẻ nếu bạn có nhu cầu heatmap.
  • Nginx Helper – dùng để clear cache nginx nếu bạn dùng fast-cgi cache, plugin này do team rtcamp làm easyengine khá nổi tiếng làm, nhẹ nhàng và thực dụng như chính easyengine của họ vậy, thường thì khi nào chỉnh sửa gì mình mới active nó lên, còn không thì cũng không cần để ý đến nó.
  • SEOPress – thay vì dùng yoast seo thì mình dùng plugin này, cũng miễn phí và có phiên bản pro, nhưng bản free là quá đủ với mình vì mình không cần seo lắm cho mấy cái blog.
Seopress Plugin WordPress

seopress plugin, 1 plugin seo cho wordpress, nhẹ và đơn giản hơn so với yoast, có hỗ tợ move từ yoast seo cho ai đang dùng yoast, nhanh và hiệu quả.
  • WP-Stateless – như đã nói, đây là plugin tốt nhất và miễn phí để offload media của wordpress lên google cloud storage, hoạt động hiệu quả và mình quên mất sự hiện diện của nó khi setup xong xuôi, geekflare có một bài hướng dẫn rõ ràng để setup tại đây.

theme

mình chọn astra theme để sử dụng thay vì GeneratePress như nhiều blog khác đang sử dụng, ngày xưa mình rất thích dùng theme mặc định của wordpress vì nó thực sự tốt và nhẹ nhàng, hơn nữa lại miễn phí.

Astra Theme Pro WordPress

đây là giao diện tinh chỉnh của theme, cho tắt bật các module rất đơn giản, và mình cũng chỉ cần nhiêu đó thôi, nặng nề quá không có ích gì với 1 cái blog, nó chỉ tăng thời gian tải frontend và php processing thôi.

nói chung đây là sở thích cá nhân thôi, không quan trọng cho lắm, giao diện 1 blog với mình càng không có gì càng tốt, càng nhẹ càng tốt, càng dễ chỉnh typography càng tốt, và astra đáp ứng hoàn toàn việc này đối với mình, và mình đã trả $249 cho 1 key lifetime, hoàn toàn xứng đáng với số tiền mà mình bỏ ra, tuyệt vời.

dưới dây là custom css của mình cho astra, có 3 size font mà mình sử dụng là 15 cho meta và các phần phụ, 17 cho hầu hết chữ và 25 cho tiêu đề.

.read-more{display:none;}
.ast-archive-description{display:none;}
a, abbr, acronym, address, applet, big, blockquote, body, caption, cite, code, dd, del, dfn, div, dl, dt, em, fieldset, font, form, h1, h2, h3, h4, h5, h6, html, iframe, ins, kbd, label, legend, li, object, ol, p, pre, q, s, samp, small, span, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, ul, var{text-transform:lowercase;}
.post-password-form{text-align:left}
blockquote{margin-bottom:20px;margin-left:0px;padding-left:20px;padding-top:0px;padding-bottom:0px}
.wp-block-gallery .blocks-gallery-image figcaption, .wp-block-gallery .blocks-gallery-item figcaption{font-size:17px;background:linear-gradient(0deg,rgba(0,0,0,.5),rgba(0,0,0,.1) 70%,transparent)}
.hentry{margin:0 0 3.5em;}
.post-password-form input[type=password]{margin-top:15px;margin-bottom:15px;}
.blog-layout-1{padding-bottom:3em}

Về cơ bản là vậy, mình demo thử cho các bạn việc mình setup 1 blog trên google cloud đơn giản, không có tối ưu hay gì trên lần thiết lập này, lần sau mình sẽ move qua upcloud thử, mình khá thích dịch vụ của bên này, xưa giờ mình tập trung dùng google cloud cho các sản phẩm của mình, sắp tới sẽ cân nhắc đến upcloud như là một giải pháp thay thế giá rẻ hơn.