Tars docker簡單部署

Docker 部署服務開發環境

2.1 創建 docker 虛擬網絡

爲了方便虛擬機、Mac、Linux 主機等各種環境下的 docker 部署,在本示例中先創建虛擬網絡,模擬現實中的局域網內網環境(注意docker都還是在同一臺機器, 只是docker的虛擬ip不同, 模擬多機)

# 創建一個名爲tars的橋接(bridge)虛擬網絡,網關172.25.0.1,網段爲172.25.0.0
docker network create -d bridge --subnet=172.25.0.0/16 --gateway=172.25.0.1 tars

2.2 啓動 MySQL

  • 爲框架運行提供 MySQL 服務,若使用宿主機或現有的 MySQL 可以跳過此步驟,建議框架和應用使用不同的 MySQL 服務。
  • 注意 MySQL 的 IP 和 root 密碼,後續構建中需要使用
docker run -d -p 3306:3306 \
    --net=tars \
    -e MYSQL_ROOT_PASSWORD="123456" \
    --ip="172.25.0.2" \
    -v /data/framework-mysql:/var/lib/mysql \
    -v /etc/localtime:/etc/localtime \
    --name=tars-mysql \
    mysql:5.6

2.3 使用 tarscloud/framework 部署框架

  1. 拉取鏡像

最新版本

docker pull tarscloud/framework:latest

指定版本:

docker pull tarscloud/framework:v{x.y.z}

使用指定版本,如:v2.4.0,便於開發和生產環境的部署,後期需要升級時可選擇更新的版本tag,升級之前請先查看GitHub的changelog,避免升級到不兼容的版本造成損失。

  1. 啓動鏡像(目前只考慮了 linux 上, 時間和本機同步)
# 掛載的/etc/localtime是用來設置容器時區的,若沒有可以去掉
# 3000端口爲web程序端口
# 3001端口爲web授權相關服務端口(docker>=v2.4.7可以不暴露該端口)
docker run -d \
    --name=tars-framework \
    --net=tars \
    -e MYSQL_HOST="172.25.0.2" \
    -e MYSQL_ROOT_PASSWORD="123456" \
    -e MYSQL_USER=root \
    -e MYSQL_PORT=3306 \
    -e REBUILD=false \
    -e INET=eth0 \
    -e SLAVE=false \
    --ip="172.25.0.3" \
    -v /data/framework:/data/tars \
    -v /etc/localtime:/etc/localtime \
    -p 3000:3000 \
    -p 3001:3001 \
    tarscloud/framework:v2.4.0

安裝完畢後, 訪問 http://${your_machine_ip}:3000 打開 web 管理平臺

  1. 目錄說明

創建時, 會將 docker 的目錄/data/tars 映射到宿主機目錄/data/framework, 啓動 docker 後, 請檢查宿主機目錄: /data/tars, 正常情況下會有創建以下幾個目錄:

  • app_log: tars 服務的日誌目錄
  • tarsnode-data: tarsnode/data 目錄(存放發佈到 docker 的業務服務), 保證 docker 重啓, 數據不丟失
  • web_log: web 中 tars-node-web 模塊的日誌(主機纔有)
  • demo_log: web 中 tars-user-system 模塊的日誌(主機纔有), (docker>=v2.4.7這個目錄下無內容了)
  • patchs: 上傳的發佈包(主機纔有)

如果這幾個目錄沒有創建, 你可以手工創建, 再重啓 docker.

  1. 參數解釋

MYSQL_IP: mysql 數據庫的 ip 地址

MYSQL_ROOT_PASSWORD: mysql 數據庫的 root 密碼

INET: 網卡的名稱(ifconfig 可以看到, 比如 eth0), 表示框架綁定本機 IP, 注意不能是 127.0.0.1

REBUILD: 是否重建數據庫,通常爲 false, 如果中間裝出錯, 希望重置數據庫, 可以設置爲 true

SLAVE: 是否是從節點, 可以部署多臺機器, 通常一主多從即可.

MYSQL_USER: mysql 用戶, 默認是 root

MYSQL_PORT: mysql 端口

  1. 啓動框架從節點

