From fe4d1d63361bfe0e7a82093b5965d2f36edc7927 Mon Sep 17 00:00:00 2001 From: Doro Wu Date: Tue, 10 Jul 2018 09:31:46 +0800 Subject: [PATCH] feat: support Ubuntu 18.04 Bionic --- Dockerfile | 95 +------------------- Dockerfile.amd64 | 94 +++++++++++++++++++ image/usr/local/lib/web/backend/vnc/state.py | 10 ++- web/package.json | 2 +- 4 files changed, 104 insertions(+), 97 deletions(-) mode change 100644 => 120000 Dockerfile create mode 100644 Dockerfile.amd64 diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index c4ce792..0000000 --- a/Dockerfile +++ /dev/null @@ -1,94 +0,0 @@ -################################################################################ -# base system -################################################################################ -FROM ubuntu:16.04 as system - -ARG localbuild -RUN if [ "x$localbuild" != "x" ]; then sed -i 's#http://archive.ubuntu.com/#http://tw.archive.ubuntu.com/#' /etc/apt/sources.list; fi - -# built-in packages -RUN apt-get update \ - && apt-get install -y --no-install-recommends software-properties-common curl apache2-utils \ - && add-apt-repository ppa:fcwu-tw/apps \ - && apt-get update \ - && apt-get install -y --no-install-recommends --allow-unauthenticated \ - supervisor nginx sudo vim-tiny net-tools zenity xz-utils \ - dbus-x11 x11-utils alsa-utils \ - mesa-utils libgl1-mesa-dri \ - lxde x11vnc xvfb \ - gtk2-engines-murrine gnome-themes-standard gtk2-engines-pixbuf gtk2-engines-murrine arc-theme \ - firefox chromium-browser \ - ttf-ubuntu-font-family ttf-wqy-zenhei \ - && add-apt-repository -r ppa:fcwu-tw/apps \ - && apt-get autoclean \ - && apt-get autoremove \ - && rm -rf /var/lib/apt/lists/* -# Additional packages require ~600MB -# libreoffice pinta language-pack-zh-hant language-pack-gnome-zh-hant firefox-locale-zh-hant libreoffice-l10n-zh-tw - -# tini for subreap -ARG TINI_VERSION=v0.9.0 -ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /bin/tini -RUN chmod +x /bin/tini - -# ffmpeg -RUN mkdir -p /usr/local/ffmpeg \ - && curl -sSL https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz | tar xJvf - -C /usr/local/ffmpeg/ --strip 1 - -# python library -COPY image/usr/local/lib/web/backend/requirements.txt /tmp/ -RUN apt-get update \ - && dpkg-query -W -f='${Package}\n' > /tmp/a.txt \ - && apt-get install -y python-pip python-dev build-essential \ - && pip install setuptools wheel && pip install -r /tmp/requirements.txt \ - && dpkg-query -W -f='${Package}\n' > /tmp/b.txt \ - && apt-get remove -y `diff --changed-group-format='%>' --unchanged-group-format='' /tmp/a.txt /tmp/b.txt | xargs` \ - && apt-get autoclean -y \ - && apt-get autoremove -y \ - && rm -rf /var/lib/apt/lists/* \ - && rm -rf /var/cache/apt/* /tmp/a.txt /tmp/b.txt - - -################################################################################ -# builder -################################################################################ -FROM ubuntu:16.04 as builder - -ARG localbuild -RUN if [ "x$localbuild" != "x" ]; then sed -i 's#http://archive.ubuntu.com/#http://tw.archive.ubuntu.com/#' /etc/apt/sources.list; fi - -RUN apt-get update \ - && apt-get install -y --no-install-recommends curl ca-certificates - -# nodejs -RUN curl -sL https://deb.nodesource.com/setup_9.x | bash - \ - && apt-get install -y nodejs - -# yarn -RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ - && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ - && apt-get update \ - && apt-get install -y yarn - -# build frontend -COPY web /src/web -RUN cd /src/web \ - && yarn \ - && npm run build - - -################################################################################ -# merge -################################################################################ -FROM system -LABEL maintainer="fcwu.tw@gmail.com" - -COPY --from=builder /src/web/dist/ /usr/local/lib/web/frontend/ -COPY image / - -EXPOSE 80 -WORKDIR /root -ENV HOME=/home/ubuntu \ - SHELL=/bin/bash -HEALTHCHECK --interval=30s --timeout=5s CMD curl --fail http://127.0.0.1/api/health -ENTRYPOINT ["/startup.sh"] diff --git a/Dockerfile b/Dockerfile new file mode 120000 index 0000000..0fc2233 --- /dev/null +++ b/Dockerfile @@ -0,0 +1 @@ +Dockerfile.amd64 \ No newline at end of file diff --git a/Dockerfile.amd64 b/Dockerfile.amd64 new file mode 100644 index 0000000..8434c0f --- /dev/null +++ b/Dockerfile.amd64 @@ -0,0 +1,94 @@ +################################################################################ +# base system +################################################################################ +FROM ubuntu:18.04 as system + +ARG localbuild +RUN if [ "x$localbuild" != "x" ]; then sed -i 's#http://archive.ubuntu.com/#http://tw.archive.ubuntu.com/#' /etc/apt/sources.list; fi + +# && add-apt-repository ppa:fcwu-tw/apps x11vnc +# built-in packages +RUN apt-get update \ + && apt-get install -y --no-install-recommends software-properties-common curl apache2-utils \ + && apt-get update \ + && apt-get install -y --no-install-recommends --allow-unauthenticated \ + supervisor nginx sudo vim-tiny net-tools zenity xz-utils \ + dbus-x11 x11-utils alsa-utils \ + mesa-utils libgl1-mesa-dri \ + lxde xvfb x11vnc \ + gtk2-engines-murrine gnome-themes-standard gtk2-engines-pixbuf gtk2-engines-murrine arc-theme \ + firefox chromium-browser \ + ttf-ubuntu-font-family ttf-wqy-zenhei \ + && add-apt-repository -r ppa:fcwu-tw/apps \ + && apt-get autoclean \ + && apt-get autoremove \ + && rm -rf /var/lib/apt/lists/* +# Additional packages require ~600MB +# libreoffice pinta language-pack-zh-hant language-pack-gnome-zh-hant firefox-locale-zh-hant libreoffice-l10n-zh-tw + +# tini for subreap +ARG TINI_VERSION=v0.18.0 +ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /bin/tini +RUN chmod +x /bin/tini + +# ffmpeg +RUN mkdir -p /usr/local/ffmpeg \ + && curl -sSL https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz | tar xJvf - -C /usr/local/ffmpeg/ --strip 1 + +# python library +COPY image/usr/local/lib/web/backend/requirements.txt /tmp/ +RUN apt-get update \ + && dpkg-query -W -f='${Package}\n' > /tmp/a.txt \ + && apt-get install -y python-pip python-dev build-essential \ + && pip install setuptools wheel && pip install -r /tmp/requirements.txt \ + && dpkg-query -W -f='${Package}\n' > /tmp/b.txt \ + && apt-get remove -y `diff --changed-group-format='%>' --unchanged-group-format='' /tmp/a.txt /tmp/b.txt | xargs` \ + && apt-get autoclean -y \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* \ + && rm -rf /var/cache/apt/* /tmp/a.txt /tmp/b.txt + + +################################################################################ +# builder +################################################################################ +FROM ubuntu:16.04 as builder + +ARG localbuild +RUN if [ "x$localbuild" != "x" ]; then sed -i 's#http://archive.ubuntu.com/#http://tw.archive.ubuntu.com/#' /etc/apt/sources.list; fi + +RUN apt-get update \ + && apt-get install -y --no-install-recommends curl ca-certificates + +# nodejs +RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - \ + && apt-get install -y nodejs + +# yarn +RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ + && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ + && apt-get update \ + && apt-get install -y yarn + +# build frontend +COPY web /src/web +RUN cd /src/web \ + && yarn \ + && npm run build + + +################################################################################ +# merge +################################################################################ +FROM system +LABEL maintainer="fcwu.tw@gmail.com" + +COPY --from=builder /src/web/dist/ /usr/local/lib/web/frontend/ +COPY image / + +EXPOSE 80 +WORKDIR /root +ENV HOME=/home/ubuntu \ + SHELL=/bin/bash +HEALTHCHECK --interval=30s --timeout=5s CMD curl --fail http://127.0.0.1/api/health +ENTRYPOINT ["/startup.sh"] diff --git a/image/usr/local/lib/web/backend/vnc/state.py b/image/usr/local/lib/web/backend/vnc/state.py index c547811..88eea50 100644 --- a/image/usr/local/lib/web/backend/vnc/state.py +++ b/image/usr/local/lib/web/backend/vnc/state.py @@ -28,7 +28,10 @@ class State(object): def _update_health(self): health = True - output = gsp.check_output(['supervisorctl', 'status']) + output = gsp.check_output([ + 'supervisorctl', '-c', '/etc/supervisor/supervisord.conf', + 'status' + ]) for line in output.strip().split('\n'): if not line.startswith('web') and line.find('RUNNING') < 0: health = False @@ -68,7 +71,10 @@ class State(object): self.size_changed_count += 1 def apply_and_restart(self): - gsp.check_call(['supervisorctl', 'restart', 'x:']) + gsp.check_call([ + 'supervisorctl', '-c', '/etc/supervisor/supervisord.conf', + 'restart', 'x:' + ]) self._w = self._h = self._health = None self.notify() diff --git a/web/package.json b/web/package.json index 01cba2d..6ef6fe8 100644 --- a/web/package.json +++ b/web/package.json @@ -71,7 +71,7 @@ "webpack-merge": "^4.1.0" }, "engines": { - "node": ">= 9.0.0", + "node": ">= 8.0.0", "npm": ">= 3.0.0" }, "browserslist": [