Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
mastodon
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Pierre Boudes
mastodon
Commits
1dbf993b
Commit
1dbf993b
authored
6 years ago
by
Sir-Boops
Committed by
Eugen Rochko
6 years ago
Browse files
Options
Downloads
Patches
Plain Diff
Switch to Ubuntu for docker (#10100)
parent
e0509587
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
Dockerfile
+121
-84
121 additions, 84 deletions
Dockerfile
with
121 additions
and
84 deletions
Dockerfile
+
121
−
84
View file @
1dbf993b
FROM
node:8.15-alpine
as
node
FROM
ruby:2.6-alpine3.9
LABEL
maintainer="https://github.com/tootsuite/mastodon" \
description="Your self-hosted, globally interconnected microblogging community"
FROM
ubuntu:18.04
as
build-dep
# Use bash for the shell
SHELL
["bash", "-c"]
# Install Node
ENV
NODE_VER="8.15.0"
RUN
echo
"Etc/UTC"
>
/etc/localtime
&&
\
apt update
&&
\
apt
-y
dist-upgrade
&&
\
apt
-y
install
wget make gcc g++ python
&&
\
cd
~
&&
\
wget https://nodejs.org/download/release/v
$NODE_VER
/node-v
$NODE_VER
.tar.gz
&&
\
tar
xf node-v
$NODE_VER
.tar.gz
&&
\
cd
node-v
$NODE_VER
&&
\
./configure
--prefix
=
/opt/node
&&
\
make
-j
$(
nproc
)
>
/dev/null
&&
\
make
install
# Install jemalloc
ENV
JE_VER="5.1.0"
RUN
apt
-y
install
autoconf
&&
\
cd
~
&&
\
wget https://github.com/jemalloc/jemalloc/archive/
$JE_VER
.tar.gz
&&
\
tar
xf
$JE_VER
.tar.gz
&&
\
cd
jemalloc-
$JE_VER
&&
\
./autogen.sh
&&
\
./configure
--prefix
=
/opt/jemalloc
&&
\
make
-j
$(
nproc
)
>
/dev/null
&&
\
make install_bin install_include install_lib
# Install ruby
ENV
RUBY_VER="2.6.1"
ENV
CPPFLAGS="-I/opt/jemalloc/include"
ENV
LDFLAGS="-L/opt/jemalloc/lib/"
RUN
apt
-y
install
build-essential
\
bison libyaml-dev libgdbm-dev libreadline-dev
\
libncurses5-dev libffi-dev zlib1g-dev libssl-dev
&&
\
cd
~
&&
\
wget https://cache.ruby-lang.org/pub/ruby/
${
RUBY_VER
%.*
}
/ruby-
$RUBY_VER
.tar.gz
&&
\
tar
xf ruby-
$RUBY_VER
.tar.gz
&&
\
cd
ruby-
$RUBY_VER
&&
\
./configure
--prefix
=
/opt/ruby
\
--with-jemalloc
\
--with-shared
\
--disable-install-doc
&&
\
ln
-s
/opt/jemalloc/lib/
*
/usr/lib/
&&
\
make
-j
$(
nproc
)
>
/dev/null
&&
\
make
install
ENV
PATH="${PATH}:/opt/ruby/bin:/opt/node/bin"
RUN
npm
install
-g
yarn
&&
\
gem
install
bundler
COPY
. /opt/mastodon
RUN
apt
-y
install
git libicu-dev libidn11-dev
\
libpq-dev libprotobuf-dev protobuf-compiler
&&
\
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
ENV
PATH=/mastodon/bin:$PATH \
RAILS_SERVE_STATIC_FILES=true \
RAILS_ENV=production \
NODE_ENV=production
ARG
LIBICONV_VERSION=1.15
ARG
LIBICONV_DOWNLOAD_SHA256=ccf536620a45458d26ba83887a983b96827001e92a13847b45e4925cc8913178
EXPOSE
3000 4000
WORKDIR
/mastodon
COPY
--from=node /usr/local/bin/node /usr/local/bin/node
COPY
--from=node /usr/local/lib/node_modules /usr/local/lib/node_modules
COPY
--from=node /usr/local/bin/npm /usr/local/bin/npm
COPY
--from=node /opt/yarn-* /opt/yarn
RUN
apk add
--no-cache
-t
build-dependencies
\
build-base
\
icu-dev
\
libidn-dev
\
openssl
\
libtool
\
libxml2-dev
\
libxslt-dev
\
postgresql-dev
\
protobuf-dev
\
python
\
&&
apk add
--no-cache
\
ca-certificates
\
ffmpeg
\
file
\
git
\
icu-libs
\
imagemagick
\
libidn
\
libpq
\
libxml2
\
libxslt
\
protobuf
\
tini
\
tzdata
\
&&
update-ca-certificates
\
&&
ln
-s
/opt/yarn/bin/yarn /usr/local/bin/yarn
\
&&
ln
-s
/opt/yarn/bin/yarnpkg /usr/local/bin/yarnpkg
\
&&
mkdir
-p
/tmp/src /opt
\
&&
wget
-O
libiconv.tar.gz
"https://ftp.gnu.org/pub/gnu/libiconv/libiconv-
$LIBICONV_VERSION
.tar.gz"
\
&&
echo
"
$LIBICONV_DOWNLOAD_SHA256
*libiconv.tar.gz"
|
sha256sum
-c
-
\
&&
tar
-xzf
libiconv.tar.gz
-C
/tmp/src
\
&&
rm
libiconv.tar.gz
\
&&
cd
/tmp/src/libiconv-
$LIBICONV_VERSION
\
&&
./configure
--prefix
=
/usr/local
\
&&
make
-j
$(
getconf _NPROCESSORS_ONLN
)
\
&&
make
install
\
&&
libtool
--finish
/usr/local/lib
\
&&
cd
/mastodon
\
&&
rm
-rf
/tmp/
*
COPY
Gemfile Gemfile.lock package.json yarn.lock .yarnclean /mastodon/
RUN
bundle config build.nokogiri
--use-system-libraries
--with-iconv-lib
=
/usr/local/lib
--with-iconv-include
=
/usr/local/include
\
&&
bundle
install
-j
$(
getconf _NPROCESSORS_ONLN
)
--deployment
--without
test
development
\
&&
yarn
install
--pure-lockfile
--ignore-engines
\
&&
yarn cache clean
RUN
addgroup
-g
${
GID
}
mastodon
&&
adduser
-h
/mastodon
-s
/bin/sh
-D
-G
mastodon
-u
${
UID
}
mastodon
\
&&
mkdir
-p
/mastodon/public/system /mastodon/public/assets /mastodon/public/packs
\
&&
chown
-R
mastodon:mastodon /mastodon/public
COPY
. /mastodon
RUN
chown
-R
mastodon:mastodon /mastodon
VOLUME
/mastodon/public/system
RUN
apt update
&&
\
echo
"Etc/UTC"
>
/etc/localtime
&&
\
ln
-s
/opt/jemalloc/lib/
*
/usr/lib/
&&
\
apt
-y
dist-upgrade
&&
\
apt
install
-y
whois
&&
\
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
# Copy over masto source from building and set permissions
COPY
--from=build-dep --chown=mastodon:mastodon /opt/mastodon /opt/mastodon
# Install masto 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
# Clean up more dirs
RUN
rm
-rf
/var/cache
&&
\
rm
-rf
/var/apt
# Add tini
ENV
TINI_VERSION="0.18.0"
ENV
TINI_SUM="12d20136605531b09a2c2dac02ccee85e1b874eb322ef6baf7561cd93f93c855"
ADD
https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini /tini
RUN
echo
"
$TINI_SUM
tini"
|
sha256sum
-c
-
RUN
chmod
+x /tini
# Run masto services in prod mode
ENV
RAILS_ENV="production"
ENV
NODE_ENV="production"
# Tell rails to serve static files
ENV
RAILS_SERVE_STATIC_FILES="true"
# Set the run user
USER
mastodon
RUN
OTP_SECRET
=
precompile_placeholder
SECRET_KEY_BASE
=
precompile_placeholder bundle
exec
rails assets:precompile
# Precompile assets
RUN
cd
~
&&
\
OTP_SECRET
=
precompile_placeholder
SECRET_KEY_BASE
=
precompile_placeholder rails assets:precompile
&&
\
yarn cache clean
ENTRYPOINT
["/sbin/tini", "--"]
# Set the work dir and the container entry point
WORKDIR
/opt/mastodon
ENTRYPOINT
["/tini", "--"]
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment