環境:NixOS 25.05 + KDE 6 + Wayland

configuration.nix ,設定:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{ config, pkgs, ... }:
{
i18n.inputMethod = {
# NixOS 24.11 起的用法
enable = true;
type = "fcitx5";

fcitx5 = {
plasma6Support = true;
waylandFrontend = true;
ignoreUserConfig = true; # 吃下面的 settings,不用 user 的
addons = with pkgs; [
fcitx5-chewing # 新酷音
fcitx5-chinese-addons
fcitx5-mozc # 日文輸入法
];
settings = {
inputMethod = {
"Groups/0" = {
Name = "Default";
"Default Layout" = "us";
DefaultIM = "keyboard-us";
};
"Groups/0/Items/0".Name = "keyboard-us";
"Groups/0/Items/1".Name = "chewing";
"Groups/0/Items/2".Name = "mozc";
};
};
};
};
}

rebuild 跟重開機後就能打中文了!但還是會跳這個訊息:

wayland

暫時找不到 NixOS 對應設定的地方,而且折騰了一段時間也先不搬到 home manager,所以手動照著訊息設定 virtual keyboard。

切換輸入法後出現 Not available

environment.systemPackages 不要設定 fcitx5 相關 package,不然在切換到新酷音時會出現 Not available 之類的字樣,也無法輸入中文。(ref)

env var GTK_IM_MODULE 與 QT_IM_MODULE

在 Wayland 底下即使沒 NixOS 跟 home manager 內設定這兩個 env variable,也還是會被設定成 fcitx,所以會一直跳這個訊息:

env var GTK_IM_MODULE & QT_IM_MODULE

加上 waylandFrontend = true; 可以讓它別跳了。(ref)

Ref

NixOS + KDE 第一次連 wifi 會跳出 KWallet,但一開始沒有 GPG key 所以選 GPG key 的加密方式會出錯,接著就無法連上 wifi。因為 NixOS 預設安裝的 package 很少,安裝又需要網路,連 gpg 指令需要的 pinentry-qt 都無法安裝,所以先選用 Blowfish 模式避開 GPG。

如果一開始選了 Blowfish 還是一直出現 wifi 連線錯誤,先刪掉 KWallet 設定:

1
2
rm -rf ~/.local/share/kwalletd
rm -rf ~/.config/kwalletrc

再重新登入應該能正常連線啦~ 🎉

這個問題在用 Plasma GUI 安裝 NixOS 的時候也會出現,只是既然在 installation media 索性不加密。😛

昨天介紹了 ECS Cluster Auto Scaling,今天來看看 ECS service 的 auto scaling。(本日程式碼

ECS cluster auto scaling 透過 auto scaling group 控制 container instance 的數量來滿足 task 的需求。ECS 會把 CPU 跟 Memory 使用資訊傳給 Cloudwatch,ECS service auto scaling 則是利用這些 loading 資訊自動增減 task 數量,loading 高便增加 task 數量來提供服務,loading 低則減少 task 以節省資源。ECS 是使用 Application Auto Scaling 的功能來做 service 的 auto scaling。

Read more »

昨天幫 ALB 加上 CDN 但還沒開啟 cache,今天要來實驗一下 CDN 的 cache 機制~

cloudfront distribution 的 cache 相關參數是透過 cache policy 設定的,我們會先新增一個 cache policy、設置相關參數,接著在 distribution 多加一個 behavior,開啟某個 path pattern 的 cache 功能。(本日程式碼

Read more »

今天的主題是幫我們的 Laravel web service 加上 CDN(Content Delivery Network 或 Content Distribution Network),讓使用者可以更快取得取得服務。AWS 的 CDN 服務是 Cloudfront,是個 global 層級的服務。

之前用 ALB DNS name 連 Laravel 的時候是用 HTTP 連線,但在這時代沒有 HTTPS 大概是很難過下去(?)的,我們要在 ALB 前面加上 CDN,並且由 CDN 提供 HTTPS 的存取。這麼做可以讓從 CDN 往 cloud 內部的 network traffic 都不需要再做加解密的動作,因為已經在 cloud 內部是可以不用在傳輸時加密,稍微可以提昇 performance。

使用 Cloudfront 會需要一個 domain name,我們會以 Route 53 管理的 domain name 來實作。那~就開始吧~

Read more »

到目前為止我們都只開一個 container instance 跟兩個 task,這樣雖然有兩個 task 可以分擔工作,但都只在一台 EC2 instance 上,如果這台 EC2 instance 掛掉,整個 application 就掛掉了QQ

為了有更好的 availability,在有機器甚至機房出問題時我們的 application 能維持運作,今天我們要把架構改成經典的 High Availability(HA)架構!(本日程式碼

Read more »

ECS 預設的 deployment 方式是 Rolling Update,中文稱為「滾動式更新」,是不斷將現有 container 替換成新版本 container 的機制。這個機制可以做到 zero downtime 的 deployment。

Rolling Update 需要 Load Balancer 做流量的切換:開啟新的 container 後要把流量導到新的 container,停止送 request 給舊 container 並等舊 container 消化完正在處理的 request。

等舊 container 消化 request 的過程稱為 draining(排水),draining 的時間可以在 ALB 的 target group 設定,具體要設定多少則要看實際 request 的最大時間多長。

在 rolling update 中,有兩個 ECS service 參數會影響 deployment 的過程:minimumHealthyPercent 以及 maximumPercent 。

Read more »

昨天把 EC2 instance 搬進 private subnet,如果要 debug 要怎麼連進去呢?今天介紹兩種連進 EC2 instance、一種直接進 container 的方式~

透過跳板機連線

最傳統(?)的方式是在 public subnet 開一台跳板機。連進跳板機後,從跳板機用 private IP address 連到 private subnet 的 EC2 instance。

我們有一台非 terraform 管理、用來當作 Gitlab runner 以及 MySQL server 的 EC2 instance 放在 public subnet,它就可以當作跳板機使用。

這個做法要注意 EC2 instance 的 security group 要打開從 VPC 網段連 SSH 的 inbound rule,以及要把 ssh 連線用的 key pair 放進跳板機。

Read more »

VPC 的 subnet 簡單分成兩種:

  • public subnet:有直接的 route 可以通到 internet gateway 的 subnet
  • private subnet:沒有直接 route 可以到達 internet gateway

到目前為止我們都只有 public subnet,無論是跑 container 的 EC2 instance 還是 Gitlab Runner,都是在 public subnet 上、有 public IP address、可以直接 access internet。一開始把 EC2 instance 放在 public subnet 可以讓網路環境比較單純、讓我們比較容易找問題,不會 container 開不起來要 debug 的時候光是連進 EC2 instance 就被網路搞得頭昏眼花。現在 ECS service 可以正常運作了,我們要把 container instance 們移到 private subnet,讓 EC2 instance 們更安全。(本日程式碼

Read more »