Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
piplus-backend-v5-server-dockers
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
piplus-backend-v5
piplus-backend-v5-server-dockers
Commits
a9d8f5d9
Commit
a9d8f5d9
authored
Oct 29, 2016
by
focus
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
提交
parent
792ad7c5
Changes
15
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
1409 additions
and
24 deletions
+1409
-24
Dockerfile
piplus-backend-v5-canal-docker/Dockerfile
+31
-0
canal.deployer-1.0.22.tar.gz
piplus-backend-v5-canal-docker/canal.deployer-1.0.22.tar.gz
+0
-0
canal.properties
piplus-backend-v5-canal-docker/conf/canal.properties
+67
-0
instance.properties
...-backend-v5-canal-docker/conf/example/instance.properties
+27
-0
logback.xml
piplus-backend-v5-canal-docker/conf/logback.xml
+83
-0
default-instance.xml
...-backend-v5-canal-docker/conf/spring/default-instance.xml
+186
-0
file-instance.xml
piplus-backend-v5-canal-docker/conf/spring/file-instance.xml
+171
-0
group-instance.xml
...us-backend-v5-canal-docker/conf/spring/group-instance.xml
+258
-0
memory-instance.xml
...s-backend-v5-canal-docker/conf/spring/memory-instance.xml
+159
-0
Dockerfile
piplus-backend-v5-mycat-docker/Dockerfile
+15
-24
Mycat-server-1.5.1-RELEASE-20160810140521-linux.tar.gz
...er/Mycat-server-1.5.1-RELEASE-20160810140521-linux.tar.gz
+0
-0
Dockerfile
piplus-backend-v5-rabbitmq-docker/Dockerfile
+108
-0
README.md
piplus-backend-v5-rabbitmq-docker/README.md
+0
-0
docker-entrypoint.sh
piplus-backend-v5-rabbitmq-docker/docker-entrypoint.sh
+280
-0
startrabbit.sh
piplus-backend-v5-rabbitmq-docker/startrabbit.sh
+24
-0
No files found.
piplus-backend-v5-canal-docker/Dockerfile
View file @
a9d8f5d9
# piplus v5 Canal Dockerfile
FROM
centos:7
MAINTAINER
focus <focus@hudongpai.com>
# Install myCat.
RUN
\
yum
install
-y
java-1.8.0-openjdk.x86_64
&&
\
yum
install
-y
wget
&&
\
cd
/opt
&&
\
wget https://git.wxpai.cn/piplus-backend-v5/piplus-backend-v5-download/raw/master/canal.deployer-1.0.22.tar.gz
&&
\
mkdir
/opt/canal
&&
\
tar
zxvf canal.deployer-1.0.22.tar.gz
-C
/opt/canal
&&
\
rm
-rf
/opt/canal/conf
&&
\
ls
-l
/opt
# Add src
ADD
conf /opt/canal/conf
# Define mountable directories.
VOLUME
["/opt/canal/conf"]
# Expose ports.
EXPOSE
8066
# Define working directory.
WORKDIR
/opt/canal/bin
# Define default command.
CMD
["startup.sh"]
\ No newline at end of file
piplus-backend-v5-canal-docker/canal.deployer-1.0.22.tar.gz
deleted
100644 → 0
View file @
792ad7c5
File deleted
piplus-backend-v5-canal-docker/conf/canal.properties
0 → 100755
View file @
a9d8f5d9
#################################################
######### common argument #############
#################################################
canal.id
=
1
canal.ip
=
canal.port
=
11111
canal.zkServers
=
# flush data to zk
canal.zookeeper.flush.period
=
1000
# flush meta cursor/parse position to file
canal.file.data.dir
=
${canal.conf.dir}
canal.file.flush.period
=
1000
## memory store RingBuffer size, should be Math.pow(2,n)
canal.instance.memory.buffer.size
=
16384
## memory store RingBuffer used memory unit size , default 1kb
canal.instance.memory.buffer.memunit
=
1024
## meory store gets mode used MEMSIZE or ITEMSIZE
canal.instance.memory.batch.mode
=
MEMSIZE
## detecing config
canal.instance.detecting.enable
=
false
#canal.instance.detecting.sql = insert into retl.xdual values(1,now()) on duplicate key update x=now()
canal.instance.detecting.sql
=
select 1
canal.instance.detecting.interval.time
=
3
canal.instance.detecting.retry.threshold
=
3
canal.instance.detecting.heartbeatHaEnable
=
false
# support maximum transaction size, more than the size of the transaction will be cut into multiple transactions delivery
canal.instance.transaction.size
=
1024
# mysql fallback connected to new master should fallback times
canal.instance.fallbackIntervalInSeconds
=
60
# network config
canal.instance.network.receiveBufferSize
=
16384
canal.instance.network.sendBufferSize
=
16384
canal.instance.network.soTimeout
=
30
# binlog filter config
canal.instance.filter.query.dcl
=
false
canal.instance.filter.query.dml
=
false
canal.instance.filter.query.ddl
=
false
canal.instance.filter.table.error
=
false
canal.instance.filter.rows
=
false
# binlog format/image check
canal.instance.binlog.format
=
ROW,STATEMENT,MIXED
canal.instance.binlog.image
=
FULL,MINIMAL,NOBLOB
# binlog ddl isolation
canal.instance.get.ddl.isolation
=
false
#################################################
######### destinations #############
#################################################
canal.destinations
=
example
# conf root dir
canal.conf.dir
=
../conf
# auto scan instance dir add/remove and start/stop instance
canal.auto.scan
=
true
canal.auto.scan.interval
=
5
canal.instance.global.mode
=
spring
canal.instance.global.lazy
=
false
#canal.instance.global.manager.address = 127.0.0.1:1099
#canal.instance.global.spring.xml = classpath:spring/memory-instance.xml
canal.instance.global.spring.xml
=
classpath:spring/file-instance.xml
#canal.instance.global.spring.xml = classpath:spring/default-instance.xml
piplus-backend-v5-canal-docker/conf/example/instance.properties
0 → 100755
View file @
a9d8f5d9
#################################################
## mysql serverId
canal.instance.mysql.slaveId
=
1234
# position info
canal.instance.master.address
=
127.0.0.1:3306
canal.instance.master.journal.name
=
canal.instance.master.position =
canal.instance.master.timestamp
=
#canal.instance.standby.address =
#canal.instance.standby.journal.name =
#canal.instance.standby.position =
#canal.instance.standby.timestamp =
# username/password
canal.instance.dbUsername
=
canal
canal.instance.dbPassword
=
canal
canal.instance.defaultDatabaseName
=
canal.instance.connectionCharset
=
UTF-8
# table regex
canal.instance.filter.regex
=
.*
\\
..*
# table black regex
canal.instance.filter.black.regex
=
#################################################
\ No newline at end of file
piplus-backend-v5-canal-docker/conf/logback.xml
0 → 100755
View file @
a9d8f5d9
<configuration
scan=
"true"
scanPeriod=
" 5 seconds"
>
<jmxConfigurator
/>
<appender
name=
"STDOUT"
class=
"ch.qos.logback.core.ConsoleAppender"
>
<encoder>
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56} - %msg%n
</pattern>
</encoder>
</appender>
<appender
name=
"CANAL-ROOT"
class=
"ch.qos.logback.classic.sift.SiftingAppender"
>
<discriminator>
<Key>
destination
</Key>
<DefaultValue>
canal
</DefaultValue>
</discriminator>
<sift>
<appender
name=
"FILE-${destination}"
class=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<File>
../logs/${destination}/${destination}.log
</File>
<rollingPolicy
class=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<!-- rollover daily -->
<fileNamePattern>
../logs/${destination}/%d{yyyy-MM-dd}/${destination}-%d{yyyy-MM-dd}-%i.log.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class=
"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"
>
<!-- or whenever the file size reaches 100MB -->
<maxFileSize>
512MB
</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>
60
</maxHistory>
</rollingPolicy>
<encoder>
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56} - %msg%n
</pattern>
</encoder>
</appender>
</sift>
</appender>
<appender
name=
"CANAL-META"
class=
"ch.qos.logback.classic.sift.SiftingAppender"
>
<discriminator>
<Key>
destination
</Key>
<DefaultValue>
canal
</DefaultValue>
</discriminator>
<sift>
<appender
name=
"META-FILE-${destination}"
class=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<File>
../logs/${destination}/meta.log
</File>
<rollingPolicy
class=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<!-- rollover daily -->
<fileNamePattern>
../logs/${destination}/%d{yyyy-MM-dd}/meta-%d{yyyy-MM-dd}-%i.log.gz
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class=
"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"
>
<!-- or whenever the file size reaches 100MB -->
<maxFileSize>
32MB
</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>
60
</maxHistory>
</rollingPolicy>
<encoder>
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%n
</pattern>
</encoder>
</appender>
</sift>
</appender>
<logger
name=
"com.alibaba.otter.canal.instance"
additivity=
"false"
>
<level
value=
"INFO"
/>
<appender-ref
ref=
"CANAL-ROOT"
/>
</logger>
<logger
name=
"com.alibaba.otter.canal.deployer"
additivity=
"false"
>
<level
value=
"INFO"
/>
<appender-ref
ref=
"CANAL-ROOT"
/>
</logger>
<logger
name=
"com.alibaba.otter.canal.meta.FileMixedMetaManager"
additivity=
"false"
>
<level
value=
"INFO"
/>
<appender-ref
ref=
"CANAL-META"
/>
</logger>
<root
level=
"WARN"
>
<!--
<appender-ref ref="STDOUT"/>
-->
<appender-ref
ref=
"CANAL-ROOT"
/>
</root>
</configuration>
\ No newline at end of file
piplus-backend-v5-canal-docker/conf/spring/default-instance.xml
0 → 100755
View file @
a9d8f5d9
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns=
"http://www.springframework.org/schema/beans"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx=
"http://www.springframework.org/schema/tx"
xmlns:aop=
"http://www.springframework.org/schema/aop"
xmlns:lang=
"http://www.springframework.org/schema/lang"
xmlns:context=
"http://www.springframework.org/schema/context"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
default-autowire=
"byName"
>
<!-- properties -->
<bean
class=
"com.alibaba.otter.canal.instance.spring.support.PropertyPlaceholderConfigurer"
lazy-init=
"false"
>
<property
name=
"ignoreResourceNotFound"
value=
"true"
/>
<property
name=
"systemPropertiesModeName"
value=
"SYSTEM_PROPERTIES_MODE_OVERRIDE"
/>
<!-- 允许system覆盖 -->
<property
name=
"locationNames"
>
<list>
<value>
classpath:canal.properties
</value>
<value>
classpath:${canal.instance.destination:}/instance.properties
</value>
</list>
</property>
</bean>
<bean
id=
"socketAddressEditor"
class=
"com.alibaba.otter.canal.instance.spring.support.SocketAddressEditor"
/>
<bean
class=
"org.springframework.beans.factory.config.CustomEditorConfigurer"
>
<property
name=
"propertyEditorRegistrars"
>
<list>
<ref
bean=
"socketAddressEditor"
/>
</list>
</property>
</bean>
<bean
id=
"instance"
class=
"com.alibaba.otter.canal.instance.spring.CanalInstanceWithSpring"
>
<property
name=
"destination"
value=
"${canal.instance.destination}"
/>
<property
name=
"eventParser"
>
<ref
local=
"eventParser"
/>
</property>
<property
name=
"eventSink"
>
<ref
local=
"eventSink"
/>
</property>
<property
name=
"eventStore"
>
<ref
local=
"eventStore"
/>
</property>
<property
name=
"metaManager"
>
<ref
local=
"metaManager"
/>
</property>
<property
name=
"alarmHandler"
>
<ref
local=
"alarmHandler"
/>
</property>
</bean>
<!-- 报警处理类 -->
<bean
id=
"alarmHandler"
class=
"com.alibaba.otter.canal.common.alarm.LogAlarmHandler"
/>
<bean
id=
"zkClientx"
class=
"org.springframework.beans.factory.config.MethodInvokingFactoryBean"
>
<property
name=
"targetClass"
value=
"com.alibaba.otter.canal.common.zookeeper.ZkClientx"
/>
<property
name=
"targetMethod"
value=
"getZkClient"
/>
<property
name=
"arguments"
>
<list>
<value>
${canal.zkServers:127.0.0.1:2181}
</value>
</list>
</property>
</bean>
<bean
id=
"metaManager"
class=
"com.alibaba.otter.canal.meta.PeriodMixedMetaManager"
>
<property
name=
"zooKeeperMetaManager"
>
<bean
class=
"com.alibaba.otter.canal.meta.ZooKeeperMetaManager"
>
<property
name=
"zkClientx"
ref=
"zkClientx"
/>
</bean>
</property>
<property
name=
"period"
value=
"${canal.zookeeper.flush.period:1000}"
/>
</bean>
<bean
id=
"eventStore"
class=
"com.alibaba.otter.canal.store.memory.MemoryEventStoreWithBuffer"
>
<property
name=
"bufferSize"
value=
"${canal.instance.memory.buffer.size:16384}"
/>
<property
name=
"bufferMemUnit"
value=
"${canal.instance.memory.buffer.memunit:1024}"
/>
<property
name=
"batchMode"
value=
"${canal.instance.memory.batch.mode:MEMSIZE}"
/>
<property
name=
"ddlIsolation"
value=
"${canal.instance.get.ddl.isolation:false}"
/>
</bean>
<bean
id=
"eventSink"
class=
"com.alibaba.otter.canal.sink.entry.EntryEventSink"
>
<property
name=
"eventStore"
ref=
"eventStore"
/>
</bean>
<bean
id=
"eventParser"
class=
"com.alibaba.otter.canal.parse.inbound.mysql.MysqlEventParser"
>
<property
name=
"destination"
value=
"${canal.instance.destination}"
/>
<property
name=
"slaveId"
value=
"${canal.instance.mysql.slaveId:1234}"
/>
<!-- 心跳配置 -->
<property
name=
"detectingEnable"
value=
"${canal.instance.detecting.enable:false}"
/>
<property
name=
"detectingSQL"
value=
"${canal.instance.detecting.sql}"
/>
<property
name=
"detectingIntervalInSeconds"
value=
"${canal.instance.detecting.interval.time:5}"
/>
<property
name=
"haController"
>
<bean
class=
"com.alibaba.otter.canal.parse.ha.HeartBeatHAController"
>
<property
name=
"detectingRetryTimes"
value=
"${canal.instance.detecting.retry.threshold:3}"
/>
<property
name=
"switchEnable"
value=
"${canal.instance.detecting.heartbeatHaEnable:false}"
/>
</bean>
</property>
<property
name=
"alarmHandler"
ref=
"alarmHandler"
/>
<!-- 解析过滤处理 -->
<property
name=
"eventFilter"
>
<bean
class=
"com.alibaba.otter.canal.filter.aviater.AviaterRegexFilter"
>
<constructor-arg
index=
"0"
value=
"${canal.instance.filter.regex:.*\..*}"
/>
</bean>
</property>
<property
name=
"eventBlackFilter"
>
<bean
class=
"com.alibaba.otter.canal.filter.aviater.AviaterRegexFilter"
>
<constructor-arg
index=
"0"
value=
"${canal.instance.filter.black.regex:}"
/>
<constructor-arg
index=
"1"
value=
"false"
/>
</bean>
</property>
<!-- 最大事务解析大小,超过该大小后事务将被切分为多个事务投递 -->
<property
name=
"transactionSize"
value=
"${canal.instance.transaction.size:1024}"
/>
<!-- 网络链接参数 -->
<property
name=
"receiveBufferSize"
value=
"${canal.instance.network.receiveBufferSize:16384}"
/>
<property
name=
"sendBufferSize"
value=
"${canal.instance.network.sendBufferSize:16384}"
/>
<property
name=
"defaultConnectionTimeoutInSeconds"
value=
"${canal.instance.network.soTimeout:30}"
/>
<!-- 解析编码 -->
<!-- property name="connectionCharsetNumber" value="${canal.instance.connectionCharsetNumber:33}" /-->
<property
name=
"connectionCharset"
value=
"${canal.instance.connectionCharset:UTF-8}"
/>
<!-- 解析位点记录 -->
<property
name=
"logPositionManager"
>
<bean
class=
"com.alibaba.otter.canal.parse.index.FailbackLogPositionManager"
>
<property
name=
"primary"
>
<bean
class=
"com.alibaba.otter.canal.parse.index.MemoryLogPositionManager"
/>
</property>
<property
name=
"failback"
>
<bean
class=
"com.alibaba.otter.canal.parse.index.MetaLogPositionManager"
>
<property
name=
"metaManager"
ref=
"metaManager"
/>
</bean>
</property>
</bean>
</property>
<!-- failover切换时回退的时间 -->
<property
name=
"fallbackIntervalInSeconds"
value=
"${canal.instance.fallbackIntervalInSeconds:60}"
/>
<!-- 解析数据库信息 -->
<property
name=
"masterInfo"
>
<bean
class=
"com.alibaba.otter.canal.parse.support.AuthenticationInfo"
>
<property
name=
"address"
value=
"${canal.instance.master.address}"
/>
<property
name=
"username"
value=
"${canal.instance.dbUsername:retl}"
/>
<property
name=
"password"
value=
"${canal.instance.dbPassword:retl}"
/>
<property
name=
"defaultDatabaseName"
value=
"${canal.instance.defaultDatabaseName:retl}"
/>
</bean>
</property>
<property
name=
"standbyInfo"
>
<bean
class=
"com.alibaba.otter.canal.parse.support.AuthenticationInfo"
>
<property
name=
"address"
value=
"${canal.instance.standby.address}"
/>
<property
name=
"username"
value=
"${canal.instance.dbUsername:retl}"
/>
<property
name=
"password"
value=
"${canal.instance.dbPassword:retl}"
/>
<property
name=
"defaultDatabaseName"
value=
"${canal.instance.defaultDatabaseName:retl}"
/>
</bean>
</property>
<!-- 解析起始位点 -->
<property
name=
"masterPosition"
>
<bean
class=
"com.alibaba.otter.canal.protocol.position.EntryPosition"
>
<property
name=
"journalName"
value=
"${canal.instance.master.journal.name}"
/>
<property
name=
"position"
value=
"${canal.instance.master.position}"
/>
<property
name=
"timestamp"
value=
"${canal.instance.master.timestamp}"
/>
</bean>
</property>
<property
name=
"standbyPosition"
>
<bean
class=
"com.alibaba.otter.canal.protocol.position.EntryPosition"
>
<property
name=
"journalName"
value=
"${canal.instance.standby.journal.name}"
/>
<property
name=
"position"
value=
"${canal.instance.standby.position}"
/>
<property
name=
"timestamp"
value=
"${canal.instance.standby.timestamp}"
/>
</bean>
</property>
<property
name=
"filterQueryDml"
value=
"${canal.instance.filter.query.dml:false}"
/>
<property
name=
"filterQueryDcl"
value=
"${canal.instance.filter.query.dcl:false}"
/>
<property
name=
"filterQueryDdl"
value=
"${canal.instance.filter.query.ddl:false}"
/>
<property
name=
"filterRows"
value=
"${canal.instance.filter.rows:false}"
/>
<property
name=
"filterTableError"
value=
"${canal.instance.filter.table.error:false}"
/>
<property
name=
"supportBinlogFormats"
value=
"${canal.instance.binlog.format}"
/>
<property
name=
"supportBinlogImages"
value=
"${canal.instance.binlog.image}"
/>
</bean>
</beans>
piplus-backend-v5-canal-docker/conf/spring/file-instance.xml
0 → 100755
View file @
a9d8f5d9
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns=
"http://www.springframework.org/schema/beans"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx=
"http://www.springframework.org/schema/tx"
xmlns:aop=
"http://www.springframework.org/schema/aop"
xmlns:lang=
"http://www.springframework.org/schema/lang"
xmlns:context=
"http://www.springframework.org/schema/context"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
default-autowire=
"byName"
>
<!-- properties -->
<bean
class=
"com.alibaba.otter.canal.instance.spring.support.PropertyPlaceholderConfigurer"
lazy-init=
"false"
>
<property
name=
"ignoreResourceNotFound"
value=
"true"
/>
<property
name=
"systemPropertiesModeName"
value=
"SYSTEM_PROPERTIES_MODE_OVERRIDE"
/>
<!-- 允许system覆盖 -->
<property
name=
"locationNames"
>
<list>
<value>
classpath:canal.properties
</value>
<value>
classpath:${canal.instance.destination:}/instance.properties
</value>
</list>
</property>
</bean>
<bean
id=
"socketAddressEditor"
class=
"com.alibaba.otter.canal.instance.spring.support.SocketAddressEditor"
/>
<bean
class=
"org.springframework.beans.factory.config.CustomEditorConfigurer"
>
<property
name=
"propertyEditorRegistrars"
>
<list>
<ref
bean=
"socketAddressEditor"
/>
</list>
</property>
</bean>
<bean
id=
"instance"
class=
"com.alibaba.otter.canal.instance.spring.CanalInstanceWithSpring"
>
<property
name=
"destination"
value=
"${canal.instance.destination}"
/>
<property
name=
"eventParser"
>
<ref
local=
"eventParser"
/>
</property>
<property
name=
"eventSink"
>
<ref
local=
"eventSink"
/>
</property>
<property
name=
"eventStore"
>
<ref
local=
"eventStore"
/>
</property>
<property
name=
"metaManager"
>
<ref
local=
"metaManager"
/>
</property>
<property
name=
"alarmHandler"
>
<ref
local=
"alarmHandler"
/>
</property>
</bean>
<!-- 报警处理类 -->
<bean
id=
"alarmHandler"
class=
"com.alibaba.otter.canal.common.alarm.LogAlarmHandler"
/>
<bean
id=
"metaManager"
class=
"com.alibaba.otter.canal.meta.FileMixedMetaManager"
>
<property
name=
"dataDir"
value=
"${canal.file.data.dir:../conf}"
/>
<property
name=
"period"
value=
"${canal.file.flush.period:1000}"
/>
</bean>
<bean
id=
"eventStore"
class=
"com.alibaba.otter.canal.store.memory.MemoryEventStoreWithBuffer"
>
<property
name=
"bufferSize"
value=
"${canal.instance.memory.buffer.size:16384}"
/>
<property
name=
"bufferMemUnit"
value=
"${canal.instance.memory.buffer.memunit:1024}"
/>
<property
name=
"batchMode"
value=
"${canal.instance.memory.batch.mode:MEMSIZE}"
/>
<property
name=
"ddlIsolation"
value=
"${canal.instance.get.ddl.isolation:false}"
/>
</bean>
<bean
id=
"eventSink"
class=
"com.alibaba.otter.canal.sink.entry.EntryEventSink"
>
<property
name=
"eventStore"
ref=
"eventStore"
/>
</bean>
<bean
id=
"eventParser"
class=
"com.alibaba.otter.canal.parse.inbound.mysql.MysqlEventParser"
>
<property
name=
"destination"
value=
"${canal.instance.destination}"
/>
<property
name=
"slaveId"
value=
"${canal.instance.mysql.slaveId:1234}"
/>
<!-- 心跳配置 -->
<property
name=
"detectingEnable"
value=
"${canal.instance.detecting.enable:false}"
/>
<property
name=
"detectingSQL"
value=
"${canal.instance.detecting.sql}"
/>
<property
name=
"detectingIntervalInSeconds"
value=
"${canal.instance.detecting.interval.time:5}"
/>
<property
name=
"haController"
>
<bean
class=
"com.alibaba.otter.canal.parse.ha.HeartBeatHAController"
>
<property
name=
"detectingRetryTimes"
value=
"${canal.instance.detecting.retry.threshold:3}"
/>
<property
name=
"switchEnable"
value=
"${canal.instance.detecting.heartbeatHaEnable:false}"
/>
</bean>
</property>
<property
name=
"alarmHandler"
ref=
"alarmHandler"
/>
<!-- 解析过滤处理 -->
<property
name=
"eventFilter"
>
<bean
class=
"com.alibaba.otter.canal.filter.aviater.AviaterRegexFilter"
>
<constructor-arg
index=
"0"
value=
"${canal.instance.filter.regex:.*\..*}"
/>
</bean>
</property>
<property
name=
"eventBlackFilter"
>
<bean
class=
"com.alibaba.otter.canal.filter.aviater.AviaterRegexFilter"
>
<constructor-arg
index=
"0"
value=
"${canal.instance.filter.black.regex:}"
/>
<constructor-arg
index=
"1"
value=
"false"
/>
</bean>
</property>
<!-- 最大事务解析大小,超过该大小后事务将被切分为多个事务投递 -->
<property
name=
"transactionSize"
value=
"${canal.instance.transaction.size:1024}"
/>
<!-- 网络链接参数 -->
<property
name=
"receiveBufferSize"
value=
"${canal.instance.network.receiveBufferSize:16384}"
/>
<property
name=
"sendBufferSize"
value=
"${canal.instance.network.sendBufferSize:16384}"
/>
<property
name=
"defaultConnectionTimeoutInSeconds"
value=
"${canal.instance.network.soTimeout:30}"
/>
<!-- 解析编码 -->
<!-- property name="connectionCharsetNumber" value="${canal.instance.connectionCharsetNumber:33}" /-->
<property
name=
"connectionCharset"
value=
"${canal.instance.connectionCharset:UTF-8}"
/>
<!-- 解析位点记录 -->
<property
name=
"logPositionManager"
>
<bean
class=
"com.alibaba.otter.canal.parse.index.FailbackLogPositionManager"
>
<property
name=
"primary"
>
<bean
class=
"com.alibaba.otter.canal.parse.index.MemoryLogPositionManager"
/>
</property>
<property
name=
"failback"
>
<bean
class=
"com.alibaba.otter.canal.parse.index.MetaLogPositionManager"
>
<property
name=
"metaManager"
ref=
"metaManager"
/>
</bean>
</property>
</bean>
</property>
<!-- failover切换时回退的时间 -->
<property
name=
"fallbackIntervalInSeconds"
value=
"${canal.instance.fallbackIntervalInSeconds:60}"
/>
<!-- 解析数据库信息 -->
<property
name=
"masterInfo"
>
<bean
class=
"com.alibaba.otter.canal.parse.support.AuthenticationInfo"
>
<property
name=
"address"
value=
"${canal.instance.master.address}"
/>
<property
name=
"username"
value=
"${canal.instance.dbUsername:retl}"
/>
<property
name=
"password"
value=
"${canal.instance.dbPassword:retl}"
/>
<property
name=
"defaultDatabaseName"
value=
"${canal.instance.defaultDatabaseName:retl}"
/>
</bean>
</property>
<property
name=
"standbyInfo"
>
<bean
class=
"com.alibaba.otter.canal.parse.support.AuthenticationInfo"
>
<property
name=
"address"
value=
"${canal.instance.standby.address}"
/>
<property
name=
"username"
value=
"${canal.instance.dbUsername:retl}"
/>
<property
name=
"password"
value=
"${canal.instance.dbPassword:retl}"
/>
<property
name=
"defaultDatabaseName"
value=
"${canal.instance.defaultDatabaseName:retl}"
/>
</bean>
</property>
<!-- 解析起始位点 -->
<property
name=
"masterPosition"
>
<bean
class=
"com.alibaba.otter.canal.protocol.position.EntryPosition"
>
<property
name=
"journalName"
value=
"${canal.instance.master.journal.name}"
/>
<property
name=
"position"
value=
"${canal.instance.master.position}"
/>
<property
name=
"timestamp"
value=
"${canal.instance.master.timestamp}"
/>
</bean>
</property>
<property
name=
"standbyPosition"
>
<bean
class=
"com.alibaba.otter.canal.protocol.position.EntryPosition"
>
<property
name=
"journalName"
value=
"${canal.instance.standby.journal.name}"
/>
<property
name=
"position"
value=
"${canal.instance.standby.position}"
/>
<property
name=
"timestamp"
value=
"${canal.instance.standby.timestamp}"
/>
</bean>
</property>
<property
name=
"filterQueryDml"
value=
"${canal.instance.filter.query.dml:false}"
/>
<property
name=
"filterQueryDcl"
value=
"${canal.instance.filter.query.dcl:false}"
/>
<property
name=
"filterQueryDdl"
value=
"${canal.instance.filter.query.ddl:false}"
/>
<property
name=
"filterRows"
value=
"${canal.instance.filter.rows:false}"
/>
<property
name=
"filterTableError"
value=
"${canal.instance.filter.table.error:false}"
/>
<property
name=
"supportBinlogFormats"
value=
"${canal.instance.binlog.format}"
/>
<property
name=
"supportBinlogImages"
value=
"${canal.instance.binlog.image}"
/>
</bean>
</beans>
piplus-backend-v5-canal-docker/conf/spring/group-instance.xml
0 → 100755
View file @
a9d8f5d9
This diff is collapsed.
Click to expand it.
piplus-backend-v5-canal-docker/conf/spring/memory-instance.xml
0 → 100755
View file @
a9d8f5d9
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns=
"http://www.springframework.org/schema/beans"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx=
"http://www.springframework.org/schema/tx"
xmlns:aop=
"http://www.springframework.org/schema/aop"
xmlns:lang=
"http://www.springframework.org/schema/lang"
xmlns:context=
"http://www.springframework.org/schema/context"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
default-autowire=
"byName"
>
<!-- properties -->
<bean
class=
"com.alibaba.otter.canal.instance.spring.support.PropertyPlaceholderConfigurer"
lazy-init=
"false"
>
<property
name=
"ignoreResourceNotFound"
value=
"true"
/>
<property
name=
"systemPropertiesModeName"
value=
"SYSTEM_PROPERTIES_MODE_OVERRIDE"
/>
<!-- 允许system覆盖 -->
<property
name=
"locationNames"
>
<list>
<value>
classpath:canal.properties
</value>
<value>
classpath:${canal.instance.destination:}/instance.properties
</value>
</list>
</property>
</bean>
<bean
id=
"socketAddressEditor"
class=
"com.alibaba.otter.canal.instance.spring.support.SocketAddressEditor"
/>
<bean
class=
"org.springframework.beans.factory.config.CustomEditorConfigurer"
>
<property
name=
"propertyEditorRegistrars"
>
<list>
<ref
bean=
"socketAddressEditor"
/>
</list>
</property>
</bean>
<bean
id=
"instance"
class=
"com.alibaba.otter.canal.instance.spring.CanalInstanceWithSpring"
>
<property
name=
"destination"
value=
"${canal.instance.destination}"
/>
<property
name=
"eventParser"
>
<ref
local=
"eventParser"
/>
</property>
<property
name=
"eventSink"
>
<ref
local=
"eventSink"
/>
</property>
<property
name=
"eventStore"
>
<ref
local=
"eventStore"
/>
</property>
<property
name=
"metaManager"
>
<ref
local=
"metaManager"
/>
</property>
<property
name=
"alarmHandler"
>
<ref
local=
"alarmHandler"
/>
</property>
</bean>
<!-- 报警处理类 -->
<bean
id=
"alarmHandler"
class=
"com.alibaba.otter.canal.common.alarm.LogAlarmHandler"
/>
<bean
id=
"metaManager"
class=
"com.alibaba.otter.canal.meta.MemoryMetaManager"
/>
<bean
id=
"eventStore"
class=
"com.alibaba.otter.canal.store.memory.MemoryEventStoreWithBuffer"
>
<property
name=
"bufferSize"
value=
"${canal.instance.memory.buffer.size:16384}"
/>
<property
name=
"bufferMemUnit"
value=
"${canal.instance.memory.buffer.memunit:1024}"
/>
<property
name=
"batchMode"
value=
"${canal.instance.memory.batch.mode:MEMSIZE}"
/>
<property
name=
"ddlIsolation"
value=
"${canal.instance.get.ddl.isolation:false}"
/>
</bean>
<bean
id=
"eventSink"
class=
"com.alibaba.otter.canal.sink.entry.EntryEventSink"
>
<property
name=
"eventStore"
ref=
"eventStore"
/>
</bean>
<bean
id=
"eventParser"
class=
"com.alibaba.otter.canal.parse.inbound.mysql.MysqlEventParser"
>
<property
name=
"destination"
value=
"${canal.instance.destination}"
/>
<property
name=
"slaveId"
value=
"${canal.instance.mysql.slaveId:1234}"
/>
<!-- 心跳配置 -->
<property
name=
"detectingEnable"
value=
"${canal.instance.detecting.enable:false}"
/>
<property
name=
"detectingSQL"
value=
"${canal.instance.detecting.sql}"
/>
<property
name=
"detectingIntervalInSeconds"
value=
"${canal.instance.detecting.interval.time:5}"
/>
<property
name=
"haController"
>
<bean
class=
"com.alibaba.otter.canal.parse.ha.HeartBeatHAController"
>
<property
name=
"detectingRetryTimes"
value=
"${canal.instance.detecting.retry.threshold:3}"
/>
<property
name=
"switchEnable"
value=
"${canal.instance.detecting.heartbeatHaEnable:false}"
/>
</bean>
</property>
<property
name=
"alarmHandler"
ref=
"alarmHandler"
/>
<!-- 解析过滤处理 -->
<property
name=
"eventFilter"
>
<bean
class=
"com.alibaba.otter.canal.filter.aviater.AviaterRegexFilter"
>
<constructor-arg
index=
"0"
value=
"${canal.instance.filter.regex:.*\..*}"
/>
</bean>
</property>
<property
name=
"eventBlackFilter"
>
<bean
class=
"com.alibaba.otter.canal.filter.aviater.AviaterRegexFilter"
>
<constructor-arg
index=
"0"
value=
"${canal.instance.filter.black.regex:}"
/>
<constructor-arg
index=
"1"
value=
"false"
/>
</bean>
</property>
<!-- 最大事务解析大小,超过该大小后事务将被切分为多个事务投递 -->
<property
name=
"transactionSize"
value=
"${canal.instance.transaction.size:1024}"
/>
<!-- 网络链接参数 -->
<property
name=
"receiveBufferSize"
value=
"${canal.instance.network.receiveBufferSize:16384}"
/>
<property
name=
"sendBufferSize"
value=
"${canal.instance.network.sendBufferSize:16384}"
/>
<property
name=
"defaultConnectionTimeoutInSeconds"
value=
"${canal.instance.network.soTimeout:30}"
/>
<!-- 解析编码 -->
<!-- property name="connectionCharsetNumber" value="${canal.instance.connectionCharsetNumber:33}" /-->
<property
name=
"connectionCharset"
value=
"${canal.instance.connectionCharset:UTF-8}"
/>
<!-- 解析位点记录 -->
<property
name=
"logPositionManager"
>
<bean
class=
"com.alibaba.otter.canal.parse.index.MemoryLogPositionManager"
/>
</property>
<!-- failover切换时回退的时间 -->
<property
name=
"fallbackIntervalInSeconds"
value=
"${canal.instance.fallbackIntervalInSeconds:60}"
/>
<!-- 解析数据库信息 -->
<property
name=
"masterInfo"
>
<bean
class=
"com.alibaba.otter.canal.parse.support.AuthenticationInfo"
>
<property
name=
"address"
value=
"${canal.instance.master.address}"
/>
<property
name=
"username"
value=
"${canal.instance.dbUsername:retl}"
/>
<property
name=
"password"
value=
"${canal.instance.dbPassword:retl}"
/>
<property
name=
"defaultDatabaseName"
value=
"${canal.instance.defaultDatabaseName:retl}"
/>
</bean>
</property>
<property
name=
"standbyInfo"
>
<bean
class=
"com.alibaba.otter.canal.parse.support.AuthenticationInfo"
>
<property
name=
"address"
value=
"${canal.instance.standby.address}"
/>
<property
name=
"username"
value=
"${canal.instance.dbUsername:retl}"
/>
<property
name=
"password"
value=
"${canal.instance.dbPassword:retl}"
/>
<property
name=
"defaultDatabaseName"
value=
"${canal.instance.defaultDatabaseName:retl}"
/>
</bean>
</property>
<!-- 解析起始位点 -->
<property
name=
"masterPosition"
>
<bean
class=
"com.alibaba.otter.canal.protocol.position.EntryPosition"
>
<property
name=
"journalName"
value=
"${canal.instance.master.journal.name}"
/>
<property
name=
"position"
value=
"${canal.instance.master.position}"
/>
<property
name=
"timestamp"
value=
"${canal.instance.master.timestamp}"
/>
</bean>
</property>
<property
name=
"standbyPosition"
>
<bean
class=
"com.alibaba.otter.canal.protocol.position.EntryPosition"
>
<property
name=
"journalName"
value=
"${canal.instance.standby.journal.name}"
/>
<property
name=
"position"
value=
"${canal.instance.standby.position}"
/>
<property
name=
"timestamp"
value=
"${canal.instance.standby.timestamp}"
/>
</bean>
</property>
<property
name=
"filterQueryDml"
value=
"${canal.instance.filter.query.dml:false}"
/>
<property
name=
"filterQueryDcl"
value=
"${canal.instance.filter.query.dcl:false}"
/>
<property
name=
"filterQueryDdl"
value=
"${canal.instance.filter.query.ddl:false}"
/>
<property
name=
"filterRows"
value=
"${canal.instance.filter.rows:false}"
/>
<property
name=
"filterTableError"
value=
"${canal.instance.filter.table.error:false}"
/>
<property
name=
"supportBinlogFormats"
value=
"${canal.instance.binlog.format}"
/>
<property
name=
"supportBinlogImages"
value=
"${canal.instance.binlog.image}"
/>
</bean>
</beans>
piplus-backend-v5-mycat-docker/Dockerfile
View file @
a9d8f5d9
# piplus v5 Mycat Dockerfile
FROM
ubuntu:14.04
FROM
centos:7
MAINTAINER
focus <focus@hudongpai.com>
RUN
\
mv
/etc/apt/sources.list /etc/apt/sources.list_bak
ADD
sources.list /etc/apt/
COPY
Mycat-server-1.5.1-RELEASE-20160810140521-linux.tar.gz /etc
ENV
MYCAT_VERSION 1.6-RELEASE
ENV
OSS pisns-oss-dev.oss-cn-hangzhou.aliyuncs.com
ENV
ROOT_DIR terran-devops
# Install myCat.
RUN
\
apt-get update
&&
\
apt-get
-y
upgrade
&&
\
apt-get
install
-y
python-software-properties
&&
\
apt-get
install
-y
software-properties-common
&&
\
add-apt-repository ppa:webupd8team/java
&&
\
apt-get update
&&
\
apt-get
install
-y
wget
&&
\
apt-get
install
-y
--force-yes
oracle-java8-installer
&&
\
update-java-alternatives
-s
java-8-oracle
&&
\
tar
zxf /etc/Mycat-server-1.5.1-RELEASE-20160810140521-linux.tar.gz
&&
\
rm -rf /etc/mycat/conf
yum
install
-y
java-1.8.0-openjdk.x86_64
&&
\
yum
install
-y
wget
&&
\
cd
/opt
&&
\
wget http://
$OSS
/
$ROOT_DIR
/lib/Mycat-server-
$MYCAT_VERSION
-linux
.tar.gz
&&
\
mkdir
/opt/mycat
&&
\
tar
zxvf Mycat-server-
$MYCAT_VERSION
-linux
.tar.gz
-C
/opt/mycat
&&
\
rm
-rf
/opt/mycat/conf
# Add src
ADD
conf /
etc/mycat/
ADD
conf /
opt/mycat/conf
# Define mountable directories.
VOLUME
["/etc/mycat/conf"]
VOLUME
["/opt/mycat/conf"]
# Expose ports.
EXPOSE
8066
# Define working directory.
WORKDIR
/
etc
/mycat/bin
WORKDIR
/
opt
/mycat/bin
# Define default command.
CMD
["mycat","start"]
piplus-backend-v5-mycat-docker/Mycat-server-1.5.1-RELEASE-20160810140521-linux.tar.gz
deleted
100755 → 0
View file @
792ad7c5
File deleted
piplus-backend-v5-rabbitmq-docker/Dockerfile
0 → 100644
View file @
a9d8f5d9
FROM
debian:jessie
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN
groupadd
-r
rabbitmq
&&
useradd
-r
-d
/var/lib/rabbitmq
-m
-g
rabbitmq rabbitmq
# grab gosu for easy step-down from root
ENV
GOSU_VERSION 1.7
RUN
set
-x
\
&&
apt-get update
&&
apt-get
install
-y
--no-install-recommends
ca-certificates wget
&&
rm
-rf
/var/lib/apt/lists/
*
\
&&
wget
-O
/usr/local/bin/gosu
"https://github.com/tianon/gosu/releases/download/
$GOSU_VERSION
/gosu-
$(
dpkg
--print-architecture
)
"
\
&&
wget
-O
/usr/local/bin/gosu.asc
"https://github.com/tianon/gosu/releases/download/
$GOSU_VERSION
/gosu-
$(
dpkg
--print-architecture
)
.asc"
\
&&
export
GNUPGHOME
=
"
$(
mktemp
-d
)
"
\
&&
gpg
--keyserver
ha.pool.sks-keyservers.net
--recv-keys
B42F6819007F00F88E364FD4036A9C25BF357DD4
\
&&
gpg
--batch
--verify
/usr/local/bin/gosu.asc /usr/local/bin/gosu
\
&&
rm
-r
"
$GNUPGHOME
"
/usr/local/bin/gosu.asc
\
&&
chmod
+x /usr/local/bin/gosu
\
&&
gosu nobody
true
\
&&
apt-get purge
-y
--auto-remove
ca-certificates wget
# Add the officially endorsed Erlang debian repository:
# See:
# - http://www.erlang.org/download.html
# - https://www.erlang-solutions.com/resources/download.html
RUN
apt-key adv
--keyserver
ha.pool.sks-keyservers.net
--recv-keys
434975BD900CCBE4F7EE1B1ED208507CA14F4FCA
RUN
echo
'deb http://packages.erlang-solutions.com/debian jessie contrib'
>
/etc/apt/sources.list.d/erlang.list
# install Erlang
RUN
apt-get update
\
&&
apt-get
install
-y
--no-install-recommends
\
erlang-asn1
\
erlang-base-hipe
\
erlang-crypto
\
erlang-eldap
\
erlang-inets
\
erlang-mnesia
\
erlang-nox
\
erlang-os-mon
\
erlang-public-key
\
erlang-ssl
\
erlang-xmerl
\
&&
rm
-rf
/var/lib/apt/lists/
*
# get logs to stdout (thanks @dumbbell for pushing this upstream! :D)
ENV
RABBITMQ_LOGS=- RABBITMQ_SASL_LOGS=-
# https://github.com/rabbitmq/rabbitmq-server/commit/53af45bf9a162dec849407d114041aad3d84feaf
# http://www.rabbitmq.com/install-debian.html
# "Please note that the word testing in this line refers to the state of our release of RabbitMQ, not any particular Debian distribution."
RUN
apt-key adv
--keyserver
ha.pool.sks-keyservers.net
--recv-keys
0A9AF2115F4687BD29803A206B73A36E6026DFCA
RUN
echo
'deb http://www.rabbitmq.com/debian testing main'
>
/etc/apt/sources.list.d/rabbitmq.list
ENV
RABBITMQ_VERSION 3.6.5
ENV
RABBITMQ_DEBIAN_VERSION 3.6.5-1
RUN
apt-get update
&&
apt-get
install
-y
--no-install-recommends
\
rabbitmq-server
=
$RABBITMQ_DEBIAN_VERSION
\
&&
rm
-rf
/var/lib/apt/lists/
*
# /usr/sbin/rabbitmq-server has some irritating behavior, and only exists to "su - rabbitmq /usr/lib/rabbitmq/bin/rabbitmq-server ..."
ENV
PATH /usr/lib/rabbitmq/bin:$PATH
RUN
echo
'[ { rabbit, [ { loopback_users, [ ] } ] } ].'
>
/etc/rabbitmq/rabbitmq.config
# set home so that any `--user` knows where to put the erlang cookie
ENV
HOME /var/lib/rabbitmq
RUN
mkdir
-p
/var/lib/rabbitmq /etc/rabbitmq /opt/rabbit
\
&&
chown
-R
rabbitmq:rabbitmq /var/lib/rabbitmq /etc/rabbitmq /opt/rabbit
\
&&
chmod
777 /var/lib/rabbitmq /etc/rabbitmq /opt/rabbit
VOLUME
/var/lib/rabbitmq
#cluster config
ENV
ERLANGCOOKIE ERLANGCOOKIE
ENV
CLUSTERED false
ENV
CLUSTER_WITH rabbit1
ENV
RAM_NODE false
RUN
echo
"
$ERLANGCOOKIE
"
>
/var/lib/rabbitmq/.erlang.cookie
ADD
startrabbit.sh /opt/rabbit/
RUN
chmod
a+x /opt/rabbit/startrabbit.sh
# add a symlink to the .erlang.cookie in /root so we can "docker exec rabbitmqctl ..." without gosu
RUN
ln
-sf
/var/lib/rabbitmq/.erlang.cookie /root/
RUN
ln
-sf
/usr/lib/rabbitmq/lib/rabbitmq_server-
$RABBITMQ_VERSION
/plugins /plugins
#enable management plugins
RUN
rabbitmq-plugins
enable
rabbitmq_mqtt rabbitmq_stomp rabbitmq_management rabbitmq_management_agent rabbitmq_management_visualiser rabbitmq_federation rabbitmq_federation_management sockjs
COPY
docker-entrypoint.sh /usr/local/bin/
RUN
ln
-s
usr/local/bin/docker-entrypoint.sh /
# backwards compat
RUN
chmod
a+x usr/local/bin/docker-entrypoint.sh
ENTRYPOINT
["docker-entrypoint.sh"]
EXPOSE
5672
EXPOSE
15672
EXPOSE
25672
EXPOSE
4369
EXPOSE
9100
EXPOSE
9101
EXPOSE
9102
EXPOSE
9103
EXPOSE
9104
EXPOSE
9105
CMD
/opt/rabbit/startrabbit.sh
piplus-backend-v5-rabbitmq-docker/README.md
0 → 100644
View file @
a9d8f5d9
piplus-backend-v5-rabbitmq-docker/docker-entrypoint.sh
0 → 100755
View file @
a9d8f5d9
#!/bin/bash
set
-eu
# allow the container to be started with `--user`
if
[[
"
$1
"
==
rabbitmq
*
]]
&&
[
"
$(
id
-u
)
"
=
'0'
]
;
then
if
[
"
$1
"
=
'rabbitmq-server'
]
;
then
chown
-R
rabbitmq /var/lib/rabbitmq
fi
exec
gosu rabbitmq
"
$BASH_SOURCE
"
"
$@
"
fi
# backwards compatibility for old environment variables
:
"
${
RABBITMQ_SSL_CERTFILE
:
=
${
RABBITMQ_SSL_CERT_FILE
:-}}
"
:
"
${
RABBITMQ_SSL_KEYFILE
:
=
${
RABBITMQ_SSL_KEY_FILE
:-}}
"
:
"
${
RABBITMQ_SSL_CACERTFILE
:
=
${
RABBITMQ_SSL_CA_FILE
:-}}
"
# "management" SSL config should default to using the same certs
:
"
${
RABBITMQ_MANAGEMENT_SSL_CACERTFILE
:
=
$RABBITMQ_SSL_CACERTFILE
}
"
:
"
${
RABBITMQ_MANAGEMENT_SSL_CERTFILE
:
=
$RABBITMQ_SSL_CERTFILE
}
"
:
"
${
RABBITMQ_MANAGEMENT_SSL_KEYFILE
:
=
$RABBITMQ_SSL_KEYFILE
}
"
# https://www.rabbitmq.com/configure.html
sslConfigKeys
=(
cacertfile
certfile
fail_if_no_peer_cert
keyfile
verify
)
managementConfigKeys
=(
"
${
sslConfigKeys
[@]/#/ssl_
}
"
)
rabbitConfigKeys
=(
default_pass
default_user
default_vhost
hipe_compile
)
fileConfigKeys
=(
management_ssl_cacertfile
management_ssl_certfile
management_ssl_keyfile
ssl_cacertfile
ssl_certfile
ssl_keyfile
)
allConfigKeys
=(
"
${
managementConfigKeys
[@]/#/management_
}
"
"
${
rabbitConfigKeys
[@]
}
"
"
${
sslConfigKeys
[@]/#/ssl_
}
"
)
declare
-A
configDefaults
=(
[
management_ssl_fail_if_no_peer_cert]
=
'false'
[
management_ssl_verify]
=
'verify_none'
[
ssl_fail_if_no_peer_cert]
=
'true'
[
ssl_verify]
=
'verify_peer'
)
haveConfig
=
haveSslConfig
=
haveManagementSslConfig
=
for
conf
in
"
${
allConfigKeys
[@]
}
"
;
do
var
=
"RABBITMQ_
${
conf
^^
}
"
val
=
"
${
!var
:-}
"
if
[
"
$val
"
]
;
then
haveConfig
=
1
case
"
$conf
"
in
ssl_
*
)
haveSslConfig
=
1
;;
management_ssl_
*
)
haveManagementSslConfig
=
1
;;
esac
fi
done
if
[
"
$haveSslConfig
"
]
;
then
missing
=()
for
sslConf
in
cacertfile certfile keyfile
;
do
var
=
"RABBITMQ_SSL_
${
sslConf
^^
}
"
val
=
"
${
!var
}
"
if
[
-z
"
$val
"
]
;
then
missing+
=(
"
$var
"
)
fi
done
if
[
"
${#
missing
[@]
}
"
-gt
0
]
;
then
{
echo
echo
'error: SSL requested, but missing required configuration'
for
miss
in
"
${
missing
[@]
}
"
;
do
echo
" -
$miss
"
done
echo
}
>
&2
exit
1
fi
fi
missingFiles
=()
for
conf
in
"
${
fileConfigKeys
[@]
}
"
;
do
var
=
"RABBITMQ_
${
conf
^^
}
"
val
=
"
${
!var
}
"
if
[
"
$val
"
]
&&
[
!
-f
"
$val
"
]
;
then
missingFiles+
=(
"
$val
(
$var
)"
)
fi
done
if
[
"
${#
missingFiles
[@]
}
"
-gt
0
]
;
then
{
echo
echo
'error: files specified, but missing'
for
miss
in
"
${
missingFiles
[@]
}
"
;
do
echo
" -
$miss
"
done
echo
}
>
&2
exit
1
fi
# set defaults for missing values (but only after we're done with all our checking so we don't throw any of that off)
for
conf
in
"
${
!configDefaults[@]
}
"
;
do
default
=
"
${
configDefaults
[
$conf
]
}
"
var
=
"RABBITMQ_
${
conf
^^
}
"
[
-z
"
${
!var
:-}
"
]
||
continue
eval
"export
$var
=
\"\$
default
\"
"
done
# If long & short hostnames are not the same, use long hostnames
if
[
"
$(
hostname
)
"
!=
"
$(
hostname
-s
)
"
]
;
then
:
"
${
RABBITMQ_USE_LONGNAME
:
=true
}
"
fi
if
[
"
${
RABBITMQ_ERLANG_COOKIE
:-}
"
]
;
then
cookieFile
=
'/var/lib/rabbitmq/.erlang.cookie'
if
[
-e
"
$cookieFile
"
]
;
then
if
[
"
$(
cat
"
$cookieFile
"
2>/dev/null
)
"
!=
"
$RABBITMQ_ERLANG_COOKIE
"
]
;
then
echo
>
&2
echo
>
&2
"warning:
$cookieFile
contents do not match RABBITMQ_ERLANG_COOKIE"
echo
>
&2
fi
else
echo
"
$RABBITMQ_ERLANG_COOKIE
"
>
"
$cookieFile
"
chmod
600
"
$cookieFile
"
fi
fi
# prints "$2$1$3$1...$N"
join
()
{
local
sep
=
"
$1
"
;
shift
local
out
;
printf
-v
out
"
${
sep
//%/%%
}
%s"
"
$@
"
echo
"
${
out
#
$sep
}
"
}
indent
()
{
if
[
"$#"
-gt
0
]
;
then
echo
"
$@
"
else
cat
fi
|
sed
's/^/\t/g'
}
rabbit_array
()
{
echo
-n
'['
case
"$#"
in
0
)
echo
-n
' '
;;
1
)
echo
-n
"
$1
"
;;
*
)
local
vals
=
"
$(
join
$',
\n
'
"
$@
"
)
"
echo
indent
"
$vals
"
esac
echo
-n
']'
}
rabbit_env_config
()
{
local
prefix
=
"
$1
"
;
shift
local
ret
=()
local
conf
for
conf
;
do
local
var
=
"rabbitmq
${
prefix
:+_
$prefix
}
_
$conf
"
var
=
"
${
var
^^
}
"
local
val
=
"
${
!var
:-}
"
local
rawVal
=
case
"
$conf
"
in
verify|fail_if_no_peer_cert
)
[
"
$val
"
]
||
continue
rawVal
=
"
$val
"
;;
hipe_compile
)
[
"
$val
"
]
&&
rawVal
=
'true'
||
rawVal
=
'false'
;;
cacertfile|certfile|keyfile
)
[
"
$val
"
]
||
continue
rawVal
=
'"'
"
$val
"
'"'
;;
*
)
[
"
$val
"
]
||
continue
rawVal
=
'<<"'
"
$val
"
'">>'
;;
esac
[
"
$rawVal
"
]
||
continue
ret+
=(
"{
$conf
,
$rawVal
}"
)
done
join
$'
\n
'
"
${
ret
[@]
}
"
}
if
[
"
$1
"
=
'rabbitmq-server'
]
&&
[
"
$haveConfig
"
]
;
then
fullConfig
=()
rabbitConfig
=(
"{ loopback_users,
$(
rabbit_array
)
}"
)
if
[
"
$haveSslConfig
"
]
;
then
IFS
=
$'
\n
'
rabbitSslOptions
=(
$(
rabbit_env_config
'ssl'
"
${
sslConfigKeys
[@]
}
"
)
)
unset
IFS
rabbitConfig+
=(
"{ tcp_listeners,
$(
rabbit_array
)
}"
"{ ssl_listeners,
$(
rabbit_array 5671
)
}"
"{ ssl_options,
$(
rabbit_array
"
${
rabbitSslOptions
[@]
}
"
)
}"
)
else
rabbitConfig+
=(
"{ tcp_listeners,
$(
rabbit_array 5672
)
}"
"{ ssl_listeners,
$(
rabbit_array
)
}"
)
fi
IFS
=
$'
\n
'
rabbitConfig+
=(
$(
rabbit_env_config
''
"
${
rabbitConfigKeys
[@]
}
"
)
)
unset
IFS
fullConfig+
=(
"{ rabbit,
$(
rabbit_array
"
${
rabbitConfig
[@]
}
"
)
}"
)
# If management plugin is installed, then generate config consider this
if
[
"
$(
rabbitmq-plugins list
-m
-e
rabbitmq_management
)
"
]
;
then
if
[
"
$haveManagementSslConfig
"
]
;
then
IFS
=
$'
\n
'
rabbitManagementSslOptions
=(
$(
rabbit_env_config
'management_ssl'
"
${
sslConfigKeys
[@]
}
"
)
)
unset
IFS
rabbitManagementListenerConfig+
=(
'{ port, 15671 }'
'{ ssl, true }'
"{ ssl_opts,
$(
rabbit_array
"
${
rabbitManagementSslOptions
[@]
}
"
)
}"
)
else
rabbitManagementListenerConfig+
=(
'{ port, 15672 }'
'{ ssl, false }'
)
fi
fullConfig+
=(
"{ rabbitmq_management,
$(
rabbit_array
"{ listener,
$(
rabbit_array
"
${
rabbitManagementListenerConfig
[@]
}
"
)
}"
)
}"
)
fi
echo
"
$(
rabbit_array
"
${
fullConfig
[@]
}
"
)
."
>
/etc/rabbitmq/rabbitmq.config
fi
combinedSsl
=
'/tmp/combined.pem'
if
[
"
$haveSslConfig
"
]
&&
[[
"
$1
"
==
rabbitmq
*
]]
&&
[
!
-f
"
$combinedSsl
"
]
;
then
# Create combined cert
cat
"
$RABBITMQ_SSL_CERTFILE
"
"
$RABBITMQ_SSL_KEYFILE
"
>
"
$combinedSsl
"
chmod
0400
"
$combinedSsl
"
fi
if
[
"
$haveSslConfig
"
]
&&
[
-f
"
$combinedSsl
"
]
;
then
# More ENV vars for make clustering happiness
# we don't handle clustering in this script, but these args should ensure
# clustered SSL-enabled members will talk nicely
export
ERL_SSL_PATH
=
"
$(
erl
-eval
'io:format("~p", [code:lib_dir(ssl, ebin)]),halt().'
-noshell
)
"
export
RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS
=
"-pa
$ERL_SSL_PATH
-proto_dist inet_tls -ssl_dist_opt server_certfile
$combinedSsl
-ssl_dist_opt server_secure_renegotiate true client_secure_renegotiate true"
export
RABBITMQ_CTL_ERL_ARGS
=
"
$RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS
"
fi
exec
"
$@
"
piplus-backend-v5-rabbitmq-docker/startrabbit.sh
0 → 100755
View file @
a9d8f5d9
#!/bin/bash
if
[
"
$CLUSTERED
"
==
"false"
]
;
then
# if not clustered then start it normally as if it is a single server
/usr/sbin/rabbitmq-server
else
if
[
-z
"
$CLUSTER_WITH
"
]
;
then
# If clustered, but cluster with is not specified then again start normally, could be the first server in the
# cluster
/usr/sbin/rabbitmq-server
else
/usr/sbin/rabbitmq-server
-detached
rabbitmqctl stop_app
if
[
-z
"
$RAM_NODE
"
]
;
then
rabbitmqctl join_cluster rabbit@
$CLUSTER_WITH
else
rabbitmqctl join_cluster
--ram
rabbit@
$CLUSTER_WITH
fi
rabbitmqctl start_app
# Tail to keep the a foreground process active..
tail
-f
/var/log/rabbitmq/rabbit
\@
$HOSTNAME
.log
fi
fi
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment