Last active
August 30, 2018 21:10
-
-
Save volkanunsal/2410960894e0df4ecc66d707fa022746 to your computer and use it in GitHub Desktop.
Moving to Heroku container stack with Geospatial libraries
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
configure_gems() { | |
bundle config build.nokogiri --use-system-libraries | |
bundle config build.rgeo --with-opts-dir=/usr --with-geos-config=/usr/bin/geos-config | |
} | |
bundle_install() { | |
configure_gems | |
bundle install --jobs=4 --retry=3 $1 | |
} | |
if [[ "$1" = "install_gems_production" ]]; then | |
bundle_install "--without test:development --deployment" | |
fi |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
FROM volkanunsal/ruby | |
FROM volkanunsal/node as node | |
FROM volkanunsal/ruby:latest | |
COPY --from=node /usr/include/node /usr/include/node | |
COPY --from=node /usr/bin/node /usr/bin/node | |
COPY --from=node /usr/local/share/yarn /usr/local/share/yarn | |
COPY --from=node /usr/lib/node_modules /usr/lib/node_modules | |
RUN ln -s /usr/local/share/yarn/bin/yarn /usr/bin/yarn \ | |
&& ln -s ../lib/node_modules/npm/bin/npm-cli.js /usr/bin/npm |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
FROM volkanunsal/ruby:2.3.7-node | |
RUN echo '>> Installing runtime deps...' \ | |
&& apk add --no-cache \ | |
bash \ | |
postgresql-dev \ | |
postgresql-client \ | |
geos@testing-edge \ | |
geos-dev@testing-edge \ | |
gdal@testing-edge \ | |
gdal-dev@testing-edge \ | |
proj4@testing-edge \ | |
proj4-dev@testing-edge \ | |
libxml2-dev \ | |
libxslt-dev \ | |
tzdata \ | |
git \ | |
curl \ | |
&& echo '>> Installing Ruby build deps...' \ | |
&& apk add --no-cache --virtual .ruby-builddeps \ | |
build-base \ | |
cmake \ | |
&& mkdir /app |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
FROM alpine:3.8 | |
# skip installing gem documentation | |
RUN mkdir -p /usr/local/etc \ | |
&& { \ | |
echo 'install: --no-document'; \ | |
echo 'update: --no-document'; \ | |
} >> /usr/local/etc/gemrc \ | |
&& echo "@testing-edge http://dl-3.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories | |
ENV RUBY_MAJOR 2.3 | |
ENV RUBY_VERSION 2.3.7 | |
ENV RUBY_DOWNLOAD_SHA256 c61f8f2b9d3ffff5567e186421fa191f0d5e7c2b189b426bb84498825d548edb | |
ENV RUBYGEMS_VERSION 2.7.7 | |
ENV BUNDLER_VERSION 1.16.3 | |
ENV RUBY_CONFIGURE_OPTS=--with-jemalloc | |
# Install jemalloc | |
RUN apk add --no-cache jemalloc-dev@testing-edge | |
# some of ruby's build scripts are written in ruby | |
# we purge system ruby later to make sure our final image uses what we just built | |
# readline-dev vs libedit-dev: https://bugs.ruby-lang.org/issues/11869 and https://github.com/docker-library/ruby/issues/75 | |
RUN set -ex \ | |
\ | |
&& apk add --no-cache --virtual .ruby-builddeps \ | |
autoconf \ | |
bison \ | |
bzip2 \ | |
bzip2-dev \ | |
ca-certificates \ | |
coreutils \ | |
dpkg-dev dpkg \ | |
gcc \ | |
gdbm-dev \ | |
glib-dev \ | |
libc-dev \ | |
libffi-dev \ | |
libressl \ | |
libressl-dev \ | |
libxml2-dev \ | |
libxslt-dev \ | |
linux-headers \ | |
make \ | |
ncurses-dev \ | |
procps \ | |
readline-dev \ | |
ruby \ | |
tar \ | |
xz \ | |
yaml-dev \ | |
zlib-dev \ | |
\ | |
&& wget -O ruby.tar.xz "https://cache.ruby-lang.org/pub/ruby/${RUBY_MAJOR%-rc}/ruby-$RUBY_VERSION.tar.xz" \ | |
&& echo "$RUBY_DOWNLOAD_SHA256 *ruby.tar.xz" | sha256sum -c - \ | |
\ | |
&& mkdir -p /usr/src/ruby \ | |
&& tar -xJf ruby.tar.xz -C /usr/src/ruby --strip-components=1 \ | |
&& rm ruby.tar.xz \ | |
\ | |
&& cd /usr/src/ruby \ | |
\ | |
# hack in "ENABLE_PATH_CHECK" disabling to suppress: | |
# warning: Insecure world writable dir | |
&& { \ | |
echo '#define ENABLE_PATH_CHECK 0'; \ | |
echo; \ | |
cat file.c; \ | |
} > file.c.new \ | |
&& mv file.c.new file.c \ | |
\ | |
&& autoconf \ | |
&& gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ | |
# the configure script does not detect isnan/isinf as macros | |
&& export ac_cv_func_isnan=yes ac_cv_func_isinf=yes \ | |
&& ./configure \ | |
--build="$gnuArch" \ | |
--disable-install-doc \ | |
--enable-shared \ | |
&& make -j "$(nproc)" \ | |
&& make install \ | |
\ | |
&& runDeps="$( \ | |
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \ | |
| tr ',' '\n' \ | |
| sort -u \ | |
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ | |
)" \ | |
&& apk add --virtual .ruby-rundeps $runDeps \ | |
bzip2 \ | |
ca-certificates \ | |
libffi-dev \ | |
libressl-dev \ | |
procps \ | |
yaml-dev \ | |
zlib-dev \ | |
&& apk del .ruby-builddeps \ | |
&& cd / \ | |
&& rm -r /usr/src/ruby \ | |
\ | |
&& gem update --system "$RUBYGEMS_VERSION" \ | |
&& gem install bundler --version "$BUNDLER_VERSION" --force \ | |
&& rm -r /root/.gem/ | |
# install things globally, for great justice | |
# and don't create ".bundle" in all our apps | |
ENV GEM_HOME /usr/local/bundle | |
ENV BUNDLE_PATH="$GEM_HOME" \ | |
BUNDLE_SILENCE_ROOT_WARNING=1 \ | |
BUNDLE_APP_CONFIG="$GEM_HOME" | |
# path recommendation: https://github.com/bundler/bundler/pull/6469#issuecomment-383235438 | |
ENV PATH $GEM_HOME/bin:$BUNDLE_PATH/gems/bin:$PATH | |
# adjust permissions of a few directories for running "gem install" as an arbitrary user | |
RUN mkdir -p "$GEM_HOME" && chmod 777 "$GEM_HOME" | |
# (BUNDLE_PATH = GEM_HOME, no need to mkdir/chown both) | |
CMD [ "irb" ] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
FROM volkanunsal/ruby:2.3.7-node-geos | |
WORKDIR /app | |
COPY ./ /app | |
ENV NODE_ENV 'production' | |
RUN echo '>> Installing Node packages...' \ | |
&& yarn --ignore-optional | |
RUN echo ">> Bundling Ruby gems to ${BUNDLE_PATH}..." \ | |
&& script/ci install_gems_production \ | |
&& apk del .ruby-builddeps | |
ENV RAILS_ENV="production" | |
RUN DATABASE_URL=postgis://postgres@db/citiesense_test script/ci precompile | |
RUN rm -rf node_modules | |
CMD /app/script/start-puma |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
build: | |
docker: | |
web: ./Dockerfile.web | |
release: | |
image: web | |
command: | |
- /app/script/release-tasks.sh | |
run: | |
web: /app/script/start-puma | |
sidekiq: | |
command: | |
- /app/script/start-background-worker | |
image: web | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment