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
|
||||
|
||||
# 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/
|
||||
dev_server:
|
||||
|
|
|
@ -1,12 +1,27 @@
|
|||
version: '3'
|
||||
|
||||
volumes:
|
||||
postgres:
|
||||
redis:
|
||||
bundle:
|
||||
packs:
|
||||
node_modules:
|
||||
|
||||
services:
|
||||
|
||||
server: &server
|
||||
build:
|
||||
context: .
|
||||
dockerfile: ./docker/Dockerfile
|
||||
args:
|
||||
BUNDLE_WITHOUT: ''
|
||||
RAILS_ENV: 'development'
|
||||
RAILS_SERVE_STATIC_FILES: 'false'
|
||||
volumes:
|
||||
- ./:/app
|
||||
- ./:/app:cached
|
||||
- bundle:/bundle:delegated
|
||||
- packs:/app/public/packs
|
||||
- node_modules:/app/node_modules
|
||||
links:
|
||||
- postgres
|
||||
- redis
|
||||
|
@ -16,8 +31,25 @@ services:
|
|||
- REDIS_URL=redis://redis:6379
|
||||
- POSTGRES_HOST=postgres
|
||||
- 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:
|
||||
image: postgres:9.6
|
||||
restart: always
|
||||
|
@ -37,9 +69,3 @@ services:
|
|||
- redis:/data/redis
|
||||
ports:
|
||||
- '6379:6379'
|
||||
|
||||
volumes:
|
||||
postgres:
|
||||
external: true
|
||||
redis:
|
||||
external: true
|
||||
|
|
|
@ -1,5 +1,16 @@
|
|||
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 \
|
||||
&& apt-get -qq -y install \
|
||||
build-essential \
|
||||
|
@ -18,13 +29,24 @@ RUN apt-get update \
|
|||
|
||||
RUN mkdir -p /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
|
||||
|
||||
ENV RAILS_SERVE_STATIC_FILES true
|
||||
ENV RAILS_ENV=production
|
||||
|
||||
RUN bundle
|
||||
RUN SECRET_KEY_BASE=precompile_placeholder bundle exec rake assets:precompile
|
||||
# generate production assets if production environment
|
||||
RUN if [ "$RAILS_ENV" = "production" ]; then \
|
||||
SECRET_KEY_BASE=precompile_placeholder bundle exec rake assets:precompile; \
|
||||
fi
|
||||
|
||||
# Add a script to be executed every time the container starts.
|
||||
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
|
||||
|
||||
# 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
|
||||
|
||||
If you are using docker for the development follow the following steps.
|
||||
|
||||
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.
|
||||
The first time you start your development environment run the following two commands:
|
||||
|
||||
```bash
|
||||
docker volume create --name=postgres
|
||||
docker volume create --name=redis
|
||||
# build and start the services
|
||||
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
|
||||
```
|
||||
|
||||
Remove the `node_modules` directory from the root if it exists and run the following command.
|
||||
|
||||
```bash
|
||||
docker-compose run server yarn install
|
||||
```
|
||||
The docker-compose environment consists of:
|
||||
- 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 :
|
||||
|
||||
```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.
|
||||
|
||||
Now you should be able to run :
|
||||
|
||||
```bash
|
||||
docker-compose up
|
||||
```
|
||||
|
||||
to see the application up and running.
|
||||
|
||||
### 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)
|
||||
|
|
Loading…
Reference in a new issue