WSL2 + Ubuntu 並建立 LNMP環境

最近看到有網友分享Windows WSL2 環境運行速度比 Windows Docker 來得快,剛好我也想學學簡單易點的架構,不要又跑VM又包 Docker這樣。

分享
WSL2 + Ubuntu 並建立 LNMP環境

WSL2 + Ubuntu 並建立 LNMP環境,額外附加 Node.Js、PhpMyAdmin安裝流程


最近看到有網友分享Windows WSL2 環境運行速度比 Windows Docker 來得快,剛好我也想學學簡單一點的架構,不要又跑VM又包 Docker這樣。

在我之前已經有許多厲害的網友們有寫過一樣的主題了。我呢,就是當筆記記錄下自己操作的過程和在過程中遇到的問題吧~


安裝適用於 Linux 的 Windows 子系統

首先必須要是Windows 10 然後更新到 2004 版,組建 19041 或更高版本
然後以管理員權限執行PowerShelldism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart// 將 WSL 2 設定為預設版本
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart// 啟用 WSL
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux// 將 WSL 2 設定為預設版本
wsl --set-default-version 2

接下來就可以從 App Store 下載 Ubuntu 來使用了,我的話是下載20.04 TLS版本

資料來源: Microsoft 官網

開啟支援 ssh 連線

以管理者權限進入 powershell 並修改 /etc/ssh/sshd_config 檔案Port = 22    # 移除註解
ListenAddress 0.0.0.0    # 移除註解
PasswordAuthentication no    # 改成 yes// 存檔後執行
sudo dpkg-reconfigure openssh-server
sudo service ssh restart

然後就可以用 ssh [username]@127.0.0.1 連進 wsl2 上的 ubuntu 了


PHP 7.4

安裝好Ubuntu後可以先進行更新,然後依照下面的代碼輸入後就會安裝好PHP了// 系統更新
sudo apt update

// 安裝 PHP 和相關套件 
sudo apt install php php-cli php-fpm php-json php-pdo php-mysql php-zip php-gd  php-mbstring php-curl php-xml php-pear php-bcmath

// 再裝個composer
sudo apt install composer

其他版本可以參考這篇 https://computingforgeeks.com/how-to-install-php-on-ubuntu/

Nginx

Nginx 就直接下安裝指令就行了,比較特別的是要記得裝完要自行啟動sudo apt install nginx
sudo service nginx start

啟動OK後在 windows 瀏覽器打下 127.0.0.1 或是 localhost 成功的話就會出現下面的畫面。

不要懷疑 /var/www/html/index.html 預設內容就是長這樣~

要將 PHP 專案與 Nginx 連結,要先將 /etc/nginx/sites-available/default 複製一分到 /etc/nginx/conf.d/[project_name].conf

調整內容# 目錄指向 /var/www 下的專案路徑
root /var/www/[project_name]/public;# 這邊加上 index.php
index index.php index.html index.htm index.nginx-debian.html;# 網域名城可以自己取一個喜歡的名字
server_name laravellocation / {
   #這邊要改成這樣
   try_files $uri $uri/ /index.php?$query_string;
}location ~ \.php$ {
   include snippets/fastcgi-php.conf;  # 拿掉註解
   fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 拿掉註解
}location ~ /\.ht { # 拿掉註解
   deny all;
}

然後將 您的專案軟連結到 /var/www 路徑下cd /var/www
sudo ln -s [path of your prokect]

之後重啟 nginx 服務,也確保 php-fpm 有啟起來,所以一起 restart 吧sudo service nginx restart
sudo service php7.4-fpm restart

在瀏覽起開啟 http://laravel 應該就可以看到自己的專案首頁了,如果沒辦法的話可以把 /etc/nginx/sites-available/default 內的 default_service 拿掉、server_name 改個名字就行了

調整內容有參考這篇 https://blog.gtwang.org/linux/ubuntu-linux-laravel-nginx-mariadb-installation-tutorial/

MariaDB// 安裝
sudo apt-get install mariadb-server mariadb-client// 啟動 mariadb
sudo service mysql start
(沒啟動會報錯 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2))// 初始化
sudo mysql_secure_installation// 成功系統會問一些問題
1.Enter current password for root (enter for none):  #可以直接按enter
2.Set root password? [Y/n] y
...
3.Remove anonymous users? [Y/n] y
4.Disallow root login remotely? [Y/n] y
5.Reload privilege tables now? [Y/n] y

完成初始化設定後就可以進入 mariadb 建立 database 和使用者了// 記得加 sudo,不然連不進去
sudo mysql -u root -p

// 建立一個使用者 
> CREATE USER 'user'@'%' IDENTIFIED BY 'password';
// 創立權限 
> GRANT ALL PRIVILEGES ON 'dbname'.* TO 'user'@'%' WITH GRANT OPTION;
> FLUSH TABLES;
資料參考自: https://hackmd.io/@monkenWu/SyxEisueB#%E5%9B%9B%E3%80%81%E5%AE%89%E8%A3%9Dmariadb

