Просмотр исходного кода

PROD-1704: Add docker configuration and torquebox build dependency

Blake Schneider 6 лет назад
Родитель
Сommit
5584bbfa33
9 измененных файлов с 276 добавлено и 0 удалено
  1. 41 0
      Dockerfile
  2. 44 0
      README.md
  3. BIN
      deps/torquebox-dist-3.0.2-bin.tar.gz
  4. 47 0
      docker-compose.yml
  5. 73 0
      docker-entrypoint.sh
  6. 11 0
      docker-initdb.sh
  7. 8 0
      docker-run.sh
  8. 5 0
      example.env
  9. 47 0
      nginx.conf

+ 41 - 0
Dockerfile

@@ -0,0 +1,41 @@
+FROM ubuntu:16.04
+
+RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get --no-install-recommends -y dist-upgrade && DEBIAN_FRONTEND=noninteractive apt-get --no-install-recommends -y install unzip software-properties-common
+
+RUN add-apt-repository ppa:openjdk-r/ppa && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get --no-install-recommends -y install openjdk-7-jdk
+
+RUN mkdir -p /opt/torquebox /home/torquebox/oadr
+
+ADD deps/torquebox-dist-3.0.2-bin.tar.gz /opt/torquebox
+
+RUN useradd --no-create-home --shell /bin/bash --home-dir /home/torquebox torquebox
+
+COPY app /home/torquebox/oadr/app/
+COPY config /home/torquebox/oadr/config/
+COPY db /home/torquebox/oadr/db/
+COPY lib /home/torquebox/oadr/lib/
+COPY public /home/torquebox/oadr/public/
+COPY spec /home/torquebox/oadr/spec/
+COPY test /home/torquebox/oadr/test/
+COPY vendor /home/torquebox/oadr/vendor/
+COPY config.ru Gemfile Gemfile.lock Rakefile /home/torquebox/oadr/
+
+RUN sed -i "s|https://rubygems.org|http://rubygems.org|" /home/torquebox/oadr/Gemfile
+
+RUN chown -R torquebox:torquebox /opt/torquebox /home/torquebox && ln -s /opt/torquebox/torquebox-3.0.2 /opt/torquebox/current
+
+USER torquebox
+WORKDIR /home/torquebox/oadr
+
+ENV TORQUEBOX_HOME=/opt/torquebox/current
+ENV JBOSS_HOME=${TORQUEBOX_HOME}/jboss JRUBY_HOME=${TORQUEBOX_HOME}/jruby
+ENV PATH=${JBOSS_HOME}/bin:${JRUBY_HOME}/bin:$PATH
+ENV RAILS_ENV=production
+
+RUN bundle install
+RUN rake assets:precompile
+
+COPY docker-entrypoint.sh docker-run.sh docker-initdb.sh /
+ENTRYPOINT ["/docker-entrypoint.sh"]
+
+CMD ["run"]

Разница между файлами не показана из-за своего большого размера
+ 44 - 0
README.md


BIN
deps/torquebox-dist-3.0.2-bin.tar.gz


+ 47 - 0
docker-compose.yml

@@ -0,0 +1,47 @@
+version: '3'
+
+services:
+
+  nginx:
+    container_name: vtn-nginx
+    ports:
+      - 443:443
+    image: nginx:latest
+    volumes:
+      - "./nginx.conf:/etc/nginx/conf.d/default.conf"
+      - "./ssl.crt:/etc/ssl/ssl.crt"
+      - "./ssl.key:/etc/ssl/ssl.key"
+    depends_on:
+      - rails
+    restart: unless-stopped
+
+  db:
+    container_name: vtn-db
+    image: postgres:9.5
+    volumes:
+      - postgres_data:/var/lib/postgresql/data
+    environment:
+      POSTGRES_DB: ${RAILS_DB_DATABASE}
+      POSTGRES_USER: ${RAILS_DB_USERNAME}
+      POSTGRES_PASSWORD: ${RAILS_DB_PASSWORD}
+    restart: unless-stopped
+
+  rails:
+    container_name: vtn-rails
+    build: .
+    expose:
+      - 9292
+    depends_on:
+      - db
+    restart: on-failure
+    # command: initdb
+    environment:
+      - RAILS_ENV=${RAILS_ENV}
+      - RAILS_SECRET_TOKEN=${RAILS_SECRET_TOKEN}
+      - RAILS_DB_USERNAME=${RAILS_DB_USERNAME}
+      - RAILS_DB_PASSWORD=${RAILS_DB_PASSWORD}
+      - RAILS_DB_DATABASE=${RAILS_DB_DATABASE}
+      - RAILS_DB_HOSTNAME=vtn-db
+
+volumes:
+  postgres_data:

+ 73 - 0
docker-entrypoint.sh

