React 本地開發設置 https

最近為了新增「讀取條碼」&「拍照功能」需要開啟攝影機時、才發現 Chrome 已無法直接啟用;需要 https 才可開啟權限。

好吧!逃避很久的坑總是要補上的。

首先安裝 Mkcert :

brew install mkcert 

接下來要創建證書到自己的專案中:

mkcert -install

然後生成證書:

mkcert localhost 127.0.0.1

它會產出 2 個憑證檔案:

因為我現在改用 Vite 建立專案了、所以要到 vite.config.js 去修改內容。另外也因為我後端 API 還沒升級到 https 、所以我採用了代理的方式(又留一個坑以後踩)、完整修改如下:

import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import fs from "fs";
import path from "path";

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [react()],
  server: {
      host: true, // 啟用 IP 訪問
      port: 3000, // 指定 port
    https: {
      key: fs.readFileSync(path.resolve(__dirname, "localhost+2-key.pem")),
      cert: fs.readFileSync(path.resolve(__dirname, "localhost+2.pem")),
    },
    proxy: {
      "/api": {
        // Connect to Server - commURL
        target: "http://127.0.0.1:9090"; // Localhost
        changeOrigin: true,
        secure: false,
        rewrite: (path) => path.replace(/^\/api/, ""),
      },
    },
  },
});

這樣就可以在本地端開啟攝影機了。

DNS Resolution Problem at start on Apple M2

最近把 Spring Boot 升級到 3.2.1 後、莫名的遇到了以下的警告:

Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library

經查:應該是因為在使用M晶片的 macOS 上缺了系統需要的 Library。

在 pom.xml 加入以下依賴即可解決:

<!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
        </dependency>

Some Git Notes

列出已配置的倉庫:

git remote

列出已配置的倉庫、並顯示URL

git remote -v

新增一個倉庫並指令名稱和URL

git remote add <remote_name> <remote_url>
範例:git remote add gitlab http://127.0.0.1:8088/tythac/webyserp.git

刪除指定倉庫

git remote remove <remote_name>

初始化倉庫

git Init

上傳並合併(–force)

git push --force <遠機主機名> <本地分支名>
範例:git push gitlab

情境:在原本的專案中已和 GitHub 連結資料、目前另建一個私人 Gitlab 時上傳的方式(手動)

git add 檔案
範例:git add testupdategitlab.js、或是上傳所有更新 git add . 
git commit -m "備註"
範例:git commit -m "testupload"
git push 倉庫名 分支名
範例:git push gitlab master

HOW TO INSTALL GITLAB IN A DOCKER CONTAINER

在 M2 環境中:

先找到這個 ARM 架構的 GitLab : yrzr/gitlab-ce-arm64v8

將 image PULL 下來:

docker pull yrzr/gitlab-ce-arm64v8

啟動有 2 種方法、下指令 或者 用圖形介面:

指令方式:我目前輸入時會有錯誤、需再檢驗。

docker run 
-d                  #後台運行
-p 8443:443     #容器內部 port 向外映射
-p 8088:80      #80 映射到 8088 、這是訪問 gitlab 的 port
-p 8022:22      #22 映射到 8022 、這是訪問 ssh 的 port
--restart always    #自動重啟
--name Gitlab       #設置名稱為 Gitlab
--privileged=true   #獲得 root 權限
yrzr/gitlab-ce-arm64v8      # image 的名稱、也可寫 ID 即可

Dashboard 方式:

其實就是把指令用圖形介面設定:只需設主要截圖這些部份、其他可以不設。

使用 http://ip:8088 (http://127.0.0.1:8088)、若是出現以下畫面即代表啟動成功。

但這時候還要先去取得 root 的預設密碼、在命令字元輸入以下指令:密碼很複雜、不用懷疑、登入後再改即可。

docker exec -it Gitlab grep 'Password:' /etc/gitlab/initial_root_password

完成:

[Docker]The requested image’s platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested

在新的 M2 pro 上依循著之前的方法製作了 Docker Containter ,卻在 Synology NAS 上的 Docker 上要復原時發生了以下的錯誤訊息:

The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested.

經查詢後得知:在 M1/M2 中 build 出來的 Containter 是只能在它自己的環境中(linux/arm64/v8)執行;所以當導到其他的架構時、因為 amd64v8 和原本的 amd64 for x86 指令集不同時就會出現錯誤;雖然 Dcoker 構建出來的容器是可以在大多數操作系統上運作的、但⋯⋯需要特別注意的是:Docker 容器的架構類型仍需和 Host 的操作系統相對應。例:Ubuntu 是 x86 的、那麼 Docker 也必需是 x86 的。

