985: Permit raspberry pi (and other architectures) builds r=mergify[bot] a=abondis

## What type of PR?

Enhancement

## What does this PR do?

Add an option to select base images and permit building for different CPU architectures.

### Related issue(s)
N/A

## Prerequistes

- [X] documentation updated accordingly
- [x] Unless it's docs or a minor change: add [changelog](https://mailu.io/master/contributors/guide.html#changelog) entry file.


Co-authored-by: Aurélien Bondis <aurelien.bondis@gmail.com>
Co-authored-by: Aurelien <aurelien.bondis@gmail.com>
master
bors[bot] 5 years ago committed by GitHub
commit 0417c791ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

1
.gitignore vendored

@ -13,3 +13,4 @@ pip-selfcheck.json
/docker-compose.yml
/.idea
/.vscode
qemu-arm-static

@ -1,5 +1,8 @@
# First stage to build assets
FROM node:8 as assets
ARG DISTRO=alpine:3.10
ARG ARCH=""
FROM ${ARCH}node:8 as assets
COPY --from=balenalib/rpi-alpine:3.10 /usr/bin/qemu-arm-static /usr/bin/qemu-arm-static
COPY package.json ./
RUN npm install
@ -11,7 +14,7 @@ RUN mkdir static \
# Actual application
FROM alpine:3.10
FROM $DISTRO
# python3 shared with most images
RUN apk add --no-cache \
python3 py3-pip git bash \
@ -40,5 +43,4 @@ ENV FLASK_APP mailu
CMD /start.py
HEALTHCHECK CMD curl -f -L http://localhost/ui/login?next=ui.index || exit 1
HEALTHCHECK CMD curl -f -L http://localhost/ui/login?next=ui.index || exit 1

@ -1,4 +1,5 @@
FROM alpine:3.10
ARG DISTRO=alpine:3.10
FROM $DISTRO
# python3 shared with most images
RUN apk add --no-cache \
python3 py3-pip git bash \

@ -1,4 +1,5 @@
FROM alpine:3.10
ARG DISTRO=alpine:3.10
FROM $DISTRO
# python3 shared with most images
RUN apk add --no-cache \
python3 py3-pip git bash \

@ -1,5 +1,6 @@
# This is an idle image to dynamically replace any component if disabled.
FROM alpine:3.10
ARG DISTRO=alpine:3.10
FROM $DISTRO
CMD sleep 1000000d

@ -1,4 +1,5 @@
FROM alpine:3.10
ARG DISTRO=alpine:3.10
FROM $DISTRO
# python3 shared with most images
RUN apk add --no-cache \
python3 py3-pip git bash \

@ -1,12 +1,13 @@
FROM python:3-alpine
ARG DISTRO=alpine:3.8
FROM $DISTRO
COPY requirements.txt /requirements.txt
ARG version=master
ENV VERSION=$version
RUN pip install -r /requirements.txt \
&& apk add --no-cache nginx curl \
RUN apk add --no-cache nginx curl python3 \
&& pip3 install -r /requirements.txt \
&& mkdir /run/nginx
COPY ./nginx.conf /etc/nginx/conf.d/default.conf

@ -0,0 +1,25 @@
.. _rpi_build:
Building for a Raspberry Pi
===========================
The build does not need to be done on the Pi.
To do so, go to ``tests/`` and call ``./build_arm.sh``, it will build all
necessary images for arm.
To push the locally built images to a remote server, run ``./deploy_to_pi.sh``.
Docker 18.09+ is needed to use ``-H ssh://<user>@<host>``.
Adjustments
-----------
``build_arm.sh`` uses some variables passed as ``build-arg`` to docker-compose:
- ``ALPINE_VER``: version of ALPINE to use
- ``DISTRO``: is the main distro used. Dockerfiles are set on Alpine 3.10, and
build script overrides for ``balenalib/rpi-alpine:3.10``
- ``QEMU``: Used by webmails dockerfiles. It will add ``qemu-arm-static`` only
if ``QEMU`` is set to ``arm``
- ``ARCH``: Architecture to use for ``admin``, and ``webmails`` as their images
are available for those architectures.

@ -19,9 +19,7 @@ Prepare the environment
Mailu images are designed to work on x86 or equivalent hardware, so it
should run on pretty much any cloud server as long as enough power is
provided. If you find yourself running Mailu on small hardware, e.g.
Raspberry Pi or other platforms based on ARM, you will probably find
some support from `MFAshby's fork`_.
provided. For non x86 machines, see :ref:`rpi_build`
You are free to choose any operating system that runs Docker (>= 1.11),
then chose between various flavors including Docker Compose, Kubernetes
@ -34,7 +32,6 @@ You should also have at least a DNS hostname and a DNS name for receiving
emails. Some instructions are provided on the matter in the article
:ref:`dns_setup`.
.. _`MFAshby's fork`: https://github.com/MFAshby/Mailu
Pick a Mailu version
--------------------

