在BDOS上发布自定义应用
目录
简介
这个教程主要是帮助使用者在BDOS平台上发布tomcat应用或者docker应用
主要场景为:
1. 在 自定义应用安装
->Tomcat应用
页面上传war包,发布tomcat应用
2. 按照规范打包应用,在自定义应用安装
-> Docker应用
页面上传应用包,发布Docker应用。(⚠️注意:请先学习下Dockerfile编写语法)
1. 发布tomcat应用
以下应用都以helloworld.war
作为例子
1.1 构建war包
可以直接下载上面提供的helloworld.war进行下面的测试。
如果是上传自己制作的war包,打包前,请确认以下资源是否设置正确:
1. 数据库链接
2. 日志信息:请将日志输出目录指定为 /usr/local/tomcat/logs/helloworld.log
,比如您的工程使用log4j.properties,修改下面一项
log4j.appender.RollingFile.File=/usr/local/tomcat/logs/helloworld.log
1.2 安装应用
- 在左侧菜单中找到
自定义应用安装 -> Tomcat应用
, 点击菜单
-
如果是首次安装这个应用,请将 [全新安装] 按钮置亮;否则点击置为灰色,然后选中需要更新版本的应用名称
- 点击“浏览应用压缩包”,选择应用war包helloworld.war,如果是全新安装,页面会自动填充应用名称
-
请选择合适的tomcat-version
-
根据实际需要填写以下参数
字段名称 | 值 | 描述 |
---|---|---|
cpus | 1 | cpus个数(必填) |
mem | 512 | 内存大小,单位为m(必填) ) |
disk | 1024 | 存储大小,单位为m(必填) |
instances | 1 | 实例个数,用于负载均衡(必填) |
sticky-session | false | 是否开启会话保持 如果启动instances大于等于2,并且有会话保持的需求,请一定要开启sticky-session,否则请求访问会存在问题 |
6.点击右上角的 [安装] 按钮,会上传war包。当右上角的上传进度变为100%后,会自动用docker构建应用新的版本,页面显示具体构建日志。构建过程中,常见的错误请见附录一里的 3. 安装常见问题
1.3 启动应用
- 在左侧菜单中找到 已安装应用 -> 自定义应用, 点击菜单,可以看到所有已安装的应用,eg: helloworld,包括历史版本。
-
如果当前应用未处于运行状态,请选择应用启动的版本
-
如果当前应用已处于运行状态,请在左侧菜单中找到 当前运行的应用 -> 自定义应用,进去页面,暂停应用。然后再选择应用启动的版本
1.4 重启/暂停/移除/配置
在 当前运行的应用 -> 自定义应用 页面可以对已安装的应用做如下操作:重启/暂停/移除/配置
- 重启:如果程序处于运行状态,可以直接点击重启,然后会重启所有实例。
- 暂停:停止程序应用,如果在marathon.json里做了local persistent volume(具体解释,请参见附录 5. local persistent volume),会保留数据。
- 移除:停止程序应用,如果在marathon.json里做了local persistent volume(具体解释,请参见附录 5. local persistent volume),同时会移除数据。
- 配置:可以直接修改cpu, mem(内存), disk, instances(实例数),然后会自动重启应用。
1.5 验证应用
- 请在左侧菜单中找到
当前运行应用 -> 自定义应用
,查看应用是否处于running状态,如果是,请点击应用,进入应用运行页面 -
点击 运行中的应用实例 表格里 主机 这一列里的 第一个端口,会打开一个新页面,即是tomcat主页,在地址后面输入应用路径hellworld,则可以验证应用是否可以正常访问
1.6 查看应用日志
- 在“运行中的应用实例”表格里“日志”这一列里可以查看程序标准输出日志,标准错误日志,程序日志文件。
-
点击“日志链接”后,会跳转到程序自己配置的日志目录,如下图,可以看到应用程序写到
/usr/local/tomcat/logs
下面到所有日志文件(⚠️注意:社区版不支持)
-
查看历史应用实例,在“运行中的应用实例”下面一个栏目[历史应用实例]会显示最近10条运行记录,同样可以点击[标准错误], [标准输出]查看日志
2. 发布Docker应用
Docker应用安装流程跟发布Tomcat应用一样,只是在应用打包上有所不同,具体差异见下。其中2.1.1和2.1.2是两个不同的例子,流程都是一样的,只是Dockerfile不同
2.1 构建应用包
2.1.1 构建java应用
可以直接下载helloworld.tgz
1) 通过Docker发布应用,需要将以下文件打成一个包
文件 | 描述 |
---|---|
Dockfile | 必须,程序镜像语法文件 |
marathon.json.mustache | 必须,程序发布资源定义文件 |
settings.json | 必须,变量定义文件 |
logviewer.part.yaml.mustache | 必须,日志规则文件 |
helloworld.jar | 非必须,程序包 |
2) 新建 Dockerfile 文件, 具体解释请参考:docker/docs, 复制下面内容
FROM java:8
WORKDIR /usr/src/app
ADD HelloWorld.jar ./
ADD log4j-1.2.16.jar ./
CMD [ "java", "-cp", "./log4j-1.2.16.jar:./HelloWorld.jar", "HelloWorld"]
3) 新建marathon.json.mustache文件, 复制下面内容
{
"id": "{{group}}-{{app}}",
"cpus": {{cpus}},
"mem": {{mem}},
"disk": {{disk}},
"instances": {{instances}},
"container": {
"type": "DOCKER",
"volumes": [{
"containerPath": "/usr/src/app/logs/",
"hostPath": "/var/log/{{group}}/{{app}}/{{app}}-{{version}}/",
"mode": "RW"
}],
"docker": {
"image": "{{docker-registry}}/{{group}}-{{app}}:{{version}}",
"network": "BRIDGE",
"parameters": [],
"forcePullImage": true
}
},
"healthChecks": [
{
"protocol": "COMMAND",
"command": {
"value": "echo 0"
},
"gracePeriodSeconds": 600,
"intervalSeconds": 60,
"timeoutSeconds": 20,
"maxConsecutiveFailures": 5,
"ignoreHttp1xx": false
}
]
}
- docker应用在Marathon之上运行, 需要提供类似这样的配置文件, 具体使用可以通过Marathon Applications 进行了解.
- group: 应用所属的组, 安装应用的时候会提供选择
- app: 应用的安装名称, 安装应用的时候会提供填写
- version: 应用安装版本, 安装应用的时候会提供选择
- docker-registry: 系统变量, docker镜像中心的注册地址, 可以查看Docker Registry进一步了解
- containerPath:请填写应用日志输出的目录
4) 新建settings.json文件, 复制下面内容
{
"cpus": 1,
"mem": 1024,
"disk": 1024,
"instances": 1
}
- cpus: 应用需要分配的cpu个数
- mem: 应用需要分配的内存大小, 单位是MB
- disk: 应用需要分配的硬盘大小, 单位是MB
- instances: 应用需要启动的实例个数
5) 新建logviewer.part.yaml.mustache文件, 复制下面内容
- job: "{{group}}-{{app}}"
dir: "/root/var/log/{{group}}/{{app}}/"
files:
- filename: "*"
expr:
6) 将以上文件全选打包成以下格式之一:zip/tgz。注意,不要在这些文件的上层目录打包,否则会多一级目录。
linux下打包tgz, 命令如下
tar cvfz helloworld.tgz .
windows下打包tgz,请参见附录1.windows下7-zip打包
2.1.2 构建多war包tomcat应用
可以直接下载tomcatmulti.tgz
1) 通过Docker发布应用,需要将以下文件打成一个包
文件 | 描述 |
---|---|
Dockfile | 必须,程序镜像语法文件 |
marathon.json.mustache | 必须,程序发布资源定义文件 |
settings.json | 必须,变量定义文件 |
logviewer.part.yaml.mustache | 必须,日志规则文件 |
sample1.war | 必须,程序包 |
sample2.war | 可选,程序包 |
2) 新建 Dockerfile 文件, 具体解释请参考:docker/docs, 复制下面内容
FROM tomcat:9.0.1-jre8
RUN echo "Asia/Shanghai" > /etc/timezone
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ADD ./*.war /usr/local/tomcat/webapps/
EXPOSE 8080 8081
CMD chmod +x /usr/local/tomcat/bin/*.sh && export JAVA_OPTS="$JAVA_OPTS -Duser.timezone=GMT+08" && bash /usr/local/tomcat/bin/startup.sh && tail -f logs/catalina.out
3) 新建marathon.json.mustache文件, 复制下面内容
{
"id": "{{group}}-{{app}}",
"cpus": {{cpus}},
"mem": {{mem}},
"disk": {{disk}},
"instances": {{instances}},
"container": {
"type": "DOCKER",
"volumes": [{
"containerPath": "/usr/local/tomcat/logs/",
"hostPath": "/var/log/{{group}}/{{app}}/{{app}}-{{version}}/",
"mode": "RW"
}],
"docker": {
"image": "{{docker-registry}}/{{group}}-{{app}}:{{version}}",
"network": "BRIDGE",
"portMappings": [
{
"containerPort": 8080,
"hostPort": 0,
"servicePort": {{marathon-lb-port}},
"protocol": "tcp",
"labels": {"VIP_0": "{{tomcat-vip}}"}
}
],
"parameters": [
{"key": "env", "value": "TEST=test"}
],
"forcePullImage": true
}
},
{{#sticky_session}}
"labels":{
"HAPROXY_GROUP":"internal",
"HAPROXY_0_MODE" : "tcp",
"HAPROXY_0_BALANCE" : "source",
"HAPROXY_0_BIND_OPTIONS" : "accept-proxy"
},
{{/sticky_session}}
"healthChecks": [
{
"path": "/",
"protocol": "TCP",
"portIndex": 0,
"gracePeriodSeconds": 600,
"intervalSeconds": 60,
"timeoutSeconds": 20,
"maxConsecutiveFailures": 5,
"ignoreHttp1xx": false
}
]
}
- docker应用在Marathon之上运行, 需要提供类似这样的配置文件, 具体使用可以通过Marathon Applications 进行了解.
- group: 应用所属的组, 安装应用的时候会提供选择
- app: 应用的安装名称, 安装应用的时候会提供填写
- version: 应用安装版本, 安装应用的时候会提供选择
- docker-registry: 系统变量, docker镜像中心的注册地址, 可以查看Docker Registry进一步了解
- containerPath:请填写应用日志输出的目录
4) 新建settings.json文件, 复制下面内容
{
"disk": "512",
"mem": "512",
"cpus": "0.25",
"instances": "1",
"marathon-lb-port":"0",
"tomcat-vip":"6.7.6.2:6761",
"export-vip":"6.7.6.2:6762",
"sticky_session":false
}
- cpus: 应用需要分配的cpu个数
- mem: 应用需要分配的内存大小, 单位是MB
- disk: 应用需要分配的硬盘大小, 单位是MB
- instances: 应用需要启动的实例个数
5) 新建logviewer.part.yaml.mustache文件, 复制下面内容
- job: "{{group}}-{{app}}"
dir: "/root/var/log/{{group}}/{{app}}/"
files:
- filename: "*"
expr:
6) 将以上文件全选打包成以下格式之一:zip/tgz。注意,不要在这些文件的上层目录打包,否则会多一级目录。
linux下打包tgz, 命令如下
tar cvfz tomcatmulti.tgz .
2.2 查看应用
- 安装,运行,查看,检查所有步骤与tomcat的相关步骤一致。
附录
1. windows下7-zip打包
windows下打包需要7-zip,64位可以直接点击下载
7-zip
具体步骤如下:
1.1 下载7-ZIP,安装后直接在你想要打包的文件上点右键菜单,会有一个7-ZIP的子菜单栏。
然后选“7-ZIP”->“添加到压缩档案”,在弹出来的窗口里有个“压缩格式”的选项,里面有一个tar格式,第一步先压成tar格式。
1.2 在这个tar文件上面点右键,选 7-zip-> 添加到压缩档案,选择gzip,最后结果就是一个新的tar.gz格式的文件。
最后请将包名由xxx.tar.gz改为xxx.tgz。
至此,在windows下面得到tgz完成!
2. 打包常见问题
- 请注意打包的目录层级,如果通过工具打包,一定要选中所有文件打包,而不是在上层目录打包
- 请使用命令或者工具打包,不要通过重命名改变包的格式
- 特别是程序包,比如war包,请确保war包可以在本地tomcat解压成功
3. 安装常见问题
在Docker安装过程中,会显示详细日志,如果缺少必要的文件,会红色显示错误信息
4. 启动常见问题
请确保分配的cpus,mem,disk等资源合理
5. local persistent volume
docker是无状态的,在某些情况下,需要做主机文件映射到docker里,并且每次发布都只能在这个主机,这个时候需要做local persistent volume固定docker的运行主机。如果在页面上做“移除”操作,将会导致这个docker下次发布是个全新的环境,不能继续自动挂载之前主机上映射的资源。
详细内容可以参见Local Persistent Volumes
如果对教程有任何疑问,请截图发邮件至 admin@linktime.cloud
留言
评论
${{item['author_name']}} 回复 ${{idToContentMap[item.parent] !== undefined ? idToContentMap[item.parent]['author_name'] : ''}}说 · ${{item.date.slice(0, 10)}} 回复
暂时还没有一条评论.