IMAGE rabbitmq_3.8.9-210106
FROM alpine3.12_3.12.3-210106

RUN EOF
    # Install RabbitMQ runtime dependencies
    apk --no-cache add procps openssl

    # Install RabbitMQ build dependencies
    apk --no-cache add --virtual .deps autoconf gcc libc-dev linux-headers make ncurses-dev openssl-dev

    # Download and unpack Erlang/OTP
    cd /tmp
    wget https://github.com/erlang/otp/archive/OTP-23.1.1.tar.gz
    tar xf OTP-*

    # Compile and install Erlang/OTP
    cd /tmp/otp-*
    export ERL_TOP=$(pwd)
    export CFLAGS='-g -O2'
    ./otp_build autoconf
    ./configure \
        --host=x86_64-linux-musl \
        --build=x86_64-linux-musl \
        --disable-dynamic-ssl-lib \
        --disable-hipe \
        --disable-sctp \
        --disable-silent-rules \
        --enable-clock-gettime \
        --enable-hybrid-heap \
        --enable-kernel-poll \
        --enable-shared-zlib \
        --enable-smp-support \
        --enable-threads \
        --with-microstate-accounting=extra \
        --without-common_test \
        --without-debugger \
        --without-dialyzer \
        --without-diameter \
        --without-edoc \
        --without-erl_docgen \
        --without-erl_interface \
        --without-et \
        --without-eunit \
        --without-ftp \
        --without-hipe \
        --without-jinterface \
        --without-megaco \
        --without-observer \
        --without-odbc \
        --without-reltool \
        --without-ssh \
        --without-tftp \
        --without-wx
    make -j $(getconf _NPROCESSORS_ONLN) GEN_OPT_FLGS="-O2 -fno-strict-aliasing"
    make install

    # Download and install RabbitMQ
    cd /tmp
    wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.9/rabbitmq-server-generic-unix-latest-toolchain-3.8.9.tar.xz
    tar xf rabbitmq-server-* -C /opt
    mv /opt/rabbitmq* /opt/rabbitmq
    sed -i 's/^SYS_PREFIX=.*$/SYS_PREFIX=/' /opt/rabbitmq/sbin/rabbitmq-defaults
    ln -s /opt/rabbitmq/sbin/* /usr/sbin/

    # Create RabbitMQ OS user
    addgroup -S -g 5672 rabbitmq
    adduser -S -u 5672 -h /var/lib/rabbitmq -s /bin/false -g rabbitmq -G rabbitmq rabbitmq

    # Create RabbitMQ directory structure
    mkdir -p /var/lib/rabbitmq /etc/rabbitmq/conf.d /var/log/rabbitmq
    chown -R rabbitmq:rabbitmq /opt/rabbitmq /var/lib/rabbitmq /etc/rabbitmq /var/log/rabbitmq
    chmod 755 /var/lib/rabbitmq /etc/rabbitmq /var/log/rabbitmq

    # Cleanup
    apk --no-cache del .deps
    rm -rf /usr/local/lib/erlang/lib/*/examples /usr/local/lib/erlang/lib/*/src /tmp/*
EOF

USER rabbitmq
ENV HOME /var/lib/rabbitmq
ENV RABBITMQ_LOGS -
CMD /usr/sbin/rabbitmq-server
READY /usr/sbin/rabbitmqctl await_startup