Merge branch 'asonix/makefile' of asonix/mastodon into asonix/changes
Este commit está contenido en:
commit
40776d1c91
24
Makefile
Archivo normal
24
Makefile
Archivo normal
|
@ -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)
|
|
@ -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
Archivo normal
67
container/Dockerfile
Archivo normal
|
@ -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", "--"]
|
|
@ -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
Archivo ejecutable
42
container/build-images.sh
Archivo ejecutable
|
@ -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
Archivo ejecutable
13
container/pull-containers.sh
Archivo ejecutable
|
@ -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
Archivo ejecutable
23
container/push-containers.sh
Archivo ejecutable
|
@ -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
|
Cargando…
Referencia en una nueva incidencia