- 投稿日:2020-05-27T17:57:25+09:00
WSL2(Ubuntu18.04 LTS)でDockerとCypressの開発環境を整える
はじめに
私はWSL2がInsider Previewに入ってからずっと業務の開発で利用してきましたが、もうすぐ正式リリースというのと、社内でも利用する人が増えてきたので知識の整理も含めて記事にしてみました。
localhostとか使えなかったのがもはや懐かしい...
WSL2
Windows上のWindowsサブシステムでLinuxを実行できるようにする技術です。
WSL1と異なり、VM(Hyper-V)を利用して実装されています。しかし通常のVMと異なり高速な起動とWindowsとLinuxの連携、VMの管理が不要な点を利点としています。WSL有効化
ドキュメントを参考にセットアップをすすめていきましょう。
# Windows Subsystem for Linuxのインストール dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart # 仮想マシンプラットフォームの有効化 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart # 再起動後、wslコマンドが利用可能になるはずなのでWSLのデフォルトバージョンを2に設定 wsl --set-default-version 2OSの選定
Microsoft Storeもしくはインターネット上からWSL用イメージを取得します。
Awesome WSL Supported Distributions
今回記事で取り上げるUbuntu18.04 LTSが現状情報が多く感じます。Ubuntu20.04LTSもストアにリリースされているようです。
個人的には非公式にはなりますが、 ArchWSL が結構動いてくれて開発する分にはあまり困ることもなかったので推したいです。
WSL設定(.wslconfig)
C:\\User\ユーザー名\.wslconfig
にwsl2の設定を記述できます。私はlocalhostの設定と、メモリ制限、SWAPの有効化を入れています。
設定項目については、Manage Linux Distributions が詳しいかなと思います。
[wsl2] localhostForwarding=true memory=8G swap=4GWindows Terminal
WSL2の発表と同時期に発表されたMicrosoft開発のターミナルです。既存のビルトインのターミナルを置き換えるべく開発をすすめているとかなんとか...
こちらもPreview版のリリース直後は突然クラッシュしたり、表示が崩れたりなどのバグが多かったですがリリースされた現在では安定しています。
描画は高速で綺麗なためVimなどのリッチなCUIプログラム扱うのも非常に快適です。
PowerShell, WSL, Azureとの親和性は高く、WSLのディストリビューションを追加すると勝手に起動オプションを追加してくれて非常に便利です。私の設定はデフォルトプロファイルをUbuntuに設定したり、カラースキームは個人的に鉄板な Draculaを利用しています。
ペイン分割も設定していますが、私はtmuxを使うのであまり使いません。
{ "$schema": "https://aka.ms/terminal-profiles-schema", "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}", "profiles": { "defaults": { // Put settings here that you want to apply to all profiles "fontFace": "Hackgen Console", "fontSize": 14, "colorScheme": "Dracula" }, "list": [ { // Make changes here to the powershell.exe profile "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}", "name": "Windows PowerShell", "commandline": "powershell.exe", "hidden": false }, { // Make changes here to the cmd.exe profile "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}", "name": "cmd", "commandline": "cmd.exe", "hidden": false }, { "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}", "hidden": false, "name": "Ubuntu", "source": "Windows.Terminal.Wsl", "commandline": "wsl ~ -d Ubuntu" }, { "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}", "hidden": false, "name": "Azure Cloud Shell", "source": "Windows.Terminal.Azure" }, { "guid": "{a5a97cb8-8961-5535-816d-772efe0c6a3f}", "hidden": false, "name": "Arch", "source": "Windows.Terminal.Wsl" } ] }, // Add custom color schemes to this array "schemes": [ // 個人的に { "name" : "Dracula", "background" : "#282A36", "black" : "#21222C", "blue" : "#BD93F9", "brightBlack" : "#6272A4", "brightBlue" : "#D6ACFF", "brightCyan" : "#A4FFFF", "brightGreen" : "#69FF94", "brightPurple" : "#FF92DF", "brightRed" : "#FF6E6E", "brightWhite" : "#FFFFFF", "brightYellow" : "#FFFFA5", "cyan" : "#8BE9FD", "foreground" : "#F8F8F2", "green" : "#50FA7B", "purple" : "#FF79C6", "red" : "#FF5555", "white" : "#F8F8F2", "yellow" : "#F1FA8C" } ], "keybindings": [ // ペイン分割と移動。Vim風にしています。 { "command": { "action": "splitPane", "split": "vertical" }, "keys": "ctrl+shift+e" }, { "command": { "action": "splitPane", "split": "horizontal" }, "keys": "ctrl+shift+d" }, { "command": { "action": "splitPane", "split": "auto" }, "keys": "alt+shift+|" }, { "command": { "action": "moveFocus", "direction": "down" }, "keys": "ctrl+shift+j" }, { "command": { "action": "moveFocus", "direction": "left" }, "keys": "ctrl+shift+h" }, { "command": { "action": "moveFocus", "direction": "right" }, "keys": "ctrl+shift+l" }, { "command": { "action": "moveFocus", "direction": "up" }, "keys": "ctrl+shift+k" } ] }VSCode Remote Development
指定した接続先でVSCodeを開けるスグレモノです。SSH、Docker、WSLまでカバーしています。
Remote Development Extension PackをVSCodeに入れるだけで導入完了です。
WSLのターミナルにログインして、
code .
と実行するだけで、WSL内のディレクトリが開けます。便利です。
Ubuntu18.04 LTS
Dockerをセットアップする
systemd
最近のLinuxディストリビューションでは依存するパッケージも増えてきているsystemdですが、WSL上のLinuxではMicrosoft独自のLinuxカーネルを利用しているため無効化されています。
もちろんsystemdを利用せずとも開発はできるのですが、自動起動周りが微妙に面倒なので自分は後述のgenieを導入してsystemdを稼働させています。
genie
https://github.com/arkane-systems/geni
wslでsystemdを起動するための便利ツールです。
dotnet runtimeが必要なためガイドに沿って、
wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb sudo add-apt-repository universe sudo apt-get update sudo apt-get install apt-transport-https sudo apt-get update sudo apt-get install dotnet-runtime-3.1dotnet runtimeをセットアップしたのち、
curl -s https://packagecloud.io/install/repositories/arkane-systems/wsl-translinux/script.deb.sh | sudo bash sudo apt update sudo apt install systemd-genieこれでgenieのセットアップは完了で、シェル上で
# Ubuntu 18.04 LTS用 genie -c bash # Arch等々 genie -s # systemd起動確認 sudo systemctl statusと実行することで、新しくシェルが起動されてsystemdが起動出来ます。
Ubuntu 18.04 LTSでは何個かサービスがFailedしていますが、開発には今の所支障はありません。気持ち悪いのでいつか修正できたらと思っています。
Docker
公式のガイドに沿って進めていきます。
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt-key fingerprint 0EBFCD88 sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io sudo gpasswd -a $USER docker # 再ログイン後 docker run hello-world # docker-compose sudo apt install python3-pip pip3 install -U docker-compose docker-compose -vCypress
最近のWeb関係の開発はDockerやVSCodeだけで事足りてしまうのですが、Cypressのようなブラウザを利用するツールはHeadlessモードがあるとはいえ開発はしんどいです。
なのでWSL経由でGUIを起動できるようにX ServerをWindows側にセットアップしています。Xサーバー
X410
自分は有償ですがこちらを利用しています。ファイアウォールの設定をしてしまえばアプリを起動するだけで勝手に常駐してくれるので楽です。
動作も結構安定しています。VcXsrv
利用者や情報が多いのはこちら。無償です。
起動時の設定で
- Display Settings
- Multiple Windows(任意)
- Start Clients
- Start no client
- Extra Settings
- Clipboard: true
- Native opengl: true
- Disable access control: false
- Additional parameters for VcXsrv
-ac
で設定するのがおすすめです。
### 共通
どちらも共通なのですが、コントロールパネル -> ファイアウォール -> Windows Defenderファイアウォールを介したアプリまたは機能を許可でX410、VcXsrvの許可をしておかないとWSL側からWindowを立ち上げられません。
### 動作確認
sudo apt install x11-apps export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0 xeyesDISPLAYを設定している行は.bashrcにでも追記しておくと便利です。
Cypress起動
必要な依存関係をインストール
sudo apt install libgtk2.0-0 libgtk-3-0 libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfbnodeをセットアップして、
mkdir cypress test npm init # yes, yes, yes... npm install cypress npx cypress open
- 投稿日:2020-05-27T13:58:10+09:00
長いコマンドを簡単に実行してもらう方法
コマンドを出力する
docker run --rm tukiyo3/wine32
- 以下のようにDockerfileの最後のCMDで echo する。
- Dockerfile
DockerfileCMD echo '\ docker run -it \ --rm \ --name=wine \ \ -e DISPLAY=$DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix:ro \ -v $HOME/.Xauthority:/home/wine/.Xauthority \ \ -v /run/user/$(id -u)/pulse/native:/run/user/1000/pulse/native \ -v /dev/snd:/dev/snd --privileged \ \ -v $PWD:/c/host/ \ tukiyo3/wine /bin/bash \ '
- 出力されたものをそのまま実行する
使用例
docker run --rm tukiyo3/wine32 > w32 && sh w32
- 投稿日:2020-05-27T11:50:07+09:00
世界最速でLinux環境を構築するお話
さくっと環境が欲しくなったときのためにここに書き留めておきます。
Ubuntuを引っ張る
bash$ docker run -it ubuntu bashはい終わり。多分これが一番早いです。
加えてsudoとかnanoとか任意です。
bashroot$ apt-get update #gitのインストール root$ sudo apt-get -y install git #エディタ(nano)のインストール root$ sudo apt-get install nanoちなみにこれだと日本語入力に対応していないので, 以下を参考にしてみてください。
【Docker】ubuntuの環境で日本語入力を可能にするあとはubuntuをいじくり倒し(
てぶっ壊し)ましょう!
- 投稿日:2020-05-27T11:18:04+09:00
Nuxtの開発環境をDockerで構築
はじめに
初めまして。
WELLNESONE JAPAN株式会社(株式準備中)代表取締役CTOの@yusuke_1011です。
自社で一からサービス開発を行う際に実践した構成をここに記しておきます。こちらの記事は、「Nuxt + Docker + CIrcleCI + Storybookという構成でAtomic Designにて開発していく」の第1章となります。
一般的な内容も多くありますが、説明用のサンプルではなく、実際にプロジェクトで導入した内容にはなるので、オリジナルな部分もある程度含んでしまいます。その点ご了承くださいませ。
全体構成
「Nuxt + Docker + CIrcleCI + Storybookという構成でAtomic Designにて開発していく」
- Nuxtの開発環境をDockerで構築(←今ここ)
- NuxtでAtomic Designを実践
- Nuxt + Storybookでコンポーネントを管理
- Storybookを用いたテスト(ストラクチャルリグレッションテスト編)
- Storybookを用いたテスト(ビジュアルリグレッションテスト編)
前提
Nodeとnpmがインストールされている
❯ node --version v14.2.0 ❯ npm --version 6.14.4dockerとdocker-compose
dockerとdocker-composeを使用します。
Macであればhomebrewを使用してすぐインストールできます。$ brew install docker $ brew cask install dockerこれらインストールされていることを確認しましょう。
❯ docker --version Docker version 19.03.8, build afacb8b ❯ docker-compose --version docker-compose version 1.25.5, build 8a1c60f6nuxtプロジェクトの作成
npm create sample_appvue-cliを用いても良いかと思います。
ディレクトリ構成
以下のようにします。
sample_app └── docker-compose.yml └── .env.example └── front └── Dockerfile └── src └──(nuxtのコード一式)今後apiなど追加していく前提のディレクトリ構成になっています。
その場合はfront以下をgitのsubmoduleで管理するのもアリかと。Dockerfileの作成
今回は必要最低限の記述にします。
FROM node:12.16.1 ENV NUXT_HOST=0.0.0.0 WORKDIR /src COPY ./src/package.json . RUN npm install COPY ./src ..env.exapmleの作成
FRONT_PORT=19080dokcer-compose.ymlの作成
version: '3.7' services: front: build: ./front command: npm run dev volumes: - ./front/src:/src - ./src/node_modules ports: - "$FRONT_PORT:3000" init: true restart: on-failure起動手順
1.設定ファイルを生成する
cp .env.example .env2.dockerイメージを生成する
docker-compose build3.dockerコンテナを起動する
docker-compose up -d
- 投稿日:2020-05-27T11:05:21+09:00
Nuxt + Docker + CIrcleCI + Storybookという構成でAtomic Designにて開発していく
初めまして。
WELLNESONE JAPAN株式会社(株式準備中)代表取締役CTOの@yusuke_1011です。
自社で一からサービス開発を行う際に実践した構成をここに記しておきます。対象
- Nuxt.jsの学習はしているが開発経験はまだないエンジニア
- Nuxt.jsでAtomic Designを実践したいエンジニア
- DockerやCircleCIを取り入れた実践的なポートフォリオを作成したいエンジニア志望
の方々が読めるようなレベル感で説明できればと思います。
構成
- Nuxtの開発環境をDockerで構築
- NuxtでAtomic Designを実践
- Nuxt + Storybookでコンポーネントを管理
- Storybookを用いたテスト(ストラクチャルリグレッションテスト編)
- Storybookを用いたテスト(ビジュアルリグレッションテスト編)
ここでは簡単な用語の説明などを行います。
(Nuxt、Docker、CircleCIは省略します)Atomic Design
コンポーネントを細かく分割して定義していくコンポーネントベースのデザイン手法です。
「Atomic」という言葉の通り、最小単位(Atom)から作成し、それを組み合わせるような形でデザインしていきます。利点
- コンポーネントを使いまわしやすい
- 並行開発しやすい
- テストがしやすい
- メンテナンスしやすい
Storybook
コンポーネントのカタログを作成し、管理できるツールです。
コンポーネントのテストもStorybook上で実施できます。Atomic Designで開発を進める以上は、Storybookのようなツールは必要不可欠かなと思います。
主な用途としては、
- デザインスタイルガイドとしてデザイナーとのコミュニケーションに使用
- コンポーネントの挙動や表示を確認するテストに使用
です。
元々はスリランカのスタートアップがReact用に開発したらしいですが、現在は
- React
- Vue
- Anguler
で幅広く使用できます。
- 投稿日:2020-05-27T10:31:02+09:00
Rails Failed to load resource: the server responded with a status of 403 (Not Found) 対処法について
現在、ポートフォリオを作成している途中のゆーた(@onoblog)です。
本番環境で、Rails carrierwave fog-awsでs3を実装後に、
ローカル環境で開発しようとしたら、画像が表示できなくなったので、まとめておきます。正確に、言うと、画像が割れてしまいました。
環境
- rails 5.2.3
- carrierwave
- fog-aws
- jquery-rails (4.3.5)
- vue/cli 4.1.2
- yarn 1.21.1
- webpacker (5.0.1)
- Docker 19.03.5
- docker-compose 1.25.2
- nginx 1.15.8
対処法
開発環境と本番環境で、ストレージを変更することです。
image_uploader.rb. . # storage :file 削除 # storage :fog もしくは、こちらを削除 if Rails.env.development? || Rails.env.test? storage :file else storage :fog end . .carrierwave.rbunless Rails.env.development? || Rails.env.test? #追加 CarrierWave.configure do |config| . . end end #追加原因
私は、本番環境で、必要最低限の設定のみ、しかしてませんでした。
つまり、ローカルは、
storage :file
に保存して、
本場環境は、storage :fog
にするということまで設定ができてませんでした。ちなみに、AWSのS3の学習のために、S3を設定して、写真投稿できて、終わりみたいな使い方をしていので、気が付きませんでした。
運用まで、考えて学習するようにします。
おまけ
上記で、直らない方は、おそらく違う原因に、なると思います。
エラー解決で、ググっているときに、結構見かけたので、こちらも、メモしときます。
image_uploader.rb. . # 追加 def extension_whitelist %w(jpg jpeg gif png) end . .画像のurlの拡張子が、うまく保存されなくて、画像が割れているという方も、多くいました。
よければ、参考にしてください。
参照
- 投稿日:2020-05-27T05:35:58+09:00
Terraria のサーバをDockerで建てる
Terraria Journey's End最&高すぎだけどなんかMacだといろいろインストールしないとサーバーを建てられないみたいなので、Dockerで建てました。
環境
- ubuntu-server 20.04 LTS (ホスト)
- docker version 19.03.9
- docker-compose version 1.25.0
※Dockerとdocker-composeの導入はここでは載せません。
今回建てるTerrariaサーバ
- Terraria ver1.4.0.4
- TSHOCK ver 4.3.26
T-SHOCKとは
Terrariaサーバの大体はT-SHOCKとSteamフレンド経由で建てられているといっても過言ではない(主観)普通に建てるよりも軽いらしい、非常に細かい設定が出来る。ユーザーログイン、荒らし対策やアイテム持ち込み禁止などが設定でき、プラグインにも対応している。
作成
1. フォルダの作成
適当なフォルダ(今回はubuntu-serverという名前)を作成しその下に"docker-compose.yml"を作成。
ubuntu-server └── docker-compose.yml最終的にこうなる予定
ubuntu-server ├── docker-compose.yml └── terraria/ ├── Worlds(ワールドデータ) ├── logs(ログ) └── plugins(プラグイン)2. docker-composeファイルの編集 & サーバ立ち上げ
今回はT-shockのDockerfileがあるのでそれを利用する。
viやnano等のテキストエディタで"docker-compose.yml"を作成する。version: "3" services: terraria: image: ryshe/terraria:latest ports: - "7777:7777" # ボリュームマウントして永続化している volumes: - ./terraria/Worlds:/root/.local/share/Terraria/Worlds - ./terraria/logs:/tshock/logs - ./terraria/plugins:/pluginsTerrariaのサーバーを立ち上げる
docker-compose up -d3. ワールドデータを作成する
Terrariaのサーバを立ち上げているコンテナに入る
docker-compose exec terraria /bin/bash"/tshock"に入れるのでshでbootstrap.shを実行
sh /bootstrap.sh質問に答えてワールドを生成していく
※ワールド名は後に使用するので控えておいて下さい。
[Server API] Info Plugin TShock v4.4.0.0 (by The TShock Team) initiated. Terraria Server v1.4.0.4 n New World (新規作成) d <number> Delete World Choose World: n (新規作成のnを入力しEnter) #################### #################### Terraria Server v1.4.0.4 1 Small 2 Medium 3 Large Choose size: 3 (ワールドのサイズはラージの3で) #################### #################### Terraria Server v1.4.0.4 1 Classic 2 Expert 3 Master 4 Journey Choose difficulty: 3(新規追加されたMasterの難易度を選ぶ) #################### #################### Terraria Server v1.4.0.4 1 Random (ランダム) 2 Corrupt (不浄の地) 3 Crimson (クリムゾン) Choose world evil: 1(不浄かクリムゾンもしくはランダムを選ぶ今回はランダム) #################### #################### Terraria Server v1.4.0.4 Enter world name: test-world (ワールド名 ※半角英数字 ※控えておく) #################### #################### Terraria Server v1.4.0.4 Enter Seed (Leave Blank For Random): (シード値 今回は空) #################### #################### 生成される(省略) #################### #################### 最初のワールド選択に戻ると思うので、Ctrl+Cで抜ける生成が完了したらコンテナを抜けましょう
exit4. docker-composeの再編集
コンテナを一旦ダウンさせます
docker-compose downviやnano等のテキストエディタで再び"docker-compose.yml"を編集する。
version: "3" services: terraria: image: ryshe/terraria:latest ports: - "7777:7777" # ボリュームマウントして永続化している volumes: - ./terraria/Worlds:/root/.local/share/Terraria/Worlds - ./terraria/logs:/tshock/logs - ./terraria/plugins:/plugins # 追加ポイント # 先ほどの "ワールド名 + .wld" environment: WORLD_FILENAME: "test-world.wld"編集が完了したら再びコンテナを立ち上げる
docker-compose up -dこれで立ち上げ完了
これでDockerでサーバが立ち上げることが出来ました。良いTerrariaライフを!!
6. あとがき
深夜テンションの殴り書きで書いたので不備があるかもしれません、なにか問題があればコメントでお願いします。
- 投稿日:2020-05-27T02:00:38+09:00
Dockerを使用したRails開発 初期ソースコード生成とGemパッケージインストール (Could not find xxx in エラー)
初めに
これまでの制作で、Railsコンテナにログイン・ログアウトができるようになりました。
なので、ここからは「PostgreSQL」を使用して、初期ソースコードを生成・Gemパッケージインストールを行います。
また、gemパッケージインストールでエラーを連発しました。
もしも、私と同じエラーでつまづきましたら、参考にしてください。マシンスペック
・macOS Catalina
・バージョン 10.15.4
・iMac(retina 4K, 21.5-inch,2019)
・プロセッサ 3 GHz 6コアIntel Core i5
・メモリ 8GB初期ソースコードの生成
①コマンド入力
「rails new」コマンドで新規アプリケーションを制作します。
しかし、今回は「PostgreSQL」を使用するので、記載が複雑になっています。
rails new ●● -d postgresql --skip-test-unit
●●はアプリ名を英語で入力してください。
test::unit関連のコード生成省略のために「--skip-test-unit」を使用しています。②初期ソースコード確認
ソースはアプリのフォルダに生成されているので、中身を「Is -a」コマンドで確認ができます。
Is -a ●●
●●はアプリ名を英語で入力してください。
問題がなければ、ソースコードが表示されます。
gemパッケージのインストール
①Gemfileの編集
アプリフォルダの中に「gemfile」があるので、こちらをエディターソフトで開き
以下必要なgemを追記しました。
gem 'bcrypt'
gem 'rails-i18n'
gem "kaminari"
gem 'date_validator'
gem "valid_email2"
gem "nokogiri"
gem "capybara"
gem "selenium-webdriver"
gem "webdrivers"
gem "rspec-rails"
gem "factory_bot_rails"②gem パッケージのコマンド実行
gemfileに入力後、通常は以下のコマンドでgemパッケージ群をインストールできるのですが、私はここでエラーを多発させました。
bin/dundle
Could not find xxx in
というエラーです。
このエラーは、Gitからアプリをダウンロードしたり、rubyのバージョンを上げることにより発生します。
私は解決のために、以下のサイトを使用しました。
Could not find bcrypt-3.1.13 in any of the sources
なので「bcrypt」を「bcrypt-3.1.13」に変更する必要があるので直していきます。まずは「bcrypt」を検索
2枚目の左にあるソースコード
gemfile
gem 'bcrypt', '~> 3.1', '>= 3.1.13'
インストール
gem install bcrypt
をそれぞれ入力して「bin/bundle」を行います。
他のgemも同じくエラーがでたので、同じ方法で直しました。
②Gemのパッケージリスト表示
無事にここまで進みましたら、gemパッケージをリスト表示できます。
・・・・・
エラーの参考記事
https://qiita.com/jnchito/items/44ab1df134369ed76911
以上になります。
ここまで、読んでいただきありがとうございました。gemパッケージでエラーが発生して、驚きましたが解決できてよかったです。
- 投稿日:2020-05-27T01:12:48+09:00
NestJSとGraphQLで開発用の環境を作成する
NestJS と GraphQL で開発用の環境を作成する
目次
- NestJS のアプリケーションを作成
- GraphQL の依存関係を構築する
- mysql(docker)を用意する
- mysql の依存関係を構築する
1. NestJS のアプリケーションを作成
NestCliを用いて NestJS のアプリケーションを構築する。
cli を install していない時は、上の URL から cli を install してアプリケーションを作成します。
$ nest new nestjs-graphql $ npm run start:devlocalhost:3000で下記画面が表示されることを確認します。
2. GraphQL の依存関係を構築する
Qiita 記事で記載しましたが、依存関係を解決していきます。
GraphQL を利用するのに必要な 4 つをインストールしていきます。
$ npm i --save @nestjs/graphql graphql-tools graphql apollo-server-expresslibrary の型定義で error がはかれないように、tsconfig.json を編集します。
tsconfig.json{ "compilerOptions": { "module": "commonjs", "declaration": true, "removeComments": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "target": "es2017", "sourceMap": true, "outDir": "./dist", "baseUrl": "./", "incremental": true, //ここから追記 "skipLibCheck": true //ここまで追記 }, "exclude": ["node_modules", "dist"] }公式ドキュメントをもとに GraphQL の依存関係を app.module に定義していきます。
src/app.module.tsimport { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { join } from 'path'; @Module({ imports: [ GraphQLModule.forRoot({ debug: false, playground: true, typePaths: ['./**/*.graphql'], definitions: { path: join(process.cwd(), 'src/graphql.ts'), outputAs: 'class', }, }), ], }) export class AppModule {}サーバーを起動し、play groundにアクセスして paly groud が表示されることを確認します。
$ npm run start:dev下記のように Play Ground が表示されます。
3. mysql(docker)を用意する
docker-compose.ymlとDockerfileを追加していきます。
$ touch docker-compose.yml $ touch Dockerfile現状のディレクトリ構成は、以下になる想定です。
$ tree -L 1 -I node_modules . ├── Dockerfile ├── README.md ├── dist ├── docker-compose.yml ├── nest-cli.json ├── package-lock.json ├── package.json ├── src ├── test ├── tsconfig.build.json └── tsconfig.jsonMySQL のみの docker を作成するので、起動に必要な設定を作成していきます。
FROM mysql:5.7docker-compose.ymlversion: '3.7' services: db: build: . command: --default-authentication-plugin=mysql_native_password restart: always tty: true ports: - '3306:3306' environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: develop最後に docker を起動して正常に動作するか確認します。
$ docker-compose up $ docker ps -a4. mysql の依存関係を構築する
公式ドキュメントを目安に依存関係を構築していきます。
$ npm install --save @nestjs/typeorm typeorm mysql上記のインストールが完了したら、app.module に必要な設定を記載していきます。お行儀が悪いですが、とりあえず動くように設定を記載していきます。
src/app.module.tsimport { Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { TypeOrmModule } from '@nestjs/typeorm'; import { join } from 'path'; @Module({ imports: [ GraphQLModule.forRoot({ typePaths: ['./**/*.graphql'], definitions: { path: join(process.cwd(), 'src/models/graphql.ts'), outputAs: 'class', }, }), TypeOrmModule.forRootAsync({ useFactory: () => ({ type: 'mysql', host: 'localhost', port: 3306, username: 'root', password: 'example', database: 'develop', entities: [__dirname + '/**/*.entity{.ts,.js}'], synchronize: true, }), }), ], }) export class AppModule {}上記で簡易的な設定が完了したと思うので、あとは適宜 GraphQL を記載していけば実装できます。
- 投稿日:2020-05-27T01:01:15+09:00
Dockerを使用したRails開発 Railsコンテナへのログイン (仮想環境の準備 Mac用)
初めに
制作するにあたって
「Doclerコンテナ」と「操作コンテナ」の2種類に分けてコンテナへログインして行きたいと思います。マシンスペック
・macOS Catalina
・バージョン 10.15.3
・iMac(retina 4K, 21.5-inch,2019)
・プロセッサ 3 GHz 6コアIntel Core i5
・メモリ 8GB操作コンテナへログイン
以下のコマンドを起動します。
起動時には操作するフォルダーの中で起動させないとエラーになるので、ルーディングを気をるけてください。
docker-compose exec web bash
エラーなく進みましたら、ここでRailsのバージョンを確認してください。
rails --version
コンテナからのログアウト
ログアウトは以下のコマンドを実行します。
exit
以上が、コンテナへのログインでした。
閲覧いただき、ありがとうございます。
- 投稿日:2020-05-27T00:53:40+09:00
docker-compose + makeで作る最強のTerraformローカル実行環境
Terraformローカル実行環境の個人的ベストプラクティスが出来上がった・・・ぜ!!
— とっしー@インフラエンジニア (@Tocyuki) May 26, 2020というわけで、Terraformのローカル実行環境の個人的なベストプラクティスなものが出来上がったのでご紹介したいと思います!!
今回やること
- Terraformで作成するリソースはVPCのみ
docker-compose
+make
によるTerraformローカル実行環境の構築ディレクトリ構成
ディレクトリ構成はこんな感じでして、要約するとHashicorpの公式Terraform Dockerイメージを使って、Terraformの実行環境を用意して
make
コマンドでラップするという感じです!. ├── LICENSE ├── Makefile ├── README.md ├── docker-compose.yml └── terraform ├── main.tf └── modules └── aws └── network ├── variables.tf └── vpc.tf各ファイルについて
vpc.tf
10.0.0.0/16
のVPCを作っているだけ!vpc.tfresource "aws_vpc" "vpc" { cidr_block = var.vpc_cidr enable_dns_support = true enable_dns_hostnames = true }docker-compose.yml
Hashicorp公式Dockerイメージを使った
docker-compose.yml
!docker-compose.ymlversion: '3.6' services: terraform: image: hashicorp/terraform:0.12.24 container_name: terraform volumes: - ./terraform:/terraform env_file: .env working_dir: /terraformちなみに
.env
にはAWSのクレデンシャルを記載するだけです!.envAWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=Makefile
Makefile.PHONY: init plan apply destroy check init: make check docker-compose run --rm terraform init plan: make check docker-compose run --rm terraform plan apply: make check docker-compose run --rm terraform apply destroy: make check docker-compose run --rm terraform destroy check: docker-compose run --rm terraform fmt -recursive docker-compose run --rm terraform fmt -check docker-compose run --rm terraform validate
Makefile
のおかげで以下のようにmake
コマンドで簡単にTerraformを実行できます!➜ terraform-best-executable-env (master) ✗ make check docker-compose run --rm terraform fmt -recursive docker-compose run --rm terraform fmt -check docker-compose run --rm terraform validate Success! The configuration is valid.というわけで
こんな感じで最近はAnsibleやPackerなども同様の手法でローカル実行環境を作成してます!
個人的にはかなりすっきりした感じでコマンド実行できて良い感じだなぁと思ってますので是非試して見てください^^コードはGithubにあげてあって、ついでにGitHub ActionsでTerraformのCI環境を軽く作ってみたところめちゃ簡単にできたので気になる方は見てみてください〜!
- 投稿日:2020-05-27T00:41:09+09:00
Dockerを使用したRails開発 Railsのコンテナ群構築 (仮想環境の準備 Mac用)
初めに
DockerとDocker Compose を用いてRailsの開発用コンテナ群を制作します。
マシンスペック
・macOS Catalina
・バージョン 10.15.4
・iMac(retina 4K, 21.5-inch,2019)
・プロセッサ 3 GHz 6コアIntel Core i5
・メモリ 8GB①Gitのインストール
https://git-scm.com/download/mac
こちらのページに、ダウンロードファイルがあります。②Rails開発用コンテナ群の構築
git clone https://github.com/oiax/rails6-compose.git
cd rails6-compose
./setup.sh
③コンテナ群のスタートとストップ
・コンテナ群のスタート
docker-compose up -d
・コンテナ群のストップ
docker-compose stop
以上がRailsのコンテナ群の構築でした。
ここまでは、エラーなしで構築できましたが、これからが心配です。閲覧いただき、ありがとうございました。
- 投稿日:2020-05-27T00:22:10+09:00
docker run のときに指定する -p と –-expose の違い
dockerコンテナ起動時にポートを指定する引数 -p と --expose の違いは?
https://docs.docker.com/engine/reference/commandline/run/#publish-or-expose-port--p---expose
結論
違いは指定されたポートを晒す先
-p (--publish):ホストに晒してホスト側からの接続を許可する
Mysqlのコンテナを立てて各種DBツールから
localhost:3306
として繋ぎたい場合、
docker run ~~ -p 3306:3306 ~~ mysql
と公開するポートを指定する必要がある。このとき、ホスト側ですでに
3306
ポートが利用中の場合は起動に失敗する。
そんなときは~~ -p 3316:3306 ~~
などにしてホスト側のポート番号を変えてあげればよい。--expose:同一dockerネットワーク内に晒して、同一ネットワーク内からの接続を許可する
同一dockerネットワーク内に存在するPHP-FPMコンテナから3306ポートを使ってMySQLに接続したい場合に利用する。
※もっとも、MySQLなどはDockerfile
内でEXPOSE
されているため、指定は不要
→ https://github.com/docker-library/mysql/blob/bc6e37a2bed792b1c4fc6ab1ec3ce316e6a5f061/8.0/Dockerfile#L84感想
気になって調べたけど、docker run のタイミングで
--expose
指定するケースが思い浮かばなかった。
(大体、Dockerfile内でEXPOSE
が書かれているため)あと、MySQLのDockerイメージは
33060
ポートも指定してたのね、知らなかった。
→ (さっきと同じリンク)https://github.com/docker-library/mysql/blob/bc6e37a2bed792b1c4fc6ab1ec3ce316e6a5f061/8.0/Dockerfile#L84
- 投稿日:2020-05-27T00:20:00+09:00
Dockerを使用したRails開発 ダウンロード編(仮想環境の準備 Mac用)
初めに
この度はRails5でテストアプリ開発のため仮想環境を「Docker」で準備し制作を進めることにしました。
Dockerを使用するのがはじめてだったので忘却録をこちらに記録します。マシンスペック
・macOS Catalina
・バージョン 10.15.4
・iMac(retina 4K, 21.5-inch,2019)
・プロセッサ 3 GHz 6コアIntel Core i5
・メモリ 8GBDockerのダウンロード
①Dockerのサイトをブラウザで開き、アカウントを取得してください。
(公式サイト)
https://www.docker.com(アカウント取得先アドレス)
https://hub.docker.com/signup①Dockerのインストール
https://www.docker.com/get-started
こちらの「Mac」を選択してインストールしてください。ダウンロード後は、ドラックアンドドロップで「Applications」に保存します。
③バージョン番号を確認する
「ターミナル」を使用して以下のコマンドを入力してください。
以上がDockerのダウンロードでした。
- 投稿日:2020-05-27T00:14:03+09:00
RaspberryPI起動と同時にDockerイメージを起動
目的
Flatの環境またDockerの環境が構築されている場合、RaspberyPiを起動した後、Dockerの特定イメージを自動で起動させる方法について話をしたいと思います。
1./etc/rc.localについて
OSが起動された後、何か実行したい処理をここに追加します。
2.既存のrc.localの中身を確認します。
「cat」コマンドでファイルの中身を確認します。
ここに処理を追加する場合は「exit 0」の前に追加します。
「exit 0」の後ろに追加した場合は正常に実行されません。pi@raspberrypi:~ $ cat /etc/rc.local #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi exit 03.Dockerイメージを起動するコマンドを追加します。
Dockerイメージを起動するコマンドの形式は下記の通りです。
行の末に「&」を必ず入れて置きましょう。
→追加した処理が正しく終わらないとOSの起動が止まっている可能性があります。例)/usr/bin/docker start docker-image-name &コマンドを追加したrc.localファイルの中身です。
pi@raspberrypi:~ $ cat /etc/rc.local #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi /usr/bin/docker start LAMP & exit 0※前回Flatの環境で構築したLAMP環境のDockerイメージ名です。
前回記事:Flatを利用してLAMP環境構築4.RaspberryPIを再起動します。
下記のコマンドを実行するとRaspberryPIが再起動されます。
pi@raspberrypi:~ $ sudo reboot5.Flat環境へログインします。
①下記のアドレスをブラウザから入力してアクセスします。
http://[Raspberry PIのIPアドレス]:9000 または(モニターと直接繋がっている場合、下記のアドレスを利用してもOK) http://localhost:9000②アカウントは[admin/設定したパスワード]を入力します。
③Flatの初期画面です。「Containers」メニューを選択します。
④下記のLAMPというDockerイメージは起動されていますが、
OSMCというDockerイメージは起動されてないことが分かります。
6.その他
Dockerイメージを起動した後、Dockerイメージの中にあるコマンドを実行したい場合、
以下の形式で「/etc/rc.local」ファイルに追加します。★注意事項★
Dockerイメージの起動コマンドの後に追加してください。/usr/bin/docker exec LAMP /usr/bin/python /home/pi/mail.py &
※pythonコマンドでmail.pyプログラムを起動する例です。
終わりに
今までRaspberryPIを再起動したらFlatの画面でDockerのイメージを毎回起動ボタンを押さないとDockerが起動されなかったですが、これからは再起動すると自動でDockerイメージが起動されるようになりました。
少し役に立ちましたか?次回は上記の「mail.py」について紹介したいと思います。
お休みなさい。^^&