如果希望多節點部署, 則在不同機器上執行 docker run …即可, 注意參數設置!

docker run -d \
    --name=tars-framework-slave \
    --net=tars \
    -e MYSQL_HOST="172.25.0.2" \
    -e MYSQL_ROOT_PASSWORD="123456" \
    -e MYSQL_USER=root \
    -e MYSQL_PORT=3306 \
    -e REBUILD=false \
    -e INET=eth0 \
    -e SLAVE=true \
    --ip="172.25.0.4" \
    -v /data/framework-slave:/data/tars \
    -v /etc/localtime:/etc/localtime \
    docker.tarsyun.com/tarscloud/framework:v2.4.0

注意:SLAVE 參數不同

2.4 Docker 部署 Tars 應用節點

Tars 應用節點鏡像默認爲集合環境(Java+GoLang+NodeJs+PHP)的鏡像,如果需要可登陸 Docker Hub 查看各語言相關 tag

  1. 拉取鏡像

最新版本:

docker pull tarscloud/tars-node:latest
  1. 啓動 Node(目前只考慮了 linux 上, 時間和本機同步)

最新版本:

docker run -d \
    --name=tars-node \
    --net=tars \
    -e INET=eth0 \
    -e WEB_HOST="http://172.25.0.3:3000" \
    --ip="172.25.0.5" \
    -v /data/node:/data/app \
    -v /etc/localtime:/etc/localtime \
    -p 9000-9010:9000-9010 \
    tarscloud/tars-node:latest
  • 初始開放了 9000~9010 端口供應用使用,若不夠可自行添加
  • Node 啓動之後會自動向框架 172.25.0.3 進行註冊,部署完成之後在框架的 運維管理-》節點管理 中可以看到 IP 爲 172.25.0.5 的節點啓動

注意, 如果在同一臺機器上採用–net=host, 同時啓動framework和tars-node鏡像, 是不行的, 因爲framework中也包含了一個tars-node, 會導致端口衝突, 啓動不了

Docker 部署服務生產環境

概要說明:

  • tarscloud/framework:v{x.y.y} 部署一主, 多從
  • tarscloud/framework:v{x.y.y} 以–net=host的方式啓動, 即和宿主機相同網絡
  • 節點應用服務器使用 tarscloud/tars-node:latest, 也以–net=host方式啓動
  • tarscloud/tars-node 有多個不同的標籤如下:
    • tarscloud/tars-node:stable, tarscloud/tars-node:latest, tarscloud/tars-node:full, 全環境, 即jdk, php, nodejs的運行時環境都已經安裝
    • tarscloud/tars-node:cpp, 跑cpp/go服務
    • tarscloud/tars-node:java, 安裝了jdk
    • tarscloud/tars-node:nodejs, 安裝了nodejs
    • tarscloud/tars-node:php, 安裝了php

如果想自己構建鏡像, 請參考: https://github.com/TarsCloud/TarsDocker

3.1 Docker 部署 Tars 框架服務

# 掛載的/etc/localtime是用來設置容器時區的,若沒有可以去掉
# --net=host 代表docker使用宿主機網絡
# INET=eth0 eth0爲網卡名稱,tars腳本會根據網卡名稱獲取IP並將服務綁定到獲取到的IP上
docker run -d \
    --name=tars-framework \
    --net=host \
    -e MYSQL_HOST="Host IP For MySQL Service" \
    -e MYSQL_ROOT_PASSWORD="Your Root Password" \
    -e MYSQL_USER=root \
    -e MYSQL_PORT=3306 \
    -e REBUILD=false \
    -e SLAVE=false \
    -e INET=eth0 \
    -v /etc/localtime:/etc/localtime \
    -v /tmp/test/data:/data/tars \
    tarscloud/framework:v2.4.0

3.2 Docker 部署 Tars 應用節點

# 掛載的/etc/localtime是用來設置容器時區的,若沒有可以去掉
# --net=host 代表docker使用宿主機網絡
# INET=eth0 eth0爲網卡名稱,tars腳本會根據網卡名稱獲取IP並將服務綁定到獲取到的IP上
docker run -d \
    --name=tars-node \
    --net=host \
    -e INET=eth0 \
    -e WEB_HOST="The Accessible Http Address and Port Of Your Tars Framework" \
    -v /data/tars:/data/app \
    -v /etc/localtime:/etc/localtime \
    tarscloud/tars-node:latest

