You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@linkis.apache.org by le...@apache.org on 2022/07/13 04:03:59 UTC
[incubator-linkis] branch dev-1.3.0 updated: [Feature] Add Dockerfile to linkis-dist module for both linkis backends and web (#2447)
This is an automated email from the ASF dual-hosted git repository.
legendtkl pushed a commit to branch dev-1.3.0
in repository https://gitbox.apache.org/repos/asf/incubator-linkis.git
The following commit(s) were added to refs/heads/dev-1.3.0 by this push:
new 3dd1d4cd6 [Feature] Add Dockerfile to linkis-dist module for both linkis backends and web (#2447)
3dd1d4cd6 is described below
commit 3dd1d4cd6ff94cd87abb7cab0943b7dee44f5767
Author: Aaron Lin <51...@users.noreply.github.com>
AuthorDate: Wed Jul 13 12:03:54 2022 +0800
[Feature] Add Dockerfile to linkis-dist module for both linkis backends and web (#2447)
* [Feature] add Dockerfile to linkis-dist module for both linkis backend and web
* fix error on build non-dev image
---
README.md | 9 ++-
linkis-dist/bin/install.sh | 2 +-
linkis-dist/docker/Dockerfile | 99 ++++++++++++++++++++++++
linkis-dist/package/sbin/ext/linkis-common-start | 30 ++++---
linkis-dist/package/sbin/ext/linkis-mg-eureka | 33 +++++---
linkis-dist/package/sbin/ext/linkis-mg-gateway | 31 +++++---
linkis-dist/pom.xml | 85 +++++++++++++++++++-
pom.xml | 1 +
web/pom.xml | 68 ++++++++++++++++
9 files changed, 327 insertions(+), 31 deletions(-)
diff --git a/README.md b/README.md
index a929eadf9..dfa59252f 100644
--- a/README.md
+++ b/README.md
@@ -76,8 +76,15 @@ Please go to the [Linkis Releases Page](https://github.com/apache/incubator-link
## compile backend
### Mac OS/Linux
+# 1. When compiling for the first time, execute the following command first
./mvnw -N install
-./mvnw clean install -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
+# 2. make the linkis distribution package
+# - Option 1: make the linkis distribution package only
+./mvnw clean install -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
+# - Option 2: make the linkis distribution package and docker image
+./mvnw clean install -Pdocker -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
+# - Option 3: linkis distribution package and docker image (included web)
+./mvnw clean install -Pdocker -Dmaven.javadoc.skip=true -Dmaven.test.skip=true -Dlinkis.build.web=true
### Windows
mvnw.cmd -N install
diff --git a/linkis-dist/bin/install.sh b/linkis-dist/bin/install.sh
index 9ccd30cb2..5ebbfd98e 100644
--- a/linkis-dist/bin/install.sh
+++ b/linkis-dist/bin/install.sh
@@ -256,7 +256,7 @@ MYSQL_PASSWORD=$(echo ${MYSQL_PASSWORD//'#'/'\#'})
#init db
if [[ '2' = "$MYSQL_INSTALL_MODE" ]];then
- mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD --default-character-set=utf8 -e "CREATE DATABASE IF NOT EXISTS $MYSQL_DB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;"
+ mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD --default-character-set=utf8 -e "CREATE DATABASE IF NOT EXISTS $MYSQL_DB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;"
mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD -D$MYSQL_DB --default-character-set=utf8 -e "source ${LINKIS_HOME}/db/linkis_ddl.sql"
isSuccess "source linkis_ddl.sql"
mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD -D$MYSQL_DB --default-character-set=utf8 -e "source ${LINKIS_HOME}/db/linkis_dml.sql"
diff --git a/linkis-dist/docker/Dockerfile b/linkis-dist/docker/Dockerfile
new file mode 100644
index 000000000..ba7657206
--- /dev/null
+++ b/linkis-dist/docker/Dockerfile
@@ -0,0 +1,99 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+######################################################################
+# linkis image
+######################################################################
+
+ARG IMAGE_BASE=centos:7
+ARG IMAGE_BASE_WEB=nginx:1.19.6
+
+FROM ${IMAGE_BASE} as linkis
+
+ARG BUILD_TYPE=dev
+
+ARG JDK_VERSION=1.8.0-openjdk
+ARG JDK_BUILD_REVISION=1.8.0.332.b09-1.el7_9
+
+ARG MYSQL_JDBC_VERSION=5.1.49
+
+ARG LINKIS_VERSION=0.0.0
+ARG LINKIS_SYSTEM_USER="hadoop"
+ARG LINKIS_SYSTEM_UID="9001"
+
+ARG LINKIS_HOME=/opt/linkis
+ARG LINKIS_CONF_DIR=/etc/linkis-conf
+ARG LINKIS_LOG_DIR=/var/logs/linkis
+
+WORKDIR ${LINKIS_HOME}
+
+RUN useradd -r -s /bin/bash -u ${LINKIS_SYSTEM_UID} -g root -G wheel ${LINKIS_SYSTEM_USER}
+
+# TODO: remove install mysql client when schema-init-tools is ready
+RUN yum install -y \
+ vim unzip curl sudo krb5-workstation sssd crontabs python-pip \
+ java-${JDK_VERSION}-${JDK_BUILD_REVISION} \
+ java-${JDK_VERSION}-devel-${JDK_BUILD_REVISION} \
+ mysql \
+ && yum clean all
+
+RUN sed -i "s#^%wheel.*#%wheel ALL=(ALL) NOPASSWD: ALL#g" /etc/sudoers
+
+RUN mkdir -p /opt/tmp \
+ && mkdir -p ${LINKIS_CONF_DIR} \
+ && mkdir -p ${LINKIS_LOG_DIR}
+
+ENV JAVA_HOME /etc/alternatives/jre
+ENV LINKIS_CONF_DIR ${LINKIS_CONF_DIR}
+ENV LINKIS_CLIENT_CONF_DIR ${LINKIS_CONF_DIR}
+ENV LINKIS_HOME ${LINKIS_HOME}
+
+ADD apache-linkis-${LINKIS_VERSION}-incubating-bin.tar.gz /opt/tmp/
+
+RUN mv /opt/tmp/linkis-package/* ${LINKIS_HOME}/ \
+ && rm -rf /opt/tmp
+
+# Put mysql-connector-java-*.jar package into the image only in development mode
+RUN if [ "$BUILD_TYPE" = "dev" ] ; then \
+ curl -L -o ${LINKIS_HOME}/lib/linkis-commons/public-module/mysql-connector-java-${MYSQL_JDBC_VERSION}.jar \
+ https://repo1.maven.org/maven2/mysql/mysql-connector-java/${MYSQL_JDBC_VERSION}/mysql-connector-java-${MYSQL_JDBC_VERSION}.jar \
+ && cp ${LINKIS_HOME}/lib/linkis-commons/public-module/mysql-connector-java-${MYSQL_JDBC_VERSION}.jar ${LINKIS_HOME}/lib/linkis-spring-cloud-services/linkis-mg-gateway/ ;\
+ fi
+
+RUN chmod g+w -R ${LINKIS_HOME} && chown ${LINKIS_SYSTEM_USER}:${LINKIS_SYSTEM_GROUP} -R ${LINKIS_HOME} \
+ && chmod g+w -R ${LINKIS_CONF_DIR} && chown ${LINKIS_SYSTEM_USER}:${LINKIS_SYSTEM_GROUP} -R ${LINKIS_CONF_DIR} \
+ && chmod g+w -R ${LINKIS_LOG_DIR} && chown ${LINKIS_SYSTEM_USER}:${LINKIS_SYSTEM_GROUP} -R ${LINKIS_LOG_DIR} \
+ && chmod a+x ${LINKIS_HOME}/bin/* \
+ && chmod a+x ${LINKIS_HOME}/sbin/*
+
+USER ${LINKIS_SYSTEM_USER}
+
+ENTRYPOINT ["/bin/bash"]
+
+
+######################################################################
+# linkis web image
+######################################################################
+FROM ${IMAGE_BASE_WEB} as linkis-web
+
+ARG LINKIS_VERSION=0.0.0
+ARG LINKIS_HOME=/opt/linkis
+
+ENV LINKIS_WEB_ROOT ${LINKIS_HOME}-web
+
+RUN mkdir -p ${LINKIS_HOME}-web
+COPY apache-linkis-web-${LINKIS_VERSION}-dist/dist ${LINKIS_HOME}-web
diff --git a/linkis-dist/package/sbin/ext/linkis-common-start b/linkis-dist/package/sbin/ext/linkis-common-start
index d2a15e2b3..c93ce958c 100644
--- a/linkis-dist/package/sbin/ext/linkis-common-start
+++ b/linkis-dist/package/sbin/ext/linkis-common-start
@@ -73,15 +73,25 @@ fi
export SERVER_CLASS_PATH=$SERVER_CONF_PATH:$LINKIS_COMMONS_LIB/*:$SERVER_LIB/*
echo "=====Java Start Command====="
-echo "nohup java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1 > $LINKIS_LOG_DIR/${SERVER_NAME}.out &"
-nohup java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1 > $LINKIS_LOG_DIR/${SERVER_NAME}.out &
-pid=$!
-sleep 2
-if [[ -z "${pid}" ]]; then
- echo "server $SERVER_NAME start failed!"
- exit 1
+if [ "X${RUN_IN_FOREGROUND}" == "Xtrue" ]; then
+
+ echo "java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1"
+ java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1
+
else
- echo "server $SERVER_NAME start succeeded!"
- echo $pid > $SERVER_PID
-fi
\ No newline at end of file
+
+ echo "nohup java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1 > $LINKIS_LOG_DIR/${SERVER_NAME}.out &"
+ nohup java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1 > $LINKIS_LOG_DIR/${SERVER_NAME}.out &
+
+ pid=$!
+ sleep 2
+ if [[ -z "${pid}" ]]; then
+ echo "server $SERVER_NAME start failed!"
+ exit 1
+ else
+ echo "server $SERVER_NAME start succeeded!"
+ echo $pid > $SERVER_PID
+ fi
+
+fi
diff --git a/linkis-dist/package/sbin/ext/linkis-mg-eureka b/linkis-dist/package/sbin/ext/linkis-mg-eureka
index 63ba5c1e3..f89a5bc04 100644
--- a/linkis-dist/package/sbin/ext/linkis-mg-eureka
+++ b/linkis-dist/package/sbin/ext/linkis-mg-eureka
@@ -90,16 +90,31 @@ else
fi
SPRING_ARGS="$SPRING_ARGS --spring.profiles.active=eureka"
+
echo "=====Java Start Command====="
-echo "nohup java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1 > $LINKIS_LOG_DIR/${SERVER_NAME}.out &"
-nohup java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1 > $LINKIS_LOG_DIR/${SERVER_NAME}.out &
-pid=$!
-sleep 2
-if [[ -z "${pid}" ]]; then
- echo "server $SERVER_NAME start failed!"
- exit 1
+if [ "X${RUN_IN_FOREGROUND}" == "Xtrue" ]; then
+
+ echo "java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1"
+ java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1
+
else
- echo "server $SERVER_NAME start succeeded!"
- echo $pid > $SERVER_PID
+
+ echo "nohup java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1 > $LINKIS_LOG_DIR/${SERVER_NAME}.out &"
+ nohup java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1 > $LINKIS_LOG_DIR/${SERVER_NAME}.out &
+
+ pid=$!
+ sleep 2
+ if [[ -z "${pid}" ]]; then
+ echo "server $SERVER_NAME start failed!"
+ exit 1
+ else
+ echo "server $SERVER_NAME start succeeded!"
+ echo $pid > $SERVER_PID
+
+ if [ "X${RUN_IN_FOREGROUND}" == "Xtrue" ]; then
+ wait $pid || exit -1
+ fi
+ fi
+
fi
diff --git a/linkis-dist/package/sbin/ext/linkis-mg-gateway b/linkis-dist/package/sbin/ext/linkis-mg-gateway
index d65b93566..bc51387bd 100644
--- a/linkis-dist/package/sbin/ext/linkis-mg-gateway
+++ b/linkis-dist/package/sbin/ext/linkis-mg-gateway
@@ -76,16 +76,29 @@ fi
export SERVER_CLASS_PATH=$SERVER_CONF_PATH:$SERVER_LIB/*
echo "=====Java Start Command====="
-echo "nohup java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1 > $LINKIS_LOG_DIR/${SERVER_NAME}.out &"
-nohup java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1 > $LINKIS_LOG_DIR/${SERVER_NAME}.out &
+if [ "X${RUN_IN_FOREGROUND}" == "Xtrue" ]; then
+
+ echo "java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1"
+ java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1
-pid=$!
-sleep 2
-if [[ -z "${pid}" ]]; then
- echo "server $SERVER_NAME start failed!"
- exit 1
else
- echo "server $SERVER_NAME start succeeded!"
- echo $pid > $SERVER_PID
+
+ echo "nohup java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1 > $LINKIS_LOG_DIR/${SERVER_NAME}.out &"
+ nohup java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1 > $LINKIS_LOG_DIR/${SERVER_NAME}.out &
+
+ pid=$!
+ sleep 2
+ if [[ -z "${pid}" ]]; then
+ echo "server $SERVER_NAME start failed!"
+ exit 1
+ else
+ echo "server $SERVER_NAME start succeeded!"
+ echo $pid > $SERVER_PID
+
+ if [ "X${RUN_IN_FOREGROUND}" == "Xtrue" ]; then
+ wait $pid || exit -1
+ fi
+ fi
+
fi
diff --git a/linkis-dist/pom.xml b/linkis-dist/pom.xml
index 81039bc19..545fb20ba 100644
--- a/linkis-dist/pom.xml
+++ b/linkis-dist/pom.xml
@@ -218,4 +218,87 @@
</plugins>
</build>
-</project>
\ No newline at end of file
+ <profiles>
+ <profile>
+ <id>docker</id>
+ <properties>
+ <image.build.type>dev</image.build.type>
+ <image.base>centos:7</image.base>
+ <image.base.web>nginx:1.19.6</image.base.web>
+ <jdk.version>1.8.0-openjdk</jdk.version>
+ <jdk.build.revision>1.8.0.332.b09-1.el7_9</jdk.build.revision>
+ <linkis.system.user>hadoop</linkis.system.user>
+ <linkis.system.uid>9001</linkis.system.uid>
+ <linkis.home>/opt/linkis</linkis.home>
+ <linkis.conf.dir>/etc/linkis-conf</linkis.conf.dir>
+ <linkis.log.dir>/var/logs/linkis</linkis.log.dir>
+ </properties>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>build-linkis-image</id>
+ <phase>install</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <target name="linkis-image">
+ <exec executable="docker" failonerror="true" >
+ <arg value="build" />
+ <arg value="-f" /> <arg value="${project.basedir}/docker/Dockerfile" />
+ <arg value="-t" /> <arg value="${project.parent.artifactId}:${project.version}" />
+ <arg value="--target" /> <arg value="linkis" />
+ <arg value="--build-arg" /> <arg value="IMAGE_BASE=${image.base}" />
+ <arg value="--build-arg" /> <arg value="JDK_VERSION=${jdk.version}" />
+ <arg value="--build-arg" /> <arg value="JDK_BUILD_REVISION=${jdk.build.revision}" />
+ <arg value="--build-arg" /> <arg value="LINKIS_VERSION=${project.version}" />
+ <arg value="--build-arg" /> <arg value="MYSQL_JDBC_VERSION=${mysql.connector.version}" />
+ <arg value="--build-arg" /> <arg value="BUILD_TYPE=${image.build.type}" />
+ <arg value="--build-arg" /> <arg value="LINKIS_SYSTEM_USER=${linkis.system.user}" />
+ <arg value="--build-arg" /> <arg value="LINKIS_SYSTEM_UID=${linkis.system.uid}" />
+ <arg value="--build-arg" /> <arg value="LINKIS_HOME=${linkis.home}" />
+ <arg value="--build-arg" /> <arg value="LINKIS_CONF_DIR=${linkis.conf.dir}" />
+ <arg value="--build-arg" /> <arg value="LINKIS_LOG_DIR=${linkis.log.dir}" />
+ <arg value="${project.build.directory}" />
+ </exec>
+ </target>
+ </configuration>
+ </execution>
+ <execution>
+ <id>build-linkis-web-image</id>
+ <phase>install</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <target name="linkis-web-image" if="linkis.build.web">
+ <echo message="Building linkis web image ..." />
+ <mkdir dir="${basedir}/target/apache-linkis-web-${project.version}-dist" />
+ <copy todir="${basedir}/target/apache-linkis-web-${project.version}-dist">
+ <fileset dir="${basedir}/../web/dist" includes="**" />
+ </copy>
+ <exec executable="docker" failonerror="true" >
+ <arg value="build" />
+ <arg value="-f" /> <arg value="${project.basedir}/docker/Dockerfile" />
+ <arg value="-t" /> <arg value="${project.parent.artifactId}-web:${project.version}" />
+ <arg value="--target" /> <arg value="linkis-web" />
+ <arg value="--build-arg" /> <arg value="IMAGE_BASE_WEB=${image.base.web}" />
+ <arg value="--build-arg" /> <arg value="LINKIS_VERSION=${project.version}" />
+ <arg value="--build-arg" /> <arg value="LINKIS_HOME=${linkis.home}" />
+ <arg value="${project.build.directory}" />
+ </exec>
+ </target>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/pom.xml b/pom.xml
index 91e851de7..cb3f07a4a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -96,6 +96,7 @@
<module>linkis-computation-governance</module>
<module>linkis-engineconn-plugins</module>
<module>linkis-extensions</module>
+ <module>web</module>
<module>linkis-dist</module>
</modules>
<properties>
diff --git a/web/pom.xml b/web/pom.xml
new file mode 100644
index 000000000..a470a2374
--- /dev/null
+++ b/web/pom.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>linkis</artifactId>
+ <groupId>org.apache.linkis</groupId>
+ <version>1.1.3</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>linkis-web</artifactId>
+ <packaging>pom</packaging>
+
+ <profiles>
+ <profile>
+ <id>web</id>
+ <activation>
+ <property>
+ <name>linkis.build.web</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>build</id>
+ <phase>install</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <target>
+ <exec executable="npm" failonerror="true">
+ <arg value="run" />
+ <arg value="build" />
+ </exec>
+ </target>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+</project>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@linkis.apache.org
For additional commands, e-mail: commits-help@linkis.apache.org