1
1
Fork 1

Merge branch 'asonix/makefile' of asonix/mastodon into asonix/changes

Dieser Commit ist enthalten in:
Arlo (Hyena) 2019-10-17 03:21:22 +00:00 committet von Gitea
Commit 40776d1c91
7 geänderte Dateien mit 171 neuen und 103 gelöschten Zeilen

24
Makefile Normale Datei
Datei anzeigen

@ -0,0 +1,24 @@
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
IMAGE_NAME = "asonix/masto-deps"
masto: pull-deps images push-images
all: pull-base deps push-deps pull-deps images push-images
pull-base:
./container/pull-containers.sh
deps:
./container/build-images.sh container/Dockerfile-deps $(IMAGE_NAME)
push-deps:
./container/push-containers.sh $(IMAGE_NAME)
pull-deps:
./container/pull-containers.sh $(IMAGE_NAME)
images:
./container/build-images.sh container/Dockerfile "$(GIT_BRANCH)"
push-images:
./container/push-containers.sh $(GIT_BRANCH)

Datei anzeigen

@ -1,36 +0,0 @@
#!/usr/bin/env bash
set -xe
TAG=$1
require_input() {
input=$1
name=$2
if [ "$input" == "" ]; then
echo "Input, $name, required but not present"
exit 1;
fi
}
require_input "$TAG" "container tag"
architectures=('arm64v8' 'arm32v7' 'amd64')
for architecture in "${architectures[@]}"; do
sed "s/FROM ubuntu/FROM $architecture\/ubuntu/g" Dockerfile > "Dockerfile-$architecture"
if [ "$architecture" == arm32v7 ]; then
sed -i'' 's/x64/armv7l/g' "Dockerfile-$architecture" # for node
sed -i'' 's/amd64/armhf/g' "Dockerfile-$architecture" # for tini
fi
if [ "$architecture" == arm64v8 ]; then
sed -i'' 's/x64/arm64/g' "Dockerfile-$architecture" # for node
sed -i'' 's/amd64/arm64/g' "Dockerfile-$architecture" # for tini
fi
buildah build-using-dockerfile -f "Dockerfile-$architecture" -t "$TAG-$architecture" .
rm "Dockerfile-$architecture"
done

67
container/Dockerfile Normale Datei
Datei anzeigen

