20210412のdockerに関する記事は13件です。

Docker/React初心者が半日で構築するReact環境(1週間だけ頑張る Day3of9)

はじめに 1週間N(E)ETになった社会人の学習記録です。 前回作ったFastAPIに対して、CRUDする予定だったのですが、まずは、Reactの環境をDocker上に構築しました。 参考ページ Google先生の教えの中から分かりやすそうな記事を参考にする。 1. Dockerfile 作成 参考ページはディレクトリ作っているぐらいだったので、不要と判断。 2. docker-compose.yml 作成 できるだけデフォルトに寄せて設定項目を減らした。 docker-compse.yml version: "3" services: # 略 # React web: container_name: "web" image: node:15.14.0-buster-slim ports: - 3000:3000 environment: LANG: ja_JP.UTF-8 TZ: Asia/Tokyo NODE_ENV: deveropment volumes: - type: bind source: /mnt/c/Users/Public/GitHub/prac/docker/python_fastapi/web/app target: /app command: sh -c "cd /app && yarn start" 設定項目 備考 サービス名 参考資料1のTips image nodeのデフォルトはdebian系だったから ports Reactのデフォルトは3000っぽい environment 下表参照 volumes お好み設定 command 環境変数名 設定値 備考 LANG ja_JP.UTF-8 日本語2 TZ Asia/Tokyo 日本時間2 NODE_ENV deveropment Docker使うならproductionでいいかなと思ったが、「To create a production build, use yarn build.」とでるのでdeveropmentにした。2 3 4 3./4./8. appフォルダの作成とReactの起動 参考資料のまま、以下のコマンドをWSLのUbutuで実行。 結構時間がかかるけど、/appフォルダ内にReact本体が作成される。 localhost:3000にアクセスすると、Reactのロゴがぐるぐる回る。 docker-compose build docker-compose run --rm app npx create-react-app app --template typescript docker-compose up 5./6./7. 多分不要 5. appフォルダ内の移し替え Dockerfile内でWORKDIRを設定していないため、PWDは/(root)のまま。 /にて「npx create-react-app app --template typescript」を実行すると、 /app 内にReact本体が展開されたので、本手順は不要だった。 6. .gitignoreの編集 /app/node_modulesはgitなどで別途管理する必要があると思う。 この本体部分が/usr/local以下とかの全体にインストールされるようなら、そういうDockerイメージを公式が出してほしい。 Dockerhubに無い時点で今回の手順を参考にした。 7. portの変更 デフォルトの3000番を使うので変更不要。 所感 鶏と卵問題のせいで、一番最初はbuildとrunとupを別にするのはだるい(まあ、DockerのCLIを立ち上げて中で打つよりは幾分マシだが)。 同じ問題はRailsの構築5 6 でも見て取れるので、仕方ないような気がする。(Railsの開発時はRails createコマンドとかはコンテナ側で実行するのかホスト側で実行するのか気になる。) コンテナの再立ち上げの際に数分待たされるほど遅いような気がする。(production版にすれば多少マシになるのかな?) Reactのロゴが原子核っぽいのとReactorが原子炉ってことを考えると、開発陣に原子核物理の人でもいるのかな。 免責事項(言い訳) 上記の記載は初心者の試行錯誤なので、あてにしないように!!! https://zenn.dev/mochiblock/articles/3af073ff13c6e2 ↩ https://qiita.com/daikideal/items/ac36987dca0fa742e193 ↩ https://qiita.com/hasehiro0828/items/f4275c9a2175864c82e4 ↩ https://qiita.com/habi16/items/497abe1f80228a2b4ff9 ↩ https://qiita.com/kodai_0122/items/795438d738386c2c1966 ↩ https://qiita.com/chisaki0606/items/a4b42af5c4735c94057a ↩
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel Sail 使って開発したかっただけなのに......

はじめに laravel でコンテナ開発を一瞬で始められると噂のLaravel Sail 使って意気揚々と開発始めたらハマった。。。 ちなみに下記記事参考にしました。 やりたかったこと ただ Laravel 使ってdocker環境で開発したかっただけなのに。。。 まずは4コマンドでLaravelアプリ作成 terminal $ curl -s https://laravel.build/larademo | bash $ cd larademo $ ./vendor/bin/sail up -d $ ./vendor/bin/sail php artisan vendor:publish --tag=serverless-config docker-compose.yml docker-compose.yml version: '3' services: laraveldemo: # コンテナ名は変更した。元々はlaravel.test build: context: ./vendor/laravel/sail/runtimes/8.0 dockerfile: Dockerfile args: WWWGROUP: '${WWWGROUP}' image: sail-8.0/app ports: - '${APP_PORT:-80}:80' environment: WWWUSER: '${WWWUSER}' LARAVEL_SAIL: 1 volumes: - '.:/var/www/html' networks: - sail depends_on: - mysql # - pgsql # - redis # - selenium # selenium: # image: 'selenium/standalone-chrome' # volumes: # - '/dev/shm:/dev/shm' # networks: # - sail mysql: image: 'mysql:8.0' ports: - '${FORWARD_DB_PORT:-3306}:3306' environment: MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' MYSQL_DATABASE: '${DB_DATABASE}' MYSQL_USER: '${DB_USERNAME}' MYSQL_PASSWORD: '${DB_PASSWORD}' MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' volumes: - 'sailmysql:/var/lib/mysql' networks: - sail healthcheck: test: ["CMD", "mysqladmin", "ping"] # pgsql: # image: postgres:13 # ports: # - '${FORWARD_DB_PORT:-5432}:5432' # environment: # PGPASSWORD: '${DB_PASSWORD:-secret}' # POSTGRES_DB: '${DB_DATABASE}' # POSTGRES_USER: '${DB_USERNAME}' # POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}' # volumes: # - 'sailpostgresql:/var/lib/postgresql/data' # networks: # - sail # healthcheck: # test: ["CMD", "pg_isready", "-q", "-d", "${DB_DATABASE}", "-U", "${DB_USERNAME}"] # redis: # image: 'redis:alpine' # ports: # - '${FORWARD_REDIS_PORT:-6379}:6379' # volumes: # - 'sailredis:/data' # networks: # - sail # healthcheck: # test: ["CMD", "redis-cli", "ping"] # memcached: # image: 'memcached:alpine' # ports: # - '11211:11211' # networks: # - sail # mailhog: # image: 'mailhog/mailhog:latest' # ports: # - '${FORWARD_MAILHOG_PORT:-1025}:1025' # - '${FORWARD_MAILHOG_DASHBOARD_PORT:-8025}:8025' # networks: # - sail networks: sail: driver: bridge volumes: sailmysql: driver: local # sailpostgresql: # driver: local # sailredis: # driver: local 環境によってenvファイルを分ける 詳しくはこちら デフォルトで入っている.env ファイルは使わずに、 .env.local .env.stg .env.prod と環境ごとに分けた。 よし、フロントはVuetify使いたいしインストールするかぁ。。 $ ./vendor/bin/sail npm install vuetify ERROR: No such service: laravel.test あれ??? 他のモジュールをインストールしようとしても、composer require しても同じ結果だった。 原因は./vendor/laravel/sail/bin/sail にあった。 知らんかったことその1 .env ファイルを読み込みにいく設定がデフォだった。 ./vendor/laravel/sail/bin/sail (省略) if [ -f ./.env ]; then source ./.env fi (省略) 知らんかったことその2 環境変数APP_SERVICEを設定&&コンテナ名と同じにする必要がある ./vendor/laravel/sail/bin/sail (省略) # Define environment variables... export APP_PORT=${APP_PORT:-80} export APP_SERVICE=${APP_SERVICE:-"laravel.test"} # .envファイルにはAPP_SERVICEがデフォで定義されないので自動的にlaravel.test export DB_PORT=${DB_PORT:-3306} export WWWUSER=${WWWUSER:-$UID} export WWWGROUP=${WWWGROUP:-$(id -g)} (省略) ./vendor/laravel/sail/bin/sail (省略) if [ $# -gt 0 ]; then # Source the ".env" file so Laravel's environment variables are available... if [ -f ./.env ]; then source ./.env fi # Proxy PHP commands to the "php" binary on the application container... if [ "$1" == "php" ]; then shift 1 if [ "$EXEC" == "yes" ]; then docker-compose exec \ -u sail \ "$APP_SERVICE" \ # ここで$APP_SERVICEが呼ばれる php "$@" else sail_is_not_running fi (省略) 解決策 APP_SERVICEの設定 .env.local APP_SERVICE="laraevldemo" # ちなみに "" が必ず必要 コンテナを立ち上げる前に .env ファイルに .env.local ファイルの内容をコピーするコマンドを実行する Makefile up: touch .env cp .env.local .env .vendor/bin/sail up おわりに 便利機能や簡単ツールはそのメリットだけ制限や柔軟性の部分で惜しい部分があるなぁと感じましたね! 参考資料
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

