|
#!/bin/bash |
|
|
|
if [[ ! -z $1 ]] |
|
then |
|
echo "Argument given, create and enter folder" |
|
mkdir -p $1 |
|
cd $1 |
|
APP_NAME=$1 |
|
else |
|
echo "No argument given, asuming current folder" |
|
APP_NAME=$(basename "$PWD") |
|
fi |
|
|
|
echo "Generate Dockerfile" |
|
cat << EOF > ./Dockerfile |
|
FROM ruby:2.6 |
|
|
|
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client |
|
RUN mkdir /myapp |
|
|
|
WORKDIR /usr/src/app |
|
|
|
COPY Gemfile /usr/src/app/Gemfile |
|
COPY Gemfile.lock /usr/src/app/Gemfile.lock |
|
|
|
RUN bundle install |
|
|
|
COPY . /usr/src/app |
|
|
|
# Add a script to be executed every time the container starts. |
|
COPY entrypoint.sh /usr/bin/ |
|
|
|
RUN chmod +x /usr/bin/entrypoint.sh |
|
|
|
ENTRYPOINT ["entrypoint.sh"] |
|
|
|
EXPOSE 3000 |
|
|
|
# Start the main process. |
|
CMD ["rails", "server", "-b", "0.0.0.0"] |
|
EOF |
|
|
|
echo "Generate temporal Gemfile" |
|
cat << EOF > ./Gemfile |
|
source 'https://rubygems.org' |
|
gem 'rails', '~>5' |
|
EOF |
|
|
|
echo "Generate temporal Gemfile.lock" |
|
touch Gemfile.lock |
|
|
|
echo "Generate entrypoint.sh" |
|
cat << EOF > ./entrypoint.sh |
|
#!/bin/bash |
|
set -e |
|
|
|
# Remove a potentially pre-existing server.pid for Rails. |
|
rm -f /myapp/tmp/pids/server.pid |
|
|
|
|
|
# Then exec the container's main process (what's set as CMD in the Dockerfile). |
|
exec "\$@" |
|
EOF |
|
|
|
echo "Generate docker-compese.yml" |
|
cat << EOF > ./docker-compose.yml |
|
version: '3' |
|
services: |
|
db: |
|
image: postgres |
|
app: |
|
build: . |
|
command: bash -c "bundle exec rails s -p 3000 -b '0.0.0.0'" |
|
volumes: |
|
- .:/usr/src/app |
|
ports: |
|
- "3000:3000" |
|
depends_on: |
|
- db |
|
EOF |
|
|
|
echo "Build container" |
|
docker-compose build app |
|
|
|
echo "Run 'rails new' inside container" |
|
docker-compose run app rails new . --force --no-deps --database=postgresql |
|
|
|
echo "Return files to script user" |
|
sudo chown -R $USER . |
|
|
|
echo "Rebuild the image to update Gemfile changes" |
|
docker-compose build |
|
|
|
echo "Fix config/database.yml" |
|
cat << EOF > config/database.yml |
|
default: &default |
|
adapter: postgresql |
|
encoding: unicode |
|
host: db |
|
username: postgres |
|
password: |
|
pool: 5 |
|
|
|
development: |
|
<<: *default |
|
database: ${APP_NAME}_development |
|
|
|
test: |
|
<<: *default |
|
database: ${APP_NAME}_test |
|
EOF |
|
|
|
echo "Create the databases" |
|
docker-compose run --rm app rails db:create |
|
|
|
echo "Booting ocker compose cluster" |
|
docker-compose up -d |