Merge branch 'master' into feature/entity-data-query

This commit is contained in:
Igor Kulikov 2020-07-08 15:23:53 +03:00
commit 6c5971a12c
27 changed files with 1930 additions and 44 deletions

View File

@ -378,7 +378,7 @@
<repository> <repository>
<id>jenkins</id> <id>jenkins</id>
<name>Jenkins Repository</name> <name>Jenkins Repository</name>
<url>http://repo.jenkins-ci.org/releases</url> <url>https://repo.jenkins-ci.org/releases</url>
<snapshots> <snapshots>
<enabled>false</enabled> <enabled>false</enabled>
</snapshots> </snapshots>

View File

@ -48,6 +48,8 @@ public class CassandraTsDatabaseUpgradeService extends AbstractCassandraDatabase
} }
log.info("Schema updated."); log.info("Schema updated.");
break; break;
case "2.5.0":
break;
default: default:
throw new RuntimeException("Unable to upgrade Cassandra database, unsupported fromVersion: " + fromVersion); throw new RuntimeException("Unable to upgrade Cassandra database, unsupported fromVersion: " + fromVersion);
} }

View File

@ -189,6 +189,8 @@ cassandra:
keyspace_name: "${CASSANDRA_KEYSPACE_NAME:thingsboard}" keyspace_name: "${CASSANDRA_KEYSPACE_NAME:thingsboard}"
# Specify node list # Specify node list
url: "${CASSANDRA_URL:127.0.0.1:9042}" url: "${CASSANDRA_URL:127.0.0.1:9042}"
# Specify local datacenter name
local_datacenter: "${CASSANDRA_LOCAL_DATACENTER:datacenter1}"
# Enable/disable secure connection # Enable/disable secure connection
ssl: "${CASSANDRA_USE_SSL:false}" ssl: "${CASSANDRA_USE_SSL:false}"
# Enable/disable JMX # Enable/disable JMX

View File

