網站測試工具

看載入網站 Waterfall View 的小幫手

除了看 Waterfall 之外,也可以知道 render block 卡在哪邊

https://webpagetest.org/

SSL Server Test by SSL Server Test (Powered by Qualys SSL Labs)

https://www.ssllabs.com/ssltest/index.html

Gzip, Brotli 壓縮測試網站

https://www.giftofspeed.com/gzip-test/

測試網站 http2 功能

https://gf.dev/http2-test

SSL/TLS Vulnerability & Configuration Scanner

https://gf.dev/tls-scanner

Header 檢查工具

https://gf.dev/http-headers-test

HTTP/2 Test

https://gf.dev/http2-test

FTTB test

https://gf.dev/ttfb-test

Google PageSpeed Insights

https://developers.google.com/speed/pagespeed/insights/

KVM 備份還原程序教學

KVM(Kernel-based Virtual Machine) 虛擬架構真的是一個很好的使用環境,不論是開發測試或是佈署成正式環境都很妥當,連 GCP 的 CE 也是採用 KVM 的架構。Guest 端可以支援不論是 Linux、FreeBSD、Solaris 甚至是 Microsoft Windows。

當然東西用下去正式跑的時候,備份就很重要了!

KVM 備份程序

先列出要備份的虛擬機器

ubuntu@host:/$ virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     kudocker                       running
 2     nextcloud                      running

停止 kvm – nextcloud

ubuntu@host:/$ virsh shutdown nextcloud
Domain nextcloud is being shutdown

接下來將 VM 的資料備份成 XML 檔案

ubuntu@host:/$ virsh dumpxml nextcloud > /kvm_backup/nextcloud.xml
ubuntu@host:/$ ll /kvm_backup/nextcloud.xml
-rw-rw-r-- 1 ubuntu ubuntu 4943 Jan 19 16:40 /kvm_backup/nextcloud.xml

再來將 image 檔備份出來

sudo cp /var/lib/libvirt/images/nextcloud.qcow2 /kvm_backup

備份打完收工!

KVM 還原程序

virsh undefine nextcloud
sudo cp /kvm_backup/nextcloud.qcow2 /var/lib/libvirt/images
virsh define -file /kvm_backup/nextcloud.xml
virsh start nextcloud
  • 先將原本的 VM undefine
  • 將 image 檔還原
  • 重新載入定義檔
  • 開啟 VM

WordPress 修改 wp-config.php 各項變數

內容修訂版本上限次數

# 控制內容修訂版本上限次數
define( 'WP_POST_REVISIONS', 4 );

# 取消內容修訂版本次數
define('WP_POST_REVISIONS', false );

定義使用的記憶體

# WordPress 前台可使用的記憶體
define( 'WP_MEMORY_LIMIT', '256' );

# wp-admin 後台可使用記憶體 
define( 'WP_MAX_MEMORY_LIMIT', '512' );

定義快取 – WP Super Cache

# 定義快取
define( 'WP_CACHE', true ) ;

# 快取資料夾
define( 'WPCACHEHOME', '/var/www/j7.lb168.tw/wp-content/plugins/wp-super-cache/' );

設定 cookie domain

define( 'COOKIE_DOMAIN', 'j7.lb168.tw');

設定多重 Redis key

單一主機跑 Redis 的時候,會亂七八糟,所以要設定 Redis Key

define( 'WP_CACHE_KEY_SALT', 'j7.lb168.tw' );

其他 Redis Object Cache 相關參數:

define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', '6379' );
define( 'WP_REDIS_DATABASE', 1 );
define( 'WP_REDIS_PASSWORD', 'mypassword_mypassword_mypassword_mypas' );

禁止登入者修改檔案

define( 'DISALLOW_FILE_EDIT', true );

清空回收桶(7 天)

define( 'EMPTY_TRASH_DAYS', '7' );

WordPress 除錯工具

# 開啟 PHP 除錯工具
define( 'WP_DEBUG', true );

# 開啟 CSS 和 JavaScript 除錯工具
define( 'SCRIPT_DEBUG', true );

優化 WordPress 的 MySQL DB(用完記得馬上關閉)- 不建議使用

define( 'WP_ALLOW_REPAIR', true );

其他設定

define('CONCATENATE_SCRIPTS', true );
define('COMPRESS_SCRIPTS', true);
define('COMPRESS_CSS', true);

pigz – 搭配 tar – Linux 使用 pigz 平行 gzip 壓縮、解壓縮

現在 CPU 核心越來越多,threads 也是一樣,單純用 gzip 來壓縮只會使用一個 core 來跑到極致,pigz 如同說明的:

pigz

就是告訴你說可以用很多核心來跑 gzip

A parallel implementation of gzip for modern
multi-processor, multi-core machines

常用參數說明

跟 gunzip 一樣

-k Do not delete original file after processing.
# 保留原始檔案

核心數

-p ${1~n} Allow up to n processes (default is the number of online processors)
# 看有幾個核心,就用幾個去跑

壓縮比

-# --fast --best
-0~-11 
預設壓縮比是 -6,--fast 是 -1,--best 是 -9

我個人是偏好使用 -1,因為大小真的不會差異很大,而且壓縮時間差很多,不過也是看檔案,如果都是圖片當然不用壓縮,如果都是文字,壓縮比越大越小。

解壓縮

-d --decompress --uncompress
# Decompress the compressed input.

搭配 tar 使用

將 j7.lb168.tw 壓縮,使用 4 個核心,分別測試:

  • 壓縮比 -1
  • 壓縮比 -6
  • 壓縮比 -9
tar -I "pigz -1 -p 4" -cf j7.lb168.tw-1.tar.gz -C /var/www j7.lb168.tw

壓縮結果

所以選擇 -1 的壓縮比是對的XD

mycli – MySQL 語法小幫手

MyCLI is a command line interface for MySQL, MariaDB, and Percona with auto-completion and syntax highlighting.

意思就是用 MyCLI 可以有自動完成跟 syntax highlighting,真的方便又好閱讀!

直接來看看官方網站提供的範例:

安裝方式:

Ubuntu

sudo apt install mycli

Python Package:

pip3 install mycli

使用方式

先搭配先前的文章 – 使用 mysql_config_editor 避免密碼外漏,然後就可以用 config 檔來執行 MyCLI

mycli --login-path=phpmyadmin

使用 mysql_config_editor 避免密碼外漏

以往在備份 MySQL 的時候,都會把密碼寫在 script 裡頭,基本上就不安全。從某天開始 Bash shell scipt 就會跳出警告 Warning: Using a password on the command line interface can be insecure,雖然還是能夠執行備份,但是就覺得很毛,後來乾脆一次用 mysql_config_editor 修掉手邊所有的 backup script。

建立 mysql_config_editor 的 login-path

mysql_config_editor set --login-path=phpmyadmin --host=localhost --user=phpmyadmin --password

或是 root

mysql_config_editor set --login-path=root --host=localhost --user=root --password

密碼要自行輸入唷。

顯示已建立的 login-path

root@guestOS:~# mysql_config_editor print --all
[phpmyadmin]
user = phpmyadmin
password = *****
host = localhost

可以看到密碼被 ***** 了。

不用密碼使用 mysql

mysql --login-path=phpmyadmin

mysql_config_editor 相關使用方式

列出所有 login-path

mysql_config_editor print --all

清空 or 重設所有 login-path

mysql_config_editor reset

移除單一 login-path

mysql_config_editor remove --login-path=phpmyadmin

lxc/lxd container 建立與管理及佈署基本指令 – part. 1

首先登入 lxc

lxc exec lxc00 bash

或是

lxc shell lxc00

安裝及設定必備的環境

