Improve docker compose performance (#347) 🤩
* Fix warning Integrity check: System parameters don't match * Reduce commands required to use docker-compose and update quick-setup doc Data will still persist when stopping and restarting containers. To destroy the data can use docker-compose down --volumes * Moved webpacker-dev-server to its own service * cache bundle and yarn - improve volume performance - env conditional statements * Fix inconsistent build results found during testing
This commit is contained in:
parent
3a1c0aef07
commit
3f403c9e7a
6 changed files with 88 additions and 37 deletions
|
@ -54,7 +54,7 @@ development:
|
||||||
compile: true
|
compile: true
|
||||||
|
|
||||||
# Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
|
# Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
|
||||||
check_yarn_integrity: true
|
check_yarn_integrity: false
|
||||||
|
|
||||||
# Reference: https://webpack.js.org/configuration/dev-server/
|
# Reference: https://webpack.js.org/configuration/dev-server/
|
||||||
dev_server:
|
dev_server:
|
||||||
|
|
|
@ -1,12 +1,27 @@
|
||||||
version: '3'
|
version: '3'
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
postgres:
|
||||||
|
redis:
|
||||||
|
bundle:
|
||||||
|
packs:
|
||||||
|
node_modules:
|
||||||
|
|
||||||
services:
|
services:
|
||||||
|
|
||||||
server: &server
|
server: &server
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: ./docker/Dockerfile
|
dockerfile: ./docker/Dockerfile
|
||||||
|
args:
|
||||||
|
BUNDLE_WITHOUT: ''
|
||||||
|
RAILS_ENV: 'development'
|
||||||
|
RAILS_SERVE_STATIC_FILES: 'false'
|
||||||
volumes:
|
volumes:
|
||||||
- ./:/app
|
- ./:/app:cached
|
||||||
|
- bundle:/bundle:delegated
|
||||||
|
- packs:/app/public/packs
|
||||||
|
- node_modules:/app/node_modules
|
||||||
links:
|
links:
|
||||||
- postgres
|
- postgres
|
||||||
- redis
|
- redis
|
||||||
|
@ -16,8 +31,25 @@ services:
|
||||||
- REDIS_URL=redis://redis:6379
|
- REDIS_URL=redis://redis:6379
|
||||||
- POSTGRES_HOST=postgres
|
- POSTGRES_HOST=postgres
|
||||||
- RAILS_ENV=development
|
- RAILS_ENV=development
|
||||||
command: ["foreman", "start", "-f", "./docker/Procfile.docker.dev"]
|
- WEBPACKER_DEV_SERVER_HOST=webpacker
|
||||||
|
command: ["bundle", "exec", "rails", "s", "-p", "3000", "-b", "0.0.0.0"]
|
||||||
|
|
||||||
|
webpacker:
|
||||||
|
<<: *server
|
||||||
|
command: ./bin/webpack-dev-server
|
||||||
|
depends_on:
|
||||||
|
- "server"
|
||||||
|
ports:
|
||||||
|
- '3035:3035'
|
||||||
|
volumes:
|
||||||
|
- .:/app:cached
|
||||||
|
- bundle:/bundle
|
||||||
|
- node_modules:/app/node_modules
|
||||||
|
- packs:/app/public/packs
|
||||||
|
environment:
|
||||||
|
- "NODE_ENV=development"
|
||||||
|
- "RAILS_ENV=development"
|
||||||
|
- "WEBPACKER_DEV_SERVER_HOST=0.0.0.0"
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:9.6
|
image: postgres:9.6
|
||||||
restart: always
|
restart: always
|
||||||
|
@ -37,9 +69,3 @@ services:
|
||||||
- redis:/data/redis
|
- redis:/data/redis
|
||||||
ports:
|
ports:
|
||||||
- '6379:6379'
|
- '6379:6379'
|
||||||
|
|
||||||
volumes:
|
|
||||||
postgres:
|
|
||||||
external: true
|
|
||||||
redis:
|
|
||||||
external: true
|
|
||||||
|
|
|
@ -1,5 +1,16 @@
|
||||||
FROM ruby:2.6.5-slim
|
FROM ruby:2.6.5-slim
|
||||||
|
|
||||||
|
# ARG default to production settings
|
||||||
|
# For development docker-compose file overrides ARGS
|
||||||
|
ARG BUNDLE_WITHOUT="development:test"
|
||||||
|
ENV BUNDLE_WITHOUT ${BUNDLE_WITHOUT}
|
||||||
|
|
||||||
|
ARG RAILS_SERVE_STATIC_FILES=true
|
||||||
|
ENV RAILS_SERVE_STATIC_FILES ${RAILS_SERVE_STATIC_FILES}
|
||||||
|
|
||||||
|
ARG RAILS_ENV=production
|
||||||
|
ENV RAILS_ENV ${RAILS_ENV}
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get -qq -y install \
|
&& apt-get -qq -y install \
|
||||||
build-essential \
|
build-essential \
|
||||||
|
@ -18,13 +29,24 @@ RUN apt-get update \
|
||||||
|
|
||||||
RUN mkdir -p /app
|
RUN mkdir -p /app
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY Gemfile Gemfile.lock ./
|
||||||
|
|
||||||
|
# Do not install development or test gems in production
|
||||||
|
RUN if [ "$RAILS_ENV" = "production" ]; then \
|
||||||
|
bundle install -j 4 -r 3 --without development test; \
|
||||||
|
else bundle install -j 4 -r 3; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
COPY package.json yarn.lock ./
|
||||||
|
RUN yarn install
|
||||||
|
|
||||||
COPY . /app
|
COPY . /app
|
||||||
|
|
||||||
ENV RAILS_SERVE_STATIC_FILES true
|
# generate production assets if production environment
|
||||||
ENV RAILS_ENV=production
|
RUN if [ "$RAILS_ENV" = "production" ]; then \
|
||||||
|
SECRET_KEY_BASE=precompile_placeholder bundle exec rake assets:precompile; \
|
||||||
RUN bundle
|
fi
|
||||||
RUN SECRET_KEY_BASE=precompile_placeholder bundle exec rake assets:precompile
|
|
||||||
|
|
||||||
# Add a script to be executed every time the container starts.
|
# Add a script to be executed every time the container starts.
|
||||||
COPY ./docker/entrypoint.sh /usr/bin/
|
COPY ./docker/entrypoint.sh /usr/bin/
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
backend: ../bin/rails server -b 0.0.0.0 -p 3000
|
|
||||||
frontend: ../bin/webpack-dev-server
|
|
|
@ -5,4 +5,4 @@ set -e
|
||||||
rm -f /app/tmp/pids/server.pid
|
rm -f /app/tmp/pids/server.pid
|
||||||
|
|
||||||
# Then exec the container's main process (what's set as CMD in the Dockerfile).
|
# Then exec the container's main process (what's set as CMD in the Dockerfile).
|
||||||
exec "$@"
|
exec "$@"
|
||||||
|
|
|
@ -42,40 +42,45 @@ password: 123456
|
||||||
|
|
||||||
### Docker for development
|
### Docker for development
|
||||||
|
|
||||||
If you are using docker for the development follow the following steps.
|
The first time you start your development environment run the following two commands:
|
||||||
|
|
||||||
We are running postgres and redis services along with chatwoot server using docker-compose.
|
|
||||||
|
|
||||||
Create a volume for postgres and redis so that you data will persist even if the containers goes down.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker volume create --name=postgres
|
# build and start the services
|
||||||
docker volume create --name=redis
|
docker-compose up --build
|
||||||
|
# prepare the database
|
||||||
|
docker-compose exec server bundle exec rails db:prepare
|
||||||
|
```
|
||||||
|
Then browse http://localhost:3000
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# To stop your environment use Control+C (on Mac) CTRL+C (on Win) or
|
||||||
|
docker-compose down
|
||||||
|
# start the services
|
||||||
|
docker-compose up
|
||||||
|
```
|
||||||
|
|
||||||
|
When you change the service’s Dockerfile or the contents of the build directory, run stop then build. (For example after modifying package.json or Gemfile)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose stop
|
||||||
docker-compose build
|
docker-compose build
|
||||||
```
|
```
|
||||||
|
|
||||||
Remove the `node_modules` directory from the root if it exists and run the following command.
|
|
||||||
|
|
||||||
```bash
|
The docker-compose environment consists of:
|
||||||
docker-compose run server yarn install
|
- chatwoot server
|
||||||
```
|
- postgres
|
||||||
|
- redis
|
||||||
|
- webpacker-dev-server
|
||||||
|
|
||||||
If in case you encounter a seeding issue or you want reset the database you can do it using the following command :
|
If in case you encounter a seeding issue or you want reset the database you can do it using the following command :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose run server bundle exec rake db:reset
|
docker-compose run -rm server bundle exec rake db:reset
|
||||||
```
|
```
|
||||||
|
|
||||||
This command essentially runs postgres and redis containers and then run the rake command inside the chatwoot server container.
|
This command essentially runs postgres and redis containers and then run the rake command inside the chatwoot server container.
|
||||||
|
|
||||||
Now you should be able to run :
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose up
|
|
||||||
```
|
|
||||||
|
|
||||||
to see the application up and running.
|
|
||||||
|
|
||||||
### Docker for production
|
### Docker for production
|
||||||
|
|
||||||
You can use our official Docker image from [https://hub.docker.com/r/chatwoot/chatwoot](https://hub.docker.com/r/chatwoot/chatwoot)
|
You can use our official Docker image from [https://hub.docker.com/r/chatwoot/chatwoot](https://hub.docker.com/r/chatwoot/chatwoot)
|
||||||
|
|
Loading…
Reference in a new issue