terminalからgitlab.registry.com にdocker loginするときのエラー

概要 久しぶりにPCをフォーマットし、gitlabのコンテナレジストリに再度ログインしようとしたとき、 はまりました。。 terminalからgitlab.registry.com にdocker loginするとき Error saving credentials: error storing credentials - err: exit status 1, out: `Error calling StartServiceByName for org.freedesktop.secrets: Timeout was reached` もしくは Error response from daemon: Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password などのエラーになる。 解決策 sudo apt install gnupg2 pass 上を実行することが必要でした、、、 PCをクリーンインストールしたあとなどは注意すること。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

terminalからregistry.gitlab.com にdocker loginするときのエラー

概要 久しぶりにPCをフォーマットし、gitlabのコンテナレジストリに再度ログインしようとしたとき、 はまりました。。 terminalからregistry.gitlab.com にdocker loginするとき Error saving credentials: error storing credentials - err: exit status 1, out: `Error calling StartServiceByName for org.freedesktop.secrets: Timeout was reached` もしくは Error response from daemon: Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password などのエラーになる。 解決策 sudo apt install gnupg2 pass 上を実行することが必要でした、、、 PCをクリーンインストールしたあとなどは注意すること。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacでDockerエラー:Couldn't connect to Docker daemon. You might need to start Docker for Mac.

Dockerについて何の知識もないのでありのままを書きます。 コマンドを実行しようとしたらエラーが出た 入力したコマンドはこれ $docker-compose build 出てくるエラーメッセージは以下のとおり Couldn't connect to Docker daemon. You might need to start Docker for Mac. 他のコマンドを入力しても同様でした。 原因と解決策 Dockerアプリが起動していませんでした。 Macの上のバーにクジラがいなければ動いてないです。 なので解決するにはDockerを起動させるだけ。 初心者あるあるだといいなぁ。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DockerでMaptilerサーバーを立ち上げて、QGISから利用する方法

DockerでMaptilerサーバーを立ち上げて、QGISから利用する方法 Dockerイメージをダウンロードします。 docker pull maptiler/server ワークフォルダを作ります。 mkdir maptiler && cd maptiler Argsの説明書 .env にMaptilerのキーなどのパラメーターを書きます。 .env に書いたパラメーターを以下コマンドでシステムに読み込みます。 set -o allexport; source .env; set +o allexport サーバーをDockerで起動 docker run -p 3650:3650 maptiler/server --licenseKey=$KEY --rasterization=$RASTERIZATION Localhost:3650を開くと下みたいな画面が見える Administrationを押したらパスワードを入れるところが出ます。 コンソールで上で設定したパスワードを入れる。 地図スタイルがない場合は下みたいな画面が出ます もし地図スタイルのZipファイルがある場合はUploadが書いてるボタンを押してください。そうすると下みたいな画面が出ます。 サインインした後で下みたいな画面を見えます。ダウンロードボタンを押してください。 ダウンロードが終わったらそのZipファイルをMapTilerの画面にあるUploadボタンでアップロードをしてください。 アップロードが終わったら下みたいな画面が出ます。 一つ地図を開いてそして TilesJSON XYZが書いてあるところで URLをコピーしてください。 QGISでその情報を読むために XYZ Tiles で New Connection を選んでそしてタイルのパスを書いて保存します。 XYZ の下に出たメニューをクリックしたらタイルのレイヤが出ます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MapTiler サーバーの立ち上げるとQGISにアクセスできる方法

