docker/云托管/serverless部署Node項(xiàng)目總結(jié)

一、云服務(wù)器docker-compose部署

安裝docker環(huán)境

安裝工具包

yum install yum-utils device-mapper-persistent-data lvm2 -y

設(shè)置阿里鏡像源

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安裝docker

yum install docker-ce docker-ce-cli containerd.io -y

啟動(dòng)docker

systemctl start docker

# 設(shè)為開機(jī)啟動(dòng)
systemctl enable docker

設(shè)置docker鏡像源

vi /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://register.docker-cn.com/"
  ],
}

后續(xù)拉取鏡像直接從 https://hub.docker.com 網(wǎng)站拉取速度更快

重啟docker

systemctl restart docker

安裝mysql鏡像測(cè)試

docker pull daocloud.io/library/mysql:8.0.20

運(yùn)行mysql鏡像

docker run -d -p 3307:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456(設(shè)置登錄密碼) be0dbf01a0f3(鏡像ID)

進(jìn)入mysql容器內(nèi)部

至此mysql鏡像搭建成功,下面我們使用docker-compose來管理docker容器,不在單獨(dú)一個(gè)個(gè)安裝MySQL、redis、nginx

安裝docker-compose

# 使用國內(nèi)源安裝
curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

設(shè)置docker-compose執(zhí)行權(quán)限

chmod +x /usr/local/bin/docker-compose

創(chuàng)建軟鏈

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

測(cè)試是否安裝成功:

$ docker-compose --version

docker-compose version 1.22.0, build f46880fe

編寫docker-compose

version: "3.0"

services: 
    # docker容器啟動(dòng)的redis默認(rèn)是沒有redis.conf的配置文件,所以用docker啟動(dòng)redis之前挺邀,需要先去官網(wǎng)下載redis.conf的配置文件
    redis: # 服務(wù)名稱
        container_name: redis # 容器名稱
        image: daocloud.io/library/redis:6.0.3-alpine3.11 # 使用官方鏡像
        # 配置redis.conf方式啟動(dòng)
        command: redis-server /usr/local/etc/redis/redis.conf --requirepass 123456 --appendonly yes # 設(shè)置redis登錄密碼 123456、--appendonly yes:這個(gè)命令是用于開啟redis數(shù)據(jù)持久化
        # 無需配置文件方式啟動(dòng)
        # command: redis-server --requirepass 123456 --appendonly yes # 設(shè)置redis登錄密碼 123456
        ports:
            - 6380:6379 # 本機(jī)端口:容器端口
        restart: on-failure # 自動(dòng)重啟
        volumes:
            - ./deploy/redis/db:/data # 把持久化數(shù)據(jù)掛載到宿主機(jī)
            - ./deploy/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf  # 把redis的配置文件掛載到宿主機(jī)
            - ./deploy/redis/logs:/logs # 用來存放日志
        environment:
            - TZ=Asia/Shanghai  # 解決容器 時(shí)區(qū)的問題
        networks:
            - my-server

    mysql:
        container_name: mysql
        image: daocloud.io/library/mysql:8.0.20 # 使用官方鏡像
        ports: 
            - 3307:3306 # 本機(jī)端口:容器端口
        restart: on-failure
        environment: 
            - MYSQL_ROOT_PASSWORD=123456 # root用戶密碼
        volumes:
            - ./deploy/mysql/db:/var/lib/mysql # 用來存放了數(shù)據(jù)庫表文件
            - ./deploy/mysql/conf/my.cnf:/etc/my.cnf # 存放自定義的配置文件
            # 我們?cè)趩?dòng)MySQL容器時(shí)自動(dòng)創(chuàng)建我們需要的數(shù)據(jù)庫和表
            # mysql官方鏡像中提供了容器啟動(dòng)時(shí)自動(dòng)docker-entrypoint-initdb.d下的腳本的功能
            - ./deploy/mysql/init:/docker-entrypoint-initdb.d/ # 存放初始化的腳本
        networks: 
            - my-server

    server: # egg服務(wù)
        container_name: server
        build: # 根據(jù)Dockerfile構(gòu)建鏡像
            context: .
            dockerfile: Dockerfile
        ports: 
            - 9000:9000
        restart: on-failure # 設(shè)置自動(dòng)重啟跳座,這一步必須設(shè)置悠夯,主要是存在mysql還沒有啟動(dòng)完成就啟動(dòng)了node服務(wù)
        networks: 
            - my-server
        depends_on: # node服務(wù)依賴于mysql和redis
            - redis
            - mysql

# 聲明一下網(wǎng)橋  my-server。
# 重要:將所有服務(wù)都掛載在同一網(wǎng)橋即可通過容器名來互相通信了
# 如egg連接mysql和redis躺坟,可以通過容器名來互相通信
networks:
    my-server:

nestjs/Dockerfile

FROM daocloud.io/library/node:14.7.0

# 設(shè)置時(shí)區(qū)
ENV TZ=Asia/Shanghai \
    DEBIAN_FRONTEND=noninteractive
RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata && rm -rf /var/lib/apt/lists/*

# 創(chuàng)建工作目錄
RUN mkdir -p /app

# 指定工作目錄
WORKDIR /app

# 復(fù)制當(dāng)前代碼到/app工作目錄
COPY . ./

# npm 源沦补,選用國內(nèi)鏡像源以提高下載速度
# RUN npm config set registry https://registry.npm.taobao.org/

# npm 安裝依賴
RUN npm install 
# 打包
RUN npm run build

# 啟動(dòng)服務(wù)
# "start:prod": "cross-env NODE_ENV=production node ./dist/src/main.js",
CMD npm run start:prod

EXPOSE 9000

修改代碼


開放云服務(wù)器端口

開放端口9000、6380咪橙、3307

啟動(dòng)項(xiàng)目

docker-compose -h 查看命令

  • docker-compose up 啟動(dòng)服務(wù)夕膀,控制臺(tái)可見日志
  • docker-compose up -d 后臺(tái)啟動(dòng)服務(wù)
  • docker-compose build --no-cache 重新構(gòu)建鏡像不使用緩存(最后docker-compose up -d啟動(dòng))
  • 停止服務(wù) docker-compose down
  • 下載鏡像過程 docker-compose pull
  • 重啟服務(wù) docker-compose restart

后臺(tái)啟動(dòng)服務(wù) docker-compose up -d


測(cè)試



二、微信云托管部署

云托管流水線部署更方便

redis服務(wù)

這里我們上面部署使用的自建服務(wù)器上docker搭建的redis服務(wù)作為演示

mysql服務(wù)

這里我們上面部署使用的自建服務(wù)器上docker搭建的mysql服務(wù)作為演示

修改代碼


然后上傳代碼到github美侦,通過云托管流水線構(gòu)建

新建服務(wù)

點(diǎn)擊發(fā)布后产舞,云托管會(huì)執(zhí)行Dockerfile構(gòu)建流水線,到日志可以查看構(gòu)建進(jìn)度


微信云托管部署成功后菠剩,可以在實(shí)例列表易猫,點(diǎn)擊進(jìn)入容器看到代碼,這里里面的內(nèi)容不能修改具壮,在容器啟動(dòng)后會(huì)覆蓋


調(diào)試接口


測(cè)試redis


三准颓、騰訊云serverless部署

需要注意,云函數(shù)的代碼包不能超過500M

模板部署 -- 部署 Nest.js 示例代碼

  1. 登錄 Serverless 應(yīng)用控制臺(tái)棺妓。
  2. 單擊新建應(yīng)用攘已,選擇Web 應(yīng)用>Nest.js 框架,如下圖所示:
  1. 單擊“下一步”怜跑,完成基礎(chǔ)配置選擇
  • 上傳方式样勃,選擇示例代碼直接部署,單擊完成,即可開始應(yīng)用的部署峡眶。
  • 部署完成后剧防,您可在應(yīng)用詳情頁面,查看示例應(yīng)用的基本信息辫樱,并通過 API 網(wǎng)關(guān)生成的訪問路徑 URL 進(jìn)行訪問诵姜,查看您部署的 Nest.js 項(xiàng)目

自定義部署nest

初始化您的 Nest.js 項(xiàng)目

npm i -g @nestjs/cli
nest new nest-app

在根目錄下,執(zhí)行以下命令在本地直接啟動(dòng)服務(wù)搏熄。

cd nest-app && npm run start

打開瀏覽器訪問 http://localhost:3000,即可在本地完成 Nest.js 示例項(xiàng)目的訪問暇赤。

部署上云

接下來執(zhí)行以下步驟心例,對(duì)已初始化的項(xiàng)目進(jìn)行簡單修改,使其可以通過 Web Function 快速部署鞋囊,此處項(xiàng)目改造通常分為以下兩步:

  • 新增 scf_bootstrap 啟動(dòng)文件止后。
  • 修改監(jiān)聽地址與端口為 0.0.0.0:9000
  1. 修改啟動(dòng)文件main.ts溜腐,監(jiān)聽端口改為9000:
  1. 在項(xiàng)目根目錄下新建 scf_bootstrap 啟動(dòng)文件译株,在該文件添加如下內(nèi)容(用于啟動(dòng)服務(wù)):

您也可以在控制臺(tái)完成該模塊配置。

# scf_bootstrap
#!/bin/bash

SERVERLESS=1 /var/lang/node12/bin/node ./dist/main.js

新建完成后挺益,還需執(zhí)行以下命令修改文件可執(zhí)行權(quán)限歉糜,默認(rèn)需要 777 或 755 權(quán)限才可正常啟動(dòng)。示例如下:

chmod 777 scf_bootstrap

本地配置完成后望众,執(zhí)行啟動(dòng)文件匪补,確保您的服務(wù)可以本地正常啟動(dòng),接下來烂翰,登錄 Serverless 應(yīng)用控制臺(tái)夯缺,選擇Web 應(yīng)用>Nest.js 框架,上傳方式可以選擇本地上傳或代碼倉庫拉取

注意:啟動(dòng)文件以項(xiàng)目內(nèi)文件為準(zhǔn)甘耿,如果您的項(xiàng)目里已經(jīng)包含 scf_bootstrap 文件踊兜,將不會(huì)覆蓋該內(nèi)容。

單個(gè)函數(shù)代碼體積 500mb 的上限佳恬。在實(shí)際操作中捏境,云函數(shù)雖然提供了 500mb

關(guān)于繞過配額問題:

如果超的不多,那么使用 npm install --production 就能解決問題

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末毁葱,一起剝皮案震驚了整個(gè)濱河市典蝌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌头谜,老刑警劉巖骏掀,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡截驮,警方通過查閱死者的電腦和手機(jī)笑陈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來葵袭,“玉大人涵妥,你說我怎么就攤上這事∑挛” “怎么了蓬网?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鹉勒。 經(jīng)常有香客問我帆锋,道長,這世上最難降的妖魔是什么禽额? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任锯厢,我火速辦了婚禮,結(jié)果婚禮上脯倒,老公的妹妹穿的比我還像新娘实辑。我一直安慰自己,他們只是感情好藻丢,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布剪撬。 她就那樣靜靜地躺著,像睡著了一般悠反。 火紅的嫁衣襯著肌膚如雪婿奔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天问慎,我揣著相機(jī)與錄音萍摊,去河邊找鬼。 笑死如叼,一個(gè)胖子當(dāng)著我的面吹牛冰木,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播笼恰,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼踊沸,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了社证?” 一聲冷哼從身側(cè)響起逼龟,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎追葡,沒想到半個(gè)月后腺律,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奕短,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年匀钧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了翎碑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡之斯,死狀恐怖日杈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情佑刷,我是刑警寧澤莉擒,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站瘫絮,受9級(jí)特大地震影響涨冀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜檀何,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望廷支。 院中可真熱鬧频鉴,春花似錦、人聲如沸恋拍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽施敢。三九已至周荐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間僵娃,已是汗流浹背概作。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留默怨,地道東北人讯榕。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像匙睹,于是被迫代替她去往敵國和親愚屁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容