PhpMyAdmin

在根目錄wget下載 (放在你喜歡的地方也可以)sudo wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.zip

接著解壓縮sudo unzip phpMyAdmin-5.0.2-all-languages.zip// 檔名太長不開心
cp phpMyAdmin-5.0.2-all-languages phpMyAdmin-5.0.2 -r

這時候你的該路徑下會有一份已解壓縮的檔案,接著做cd phpMyAdmin-5.0.2
sudo cp config.sample.inc.php config.inc.php// 然後你需要改一下內容,找到下面這航將引號裡面填上隨意你喜歡的字後存檔
$cfg['blowfish_secret'] = ''

接著到 /etc/nginx/conf.d 偷懶直接複製上面做的 php 設定檔來用cd /etc/nginx/conf.d
sudo cp ../sites-available/default phpmyadmin// 接著需要改設定檔內容
sudo vim phpmyadmin// 找到這三行並修改
listen 8090;    # 改成你喜歡的 port
server_name localhost 127.0.0.1;// 這裡的名稱要跟 /var/www/[phpmyadmin name] 一樣不然找不到
root /var/www/phpMyAdmin-5.0.2;

完成後還需要到 /var/www 做個軟連結sudo ln -s ~/phpMyAdmin-5.0.2

都完成後重啟 nginx 服務,打開連覽器並前往 127.0.0.1:8090 就會看到phpmyadmin的畫面了~

資料參考: https://hackmd.io/@monkenWu/SyxEisueB#%E5%9B%9B%E3%80%81%E5%AE%89%E8%A3%9Dmariadb

NPM + Node.js

額外附加: 要安裝這兩個必須先安裝 curl、nvm
***建議不要裝ZSH和oh-my-zsh 因為會改寫 npm pm 的路徑***sudo apt-get install curl// 安裝 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash// 完成後執行此行應該會回傳 nvm,如果沒有的話請重開終端機
command -v nvm// 安裝 tls 版 node
nvm install --lts

資料來源: Microsoft 官網

Read more

Gaze Guard 短影片旁白的 TTS 成本與隱私防護示意圖

短影片旁白的成本,其實比我想像低

我最近在做一支 Gaze Guard 的 20 秒產品介紹影片。 原本想說簡單做個動畫就好。 後來想說如果有配音,會感覺比較生動也比較能夠描述使用的情境和達成的效果。 這次我測了什麼 我測的是產品介紹影片用的英文旁白。 工具底層使用的是 Edge TTS,也就是 Microsoft Edge 的線上 Text-to-Speech 服務。常見的底層工具是 edge-tts。 這不是正式 Azure Speech API 的計費路徑。 在我這次的環境裡,它沒有要求 API key,也沒有回傳可見的 per-use billing。 所以這次測試本身,比較像是快速 prototype。 如果未來要正式商用、穩定大量產出,就要回頭看 Azure Speech、OpenAI TTS、ElevenLabs 這類正式付費方案。

By SteepingLogic
用 Cloudflare Tunnel,從外面連回本機 Hermes Dashboard

用 Cloudflare Tunnel,從外面連回本機 Hermes Dashboard

# 用 Cloudflare Tunnel,從外面連回本機 Hermes Dashboard 我有一台 local Hermes。 平常它就在自己的機器上跑。 可能是家裡的桌機。 可能是 NAS。 可能是一台一直開著的 Linux box。 也可能只是我自己的筆電。 問題是,人一離開那個網路,Hermes dashboard 就變成一個只存在於 localhost 的東西。 我想在外面打開它。 但我沒有 static IP。 沒有買網域。 也不想進路由器開 port forwarding。 因為那條路通常長這樣: * 找 public IP * 設定 NAT * 開 port * 處理防火牆 * 補 HTTPS * 設定憑證 * 再擔心 origin IP 被掃 非常友善。 所以這篇先走另一條路:

By SteepingLogic
Invoshot 開發日記|正向回饋

Invoshot 開發日記|正向回饋

想信很多人在開發的時候都常常會做一件事,那就是: 不斷地反覆思考,在腦袋內把流程跑過很多次,然後思考哪裡可以做得更好 不限坐在電腦前的時後,可能是在捷運上,在人行道上, 在馬桶上或是在洗澡的時候 🤪 我不斷地在想:AI 辨識完一張發票後,使用者接下來最需要的是什麼? 每個欄位都要核對嗎? 這麼多欄位真的不會漏看嗎? 所以我在 Invoshot 裡加了提醒功能。 辨識結果出來後,系統會把比較需要注意的地方標出來。 不是把所有不確定都丟給使用者,而是把他真正需要介入的那幾秒鐘留出來。 今天收到一則訊息: 今天用了有新增提醒功能很棒! 真的有變輕鬆 😎 看到這句的時候,我第一個想到的是: 原來那些只是我腦內風暴的優化項目,使用者是真的可以感受到差異的! 感覺又有動力了!

By SteepingLogic