@ -36,6 +36,8 @@ public abstract class AbstractCassandraCluster {
private Boolean jmx; private Boolean jmx;
@Value("${cassandra.metrics}") @Value("${cassandra.metrics}")
private Boolean metrics; private Boolean metrics;
@Value("${cassandra.local_datacenter:datacenter1}")
private String localDatacenter;
@Autowired @Autowired
private CassandraDriverOptions driverOptions; private CassandraDriverOptions driverOptions;
@ -82,7 +84,7 @@ public abstract class AbstractCassandraCluster {
if (this.keyspaceName != null) { if (this.keyspaceName != null) {
this.sessionBuilder.withKeyspace(this.keyspaceName); this.sessionBuilder.withKeyspace(this.keyspaceName);
} }
this.sessionBuilder.withLocalDatacenter("datacenter1"); this.sessionBuilder.withLocalDatacenter(localDatacenter);
session = sessionBuilder.build(); session = sessionBuilder.build();
if (this.metrics && this.jmx) { if (this.metrics && this.jmx) {
MetricRegistry registry = MetricRegistry registry =

View File

@ -4,6 +4,8 @@ cassandra.keyspace_name=thingsboard
cassandra.url=127.0.0.1:9142 cassandra.url=127.0.0.1:9142
cassandra.local_datacenter=datacenter1
cassandra.ssl=false cassandra.ssl=false
cassandra.jmx=false cassandra.jmx=false

View File

@ -215,7 +215,7 @@
<repository> <repository>
<id>jenkins</id> <id>jenkins</id>
<name>Jenkins Repository</name> <name>Jenkins Repository</name>
<url>http://repo.jenkins-ci.org/releases</url> <url>https://repo.jenkins-ci.org/releases</url>
<snapshots> <snapshots>
<enabled>false</enabled> <enabled>false</enabled>
</snapshots> </snapshots>

View File

@ -180,7 +180,7 @@
<repository> <repository>
<id>jenkins</id> <id>jenkins</id>
<name>Jenkins Repository</name> <name>Jenkins Repository</name>
<url>http://repo.jenkins-ci.org/releases</url> <url>https://repo.jenkins-ci.org/releases</url>
<snapshots> <snapshots>
<enabled>false</enabled> <enabled>false</enabled>
</snapshots> </snapshots>

View File

@ -8,6 +8,15 @@ This project provides the build for the ThingsBoard single docker images.
## Running ## Running
Before starting Docker container run following command to create a directory for storing data and change its owner to docker container user.
To be able to change user, **chown** command is used, which requires sudo permissions (command will request password for a sudo access):
`
$ mkdir -p ~/.mytb-data && sudo chown -R 799:799 ~/.mytb-data
`
**NOTE**: replace directory `~/.mytb-data` with directory you're planning to use on container creation.
In this example `thingsboard/tb` image will be used. You can choose any other images with different databases (see above). In this example `thingsboard/tb` image will be used. You can choose any other images with different databases (see above).
Execute the following command to run this docker directly: Execute the following command to run this docker directly:

View File

@ -22,15 +22,13 @@ RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main' | tee
RUN curl -L https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - RUN curl -L https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
RUN echo 'deb http://www.apache.org/dist/cassandra/debian 311x main' | tee --append /etc/apt/sources.list.d/cassandra.list > /dev/null RUN echo 'deb http://www.apache.org/dist/cassandra/debian 311x main' | tee --append /etc/apt/sources.list.d/cassandra.list > /dev/null
RUN curl -L https://www.apache.org/dist/cassandra/KEYS | apt-key add - RUN curl -L https://www.apache.org/dist/cassandra/KEYS | apt-key add -
ENV PG_MAJOR=11
RUN apt-get update RUN apt-get update
RUN apt-get install -y cassandra cassandra-tools postgresql-11 RUN apt-get install -y cassandra cassandra-tools postgresql-11
RUN update-rc.d cassandra disable RUN update-rc.d cassandra disable
RUN update-rc.d postgresql disable RUN update-rc.d postgresql disable
RUN sed -i.old '/ulimit/d' /etc/init.d/cassandra RUN sed -i.old '/ulimit/d' /etc/init.d/cassandra
RUN mkdir -p /var/log/postgres
RUN chown -R postgres:postgres /var/log/postgres
COPY logback.xml ${pkg.name}.conf start-db.sh stop-db.sh start-tb.sh upgrade-tb.sh install-tb.sh ${pkg.name}.deb /tmp/ COPY logback.xml ${pkg.name}.conf start-db.sh stop-db.sh start-tb.sh upgrade-tb.sh install-tb.sh ${pkg.name}.deb /tmp/
RUN chmod a+x /tmp/*.sh \ RUN chmod a+x /tmp/*.sh \
@ -58,11 +56,38 @@ ENV CASSANDRA_DATA=/data/cassandra
ENV SPRING_JPA_DATABASE_PLATFORM=org.hibernate.dialect.PostgreSQLDialect ENV SPRING_JPA_DATABASE_PLATFORM=org.hibernate.dialect.PostgreSQLDialect
ENV SPRING_DRIVER_CLASS_NAME=org.postgresql.Driver ENV SPRING_DRIVER_CLASS_NAME=org.postgresql.Driver
ENV SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/thingsboard ENV SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/thingsboard
ENV SPRING_DATASOURCE_USERNAME=postgres ENV SPRING_DATASOURCE_USERNAME=${pkg.user}
ENV SPRING_DATASOURCE_PASSWORD=postgres ENV SPRING_DATASOURCE_PASSWORD=postgres
ENV CASSANDRA_HOST=localhost ENV CASSANDRA_HOST=localhost
ENV CASSANDRA_PORT=9042 ENV CASSANDRA_PORT=9042
ENV CASSANDRA_HOME=/opt/cassandra
ENV PATH=$CASSANDRA_HOME/bin:$PATH
ENV PATH=$PATH:/usr/lib/postgresql/$PG_MAJOR/bin
ENV PGLOG=/var/log/postgres
ENV CASSANDRA_LOG=/var/log/cassandra
# postgres config
RUN mkdir -p $PGLOG
RUN chown -R ${pkg.user}:${pkg.user} $PGLOG
RUN chown -R ${pkg.user}:${pkg.user} /var/log/postgresql
RUN chown -R ${pkg.user}:${pkg.user} /var/run/postgresql
# cassandra config
RUN rm -rf /var/lib/cassandra
RUN chmod a+w /var/lib
RUN chown -R ${pkg.user}:${pkg.user} $CASSANDRA_LOG
RUN mkdir -p $DATA_FOLDER
RUN chown -R ${pkg.user}:${pkg.user} $DATA_FOLDER
RUN chown -R ${pkg.user}:${pkg.user} /var/log/${pkg.name}
RUN chmod 555 ${pkg.installFolder}/bin/${pkg.name}.jar
USER ${pkg.user}
EXPOSE 9090 EXPOSE 9090
EXPOSE 1883 EXPOSE 1883

View File

@ -17,35 +17,30 @@
firstlaunch=${DATA_FOLDER}/.firstlaunch firstlaunch=${DATA_FOLDER}/.firstlaunch
export PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl) PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl)
if [ ! -d ${PGDATA} ]; then if [ ! -d ${PGDATA} ]; then
mkdir -p ${PGDATA} mkdir -p ${PGDATA}
chown -R postgres:postgres ${PGDATA} ${PG_CTL} initdb
su postgres -c '${PG_CTL} initdb -U postgres'
fi fi
su postgres -c '${PG_CTL} -l /var/log/postgres/postgres.log -w start' exec setsid nohup postgres >> ${PGLOG}/postgres.log 2>&1 &
if [ ! -f ${firstlaunch} ]; then if [ ! -f ${firstlaunch} ]; then
su postgres -c 'psql -U postgres -d postgres -c "CREATE DATABASE thingsboard"' psql -U ${pkg.user} -d postgres -c "CREATE DATABASE thingsboard"
fi fi
cassandra_data_dir=${CASSANDRA_DATA} cassandra_data_dir=${CASSANDRA_DATA}
cassandra_data_link=/var/lib/cassandra cassandra_data_link=/var/lib/cassandra
if [ ! -L ${cassandra_data_link} ]; then if [ ! -L ${cassandra_data_link} ]; then
if [ -d ${cassandra_data_link} ]; then
rm -rf ${cassandra_data_link}
fi
if [ ! -d ${cassandra_data_dir} ]; then if [ ! -d ${cassandra_data_dir} ]; then
mkdir -p ${cassandra_data_dir} mkdir -p ${cassandra_data_dir}
chown -R cassandra:cassandra ${cassandra_data_dir}
fi fi
ln -s ${cassandra_data_dir} ${cassandra_data_link} ln -s ${cassandra_data_dir} ${cassandra_data_link}
fi fi
service cassandra start exec setsid nohup cassandra >> ${CASSANDRA_LOG}/cassandra.log 2>&1 &
until nmap $CASSANDRA_HOST -p $CASSANDRA_PORT | grep "$CASSANDRA_PORT/tcp open" until nmap $CASSANDRA_HOST -p $CASSANDRA_PORT | grep "$CASSANDRA_PORT/tcp open"
do do

View File

@ -15,7 +15,18 @@
# limitations under the License. # limitations under the License.
# #
export PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl) CASSANDRA_PID=$(ps aux | grep '[c]assandra' | awk '{print $2}')
service cassandra stop echo "Stopping cassandra (pid ${CASSANDRA_PID})."
su postgres -c '${PG_CTL} stop' kill -SIGTERM ${CASSANDRA_PID}
PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl)
echo "Stopping postgres."
${PG_CTL} stop
while [ -e /proc/${CASSANDRA_PID} ]
do
echo "Waiting for cassandra to stop."
sleep 2
done
echo "Cassandra was stopped."

View File

@ -20,13 +20,11 @@ RUN apt-get update
RUN apt-get install -y curl RUN apt-get install -y curl
RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main' | tee --append /etc/apt/sources.list.d/pgdg.list > /dev/null RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main' | tee --append /etc/apt/sources.list.d/pgdg.list > /dev/null
RUN curl -L https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - RUN curl -L https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
ENV PG_MAJOR 11
RUN apt-get update RUN apt-get update
RUN apt-get install -y postgresql-11 RUN apt-get install -y postgresql-11
RUN update-rc.d postgresql disable RUN update-rc.d postgresql disable
RUN mkdir -p /var/log/postgres
RUN chown -R postgres:postgres /var/log/postgres
COPY logback.xml ${pkg.name}.conf start-db.sh stop-db.sh start-tb.sh upgrade-tb.sh install-tb.sh ${pkg.name}.deb /tmp/ COPY logback.xml ${pkg.name}.conf start-db.sh stop-db.sh start-tb.sh upgrade-tb.sh install-tb.sh ${pkg.name}.deb /tmp/
RUN chmod a+x /tmp/*.sh \ RUN chmod a+x /tmp/*.sh \
@ -49,13 +47,29 @@ ENV HTTP_BIND_PORT=9090
ENV DATABASE_TS_TYPE=sql ENV DATABASE_TS_TYPE=sql
ENV PGDATA=/data/db ENV PGDATA=/data/db
ENV PATH=$PATH:/usr/lib/postgresql/$PG_MAJOR/bin
ENV SPRING_JPA_DATABASE_PLATFORM=org.hibernate.dialect.PostgreSQLDialect ENV SPRING_JPA_DATABASE_PLATFORM=org.hibernate.dialect.PostgreSQLDialect
ENV SPRING_DRIVER_CLASS_NAME=org.postgresql.Driver ENV SPRING_DRIVER_CLASS_NAME=org.postgresql.Driver
ENV SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/thingsboard ENV SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/thingsboard
ENV SPRING_DATASOURCE_USERNAME=postgres ENV SPRING_DATASOURCE_USERNAME=${pkg.user}
ENV SPRING_DATASOURCE_PASSWORD=postgres ENV SPRING_DATASOURCE_PASSWORD=postgres
ENV PGLOG=/var/log/postgres
RUN mkdir -p $PGLOG
RUN chown -R ${pkg.user}:${pkg.user} $PGLOG
RUN chown -R ${pkg.user}:${pkg.user} /var/run/postgresql
RUN mkdir -p /data
RUN chown -R ${pkg.user}:${pkg.user} /data
RUN chown -R ${pkg.user}:${pkg.user} /var/log/${pkg.name}
RUN chmod 555 ${pkg.installFolder}/bin/${pkg.name}.jar
USER ${pkg.user}
EXPOSE 9090 EXPOSE 9090
EXPOSE 1883 EXPOSE 1883
EXPOSE 5683/udp EXPOSE 5683/udp

View File

@ -17,16 +17,15 @@
firstlaunch=${DATA_FOLDER}/.firstlaunch firstlaunch=${DATA_FOLDER}/.firstlaunch
export PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl) PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl)
if [ ! -d ${PGDATA} ]; then if [ ! -d ${PGDATA} ]; then
mkdir -p ${PGDATA} mkdir -p ${PGDATA}
chown -R postgres:postgres ${PGDATA} ${PG_CTL} initdb
su postgres -c '${PG_CTL} initdb -U postgres'
fi fi
su postgres -c '${PG_CTL} -l /var/log/postgres/postgres.log -w start' exec setsid nohup postgres >> ${PGLOG}/postgres.log 2>&1 &
if [ ! -f ${firstlaunch} ]; then if [ ! -f ${firstlaunch} ]; then
su postgres -c 'psql -U postgres -d postgres -c "CREATE DATABASE thingsboard"' psql -U ${pkg.user} -d postgres -c "CREATE DATABASE thingsboard"
fi fi

View File

@ -15,6 +15,6 @@
# limitations under the License. # limitations under the License.
# #
export PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl) PG_CTL=$(find /usr/lib/postgresql/ -name pg_ctl)
su postgres -c '${PG_CTL} stop' ${PG_CTL} stop

View File

@ -43,6 +43,13 @@ ENV SPRING_DATASOURCE_URL=jdbc:hsqldb:file:/data/db/thingsboardDb;sql.enforce_si
ENV SPRING_DATASOURCE_USERNAME=sa ENV SPRING_DATASOURCE_USERNAME=sa
ENV SPRING_DATASOURCE_PASSWORD= ENV SPRING_DATASOURCE_PASSWORD=
RUN mkdir -p /data
RUN chown -R ${pkg.user}:${pkg.user} /data
RUN chmod 555 ${pkg.installFolder}/bin/${pkg.name}.jar
USER ${pkg.user}
EXPOSE 9090 EXPOSE 9090
EXPOSE 1883 EXPOSE 1883
EXPOSE 5683/udp EXPOSE 5683/udp

View File

@ -360,7 +360,7 @@
<repository> <repository>
<id>jenkins</id> <id>jenkins</id>
<name>Jenkins Repository</name> <name>Jenkins Repository</name>
<url>http://repo.jenkins-ci.org/releases</url> <url>https://repo.jenkins-ci.org/releases</url>
<snapshots> <snapshots>
<enabled>false</enabled> <enabled>false</enabled>
</snapshots> </snapshots>

View File

@ -180,7 +180,7 @@
<repository> <repository>
<id>jenkins</id> <id>jenkins</id>
<name>Jenkins Repository</name> <name>Jenkins Repository</name>
<url>http://repo.jenkins-ci.org/releases</url> <url>https://repo.jenkins-ci.org/releases</url>
<snapshots> <snapshots>
<enabled>false</enabled> <enabled>false</enabled>
</snapshots> </snapshots>

View File

@ -180,7 +180,7 @@
<repository> <repository>
<id>jenkins</id> <id>jenkins</id>
<name>Jenkins Repository</name> <name>Jenkins Repository</name>
<url>http://repo.jenkins-ci.org/releases</url> <url>https://repo.jenkins-ci.org/releases</url>
<snapshots> <snapshots>
<enabled>false</enabled> <enabled>false</enabled>
</snapshots> </snapshots>

View File

@ -180,7 +180,7 @@
<repository> <repository>
<id>jenkins</id> <id>jenkins</id>
<name>Jenkins Repository</name> <name>Jenkins Repository</name>
<url>http://repo.jenkins-ci.org/releases</url> <url>https://repo.jenkins-ci.org/releases</url>
<snapshots> <snapshots>
<enabled>false</enabled> <enabled>false</enabled>
</snapshots> </snapshots>

View File

@ -432,7 +432,7 @@
<repository> <repository>
<id>jenkins</id> <id>jenkins</id>
<name>Jenkins Repository</name> <name>Jenkins Repository</name>
<url>http://repo.jenkins-ci.org/releases</url> <url>https://repo.jenkins-ci.org/releases</url>
<snapshots> <snapshots>
<enabled>false</enabled> <enabled>false</enabled>
</snapshots> </snapshots>

View File

@ -38,6 +38,7 @@ import javax.crypto.spec.PBEKeySpec;
import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.TrustManagerFactory;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.security.AlgorithmParameters; import java.security.AlgorithmParameters;
import java.security.Key; import java.security.Key;
import java.security.KeyFactory; import java.security.KeyFactory;
@ -142,7 +143,9 @@ public class CertPemClientCredentials implements MqttClientCredentials {
.replaceAll("\\s", ""); .replaceAll("\\s", "");
byte[] decoded = Base64.decodeBase64(fileContent); byte[] decoded = Base64.decodeBase64(fileContent);
CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
certificate = (X509Certificate) certFactory.generateCertificate(new ByteArrayInputStream(decoded)); try (InputStream inStream = new ByteArrayInputStream(decoded)) {
certificate = (X509Certificate) certFactory.generateCertificate(inStream);
}
} }
return certificate; return certificate;
} }

View File

@ -123,7 +123,7 @@
<repository> <repository>
<id>jenkins</id> <id>jenkins</id>
<name>Jenkins Repository</name> <name>Jenkins Repository</name>
<url>http://repo.jenkins-ci.org/releases</url> <url>https://repo.jenkins-ci.org/releases</url>
<snapshots> <snapshots>
<enabled>false</enabled> <enabled>false</enabled>
</snapshots> </snapshots>

View File

@ -123,7 +123,7 @@
<repository> <repository>
<id>jenkins</id> <id>jenkins</id>
<name>Jenkins Repository</name> <name>Jenkins Repository</name>
<url>http://repo.jenkins-ci.org/releases</url> <url>https://repo.jenkins-ci.org/releases</url>
<snapshots> <snapshots>
<enabled>false</enabled> <enabled>false</enabled>
</snapshots> </snapshots>

View File

@ -123,7 +123,7 @@
<repository> <repository>
<id>jenkins</id> <id>jenkins</id>
<name>Jenkins Repository</name> <name>Jenkins Repository</name>
<url>http://repo.jenkins-ci.org/releases</url> <url>https://repo.jenkins-ci.org/releases</url>
<snapshots> <snapshots>
<enabled>false</enabled> <enabled>false</enabled>
</snapshots> </snapshots>

View File

@ -2050,7 +2050,8 @@
"cs_CZ": "Česky", "cs_CZ": "Česky",
"el_GR": "Ελληνικά", "el_GR": "Ελληνικά",
"ro_RO": "Română", "ro_RO": "Română",
"lv_LV": "Latviešu" "lv_LV": "Latviešu",
"ka_GE": "ქართული"
} }
} }
} }

View File

@ -9,7 +9,7 @@
"refresh-token-failed": "No se puede actualizar la sesión" "refresh-token-failed": "No se puede actualizar la sesión"
}, },
"action": { "action": {
"activate": "Activar", "activate": "Activar",
"suspend": "Suspender", "suspend": "Suspender",
"save": "Guardar", "save": "Guardar",
"saveAs": "Guardar como", "saveAs": "Guardar como",
@ -965,7 +965,7 @@
}, },
"extension": { "extension": {
"extensions": "Extensiones", "extensions": "Extensiones",
"selected-extensions": "{ count, plural, 1 {1 extension} de {# extensions} } seleccionadas", "selected-extensions": "{ count, plural, 1 {1 extension} other {# extensions} } seleccionadas",
"type": "Tipo", "type": "Tipo",
"key": "Clave", "key": "Clave",
"value": "Valor", "value": "Valor",

File diff suppressed because it is too large Load Diff