@ -0,0 +1,67 @@
FROM asonix/masto-deps:amd64 as build-dep
# Use bash for the shell
SHELL ["bash", "-c"]
COPY Gemfile* package.json yarn.lock /opt/mastodon/
RUN cd /opt/mastodon && \
bundle install -j$(nproc) --deployment --without development test && \
yarn install --pure-lockfile
FROM amd64/ubuntu:18.04
# Copy over all the langs needed for runtime
COPY --from=build-dep /opt/node /opt/node
COPY --from=build-dep /opt/ruby /opt/ruby
COPY --from=build-dep /opt/jemalloc /opt/jemalloc
COPY --from=build-dep /tini /tini
RUN chmod +rx /tini
# Add more PATHs to the PATH
ENV PATH="${PATH}:/opt/ruby/bin:/opt/node/bin:/opt/mastodon/bin"
# Create the mastodon user
ARG UID=991
ARG GID=991
RUN apt update && \
echo "Etc/UTC" > /etc/localtime && \
ln -s /opt/jemalloc/lib/* /usr/lib/ && \
apt install -y whois wget && \
addgroup --gid $GID mastodon && \
useradd -m -u $UID -g $GID -d /opt/mastodon mastodon && \
echo "mastodon:`head /dev/urandom | tr -dc A-Za-z0-9 | head -c 24 | mkpasswd -s -m sha-256`" | chpasswd
# Install mastodon runtime deps
RUN apt -y --no-install-recommends install \
libssl1.1 libpq5 imagemagick ffmpeg \
libicu60 libprotobuf10 libidn11 libyaml-0-2 \
file ca-certificates tzdata libreadline7 && \
apt -y install gcc && \
ln -s /opt/mastodon /mastodon && \
gem install bundler
# Copy over mastodon source, and dependencies from building, and set permissions
COPY --chown=mastodon:mastodon . /opt/mastodon
COPY --from=build-dep --chown=mastodon:mastodon /opt/mastodon /opt/mastodon
# Run mastodon services in prod mode
ENV RAILS_ENV="production"
ENV NODE_ENV="production"
# Tell rails to serve static files
ENV RAILS_SERVE_STATIC_FILES="true"
ENV BIND="0.0.0.0"
# Set the run user
USER mastodon
# Precompile assets
RUN cd ~ && \
OTP_SECRET=precompile_placeholder SECRET_KEY_BASE=precompile_placeholder rails assets:precompile && \
yarn cache clean
# Set the work dir and the container entry point
WORKDIR /opt/mastodon
ENTRYPOINT ["/tini", "--"]

Datei anzeigen

@ -1,7 +1,4 @@
FROM ubuntu:18.04 as build-dep
# Use bash for the shell
SHELL ["bash", "-c"]
FROM amd64/ubuntu:18.04
# Install Node
ENV NODE_VER="12.11.1"
@ -56,42 +53,6 @@ RUN npm install -g yarn && \
apt -y install git libicu-dev libidn11-dev \
libpq-dev libprotobuf-dev protobuf-compiler
COPY Gemfile* package.json yarn.lock /opt/mastodon/
RUN cd /opt/mastodon && \
bundle install -j$(nproc) --deployment --without development test && \
yarn install --pure-lockfile
FROM ubuntu:18.04
# Copy over all the langs needed for runtime
COPY --from=build-dep /opt/node /opt/node
COPY --from=build-dep /opt/ruby /opt/ruby
COPY --from=build-dep /opt/jemalloc /opt/jemalloc
# Add more PATHs to the PATH
ENV PATH="${PATH}:/opt/ruby/bin:/opt/node/bin:/opt/mastodon/bin"
# Create the mastodon user
ARG UID=991
ARG GID=991
RUN apt update && \
echo "Etc/UTC" > /etc/localtime && \
ln -s /opt/jemalloc/lib/* /usr/lib/ && \
apt install -y whois wget && \
addgroup --gid $GID mastodon && \
useradd -m -u $UID -g $GID -d /opt/mastodon mastodon && \
echo "mastodon:`head /dev/urandom | tr -dc A-Za-z0-9 | head -c 24 | mkpasswd -s -m sha-256`" | chpasswd
# Install mastodon runtime deps
RUN apt -y --no-install-recommends install \
libssl1.1 libpq5 imagemagick ffmpeg \
libicu60 libprotobuf10 libidn11 libyaml-0-2 \
file ca-certificates tzdata libreadline7 && \
apt -y install gcc && \
ln -s /opt/mastodon /mastodon && \
gem install bundler
# Add tini
ENV TINI_VERSION="0.18.0"
ENV TINI_ARCH="amd64"
@ -99,9 +60,7 @@ ADD https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini-${TI
ADD https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini-${TINI_ARCH}.asc /tini.asc
RUN apt update && \
apt -y --no-install-recommends install gpg gpg-agent dirmngr && \
rm -rf /var/cache && \
rm -rf /var/lib/apt/lists/*
apt -y --no-install-recommends install gpg gpg-agent dirmngr
RUN gpg --batch \
--keyserver hkp://p80.pool.sks-keyservers.net:80 \
@ -109,27 +68,3 @@ RUN gpg --batch \
gpg --batch --verify /tini.asc /tini
RUN chmod +rx /tini
# Copy over mastodon source, and dependencies from building, and set permissions
COPY --chown=mastodon:mastodon . /opt/mastodon
COPY --from=build-dep --chown=mastodon:mastodon /opt/mastodon /opt/mastodon
# Run mastodon services in prod mode
ENV RAILS_ENV="production"
ENV NODE_ENV="production"
# Tell rails to serve static files
ENV RAILS_SERVE_STATIC_FILES="true"
ENV BIND="0.0.0.0"
# Set the run user
USER mastodon
# Precompile assets
RUN cd ~ && \
OTP_SECRET=precompile_placeholder SECRET_KEY_BASE=precompile_placeholder rails assets:precompile && \
yarn cache clean
# Set the work dir and the container entry point
WORKDIR /opt/mastodon
ENTRYPOINT ["/tini", "--"]

42
container/build-images.sh Ausführbare Datei
Datei anzeigen

@ -0,0 +1,42 @@
#!/usr/bin/env bash
set -xe
SOURCE=$1
TAG=$2
require_input() {
input=$1
name=$2
if [ "$input" == "" ]; then
echo "Input, $name, required but not present"
exit 1;
fi
}
require_input "$SOURCE" "Dockerfile"
require_input "$TAG" "container tag"
ARCHITECTURES=('arm64v8' 'arm32v7' 'amd64')
for architecture in "${ARCHITECTURES[@]}"; do
cp "$SOURCE" "$SOURCE-$architecture"
if [ "$architecture" == arm32v7 ]; then
sed -i'' 's/:amd64/:arm32v7/g' "$SOURCE-$architecture" # source image
sed -i'' 's/FROM amd64/FROM arm32v7/g' "$SOURCE-$architecture" # source image
sed -i'' 's/x64/armv7l/g' "$SOURCE-$architecture" # for node
sed -i'' 's/amd64/armhf/g' "$SOURCE-$architecture" # for tini
fi
if [ "$architecture" == arm64v8 ]; then
sed -i'' 's/:amd64/:arm64v8/g' "$SOURCE-$architecture" # source image
sed -i'' 's/FROM amd64/FROM arm64v8/g' "$SOURCE-$architecture" # source image
sed -i'' 's/x64/arm64/g' "$SOURCE-$architecture" # for node
sed -i'' 's/amd64/arm64/g' "$SOURCE-$architecture" # for tini
fi
buildah build-using-dockerfile -f "$SOURCE-$architecture" -t "$TAG:$architecture" .
rm "$SOURCE-$architecture"
done

13
container/pull-containers.sh Ausführbare Datei
Datei anzeigen

@ -0,0 +1,13 @@
#!/usr/bin/env bash
set -xe
architectures=('arm64v8' 'arm32v7' 'amd64')
for architecture in "${architectures[@]}"; do
if [ "$1" == "" ]; then
podman pull "$architecture/ubuntu:18.04"
else
podman pull "$1:$architecture"
fi
done

23
container/push-containers.sh Ausführbare Datei
Datei anzeigen

@ -0,0 +1,23 @@
#!/usr/bin/env bash
set -xe
TAG=$1
require_input() {
input=$1
name=$2
if [ "$input" == "" ]; then
echo "Input, $name, required but not present"
exit 1;
fi
}
require_input "$TAG" "container tag"
ARCHITECTURES=('arm64v8' 'arm32v7' 'amd64')
for arch in "${ARCHITECTURES[@]}"; do
podman push "$TAG:$arch" "docker://docker.io/$TAG:$arch"
done