## Bootstrap project 1. Initialize your project folder: `git init` 2. Create your project files with a ruby image: docker run -it -v .:/rails/ -w /rails/ ruby:latest /bin/bash gem install rails rails new . exit 3. Configure the rails web console to work in docker in `development.rb`: # Allow IRB in browser for a docker environment config.web_console.permissions = '0.0.0.0/0' ## Simple environment 1. Create a `docker-compose.yml`: services: app: image: ruby: command: ./bin/rails server -b 0.0.0.0 ports: - "3000:3000" volumes: - .:/rails/ - bundle:/usr/local/bundle working_dir: /rails/ volumes: bundle: 2. Setup the application: `docker compose run app bin/setup` 3. Start the application: `docker compose up` ## Advanced environment 1. Copy the `Dockerfile` into a new `Dockerfile.dev` 1. Remove any environment variables 2. Modify `bundle install` step to _only_ bundle install 3. Remove precompilation steps 4. Test it with `docker build Dockerfile.dev .` 1. Create a `docker-compose.yml`: services: app: build: context: . dockerfile: Dockerfile.dev command: ./bin/rails server -b 0.0.0.0 ports: - "3000:3000" volumes: - .:/rails ## Postgres 1. Setup docker service: services: app: # ... environment: DATABASE_HOST: db DATABASE_PASSWORD: password # ... db: image: postgres:15 environment: POSTGRES_PASSWORD: password volumes: - db:/var/lib/postgresql/data volumes: db: 3. Run `db` docker service: `docker compose up db` 4. `docker compose run app bin/rails db:system:change --to=postgresql` 5. `docker compose run app bin/setup` 6. Modify `./config/database.yml`: default: &default adapter: postgresql encoding: unicode host: <%= ENV["DATABASE_HOST"] %> password: <%= ENV["DATABASE_PASSWORD"] %> # For details on connection pooling, see Rails configuration guide # https://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: postgres ## Fly.io (WIP) 1. Setup docker volume: services: app: # ... volumes: # ... - fly:/root/.fly # ... volumes: fly: 2. `docker compose run app /bin/bash` 3. `curl -L https://fly.io/install.sh | sh` 4. `/root/.fly/bin/fly auth login` 5. `/root/.fly/bin/fly launch` NOTE: Use Web UI to confirm settings! 6. After which you can just deploy: `docker compose run app /root/.fly/bin/fly deploy`