使用Docker建立Node容器+MySQL容器的範本

前言 距離上一篇文章使用Docker建立Nodejs開發環境範本 已經有1年啦! 那時竟然還擔心部落格太多文章,Github page是否會被限制 Node.js (Express.js + MySQL Server) 建置流程(快速克隆 -> 趕時間) 直接使用git clone語法下載範例 $ git clone https://github.com/kabuto412rock/node-demo.git --branch express-mysql --single-branch 啟動服務、關閉服務 # 進到目錄底層 $ cd node-demo # 啟動Docker服務 (node-demo) $ docker-compose up -d # 停止Docker服務 (node-demo) $ docker-compose down 相對上篇文章的差異 使用sequelize-cli進行Sequelize的設定,畢竟手寫migration、seeds太累 docker-compose.yaml多加MySQL容器、Adminer容器 express-mysqldb: image: mysql:8.0 # WARNIGN:正式環境請不要直接使用原生密碼,這只是開發偷懶用 command: --default-authentication-plugin=mysql_native_password restart: always ports: - "3308:3306" environment: # root的密碼 MYSQL_ROOT_PASSWORD: PyoA2hGpSDQordaDAbuiQIIDS # 預設建立的DB名稱 MYSQL_DATABASE: mydb # DB使用者的帳號 MYSQL_USER: dbuser # DB使用者的密碼 MYSQL_PASSWORD: youiIIDSA2hGpassword my-app資料夾可以注意到config/config.json的host值與MySQL容器名稱相同,這是因為容器的hostname預設與名稱相同,其他password等設定可以參考上面對照 { "development": { "username": "dbuser", "password": "youiIIDSA2hGpassword", "database": "mydb", "host": "express-mysqldb", "dialect": "mysql" }, // 略... } 結語 還好當初有在blog的repo設定好Github Aciton和寫README備忘,才可以像現在簡單git push一下就能生成新文章。 ...

June 6, 2023 · 1 min · 宗嘉

如何解決動態載入(Dynamic Import)不支援智能提示

前言 因為同事目前使用動態載入資料夾內多個程式檔案時,最後由一個特定檔案輸出,但VSCode編輯引用特定檔案的程式碼時,無法看到相對應的智能提示、引用路徑 我手上的NodeJS專案也有類似的例子,比如說多個Model檔定義在一個models資料夾, 最後統一由models/index.js做查詢檔案動態載入所有Model檔案,最後使用任一Model時只需要引用index.js 好處 只要在models新增一個新Model檔,不用特別修改index.js 需要任一Model時只需要引用index.js 壞處 失去了開發時可以享受靜態引用的VSCode提示(AutoComplete、Intellisense) 所以問題是如何保持好處且消除壞處 思考路境 動態載入不會被VSCode支援提示是因為Intellisense只支援靜態分析, 若改為添加靜態引用就失去原本的動態載入的方便。 除非添加靜態引用這件事本身是自動的… 解法 使用腳本生成靜態引用,如果行得通甚至可以使用類似nodemon去watch特定資料夾內的檔案變化,達到自動生成靜態引用的功能。 範例 https://github.com/kabuto412rock/gen-static-import

November 1, 2022 · 1 min · 宗嘉

[教學] 使用Docker建立Nodejs開發環境範本

大綱 前言 為什麼要用Docker部屬 Node.js (Express.js) 建置流程Ver 1(快速克隆 -> 趕時間) 建置流程Ver 2 (手動 -> 練習過程) node-demo/app/package.json node-demo/app/src/index.js node-demo/docker-compose.yaml 資料夾結構 docker-compose建置說明 version services app (實際上可以取你自己喜歡的名稱web-app之類的) 結語 前言 最近想紀錄一下可重複使用的程式碼片段,這樣之後找就從自己的部落格找會比較方便,尤其是最近常用Docker建立部屬環境。 想看docker-compose建置Express + MYSQL環境,請走這 為什麼要用Docker部屬 雖然網路上可以找到很多理由,但我的理由是: 使用git版本控制,設定檔本身就取代環境建置說明文件 不弄髒本地環境,想刪就刪 替換依賴容易,Ex: MySQL -> Postgresl Docker基本上語法不複雜設定起來也很容易,尤其在建立不熟悉的環境亂試也可以, 且因為Docker有cache layer的關係,所以修改重新跑docker-compose up 也很快就可以建立。 廢話不多說,開始部屬吧… Node.js (Express.js) 建置流程Ver 1(快速克隆 -> 趕時間) 直接使用git clone語法下載範例 $ git clone https://github.com/kabuto412rock/node-demo.git --branch express_template --single-branch 啟動服務、關閉服務 # 進到目錄底層 $ cd node-demo # 啟動Docker服務 (node-demo) $ docker-compose up -d # 停止Docker服務 (node-demo) $ docker-compose down 檢查實際結果 http://localhost/ 建置流程Ver 2 (手動 -> 練習過程) 建立相關的檔案&安裝Express(主要是為了產生package.json) $ mkdir -p node-demo/app/src $ cd node-demo $ touch app/package.json && touch app/src/index.js && touch docker-compose.yaml 複製以下程式碼貼到對應的檔案 node-demo/app/package.json { "name": "node-demo", "version": "1.0.0", "main": "index.js", "scripts": { "start": "nodemon src/index.js" }, "license": "MIT", "dependencies": { "express": "^4.17.3" }, "devDependencies": { "nodemon": "^2.0.15" } } node-demo/app/src/index.js const express = require("express"); const port = 8000; const app = express(); app.get("/", (req, res) => { res.status(200).json({ message: "Hello", }); }); app.listen(port); node-demo/docker-compose.yaml version: '3.1' services: app: image: node:16-alpine command: sh -c "yarn install && yarn run start" ports: - 80:8000 working_dir: /app volumes: - './app/src:/app/src' - './app/package.json:/app/package.json' - './app/yarn.lock:/app/yarn.lock' 啟動服務、關閉服務 # 進到目錄底層 $ cd node-demo # 啟動Docker服務 (node-demo) $ docker-compose up -d # 停止Docker服務 (node-demo) $ docker-compose down 檢查實際結果 http://localhost/ 資料夾結構 ├── app │ ├── package.json │ ├── src │ │ └── index.js │ └── yarn.lock └── docker-compose.yaml docker-compose建置說明 說明一下docker-compose.yaml內的細節,因為這些設定的屬性都是docker-compose up時參考的定義,一定要了解一下。 ...

April 3, 2022 · 2 min · 宗嘉