MapTiler サーバーの立ち上げるとQGISにアクセスできる方法 Dockerイメージをダウンロードします。 docker pull maptiler/server ワークフォルダを作ります。 mkdir maptiler && cd maptiler Argsの説明書 .env にMaptilerのキーなどのパラメーターを書きます。 .env に書いたパラメーターを以下コマンドでシステムに読み込みます。 set -o allexport; source .env; set +o allexport サーバーをDockerで起動 docker run -p 3650:3650 maptiler/server --licenseKey=$KEY --rasterization=$RASTERIZATION Localhost:3650を開くと下みたいな画面が見える Administrationを押したらパスワードを入れるところが出ます。 コンソールで上で設定したパスワードを入れる。 地図スタイルがない場合は下みたいな画面が出ます もし地図スタイルのZipファイルがある場合はUploadが書いてるボタンを押してください。そうすると下みたいな画面が出ます。 サインインした後で下みたいな画面を見えます。ダウンロードボタンを押してください。 ダウンロードが終わったらそのZipファイルをMapTilerの画面にあるUploadボタンでアップロードをしてください。 アップロードが終わったら下みたいな画面が出ます。 一つ地図を開いてそして TilesJSON XYZが書いてあるところで URLをコピーしてください。 QGISでその情報を読むために XYZ Tiles で New Connection を選んでそしてタイルのパスを書いて保存します。 XYZ の下に出たメニューをクリックしたらタイルのレイヤが出ます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

postgresのdockerコンテナを作るときに出たエラー

エラー内容 ... db_1 | db_1 | db_1 | /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init.sh db_1 | /usr/local/bin/docker-entrypoint.sh: /docker-entrypoint-initdb.d/init.sh: /bin/bash: bad interpreter: Permission denied ... 原因と解決策 原因はホストのinit.shの実行権限がないためでした。そのため下記のコマンドを実行後にdocker-compose up -d する必要がありました。 chmod a+x ./docker-entrypoint-initdb.d/init.sh コンテナの方でinit.shが権限ないのかなと思い試行錯誤していたため、解決に少し時間がかかってしまいました。。。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerの環境構築でエラー文`find_spec_for_exe': Could not find 'bundler' の解決方法

Docker ローカルでは環境構築はうまく言ってるが Dockerで環境を作成する際に docker-compose run web rails new . --force --database=mysql --skip-bundle を実行すると エラー文が以下のように出た。 /usr/local/lib/ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe': Could not find 'bundler' (2.2.15) required by your /hogehoge/Gemfile.lock. (Gem::GemNotFoundException) To update to the latest version installed on your system, run `bundle update --bundler`. To install the missing version, run `gem install bundler:2.2.15` from /usr/local/lib/ruby/2.6.0/rubygems.rb:302:in `activate_bin_path' from /usr/local/bin/bundle:23:in `<main>'  解決策 Dockerにbundlerがインストールされてない。 RUN gem install bundlerを追記すればいいとのこと。 gem install bundler:2.2.15と出ているがローカル環境にはbundlerはあるのになぜ・・・・ と思ったら Dockerにbundlerがインストールされてないため出ているエラーだった。 Dockerfileに上記の記述を追記し、コマンドを再度打つことでエラーが解決できた。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Flutter×FirebaseでPJ始めるときにやること色々