最簡單的解決方法即是在 MBP M2 中 build 的時候使用 buildx 並加入 –platform linux/amd64 即可、如下:

docker buildx build --platform=linux/amd64 -t testwebyserp .

[Update] How to install MSSQL Server on Mac M2 using Docker

近期將電腦升級為 Mac M2 ,之前文章中所使用 2019 & 2017 的版本因為 ARM 架構而無法再繼續使用;經搜尋找到 Using SQL Server on M1 based Mac with Docker 並實作成功、紀錄如下:

一、Docker 已支援 ARM 、故可以直接由官網下載安裝(我使用 brew 的方式)。

brew install --cask docker

二、在 hub.codkcer.com 中找到 Azure SQL Edge 的 docker image 、並將其 pull 下來。

docker pull mcr.microsoft.com/azure-sql-edge

http://idea0816.synology.me/wordpress/wp-content/uploads/2023/05/截圖-2023-05-03-上午9.09.43.png

三、運行(特別注意密碼需為強密碼才不會有問題)。
20250220:修正以下運行指令

docker run --cap-add SYS_PTRACE -e 'ACCEPT_EULA=1' -e 'MSSQL_SA_PASSWORD=Admin@123' -e 'MSSQL_PID=Developer' -e 'MSSQL_USER=SA' -p 1433:1433 --name azuresqledge -d mcr.microsoft.com/azure-sql-edge

http://idea0816.synology.me/wordpress/wp-content/uploads/2023/05/截圖-2023-05-03-上午9.16.52.png

四、如 HOW TO RESTORE SQL SERVER ON MAC USING DOCKER 提到的在 Azure Data Studio 連線資料庫。

http://idea0816.synology.me/wordpress/wp-content/uploads/2023/05/截圖-2023-05-03-上午9.20.53.png

Error Message:在新版的 Azure Data Studio 要 Restore 資料庫時可能會跳出「You must enable preview features in order to use restore」 的錯誤訊息。

http://idea0816.synology.me/wordpress/wp-content/uploads/2023/05/截圖-2023-05-03-上午10.26.02.png

要去 Setting 中將其打開、這樣在 Restore 時就不會出現錯誤了。

http://idea0816.synology.me/wordpress/wp-content/uploads/2023/05/截圖-2023-05-03-上午10.26.31.png

http://idea0816.synology.me/wordpress/wp-content/uploads/2023/05/截圖-2023-05-03-上午10.27.14.png

五、將備份資料庫拷貝進 Docker。

sudo docker cp database.bak Azuresqledge:/var/opt/mssql/backup

六、依之前方式 Restore Database 即可完成。

How to modify the file of Docker’s container

最近將寫好的 Spring Boot jar 放到 Docker 裡執行;結果⋯⋯發生了和 The server selected protocol version TLS10 is not accepted 一樣的問題。初期時還到處找到底是那裡出問題了導致無法連線到 SQL Server ;靈光一閃才想到這個解法。但⋯⋯同時就出現了:如何進到 Docker Container 中去修改檔案的問題囉!

先列出 Docker 目前有在執行的容器以便取得 Container ID。

docker ps 

進入容器。

docker exec -it 容器ID bash

一般來說、在 Container 中若沒有事先設定(在Dockerfile設定那篇文章裡已有加入新設定);是會沒有安裝我們等等要用來修改文件的「vim」,所以要再多加以下步驟去安裝。

# 先升級內部套件
apt-get update
# 安裝 vim 
apt-get install vim

找某一個檔案的方法(這裡以 java.security 為例)。

find / -name java.security

進入檔案目錄、並開啟檔案修改。

# 進入目錄
cd /opt/java/openjdk/conf/security
# 修改檔案
vim java.security

依照 The server selected protocol version TLS10 is not accepted 修改後、重啟 Docker Container 。

docker restart 容器ID

Fix docker’s mirror SAVE to LOAD no repository and tag

我在 How to Run Spring Boot Application in a Docker Container 以及 How to Run ReactJs Application in a Docker Container 中沒有提到若是在本機 Docker 做好 image 後,如何將測試好的 image 轉到其他 Docker 上。其實還蠻簡單的幾個指令。

docker save Image ID > 檔名

docker load < 檔名

但是這樣會發生如同文章標題所提的:Respository &. Tag 都會沒有名稱、而沒有名稱當然也不知道如何去運行它(原因我沒詳究)。

在網路上找了許多方法;我覺得最簡單的方法就是在導出(Save)時、將原本的 Respository & Tag 加入如下:

docker save Image ID > 檔名 原REPOSITORY:原TAG

這樣在另一個 Docker 中導入時就不會有問題了。