# 使用 docker 鏡像部署 cmswing 教程:
### 部署綜述:
- [docker 部署相關 PR 記錄](https://github.com/arterli/CmsWing/pull/10/commits)
- 關于 docker 部署的相關提交, 作了詳細說明.
- 參考 PR 記錄, 應該能順利完成部署工作.
- 部署綜述:
1. 使用 docker 部署.
2. 項目依賴2個容器:
- 容器1: MySQL 數據庫
- 容器2: 項目源碼
3. 容器啟動順序:
- 先啟動 MySQL 數據庫容器
- 再啟動 cmswing server 容器
4. cmswing 源碼需要修改的地方:
- /CmsWing/src/common/config/db.js
- 數據庫的連接, 要改 `127.0.0.1` 為 `真實主機 IP`.
- docker 容器連接時, 需要使用真實 IP.
- /CmsWing/nginx.conf
- 請修改 server / root 根路徑為: `/web/cmswing/www;`
- 這是 docker 容器里的項目路徑.
5. 其他細節, 參考本文檔具體步驟.
- 核心啟動命令:
```
# 啟動 cmswing 依賴的 mysql 容器:
docker run --name cms-db -p 33060:3306 -v /iDockerShare/www/db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=your_password -d daocloud.io/library/mysql:5.7
# 啟動 cmswing server 容器:
docker run --name cms_server -v /iDockerShare/www:/web -p 6080:80 -d cmswing_base:0.4
# 查看啟動狀態:
docker ps
# 第一次啟動 cmswing server 容器, 大概有10s 左右延遲, 服務才可正常訪問.
# 服務生效前訪問, 出現 nginx 404錯誤.
```
- cmswing 鏡像, 已構建并發布到阿里云:
- [阿里云 docker 市場](https://dev.aliyun.com/list.html?namePrefix=cmswing)
- cmswing 鏡像拉取:
```bash
# 公網地址:registry.cn-hangzhou.aliyuncs.com/docker_open/cmswing
# 經典內網:registry-internal.cn-hangzhou.aliyuncs.com/docker_open/cmswing
# 公網拉取:
docker pull registry.cn-hangzhou.aliyuncs.com/docker_open/cmswing:0.4
# 阿里云內網拉取:
docker pull registry-internal.cn-hangzhou.aliyuncs.com/docker_open/cmswing:0.4
```
### 部署Linux主機新建目錄說明:
- 部署linux主機, 需創建目錄:
- /iDockerShare/www/cmswing
- /iDockerShare/www/db
- 目錄用于掛載到 docker 容器中, 供容器調用.
```
? tree /iDockerShare -L 3
/iDockerShare
├── www
│?? ├── cmswing // 項目源碼目錄, 注意小寫
│?? │?? ├── app
│?? │?? ├── cmswing.sql // 數據庫文件, 導入用.
│?? │?? ├── docker
│?? │?? ├── docker-compose.yml
│?? │?? ├── Dockerfile
│?? │?? ├── nginx.conf // 使用 docker 部署前, 要修改. 內有注釋提示.
│?? │?? ├── node_modules
│?? │?? ├── package.json
│?? │?? ├── pm2.json
│?? │?? ├── README.md
│?? │?? ├── runtime
│?? │?? ├── src // 使用 docker 部署前, 要改 db.js 關于 MySQL 的參數
│?? │?? ├── view
│?? │?? └── www
│?? ├── db // mysql 的共享目錄
│?? │?? ├── auto.cnf
│?? │?? ├── cmswing
│?? │?? ├── cmswing-jl.sql // 自己的 sql 文件, 導入數據
│?? │?? ├── ib_buffer_pool
│?? │?? ├── ibdata1
│?? │?? ├── ib_logfile0
│?? │?? ├── ib_logfile1
│?? │?? ├── ibtmp1
│?? │?? ├── mysql
│?? │?? ├── performance_schema
│?? │?? └── sys
```
## 0. Docker 簡介 & 安裝:
- [docker 官網](https://www.docker.com/)
- 針對對 docker 不熟悉的用戶, 熟悉者, 可跳過此部分.
- docker 是一種容器技術, 方便實踐 devops, 實現高效開發, 測試, 部署.
### 0.1 docker 參考文檔:
- 推薦主機環境:
- Linux 內核 3.11.0 以上版本
- Ubuntu Trusty 14.04 (LTS)
- 不建議使用 centos 主機.
- docker 安裝攻略:
- 國外用戶: 參考 docker 官方文檔安裝.
- [安裝文檔 - 官方](https://docs.docker.com/engine/installation/)
- [ubuntu 主機安裝 docker](https://docs.docker.com/engine/installation/linux/ubuntulinux/)
- [debian 主機安裝 docker](https://docs.docker.com/engine/installation/linux/debian/)
- [centos 主機安裝 docker](https://docs.docker.com/engine/installation/linux/centos/)
- 國內用戶: 使用 daocloud 提供的一鍵安裝腳本.
- [daocloud 加速器](https://get.daocloud.io/)
- 查看內核版本:
```
# 查看內核版本:
$ uname -r
3.11.0-15-generic
```
### 0.2 安裝步驟(Linux):
- 國內用戶, 執行如下命令一鍵安裝 docker:
```
curl -sSL https://get.daocloud.io/docker | sh
```
- 國外用戶, 請參考上述 docker 官方文檔.
## 1. MysQL 容器部署教程:
### 1.1 準備工作:
- 拉取鏡像:
```
docker pull daocloud.io/library/mysql:5.7
```
### 1.2 啟動鏡像:
```
# 后臺方式:
# - 端口映射: -p 33060:3306
# - 目錄掛載: -v /iDockerShare/www/db:/var/lib/mysql
# - 數據庫 root 密碼: -e MYSQL_ROOT_PASSWORD=your_password
# - 此密碼, 可自行設定
# - 此密碼, 要與 /CmsWing/src/common/config/db.js 里保持一致
# - 后臺運行: -d
docker run --name cms-db -p 33060:3306 -v /iDockerShare/www/db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=your_password -d daocloud.io/library/mysql:5.7
```
### 1.3 數據導入:
- 將項目/CmsWing/cmswing.sql 文件拷貝到 /iDockerShare/www/db 下.
- 然后終端方式進入容器里: 切換到 /var/lib/mysql 目錄, 可以找到 cmswing.sql 文件.
- 然后在容器中, 執行數據導入操作.
```
# 終端進入容器:
docker exec -it cms-db bash
############### 容器中 start ###############
# 后續操作, 都在容器中:
###########################################
# 容器中操作:
cd /var/lib/mysql
# 先創建數據庫:
mysql -u root -p
輸入數據庫密碼: (啟動容器設定的)
# 創建數據庫:
mysql > CREATE DATABASE cmswing;
# 查看數據庫:
mysql > show databases;
mysql > quit;
# 再次連接數據庫,并導入數據:
mysql -u root -p -D cmswing < /var/lib/mysql/cmswing.sql
輸入數據庫密碼: (啟動容器設定的)
############### 容器中 end ###############
# 退出容器:
exit
```
### 1.4 針對 cmswing 需要修改的地方:
- 主機 IP: 120.76.134.101
- 修改文件: /CmsWing/src/common/config/db.js
- 數據庫連接 host 要改為真實 IP.
```
'use strict';
/**
* db config
* @type {Object}
*/
export default {
type: 'mysql',
adapter: {
mysql: {
host: '120.76.134.101', // [docker 運行注意] 此處修改為真實主機 IP
port: '33060', // [docker 運行注意] 端口映射
database: 'cmswing',
user: 'root',
password: 'your_password', // [數據庫 root 密碼]
prefix: 'cmswing_',
encoding: 'UTF8MB4_GENERAL_CI'
},
mongo: {
}
}
};
```
- 待補充
## 2. Cmswing 容器部署教程:
- 特別注意:
> 如果已通過如下命令, 從 `阿里云` 拉取了 `cmswing:0.4` 鏡像.
> 可直接跳過如下步驟 `2.1` 和 `2.2`, 直接看步驟`2.3`.
> 寫此部分文檔時, 還未把 `cmswing:0.4` 發布到阿里云.
> 考慮有些人可能會對構建腳本作修改, 自己手動構建, 故保留此部分.
```
# 公網拉取:
docker pull registry.cn-hangzhou.aliyuncs.com/docker_open/cmswing:0.4
```
### 2.1 準備工作:
- 再次提醒: 如已從阿里云拉取 `cmswing:0.4` 鏡像, 可跳過此部分.
#### 2.1.1 初始化部署目錄:
- 執行腳本: docker/prepare.sh
#### 2.1.2 拉取基鏡像(依賴):
```
# docker 鏡像:
# 拉取:
docker pull daocloud.io/library/node:6.8.1
# 可不拉取:
docker pull daocloud.io/library/node:4.6.1
```
### 2.2 構建 Docker 鏡像:
- 執行腳本: /CmsWing/docker/base/build_docker_image.sh
- 查看鏡像構建成功:
```
-> % docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cmswing_base 0.4 087db98d77c3 8 minutes ago 765.3 MB
cmswing_base 0.1 9e559c325c5a 2 hours ago 765.3 MB
```
- 再次提醒: 如已從阿里云拉取 `cmswing:0.4` 鏡像, 可跳過此部分, 直接到 步驟`2.3`.
### 2.3 由 docker 鏡像, 啟動容器:
```
# 訪問端口映射 6080:80, 可以修改
docker run --name cms_server -v /iDockerShare/www:/web -p 6080:80 -d cmswing_base:0.4
```
### 2.4 查看容器啟動成功:
```
-> % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f350f021f06 cmswing_base:0.4 "sh /run.sh" 10 minutes ago Up 10 minutes 443/tcp, 3306/tcp, 8360/tcp, 33060/tcp, 0.0.0.0:6080->80/tcp cms-ng
```
### 2.5 網站訪問測試:
1. 初次啟動 cmswing 容器, 需等待約10s 后, 網站服務才可用. 否則,訪問出現 nginx 404錯誤.
2. 正常訪問: `0.0.0.0:6080` (替換為自有主機 IP, 注意端口是 6080.)
3. 啟動容器時的端口映射, 可以自行修改. 容器里的進程 和 宿主機, 是隔離開的, 互補影響.
### 2.6 容器調試方法:
```
# 交互模式運行容器:
docker run -it --name cms_server1 -v /iDockerShare/www:/web -p 6080:80 cmswing_base:0.3 bash
```
- CmsWing概覽
- CmsWing是什么
- CmsWing能干啥
- 運行&部署
- 1.windows 運行 cmswing
- 2.Linux 運行 cmswing
- 3.使用 docker 部署
- 4.部署方式推薦
- 5.Nginx反向代理 并做動靜分離
- 配置
- 快速上手
- 首頁
- 后臺使用說明
- 內容
- 內容管理
- 欄目管理
- 分類信息
- 回收站
- 網站模版
- 電商
- 營銷推廣
- 訂單中心
- 支付與配送
- 財務管理
- 系統
- 用戶管理
- 用戶信息
- 權限管理
- 用戶行為
- 行為日志
- 系統設置
- 網站設置
- 模型管理
- 配置管理
- 菜單管理
- 導航管理
- 數據庫備份
- 微信
- 公眾號設置
- 群發消息
- 素材管理
- 微信用戶管理
- 自動回復
- 自定義菜單
- 擴展
- 項目結構
- 目錄結構
- 模型設計
- 插件設計
- 用戶行為設計
- 權限設計
- 文檔模型設計
- 下載模型設計
- 圖片模型設計
- 視頻模型設計
- 商城模型設計
- 欄目設計
- 分類信息設計
- 模板規則
- 模版標簽入門
- 模塊類
- 模板語法規則
- 模版模型
- 模板調用方法
- 二次開發說明
- 命名規范與編碼規
- 數據庫字典
- 公共函數,Adapter,Middleware的使用規范
- 權限管理擴展說明
- 模型擴展開發說明
- 附錄
- 配置參考
- 函數庫參考
- Adapter參考
- Middleware參考
- FAQ
- Admin 管理
- 01.如何重置后臺admin 管理帳號密碼