-
Star
(146)
You must be signed in to star a gist -
Fork
(59)
You must be signed in to fork a gist
-
-
Save satendra02/1b335b06bfc5921df486f26bd98e0e89 to your computer and use it in GitHub Desktop.
| Create docker folder in app root | |
| -app_name | |
| -app | |
| -db | |
| -config | |
| -database.yml | |
| ... | |
| -docker | |
| -app | |
| -DockerFile | |
| -web | |
| -DockerFile | |
| -nginx.conf | |
| -docker-compose.yml |
| FROM ruby:2.3.1 | |
| # Install dependencies | |
| RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs | |
| # Set an environment variable where the Rails app is installed to inside of Docker image: | |
| ENV RAILS_ROOT /var/www/app_name | |
| RUN mkdir -p $RAILS_ROOT | |
| # Set working directory, where the commands will be ran: | |
| WORKDIR $RAILS_ROOT | |
| # Setting env up | |
| ENV RAILS_ENV='production' | |
| ENV RACK_ENV='production' | |
| # Adding gems | |
| COPY Gemfile Gemfile | |
| COPY Gemfile.lock Gemfile.lock | |
| RUN bundle install --jobs 20 --retry 5 --without development test | |
| # Adding project files | |
| COPY . . | |
| RUN bundle exec rake assets:precompile | |
| EXPOSE 3000 | |
| CMD ["bundle", "exec", "puma", "-C", "config/puma.rb"] |
| default: &default | |
| adapter: postgresql | |
| encoding: unicode | |
| username: postgres | |
| password: | |
| pool: 5 | |
| host: db | |
| production: | |
| <<: *default | |
| database: app_name_production |
| version: '3' | |
| volumes: | |
| postgres_data: {} | |
| services: | |
| app: | |
| build: | |
| context: . | |
| dockerfile: ./docker/app/DockerFile | |
| depends_on: | |
| - db | |
| db: | |
| image: postgres | |
| volumes: | |
| - postgres_data:/var/lib/postgresql/data | |
| web: | |
| build: | |
| context: . | |
| dockerfile: ./docker/web/DockerFile | |
| depends_on: | |
| - app | |
| ports: | |
| - 80:80 |
| # This is a template. Referenced variables (e.g. $RAILS_ROOT) need | |
| # to be rewritten with real values in order for this file to work. | |
| upstream rails_app { | |
| server app:3000; | |
| } | |
| server { | |
| # define your domain | |
| server_name www.example.com; | |
| # define the public application root | |
| root $RAILS_ROOT/public; | |
| index index.html; | |
| # define where Nginx should write its logs | |
| access_log $RAILS_ROOT/log/nginx.access.log; | |
| error_log $RAILS_ROOT/log/nginx.error.log; | |
| # deny requests for files that should never be accessed | |
| location ~ /\. { | |
| deny all; | |
| } | |
| location ~* ^.+\.(rb|log)$ { | |
| deny all; | |
| } | |
| # serve static (compiled) assets directly if they exist (for rails production) | |
| location ~ ^/(assets|images|javascripts|stylesheets|swfs|system)/ { | |
| try_files $uri @rails; | |
| access_log off; | |
| gzip_static on; # to serve pre-gzipped version | |
| expires max; | |
| add_header Cache-Control public; | |
| # Some browsers still send conditional-GET requests if there's a | |
| # Last-Modified header or an ETag header even if they haven't | |
| # reached the expiry date sent in the Expires header. | |
| add_header Last-Modified ""; | |
| add_header ETag ""; | |
| break; | |
| } | |
| # send non-static file requests to the app server | |
| location / { | |
| try_files $uri @rails; | |
| } | |
| location @rails { | |
| proxy_set_header X-Real-IP $remote_addr; | |
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| proxy_set_header Host $http_host; | |
| proxy_redirect off; | |
| proxy_pass http://rails_app; | |
| } | |
| } |
| # Base image: | |
| FROM nginx | |
| # Install dependencies | |
| RUN apt-get update -qq && apt-get -y install apache2-utils | |
| # establish where Nginx should look for files | |
| ENV RAILS_ROOT /var/www/app_name | |
| # Set our working directory inside the image | |
| WORKDIR $RAILS_ROOT | |
| # create log directory | |
| RUN mkdir log | |
| # copy over static assets | |
| COPY public public/ | |
| # Copy Nginx config template | |
| COPY docker/web/nginx.conf /tmp/docker.nginx | |
| # substitute variable references in the Nginx config template for real values from the environment | |
| # put the final config in its place | |
| RUN envsubst '$RAILS_ROOT' < /tmp/docker.nginx > /etc/nginx/conf.d/default.conf | |
| EXPOSE 80 | |
| # Use the "exec" form of CMD so Nginx shuts down gracefully on SIGTERM (i.e. `docker stop`) | |
| CMD [ "nginx", "-g", "daemon off;" ] |
@nejdetkadir Check this SO answer to run migrations on docker container
@satendra02
thank you for sharing.
I am using.
ruby "3.1.2"
gem "rails", "> 7.0.3"> 5.0"
gem "puma", "
I tried with the same configuration. but I am facing an issue with the below error. can you teach me? how can i solve this error?
`bundler: failed to load command: puma (/usr/local/bundle/bin/puma)
/usr/local/bundle/gems/puma-5.6.4/lib/puma/dsl.rb:83:in `read': No such file or directory @ rb_sysopen - config/puma.rb (Errno::ENOENT)
from /usr/local/bundle/gems/puma-5.6.4/lib/puma/dsl.rb:83:in `_load_from'
from /usr/local/bundle/gems/puma-5.6.4/lib/puma/configuration.rb:219:in `block in load'
from /usr/local/bundle/gems/puma-5.6.4/lib/puma/configuration.rb:219:in `each'
from /usr/local/bundle/gems/puma-5.6.4/lib/puma/configuration.rb:219:in `load'
from /usr/local/bundle/gems/puma-5.6.4/lib/puma/launcher.rb:60:in `initialize'
from /usr/local/bundle/gems/puma-5.6.4/lib/puma/cli.rb:72:in `new'
from /usr/local/bundle/gems/puma-5.6.4/lib/puma/cli.rb:72:in `initialize'
from /usr/local/bundle/gems/puma-5.6.4/bin/puma:8:in `new'
from /usr/local/bundle/gems/puma-5.6.4/bin/puma:8:in `<top (required)>'
from /usr/local/bundle/bin/puma:25:in `load'
from /usr/local/bundle/bin/puma:25:in `<top (required)>'
from /usr/local/lib/ruby/3.1.0/bundler/cli/exec.rb:58:in `load'
from /usr/local/lib/ruby/3.1.0/bundler/cli/exec.rb:58:in `kernel_load'
from /usr/local/lib/ruby/3.1.0/bundler/cli/exec.rb:23:in `run'
from /usr/local/lib/ruby/3.1.0/bundler/cli.rb:484:in `exec'
from /usr/local/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
from /usr/local/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
from /usr/local/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
from /usr/local/lib/ruby/3.1.0/bundler/cli.rb:31:in `dispatch'
from /usr/local/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
from /usr/local/lib/ruby/3.1.0/bundler/cli.rb:25:in `start'
from /usr/local/lib/ruby/gems/3.1.0/gems/bundler-2.3.7/libexec/bundle:48:in `block in <top (required)>'
from /usr/local/lib/ruby/3.1.0/bundler/friendly_errors.rb:103:in `with_friendly_errors'
from /usr/local/lib/ruby/gems/3.1.0/gems/bundler-2.3.7/libexec/bundle:36:in `<top (required)>'
from /usr/local/bin/bundle:25:in `load'
from /usr/local/bin/bundle:25:in `
'
`
@vishalsabhaya please check this comment
@satendra02 thank you for response.
I referred that comment yesterday.
it’s working fine.
@satendra02
Thank you for this collection.
Do you mind also adding a config for Sidekiq as well ?
I want to run migrations when project dockerize. Can anyone help me?