- 投稿日:2021-10-25T23:34:19+09:00
Railsの環境構築やデプロイを学ぶ上で役に立った記事
普段はインフラ寄りの仕事をしているエンジニアですが、Railsの環境構築やデプロイについてキャッチアップする機会があり、色々学ぶうちにブックマークが溜まってきました。 同様の内容を学習中の方の参考になればと思い、Qiita記事化します。 環境構築関連 Docker Rails 6.1のDocker開発環境構築をEvil Martians流にやってみた(更新)|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社 クジラに乗ったRuby: Evil Martians流Docker+Ruby/Rails開発環境構築(翻訳)|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社 Nginx+Rails6.0+MySQL8.0+Adminer:docker-compose で rails new Ruby on Railsの開発環境をDockerで構築する方法(Rails 6.x) nginx + Rails (unicorn) + MySQL 環境を Docker で構築する - Qiita Docker イメージサイズを抑えながら Ruby on Rails + PostgreSQL の開発環境を作成する - bitA Tech Blog docker-compose+Nginx+Rails6 で静的コンテンツをNginxから配信する https://github.com/ledermann/docker-rails nginxとPumaを連携し、nginx + Puma + Rails6の開発環境を構築する手順 | Enjoy IT Life 【決定版】rbenv を使った ruby のインストール AWS EC2等 Ruby on Rails 6をAmazon Linux 2で動かす - サーバーワークスエンジニアブログ Amazon Linuxでrbenvをインストール - Qiita CentOS8上にnginxとpumaとRailsを手作業で構築した後に手動でデプロイする - もちゅろぐ 【Rails】Nginx, Puma な環境によるデプロイ&サーバーの勉強【AWS EC2】 - Qiita AWS Rails 6 + MySQL + Nginx な環境の作成方法 サーバー編 - たけログ EC2にRails環境構築(Ruby 2.6、Rails 6.0) - 欲望のおもむくままに RailsアプリをAWSにイチからデプロイするまでの手順メモ · Code of Duty CI関連 https://github.com/CircleCI-Public/circleci-demo-ruby-rails 自動デプロイ(CD)関連 ECS Amazon ECSで動かすRailsアプリのDockerfileとGitHub Actionsのビルド設定 - メドピア開発者ブログ Capistrano Capistrano公式ドキュメント CircleCI + Capistrano + AWS(EC2) + Railsで自動デプロイしてみた - Qiita はじめてのCapistrano - Qiita Capistranoでデプロイ自動化 - kumilog.net CapistranoでRailsデプロイ - kumilog.net https://github.com/capistrano/rails https://github.com/capistrano/rbenv multistage 環境で capistrano-rbenv を使うときは rbenv_path の扱いに注意! - Hack like a rolling stone capistrano3でpumaの運用ー設定ファイルの管理どうする? - Qiita Rails5+Puma+Nginxな環境をCapistrano3でEC2にデプロイする(後編) - Qiita ざくにく定食: capistranoでbundle installするまで AWS CodeStar CodeStarではじめるRailsアプリのCodeDeploy化 puma Pumaの使い方 まとめ - 猫Rails Puma の Daemonization が廃止された理由と、デーモン化したいときはどうするべきか - 完全に理解した.com Pumaの起動におけるpumaコマンドとpumactlコマンドの違い - Qiita ポートを指定してPumaを起動するとsocketファイルをlistenしなくなる - Qiita nginx commented nginx.conf for Ruby on Rails bundle config bundle config | Bundler日本語ドキュメント | Ruby STUDIO ログローテート 【Ruby on Rails】ログ出力とログローテートの設定まとめ【Logger】 - きゃまなかのブログ 【Rails】Railsアプリのログローテーション設定を行う - AUTOVICE devise Devise入門 64のレシピ - 猫Rails その他 不正な config/master.key が原因でRailsの起動に失敗するケースとその対処方法 - Qiita
- 投稿日:2021-10-25T20:05:27+09:00
DockerだけでAWS SAMをLocalStackにデプロイしてみた
はじめに AWS SAMを試すため、LocalStackへデプロイしようとしたら、通常のsamコマンドでは、おそらくデプロイ先のエンドポイントURLを変更できないため、LocalStackへデプロイできませんでした。 そこで、LocalStackが提供するsamlocalコマンドを使用するとデプロイできました。 また、ローカル環境をあまり汚したくなかったため、Docker (+ Docker Compose) のみで試しております。 この記事は以上のことについて、備忘録としてまとめたものです。 前提条件 DockerとDocker Composeがインストールされていること。 やってみた LocalStackを起動させておく $ git clone https://github.com/localstack/localstack.git Cloning into 'localstack'... remote: Enumerating objects: 23149, done. remote: Counting objects: 100% (1772/1772), done. remote: Compressing objects: 100% (619/619), done. remote: Total 23149 (delta 1241), reused 1611 (delta 1134), pack-reused 21377 Receiving objects: 100% (23149/23149), 9.99 MiB | 16.35 MiB/s, done. Resolving deltas: 100% (16797/16797), done. $ cd localstack $ docker-compose up -d Pulling localstack (localstack/localstack:)... latest: Pulling from localstack/localstack c91cc7261d92: Pull complete Digest: sha256:74323cb3ef6709f9732802e74c80b3b997359d25e603955b708efae61633b1df Status: Downloaded newer image for localstack/localstack:latest Creating localstack_main ... done 開発環境としてPythonコンテナを起動し、中に入る # Pythonコンテナ内からLocalStackコンテナを名前解決可能にするため、「--link localstack_main:localstack」を設定している $ docker run --rm -it --link localstack_main:localstack python:3.8 bash Unable to find image 'python:3.8' locally 3.8: Pulling from library/python bb7d5a84853b: Pull complete f02b617c6a8c: Pull complete d32e17419b7e: Pull complete c9d2d81226a4: Pull complete 3c24ae8b6604: Pull complete 8a4322d1621d: Pull complete a03ef301ddd7: Pull complete a4c591fc96f3: Pull complete 799e70ce6240: Pull complete Digest: sha256:b39ab988ac2fa749273cf6fdeb89fb3635850824419dc612c8a21ff4c7961b8b Status: Downloaded newer image for python:3.8 Pythonコンテナで事前設定を行う # ホームディレクトリへ移動する (任意) root@151ed9cb109a:/# cd root@151ed9cb109a:~# pip install awscli aws-sam-cli aws-sam-cli-local # ・・・(省略) Successfully installed Flask-1.1.4 Jinja2-2.11.3 MarkupSafe-2.0.1 PyYAML-5.4.1 Werkzeug-1.0.1 arrow-1.2.1 attrs-21.2.0 aws-lambda-builders-1.8.1 aws-sam-cli-1.33.0 aws-sam-cli-local-1.1.0.1 aws-sam-translator-1.39.0 awscli-1.21.2 backports.zoneinfo-0.2.1 binaryornot-0.4.4 boto3-1.19.2 botocore-1.22.2 certifi-2021.10.8 chardet-4.0.0 chevron-0.14.0 click-7.1.2 colorama-0.4.3 cookiecutter-1.7.3 dateparser-1.1.0 docker-4.2.2 docutils-0.15.2 idna-2.10 itsdangerous-1.1.0 jinja2-time-0.2.0 jmespath-0.10.0 jsonschema-3.2.0 poyo-0.5.0 pyasn1-0.4.8 pyrsistent-0.18.0 python-dateutil-2.8.2 python-slugify-5.0.2 pytz-2021.3 pytz-deprecation-shim-0.1.0.post0 regex-2021.10.23 requests-2.25.1 rsa-4.7.2 s3transfer-0.5.0 serverlessrepo-0.1.10 six-1.16.0 text-unidecode-1.3 tomlkit-0.7.2 tzdata-2021.4 tzlocal-4.0.1 urllib3-1.26.7 watchdog-2.1.2 websocket-client-1.2.1 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv WARNING: You are using pip version 21.2.4; however, version 21.3.1 is available. You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command. # LocalStack用プロファイルを設定する root@151ed9cb109a:~# aws configure --profile=local AWS Access Key ID [None]: dummy AWS Secret Access Key [None]: dummy Default region name [None]: ap-northeast-1 Default output format [None]: # samlocal用に設定する root@151ed9cb109a:~# export LOCALSTACK_HOSTNAME=localstack # samlocal用に設定する root@151ed9cb109a:~# export EDGE_PORT=4566 SAMサンプルアプリケーションを作成する root@151ed9cb109a:~# sam init --runtime python3.8 SAM CLI now collects telemetry to better understand customer needs. You can OPT OUT and disable telemetry collection by setting the environment variable SAM_CLI_TELEMETRY=0 in your shell. Thanks for your help! Learn More: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-telemetry.html Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Choice: 1 What package type would you like to use? 1 - Zip (artifact is a zip uploaded to S3) 2 - Image (artifact is an image uploaded to an ECR image repository) Package type: 1 Project name [sam-app]: Cloning from https://github.com/aws/aws-sam-cli-app-templates AWS quick start application templates: 1 - Hello World Example 2 - EventBridge Hello World 3 - EventBridge App from scratch (100+ Event Schemas) 4 - Step Functions Sample App (Stock Trader) 5 - Elastic File System Sample App Template selection: 1 ----------------------- Generating application: ----------------------- Name: sam-app Runtime: python3.8 Architectures: x86_64 Dependency Manager: pip Application Template: hello-world Output Directory: . Next steps can be found in the README file at ./sam-app/README.md SAMサンプルアプリケーションをLocalStackへデプロイする root@151ed9cb109a:~# cd sam-app root@151ed9cb109a:~/sam-app# SAM_S3_BUCKET_NAME=sam-bucket # SAMのソースコードアップロード用S3バケットを作成する root@151ed9cb109a:~/sam-app# aws s3 mb s3://${SAM_S3_BUCKET_NAME} \ --endpoint-url http://${LOCALSTACK_HOSTNAME}:${EDGE_PORT} \ --profile local make_bucket: sam-bucket root@151ed9cb109a:~/sam-app# samlocal deploy \ --stack-name sam-stack \ --s3-bucket ${SAM_S3_BUCKET_NAME} \ --profile local Uploading to c6ce8fa8b5a97dd022ecd006536eb5a4 847 / 847 (100.00%) Deploying with following values =============================== Stack name : sam-stack Region : ap-northeast-1 Confirm changeset : False Deployment s3 bucket : sam-bucket Capabilities : null Parameter overrides : {} Signing Profiles : {} Initiating deployment ===================== Uploading to d3c4a0926d7588147cfdc9906b4e375a.template 1068 / 1068 (100.00%) Waiting for changeset to be created.. CloudFormation stack changeset ------------------------------------------------------------------------------------------------------------- Operation LogicalResourceId ResourceType Replacement ------------------------------------------------------------------------------------------------------------- + Add HelloWorldFunction AWS::Lambda::Function False + Add HelloWorldFunctionRole AWS::IAM::Role False + Add HelloWorldFunctionHelloWo AWS::Lambda::Permission False rldPermissionProd + Add ServerlessRestApi AWS::ApiGateway::RestApi False + Add ServerlessRestApiDeployme AWS::ApiGateway::Deployme False nt510f4c1a20 nt + Add ServerlessRestApiProdStag AWS::ApiGateway::Stage False e ------------------------------------------------------------------------------------------------------------- Changeset created successfully. arn:aws:cloudformation:ap-northeast-1:000000000000:changeSet/samcli-deploy1635154640/fa450628 2021-10-25 09:37:20 - Waiting for stack create/update to complete CloudFormation events from changeset ------------------------------------------------------------------------------------------------------------- ResourceStatus ResourceType LogicalResourceId ResourceStatusReason ------------------------------------------------------------------------------------------------------------- CREATE_COMPLETE AWS::CloudFormation::Stac HelloWorldFunctionRole - k CREATE_COMPLETE AWS::CloudFormation::Stac ServerlessRestApiProdStag - k e CREATE_COMPLETE AWS::CloudFormation::Stac ServerlessRestApiDeployme - k nt510f4c1a20 CREATE_COMPLETE AWS::CloudFormation::Stac ServerlessRestApi - k CREATE_COMPLETE AWS::CloudFormation::Stac sam-stack - k CREATE_COMPLETE AWS::CloudFormation::Stac HelloWorldFunctionHelloWo - k rldPermissionProd CREATE_COMPLETE AWS::CloudFormation::Stac HelloWorldFunction - k ------------------------------------------------------------------------------------------------------------- CloudFormation outputs from deployed stack -------------------------------------------------------------------------------------------------------------- Outputs -------------------------------------------------------------------------------------------------------------- Key HelloWorldApi Description API Gateway endpoint URL for Prod stage for Hello World function Value https://x3ovhxtd7l.execute-api.ap-northeast-1.amazonaws.com/Prod/hello/ Key HelloWorldFunction Description Hello World Lambda Function ARN Value arn:aws:lambda:ap-northeast-1:000000000000:function:sam-stack-HelloWorldFunction- fd0867a1 Key HelloWorldFunctionIamRole Description Implicit IAM Role created for Hello World function Value arn:aws:iam::000000000000:role/sam-stack-HelloWorldFunctionRole-4bd323a3 -------------------------------------------------------------------------------------------------------------- Successfully created/updated stack - sam-stack in ap-northeast-1 実行確認として、LocalStackにデプロイされたAPI Gatewayへリクエストする # デプロイされたREST API IDを取得する root@151ed9cb109a:~/sam-app# REST_API_ID=$( aws apigateway get-rest-apis \ --query items[0].id \ --output text \ --endpoint-url http://${LOCALSTACK_HOSTNAME}:${EDGE_PORT} \ --profile local ) root@151ed9cb109a:~/sam-app# curl http://${LOCALSTACK_HOSTNAME}:${EDGE_PORT}/restapis/${REST_API_ID}/Prod/_user_request_/hello/ {"message": "hello world"}
- 投稿日:2021-10-25T18:39:30+09:00
【Mac】ホットリロードできない時の対処法
環境 ・macOS Big Sur バーション11.5.2 ・シェル zsh ・Ruby 3.0.2 ・rails 6.1.4 ・My SQL 8.0.23 ・Docker 20.10.8 ・react 17.0.2 ・typescript 4.4.4 希望 Docker+rails+react+typescriptで環境構築し、ホットリロードまでしようとしていました. したこと ①webpacker.ymlのwatch_options:の下に aggregateTimeout: 300 poll: 500 を追加しました。 こんな感じです。 webpacker.yml watch_options: ignored: '**/node_modules/**' aggregateTimeout: 300 poll: 500 これでできるはずだができず、、、 次に ②.envファイルを作り .env CHOKIDAR_USEPOLLING=true を追記。 これも複数の記事を参考にし実行しましたがホットリロード(リロードなしで即テキストエディタの内容が反映される)はできず。 よってリロード画面を開発者モードで見ることに。 そこでこんなエラーを発見。 エラー Access to XMLHttpRequest at 'http://localhost:3035/sockjs-node/info?t=1635142686037' from origin 'http://0.0.0.0:3000' has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space local. 調べるとCORS policyというものでURLがブロックされているとのこと。 解決策 chrome://flags/#block-insecure-private-network-requests 以上のサイトにアクセスし、 Block insecure private network requests をDisabledにする。 ↓ 無事ホットリロードできました!めでたしめでたし。 参考にしたサイト Docker + Rails6 + React + TypeScript の環境構築
- 投稿日:2021-10-25T17:05:57+09:00
Rails はじめました [1. 環境構築]
要件 ruby 2.7.4 Rails 6.1.4 redis latest PostgreSQL 12.2 nginx 1.20 開発環境 macOS Big Sur VSCode Docker Desktop VSCode プラグイン Ruby Rails Ruby on Rails Rails DB Schema Docker 環境 以下リポジトリに完成した docker-compose.yml 等を格納 soso555BoBs/env-rails コンテナの構成 app rails 6.1.4 が稼働する ポート番号 3000 で listen web nginx 1.20 が稼働する ポート番号 80 で listen 受け取ったリクエストを app コンテナに渡す pgsql PostgreSQL 12.2 が稼働する ポート番号 5432 で listen rredis redis が稼働する ポート番号 6379 で listen rmail mailhog が稼働する ポート番号 1025 でメールを listen ポート番号 8025 で HTTP リクエストを listen 使い方 前提として、make コマンドを実行できるようにしておくこと 不可能な場合は、Makefile 内の各コマンドをコピペして実行すれば OK 初回 (Rails プロジェクトを作成する) $ git clone git@github.com:soso555BoBs/env-rails.git $ cd env-rails $ make create-project # Install Rails project 上記実行後 http://localhost:3000/ で動作確認 以下の手順を全て行うので時間がかかります rails インストール build docker image docker container up bundle install webpacker install rake db:create container restart 初回 (既存プロジェクトをインポートする) $ git clone git@github.com:soso555BoBs/env-rails.git $ cd env-rails $ git clone git@github.com:hogehoge/rails.git ./backend # Clone any project to the backend directory $ make init $ make up 2 回目以降 $ make up コンテナ終了 $ make down 詰まった点 bundle install した gem がコンテナを立ち上げる度に無くなる gem がインストールされたディレクトリを永続化していないため 永続化するために docker-compose.yml に以下記述を追加 volumes: bundle-store: : : services: app: volumes: - type: volume source: bundle-store target: /usr/local/bundle nocopy: true nocopy: true のせいで、永続化しても更新されないため nocopy: true を削除 docker-compose run と build と up のタイミングに依り volume の内容に不整合が発生。以下記事により解決しました。 rails server 実行時に Webpacker configuration file not found エラーが発生する bundle install の後に webpacker install を実行することで対応 所感 実は「コンテナの構成」には嘘が書かれている。実装できていないので追々実装する。 volume の永続化の解決にものすごく苦労した。 きちんとオプションや記述形式を把握しない限りはコピペなんてするもんじゃない。 おかげで volume 周りの挙動について勉強になった ひとまずこの環境を用いて転職活動アプリを作っていこうと思います。
- 投稿日:2021-10-25T06:30:44+09:00
Windows 10 HomeへDocker Desktopをインストールする
自分用のメモになります。 環境 Windows 10 Home バージョン 21H1 手順 wslをインストールする。 PowerShellにて下記コマンドを実行する。 wsl --install Windows 10 バージョン 2004 以降 (ビルド 19041 以降) または Windows 11である必要あり。 Windows ロゴ キー + R キー を押して、「winver」と入力するとバージョンを確認できる。 PCを再起動する。 下記から Docker Desktop をダウンロードして、exeファイルをダブルクリックする。 https://www.docker.com/products/docker-desktop インストールする。 左下の検索から「Docker Desktop」を検索し、アプリを実行する。 左下のクジラアイコンが緑色になればOK。 参考 WSL のインストール https://docs.microsoft.com/ja-jp/windows/wsl/install Windows Home に Docker Desktop をインストール https://docs.docker.jp/docker-for-windows/install-windows-home.html#windows-10-home-docker-desktop
- 投稿日:2021-10-25T03:35:26+09:00
Docker 1.7環境下でのECRのプライベートリポジトリの利用方法
Docker 1.11 以上なら https://github.com/awslabs/amazon-ecr-credential-helper を使うことで、docker-login が 普通にECRに対しても認証できます。 今回の方法は、一旦 docker login したあとも、12時間経過したら再度 docker loginを叩かないといけません。 本当になんらかの理由でアップデートできない場合、というのが今回の内容です。 get-login-password を使った方法 aws-cliをv2にあげるのは簡単なのでとりあえずaws-cli2をあげておく docker 1.7 だと -password-stdin というオプションは存在しないが、こんな感じでいける docker login --username=AWS --password=`aws ecr get-login-password --profile profile` --email=shida@example.com 0123456789.dkr.ecr.ap-northeast-1.amazonaws.com あとは、通常通り docker push や pull できる