Docker + node(koa) + nginx + mysql 線上環境部署


在上一篇 Docker + node(koa) + nginx + mysql 開發環境搭建,我們進行了本地開發環境搭建

現在我們就來開始線上環境部署

如果本地環境搭建沒有什么問題,那么線上部署的配置也就很簡單了

我所使用的環境,Linux Mint,命令有不同可以適當更改

目錄結構

- compose   新建,線上環境配置
- data      
- conf      
- node_modules
- static        
- docker-compose.yml
- docker-compose-prod.yml   新建,線上環境配置
- package.json
- server.js
- yarn.lock

線上服務配置

我們現在需要3個服務:

  • Node
  • Nginx
  • Mysql

在根目錄下compose文件夾內,創建對應的Dockerfile配置文件,mysql是使用的鏡像文件,就不用創建Dockerfile

compose/node/Dockerfile
compose/nginx/Dockerfile

1.Node服務配置

compose/node/Dockerfile

FROM node:12-alpine     # 使用的基礎鏡像文件
WORKDIR /code           # 工作目錄的路徑
COPY ./package.json ./server.js /code/  # 拷貝文件到/code
COPY ./static /code/static              # 拷貝文件到/code/static
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
	&& apk update && apk add yarn \
	&& yarn config set registry https://registry.npm.taobao.org/ \
	&& yarn             # 這一竄命令,設置鏡像源到國內(加速),更新,安裝yarn,yarn設置國內鏡像源,yarn安裝node依賴
CMD ["npm", "start"]    # 容器啟動時運行
  • FROM指定基礎鏡像文件
  • WORKDIR工作目錄的路徑
  • COPY拷貝本地文件到容器內
  • RUN在 docker build 時運行命令
  • CMD在 docker run 時運行命令

關於Dockerfile更詳細的介紹可以查看 這里

2.Nginx服務配置

compose/nginx/Dockerfile

這個配置文件很簡單,我們只需要把本地的nginx conf文件拷貝到容器里,刪除默認配置

FROM nginx:1.17
RUN rm /etc/nginx/conf.d/default.conf
COPY ./conf/default.conf /etc/nginx/conf.d/default.conf 

nginx conf域名設置

線上部署是需要一個域名的,我們現在假設一個域名測試:

conf/default.conf

server {
    listen       80;
    server_name  localhost yoursite.com;    # 這里添加你們的域名
    ...
}

我們在本地修改/etc/hosts,就可以測試了

127.0.1.1       yoursite.com

3.compose

和本地環境配置一樣,要管理多個服務,我們需要compose文件來管理

在之前我們已經說明了,mysql是直接使用鏡像,沒有額外的修改,就不需要Dockerfile了

docker-compose-prod.yml根目錄新建配置文件

version: "3"

volumes:
        static:         # 數據卷名稱
        db:             # 數據卷名稱

services:
        web:
                build:                                          # 構建鏡像
                        context: ./                             # 上下文環境
                        dockerfile: ./compose/node/Dockerfile   # Dockerfile路徑
                ports:
                        - "3000:3000"
                volumes:
                        - static:/code/static       # 使用前面聲明的static掛在容器/code/static
                restart: always                     # 總是重啟
        nginx:
                build:
                        context: ./
                        dockerfile: ./compose/nginx/Dockerfile
                ports:
                        - "80:80"
                volumes:
                        - static:/code/static
                restart: always
        mysql:
                image: mysql:5.6        # 直接使用鏡像構建
                env_file: .env          # 環境變量env,我們寫入到了配置文件里,避免密碼泄漏
                volumes:    
                        - db:/var/lib/mysql
                ports:
                        - "3306:3306"
                restart: always

和之前的配置基本一樣,不過有一些小的改動

volumes數據卷,我們設置了2個數據卷,static和db,下面就可以直接使用,它會自動創建並掛在到系統制定的目錄/var/lib/docker/volumes/xxxx_static

  • build我們之前是使用的image鏡像構建,同樣build也可以,因為我們在Dockerfile里面已經聲明了鏡像了
    • context指定上下文運行環境到根目錄,我們build時需要一個上下文環境
    • dockerfile指定當前服務的Dockerfile配置

restart總是重啟

測試服務

配置已經寫好,我們來測試服務是否正常

sudo docker-compose -f docker-compose-prod.yml build
sudo docker-compose -f docker-compose-prod.yml up

服務運行起來,如果你能通過yoursite.com訪問的話,說明配置成功

正式上線

我們只需要把源代碼copy到服務器上然后運行上面兩條命令即可

至於如何上傳到服務器,FTP,GIT等...都可以

總結

在服務器已經安裝好docker的情況下,和我們本地跑服務沒有任何區別,各種順滑,無障礙

從此以后就不再糾結線上線下環境不一致的問題了

珍愛生命,LOVE & PEACE

附錄

服務器上安裝Docker

服務器上也需要安裝Docker,docker-compose,具體安裝步驟有詳細的官方文檔:

Dockerfile

github


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM