Guida per configurare una nuova app rails tramite docker
Creare la directory dell'applicazione
Copiare i template di Docker all'interno della directory del progetto
a. (Dockerfile)
FROM ruby:2.5.3
RUN apt-get update -qq && \\
apt-get install -y build-essential libpq-dev apt-transport-https
RUN curl -sL https://deb.nodesource.com/setup\_10.x | bash - && \\
apt-get install -y nodejs
RUN 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 update -qq && \\
apt-get install -y yarn
WORKDIR /web
RUN useradd -u 1000 -Um rails && \\
chown -R rails:rails /web
USER rails
b. (docker-compose.yml)
version: "3.2"
services:
web:
build: .
environment:
- WEBPACKER_DEV_SERVER_HOST=webpacker
command: ["rails", "server", "-b", "0.0.0.0"]
ports:
- 3000:3000
volumes:
- .:/web
- gem_bundle:/usr/local/bundle
Copiati i template procedere da terminale (all'interno della directory del nostro progetto cd myapp/) eseguendo
~/myapp> docker-compose build
Al termine dell'installazione entrare nel container
~/myapp> docker-compose run --rm web bash
Installare dall'interno del container rails
:/web$ gem install rails
Uscire dalla directory web del container (cd ..) ed eseguire il comando
:/web$ cd ..
:/$ rails new web
Volendo utilizzare mysql al posto di sqlite impostato di default:
Sostituire la gemma sqlite con mysql2 nel Gemfile ed aggiungere al docker-compose.yml
version: "3.2"
services:
web:
build: .
environment:
- WEBPACKER\_DEV\_SERVER\_HOST=webpacker
command: \["rails", "server", "-b", "0.0.0.0"\]
ports:
- 3000:3000
volumes:
- .:/web
- gem\_bundle:/usr/local/bundle
db:
image: mysql:5.7.25
environment:
- MYSQL\_ALLOW\_EMPTY\_PASSWORD="yes"
ports:
- 3306:3306
volumes:
- db\_data:/var/lib/mysql
Configurare quindi il nuovo db in database.yml come segue
default: &default
adapter: mysql2
host: db
user: root
pool: <%= ENV.fetch("RAILS\_MAX\_THREADS") { 5 } %>
timeout: 5000
development:
<<: \*default
database: myapp-dev
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
<<: \*default
database: myapp-test
production:
<<: \*default
database: myapp-prod
Procedere all'installazione della nuova gemma
~/myapp> docker-compose run --rm web bundle
Terminata l'installazione della gemma, per creare le immagini del nuovo database, eseguire il comando
~/myapp> docker-compose up -d
Quindi si possono creare i db da dentro il container (docker-compose exec web bash) eseguendo
:/web$ rails db:create
Per installare webpacker:
Aggiungere al Gemfile webpacker
group :development do
...
gem 'webpacker'
end
Modificare dunque il docker-compose.yml
version: "3.2"
services:
web:
build: .
environment:
- WEBPACKER\_DEV\_SERVER\_HOST=webpacker
command: \["rails", "server", "-b", "0.0.0.0"\]
ports:
- 3000:3000
volumes:
- .:/web
- gem\_bundle:/usr/local/bundle
db:
image: mysql:5.7.25
environment:
- MYSQL\_ALLOW\_EMPTY\_PASSWORD="yes"
ports:
- 3306:3306
volumes:
- db\_data:/var/lib/mysql
webpacker:
depends\_on:
- web
image: myapp\_web
environment:
- WEBPACKER\_DEV\_SERVER\_HOST=0.0.0.0
command: ./bin/webpack-dev-server
volumes:
- .:/web
- gem\_bundle:/usr/local/bundle
ports:
- 3035:3035
Installare quindi la gemma (docker-compose run --rm web bundle o eseguire il bundle da dentro il container)
Installata la gemma procedere con l'installazione di webpacker da dentro il container
:/web$ rails webpacker:install
Ora eseguite docker-compose up e su localhost:3000 avrete la pagina default di rails!