FirebaseとFlutterを用いて開発することが多いのですが、毎回リリース直前になってFLAVORを分けたくなったり、セキュリティルールを検討し始めたりしてしまいます。 とくに複数人で開発していると、FLAVOR分けは他の人の開発の手を止めてしまう原因にもなってしまいますので、この辺の初期設定を脳死で出来るように手順化しておきます。 筆者は普段からWindowsとMacOSの両方で開発していますが、iOSのリリースも考えているなら、Macで全てやってしまうのがいいと思います。 今回使用したリポジトリは以下です。 この記事でやってること FirebaseプロジェクトをFlavor毎(Development/Production)に作成し、Flutterプロジェクトと紐づける セキュリティルールやCloud Functions、Hostingのための環境構築をDockerで行う LPやプライバシーポリシーをデプロイするためのFirebase Hostingの設定 Lint(pedantic)の導入方法 Flutter SDKのバージョン固定(fvmを使用) 筆者の環境 Windows > flutter doctor Doctor summary (to see all details, run flutter doctor -v): [√] Flutter (Channel stable, 1.22.5, on Microsoft Windows [Version 10.0.19041.867], locale ja-JP) [√] Android toolchain - develop for Android devices (Android SDK version 30.0.1) [!] Android Studio (version 4.1.0) X Flutter plugin not installed; this adds Flutter specific functionality. X Dart plugin not installed; this adds Dart specific functionality. [!] VS Code (version 1.54.3) X Flutter extension not installed; install from https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter [!] Connected device ! No devices available ! Doctor found issues in 3 categories. MacOS Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, 1.22.4, on macOS 11.2.3 20D91 darwin-x64, locale ja-JP) [✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2) [✓] Xcode - develop for iOS and macOS (Xcode 12.4) [!] Android Studio (version 4.1) ✗ Flutter plugin not installed; this adds Flutter specific functionality. ✗ Dart plugin not installed; this adds Dart specific functionality. [!] VS Code (version 1.53.0) ✗ Flutter extension not installed; install from https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter [!] Connected device ! No devices available ! Doctor found issues in 3 categories. 事前準備 以下のことを事前に行っている前提で進めます Firebaseのスキーマ設計 Android StudioとXCodeのインストールおよびFlutterでの環境構築 VSCodeのインストール(Flutter extensionsは必須ではない) Android StudioからFlutterプロジェクト作成 Dockerが使える環境が整っている ※プロジェクト作成時にパッケージ名を決めるが、com.example のドメインは予め避けておいたほうが良い。自分が取得しているドメイン名や、GitHubのドメイン名(io.github.<ユーザー名>)に変更しておく。 また、このパッケージ名は設定を行う際によく使用するので控えておく。Firebaseに登録する際に躓かないように、英字、数字、ピリオドのみを使用して決めておく方が良い(_アンダースコアと-ハイフンはそれぞれiOSなら_、Androidなら-が使用不可なので、OS毎に別のパッケージ名となってしまうことに注意する) 今回はDevelopmentという開発環境と、Productionという本番環境の2環境を用意することにする。 Flavorごとのビルド設定 主に以下を参考に手順化しました。本記事では解説は行わないので、理由が知りたくなったらご参考ください。 環境設定 - KosukeSaigusa/recipe-app Flutterで環境ごとにビルド設定を切り替える — iOS編 - medium iOS側の設定 open ios/Runner.xcworkspaceでXCodeからプロジェクトを開く Runner>PROJECT>RunnerのDeployment Targetを10.0以上に変更しておく(現在のfirebase_coreのバージョンだと、ここが低いとビルドに失敗する) XCodeのRunnerの部分をクリックし、Manage Schemes...をクリックする 出てきた画面の左下の「+」をクリックしてTarget,Nameが以下のようなものを追加する Target Name Runner Development Runner Production 次にRunner>PROJECT>RunnerのConfigurationの下部の「+」をクリックし、設定を追加する。 Duplicate "Debug" ConfigurationをクリックしてDebug-Developmentを追加し、Duplicate "Release" ConfigurationをくりっくしてRelease-Productionを追加する。 次に左ペインで右クリックしNew File...をクリックする。Configuration Setting Fileを選択し、NEXTをクリックする。 Configuration Setting Fileの内容は以下の通り。2回繰り返す。 ファイル名 保存場所 Group Target Development.xcconfig ios/Flutter Flutter Runnerにチェック Production.xcconfig ios/Flutter Flutter Runnerにチェック Debug-Development.xcconfig ios/Flutter Flutter Runnerにチェック Release-Production.xcconfig ios/Flutter Flutter Runnerにチェック 各ファイルを以下のように編集する Development.xcconfig FLUTTER_FLAVOR=Development PRODUCT_BUNDLE_IDENTIFIER=<パッケージ名>.development DISPLAY_NAME=<開発環境のアプリ名> FLUTTER_TARGET=lib/main.dart Production.xcconfig FLUTTER_FLAVOR=Production PRODUCT_BUNDLE_IDENTIFIER=<パッケージ名> DISPLAY_NAME=<アプリ名> FLUTTER_TARGET=lib/main.dart Release-Production.xcconfig #include "Release.xcconfig" #include "Production.xcconfig" Debug-Development.xcconfig #include "Debug.xcconfig" #include "Development.xcconfig" Runner>PROJECT>RunnerのConfigurationsを以下のように設定します。 その後、Runner > PROJECT > Runner > Build Settings > Packaging の中の Product Bundle Identifierを以下のように、正しいパッケージ名を設定しておきます。 Runner > TARGET > Runner も同様に設定しておく。 次にAndroid Studioからinfo.plistを開き最後の行(</dict>と</plist>)の手前に以下を追記する。 info.plist <key>FlutterFlavor</key> <string>$(FLUTTER_FLAVOR)</string> <key>CFBundleDisplayName</key> <string>$(DISPLAY_NAME)</string> XCodeに戻り、Runner>Runner>Info.plistをクリックし、Bundle nameをリリースする際のアプリ名に変更する。(これはリリース前に行っても良い) FirebaseのGoogleService-Info.plistを追加する前に先に設定を行う。 Runner>Runnerで右クリックし、New Groupをクリック 名前をFirebaseとしておく Runner > Targets > Runner > Build Phases を開きNew Run Script Phaseをクリックする 作成されたRun Scriptをダブルクリックし、適当な名前に変更しておく(例えばRun Script for Firebase) 以下をコピーしてスクリプト欄に貼り付ける。 if [[ "${CONFIGURATION}" == "Debug-Development" ]]; then rm $PRODUCT_NAME/GoogleService-Info.plist cp $PRODUCT_NAME/Firebase/GoogleService-Info-Development.plist $PRODUCT_NAME/GoogleService-Info.plist echo "GoogleService-Info-Production.plist copied." elif [[ "${CONFIGURATION}" == "Release-Production" ]]; then rm $PRODUCT_NAME/GoogleService-Info.plist cp $PRODUCT_NAME/Firebase/GoogleService-Info-Production.plist $PRODUCT_NAME/GoogleService-Info.plist echo "GoogleService-Info-Production.plist copied." elif [[ "${CONFIGURATION}" == "Release" ]]; then rm $PRODUCT_NAME/GoogleService-Info.plist cp $PRODUCT_NAME/Firebase/GoogleService-Info-Production.plist $PRODUCT_NAME/GoogleService-Info.plist echo "GoogleService-Info-Production.plist copied." else echo "configuration didn't match to Development, Staging or Production" echo $CONFIGURATION exit 1 fi また、Output Fileに$SRCROOT/Runner/GoogleService-info.plistを追加しておく。 Android側の設定 android/app/build.gradle buildTypes { debug { debuggable true // 後の鍵の設定のために追加。現状はコメントアウトしておく // signingConfig signingConfigs.debug } release { // 後の鍵の設定のために追加。現状はコメントアウトしておく // signingConfig signingConfigs.release } } flavorDimensions "app" productFlavors { development { dimension "app" resValue "string", "app_name", "<開発環境のアプリ名>" applicationIdSuffix ".development" } production { dimension "app" resValue "string", "app_name", "<本番環境のアプリ名>" } } Android Studioでのbuild構成の編集 この項目は複数人での開発を行う場合には全員が行う必要がある項目です。 下図の「構成の編集」をクリックします 出てきたダイアログの左上にある「+」をクリックし、新規構成の追加からFlutterを選択します。 すでに存在するmain.dartのDart entrypointをコピーして新規作成した名称未設定のDart Entrypointにペーストします。 以下のように設定します。 名前(Name) 追加引数(Additional Arguments) Build flavor Debug-Development --debug --flavor development --dart-define=FLAVOR=development development Release-Production --release --flavor production --dart-define=FLAVOR=production production Firebase Projectの作成 Firebase ProjectをFlavor毎に作成します。 プロジェクト名-dev、プロジェクト名-prod などと分けておくとわかりやすいです。 iOSアプリの追加 下図のiOSをクリックします。 dev側はiOSのバンドルIDをパッケージ名.development、本番側はパッケージ名を入力し、アプリのニックネームはわかりやすい名前を入力しておきます。 アプリを登録 をクリックすると、GoogleService-Info.plistをダウンロードできるので、GoogleService-Info-Development.plistにリネームし、XCodeから Runner>Runner>Firebaseへコピーする 本番環境もプロジェクトを作成し、同様にiOSアプリを追加し、GoogleService-Info.plistをダウンロードしたのちに、GoogleService-Info-Production.plistにリネームし、XCodeから Runner>Runner>Firebaseへコピーしておく。 この時点でAndroid StudioからiOSでDebug-Developmentでデバッグビルドできることを確認しておく。 Androidアプリの追加 同様にしてAndroidアプリも追加しておく。 Androidパッケージ名を、dev側はパッケージ名.development、本番側は単にパッケージ名を入力し、アプリのニックネームを適当に入力する。 アプリを追加をクリックすると、google-service.jsonがダウンロードできるので、ダウンロードし、Android Studio から以下のようにフォルダを切って格納しておく。 またこのタイミングでAndroid側のFirebaseを使う設定と、flutterのパッケージの設定をしておきます。 Firebaseの指示に従って、以下をandroid/build.gradleに追加します。 android/build.gradle ・・・ buildscript { ext.kotlin_version = '1.3.50' repositories { google() // なければ追加する jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.5.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.4' // なければ追加する } } allprojects { repositories { google() // なければ追加する jcenter() } } ・・・ 加えて、android/app/build.gradleにも以下を追加します。 android/app/build.gradle ・・・ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" apply plugin: 'com.google.gms.google-services' // 追加する ・・・ そして、Firestore/Authenticationを使う前提として、pubspec.yamlに以下を追加します。 ※バージョンは公式ページを参照してください。 pubspec.yaml dependencies: flutter: sdk: flutter firebase_core: ^0.4.5 firebase_analytics: ^5.0.16 firebase_auth: ^0.14.0+9 cloud_firestore: ^0.12.11 追加したらpub getを実行してください。(私はいつも何故か2回実行しないとうまくいきません。) 下図のようにpubspec.yamlを開くと、右上にPub getの文字があるのでそちらをクリックします。 現在のバージョンではflutterのfirebaseパッケージを組み込むと必ずエラーが発生しますので、以下の対処をしておきます。 minSdkVersionを16から21に変更しておく defaultConfigにmultiDexEnabled trueの行を追加する。 参考:アプリの圧縮、難読化、最適化 - Android Developpers (公式) app/build.gradle defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "tech.tokkuengineer.flutter_firebase_sample" minSdkVersion 21 targetSdkVersion 29 versionCode flutterVersionCode.toInteger() versionName flutterVersionName multiDexEnabled true } setting.gradleに以下を追加 参考:【flutter】firebase登録時にsetting.gradeでのエラー - Qiita android/setting.gradle def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() def plugins = new Properties() def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') if (pluginsFile.exists()) { pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } } plugins.each { name, path -> def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() include ":$name" project(":$name").projectDir = pluginDirectory } ここまで出来たら、エミュレータをAndroidのイメージに変えてDebug-Developmentでビルドできるか確認します。 Dockerでのfirebase環境の構築 に入る前に、Firebaseプロジェクトの設定を行っておきます。 Firebase プロジェクトの画面からFirestoreをクリック Cloud Firestoreの画面からデータベースの作成をクリック データベースの作成画面でモードを選択 ※本番環境モードで開始すると、セキュリティルールを適切に設定するまでFirestoreの書き込みが全て拒否されます。開発環境であれば、まずはテストモードで開始することをお勧めします。 Cloud Firestoreのロケーションを選択する。好みではありますが、asia-northeast1を選択しておけば良いかと思います。 Dockerを使った環境構築 ここからはVSCodeで作業していきます。 firebase/Dockerfile Dockerfileとdocker-compose.yamlファイルを作成し、以下のように記載します。 GitHubリポジトリに用意してあります。 firebase\firebase-cli\Dockerfile FROM node:latest # Define working directory WORKDIR /workdir # Firebase toolsのインストール RUN apt-get -y update && apt-get install -y sudo openjdk-11-jdk RUN npm install -g firebase-tools # Expose ports ENV HOST 0.0.0.0 EXPOSE 4000 EXPOSE 5000 EXPOSE 5001 EXPOSE 8080 EXPOSE 9005 docker-compose.yaml version: "3" services: firebase-cli-container: build: ./firebase-cli container_name: firecli-container volumes: - ../firebase:/workdir これらの準備が出来たら、cd firebaseでフォルダを移動し、docker-compose upコマンドでコンテナをビルドします。 PS C:\Users\XXXX\AndroidStudioProjects\flutter_firebase_sample\firebase> docker-compose up Building firebase-cli-container failed to get console mode for stdout: The handle is invalid. => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 32B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/node:latest 1.0s => [1/3] FROM docker.io/library/node:latest@sha256:096cbc2667f5d1507d59d 0.0s => CACHED [2/3] WORKDIR /workdir 0.0s => CACHED [3/3] RUN npm install -g firebase-tools 0.0s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:9e31128f3f52b134c129a9f91f13f5bb91c3c9cd482f3 0.0s => => naming to docker.io/library/firebase_firebase-cli-container 0.0s Successfully built a9f91f13fc9e311c31128f32fb1349c9cd482f3525bb9c15ecb15b874b35c88a WARNING: Image for service firebase-cli-container was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`. Creating firecli ... done Attaching to firecli firecli exited with code 0 成功したら、以下のコマンドでコンテナを起動します。 docker-compose run -p 4000:4000 -p 5000:5000 -p 5001:5001 -p 8080:8080 -p 9005:9005 firebase-cli-container /bin/bash 起動したら、コンテナ内に接続されているので、そのままfirebaseの初期設定をします。 まずはfirebaseにログインします。 > firebase login i Firebase optionally collects CLI usage and error reporting information to help improve our products. Data is collected in accordance with Google's privacy policy (https://policies.google.com/privacy) and is not used to identify you. ? Allow Firebase to collect CLI usage and error reporting information? (Y/n) そのままEnterを押すとURLが表示されるので、Ctrlを押しながらクリックして開きます。 アカウント選択の画面で、ログインするユーザをクリックします。 Firebase CLIからのアカウントアクセスのリクエスト画面が出るので、許可をクリックします。 以下のような画面が出たら成功です。 VSCodeに戻って(コンテナ内のコンソールに戻って)firebase initを実行します。 以下のような画面でFiresotre、Functions、Hosting、Emulatorsを選択します。 ※選択するにはスペースを押します。 後は基本的にデフォルトで進めます。 途中Firebaseプロジェクトを聞かれるので、先の手順で作成したプロジェクトのdev側を選択しておきます。 firebase initが完了したらfirebase.jsonを以下のように修正します。 firebase.json { "firestore": { "rules": "firestore.rules", "indexes": "firestore.indexes.json" }, "functions": { "predeploy": [ "npm --prefix \"$RESOURCE_DIR\" run lint", "npm --prefix \"$RESOURCE_DIR\" run build" ], "source": "functions" }, "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ] }, "emulators": { "functions": { "host":"0.0.0.0", "port": 5001 }, "firestore": { "host":"0.0.0.0", "port": 8080 }, "hosting": { "host":"0.0.0.0", "port": 5000 }, "ui": { "enabled": true, "host":"0.0.0.0", "port":4000 } } } ここまで出来たらエミュレータを起動してみます。 コンテナ上で以下のコマンドを実行します。 firebase emulators:start ブラウザでhttp://localhost:4000 にアクセスし、以下のような画面が表示されたら成功です。 Firebase Hostingの設定 Firebase Authenticationを使ってユーザー認証を行っていると、App Storeへの申請時にプライバシーポリシーが必要となります。 せっかくFirebaseを使っているので、プライバシーポリシーとついでにアプリのLPをFirebase Hostingで用意しましょう。 プライバシーポリシー、利用規約作成 ついでにLP作成 とはいえ、上記のDockerでの環境構築の手順で環境構築は済んでいます。 firebase/publicがドキュメントルートになりますので、ここにLPなりプライバシーポリシーなりを作成して、デプロイすればOKです。 実際のコンテンツ作成はこの記事では割愛しますが、デプロイは以下のコマンドを用いて可能です。 firebase deploy --only hosting また別のFirebaseプロジェクトにデプロイする場合は、 firebase projects:list でプロジェクトの一覧を表示したあと、表示されたProject IDを指定して以下のコマンドを実行するとプロジェクトを切り替える事ができます firebase use <Project ID> この後firebase deployコマンドでデプロイすればプロジェクトが切り替わった状態でデプロイされます。 Lintの追加 これも後から入れるよりも最初に入れた方が良いので、pedanticを導入します。 pubspec.yamlに以下を追加します。 pubspec.yaml dev_dependencies: pedantic: ^1.11.0 こちら(公式リポジトリ)にある最新のanalysis_options.yamlをコピーしてプロジェクトの直下に置いておきます。 本記事執筆時点では1.11が最新でした。 analysis_options.yaml もちろんお好みでカスタムてOKです。(私はいつもこの方法でコピーするだけにしてます。) Flutter SDKのバージョン固定 共同開発を行っていると、Flutter SDKのバージョンを固定したくなる場合があります。これもプロジェクトの初期の段階で導入を済ませてしまった方が良いです。 バージョン固定するためにfvmというパッケージを使います。 fvmを導入するために、FlutterにバンドルされているDartとは別にDartをインストールします。 公式のインストール方法 Windows 管理者権限でPowerShellを開き、Chocolatoryを以下のコマンドでインストールします Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) インストールされたらchoco -vでバージョンが表示されるか確認しておきましょう。 そのままdart-sdkをインストールします。 choco install dart-sdk choco upgrade dart-sdk インストールと同時にPATHも通っていると思いますが念のため以下のコマンドで確認します。 PS C:\WINDOWS\system32> dart --version Dart SDK version: 2.10.4 (stable) (Wed Nov 11 13:35:58 2020 +0100) on "windows_x64" インストール時のメッセージに従って一度PowerShellのプロンプトを再起動しておきます。 ※またPub Cacheの方のPATHが正常に通らないので、手動で該当のフォルダを開いた後、パスを手でコピーしてインストール時に追加された環境変数のPATHを上書いておきましょう。 MacOS Terminalを開いて以下のコマンドを実行します brew tap dart-lang/dart brew install dart また各shellに合わせてPATHを通しておきます。 インストール時のメッセージに従って.zshrcなどに追記してください。 MacでのPATHの通し方が分からない方はこちらのような記事を参考にしてください。 fvmの導入 WindowsならPowerShell、MacOSならTerminalを開いて以下のコマンドを実行します。 pub global activate fvm 次にプロジェクトのルートに行き、以下のコマンドを実行します stableとなっているところを好きなバージョンに変更してもかまいません fvm install stable fvm use <version> このようにすると、Windowsなら.fvmフォルダの下に以下のようなファイルが出来上がります。 fvm_config.json { "flutterSdkVersion": "2.0.4" } これをgitの管理下にして共有しておくことで、他の共同開発者は、fvmをインストールした後にプロジェクトルートで fvm install とだけ打てば指定したバージョンがインストールされます。 MacOSの場合、.fvmの下にfvm_config.jsonに加えてflutter_sdkというシンボリックリンクが作成されます。 これをAndroid StudioのPreferences -> Languages & Frameworks -> Flutter -> SDKに指定すれば、pub getやビルドする際に、このflutter sdkを使うようになります。 共同開発者にWindowsユーザーがいる場合はこのシンボリックリンクは.gitignoreに追加して共有しないようにしておきます。(Windowsマシンでプロジェクトを開けなくなります) Windowsの場合は、シンボリックリンクが作成されないので、以下のような手順で手動でSDKを変更します。 C:\Users\XXXX\fvm\versionsの下に、インストールされたバージョン名のフォルダがありますのでコピーしてAndroid StudioのPreferences -> Languages & Frameworks -> Flutter -> SDKに指定します。 Android StudioのPreferences -> Languages & Frameworks -> Dartを開き、C:\Users\XXXX\fvm\versions\<指定したバージョン>\bin\cache\dart-sdkを指定し「OK」を押します。 これで、WindowsでもfvmのFlutter SDKを見に行くようになります。 まとめ 長々と手順化しましたが、これらはプロジェクトを作成して初期のタイミングで行った方が良いかと思います。 下手したらこれだけで1日潰れそうですね・・・ 参考 Flutter アプリに Firebase を追加する(公式) 環境設定 - KosukeSaigusa/recipe-app 開発者ごとでなく、プロジェクトごとにFlutterのバージョンを管理する fvmを使ってFlutter SDKのバージョンを切り替える - Qiita [BUG] Can't load Kernel binary: Invalid kernel binary format version. アプリの圧縮、難読化、最適化 - Android Developpers (公式) docker でfirebaseを試したメモ - Qiita Docker入門(第六回)〜Docker Compose〜 Docker compose ことはじめハンズオン - Qiita Firebase CLI の設定 - KosukeSaigusa/recipe-app
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DockerComposeをdevelopmentで実行する

