|
1 |
| -FROM ubuntu:22.04 |
2 |
| -ENV DEBIAN_FRONTEND=noninteractive |
3 |
| -ENV workdir /var/www |
4 |
| - |
5 |
| -# Production OSM setup |
6 |
| -ENV RAILS_ENV=production |
7 |
| - |
8 |
| -# Install the openstreetmap-website dependencies |
9 |
| -RUN apt-get update \ |
10 |
| - && apt-get install -y \ |
11 |
| - ruby ruby-dev ruby-bundler libmagickwand-dev libxml2-dev libxslt1-dev \ |
12 |
| - apache2 apache2-dev build-essential git-core postgresql-client \ |
13 |
| - libpq-dev libsasl2-dev imagemagick libffi-dev libgd-dev libarchive-dev libbz2-dev curl \ |
14 |
| - default-jre-headless file gpg-agent libvips-dev locales software-properties-common tzdata unzip \ |
15 |
| - advancecomp gifsicle libjpeg-progs jhead jpegoptim optipng pngcrush pngquant libyaml-dev \ |
16 |
| - && apt-get clean \ |
17 |
| - && rm -rf /var/lib/apt/lists/* |
18 |
| - |
19 |
| -## Install node |
20 |
| -RUN curl -sL https://deb.nodesource.com/setup_18.x | bash - |
21 |
| -RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - |
22 |
| -RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list |
23 |
| -RUN apt-get update && apt-get install -y nodejs yarn && \ |
24 |
| - apt-get clean && \ |
25 |
| - rm -rf /var/lib/apt/lists/* |
26 |
| - |
27 |
| -# Install openstreetmap-cgimap requirements |
28 |
| -RUN apt-get update && apt-get -y install libxml2-dev libpqxx-dev libfcgi-dev zlib1g-dev libbrotli-dev \ |
29 |
| - libboost-program-options-dev libfmt-dev libmemcached-dev libcrypto++-dev \ |
30 |
| - libargon2-dev libyajl-dev cmake libapache2-mod-fcgid && \ |
31 |
| - apt-get clean && \ |
32 |
| - rm -rf /var/lib/apt/lists/* |
33 |
| - |
34 |
| -# Install cgimap, before remove basic auth |
35 |
| -ENV cgimap /openstreetmap-cgimap |
36 |
| -ENV CGIMAP_GITSHA=26cd7fa10affe5dbd13dbe16de34421059f53f18 |
37 |
| -RUN git clone -b master https://github.com/zerebubuth/openstreetmap-cgimap.git $cgimap \ |
38 |
| - && cd $cgimap \ |
39 |
| - && git checkout $CGIMAP_GITSHA \ |
40 |
| - && rm -rf .git \ |
41 |
| - && mkdir build \ |
42 |
| - && cd build \ |
43 |
| - && cmake .. \ |
44 |
| - && cmake --build . |
45 |
| - |
46 |
| -# Install svgo required |
47 |
| -RUN npm install -g svgo |
48 |
| - |
49 |
| -# Install openstreetmap-website |
50 |
| -RUN rm -rf $workdir/html |
51 |
| - |
52 |
| -## Sep 2023 |
53 |
| -ENV OPENSTREETMAP_WEBSITE_GITSHA=d23763d6cdbf5ec11f0e83f8e6e8fb32ed973e6a |
54 |
| -RUN curl -L https://github.com/openstreetmap/openstreetmap-website/archive/$OPENSTREETMAP_WEBSITE_GITSHA.zip --output website.zip && unzip website.zip |
55 |
| -RUN mv openstreetmap-website-$OPENSTREETMAP_WEBSITE_GITSHA/* $workdir/ |
56 |
| -WORKDIR $workdir |
57 |
| - |
58 |
| -# Install Ruby packages |
59 |
| -RUN gem install bundler && bundle install |
60 |
| - |
61 |
| -# Configure database.yml and secrets.yml |
62 |
| -RUN cp $workdir/config/example.database.yml $workdir/config/database.yml |
63 |
| -RUN touch $workdir/config/settings.local.yml |
64 |
| -RUN cp $workdir/config/example.storage.yml $workdir/config/storage.yml |
65 |
| -RUN echo "#session key \n\ |
66 |
| -production: \n\ |
67 |
| - secret_key_base: $(rails secret)" > $workdir/config/secrets.yml |
68 |
| -# Protect sensitive information |
69 |
| -RUN chmod 600 $workdir/config/database.yml $workdir/config/secrets.yml |
70 |
| -RUN bundle exec bin/yarn install |
| 1 | +FROM ruby:3.3-slim AS builder |
71 | 2 |
|
72 |
| -RUN rails i18n:js:export assets:precompile |
73 |
| - |
74 |
| -# The rack interface requires a `tmp` directory to use openstreetmap-cgimap |
75 |
| -RUN ln -s /tmp /var/www/tmp |
| 3 | +ENV DEBIAN_FRONTEND=noninteractive \ |
| 4 | + workdir=/var/www |
76 | 5 |
|
77 |
| -# Add Apache configuration file |
78 |
| -ADD config/production.conf /etc/apache2/sites-available/production.conf |
79 |
| -RUN a2enmod headers |
80 |
| -RUN a2enmod setenvif |
81 |
| -RUN a2dissite 000-default |
82 |
| -RUN a2ensite production |
| 6 | +WORKDIR $workdir |
83 | 7 |
|
84 |
| -# Install Passenger + Apache module |
85 |
| -RUN apt-key adv --refresh-keys --keyserver keyserver.ubuntu.com |
86 |
| -RUN apt-get update && apt-get install -y libapache2-mod-passenger lighttpd |
| 8 | +# Install base build dependencies |
| 9 | +RUN apt-get update && \ |
| 10 | + apt-get install -y --no-install-recommends \ |
| 11 | + git curl gnupg build-essential \ |
| 12 | + libarchive-dev zlib1g-dev libcurl4-openssl-dev \ |
| 13 | + apache2 apache2-dev libapache2-mod-passenger libapache2-mod-fcgid libapr1-dev libaprutil1-dev \ |
| 14 | + postgresql-client libpq-dev libxml2-dev libyaml-dev \ |
| 15 | + pngcrush optipng advancecomp pngquant jhead jpegoptim gifsicle libjpeg-progs \ |
| 16 | + && curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \ |
| 17 | + && apt-get install -y nodejs \ |
| 18 | + && npm install -g yarn svgo \ |
| 19 | + && apt-get clean && rm -rf /var/lib/apt/lists/* |
87 | 20 |
|
88 |
| -# Enable the Passenger Apache module and restart Apache |
89 |
| -RUN echo "ServerName $(cat /etc/hostname)" >> /etc/apache2/apache2.conf |
90 | 21 | RUN a2enmod passenger
|
91 | 22 |
|
92 |
| -# Check installation |
93 |
| -RUN /usr/bin/passenger-config validate-install |
94 |
| -RUN /usr/sbin/passenger-memory-stats |
95 |
| - |
96 |
| -# Enable required apache modules for the cgimap Apache service |
97 |
| -RUN a2enmod proxy proxy_http rewrite lbmethod_byrequests proxy_fcgi |
| 23 | +# Clone OSM Website |
| 24 | +ENV OPENSTREETMAP_WEBSITE_GITSHA=ea3760f94d9d74d3aaa8492182b9e1a15ec1effa |
| 25 | +RUN rm -rf $workdir/* && \ |
| 26 | + git clone https://github.com/openstreetmap/openstreetmap-website.git $workdir && \ |
| 27 | + cd $workdir && \ |
| 28 | + git checkout $OPENSTREETMAP_WEBSITE_GITSHA && \ |
| 29 | + git fetch && rm -rf .git |
| 30 | + |
| 31 | +# Install Ruby/Node dependencies |
| 32 | +RUN gem install bundler && \ |
| 33 | + bundle install && \ |
| 34 | + yarn install && \ |
| 35 | + bundle exec rake yarn:install |
| 36 | + |
| 37 | +# Dummy config for precompile |
| 38 | +RUN cp config/example.database.yml config/database.yml && \ |
| 39 | + cp config/example.storage.yml config/storage.yml && \ |
| 40 | + touch config/settings.local.yml && \ |
| 41 | + chmod 600 config/database.yml |
| 42 | + |
| 43 | +# Create dummy credentials |
| 44 | +RUN rm -f config/credentials.yml.enc && \ |
| 45 | + export RAILS_MASTER_KEY=$(openssl rand -hex 16) && \ |
| 46 | + export SECRET_KEY_BASE=$(bundle exec rails secret) && \ |
| 47 | + echo $RAILS_MASTER_KEY > config/master.key && \ |
| 48 | + EDITOR="echo" RAILS_MASTER_KEY=$RAILS_MASTER_KEY rails credentials:edit && \ |
| 49 | + RAILS_MASTER_KEY=$RAILS_MASTER_KEY rails runner "\ |
| 50 | + require 'active_support/encrypted_configuration'; \ |
| 51 | + require 'yaml'; \ |
| 52 | + creds = ActiveSupport::EncryptedConfiguration.new(\ |
| 53 | + config_path: 'config/credentials.yml.enc', \ |
| 54 | + key_path: 'config/master.key', \ |
| 55 | + env_key: 'RAILS_MASTER_KEY', \ |
| 56 | + raise_if_missing_key: true \ |
| 57 | + ); \ |
| 58 | + credentials = { secret_key_base: '$SECRET_KEY_BASE' }; \ |
| 59 | + creds.write(credentials.to_yaml); \ |
| 60 | + puts 'Credentials configured correctly.'" |
| 61 | + |
| 62 | +# Precompile assets |
| 63 | +RUN bundle exec rake i18n:js:export && \ |
| 64 | + bundle exec rake assets:precompile |
| 65 | + |
| 66 | +FROM ruby:3.3-slim |
| 67 | + |
| 68 | +ENV DEBIAN_FRONTEND=noninteractive \ |
| 69 | + workdir=/var/www |
98 | 70 |
|
99 |
| -# Config the virtual host apache2 |
100 |
| -RUN apache2ctl configtest |
| 71 | +WORKDIR $workdir |
101 | 72 |
|
102 |
| -# Set Permissions for www-data |
103 |
| -RUN chown -R www-data: $workdir |
| 73 | +# Install only runtime dependencies |
| 74 | +RUN apt-get update && apt-get install -y --no-install-recommends \ |
| 75 | + apache2 libapache2-mod-passenger libapache2-mod-fcgid \ |
| 76 | + libpq5 libxml2 libyaml-0-2 libarchive13 file libgd-dev \ |
| 77 | + postgresql-client curl \ |
| 78 | + && apt-get clean && rm -rf /var/lib/apt/lists/* |
104 | 79 |
|
105 |
| -# Add settings |
106 |
| -ADD config/settings.yml $workdir/config/ |
| 80 | +COPY --from=builder /var/www /var/www |
| 81 | +COPY --from=builder /usr/local/bundle /usr/local/bundle |
107 | 82 |
|
108 |
| -COPY start.sh $workdir/ |
109 |
| -COPY liveness.sh $workdir/ |
| 83 | +# Symlink tmp for Passenger |
| 84 | +RUN ln -s /tmp /var/www/tmp |
110 | 85 |
|
111 |
| -CMD $workdir/start.sh |
| 86 | +# Apache configuration |
| 87 | +COPY config/production.conf /etc/apache2/sites-available/production.conf |
| 88 | +RUN a2enmod headers setenvif proxy proxy_http proxy_fcgi fcgid rewrite lbmethod_byrequests passenger && \ |
| 89 | + a2dissite 000-default && \ |
| 90 | + a2ensite production && \ |
| 91 | + echo "ServerName localhost" >> /etc/apache2/apache2.conf && \ |
| 92 | + apache2ctl configtest |
| 93 | + |
| 94 | +COPY config/settings.yml $workdir/config/ |
| 95 | +COPY start.sh liveness.sh $workdir/ |
| 96 | +RUN chmod +x $workdir/*.sh |
| 97 | +RUN chown -R www-data:www-data /var/www |
| 98 | +CMD ["./start.sh"] |
0 commit comments