問題檢查

如果 docker 運行後, 仍然無法打開管理平臺, 可以如下檢查:

  • 關閉 docker, 注意需要用 docker stop …. 來關閉(docker 的使用請自行搜索)
  • 啓動鏡像, 注意不要 -d 參數
docker --name=tars-framework \
    --net=tars \
    -e MYSQL_HOST="172.25.0.2" \
    -e MYSQL_ROOT_PASSWORD="123456" \
    -e MYSQL_USER=root \
    -e MYSQL_PORT=3306 \
    -e REBUILD=false \
    -e INET=eth0 \
    -e SLAVE=false \
    --ip="172.25.0.3" \
    -v /data/framework:/data/tars \
    -v /etc/localtime:/etc/localtime \
    -p 3000:3000 \
    -p 3001:3001 \
    tarscloud/framework:v2.4.0
  • 查看 docker 輸出是否有明顯問題
  • node 的問題檢查與框架一致

如果 web 平臺打開, 但是顯示錯誤, 就需要檢查 web 的問題, 可以進入 docker, 請參考檢查 web 的問題中的檢查 web 問題

鏡像加速

  • 目前已搭建了 docker.tarsyun.com/tarscloud/framework 和 docker.tarsyun.com/tarscloud/tars-node 的鏡像加速

此方法僅適用於 linux 環境

curl -sSL https://doc.tarsdoc.com/docker_set_mirror.sh | sh -s https://w1mnep2c.mirror.aliyuncs.com
systemctl restart docker

開發環境 docker-compose

  • 下面是使用 docker-compose 直接拉起開發環境的示例,僅供學習參考
  • ./source/Shanghai 是 linux 時區設置文件,需要自行獲取
version: "3"

services:
  mysql:
    image: mysql:5.6
    container_name: tars-mysql
    ports:
      - "3307:3306"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
    volumes:
      - ./mysql/data:/var/lib/mysql:rw
      - ./source/Shanghai:/etc/localtime
    networks:
      internal:
        ipv4_address: 172.25.1.2
  framework:
    image: tarscloud/framework:v2.4.0
    container_name: tars-framework
    ports:
      - "3000:3000"
      - "3001:3001"
    restart: always
    networks:
      internal:
        ipv4_address: 172.25.1.3
    environment:
      MYSQL_HOST: "172.25.1.2"
      MYSQL_ROOT_PASSWORD: "123456"
      MYSQL_USER: "root"
      MYSQL_PORT: 3306
      REBUILD: "false"
      INET: eth0
      SLAVE: "false"
    volumes:
      - ./framework/data:/data/tars:rw
      - ./source/Shanghai:/etc/localtime
    depends_on:
      - mysql
  node:
    image: tarscloud/tars-node:latest
    container_name: tars-node
    restart: always
    networks:
      internal:
        ipv4_address: 172.25.1.5
    volumes:
      - ./node/data:/data/app:rw
      - ./source/Shanghai:/etc/localtime
    environment:
      INET: eth0
      WEB_HOST: http://172.25.1.3:3000
    ports:
      - "9000-9010:9000-9010"
    depends_on:
      - framework
networks:
  internal:
    driver: bridge
    ipam:
      config:
        - subnet: 172.25.1.0/16

docker版本說明

說明:

  • docker內部主要包含了: https://github.com/TarsCloud/TarsFramework 和 https://github.com/TarsCloud/TarsWeb 的服務.
  • TarsFramework 和 TarsWeb都作爲submodule掛在了 https://github.com/TarsCloud/Tars 下面.
  • 因此爲了更好的管理docker版本, docker的版本標籤對應: https://github.com/TarsCloud/Tars 的Tag
  • https://github.com/TarsCloud/Tars 打tag時會自動編譯並推送docker到docker hub上

以上執行方式, 從tarscloud/framework:v2.4.0以後才執行

 

轉載-----------------------------------------------------------------------------------------------------------------------------------------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章