Docker Compose با Rails 8، Tailwind و SQLite

Summarize this content to 400 words in Persian Lang
سلام خیلی وقته ندیدم
در این راهنما به شما نشان میدهم که چگونه از Docker Compose برای راهاندازی و اجرای برنامه Ruby On Rails با استفاده از نسخه جدید 8 استفاده کنید. در این راهنما قصد ندارم تمام ویژگیهای جدیدی را که با جدیدترین نسخه ارسال میشوند فهرست کنم. نسخه اگر می خواهید در مورد آن بیشتر بدانید، می توانید یادداشت انتشار رسمی را بررسی کنید.
برای کارکرد این راهنما تنها یک شرط وجود دارد که نصب Docker یا OrbStack بر روی رایانه شماست. همین است. نیازی به نصب Ruby، Postgres، SQLite، Redis… چیزی نیست.
این یک نسخه به روز شده از راهنمای شروع سریع است که مدتی پیش نوشتم.
پوشه راه اندازی
ابتدا یک دایرکتوری برای پروژه شما ایجاد می کنیم و سپس 4 فایل خالی در داخل آن ایجاد می کنیم.
mkdir my-project
cd my-project
touch Dockerfile.dev
touch docker-compose.yml
touch Gemfile
touch Gemfile.lock
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
پروژه را تعریف کنید
با تنظیم فایل های مورد نیاز برای ساخت برنامه شروع کنید. این برنامه در داخل یک ظرف Docker که حاوی وابستگی های آن است اجرا می شود. تعریف وابستگی ها با استفاده از فایلی به نام Dockerfile.dev انجام می شود. برای شروع، موارد زیر را در داخل آن وارد کنید Dockerfile.dev فایل:
# syntax = docker/dockerfile:1
# Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile
ARG RUBY_VERSION=3.3.5
FROM registry.docker.com/library/ruby:$RUBY_VERSION-slim-bookworm
# Rails app lives here
WORKDIR /rails
# Install packages needed to build gems
RUN apt-get update -qq && \
apt-get install –no-install-recommends -y build-essential git curl node-gyp sqlite3
# Install JavaScript dependencies
ARG NODE_VERSION=18.15.0
ARG YARN_VERSION=latest
ENV PATH=/usr/local/node/bin:$PATH
RUN curl -sL https://github.com/nodenv/node-build/archive/master.tar.gz | tar xz -C /tmp/ && \
/tmp/node-build-master/bin/node-build “${NODE_VERSION}” /usr/local/node && \
npm install -g yarn@$YARN_VERSION && \
rm -rf /tmp/node-build-master
# Run bundle install
COPY Gemfile Gemfile.lock ./
RUN bundle install
# Copy application code
COPY . .
# Start the server by default, this can be overwritten at runtime
EXPOSE 3000
CMD [“rails”, “server”, “-b”, “0.0.0.0”]
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
نکته
مهم است که از .dev به عنوان پسوند برای این فایل استفاده کنید در غیر این صورت دستور جدید rails جایگزین آن می شود.
این کد برنامه شما را در یک تصویر قرار می دهد که یک کانتینر می سازدبا روبی، باندلر و تمام وابستگی های شما در داخل آن. برای اطلاعات بیشتر درنحوه نوشتن Dockerfiles، راهنمای کاربر Docker را ببینیدو مرجع Dockerfile.
بعد، یک ویرایشگر را باز کنید و یک بوت استرپ ایجاد کنید Gemfile که فقط Rails را بار می کند. این در یک لحظه توسط بازنویسی خواهد شد rails new. در این مرحله می توانید از هر نسخه ریلی که می خواهید استفاده کنید.
source ‘https://rubygems.org’
gem ‘rails’, ‘~> 8.0’
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در نهایت، docker-compose.yml جایی است که جادو اتفاق می افتد. این فایل خدماتی را که برنامه شما را شامل می شود و پیکربندی مورد نیاز برای اجرای برنامه را تشریح می کند.
services:
web:
build:
context: .
dockerfile: Dockerfile.dev
command: bash -c “./bin/dev”
tty: true
volumes:
– .:/rails
ports:
– “3000:3000”
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
نکته
باید از tty:true استفاده کنید تا بتوانیم تغییرات را در فایلهای css/js مشاهده کنیم.
پروژه را بسازید
با وجود آن فایلها، اکنون میتوانید برنامه Rails skeleton را با استفاده از docker compose run ایجاد کنید:
$ docker compose run –no-deps web rails new . –name=my-project –force –css=tailwind –js=esbuild
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
وقتی این دستور را اجرا می کنید، Compose تصویری را برای آن می سازد web خدمات با استفاده از Dockerfile.dev فایلرا –no-deps به Compose میگوید سرویسهای مرتبط را شروع نکند. سپس اجرا می شود rails new داخل یک ظرف جدید، با استفاده از آن تصویر.
پس از انجام آن، باید یک برنامه جدید در داخل پوشه خود ایجاد کرده باشید.
نکته
اگر Docker را روی لینوکس اجرا می کنید، فایل ها rails new ایجاد شده متعلق به root هستند، برای تغییر آن ممکن است مجبور شوید chown را اجرا کنید.
$ sudo chown -R $USER:$USER .
اکنون که یک Gemfile جدید دارید، باید دوباره تصویر را بسازید. (این، و تغییرات به Gemfile یا Dockerfile، باید تنها مواردی باشد که نیاز به بازسازی دارید.)
$ docker compose build
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اجرای پروژه
قبل از اینکه برنامه خود را بوت کنید، مطمئن شوید که 0.0.0.0 را به سرور خود متصل کرده ایم. رفتن به Procfile.dev و “-b 0.0.0.0” را در انتهای خط اول اضافه کنید، باید شبیه به این باشد.
web: env RUBY_DEBUG_OPEN=true bin/rails server -b 0.0.0.0
js: yarn build –watch
css: yarn build:css –watch
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
و آخرین مرحله قبل از چرخش برنامه پروژه، اجازه دهید برخی تغییرات جزئی در آن انجام دهیم Dockerfile.dev فایل بلافاصله این خطوط را اضافه کنیدCOPY ..
# Entrypoint prepares the database.
ENTRYPOINT [“/rails/bin/docker-entrypoint”]
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
Dockerfile.dev نهایی باید به شکل زیر باشد:
# syntax = docker/dockerfile:1
# Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile
ARG RUBY_VERSION=3.3.5
FROM registry.docker.com/library/ruby:$RUBY_VERSION-slim-bookworm
# Rails app lives here
WORKDIR /rails
# Install packages needed to build gems
RUN apt-get update -qq && \
apt-get install –no-install-recommends -y build-essential git curl node-gyp sqlite3
# Install JavaScript dependencies
ARG NODE_VERSION=18.15.0
ARG YARN_VERSION=latest
ENV PATH=/usr/local/node/bin:$PATH
RUN curl -sL https://github.com/nodenv/node-build/archive/master.tar.gz | tar xz -C /tmp/ && \
/tmp/node-build-master/bin/node-build “${NODE_VERSION}” /usr/local/node && \
npm install -g yarn@$YARN_VERSION && \
rm -rf /tmp/node-build-master
# Run bundle install
COPY Gemfile Gemfile.lock ./
RUN bundle install
# Copy application code
COPY . .
# Entrypoint prepares the database.
ENTRYPOINT [“/rails/bin/docker-entrypoint”]
# Start the server by default, this can be overwritten at runtime
EXPOSE 3000
CMD [“rails”, “server”, “-b”, “0.0.0.0”]
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
حالا اجرا کنdocker compose buildدوباره و سپس در نهایت،docker compose up.
صفحه خوش آمدگویی Rails را مشاهده کنید!
همین است. اکنون برنامه شما باید روی پورت 3000 در داکر دایمون شما اجرا شود، به این آدرس بروید http://localhost:3000 در یک مرورگر وب برای دیدن Rails Welcome.
برنامه را متوقف کنید
برای توقف برنامه، docker compose را در فهرست پروژه خود اجرا کنید. می توانید از همان پنجره ترمینالی که پایگاه داده را در آن راه اندازی کرده اید یا از پنجره دیگری که به یک خط فرمان دسترسی دارید استفاده کنید. این یک راه تمیز برای متوقف کردن برنامه است.
docker compose down
✔ Container my-project-web-1 Removed0.0s
✔ Network my-project_default Removed
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
برنامه را مجددا راه اندازی کنید
برای راه اندازی مجدد برنامه را اجرا کنید docker compose up در دایرکتوری پروژه
برنامه را بازسازی کنید
اگر تغییراتی در فایل Gemfile یا Compose ایجاد کنید تا موارد دیگری را امتحان کنیدتنظیمات، شما باید دوباره بسازید. برخی تغییرات فقط نیاز دارندdocker compose up –build، اما بازسازی کامل نیاز به اجرای مجدد داردdocker compose run web bundle install برای همگام سازی تغییرات در Gemfile.lock بهمیزبان و به دنبال آن docker compose up –build.
در اینجا یک مثال از مورد اول است، که در آن بازسازی کامل لازم نیست.فرض کنید شما به سادگی می خواهید پورت در معرض دید میزبان محلی را تغییر دهید 3000در اولین مثال ما به 3001. برای نمایش، تغییر را در فایل Compose انجام دهیدبندر 3000 روی کانتینر از طریق یک پورت جدید، 3001، روی میزبان و ذخیره کنیدتغییرات:
ports:
– “3001:3000”
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اکنون، برنامه را بازسازی و راه اندازی مجدد کنید docker compose up –build.
در داخل کانتینر، برنامه شما در همان پورت قبلی اجرا می شود 3000، اماRails Welcome اکنون در دسترس است http://localhost:3001 در محل شمامیزبان.
سلام خیلی وقته ندیدم
در این راهنما به شما نشان میدهم که چگونه از Docker Compose برای راهاندازی و اجرای برنامه Ruby On Rails با استفاده از نسخه جدید 8 استفاده کنید. در این راهنما قصد ندارم تمام ویژگیهای جدیدی را که با جدیدترین نسخه ارسال میشوند فهرست کنم. نسخه اگر می خواهید در مورد آن بیشتر بدانید، می توانید یادداشت انتشار رسمی را بررسی کنید.
برای کارکرد این راهنما تنها یک شرط وجود دارد که نصب Docker یا OrbStack بر روی رایانه شماست. همین است. نیازی به نصب Ruby، Postgres، SQLite، Redis… چیزی نیست.
این یک نسخه به روز شده از راهنمای شروع سریع است که مدتی پیش نوشتم.
پوشه راه اندازی
ابتدا یک دایرکتوری برای پروژه شما ایجاد می کنیم و سپس 4 فایل خالی در داخل آن ایجاد می کنیم.
mkdir my-project
cd my-project
touch Dockerfile.dev
touch docker-compose.yml
touch Gemfile
touch Gemfile.lock
پروژه را تعریف کنید
با تنظیم فایل های مورد نیاز برای ساخت برنامه شروع کنید. این برنامه در داخل یک ظرف Docker که حاوی وابستگی های آن است اجرا می شود. تعریف وابستگی ها با استفاده از فایلی به نام Dockerfile.dev انجام می شود. برای شروع، موارد زیر را در داخل آن وارد کنید Dockerfile.dev فایل:
# syntax = docker/dockerfile:1
# Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile
ARG RUBY_VERSION=3.3.5
FROM registry.docker.com/library/ruby:$RUBY_VERSION-slim-bookworm
# Rails app lives here
WORKDIR /rails
# Install packages needed to build gems
RUN apt-get update -qq && \
apt-get install --no-install-recommends -y build-essential git curl node-gyp sqlite3
# Install JavaScript dependencies
ARG NODE_VERSION=18.15.0
ARG YARN_VERSION=latest
ENV PATH=/usr/local/node/bin:$PATH
RUN curl -sL https://github.com/nodenv/node-build/archive/master.tar.gz | tar xz -C /tmp/ && \
/tmp/node-build-master/bin/node-build "${NODE_VERSION}" /usr/local/node && \
npm install -g yarn@$YARN_VERSION && \
rm -rf /tmp/node-build-master
# Run bundle install
COPY Gemfile Gemfile.lock ./
RUN bundle install
# Copy application code
COPY . .
# Start the server by default, this can be overwritten at runtime
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
نکته
مهم است که از .dev به عنوان پسوند برای این فایل استفاده کنید در غیر این صورت دستور جدید rails جایگزین آن می شود.
این کد برنامه شما را در یک تصویر قرار می دهد که یک کانتینر می سازد
با روبی، باندلر و تمام وابستگی های شما در داخل آن. برای اطلاعات بیشتر در
نحوه نوشتن Dockerfiles، راهنمای کاربر Docker را ببینید
و مرجع Dockerfile.
بعد، یک ویرایشگر را باز کنید و یک بوت استرپ ایجاد کنید Gemfile
که فقط Rails را بار می کند. این در یک لحظه توسط بازنویسی خواهد شد rails new
. در این مرحله می توانید از هر نسخه ریلی که می خواهید استفاده کنید.
source 'https://rubygems.org'
gem 'rails', '~> 8.0'
در نهایت، docker-compose.yml
جایی است که جادو اتفاق می افتد. این فایل خدماتی را که برنامه شما را شامل می شود و پیکربندی مورد نیاز برای اجرای برنامه را تشریح می کند.
services:
web:
build:
context: .
dockerfile: Dockerfile.dev
command: bash -c "./bin/dev"
tty: true
volumes:
- .:/rails
ports:
- "3000:3000"
نکته
باید از tty:true استفاده کنید تا بتوانیم تغییرات را در فایلهای css/js مشاهده کنیم.
پروژه را بسازید
با وجود آن فایلها، اکنون میتوانید برنامه Rails skeleton را با استفاده از docker compose run ایجاد کنید:
$ docker compose run --no-deps web rails new . --name=my-project --force --css=tailwind --js=esbuild
وقتی این دستور را اجرا می کنید، Compose تصویری را برای آن می سازد web
خدمات با استفاده از Dockerfile.dev
فایل
را --no-deps
به Compose میگوید سرویسهای مرتبط را شروع نکند. سپس اجرا می شود rails new
داخل یک ظرف جدید، با استفاده از آن تصویر.
پس از انجام آن، باید یک برنامه جدید در داخل پوشه خود ایجاد کرده باشید.
نکته
اگر Docker را روی لینوکس اجرا می کنید، فایل ها
rails new
ایجاد شده متعلق به root هستند، برای تغییر آن ممکن است مجبور شوید chown را اجرا کنید.$ sudo chown -R $USER:$USER .
اکنون که یک Gemfile جدید دارید، باید دوباره تصویر را بسازید. (این، و تغییرات به Gemfile
یا Dockerfile، باید تنها مواردی باشد که نیاز به بازسازی دارید.)
$ docker compose build
اجرای پروژه
قبل از اینکه برنامه خود را بوت کنید، مطمئن شوید که 0.0.0.0 را به سرور خود متصل کرده ایم. رفتن به Procfile.dev
و “-b 0.0.0.0” را در انتهای خط اول اضافه کنید، باید شبیه به این باشد.
web: env RUBY_DEBUG_OPEN=true bin/rails server -b 0.0.0.0
js: yarn build --watch
css: yarn build:css --watch
و آخرین مرحله قبل از چرخش برنامه پروژه، اجازه دهید برخی تغییرات جزئی در آن انجام دهیم Dockerfile.dev
فایل بلافاصله این خطوط را اضافه کنید
COPY ..
# Entrypoint prepares the database.
ENTRYPOINT ["/rails/bin/docker-entrypoint"]
Dockerfile.dev نهایی باید به شکل زیر باشد:
# syntax = docker/dockerfile:1
# Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile
ARG RUBY_VERSION=3.3.5
FROM registry.docker.com/library/ruby:$RUBY_VERSION-slim-bookworm
# Rails app lives here
WORKDIR /rails
# Install packages needed to build gems
RUN apt-get update -qq && \
apt-get install --no-install-recommends -y build-essential git curl node-gyp sqlite3
# Install JavaScript dependencies
ARG NODE_VERSION=18.15.0
ARG YARN_VERSION=latest
ENV PATH=/usr/local/node/bin:$PATH
RUN curl -sL https://github.com/nodenv/node-build/archive/master.tar.gz | tar xz -C /tmp/ && \
/tmp/node-build-master/bin/node-build "${NODE_VERSION}" /usr/local/node && \
npm install -g yarn@$YARN_VERSION && \
rm -rf /tmp/node-build-master
# Run bundle install
COPY Gemfile Gemfile.lock ./
RUN bundle install
# Copy application code
COPY . .
# Entrypoint prepares the database.
ENTRYPOINT ["/rails/bin/docker-entrypoint"]
# Start the server by default, this can be overwritten at runtime
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
حالا اجرا کن
docker compose build
دوباره و سپس در نهایت،
docker compose up
.
صفحه خوش آمدگویی Rails را مشاهده کنید!
همین است. اکنون برنامه شما باید روی پورت 3000 در داکر دایمون شما اجرا شود، به این آدرس بروید http://localhost:3000
در یک مرورگر وب برای دیدن Rails Welcome.
برنامه را متوقف کنید
برای توقف برنامه، docker compose را در فهرست پروژه خود اجرا کنید. می توانید از همان پنجره ترمینالی که پایگاه داده را در آن راه اندازی کرده اید یا از پنجره دیگری که به یک خط فرمان دسترسی دارید استفاده کنید. این یک راه تمیز برای متوقف کردن برنامه است.
docker compose down
✔ Container my-project-web-1 Removed0.0s
✔ Network my-project_default Removed
برنامه را مجددا راه اندازی کنید
برای راه اندازی مجدد برنامه را اجرا کنید docker compose up
در دایرکتوری پروژه
برنامه را بازسازی کنید
اگر تغییراتی در فایل Gemfile یا Compose ایجاد کنید تا موارد دیگری را امتحان کنید
تنظیمات، شما باید دوباره بسازید. برخی تغییرات فقط نیاز دارندdocker compose up --build
، اما بازسازی کامل نیاز به اجرای مجدد داردdocker compose run web bundle install
برای همگام سازی تغییرات در Gemfile.lock
به
میزبان و به دنبال آن docker compose up --build
.
در اینجا یک مثال از مورد اول است، که در آن بازسازی کامل لازم نیست.
فرض کنید شما به سادگی می خواهید پورت در معرض دید میزبان محلی را تغییر دهید 3000
در اولین مثال ما به 3001
. برای نمایش، تغییر را در فایل Compose انجام دهید
بندر 3000
روی کانتینر از طریق یک پورت جدید، 3001
، روی میزبان و ذخیره کنید
تغییرات:
ports:
- "3001:3000"
اکنون، برنامه را بازسازی و راه اندازی مجدد کنید docker compose up --build
.
در داخل کانتینر، برنامه شما در همان پورت قبلی اجرا می شود 3000
، اما
Rails Welcome اکنون در دسترس است http://localhost:3001
در محل شما
میزبان.