これまで、production環境で開発をしてきた。 Dockerを導入し、AWSでのデプロイを試みている。 しかしそれは、他の記事を参考に作っていた為、 意味もわからず、本番環境でやってきただけで、 必要な構成も理解していないので上手く進まなかった。 そこで、development環境に戻し、 まずはDockerの導入にフォーカスして理解度を高めていく。 各ファイルの修正 docker-compose.yml services: local-redis: image: redis container_name: rails-redis container_name: rails-redis local-rails: build: . @@ -15,9 +14,31 @@ services: - local-redis env_file: - env_file.env container_name: rails-rails container_name: rails-rails command: bundle exec rails s -b 0.0.0.0 # bundle exec rails s -e production environment: RAILS_DATABASE_PASSWORD: blago18 RAILS_DATABASE_HOST: db RAILS_DATABASE_USER: blago18 RAILS_ENV: development volumes: - .:/var/www/footomo db: image: mysql volumes: - mysql-data:/var/lib/mysql # ports: # - 3306:3306 environment: MYSQL_ROOT_PASSWORD: MySQL8.0 MYSQL_DATABASE: app_development MYSQL_USER: blago18 MYSQL_PASSWORD: blago18 command: - --default-authentication-plugin=mysql_native_password volumes: mysql-data: コンテナに入ってmigrationを実行 Kotaro18:footomo kotaro18$ docker-compose up --build Creating network "footomo_default" with the default driver Building local-rails [+] Building 0.3s (16/16) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 37B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/ruby:2.6.6 0.0s => [ 1/11] FROM docker.io/library/ruby:2.6.6 0.0s => [internal] load build context 0.1s => => transferring context: 24.44kB 0.1s => CACHED [ 2/11] RUN curl -sL https://deb.nodesource.com/setup_11.x | bash - 0.0s => CACHED [ 3/11] COPY ./ /var/www/footomo 0.0s => CACHED [ 4/11] WORKDIR /var/www/footomo 0.0s => CACHED [ 5/11] COPY Gemfile /var/www/footomo 0.0s => CACHED [ 6/11] COPY Gemfile.lock /var/www/footomo 0.0s => CACHED [ 7/11] RUN apt-get update 0.0s => CACHED [ 8/11] RUN apt-get upgrade -y 0.0s => CACHED [ 9/11] RUN gem update bundler 0.0s => CACHED [10/11] RUN apt-get install build-essential patch ruby-dev zlib1g-dev liblzma-dev -y 0.0s => CACHED [11/11] RUN bundle install 0.0s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:80be9ac03901063a087005abd6dda11a3649ae427b8362763ce3dac898f1c523 0.0s => => naming to docker.io/library/footomo_local-rails 0.0s Successfully built 80be9ac03901063a087005abd6dda11a3649ae427b8362763ce3dac898f1c523 Creating rails-redis ... done Creating footomo_db_1 ... done Creating rails-rails ... done Attaching to rails-redis, footomo_db_1, rails-rails db_1 | 2021-04-07 23:35:44+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. db_1 | 2021-04-07 23:35:44+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' db_1 | 2021-04-07 23:35:44+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. db_1 | 2021-04-07T23:35:45.026977Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.23) starting as process 1 db_1 | 2021-04-07T23:35:45.041398Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. rails-redis | 1:C 07 Apr 2021 23:35:44.073 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo rails-redis | 1:C 07 Apr 2021 23:35:44.074 # Redis version=6.0.8, bits=64, commit=00000000, modified=0, pid=1, just started rails-redis | 1:C 07 Apr 2021 23:35:44.074 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf rails-redis | 1:M 07 Apr 2021 23:35:44.105 * Running mode=standalone, port=6379. rails-redis | 1:M 07 Apr 2021 23:35:44.106 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. rails-redis | 1:M 07 Apr 2021 23:35:44.106 # Server initialized rails-redis | 1:M 07 Apr 2021 23:35:44.112 * Ready to accept connections db_1 | 2021-04-07T23:35:45.698289Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. db_1 | 2021-04-07T23:35:46.033480Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock db_1 | 2021-04-07T23:35:46.142287Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. db_1 | 2021-04-07T23:35:46.142734Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel. db_1 | 2021-04-07T23:35:46.148257Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory. db_1 | 2021-04-07T23:35:46.195505Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.23' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL. ここで、初歩的なミスをしてしまいました。 一旦、Ctl+Cでキャンセルしてから、 同じターミナルでコンテナに入ろうとしたところ、 railsは既に立ち上がってますとのエラーが。 server.pidを削除したり、 他のターミナルで立ち上がってないかチェックしてました。 単純に、1つのターミナルでコンテナを立ち上げ、 もう1つのターミナルでコンテナに入ればいいだけでした。 Kotaro18:footomo kotaro18$ docker-compose exec local-rails bash root@fc0180c62138:/var/www/footomo# そして、migrationを実行 Kotaro18:footomo kotaro18$ docker-compose exec local-rails bash root@fc0180c62138:/var/www/footomo# rails db:migrate == 20180217122153 CreateBoards: migrating ===================================== -- adapter_name() -> 0.0000s -- adapter_name() -> 0.0000s -- adapter_name() -> 0.0000s -- create_table(:boards, {:options=>"ENGINE=InnoDB", :id=>:integer}) -> 0.0507s == 20180217122153 CreateBoards: migrated (0.0511s) ============================ == 20180315233935 CreateComments: migrating =================================== -- adapter_name() -> 0.0000s -- adapter_name() -> 0.0000s -- adapter_name() -> 0.0000s -- create_table(:comments, {:options=>"ENGINE=InnoDB", :id=>:integer}) -> 0.1153s == 20180315233935 CreateComments: migrated (0.1230s) ========================== == 20180324120737 CreateTags: migrating ======================================= -- adapter_name() -> 0.0000s -- adapter_name() -> 0.0000s -- adapter_name() -> 0.0002s -- create_table(:tags, {:options=>"ENGINE=InnoDB", :id=>:integer}) -> 0.0416s == 20180324120737 CreateTags: migrated (0.0485s) ============================== == 20180324120941 CreateBoardTagRelations: migrating ========================== -- adapter_name() -> 0.0000s -- adapter_name() -> 0.0001s -- adapter_name() -> 0.0000s -- create_table(:board_tag_relations, {:options=>"ENGINE=InnoDB", :id=>:integer}) -> 0.0912s == 20180324120941 CreateBoardTagRelations: migrated (0.0963s) ================= == 20180506115954 CreateUsers: migrating ====================================== -- adapter_name() -> 0.0000s -- adapter_name() -> 0.0000s -- adapter_name() -> 0.0000s -- create_table(:users, {:options=>"ENGINE=InnoDB", :id=>:integer}) -> 0.0376s -- add_index(:users, :name, {:unique=>true}) -> 0.0656s == 20180506115954 CreateUsers: migrated (0.1056s) ============================= == 20181128051946 AddBirthdayToUser: migrating ================================ -- add_column(:users, :birthday, :date, {}) -> 0.0430s == 20181128051946 AddBirthdayToUser: migrated (0.0452s) ======================= Dockerのコンテナに入り、 dbをmigrationできました。 引き続き、開発環境で コンテナの適切な導入を実施していきます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker初心者が2日で理解したこと (1週間だけ頑張る Day2of9)

