From 54f3cc778dd2fff75f253572ff99f097531b5c61 Mon Sep 17 00:00:00 2001 From: alexeybannov Date: Tue, 8 Oct 2019 15:00:41 +0000 Subject: [PATCH] docker: init commit --- build/install/docker/Dockerfile | 125 ++++++++++++++++++ .../docker/config/mysql/conf.d/mysql.cnf | 7 + .../docker/config/supervisor/supervisord.conf | 64 +++++++++ 3 files changed, 196 insertions(+) create mode 100644 build/install/docker/Dockerfile create mode 100644 build/install/docker/config/mysql/conf.d/mysql.cnf create mode 100644 build/install/docker/config/supervisor/supervisord.conf diff --git a/build/install/docker/Dockerfile b/build/install/docker/Dockerfile new file mode 100644 index 0000000000..06525a37d2 --- /dev/null +++ b/build/install/docker/Dockerfile @@ -0,0 +1,125 @@ +FROM ubuntu:18.04 + +ARG RELEASE_DATE="2016-06-21" +ARG RELEASE_DATE_SIGN="" +ARG VERSION="8.9.0.190" +ARG SOURCE_REPO_URL="deb http://static.teamlab.com.s3.amazonaws.com/repo/debian squeeze main" +ARG DEBIAN_FRONTEND=noninteractive + +LABEL onlyoffice.community.release-date="${RELEASE_DATE}" \ + onlyoffice.community.version="${VERSION}" \ + maintainer="Ascensio System SIA " + +ENV LANG=en_US.UTF-8 \ + LANGUAGE=en_US:en \ + LC_ALL=en_US.UTF-8 + +RUN apt-get -y update && \ + apt-get -yq install gnupg2 ca-certificates && \ + apt-get install -yq sudo locales && \ + addgroup --system --gid 107 onlyoffice && \ + adduser -uid 104 --quiet --home /var/www/onlyoffice --system --gid 107 onlyoffice && \ + addgroup --system --gid 104 elasticsearch && \ + adduser -uid 103 --quiet --home /nonexistent --system --gid 104 elasticsearch && \ + locale-gen en_US.UTF-8 && \ + apt-get -y update && \ + apt-get install -yq software-properties-common wget curl cron rsyslog && \ + wget http://nginx.org/keys/nginx_signing.key && \ + apt-key add nginx_signing.key && \ + echo "deb http://nginx.org/packages/mainline/ubuntu/ bionic nginx" >> /etc/apt/sources.list.d/nginx.list && \ + echo "deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx" >> /etc/apt/sources.list.d/nginx.list && \ + apt-get install -yq openjdk-8-jre-headless && \ + wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add - && \ + apt-get install -yq apt-transport-https && \ + echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-6.x.list && \ + apt-get -y update && \ + apt-get install -yq elasticsearch=6.5.0 && \ + add-apt-repository -y ppa:certbot/certbot && \ + add-apt-repository -y ppa:jonathonf/ffmpeg-4 && \ + curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - && \ + apt-get install -y nodejs && \ + curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && \ + echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list && \ + wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb && \ + dpkg -i packages-microsoft-prod.deb && \ + apt-get -y update && \ + apt-get install -yq nginx && \ + cd ~ && \ + wget http://www-us.apache.org/dist/kafka/2.2.1/kafka_2.12-2.2.1.tgz && \ + tar xzf kafka_2.12-2.2.1.tgz && \ + rm kafka_2.12-2.2.1.tgz && \ + echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \ + apt-get install -yq dumb-init python-certbot-nginx htop nano dnsutils python3-pip multiarch-support iproute2 ffmpeg jq git yarn dotnet-sdk-3.0 supervisor mysql-client mysql-server + +RUN git clone https://github.com/ONLYOFFICE/CommunityServer-AspNetCore.git /app/onlyoffice/src/ + +RUN cd /app/onlyoffice/src/ && \ + yarn install --cwd web/ASC.Web.Components --frozen-lockfile > build/ASC.Web.Components.log && \ + npm run build --prefix web/ASC.Web.Components && \ + yarn pack --cwd web/ASC.Web.Components + +RUN cd /app/onlyoffice/src/ && \ + npm run build:storybook --prefix web/ASC.Web.Components && \ + mkdir -p /var/www/story/ && \ + cp -Rf web/ASC.Web.Components/storybook-static/* /var/www/story/ + +RUN cd /app/onlyoffice/src/ && \ + component=$(ls web/ASC.Web.Components/asc-web-components-v1.*.tgz) && \ + yarn add ../../$component --cwd web/ASC.Web.Client --cache-folder ../../yarn && \ + yarn install --cwd web/ASC.Web.Client --frozen-lockfile || (cd web/ASC.Web.Client && npm i && cd ../../) && \ + npm run build --prefix web/ASC.Web.Client && \ + rm -rf /var/www/studio/client/* && \ + mkdir -p /var/www/studio/client && \ + cp -rf web/ASC.Web.Client/build/* /var/www/studio/client + +RUN cd /app/onlyoffice/src/ && \ + component=$(ls web/ASC.Web.Components/asc-web-components-v1.*.tgz) && \ + yarn add ../../../$component --cwd products/ASC.People/Client --cache-folder ../../../yarn && \ + yarn install --cwd products/ASC.People/Client --frozen-lockfile || (cd products/ASC.People/Client && npm i && cd ../../../) && \ + npm run build --prefix products/ASC.People/Client && \ + mkdir -p /var/www/products/ASC.People/client && \ + cp -Rf products/ASC.People/Client/build/* /var/www/products/ASC.People/client && \ + mkdir -p /var/www/products/ASC.People/client/products/people + +RUN cd /app/onlyoffice/src/ && \ + rm -f /etc/nginx/conf.d/* && \ + cp -rf config/nginx/onlyoffice*.conf /etc/nginx/conf.d/ && \ + mkdir -p /app/onlyoffice/config/ && cp -rf config/* /app/onlyoffice/config/ && \ + sed -e 's/#//' -i /etc/nginx/conf.d/onlyoffice.conf && \ + cd products/ASC.People/Server && \ + dotnet -d publish -o /var/www/products/ASC.People/Server && \ + cd ../../../ && \ + cd web/ASC.Web.Api && \ + dotnet -d publish -o /var/www/studio/api && \ + cd ../../ && \ + cd web/ASC.Web.Studio && \ + dotnet -d publish -o /var/www/studio/server && \ + cd ../../ && \ + cd common/services/ASC.Notify && \ + dotnet -d publish -o /var/www/services/notify && \ + cd ../../../ && \ + cd common/services/ASC.Studio.Notify && \ + dotnet -d publish -o /var/www/services/studio.notify + +COPY config/mysql/conf.d/mysql.cnf /etc/mysql/conf.d/mysql.cnf +COPY config/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf + +RUN mkdir -p /var/mysqld/ && \ + chown -R mysql:mysql /var/lib/mysql /var/run/mysqld /var/mysqld/ && \ + service mysql start && \ + mysql -e "CREATE DATABASE IF NOT EXISTS onlyoffice CHARACTER SET utf8 COLLATE 'utf8_general_ci'" && \ + mysql -D "onlyoffice" < /app/onlyoffice/src/sql/app.sql && \ + mysql -D "onlyoffice" < /app/onlyoffice/src/sql/app.data.sql && \ + mysql -D "onlyoffice" -e 'CREATE USER IF NOT EXISTS "dev"@"localhost" IDENTIFIED WITH mysql_native_password BY "dev";' && \ + mysql -D "onlyoffice" -e 'GRANT ALL PRIVILEGES ON *.* TO 'dev'@'localhost' IDENTIFIED BY "dev";' && \ + mysql -D "onlyoffice" -e 'UPDATE core_user SET email = "paul.bannov@gmail.com";' && \ + mysql -D "onlyoffice" -e 'UPDATE core_usersecurity SET pwdhash = "vLFfghR5tNV3K9DKhmwArV+SbjWAcgZZzIDTnJ0JgCo=", pwdhashsha512 = "USubvPlB+ogq0Q1trcSupg==";' && \ + service mysql stop + +RUN rm -rf /var/lib/apt/lists/* + +VOLUME /var/lib/mysql + +EXPOSE 80 443 8092 8081 + +ENTRYPOINT ["/usr/bin/supervisord", "--"] diff --git a/build/install/docker/config/mysql/conf.d/mysql.cnf b/build/install/docker/config/mysql/conf.d/mysql.cnf new file mode 100644 index 0000000000..44f9c0b865 --- /dev/null +++ b/build/install/docker/config/mysql/conf.d/mysql.cnf @@ -0,0 +1,7 @@ +[mysqld] +sql_mode = 'NO_ENGINE_SUBSTITUTION' +max_connections = 1000 +max_allowed_packet = 1048576000 +group_concat_max_len = 2048 +log-error = /var/log/mysql/error.log + diff --git a/build/install/docker/config/supervisor/supervisord.conf b/build/install/docker/config/supervisor/supervisord.conf new file mode 100644 index 0000000000..4ded17cf1c --- /dev/null +++ b/build/install/docker/config/supervisor/supervisord.conf @@ -0,0 +1,64 @@ +[supervisord] +nodaemon=true + +[program:mysqld] +command=/usr/bin/pidproxy /var/mysqld/mysqld.pid /usr/bin/mysqld_safe --pid-file=/var/mysqld/mysqld.pid +autostart=true +autorestart=true +environment=PATH=/usr/local/sbin:/usr/bin:/bin:/usr/local/bin +user=mysql + +[program:kafka] +directory=/root/kafka_2.12-2.2.1/ +command=/root/kafka_2.12-2.2.1/bin/kafka-server-start.sh /root/kafka_2.12-2.2.1/config/server.properties +autostart=true +autorestart=true + +[program:kafka_zookeeper] +directory=/root/kafka_2.12-2.2.1/ +command=/root/kafka_2.12-2.2.1/bin/zookeeper-server-start.sh /root/kafka_2.12-2.2.1/config/zookeeper.properties +autostart=true +autorestart=true + +[program:api] +directory=/var/www/studio/api/ +command=dotnet ASC.Web.Api.dll --urls=http://0.0.0.0:5000 --pathToConf=/app/onlyoffice/config/ --$STORAGE_ROOT=/app/onlyoffice/data/ +autostart=true +autorestart=true + +[program:notify] +directory=/var/www/services/notify/ +command=dotnet ASC.Notify.dll --urls=http://0.0.0.0:5005 --pathToConf=/app/onlyoffice/config/ --$STORAGE_ROOT=/app/onlyoffice/data/ --ENVIRONMENT=test +autostart=true +autorestart=true + +[program:studio_notify] +directory=/var/www/services/studio.notify/ +command=dotnet ASC.Studio.Notify.dll --urls=http://0.0.0.0:5006 --pathToConf=/app/onlyoffice/config/ --$STORAGE_ROOT=/app/onlyoffice/data/ --ENVIRONMENT=test +autostart=true +autorestart=true + +[program:people] +directory=/var/www/products/ASC.People/Server/ +command=dotnet ASC.People.dll --urls=http://0.0.0.0:5004 --pathToConf=/app/onlyoffice/config/ --$STORAGE_ROOT=/app/onlyoffice/data/ +autostart=true +autorestart=true + +[program:studio] +directory=/var/www/studio/server/ +command=dotnet ASC.Web.Studio.dll --urls=http://0.0.0.0:5003 --pathToConf=/app/onlyoffice/config/ --$STORAGE_ROOT=/app/onlyoffice/data/ +autostart=true +autorestart=true + +[program:nginx] +command=/usr/sbin/nginx -g "daemon off;" +autostart=true +autorestart=true +startretries=5 +numprocs=1 +startsecs=0 +process_name=%(program_name)s_%(process_num)02d +stderr_logfile=/var/log/supervisor/%(program_name)s_stderr.log +stderr_logfile_maxbytes=10MB +stdout_logfile=/var/log/supervisor/%(program_name)s_stdout.log +stdout_logfile_maxbytes=10MB