From 8462ca92d2742fd5a588ca77d5e72b79260b9d46 Mon Sep 17 00:00:00 2001 From: Raymond Hughes <131811099+raymond-hughes@users.noreply.github.com> Date: Sun, 27 Oct 2024 21:50:08 -0400 Subject: [PATCH] Updateing docker to run locally --- Dockerfile | 111 +++++++++++++++--------------------------- docker-compose-m1.yml | 56 ++++++++++++++++----- 2 files changed, 85 insertions(+), 82 deletions(-) diff --git a/Dockerfile b/Dockerfile index a774e7e8943..2fc3fd7b9ff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,84 +1,53 @@ -FROM ruby:2.7.3-slim -MAINTAINER Development and Operations team @ Department of Veterans Affairs - -# Build variables -ENV BUILD build-essential postgresql-client libaio1 libpq-dev libsqlite3-dev curl software-properties-common apt-transport-https pdftk -ENV CASEFLOW git yarn - -# Environment (system) variables -ENV LD_LIBRARY_PATH="/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH" \ - ORACLE_HOME="/opt/oracle/instantclient_12_2" \ - LANG="AMERICAN_AMERICA.US7ASCII" \ +ARG RUBY_VERSION=2.7.3 +FROM registry.docker.com/library/ruby:$RUBY_VERSION-slim + +# Set up environment variables +ENV BUILD="build-essential postgresql-client libpq-dev libsqlite3-dev curl ca-certificates wget git" \ + NVM_DIR="/usr/local/nvm" \ + NODE_VERSION="16.16.0" \ + PATH="$NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH" \ RAILS_ENV="development" \ DEPLOY_ENV="demo" \ - PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH" \ - NODE_OPTIONS="--max-old-space-size=8192" \ - SSL_CERT_FILE="/etc/ssl/certs/cacert.pem" -# install oracle deps -WORKDIR /opt/oracle/instantclient_12_2/ -COPY docker-bin/oracle_libs/* ./ -RUN ln -s libclntsh.so.12.1 libclntsh.so - -WORKDIR /caseflow + LANG="C.UTF-8" -# Copy all the files -COPY . . +# Copy all files from docker-bin into /usr/bin/ in the container +COPY docker-bin/. /usr/bin/ -RUN pwd && ls -lsa +# Copy the contents of the instantclient_23_3 folder to the Oracle directory +COPY docker-bin/instantclient_23_3 /usr/lib/oracle/instantclient_23_3 -# Install VA Trusted Certificates -RUN mkdir -p /usr/local/share/ca-certificates/va -COPY docker-bin/ca-certs/*.crt /usr/local/share/ca-certificates/va/ -#COPY docker-bin/ca-certs/*.cer /usr/local/share/ca-certificates/va/ -RUN update-ca-certificates -COPY docker-bin/ca-certs/cacert.pem /etc/ssl/certs/cacert.pem +# Set environment variables for Oracle libraries +ENV ORACLE_HOME="/usr/lib/oracle/instantclient_23_3" +ENV LD_LIBRARY_PATH="/usr/lib/oracle/instantclient_23_3:$LD_LIBRARY_PATH" -RUN rm /bin/sh && ln -s /bin/bash /bin/sh - -RUN apt -y update && \ - apt -y upgrade && \ - mkdir -p /usr/share/man/man1 && \ - mkdir /usr/share/man/man7 && \ - apt install -y ${BUILD} && \ - curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ - echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ - apt -y update - -# Install node -RUN mkdir /usr/local/nvm -ENV NVM_DIR /usr/local/nvm -ENV NODE_VERSION 16.16.0 -ENV NVM_INSTALL_PATH $NVM_DIR/versions/node/v$NODE_VERSION -RUN curl --silent -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash -RUN source $NVM_DIR/nvm.sh \ - && nvm install $NODE_VERSION \ - && nvm alias default $NODE_VERSION \ - && nvm use default -ENV NODE_PATH $NVM_INSTALL_PATH/lib/node_modules -ENV PATH $NVM_INSTALL_PATH/bin:$PATH - -RUN apt install -y ${CASEFLOW} && \ - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ - echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ - apt-get clean && apt-get autoclean && apt-get autoremove +# Install Oracle dependencies and create symbolic links +WORKDIR /usr/lib/oracle/instantclient_23_3/ +RUN ln -s libclntsh.so libclntsh.so.23.1 +WORKDIR /caseflow -# install jemalloc -RUN apt install -y --no-install-recommends libjemalloc-dev +# Install base dependencies +RUN apt-get update && \ + apt-get install -y --no-install-recommends $BUILD && \ + rm -rf /var/lib/apt/lists/* -RUN rm -rf /var/lib/apt/lists/* +# Set up NVM and Node +RUN mkdir -p $NVM_DIR && \ + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash && \ + . "$NVM_DIR/nvm.sh" && \ + nvm install $NODE_VERSION && \ + nvm alias default $NODE_VERSION -# Installing the version of bundler that corresponds to the Gemfile.lock -# Rake 13.0.1 is already installed, so we're uninstalling it and letting bundler install rake later. -RUN gem install bundler:$(cat Gemfile.lock | tail -1 | tr -d " ") && gem uninstall -i /usr/local/lib/ruby/gems/2.7.0 rake -RUN bundle install && \ - cd client && \ - yarn install && \ - yarn run build:demo && \ - chmod +x /caseflow/docker-bin/startup.sh && \ - rm -rf docker-bin +# Install compatible Bundler version and gems +COPY Gemfile* . +RUN gem install bundler -v 2.3.26 && \ + bundle config build.ruby-oci8 --with-oci8-include=/usr/lib/oracle/instantclient_23_3 --with-oci8-lib=/usr/lib/oracle/instantclient_23_3 && \ + bundle install -# Run the app -ENTRYPOINT ["/bin/bash", "-c", "/caseflow/docker-bin/startup.sh"] +# Expose the Rails port +ARG DEFAULT_PORT=3000 +EXPOSE ${DEFAULT_PORT} +# Start the Rails application +CMD ["bundle", "exec", "rails", "s", "-p", "3000", "-b", "0.0.0.0"] diff --git a/docker-compose-m1.yml b/docker-compose-m1.yml index 0dfb24be49b..6e0cfdb96ca 100644 --- a/docker-compose-m1.yml +++ b/docker-compose-m1.yml @@ -1,32 +1,58 @@ -version: '3' +version: "3.9" + services: + # PostgreSQL Database + appeals-db: + image: postgres:14.8 + container_name: appeals-db + ports: + - "5432:5432" + volumes: + - postgresdata:/var/lib/postgresql/data + environment: + - POSTGRES_PASSWORD=postgres + + # Redis Cache appeals-redis: - container_name: appeals-redis image: redis:6.2.6 + container_name: appeals-redis ports: - "6379:6379" - appeals-postgres: - image: postgres:14.8 - container_name: appeals-db + # Rails Application + rails: + build: + context: . + dockerfile: Dockerfile + command: "bundle exec rails s -p 3000 -b '0.0.0.0'" ports: - - "5432:5432" + - "3000:3000" volumes: - - "postgresdata:/var/lib/postgresql/data" - environment: - - POSTGRES_PASSWORD=postgres + - .:/caseflow + depends_on: + - appeals-db + - appeals-redis + - appeals-localstack-aws + env_file: + - .env + networks: + - ls + # Localstack for AWS Services appeals-localstack-aws: platform: linux/amd64 - container_name: localstack image: localstack/localstack:0.14.5 + container_name: localstack ports: - "4566:4566" environment: - SERVICES=sqs,dynamodb,kms volumes: - ./local/sqs/conf:/conf + networks: + - ls + # Metabase Analytics appeals-metabase: platform: linux/amd64 container_name: metabase @@ -34,6 +60,14 @@ services: context: metabase ports: - "3002:3000" + networks: + - ls volumes: - postgresdata: + postgresdata: {} + +networks: + ls: + ipam: + config: + - subnet: "10.0.2.0/24"