使用 Docker 搭建开发环境
依照以下操作,你可使用Docker
在Mac
,Linux
上搭建PPMessage
开发环境。
前言:Docker 的作用 ?
Docker allows you to package an application with all of its dependencies into a standardized unit for software development. Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in.
简而言之,Docker
可以将PPMessage
运行时的所有依赖软件打包成为一个Docker
镜像。借助于此镜像,PPMessage
可以在任何支持Docker
的机器上运行,并且效果完全一样。
安装 Docker
首先仔细阅读Docker
的官方引导文档 docker getting started ,了解Docker
的基本概念和安装、使用方法。
当你安装完Docker
后,应该首先验证一下Docker
命令是否可用。
Mac
点击 启动面板(LaunchPad) 里的
Docker Quickstart Terminal
打开Terminal
。等待
Docker
启动完毕,输入命令docker info
。如果没有显示错误,说明Docker
命令可用。需要注意的是,在
Mac
下,必须通过Docker Quickstart Terminal
打开的Terminal
才可以使用Docker
命令。Linux
打开系统Terminal, 输入命令
docker info
。如果没有错误,则说明 Docker 命令可用。如果提示以下错误:
Cannot connect to the Docker daemon. Is ‘docker -d’ running on this host?
则先尝试重启 Docker 服务
sudo service docker restart
如果之后执行
docker info
还是出错的话,则将当前用户加入到docker group
中,执行sudo usermod -aG docker $USER
然后重新以当前用户登录系统,再打开系统
Terminal
,就应该可以使用Docker
命令了。
下载 PPMessage镜像
安装好Docker
之后,下一步是下载PPMessage
镜像。镜像托管在Docker Hub上,你可以搜索ppmessage
找到它。要下载PPMessage
镜像,打开Terminal
,输入命令:
docker pull ppmessage/ppmessage
下载过程可能比较漫长,等待过程中你可继续执行下面的步骤。
下载 PPMessage 源码
启动 PPMessage 之前,首先需要获取PPMessage的源码。源码托管在 github 上。
假设你将PPMessage克隆到目录~/Documents/ppmessage
。
git clone git@github.com:PPMESSAGE/ppmessage.git
下载geolite2
进入~/Documents/ppmessage
目录,执行
ppmessage/scripts/download_geolite2.sh
下载bower, npm依赖
首先需要安装nodejs
,在Mac
上通过以下命令安装
brew install nodejs
在Debian\Ubuntu
上,通过以下命令安装nodejs 4.x
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs
然后,用npm
安装cnpm, bower, gulp
sudo npm install -g cnpm bower gulp
最后,下载PPCom, PPKefu, PPConsole
的bower,npm
依赖。进入~/Documents/ppmessage
目录,执行
./dist.sh bower
./dist.sh npm
在国内,从npm
官方镜像源下载npm
包速度比较慢,且会出现资源被屏蔽的现象。此时可以用./dist.sh cnpm
代替上面的./dist.sh npm
, 这会从淘宝npm
镜像源下载npm
依赖。
配置 PPMessage
参考配置PPMessage,生成配置文件。
启动 PPMessage
启动 PPMessage 之前,确认你已经完成以下步骤:
- 下载
PPMessage
镜像 - 下载
PPMessage
源码 - 配置
PPMessage
- 下载
bower, npm
依赖
然后,输入以下命令启动PPMessage
(根据实际情况,你可能需要改变某些参数)
docker run -it -p 8080:8080 -v ~/Documents/ppmessage:/ppmessage ppmessage/ppmessage
-p 8080:8080
表示将本地的8080
端口映射到Docker
容器的8080
端口,如此就可以通过本地的8080
端口访问在Docker
容器中运行的PPMessage
。
-v ~/Documents/ppmessage:/ppmessage
表示将本地的PPMessage
源码目录映射到Docker
容器/ppmessage
目录,如此可实现在本机开发源码,在Docker
容器里运行代码。
你也可以通过运行脚本 ~/Documents/ppmessage/ppmessage/docker/run-ppmessage.sh
来启动 PPMessage
。
访问 PPMessage
在用Docker
启动PPMessage
之后,我们还需要生成PPCom, PPKefu, PPConsole
运行时所需要的js,css
文件,才能使用这三个模块。
进入~/Documents/ppmessage
目录,执行
./dist.sh gulp
以后,当你更新PPMessage
源码后,都要重复这一操作。
现在,你可以访问PPMessage
的各模块,
访问地址格式为:http_protocol://server_ip:server_port/xxxx
。例如http://127.0.0.1:8080/ppkefu
, http://192.168.99.100:8080/user
。
http_protocol
与配置文件里nginx
的ssl
设置有关,为http
或者https
;server_port
是配置文件里nginx
监听端口,为80或8080。server_ip
是Docker Machine
的IP
,在linux
和Mac
下获取方式不同。Linux
Docker
直接运行在操作系统上,server_ip
就是’127.0.0.1’。Mac
Docker
运行在虚拟机中,server_ip
是虚拟机的IP
。要获取这个IP
,打开Terminal
,执行docker-machine ip default
这会给出
Docker
虚拟机的 IP 地址,例如IP是192.168.99.100
。
可能出现的错误:
登录、注册时,出现ppauth 400 error
解决办法:先更新PPMessage源码(
git pull
),然后执行./dist.sh gulp
,最后清空浏览器缓存。
关闭、重新启动 PPMessage
通过docker run
启动PPMessage
总是会新建一个Docker
容器,然后在新容器中初始化并运行 PPMessage
。
实际上我们总是希望可以重用第一次创建的容器,因为这样才可以保留使用过程中产生的数据。
要做到这点,我们需要获取到容器的ID
,然后对容器进行启动,重启,关闭等操作。
请参考以下命令。
查看所有容器
docker ps -a
这会给出所有
Docker
容器的列表,你需要记住ppmessage/ppmessage
对应的容器id,以便对其进行关闭、启动、重启操作。关闭容器
docker stop container_id
启动容器
docker start container_id
重启容器
docker restart container_id
删除容器
docker rm contaniner_id