繼上次的 AWS 註冊與 EB CLI 安裝以及中途跑去學 MySQL 後,總算要開始專案的部署了,廢話不多說,直接開始。
這次要部屬的是之前做過的短網址產生器,我已經在前一篇文章 "MySQL | 專案應用篇" 中把它的資料庫改為 MySQL。接下來所有的操作,請打開終端機,cd 移動到要部署的專案路徑之下。
初始化指的是 Elastic Beanstalk 項目的初始化,在這裡會需要選擇 AWS 區域、應用程式的平台、配置 AWS 金鑰...等,具體操作如下:
eb init
,接下來會出現一系列引導操作。這裡指在 Elastic Beanstalk 建立應用程式環境。
eb create
這裡就是把本地的程式碼打包丟到 Elastic Beanstalk 部署啦。
eb deploy
,然後等它跑完。現在來到 AWS 網站的 RDS 建立資料庫,這一步的步驟就用截圖記錄了,丟上來都是需要用戶選擇的部分,其他沒丟的選項通通默認基本上不會出錯。
接下來需要回到專案之中建立存放 Elastic Beanstalk 環境配置文件的資料夾以及配置環境的指令檔案。
option_settings:
aws:elasticbeanstalk:application:environment:
NODE_ENV: production
container_commands:
01_schema_migrate:
command: "./node_modules/.bin/sequelize db:migrate"
leader_only: true
// 如果你的專案需要建立種子資料可以加下面這一段
02_seeder_migrate:
command: "./node_modules/.bin/sequelize db:seed:all"
leader_only: true
"dbmigrate": "npx sequelize db:migrate && npx sequelize db:seed:all"
這一步做完會長像下圖這樣:
"production": {
"use_env_variable": "PROD_DATABASE_URL",
"operatorsAliases": false
}
NODE_ENV = production
PROD_DATABASE_URL = mysql://admin:password@RDS資料庫連結/prod
添加和修改了一堆雜七雜八的東西,接下來就是把改過的程式碼重新部署上 AWS。
// 請視你的 node 版本更改
"engines": { "node": "^18.17.1" }
git add
和 git commit
。這裡記錄幾個我在佈署時遇到的問題。
navigator.clipboard
會因此被瀏覽器禁用。function copyText() {
const content = document.getElementById('shorter-url');
if (navigator.clipboard && window.isSecureContext) {
navigator.clipboard.writeText(content.innerText)
.then(() => alert('Copied!'))
.catch(err => console.error(err));
} else {
let textArea = document.createElement("textarea");
textArea.value = content.innerText;
textArea.style.position = "absolute";
textArea.style.opacity = 0;
textArea.style.left = "-999999px";
textArea.style.top = "-999999px";
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
document.execCommand('copy') ? alert('Copied!') : console.error('Copy failed');
textArea.remove();
}
}