@ -1,4 +1,5 @@
FROM alpine:3.10
ARG DISTRO=alpine:3.10
FROM $DISTRO
# python3 shared with most images
RUN apk add --no-cache \
python3 py3-pip bash \

@ -1,4 +1,5 @@
FROM alpine:3.10
ARG DISTRO=alpine:3.10
FROM $DISTRO
# python3 shared with most images
RUN apk add --no-cache \
python3 py3-pip bash \

@ -1,4 +1,5 @@
FROM alpine:3.10
ARG DISTRO=alpine:3.10
FROM $DISTRO
RUN echo "@testing http://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \
&& apk add --no-cache radicale@testing curl bash

@ -1,5 +1,6 @@
# First stage: Build
FROM alpine:3.10 as builder
ARG DISTRO=alpine:3.10
FROM $DISTRO as builder
# build dependencies
RUN apk add --no-cache curl tar xz autoconf git gettext build-base openssl openssl-dev
@ -10,7 +11,8 @@ RUN cd fetchmail-7.0.0-alpha6 && \
./configure --with-ssl --prefix /usr/local --disable-nls && \
make
FROM alpine:3.10
ARG DISTRO=alpine:3.10
FROM $DISTRO
# python3 shared with most images
RUN apk add --no-cache \

@ -1,4 +1,5 @@
FROM alpine:3.10
ARG DISTRO=alpine:3.10
FROM $DISTRO
# python3 shared with most images
RUN apk add --no-cache \
python3 py3-pip git bash \

@ -1,4 +1,5 @@
FROM alpine:3.10
ARG DISTRO=alpine:3.10
FROM $DISTRO
# python3 shared with most images
RUN apk add --no-cache \
python3 py3-pip git bash \

@ -1,11 +1,12 @@
FROM python:3-alpine
ARG DISTRO=alpine:3.10
FROM $DISTRO
RUN mkdir -p /app
WORKDIR /app
COPY requirements.txt requirements.txt
RUN apk add --no-cache curl \
&& pip install -r requirements.txt
RUN apk add --no-cache curl python3 py3-pip \
&& pip3 install -r requirements.txt
COPY server.py ./server.py
COPY main.py ./main.py

@ -0,0 +1,15 @@
#!/bin/bash -x
ALPINE_VER="3.10"
DISTRO="balenalib/rpi-alpine:$ALPINE_VER"
# Used for webmails
QEMU="arm"
ARCH="arm32v7/"
# use qemu-*-static from docker container
docker run --rm --privileged multiarch/qemu-user-static:register
docker-compose -f build.yml build \
--build-arg DISTRO=$DISTRO \
--build-arg ARCH=$ARCH \
--build-arg QEMU=$QEMU \
--parallel $@

@ -0,0 +1,6 @@
#!/bin/bash -x
# Small script to deploy locally built images to a remote docker
compose_options=$1
images=$(docker-compose $1 images | awk 'NR > 2 { printf $2":"$3" " }')
docker save $images | pigz - > mail.local.tgz
echo "now run 'docker -H \"ssh://user@host\" load -i mail.local.tgz"

@ -0,0 +1 @@
Add options to support different architectures builds

@ -1,4 +1,13 @@
FROM php:7.3-apache
ARG ARCH=""
ARG QEMU=other
# NOTE: only add file if building for arm
FROM ${ARCH}php:7.3-apache as build_arm
ONBUILD COPY --from=balenalib/rpi-alpine:3.10 /usr/bin/qemu-arm-static /usr/bin/qemu-arm-static
FROM ${ARCH}php:7.3-apache as build_other
FROM build_${QEMU}
#Shared layer between rainloop and roundcube
RUN apt-get update && apt-get install -y \
python3 curl python3-pip git \

@ -1,4 +1,12 @@
FROM php:7.3-apache
# NOTE: only add file if building for arm
ARG ARCH=""
ARG QEMU=other
FROM ${ARCH}php:7.3-apache as build_arm
ONBUILD COPY --from=balenalib/rpi-alpine:3.10 /usr/bin/qemu-arm-static /usr/bin/qemu-arm-static
FROM ${ARCH}php:7.3-apache as build_other
FROM build_${QEMU}
#Shared layer between rainloop and roundcube
RUN apt-get update && apt-get install -y \
python3 curl python3-pip git \

Loading…
Cancel
Save