Go LangでWebAPIを作成するために、まずはDockerでMySQLを構築する

普段フロントエンドをメインとしているので、バックエンドの環境構築に疎い。 今まではFirebaseを使用することが多く、前回はじめてNestJSで本格的にバックエンドの構築をした。 とは言えNestJSはJavascriptである。 Windows11に入れたMySQLとNest.Jsを接続し、テーブルを作成する 難しかったけど、新しいことに挑戦した感じがしなかった。 しかもその時、とにかく早く実装したかったので、MySQLをWindowsにインストールしたうえでテストしていた。 実際の案件ではそんなことありえないので、しっかりDockerで環境を構築し、言語はGo Langを採用することにした。 まずはDockerでMySQLを構築する docker-compose.yaml を作成する version: '3' services: mysql: image: mysql:latest container_name: my-mysql-container environment: MYSQL_ROOT_PASSWORD: your_root_password MYSQL_DATABASE: your_database_name MYSQL_USER: your_username MYSQL_PASSWORD: your_password ports: , "3306:3306" volumes: - ./data:/var/lib/mysql で、docker-compose up -dを実行する。 error during connect: this error may indicate that the docker daemon is not running: Get "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.project%3Dproject-backend%22%3Atrue%7D%7D": open //./pipe/docker_engine: The system cannot find the file specified. というエラーが出た。 よく分からないけど、Dockerが起動していないことが原因のようなので、Start-Service dockerコマンドを入力しろとGPTに教えてもらったが、 'Start-Service' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 というエラーが出た。...

投稿日 · 2023-12-01 · 更新日 · 2024-06-07 · 1 分 · nove-b

DockerプロジェクトをWSL上に置き、ホットリロード問題解決を試みる

Dockerで立ち上げたサーバーが遅すぎる。 「はい、サーバーが立ち上がるまで、5分かかりました」 なんていう先生の声が脳内でリフレインする。 docker compose up -d コマンドを打った後の話である。 何が言いたいかというと、Dockerで立ち上げたサーバーが以上に重い。 立ち上げ後、ブラウザが表示されるまで5分以上かかり、更新をクリック後、更新がかかるまで5分以上かかる。 これじゃ、なかなか作業が進まない。 それに前述、前回書いたようにホットリロードがかからないし、そもそも遅すぎてホットリロードが正常に機能しているかがわからない。 どう解決するか じゃあ、どうするべきか。 うまくいくかはわからないが、これもまた前回の記事で書いたように、「wsl上にファイルを置く」ということで少なくともホットリロードは解決するかもしれない。 またDockerもWSL上で動かしているので、開発環境のスピードも上がるかもしれない。 というのも下記のような内容のコメントを見つけた。 特殊な理由がない限り、複数のオペレーティング システム間でファイルを操作しないことをお勧めします。 Linux コマンド ライン (Ubuntu、OpenSUSE など) で作業している場合、最速のパフォーマンス速度を実現するには、ファイルを WSL ファイル システムに格納します。 Microsoft公式 - OS ファイル システム間でのパフォーマンス ということでやってみる。 ファイルを WSL ファイル システムに格納する まずはUbuntuを開く。そうするとターミナルが開くので pwd コマンドで自身がどこにいるかを確認する。たぶん/home/UserNameにいる。 次にそこにプロジェクトフォルダを作成する。 mkdir projectName 作成したプロジェクトに移動し、 cd projectName VsCodeを開く。 code . そこでプロジェクトを作成する。 今回は「DockerでnextJsとnestJsの環境構築をする」で作成したものと同じものを作成した。 次に拡張機能WSLを取ると、リモート接続してくれる。 そこでDockerを起動すれば上手く行くと思うが、起動後すぐに落ちる。 The command 'docker' could not be found in this WSL 2 distro. We recommend to activate the WSL integration in Docker Desktop settings....

投稿日 · 2023-02-15 · 更新日 · 2024-06-07 · 1 分 · nove-b

Dockerで立ち上げたNextJs・NestJsのプロジェクトでホットリロードを可能にする