@@ -0,0 +1,73 @@
+#!/bin/bash
+
+set -e
+# set -x
+
+cat >/home/torquebox/oadr/config/database.yml <<EOF
+production:
+  adapter: jdbcpostgresql
+  database: ${RAILS_DB_DATABASE}
+  username: ${RAILS_DB_USERNAME}
+  password: ${RAILS_DB_PASSWORD}
+  host: ${RAILS_DB_HOSTNAME}
+  pool: 20
+EOF
+
+cat >/home/torquebox/oadr/config/initializers/secret_token.rb <<EOF
+Oadr::Application.config.secret_token = '${RAILS_SECRET_TOKEN}'
+EOF
+
+cat >/home/torquebox/oadr/config/torquebox.yml <<'EOF'
+# This is the TorqueBox configuration file. Refer to the TorqueBox
+# documentation at http://torquebox.org/documentation/current/
+# for all configuration options.
+web:
+  context: "/"
+
+services:
+  push_message_manager:
+    service: PushMessageManager
+    config:
+      enableXmpp: false
+      host: # set the XMPP hostname.  This name must match the hostname field configured in the XMPP server
+      port: 5222
+      username: 222222222222
+      password: password
+      keystore: keystore.jks
+      keystorePassword: password
+      truststore: truststore.jks
+      truststorePassword: password
+      protocols: TLSv1.2,TLSv1
+      cipherSuites: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA
+      enableTLS: fals
+      tlsDebug: true
+      validateVENHostname: false
+
+  advance_objects:
+    service: AdvanceObjects
+    config:
+      sleep: 10
+
+jobs:
+  generate_tou_events:
+    job: GenerateTouEvents
+    # second, minute, hour, day_of_month, month, day_of_week, year(optional)
+    # Either day_of_month or day_of_week must be set to '?', as Torquebox does not support using both at once
+    # here's a discussion on ? vs *: http://stackoverflow.com/questions/11499740/significance-of-question-mark-in-java-cron
+    # the example below runs every Friday, making it invalid to say * for day of month (day of month is dependent on
+    # day of week which is Friday)
+    cron: '0 0 12 ? * FRI *'
+    # cron: '0 */1 * * * ?' # UNCOMMENT FOR TESTING run every 1 minute
+    timeout: 120 s
+    description: Create Event instances (and associated signal-related objects) based on TouSchedule
+EOF
+
+if [[ "$1" == "initdb" ]]; then
+    echo "initializing database"
+    /docker-initdb.sh
+fi
+
+if [[ "$1" == "run" ]]; then
+    echo "executing rails"
+    /docker-run.sh
+fi

+ 11 - 0
docker-initdb.sh

@@ -0,0 +1,11 @@
+#!/bin/bash
+
+set -e
+# set -x
+
+echo "initdb starting"
+
+rake db:setup
+rake db:seed
+
+echo "initdb finished successfully"

+ 8 - 0
docker-run.sh

@@ -0,0 +1,8 @@
+#!/bin/bash
+
+set -e
+# set -x
+
+rake db:migrate
+torquebox deploy
+torquebox run -b 0.0.0.0

+ 5 - 0
example.env

@@ -0,0 +1,5 @@
+RAILS_DB_DATABASE=vtn
+RAILS_DB_USERNAME=vtn
+RAILS_DB_PASSWORD=vtn
+RAILS_SECRET_TOKEN=0011223344556677
+RAILS_ENV=production

+ 47 - 0
nginx.conf

@@ -0,0 +1,47 @@
+server {
+    listen       80;
+    server_name  localhost;
+
+    # Don't advertise
+    server_tokens off;
+
+    # Don't merge slashes
+    merge_slashes off;
+
+    root /dev/null;
+
+      location / {
+        proxy_set_header  X-Real-IP        $remote_addr;
+        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
+        proxy_set_header  Host             $http_host;
+        proxy_redirect    off;
+        proxy_pass http://vtn-rails:8080;
+      }
+}
+
+server {
+    listen 443 ssl default_server;
+    server_name localhost;
+    root /dev/null;
+
+    # Don't advertise
+    server_tokens off;
+
+    # Don't merge slashes
+    merge_slashes off;
+
+    location / {
+        proxy_set_header  X-Real-IP        $remote_addr;
+        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
+        proxy_set_header  Host             $http_host;
+        proxy_set_header  X-Forwarded-Proto $scheme;
+        proxy_set_header  X-Forwarded-Ssl on;
+        proxy_set_header  X-Forwarded-Port $server_port;
+        proxy_set_header  X-Forwarded-Host $host;
+        proxy_redirect    off;
+        proxy_pass http://vtn-rails:8080;
+    }
+
+    ssl_certificate /etc/ssl/ssl.crt;
+    ssl_certificate_key /etc/ssl/ssl.key;
+}