sudo cp /etc/apt/sources.list sources.list.default
sudo sed -i 's/archive.ubuntu.com/free.nchc.org.tw/g' /etc/apt/sources.list
sudo apt update && sudo apt dist-upgrade
sudo apt install bash-completion net-tools command-not-found byobu openssh-server curl man-db software-properties-common byobu dnsutils ppa-purge iotop sysstat sshfs virt-what htop git unzip rsync apt-transport-https

必備環境安裝說明:

  • 變更 apt server 到離你最近或是頻寬最佳的,可以參考這篇 挑選最佳的 Ubuntu apt mirror
  • 更新 apt db
  • 安裝基本環境軟體
    • bash-completion net-tools command-not-found byobu openssh-server curl man-db software-properties-common byobu dnsutils ppa-purge iotop sysstat sshfs virt-what

設定 auto completion (ubuntu 這個帳號也要一次)

echo "source /etc/profile.d/bash_completion.sh" >> ~/.bashrc
source /etc/profile.d/bash_completion.sh
su -l ubuntu && echo "source /etc/profile.d/bash_completion.sh" >> ~/.bashrc
source /etc/profile.d/bash_completion.sh

修改密碼

sudo passwd
sudo passwd ubuntu

產生金鑰不用密碼登入

ssh-keygen -t ed25519 -f ~/.ssh/192.168.1.2 -C ubuntu@192.168.1.2
ssh-copy-id -p 22 -i ~/.ssh/192.168.1.2.pub ubuntu@192.168.1.2
ssh ubuntu@192.168.1.2

修改 sshd 設定

sudo vim /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes

PHP Dependency of phpMyadmin & WordPress

前置作業 – Nginx & PHP & MySQL

關於 MySQL 8 的安裝請參考這篇 – Ubuntu 安裝 MySQL 8.0 (mysql-community-server)

nginx 跟 php 是用 Ondřej Surý 打包好的。

sudo add-apt-repository -n ppa:ondrej/php && sudo add-apt-repository -y ppa:ondrej/nginx-mainline

MySQL 的部份看要使用 MySQLMariaDB 或是 PERCONA 都可以。

PHP7.4

sudo apt install dbconfig-common dbconfig-mysql javascript-common libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libcurl4 libflac8 libjs-cropper libjs-jquery libjs-sphinxdoc libjs-underscore liblua5.2-0 libnghttp2-14 libpcre2-8-0 libphp-phpmailer libpsl5 librtmp1 libsodium23 libzip4 php php-bz2 php-common php-curl php-gd php-getid3 php-mbstring php-mysql php-pear php-phpseclib php-tcpdf php-xml php-zip php7.4 php7.4-bz2 php7.4-cli php7.4-common php7.4-curl php7.4-fpm php7.4-gd php7.4-fpm php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-readline php7.4-xml php7.4-zip publicsuffix vorbis-tools

PHP8.0(把上面 7.4 都換成 8.0,沒有的直接去掉 7.4)

sudo apt install php-getid3 php8.0 php8.0-bz2 php8.0-cli php8.0-common php8.0-curl php8.0-fpm php8.0-gd php8.0-fpm php8.0-mbstring php8.0-mysql php8.0-opcache php8.0-readline php8.0-xml php8.0-zip

phpMyAdmin 前製作業

sudo mysql_secure_installation

跑完之後,設定 phpmyadmin 帳號權限

sudo mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

設定 nginx

安裝 WordPress

Ubuntu Desktop 多網卡下使用 Network Manager 變更 route metric

nmcli 變更 metric

sudo nmcli connection modify $connection-name ipv4.route-metric 100
sudo nmcli connection down $connection-name
sudo nmcli connection up $connection-name

參考文章

How to set metric in OS moderated with NetworkManager

nmcli — command-line tool for controlling NetworkManager

2.3. 使用 NETWORKMANAGER 命令行工具 NMCLI