はじめに 1週間N(E)ETになった社会人の学習記録です。 昨日と今日はDockerのサンプルを写経し、使い方を覚えます。 私のレベルは、「DockerとかKubernetes名前は知っているけど使ったことはない」です。 現状のファイル構成 フロントエンド(多分React)はまだないため、後ほど追加する。 % tree . ├── api │   ├── app │   │   ├── __pycache__ │   │   │   └── main.cpython-39.pyc │   │   └── main.py │   └── build │   └── Dockerfile ├── db │   ├── build │   │   └── Dockerfile # 不要になった。 │   ├── data │   └── docker-entrypoint-initdb.d └── docker-compose.yml Dockerfile Linuxの構成レシピ。 (pythonじゃないほうのanacondaのkickstartみたいなものと理解) api/build/Dockerfile FROM python:3.9.4-slim WORKDIR /app # コンテナ内で必要なパッケージをインストール RUN pip install --no-cache-dir --trusted-host pypi.python.org uvicorn fastapi # FastAPIを待機 CMD ["uvicorn", "main:app", "--reload", "--host", "0.0.0.0", "--port", "80"] 以下のコピペだが、いくつか変更した。 alpineから変更1 COPYコマンドをvolumesに変更(流石に開発中にローカルで変更した後、毎回「docker-compose up -d --build」を打つのはだるすぎる) server上に余計なファイルを上げるのもなんだかなと思ったので、requirements.txtからpip installを直書きに。(pythonのことはよくわからないので、正しくなさそう) port番号はデフォルトっぽい80番に変更 docker-compose.yml 複数のDockerfileを使用したり、細かい設定をDockerfileから外だししたりする設定ファイル。 docker コマンドを覚えられない人がメモ代わりに使うと幸せになれるものという理解。 docker-compose.yml version: "3" services: # FastAPI api: container_name: "api" build: ./api/build/ restart: always tty: true ports: - 8000:80 volumes: - type: bind source: /mnt/c/Users/Public/GitHub/prac/docker/python_fastapi/api/app target: /app # PostgreSQL db: container_name: "db" image: postgres:13.2-alpine ports: - 5432:5432 environment: POSTGRES_PASSWORD: p@ssword LANG: ja_JP.UTF-8 volumes: - type: bind source: /mnt/c/Users/Public/GitHub/prac/docker/python_fastapi/db/data target: /data - type: bind source: /mnt/c/Users/Public/GitHub/prac/docker/python_fastapi/db/docker-entrypoint-initdb.d target: /docker-entrypoint-initdb.d PostgreSQLはこの辺を参考にした。 Dockefileは環境変数「LANG」を設定する程度だったので不要になった。 データベースの実態を置く場所として、「/data」を用意したつもりだが現状うまくいっていないと思う。 initdb.dはまだ書いていない(というかTable定義が先にいるのでまだ書けない)。 POSTGRES_PASSWORD: p@sswordの所は本番環境へのデプロイ時とかはどうするんだろうか。 volumesを3行で書けというのはここ2を参照した(最後の余談を読むと現状は無意味そうだが)。 言い訳(免責事項) 上記の技術は完全に初心者です、あてにしないように!!! 作る予定のもの(議事録配信システム) 概要 題名や日時を入力したり出席者や配信者を選んでポチると、Wordのテンプレートの該当箇所を適切に置換したファイルを適切な場所に置きます。 作成後に配信ボタンを押すと、配信者にメールが届くというシステムです。 (もとはアクセスで作られているものを代替できるかのテスト) やらないこと セキュリティ関係はザルのまま(どうせ社外アクセスできない) nginxとかのロードバランサー(どうせ大したアクセス数じゃない) testとかCIとか(やりたいけど時間なさそう) cssとかのデザイン(コードの見た目は気にするけど、使えればいいや派) 環境 WSL on WindowsでDockerという何でLinuxを入れないのかという疑問の残る構成で行います。 会社ではCeontOSをちょこちょこ触るので、Linux自体には抵抗がないのですが、WSLの出来が良すぎてわざわざLinuxを入れなくてもよいかと放置してたら、1年がたったという感じです。 Intel Macもありますが、lsやgrepなどのオプションがGNUと微妙に違ってストレスがたまるため、MacよりもLinuxのほうが好きなので、この構成で行きます(一番性能がいいのがこのマシンというのもある)。 項目   Version CPU i7 9700K メモリ 32 GB(2400 MHz) SSD SPCC M.2 PCIe SSD(1TB) OS Windows 10 Pro 20H2 WSL2 Ubuntu 20.04.2 LTS (Focal Fossa) Docker Community (20.10.5) 使用(予定)技術 一番得意な言語はRuby(without Rails)で、C++とPythonは使ったことあります。 今回は、仕事ではあまり使わない技術を中心に選択してみた。 rubyではなくpythonよりなのは、Wordの編集で使用経験のあるlibraryがpython製だから。 DjangoじゃなくてFastAPIなのは小さいフレームワークのほうが簡単そうだから。 MySQLじゃなくてPostgreSQLなのは非オラクルだから。 FastAPI(Railsをapiモードで起動するよりはマシなんじゃなかろうかと思った。) SQLAlchemy(RailsのActiveRecordはマジすごいと思ったので、ORMは使いたい) React(Day0of9に3目並べのチュートリアルをやった程度。凝る気は全くない) PostgreSQL(正直SQLiteをちょこっと触ったことがある程度なので何でもいい) はてな記法は一人wikiとかでそこそこ使うけど、Markdownは初めてなため慣れない。 https://applingo.tokyo/article/6860 ↩ https://zenn.dev/sarisia/articles/0c1db052d09921 ↩
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

wgetでhttps接続できない場合の対処法

環境はUbuntu20.04を想定. wgetでhttps接続できない場合は以下のように sudo apt install ca-certificates 入力することでCA証明書がインストールでき, https通信が行えるようになる. 基本的にはaptコマンドでwgetのインストールを行う際はca-certificatesも推奨パッケージとしてインストールされる.
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む