Dockerで環境構築したファイルを変更してもブラウザで表示が変更されない そもそも作成した環境は下記記事の通り。 DockerでnextJsとnestJsの環境構築をする で、色々検証してみた結果、Dockerを止め、再度立ち上げれば更新されているということが分かった。原因が分かった、これで一件落着とはならない。 何でも不便すぎる。 そこでホットリロードが効くように調査してみた。 結論(いったん諦める) フロントエンドに限り、ブラウザを更新すれば、表示が更新されることは確認できた。 フロントエンド(NextJs) フロントエンド(NextJs)側の設定は、docker-compose.ymlに下記変更を加えたらホットリロードが効くようになった。 frontend: build: context: . dockerfile: ./docker/frontend/Dockerfile tty: true volumes: - type: bind source: ./frontend target: /app + environment: + - WATCHPACK_POLLING=true ports: , "3333:3333" …ただめちゃくちゃ重い。 何回かやっていると、なんかうまくいかなくなったので、 上記の追加分を削除し、下記で対応した。 next.config.jsに下記を追加。 webpackDevMiddleware: config => { config.watchOptions = { poll: 1000, aggregateTimeout: 300, } return config }, これで同じく重いけど、リロードに対応した。 ホットリロードにも対応しているようだけど、Dockerが重すぎてわからない。 バックエンド(NestJs) NestJsを色々調べてもよくわかなかったので、Dockerについて調べると、下記記事を見つけた。 Dockerを使っていてhot reload系が効かなかったとき この1つ目「wsl上にファイルを置いていない」が該当したので、確認してみることにした。 が、これがなかなか厄介で大変な気がする。 もっと簡単そうなのが、 env CHOKIDAR_USEPOLLING=true をDockerfileに記述する。 あるいは、 environment: - CHOKIDAR_USEPOLLING=true をdocker-compose.ymlに追記するというもの。...

投稿日 · 2023-02-12 · 更新日 · 2024-06-07 · 1 分 · nove-b

DockerでnextJsとnestJsの環境構築をする

NextJsとNestJsをDockerで立ち上げる あくまでもDockerのハンズオンなので別に何でもいいのだが、どうせならということで、次に考えている構成でやってみることにした。 ちなみに【環境構築】NestJS+Next.js+TypeScript+Dockerの環境構築ハンズオンに倣うようにすすめていくので、こちらの記事を参考にした方がいいかもしれない。 docker-compose.ymlファイルを作成する プロジェクトのルートでdocker-compose.ymlファイルを作成する。そのために下記コマンドを実行する。 touch docker-compose.yml 実行後、docker-compose.ymlという名前の空ファイルができていることを確認することができる。 このファイルにDockerの設定を書いていく。 version: "3.7" services: backend: build: context: . dockerfile: ./docker/backend/Dockerfile tty: true volumes: - type: bind source: ./backend target: /api ports: , "3000:3000" 設定内容は把握できていないが、これでバックエンドのdocker-compose.ymlが作成できたらしい。 まずはバックエンドのみで起動するためフロントエンドの設定は書かない。 バックエンドの設定 それではバックエンド、つまりNestJs側の設定をすすめていく。 Dockerファイルの作成 設定ファイルに書いた dockerfile: ./docker/backend/Dockerfile で指示したディレクトリを作成する。 mkdir docker cd docker mkdir backend 作成したディレクトリにDockerfileを作成する。 cd backend touch Dockerfile 作成が完了したら以下の内容を記述する。 FROM node:16.18.0 WORKDIR /api CMD ["npm", "run", "start"] ちなみにnodeのバージョンは参考にした記事の通りではなく、なんとなく現在他案件で使用しているバージョンにしてみた。 ↓のちに下記に変更した(よくわからないけど)。 FROM node:16-alpine3.16 これでDocker側の設定は完了。 NestJsをインストールする 次にNestJsをインストールする。 cd ../.. プロジェクトのルートに戻り、nest newを実行※1する。...

投稿日 · 2023-02-08 · 更新日 · 2024-06-07 · 2 分 · nove-b

windows11にDockerをインストールする

Windows 11 HomeにDockerをインストールする 先人の知恵を借り、やってみる。 WSL2/Linuxをインストールする Dockerを起動させるにはLinux OSが必要になる。そこで「Windows Subsystem for Linux」、通称WSLをインストールする必要がある。 Linux 用 Windows サブシステムを使用すると、開発者は、従来の仮想マシンまたはデュアルブート セットアップのオーバーヘッドなしで、ほとんどのコマンド ライン ツール、ユーティリティ、アプリケーションを含む GNU/Linux 環境を変更せずそのまま Windows 上で直接実行できます。 ということでインストールしてみる。powerShellを管理者モードで開き、Cドライブ直下で下記コマンドを実行する。 wsl --install インストール中: 仮想マシン プラットフォーム 仮想マシン プラットフォーム はインストールされました。 インストール中: Linux 用 Windows サブシステム Linux 用 Windows サブシステム はインストールされました。 インストール中: Ubuntu Ubuntu はインストールされました。 要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。 無事にインストールできたっぽいので指示に従い再起動する。再起動するとUbuntu の初期設定(ユーザ名とパスワードの設定)が始まるので、ユーザー名とパスワードを設定する。 Installing, this may take a few minutes... Please create a default UNIX user account. The username does not need to match your Windows username....

投稿日 · 2023-02-05 · 更新日 · 2024-06-07 · 1 分 · nove-b