FROM alpine:3.6

ARG VERSION=v1.6.0
ARG REPOSITORY=tootsuite/mastodon
ARG LIBICONV_VERSION=1.15

ENV UID=991 GID=991 \
    RUN_DB_MIGRATIONS=true \
    SIDEKIQ_WORKERS=5 \
    RAILS_SERVE_STATIC_FILES=true \
    RAILS_ENV=production \
    NODE_ENV=production \
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mastodon/bin

WORKDIR /mastodon

# Install dependencies
RUN apk -U upgrade \
 && apk add \
    ca-certificates \
    ffmpeg \
    file \
    git \
    icu-libs \
    imagemagick \
    libidn \
    libpq \
    libressl \
    nodejs-current-npm \
    nodejs-current \
    protobuf \
    ruby \
    ruby-bigdecimal \
    ruby-io-console \
    ruby-irb \
    ruby-json \
    s6 \
    su-exec \

# Install build dependencies
 && apk add -t build-dependencies \
    build-base \
    icu-dev \
    libffi-dev \
    libidn-dev \
    libtool \
    postgresql-dev \
    protobuf-dev \
    python \
    ruby-dev \
    ruby-rdoc \
    tar \
    yarn \

# Update CA certificates
 && update-ca-certificates \

# Install GNU Libiconv
 && wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-${LIBICONV_VERSION}.tar.gz -O /tmp/libiconv-${LIBICONV_VERSION}.tar.gz \
 && mkdir /tmp/src && tar xzf /tmp/libiconv-${LIBICONV_VERSION}.tar.gz -C /tmp/src \
 && cd /tmp/src/libiconv-${LIBICONV_VERSION} \
 && ./configure --prefix=/usr/local \
 && make -j$(getconf _NPROCESSORS_ONLN) && make install && libtool --finish /usr/local/lib \

# Install Mastodon
 && cd /mastodon \
 && wget -qO- https://github.com/${REPOSITORY}/archive/${VERSION}.tar.gz | tar xz --strip 1 \
 && gem install bundler \
 && bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --clean --no-cache --without test development \
 && yarn --ignore-optional --pure-lockfile \

# Precompile Mastodon assets
 && SECRET_KEY_BASE=$(rake secret) SMTP_FROM_ADDRESS= rake assets:precompile \
 && mv public/assets /tmp/assets && mv public/packs /tmp/packs \

# Clean
 && npm -g cache clean && yarn cache clean \
 && apk del build-dependencies \
 && rm -rf /var/cache/apk/* /tmp/src

COPY rootfs /

RUN chmod +x /usr/local/bin/* /etc/s6.d/*/* /etc/s6.d/.s6-svscan/*

VOLUME /mastodon/public/system /mastodon/public/assets /mastodon/public/packs /mastodon/log

EXPOSE 3000 4000

LABEL maintainer="Wonderfall <wonderfall@targaryen.house>" \
      description="A GNU Social-compatible microblogging server"

ENTRYPOINT ["/usr/local/bin/run"]
CMD ["/bin/s6-svscan", "/etc/s6.d"]