<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>環境構築 | みんたく</title>
	<atom:link href="https://mintaku-blog.net/category/develop/environment/feed/" rel="self" type="application/rss+xml" />
	<link>https://mintaku-blog.net</link>
	<description>みんたくの技術ブログ</description>
	<lastBuildDate>Sat, 16 Jul 2022 07:21:48 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.11</generator>

<image>
	<url>https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/06/cropped-ipad-820272_640.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>環境構築 | みんたく</title>
	<link>https://mintaku-blog.net</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">144480658</site>	<item>
		<title>Kubernetesの構成や挙動を整理する</title>
		<link>https://mintaku-blog.net/about-kubernetes/</link>
					<comments>https://mintaku-blog.net/about-kubernetes/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Sun, 28 Nov 2021 13:47:08 +0000</pubDate>
				<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=2088</guid>

					<description><![CDATA[<p>Kubernetesについて理解を深めるため、を実際に動かしてみてその構成や挙動を整理してみました。 Kubernetesとは Kubernetesとは、宣 …</p>
The post <a href="https://mintaku-blog.net/about-kubernetes/">Kubernetesの構成や挙動を整理する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>Kubernetesについて理解を深めるため、を実際に動かしてみてその構成や挙動を整理してみました。</p>
<h2>Kubernetesとは</h2>
<p>Kubernetesとは、宣言的な構成管理と自動化を促進し、コンテナ化されたワークロードやサービスを管理するための、ポータブルで拡張性のあるオープンソースのプラットフォームです。</p>
<p>参考：https://kubernetes.io/ja/docs/concepts/overview/what-is-kubernetes/</p>
<p>Composeのように単一のDockerホスト上でコンテナ群を動かすのではなく、冗長性を得るため複数のホストを束ねてクラスタを構築し、その上で冗長化されたコンテナを動かします。</p>
<p>このようにKubernetesの登場により、複数のDockerなどのコンテナの管理や自動化が進み、この仕組みは「コンテナオーケストレーション」と呼ばれています。</p>
<h3>サッカーの例えがわかりやすい</h3>
<p>といってもなかなかイメージがつかないところ、Docker/Kubernetes超入門という本でKubernetsをサッカーで例えており、わかりやすくイメージしやすくなりました。</p>
<p>サッカーで例えるとコンテナが選手だとすると、Kubernetesは監督にあたります。グラウンドの正しい位置に選手(コンテナ)を配置し、チーム(アプリ)として連携を取れる形を作ります。</p>
<p>それだけでなく、怪我した選手(調子の悪いコンテナ)の交代や選手(コンテナ)をを減らしたり増やしたり(これはサッカーのルールから外れるが。。)などの仕事をします。</p>
<p>エンジニアはチームオーナーとして監督(Kubernetes)に「こういう方針でいきます」と頼んでおけばあとは任せておけるといった感じです。</p>
<p>&nbsp;</p>
<h2>Kubernetesの構成</h2>
<p><img data-attachment-id="2090" data-permalink="https://mintaku-blog.net/about-kubernetes/image2-11/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?fit=1864%2C929&amp;ssl=1" data-orig-size="1864,929" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image2" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?fit=300%2C150&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?fit=800%2C398&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469-1024x510.jpg?resize=800%2C398&#038;ssl=1" alt="" width="800" height="398" class="aligncenter wp-image-2090 size-large" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?resize=1024%2C510&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?resize=300%2C150&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?resize=768%2C383&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?resize=1536%2C766&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?w=1864&amp;ssl=1 1864w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?w=1600&amp;ssl=1 1600w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>参考：Docker/Kubernetes超入門</p>
<p>Kubernetesの構成は主に図の左側のコントロールプレーンと右側のデータプレーンにわかれます。大まかな担当は左側のマスターノードが頭脳として使われ、右側のワーカーノードは処理する肉体として使われます。</p>
<p>また、Kubernetesでシステムを構築する場合は、Kubernetes上だけで構築するのではなく右の図にある仮想マシンやクラウドが提供するマネージドサービスなども併用して開発するのが一般的です。</p>
<p>サービスやポッドのところは実際に動かしながら理解を深めていきます。</p>
<p>&nbsp;</p>
<h2>実際に触ってみる</h2>
<p>というわけで実際にKubernetesを触っていきます。Docker Desktopが既にインストールされていれば環境設定から「Enable Kubernetes」にチェックを入れて有効化するだけで使えます。</p>
<h3>マニフェストファイルを使ってNginxを動かす</h3>
<p><img data-attachment-id="2089" data-permalink="https://mintaku-blog.net/about-kubernetes/image3-8/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?fit=1964%2C964&amp;ssl=1" data-orig-size="1964,964" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image3" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?fit=300%2C147&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?fit=800%2C393&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291-1024x503.jpg?resize=800%2C393&#038;ssl=1" alt="" width="800" height="393" class="aligncenter size-large wp-image-2089" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?resize=1024%2C503&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?resize=300%2C147&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?resize=768%2C377&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?resize=1536%2C754&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?w=1964&amp;ssl=1 1964w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?w=1600&amp;ssl=1 1600w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>Kubernetesのアプリ展開はマニフェストファイルと呼ばれる構成ファイルで行われるのが一般的です。今回はDocker/Kubernetes超入門の本を参考にポッドのマニフェストとそれを外部に公開するサービスのマニフェストを使ってNginxを展開します。</p>
<p>マニフェストファイルはYAML形式で記述します。それぞれの意味は以下のようになっています。</p>
<ul>
<li>apiVersion: マニフェストのバージョン</li>
<li>kind: リソースの種類</li>
<li>metadata: リソース名などのメタデータ</li>
<li>spec: リソースの詳細</li>
</ul>
<p>・pod.yml</p><pre class="crayon-plain-tag">apiVersion: v1
kind: Pod
metadata:
  name: web-pod
  labels: 
    svc2pod: web
spec:
  containers:
  - name: nginx
    image: nginx:1.17.6-alpine
    ports:
    - name: http
      containerPort: 80</pre><p>サービスのマニフェストも上の部分はポッドと同じですが、重要なのはspecの下にある「selector」で、これを使ってサービスが接続するポッドを指定します。</p>
<p>先程ポッドのマニフェストで定義した「svc2pod: web」を指定し、このサービスの接続先を定義します。</p>
<p>selectorの下の「ports」は外部に公開するポートと接続先のポートを指定しています。portがKubernetes内部から接続で利用するポートでnodePortがホスト外から接続で利用するポートです。</p>
<p>・service.yml</p><pre class="crayon-plain-tag">apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  selector:
    svc2pod: web
  ports:
  - port: 80
    targetPort: http
    nodePort: 30000
  type: NodePort</pre><p>&nbsp;</p>
<h3>リソースを展開する</h3>
<p>作成したマニフェストファイルを元にリソースを展開していきます。展開コマンドでは「kubectl apply -f」コマンドを使うのが一般的です</p><pre class="crayon-plain-tag">$ kubectl apply -f pod.yml
pod/web-pod created

$ kubectl apply -f service.yml
service/web-service created</pre><p>&nbsp;</p>
<p>サービスリソースを確認するとweb-serviceが立ち上がっていることが確認できます。</p><pre class="crayon-plain-tag">$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
web-service NodePort 10.99.80.170 &lt;none&gt; 80:30000/TCP 67s</pre><p>&nbsp;</p>
<p><img data-attachment-id="2091" data-permalink="https://mintaku-blog.net/about-kubernetes/image1-14/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1-1.png?fit=1230%2C490&amp;ssl=1" data-orig-size="1230,490" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image1" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1-1.png?fit=300%2C120&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1-1.png?fit=800%2C319&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1-1.png?resize=800%2C319&#038;ssl=1" alt="" width="800" height="319" class="aligncenter size-large wp-image-2091" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1-1.png?resize=1024%2C408&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1-1.png?resize=300%2C120&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1-1.png?resize=768%2C306&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1-1.png?w=1230&amp;ssl=1 1230w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>nodePortで指定したポートを指定し、http://127.0.0.1:30000/にアクセスするとNginxのページを見ることができます。</p>
<p>&nbsp;</p>
<h2>デプロイメントを試してみる</h2>
<p>実際の運用ではポッドを機能拡張したデプロイメントというリソースを使うことが一般的なようなため、実際に動かして試してみます。</p>
<p>デプロイメントは内部に下位リソースとしてレプリカセットというリソースを持ち、それが水平スケールや自動復旧機能を担当します。デプロイメントの主要機能としては、ポッドのアップグレードで、バージョンアップなど発生した際に古いポッドを入れ替えてくれます。</p>
<p>Docker/Kubernetes超入門の本を参考に動かしてみます。</p>
<p>spec.replicasフィールドで指定された通り、5つのレプリカPodを作成します。</p>
<p>spec.strategy.rollingUpdateフィールドでPodの数を指定した個数ずつ増減させてアップデートしていきます。</p>
<p>spec.strategy.typeにRollingUpdateと指定し、spec.strategy.rollingUpdateにmaxSurgeとmaxUnavailableを指定します。</p>
<ul>
<li>maxSurge: replicasで指定した数よりも増やしていい最大Pod数(デフォルト値25%・絶対値 or %を設定)</li>
<li>maxUnavailable: replicasで指定した数よりも減らしていい最大Pod数(デフォルト値25%・絶対値 or %を設定)</li>
</ul>
<p>&nbsp;</p>
<p>・db.yml</p><pre class="crayon-plain-tag">apiVersion: v1
kind: Service
metadata:
  name: db
spec:
  selector:
    pod: db
  ports:
  - port: 6379
    targetPort: redis
  type: ClusterIP

---
apiVersion: v1
kind: Pod
metadata:
  name: db
  labels: 
    pod: db
spec:
  containers:
  - name: db
    image: redis:5.0.6-alpine3.10
    ports:
    - name: redis
      containerPort: 6379</pre><p>&nbsp;</p>
<p>・app.yml</p><pre class="crayon-plain-tag">apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
spec:
  replicas: 5
  strategy:
    rollingUpdate:
      maxSurge: 50%
      maxUnavailable: 0%
  selector:
    matchLabels:
      pod: app
  template:
    metadata:
      name: app
      labels: 
        pod: app
    spec:
      containers:
      - name: app
        image: sample/app
        ports:
        - name: http
          containerPort: 80
        env:
        - name: REDIS_HOST
          value: db

---
apiVersion: v1
kind: Service
metadata:
  name: app
spec:
  selector:
    pod: app
  ports:
  - port: 8080
    targetPort: http
    nodePort: 30000
  type: NodePort</pre><p>&nbsp;</p>
<p>kubectl applyで展開し、ポッドを確認すると5つ起動していることが確認できます。</p><pre class="crayon-plain-tag">$ kubectl apply -f app.yml -f db.yml 
deployment.apps/app created
service/app created
service/db created
pod/db created
$ kubectl get po
NAME READY STATUS RESTARTS AGE
app-975c58898-7rzxk 1/1 Running 0 6m18s
app-975c58898-clwxx 1/1 Running 0 6m18s
app-975c58898-lqfdl 1/1 Running 0 6m18s
app-975c58898-r64gw 1/1 Running 0 6m18s
app-975c58898-s6jl4 1/1 Running 0 6m18s
db 1/1 Running 0 12m

$ kubectl get replicaset
NAME DESIRED CURRENT READY AGE
app-975c58898 5 5 5 6m</pre><p>&nbsp;</p>
<p>デプロイメントの詳細情報は以下のコマンドで取得できます。</p><pre class="crayon-plain-tag">$ kubectl describe deployment app
Name:                   app
Namespace:              default
CreationTimestamp:      Sun, 14 Nov 2021 07:15:16 +0900
Labels:                 &lt;none&gt;
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               pod=app
Replicas:               5 desired | 5 updated | 5 total | 5 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  0% max unavailable, 50% max surge
Pod Template:
  Labels:  pod=app
  Containers:
   app:
    Image:      sample/app
    Port:       80/TCP
    Host Port:  0/TCP
    Environment:
      REDIS_HOST:  db
    Mounts:        &lt;none&gt;
  Volumes:         &lt;none&gt;
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  &lt;none&gt;
NewReplicaSet:   app-975c58898 (5/5 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  17m   deployment-controller  Scaled up replica set app-975c58898 to 5</pre><p>&nbsp;</p>The post <a href="https://mintaku-blog.net/about-kubernetes/">Kubernetesの構成や挙動を整理する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/about-kubernetes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2088</post-id>	</item>
		<item>
		<title>Cloud SQLをローカルのDBeaver(クライアントツール)にプロキシを使用して接続する方法</title>
		<link>https://mintaku-blog.net/cloudsql-dbeaver/</link>
					<comments>https://mintaku-blog.net/cloudsql-dbeaver/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Wed, 25 Mar 2020 14:07:19 +0000</pubDate>
				<category><![CDATA[GCP]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=1394</guid>

					<description><![CDATA[<p>Cloud SQLをローカルのDBeaver(クライアントツール)に接続する方法を紹介します。今回はクライアントツールとしてDBeaverを選択していますが …</p>
The post <a href="https://mintaku-blog.net/cloudsql-dbeaver/">Cloud SQLをローカルのDBeaver(クライアントツール)にプロキシを使用して接続する方法</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>Cloud SQLをローカルのDBeaver(クライアントツール)に接続する方法を紹介します。今回はクライアントツールとしてDBeaverを選択していますが、他のツールでも問題ありません。</p>
<p><span style="font-size: 8px;">参考：<a href="https://cloud.google.com/sql/docs/mysql/connect-external-app?hl=ja" target="_blank" rel="noopener noreferrer">外部アプリケーションから Cloud SQL に接続する | Cloud SQL for MySQL</a></span></p>
<p>&nbsp;</p>
<h2>前提条件</h2>
<p>Cloud SQLをローカルのクライアントツールに接続する前提として以下が当てはまっていることが条件です。</p>
<ul>
<li>Cloud SQL AdminAPIが有効化されていること</li>
<li>Cloud SQLのインスタンスが作成されていること</li>
<li>Cloud SQLにDB・ユーザが作成されていること</li>
</ul>
<p>&nbsp;</p>
<h2>プロキシクライアントのインストール</h2>
<p>ローカルから認証に必要なプロキシクライアントをインストールします。</p>
<p>Macの場合は以下のコマンドでダウンロードします。他のOSからのコマンドは以下の公式を参考にしてください。</p>
<p><span style="font-size: 8px;">参考：<a href="https://cloud.google.com/sql/docs/mysql/connect-external-app?hl=ja#install" target="_blank" rel="noopener noreferrer">ローカルマシンにプロキシ クライアントをインストールする</a></span></p><pre class="crayon-plain-tag">$ curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64</pre><p>&nbsp;</p>
<p>プロキシの実行権限を付与します。</p><pre class="crayon-plain-tag">$ chmod +x cloud_sql_proxy</pre><p>&nbsp;</p>
<h2>サービスアカウントの作成</h2>
<p>次にローカルからCloud SQLに接続する際に、認証で必要となるサービスアカウントを作成します。</p>
<p>GCPの「IAMと管理」からサービスアカウントを選択します。「サービスアカウントを作成」を押下します。</p>
<p><img data-attachment-id="1395" data-permalink="https://mintaku-blog.net/cloudsql-dbeaver/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-03-10-19-52-38/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/734873cdf67bcd86aacb79ea1a3b1098.png?fit=1532%2C92&amp;ssl=1" data-orig-size="1532,92" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-03-10 19.52.38" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/734873cdf67bcd86aacb79ea1a3b1098.png?fit=300%2C18&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/734873cdf67bcd86aacb79ea1a3b1098.png?fit=800%2C48&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1395" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/734873cdf67bcd86aacb79ea1a3b1098.png?resize=800%2C48&#038;ssl=1" alt="" width="800" height="48" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/734873cdf67bcd86aacb79ea1a3b1098.png?resize=1024%2C61&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/734873cdf67bcd86aacb79ea1a3b1098.png?resize=300%2C18&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/734873cdf67bcd86aacb79ea1a3b1098.png?resize=768%2C46&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/734873cdf67bcd86aacb79ea1a3b1098.png?w=1532&amp;ssl=1 1532w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<p>以下の項目を入力し、作成を押下します。</p>
<ul>
<li>サービスアカウント名</li>
<li>サービスアカウントID</li>
<li>サービスアカウントの説明</li>
</ul>
<p><img data-attachment-id="1396" data-permalink="https://mintaku-blog.net/cloudsql-dbeaver/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-03-10-19-54-17/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/4f48f633c12fdb892d6c9b1a73515dc5.png?fit=1756%2C1052&amp;ssl=1" data-orig-size="1756,1052" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-03-10 19.54.17" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/4f48f633c12fdb892d6c9b1a73515dc5.png?fit=300%2C180&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/4f48f633c12fdb892d6c9b1a73515dc5.png?fit=800%2C479&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1396" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/4f48f633c12fdb892d6c9b1a73515dc5.png?resize=800%2C479&#038;ssl=1" alt="" width="800" height="479" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/4f48f633c12fdb892d6c9b1a73515dc5.png?resize=1024%2C613&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/4f48f633c12fdb892d6c9b1a73515dc5.png?resize=300%2C180&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/4f48f633c12fdb892d6c9b1a73515dc5.png?resize=768%2C460&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/4f48f633c12fdb892d6c9b1a73515dc5.png?resize=1536%2C920&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/4f48f633c12fdb892d6c9b1a73515dc5.png?w=1756&amp;ssl=1 1756w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/4f48f633c12fdb892d6c9b1a73515dc5.png?w=1600&amp;ssl=1 1600w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<p>役割は「Cloud SQL クライアント」を選択し、続行を押下します。</p>
<p><img data-attachment-id="1397" data-permalink="https://mintaku-blog.net/cloudsql-dbeaver/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-03-10-19-54-42/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/9f5a434a808c1bf5a515505103e138f3.png?fit=1696%2C922&amp;ssl=1" data-orig-size="1696,922" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-03-10 19.54.42" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/9f5a434a808c1bf5a515505103e138f3.png?fit=300%2C163&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/9f5a434a808c1bf5a515505103e138f3.png?fit=800%2C435&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1397" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/9f5a434a808c1bf5a515505103e138f3.png?resize=800%2C435&#038;ssl=1" alt="" width="800" height="435" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/9f5a434a808c1bf5a515505103e138f3.png?resize=1024%2C557&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/9f5a434a808c1bf5a515505103e138f3.png?resize=300%2C163&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/9f5a434a808c1bf5a515505103e138f3.png?resize=768%2C418&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/9f5a434a808c1bf5a515505103e138f3.png?resize=1536%2C835&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/9f5a434a808c1bf5a515505103e138f3.png?w=1696&amp;ssl=1 1696w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/9f5a434a808c1bf5a515505103e138f3.png?w=1600&amp;ssl=1 1600w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<p>「キーを作成」を押下します。</p>
<p><img data-attachment-id="1398" data-permalink="https://mintaku-blog.net/cloudsql-dbeaver/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-03-10-19-55-14/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/3d00140db364f1bbab62c362bea75143.png?fit=1582%2C1310&amp;ssl=1" data-orig-size="1582,1310" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-03-10 19.55.14" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/3d00140db364f1bbab62c362bea75143.png?fit=300%2C248&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/3d00140db364f1bbab62c362bea75143.png?fit=800%2C663&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1398" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/3d00140db364f1bbab62c362bea75143.png?resize=800%2C663&#038;ssl=1" alt="" width="800" height="663" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/3d00140db364f1bbab62c362bea75143.png?resize=1024%2C848&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/3d00140db364f1bbab62c362bea75143.png?resize=300%2C248&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/3d00140db364f1bbab62c362bea75143.png?resize=768%2C636&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/3d00140db364f1bbab62c362bea75143.png?resize=1536%2C1272&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/3d00140db364f1bbab62c362bea75143.png?w=1582&amp;ssl=1 1582w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<p>キーのタイプは「JSON」を選択し、作成を押下します。すると認証ファイルがダウンロードされるので、保存します。今回は、sample-key.jsonというファイル名で保存します。</p>
<p><img data-attachment-id="1399" data-permalink="https://mintaku-blog.net/cloudsql-dbeaver/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-03-10-20-12-47/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/3c708e8a2efe41ecd9f2bc5da417f915.png?fit=1030%2C642&amp;ssl=1" data-orig-size="1030,642" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-03-10 20.12.47" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/3c708e8a2efe41ecd9f2bc5da417f915.png?fit=300%2C187&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/3c708e8a2efe41ecd9f2bc5da417f915.png?fit=800%2C498&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1399" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/3c708e8a2efe41ecd9f2bc5da417f915.png?resize=800%2C498&#038;ssl=1" alt="" width="800" height="498" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/3c708e8a2efe41ecd9f2bc5da417f915.png?resize=1024%2C638&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/3c708e8a2efe41ecd9f2bc5da417f915.png?resize=300%2C187&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/3c708e8a2efe41ecd9f2bc5da417f915.png?resize=768%2C479&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/3c708e8a2efe41ecd9f2bc5da417f915.png?w=1030&amp;ssl=1 1030w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<h2>プロキシの起動</h2>
<p>先ほどインストールしたプロキシを起動します。</p>
<ul>
<li>instances : インスタンス接続名</li>
<li>tcp : 13306</li>
<li>credential_file : 先ほど保存した認証ファイル</li>
</ul>
<p></p><pre class="crayon-plain-tag">$ ./cloud_sql_proxy -instances=&lt;インスタンス接続名&gt;=tcp:13306 -credential_file=sample-key.json</pre><p>&nbsp;</p>
<p>起動し以下のように「Ready for new connections」が表示され、正常に起動できていることを確認します。</p><pre class="crayon-plain-tag">2020/03/10 19:56:57 using credential file for authentication; email=sample@&lt;project_id&gt;.iam.gserviceaccount.com
2020/03/10 19:56:58 Listening on 127.0.0.1:13306 for &lt;インスタンス接続名&gt;
2020/03/10 19:56:58 Ready for new connections</pre><p>&nbsp;</p>
<h2>DBeaverに接続</h2>
<p>いよいよDBeaver(クライアントツール)に接続します。</p>
<p>以下を入力して接続完了です。</p>
<ul>
<li>Server Host : ローカルループバックアドレス</li>
<li>Port : 先ほど指定したポート</li>
<li>Database : Cloud SQLで作成したDB名</li>
<li>User name : Cloud SQLで作成したユーザ名</li>
<li>Password : Cloud SQLで作成したユーザのパスワード</li>
</ul>
<p><img data-attachment-id="1400" data-permalink="https://mintaku-blog.net/cloudsql-dbeaver/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-03-10-20-14-22/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/104de0c7056387e6997c6e26bc250439.png?fit=2110%2C1354&amp;ssl=1" data-orig-size="2110,1354" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-03-10 20.14.22" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/104de0c7056387e6997c6e26bc250439.png?fit=300%2C193&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/104de0c7056387e6997c6e26bc250439.png?fit=800%2C513&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1400" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/104de0c7056387e6997c6e26bc250439.png?resize=800%2C513&#038;ssl=1" alt="" width="800" height="513" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/104de0c7056387e6997c6e26bc250439.png?resize=1024%2C657&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/104de0c7056387e6997c6e26bc250439.png?resize=300%2C193&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/104de0c7056387e6997c6e26bc250439.png?resize=768%2C493&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/104de0c7056387e6997c6e26bc250439.png?resize=1536%2C986&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/104de0c7056387e6997c6e26bc250439.png?resize=2048%2C1314&amp;ssl=1 2048w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/03/104de0c7056387e6997c6e26bc250439.png?w=1600&amp;ssl=1 1600w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<h2>接続時に「Communications link failure」エラー</h2>
<p>最後のクライアントからの接続時に以下のエラーでハマりました。</p><pre class="crayon-plain-tag">Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.</pre><p>&nbsp;</p>
<p>ログを確認すると以下のエラーが表示されていました。調べてみるとどうやら接続の問題のようですが、特に問題なさそう。</p><pre class="crayon-plain-tag">[Note] Aborted connection xxx to db: 'sample' user: 'sample' host: 'cloudsqlproxy~xxxxx' (Got an error reading communication packets)</pre><p>&nbsp;</p>
<p>タイムアウトやbuffer_sizeを増やしたり、あれこれ設定を変更するが解決できず。。</p>
<p>結局、原因は会社で使用しているWiFiでした。試しにWiFiをオフにして、テザリングを使ってみると、問題なく接続できました。</p>The post <a href="https://mintaku-blog.net/cloudsql-dbeaver/">Cloud SQLをローカルのDBeaver(クライアントツール)にプロキシを使用して接続する方法</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/cloudsql-dbeaver/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1394</post-id>	</item>
		<item>
		<title>Google App EngineのRuby 2.5 StandardでRails環境構築</title>
		<link>https://mintaku-blog.net/gae-rails/</link>
					<comments>https://mintaku-blog.net/gae-rails/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Wed, 19 Feb 2020 13:08:38 +0000</pubDate>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[GCP]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=1338</guid>

					<description><![CDATA[<p>Google App EngineのRuby 2.5 StandardでRails環境構築する方法とCloud SQLのMySQLとの接続方法について紹介し …</p>
The post <a href="https://mintaku-blog.net/gae-rails/">Google App EngineのRuby 2.5 StandardでRails環境構築</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>Google App EngineのRuby 2.5 StandardでRails環境構築する方法とCloud SQLのMySQLとの接続方法について紹介します。</p>
<p>基本的には以下の公式を参考に環境構築しています。</p>
<ul>
<li><a href="https://cloud.google.com/ruby/rails/appengine?hl=ja" target="_blank" rel="noopener noreferrer">Running Rails 5 on App Engine flexible environment | Ruby</a></li>
<li><a href="https://cloud.google.com/ruby/rails/using-cloudsql-mysql?hl=ja" target="_blank" rel="noopener noreferrer">Using Cloud SQL for MySQL with Rails 5 | Ruby</a></li>
</ul>
<h2>前提条件</h2>
<p>デプロイするRailsプロジェクトが以下に当てはまっていることが前提条件です。</p>
<ul>
<li>Ruby バージョン2.3.4以降をインストール</li>
<li>Rails 5 gem をインストール</li>
<li>Bundler gem をインストール</li>
</ul>
<p>&nbsp;</p>
<h2>必要なAPIを有効化</h2>
<p>データストア、Pub / Sub、Cloud Storage JSON、Stackdriver Logging、およびGoogle+必要なAPIを有効にします。</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://console.cloud.google.com/flows/enableapi?apiid=datastore.googleapis.com,pubsub,storage_api,logging,plus&_ga=2.48516846.936357722.1581502708-977931022.1573203289">Google Cloud Platform</a>
			</p>
										<div class="ys-blog-card__domain">console.cloud.google.com</div>
					</div>
	</div>
</div>

<p>&nbsp;</p>
<h2>app.yamlの作成</h2>
<p>GAEにデプロイするRailsアプリのディレクトリ直下にapp.yamlを作成します。</p>
<p>今回はスタンダード環境なので「env: flex」はコメントアウトしておきます。またapp.yamlに環境変数を書くことでGAEに環境変数を渡せます。</p>
<p>secret keyは以下のコマンドで確認できます。</p><pre class="crayon-plain-tag">$ bundle exec rails secret</pre><p>・app.yaml</p><pre class="crayon-plain-tag">entrypoint: bundle exec rackup --port $PORT
runtime: ruby25
# env: flex
env_variables:
    SECRET_KEY_BASE: &lt; Your secret key&gt;</pre><p>GAEにデプロイしたアプリはDocker上で動くためDockerfileがプロジェクト直下にあるとruntime rubyでデプロイができません。</p>
<p>runtime rubyでデプロイする場合は、DockerfileをDockerfile-devなどに置き換えておきましょう。</p>
<p>&nbsp;</p>
<h2>.gcloudignoreの作成</h2>
<p>デプロイしないファイルを指定するために.gcloudignoreファイルを作成します。</p>
<p>・.gcloudignore</p><pre class="crayon-plain-tag">.gcloudignore
#!include:.gitignore
.git
.gitignore

!/public/assets</pre><p>&nbsp;</p>
<h2>MySQL用Cloud SQLをセットアップ</h2>
<p>RailsアプリでCloud SQLを使用するために、mysql2とappenginegemをGemfileファイルに追加します</p><pre class="crayon-plain-tag">$ bundle add mysql2
$ bundle add appengine</pre><p>以下のコマンドでインスタンス接続名を取得できます。<br />
gcloud sql instances describe &lt; インスタンス名 &gt;</p>
<p>・database.yml</p><pre class="crayon-plain-tag">production:
    adapter: mysql2
    encoding: utf8
    pool: 5
    timeout: 5000
    username: &lt; username &gt;
    password: &lt; password &gt;
    database: &lt; database &gt;
    socket: /cloudsql/&lt; インスタンス接続名 &gt;</pre><p>&nbsp;</p>
<h2>GAEにデプロイ</h2>
<p>以下のコマンドで、GAEアプリを作成します。</p><pre class="crayon-plain-tag">$ gcloud app create</pre><p>デプロイする前に、Railsアセットをプリコンパイルします。</p><pre class="crayon-plain-tag">$ bundle exec bin/rails assets:precompile</pre><p>アセットのコンパイルが完了したらGAEにデプロイします。</p><pre class="crayon-plain-tag">$ gcloud app deploy</pre><p>&nbsp;</p>
<h2>マイグレーションでテーブル作成</h2>
<p>以下のコマンドでプロジェクトを一覧表示できます。アプリのデプロイに使用するプロジェクトを見つけ、プロジェクト番号をコピーします。</p><pre class="crayon-plain-tag">$ gcloud projects list</pre><p>roles/editorデータベース移行を実行するロールのプロジェクトIAMポリシーに新しいメンバーを追加します。</p><pre class="crayon-plain-tag">$ gcloud projects add-iam-policy-binding &lt; YOUR-PROJECT-ID &gt; --member=serviceAccount: &lt; PROJECT_NUMBER &gt; @cloudbuild.gserviceaccount.com --role=roles/editor</pre><p>先ほど追加したappengineを使用して、Cloud SQL上でのマイグレーションを実行します。</p><pre class="crayon-plain-tag">$ bundle exec rake appengine:exec -- bundle exec rake db:migrate</pre><p>Cloud SQL画面の「Cloud Shellを使用して接続」から以下のコマンドで接続し、実際にテーブルが作成されたか確認してみましょう。</p><pre class="crayon-plain-tag">$ gcloud sql connect &lt; インスタンス名 &gt; --user=&lt; username &gt; --quiet</pre><p>&nbsp;</p>
<h2>以降のデプロイ</h2>
<p>以降、ソースを更新して再度デプロイする場合は以下のコマンドで実行する流れになります。</p><pre class="crayon-plain-tag">$ bundle exec bin/rails assets:precompile
$ gcloud app deploy
$ bundle exec rake appengine:exec -- bundle exec rake db:migrate</pre><p>&nbsp;</p>
<h2>ハマりポイント</h2>
<h3>① コンパイル時にエラー</h3>
<p>コンパイル時に以下のエラーが発生。</p><pre class="crayon-plain-tag">Note: Google::Cloud::Logging is disabled because it failed to authorize with the service.
Note: Google::Cloud::Debugger is disabled because it failed to authorize with the service.
Note: Google::Cloud::ErrorReporting is disabled because it failed to authorize with the service.
Note: Google::Cloud::Trace is disabled because it failed to authorize with the service.</pre><p>develop環境では使用しないようfalseにすることで解決しました。</p>
<p>・development.rb</p><pre class="crayon-plain-tag">config.google_cloud.use_logging = false
config.google_cloud.use_debugger = false
config.google_cloud.use_error_reporting = false
config.google_cloud.use_trace = false</pre><p>&nbsp;</p>
<h3>② MySQLに接続できない</h3>
<p>以下のエラーによりCloud SQLのMySQLに接続できずハマり。。</p><pre class="crayon-plain-tag">[STDERR] rake aborted!
[STDERR] Mysql2::Error::ConnectionError: Unknown MySQL server host '/cloudsql/&lt; インスタンス接続名 &gt;' (2)</pre><p>公式ではdatabase.yamlの「/cloudsql/&lt; インスタンス接続名 &gt;」の箇所がhostとなっていたため、hostで書いていたのですが、socketに変更することで解決しました。。</p>
<p>参考：</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img src="https://opengraph.githubassets.com/124e3ac85ab876ecb3ee9a13f260488c6765a97302a572b589bb25a41b6144ed/GoogleCloudPlatform/ruby-docs-samples" alt="">			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://github.com/GoogleCloudPlatform/ruby-docs-samples/blob/0a6e898a1acd140ca04c63c7b68da1468acb4082/appengine/rails-cloudsql-postgres/config/database.yml">ruby-docs-samples/appengine/rails-cloudsql-postgres/config/database.yml at 0a6e898a1acd140ca04c63c7b68da1468acb4082 · GoogleCloudPlatform/ruby-docs-samples · GitHub</a>
			</p>
							<div class="ys-blog-card__dscr">
					Ruby samples for Google Cloud Platform p&hellip;				</div>
										<div class="ys-blog-card__domain">github.com</div>
					</div>
	</div>
</div>

<p>・修正前</p><pre class="crayon-plain-tag">production:
    adapter: mysql2
    encoding: utf8
    pool: 5
    timeout: 5000
    username: &lt; username &gt;
    password: &lt; password &gt;
    database: &lt; database &gt;
    host: /cloudsql/&lt; インスタンス接続名 &gt;</pre><p>・修正後</p><pre class="crayon-plain-tag">production:
    adapter: mysql2
    encoding: utf8
    pool: 5
    timeout: 5000
    username: &lt; username &gt;
    password: &lt; password &gt;
    database: &lt; database &gt;
    socket: /cloudsql/&lt; インスタンス接続名 &gt;</pre><p>&nbsp;</p>
<h3>③ GAEのデフォルトTime Outが10分なためSeedが完了しない</h3>
<p>GAEのデフォルトタイムアウトが10mのため、Seedが完了せず途中で終了してしまう。。</p><pre class="crayon-plain-tag">TIMEOUT: 10m</pre><p>GAE_TIMEOUTオプションでタイムアウトを伸ばすことができました。1h23m45sの形式で指定できます。</p><pre class="crayon-plain-tag">bundle exec rake appengine:exec GAE_TIMEOUT=30m -- bundle exec rake db:seed</pre><p>参考：</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img src="https://opengraph.githubassets.com/52b5158113b4bc826f0dc7f99a3c78803f2eb2dc31ffe6537b7bd59dcc946bd6/GoogleCloudPlatform/appengine-ruby/issues/26" alt="">			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://github.com/GoogleCloudPlatform/appengine-ruby/issues/26">How to set the value of timeout? · Issue #26 · GoogleCloudPlatform/appengine-ruby · GitHub</a>
			</p>
							<div class="ys-blog-card__dscr">
					Could not find this documented anywhere &hellip;				</div>
										<div class="ys-blog-card__domain">github.com</div>
					</div>
	</div>
</div>

<p>以上、Google App EngineのRuby 2.5 StandardでRails環境構築する方法とCloud SQLのMySQLとの接続方法でした。</p>The post <a href="https://mintaku-blog.net/gae-rails/">Google App EngineのRuby 2.5 StandardでRails環境構築</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/gae-rails/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1338</post-id>	</item>
		<item>
		<title>AWS環境で「ERROR: Operation Denied. Signature expired」エラーが出た時の解決法</title>
		<link>https://mintaku-blog.net/aws-signature-expired/</link>
					<comments>https://mintaku-blog.net/aws-signature-expired/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Wed, 06 Feb 2019 14:42:22 +0000</pubDate>
				<category><![CDATA[開発技術]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=839</guid>

					<description><![CDATA[<p>AWS環境にSSHで入ろうとしたら以下のエラーが発生。 ERROR: Operation Denied. Signature expired: 201902 …</p>
The post <a href="https://mintaku-blog.net/aws-signature-expired/">AWS環境で「ERROR: Operation Denied. Signature expired」エラーが出た時の解決法</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>AWS環境にSSHで入ろうとしたら以下のエラーが発生。</p><pre class="crayon-plain-tag">ERROR: Operation Denied. Signature expired: 20190204T011910Z is now earlier than 20190204T012127Z (20190204T012627Z - 5 min.)</pre><p>調べたところ、サーバの時刻を定期的に同期させる必要があるとのこと。</p>
<p>そこでntpdateコマンドを使い、以下のコマンドでNTPサーバから時刻を合わせました。</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="http://rina.jpn.ph/rance/index.php?NTP%20%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E6%99%82%E5%88%BB%E3%82%92%E5%90%88%E3%82%8F%E3%81%9B%E3%82%8B">jpn.ph&nbsp;-&nbsp;このウェブサイトは販売用です！&nbsp;-&nbsp;jpn リソースおよび情報</a>
			</p>
							<div class="ys-blog-card__dscr">
					このウェブサイトは販売用です！ jpn.ph は、あなたがお探しの情報の全ての最&hellip;				</div>
										<div class="ys-blog-card__domain">rina.jpn.ph</div>
					</div>
	</div>
</div>

<p>NTPがインストールされていなかっため、インストールしてから実行</p><pre class="crayon-plain-tag">$ yum -y install ntpdate</pre><p></p><pre class="crayon-plain-tag">$ ntpdate clock.nc.fukuoka-u.ac.jp
4 Feb 01:33:39 ntpdate[17044]: step time server 133.100.9.2 offset 437.076330 sec</pre><p>無事エラーが消えて解決しました。</p>
<p>&nbsp;</p>
<p><span style="font-size: 10px;">参考：</span></p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img src="https://i0.wp.com/stackoverflow.com/Content/Sites/stackoverflow/Img/apple-touch-icon@2.png?w=800&#038;ssl=1" alt="" data-recalc-dims="1">			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://stackoverflow.com/questions/44017410/signature-expired-is-now-earlier-than-error-invalidsignatureexception&prev=search">amazon web services - Signature expired: is now earlier than error : InvalidSignatureException - Stack Overflow</a>
			</p>
							<div class="ys-blog-card__dscr">
					I am trying a small example with AWS API&hellip;				</div>
										<div class="ys-blog-card__domain">stackoverflow.com</div>
					</div>
	</div>
</div>The post <a href="https://mintaku-blog.net/aws-signature-expired/">AWS環境で「ERROR: Operation Denied. Signature expired」エラーが出た時の解決法</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/aws-signature-expired/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">839</post-id>	</item>
		<item>
		<title>【Rails】bundle installでmysql2インストール時のエラー対処法</title>
		<link>https://mintaku-blog.net/rails-mysql2/</link>
					<comments>https://mintaku-blog.net/rails-mysql2/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Thu, 23 Aug 2018 13:19:47 +0000</pubDate>
				<category><![CDATA[開発技術]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=573</guid>

					<description><![CDATA[<p>Rails環境構築でハマったのでメモ。 実行環境 Vagrant 1.8.1 CentOS 7.1 Ruby 2.5.0 Rails 5.2.1 &#38; …</p>
The post <a href="https://mintaku-blog.net/rails-mysql2/">【Rails】bundle installでmysql2インストール時のエラー対処法</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>Rails環境構築でハマったのでメモ。</p>
<h2>実行環境</h2>
<ul>
<li>Vagrant 1.8.1</li>
<li>CentOS 7.1</li>
<li>Ruby 2.5.0</li>
<li>Rails 5.2.1</li>
</ul>
<p>&nbsp;</p>
<p>以下の記事を参考に、Railsプロジェクト作成後にMySQLを入れる。</p>
<p><a href="https://qiita.com/reeenapi/items/9fc38c4f2f8186c78288" target="_blank" rel="noopener">RailsのDBを(初めから| |後から)MySQLに変更する</a></p>
<p>&nbsp;</p>
<p>・Gemfile</p>
<p>Gemfileに以下を追記</p><pre class="crayon-plain-tag">gem 'mysql2'</pre><p>&nbsp;</p>
<p>・/config/database.yml</p>
<p>developmentの箇所を以下に修正</p><pre class="crayon-plain-tag">development:
adapter: mysql2
encoding: utf8
database: rails_tutorial
pool: 5
username: root
password: 
host: localhost</pre><p>&nbsp;</p>
<h2>bundle installでmysql2インストール時にエラー</h2>
<p>バンドラーインストール実行。</p><pre class="crayon-plain-tag">$ bundle install --without production

…
--without-mysql-lib=${mysql-dir}/lib
--with-mysqlclientlib
--without-mysqlclientlib

To see why this extension failed to compile, please check the mkmf.log which can

be found here:

/usr/local/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/extensions/x86_64-linux/2.5.
0-static/mysql2-0.5.2/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in
/usr/local/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/mysql2-0.5.2 for
inspection.
Results logged to
/usr/local/rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/extensions/x86_64-linux/2.5.
0-static/mysql2-0.5.2/gem_make.out

An error occurred while installing mysql2 (0.5.2), and Bundler cannot
continue.
Make sure that `gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/'`
succeeds before bundling.

In Gemfile:
mysql2</pre><p>&nbsp;</p>
<p>するも、エラー。言われたとおりに「gem install mysql2 -v &#8216;0.5.2&#8217;」をインストールしてみるもダメみたい。</p><pre class="crayon-plain-tag">$ gem install mysql2 -v '0.5.2'

Building native extensions. This could take a while...
ERROR: Error installing mysql2:
ERROR: Failed to build gem native extension.</pre><p>&nbsp;</p>
<h2>bundle installでmysql2インストール時にエラーした時の対処法</h2>
<p>mysql-develをインストールしてみましょう。</p><pre class="crayon-plain-tag">$ sudo yum install mysql-devel

Installed:
mariadb-devel.x86_64 1:5.5.60-1.el7_5

Dependency Updated:
mariadb-libs.x86_64 1:5.5.60-1.el7_5

Complete!</pre><p>&nbsp;</p>
<p>mysql-develインストール後、再度トライしたらいけました。</p><pre class="crayon-plain-tag">$ bundle install --without production</pre><p></p>The post <a href="https://mintaku-blog.net/rails-mysql2/">【Rails】bundle installでmysql2インストール時のエラー対処法</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/rails-mysql2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">573</post-id>	</item>
		<item>
		<title>【Visual Studio Code】XdebugをXAMPPで設定する手順</title>
		<link>https://mintaku-blog.net/xdebug-xampp/</link>
					<comments>https://mintaku-blog.net/xdebug-xampp/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Fri, 27 Jul 2018 15:31:21 +0000</pubDate>
				<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=550</guid>

					<description><![CDATA[<p>Xdebugと拡張機能「PHP Debug」を導入し、Visual Studio CodeにPHPデバッグができる環境を構築。XAMPPとVisual St …</p>
The post <a href="https://mintaku-blog.net/xdebug-xampp/">【Visual Studio Code】XdebugをXAMPPで設定する手順</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>Xdebugと拡張機能「PHP Debug」を導入し、Visual Studio CodeにPHPデバッグができる環境を構築。XAMPPとVisual Studio Codeがインストールされている前提。</p>
<p>・XAMPP</p>
<p><a href="https://www.apachefriends.org/jp/index.html" target="_blank" rel="noopener">https://www.apachefriends.org/jp/index.html</a></p>
<p>・Visual Studio Code</p>
<p><a href="https://code.visualstudio.com/" target="_blank" rel="noopener">https://code.visualstudio.com/</a></p>
<p>&nbsp;</p>
<h2>Visual Studio CodeでPHPデバッグができるまでの流れ</h2>
<p>大体以下のような流れ。</p>
<ol>
<li>Xdebugのインストール(既にある場合は不要)</li>
<li>XdebugをXAMPP内に配置</li>
<li>php.iniにXdebugの情報を追記</li>
<li>Visual Studio Codeに「PHP Debug」をインストール</li>
<li>「PHP Debug」にデバッグ設定</li>
</ol>
<p>&nbsp;</p>
<h2>Xdebugのインストール</h2>
<p>phpinfo()で出力された情報を全てコピーし、以下のサイトのテキストエリアに貼り付けると、スムーズにインストールすることができる。</p>
<p>Windowsの場合は、.dllをインストールして、\xampp\php\extに配置すればok。ただ大体の場合は元々\xampp\php\extに存在しているため、わざわざインストールする必要はないかも。</p>
<p><a href="https://xdebug.org/wizard.php" target="_blank" rel="noopener">https://xdebug.org/wizard.php</a></p>
<p>&nbsp;</p>
<h2>php.iniの編集</h2>
<p>php.iniにインストールしたXdebugの情報を追記。今回はXAMPPのApache使用のため、9000番ポートはコメントアウトしてます。</p>
<p>C:\xampp\php\php.ini</p><pre class="crayon-plain-tag">[XDebug]
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
xdebug.remote_enable=1
xdebug.remote_host=localhost
; xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart=true</pre><p>追記したら、phpinfo()でXdebugが記載されていることを確認します。</p>
<p><img data-attachment-id="555" data-permalink="https://mintaku-blog.net/xdebug-xampp/xdebug/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/xdebug.png?fit=1016%2C896&amp;ssl=1" data-orig-size="1016,896" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="xdebug" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/xdebug.png?fit=300%2C265&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/xdebug.png?fit=800%2C706&amp;ssl=1" loading="lazy" class="aligncenter size-full wp-image-555" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/xdebug.png?resize=800%2C706" alt="" width="800" height="706" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/xdebug.png?w=1016&amp;ssl=1 1016w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/xdebug.png?resize=300%2C265&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/xdebug.png?resize=768%2C677&amp;ssl=1 768w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<h2>プラグインをインストール</h2>
<p>拡張機能「PHP Debug」をインストールします。</p>
<p><img data-attachment-id="554" data-permalink="https://mintaku-blog.net/xdebug-xampp/php-debug/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/PHP-Debug.png?fit=1091%2C584&amp;ssl=1" data-orig-size="1091,584" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="PHP Debug" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/PHP-Debug.png?fit=300%2C161&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/PHP-Debug.png?fit=800%2C428&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-554" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/PHP-Debug-1024x548.png?resize=800%2C428" alt="" width="800" height="428" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/PHP-Debug.png?resize=1024%2C548&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/PHP-Debug.png?resize=300%2C161&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/PHP-Debug.png?resize=768%2C411&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/PHP-Debug.png?w=1091&amp;ssl=1 1091w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<h2>「PHP Debug」にデバッグ設定</h2>
<p>インストール完了後、画面左のツールバーから虫のアイコンを選択。画面上部にある歯車アイコンを選択し、PHPをクリック。</p>
<p>するとlaunch.jsonファイルが生成されるため、以下のように追記しました。先ほどのphp.iniに9000番ポートを指定した場合は、80→9000に読み替えてください。</p>
<p>・launch.json</p><pre class="crayon-plain-tag">{
"version": "0.2.0",
"configurations": [
    {
      "name": "Custom Xdebug setting",
      "type": "php",
      "request": "launch",
      "port": 80,
      "serverSourceRoot": "${workspaceRoot}",
      "localSourceRoot": "${workspaceRoot}"
    },
  ]
}</pre><p>&nbsp;</p>
<p>あとはブレークポイント設定し、構成の名前を指定してデバッグを実行するだけ。なのに結構ハマってしまった&#8230;。</p>
<p><img data-attachment-id="556" data-permalink="https://mintaku-blog.net/xdebug-xampp/%e3%83%86%e3%82%99%e3%83%8f%e3%82%99%e3%83%83%e3%82%af%e3%82%99/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/デバッグ.png?fit=345%2C93&amp;ssl=1" data-orig-size="345,93" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="デバッグ" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/デバッグ.png?fit=300%2C81&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/デバッグ.png?fit=345%2C93&amp;ssl=1" loading="lazy" class="aligncenter size-full wp-image-556" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/デバッグ.png?resize=345%2C93" alt="" width="345" height="93" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/デバッグ.png?w=345&amp;ssl=1 345w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/デバッグ.png?resize=300%2C81&amp;ssl=1 300w" sizes="(max-width: 345px) 100vw, 345px" data-recalc-dims="1" /></p>The post <a href="https://mintaku-blog.net/xdebug-xampp/">【Visual Studio Code】XdebugをXAMPPで設定する手順</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/xdebug-xampp/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">550</post-id>	</item>
		<item>
		<title>FuelPHPにMySQL接続で「PDOException: could not find driver」の対処法</title>
		<link>https://mintaku-blog.net/mysql-pdoexception/</link>
					<comments>https://mintaku-blog.net/mysql-pdoexception/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Tue, 24 Jul 2018 14:08:12 +0000</pubDate>
				<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=535</guid>

					<description><![CDATA[<p>Vagrant+VirtualBoxで仮想サーバを立ち上げ、CentOS7環境を構築。ApacheとMySQLをインストールし、ローカルのFuelPHPプロ …</p>
The post <a href="https://mintaku-blog.net/mysql-pdoexception/">FuelPHPにMySQL接続で「PDOException: could not find driver」の対処法</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>Vagrant+VirtualBoxで仮想サーバを立ち上げ、CentOS7環境を構築。ApacheとMySQLをインストールし、ローカルのFuelPHPプロジェクトとMySQLを接続する。</p>
<h2>実行環境</h2>
<p>実行環境は以下の通り。Apacheは既に起動し、MySQLの設定が完了した前提。</p>
<ul>
<li>Window7(ホスト)</li>
<li>VirtualBox5.0.16</li>
<li>Vagrant1.9.6</li>
<li>CentOS7(ゲスト)</li>
<li>FuelPHP 1.7.2</li>
<li>PHP 7.0.31</li>
<li>MySQL 5.6.40</li>
<li>Apache 2.4.6t</li>
</ul>
<p>&nbsp;</p>
<h2>db.phpの編集</h2>
<p>ローカルで開発しているFuelPHPプロジェクトとMySQLを接続するための設定を行う。作成したデータベースやMySQLユーザの情報を以下のように記述する。</p>
<p>・fuel\app\config\development\db.php</p><pre class="crayon-plain-tag">&lt;?php

return array(
 'default' =&gt; array(
  'connection' =&gt; array(
   'dsn' =&gt; 'mysql:host=localhost;dbname=fuel_dev',
   'username' =&gt; 'root',
   'password' =&gt; 'root',
  ),
 ),
);</pre><p></p><pre class="crayon-plain-tag">$ systemctl restart httpd.service</pre><p>Apacheを再起動し、アプリケーションを動かしてみるもエラー。</p>
<p>&nbsp;</p>
<h2>「PDOException: could not find driver」エラーと対処法</h2>
<p>早速ログを確認してみると「PDOException: could not find driver」で、ドライバーが見つからないとのこと。</p><pre class="crayon-plain-tag">C:\sample\fuel\app\logs\
ERROR - 2018-07-24 09:11:39 --&gt; PDOException: could not find driver in /sample/fuel/core/classes/database/pdo/connection.php:96</pre><p>FulePHPプロジェクトのindex.php上部に以下を書き込み、PHPの環境設定情報を表示する。</p>
<p>・index.php</p><pre class="crayon-plain-tag">&lt;?php
echo phpinfo();exit;</pre><p><img data-attachment-id="542" data-permalink="https://mintaku-blog.net/mysql-pdoexception/phpinfo/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/PHPinfo.png?fit=1137%2C879&amp;ssl=1" data-orig-size="1137,879" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="PHPinfo" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/PHPinfo.png?fit=300%2C232&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/PHPinfo.png?fit=800%2C619&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-542" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/PHPinfo-1024x792.png?resize=800%2C619" alt="" width="800" height="619" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/PHPinfo.png?resize=1024%2C792&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/PHPinfo.png?resize=300%2C232&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/PHPinfo.png?resize=768%2C594&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/PHPinfo.png?w=1137&amp;ssl=1 1137w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>再起動して、あらためてブラウザで開くとPHPの環境設定情報が表示される。</p>
<p>案の定PDO driversに「mysql」がなかったため、こちらを参考にphp-mysqlndを入れた。</p>
<p>参考：<a href="https://qiita.com/toriiico/items/e2d951bc7e598d7609fb" target="_blank" rel="noopener">PHP7+Nginx+MariaDBでPDO接続したとき&#8221;could not find driver&#8221;が出た際にやったこと</a></p>
<p>&nbsp;</p>
<h2>php-mysqlndをインストール</h2>
<p></p><pre class="crayon-plain-tag">$ yum install --enablerepo=remi-php70 php-mysqlnd</pre><p>正常にインストールされたか確認</p><pre class="crayon-plain-tag">$ yum list installed | grep mysqlnd
php-mysqlnd.x86_64 7.0.31-1.el7.remi @remi-php70</pre><p>php-fpmとApacheを再起動</p><pre class="crayon-plain-tag">$ systemctl restart php-fpm
$ systemctl restart httpd.service</pre><p><img data-attachment-id="543" data-permalink="https://mintaku-blog.net/mysql-pdoexception/%e3%82%ad%e3%83%a3%e3%83%95%e3%82%9a%e3%83%81%e3%83%a3-1/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/キャプチャ-1.png?fit=1005%2C126&amp;ssl=1" data-orig-size="1005,126" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="キャプチャ (1)" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/キャプチャ-1.png?fit=300%2C38&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/キャプチャ-1.png?fit=800%2C100&amp;ssl=1" loading="lazy" class="aligncenter size-full wp-image-543" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/キャプチャ-1.png?resize=800%2C100" alt="" width="800" height="100" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/キャプチャ-1.png?w=1005&amp;ssl=1 1005w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/キャプチャ-1.png?resize=300%2C38&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/キャプチャ-1.png?resize=768%2C96&amp;ssl=1 768w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>PDO driversに「mysql」入っていることを確認し、再度開くと無事接続されました。</p>The post <a href="https://mintaku-blog.net/mysql-pdoexception/">FuelPHPにMySQL接続で「PDOException: could not find driver」の対処法</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/mysql-pdoexception/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">535</post-id>	</item>
		<item>
		<title>CentOS7でFuelPHPをApacheで起動するまでの手順</title>
		<link>https://mintaku-blog.net/fuelphp-apache/</link>
					<comments>https://mintaku-blog.net/fuelphp-apache/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Mon, 23 Jul 2018 13:35:57 +0000</pubDate>
				<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=526</guid>

					<description><![CDATA[<p>CentOS7でFuelPHPをApacheで起動するまでの手順 Vagrant+VirtualBoxで仮想サーバを立ち上げ、CentOS7環境を構築。Ap …</p>
The post <a href="https://mintaku-blog.net/fuelphp-apache/">CentOS7でFuelPHPをApacheで起動するまでの手順</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>CentOS7でFuelPHPをApacheで起動するまでの手順</p>
<p>Vagrant+VirtualBoxで仮想サーバを立ち上げ、CentOS7環境を構築。Apacheをインストールし、ローカルのFuelPHPプロジェクトを動かすまでの手順メモ。</p>
<h2>実行環境</h2>
<p>実行環境は以下の通り。</p>
<p>VagrantでCentOS環境を構築した前提。</p>
<ul>
<li>Window7(ホスト)</li>
<li>VirtualBox5.0.16</li>
<li>Vagrant1.9.6</li>
<li>CentOS7(ゲスト)</li>
</ul>
<p>&nbsp;</p>
<h2>Apacheのインストール</h2>
<p>-yオプションで実行することで、インストール時の応答確認を省略。</p><pre class="crayon-plain-tag">$ yum -y install httpd</pre><p>&nbsp;</p>
<h2>バージョン確認</h2>
<p></p><pre class="crayon-plain-tag">$ httpd -v
Server version: Apache/2.4.6 (CentOS)</pre><p>&nbsp;</p>
<h2>Apacheの起動</h2>
<p>ちゃんと起動しているか確認。</p><pre class="crayon-plain-tag">$ systemctl start httpd.service
$ systemctl status httpd.service
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor prese
Active: active (running) since
Docs: man:httpd(8)
man:apachectl(8)
Process: 13928 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAI LURE)
Main PID: 13958 (httpd)
Status: "Processing requests..."
Memory: 8.1M
CGroup: /system.slice/httpd.service
tq13958 /usr/sbin/httpd -DFOREGROUND
tq13959 /usr/sbin/httpd -DFOREGROUND
tq13960 /usr/sbin/httpd -DFOREGROUND
tq13961 /usr/sbin/httpd -DFOREGROUND
tq13962 /usr/sbin/httpd -DFOREGROUND
mq13963 /usr/sbin/httpd -DFOREGROUND</pre><p>&nbsp;</p>
<h2>ファイアウォールの設定</h2>
<p>firewall-cmdコマンドで80番ポートに外部からの接続許可できる設定を追加。設定を反映するために再読み込みします。</p><pre class="crayon-plain-tag">$ firewall-cmd --add-service=http --permanent
success
$ firewall-cmd --reload
success</pre><p>ファイアウォールの設定が完了したら以下のコマンドで確認。</p><pre class="crayon-plain-tag">$ firewall-cmd --list-all
public (default, active)
interfaces: enp0s3
sources:
services: dhcpv6-client http ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:</pre><p>&nbsp;</p>
<h2>Apacheの設定ファイルの編集</h2>
<p>Apacheの設定ファイルにFuelPHPプロジェクトが動くよう編集します。</p>
<p>FuelPHPプロジェクトはローカルにマウントするよう、あらかじめVagrantfileに記述してから起動する必要があるため、忘れていた方はこちらを参考に。</p>
<p>・Vagrantfile</p><pre class="crayon-plain-tag"># "ホストPCのFuelPHPプロジェクト格納場所", "ゲストPCのFuelPHPプロジェクト格納場所"
config.vm.synced_folder "C:/sample", "/sample"</pre><p>Apacheの設定ファイルの編集。</p><pre class="crayon-plain-tag">$ vi /etc/httpd/conf/httpd.conf
&lt;VirtualHost *:80&gt;
DocumentRoot /sample/public #FuelPHPプロジェクトのパス指定
&lt;Directory "/sample/public"&gt;
 Order allow,deny
 Allow from all
 DirectoryIndex index.php
&lt;/Directory&gt;
&lt;/VirtualHost&gt;</pre><p>&nbsp;</p>
<h2>「client denied by server configuration」エラーと対処法</h2>
<p>Apacheを再起動して動かしてみるも、エラー。tailコマンドでエラーログを確認する。</p><pre class="crayon-plain-tag">$ tail -f /var/log/httpd/error_log
AH01630: client denied by server configuration</pre><p>クライアント側がサーバの設定によって拒否されていることがわかった。</p>
<p>調べてみると、Apache2.4からディレクティブの書き方が変わったみたい。</p>
<p>ということで、</p>
<ul>
<li>Order allow,deny</li>
<li>Allow from all</li>
</ul>
<p>の部分を</p>
<ul>
<li>Require all granted</li>
</ul>
<p>に書き換えました。</p><pre class="crayon-plain-tag">&lt;VirtualHost *:80&gt;
DocumentRoot /sample/public #FuelPHPプロジェクトのパス指定
&lt;Directory "/sample/public"&gt;
 Require all granted
 DirectoryIndex index.php
&lt;/Directory&gt;
&lt;/VirtualHost&gt;</pre><p>といことで改めて再起動してブラウザで開くと、index.phpの画面は表示された！</p>
<p>しかし、ホーム画面から遷移しようとすると404になる&#8230;。</p>
<p>&nbsp;</p>
<h2>「404」エラーと対処法</h2>
<p>DocumentRootのDirectoryディレクティブ内にある「AllowOverride None」が原因だった模様。</p>
<p>「AllowOverride All」に設定することで、public以下で配置している .htaccessのmod_rewrite機能が動作するようになるとのこと。</p><pre class="crayon-plain-tag">&lt;VirtualHost *:80&gt;
DocumentRoot /sample/public
&lt;Directory "/sample/public"&gt;
 AllowOverride All
 Require all granted
 DirectoryIndex index.php
&lt;/Directory&gt;
&lt;/VirtualHost&gt;</pre><p></p><pre class="crayon-plain-tag">$ systemctl restart httpd.service</pre><p>再起動して無事に表示！「AllowOverride All」に書き換えて再起動すると、正常に画面遷移しました。</p>
<p>&nbsp;</p>
<h2>「httpd: Could not reliably determine the server&#8217;s fully qualified domain name」が表示された場合は</h2>
<p>ちなみにエラーで「httpd: Could not reliably determine the server&#8217;s fully qualified domain name」と書かれている場合は、ServerNameの指定がされていないため、httpd.confに記載しましょう。</p>The post <a href="https://mintaku-blog.net/fuelphp-apache/">CentOS7でFuelPHPをApacheで起動するまでの手順</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/fuelphp-apache/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">526</post-id>	</item>
		<item>
		<title>仮想環境で構築したMySQLをDBeaver(クライアントツール)に接続する</title>
		<link>https://mintaku-blog.net/mysql-dbeaver/</link>
					<comments>https://mintaku-blog.net/mysql-dbeaver/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Sat, 21 Jul 2018 04:58:10 +0000</pubDate>
				<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=510</guid>

					<description><![CDATA[<p>Vagrant+VirtualBoxで仮想サーバを立ち上げ、CentOS7をインストール。そこにDockerをインストールしてMySQLを構築した。 ホスト …</p>
The post <a href="https://mintaku-blog.net/mysql-dbeaver/">仮想環境で構築したMySQLをDBeaver(クライアントツール)に接続する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>Vagrant+VirtualBoxで仮想サーバを立ち上げ、CentOS7をインストール。そこにDockerをインストールしてMySQLを構築した。<br />
ホストPCであるWindows7のMySQLクライアントツールにDockerで構築したMySQLをリモート接続するためのメモ。</p>
<p>MySQLはdocker-composeを使用してインストールした。</p>
<p>&nbsp;</p>
<h2>実行環境</h2>
<p>実行環境は以下の通り。</p>
<ul>
<li>Window7</li>
<li>VirtualBox5.0.16</li>
<li>Vagrant1.9.6</li>
<li>CentOS7</li>
<li>Docker18.03.1</li>
<li>MySQL5.6</li>
<li>DBeaver5.1.2</li>
</ul>
<p>&nbsp;</p>
<h2>事前準備</h2>
<p>VirtualBoxのインストール</p>
<ul>
<li>VirtualBox <a href="https://www.virtualbox.org/" target="_blank" rel="noopener">https://www.virtualbox.org/</a></li>
</ul>
<p>&nbsp;</p>
<p>Vagrantのインストール</p>
<ul>
<li>Vagrant <a href="https://www.vagrantup.com/" target="_blank" rel="noopener">https://www.vagrantup.com/</a></li>
</ul>
<p>&nbsp;</p>
<p>VagrantでCentOS7をインストール</p>
<ul>
<li>日本語手順 <a href="https://qiita.com/RyochanUedasan/items/b1ff13bc39913cb5b561" target="_blank" rel="noopener">https://qiita.com/RyochanUedasan/items/b1ff13bc39913cb5b561</a></li>
</ul>
<p>&nbsp;</p>
<p>CentOS7にDockerをインストール</p>
<ul>
<li>公式手順 <a href="https://docs.docker.com/install/linux/docker-ce/centos/#os-requirements" target="_blank" rel="noopener">https://docs.docker.com/install/linux/docker-ce/centos/#os-requirements</a></li>
<li>日本語手順 <a href="https://qiita.com/inakadegaebal/items/be9fecce813cebec5986" target="_blank" rel="noopener">https://qiita.com/inakadegaebal/items/be9fecce813cebec5986</a></li>
</ul>
<p>&nbsp;</p>
<p>DBeaverのインストール</p>
<ul>
<li>DBeaver <a href="https://dbeaver.io/" target="_blank" rel="noopener">https://dbeaver.io/</a></li>
</ul>
<p>&nbsp;</p>
<h2>Vagrantで立ち上げた仮想環境を起動し、SSHでログインする</h2>
<p>作成した作業ディレクトリにて仮想環境を起動し、SSHでログインします。</p><pre class="crayon-plain-tag">$ vagrant up</pre><p>立ち上がったら、仮想環境にログインします。ログアウトはexitです。</p><pre class="crayon-plain-tag">$ vagrant ssh</pre><p>&nbsp;</p>
<h2>docker-composeをインストール</h2>
<p>docker-composeをインストールします。バージョンは適宜置き換えてください。</p><pre class="crayon-plain-tag">$ curl -L https://github.com/docker/compose/releases/download/1.3.1/docker-compose-`uname -s`-`uname -m` &gt; /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose</pre><p>参考URL：<a href="https://qiita.com/zembutsu/items/dd2209a663cae37dfa81" target="_blank" rel="noopener">https://qiita.com/zembutsu/items/dd2209a663cae37dfa81</a></p>
<h2>docker-compose.ymlの編集</h2>
<p>docker-compose.ymlを作成し、下記のように編集します。バージョンやユーザ名などは適宜置き換えてください。</p><pre class="crayon-plain-tag">$ vi docker-compose.yml</pre><p>docker-composeは複数のコンテナを管理できるため、MySqlの下にNginxなどのコンテナを追加することができます。</p>
<p>docker-compose.yml</p><pre class="crayon-plain-tag">db:
image: mysql:5.6
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: sample_db
MYSQL_USER: sample
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password</pre><p></p>
<h2>docker-composeの起動</h2>
<p>docker-compose.ymlファイルを作成したら、docker-composeを起動します。</p><pre class="crayon-plain-tag">$ docker-compose up -d</pre><p>&nbsp;</p>
<h2>docker-composeのプロセス確認</h2>
<p>docker-composeが起動しているか確認します。</p><pre class="crayon-plain-tag">$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------
test_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306-&gt;3306/tcp</pre><p>&nbsp;</p>
<h2>仮想サーバで構築したMySQLをクライアントツール(DBeaver)に接続</h2>
<p>MySQLを起動できているのを確認したら、ホストPCにインストールしてあるDBeaverに接続しましょう。</p>
<p>接続設定は以下の通りです。</p>
<h3>DBeaverの接続設定</h3>
<p><img data-attachment-id="511" data-permalink="https://mintaku-blog.net/mysql-dbeaver/dbeaver1/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/DBeaver1.png?fit=971%2C726&amp;ssl=1" data-orig-size="971,726" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="DBeaver1" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/DBeaver1.png?fit=300%2C224&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/DBeaver1.png?fit=800%2C598&amp;ssl=1" loading="lazy" class="aligncenter size-full wp-image-511" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/DBeaver1.png?resize=800%2C598" alt="" width="800" height="598" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/DBeaver1.png?w=971&amp;ssl=1 971w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/DBeaver1.png?resize=300%2C224&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/DBeaver1.png?resize=768%2C574&amp;ssl=1 768w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p><img data-attachment-id="512" data-permalink="https://mintaku-blog.net/mysql-dbeaver/dbeaver2/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/DBeaver2.png?fit=971%2C726&amp;ssl=1" data-orig-size="971,726" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="DBeaver2" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/DBeaver2.png?fit=300%2C224&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/DBeaver2.png?fit=800%2C598&amp;ssl=1" loading="lazy" class="aligncenter size-full wp-image-512" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/DBeaver2.png?resize=800%2C598" alt="" width="800" height="598" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/DBeaver2.png?w=971&amp;ssl=1 971w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/DBeaver2.png?resize=300%2C224&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/DBeaver2.png?resize=768%2C574&amp;ssl=1 768w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<p>Server Host　MySQLが起動しているサーバのIPアドレス<br />
Port　MySQLに接続するポート<br />
Database　データベース名(書かなくても良い)<br />
User Name　MySqlに接続するユーザ名<br />
Password　MySqlに接続するユーザのパスワード</p>
<p>・SSH Tunnel<br />
Host/IP　SSH接続するサーバのIPアドレス<br />
Port　SSH接続するポート<br />
User Name　SSH接続するユーザ名<br />
Authentication Method　Public Key<br />
Private Key　秘密鍵が格納されているパス<br />
Passphrase　SSH接続するユーザのパスワード</p>
<p>&nbsp;</p>
<p>Authentication Methodは「Password」と「Public Key」を選択できるようになっています。僕の場合、「Password」 選択時は接続することができなかったため、「Public Key」を選択し秘密鍵が格納されているのパスを入力しました。</p>
<p>設定が完了したら、OKボタンを押して接続されていることを確認しましょう。</p>The post <a href="https://mintaku-blog.net/mysql-dbeaver/">仮想環境で構築したMySQLをDBeaver(クライアントツール)に接続する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/mysql-dbeaver/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">510</post-id>	</item>
		<item>
		<title>Windows7でlaradockを使ってlaravelの環境を構築する</title>
		<link>https://mintaku-blog.net/laradock-laravel/</link>
					<comments>https://mintaku-blog.net/laradock-laravel/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Wed, 11 Jul 2018 15:28:01 +0000</pubDate>
				<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=494</guid>

					<description><![CDATA[<p>Windows7でlaradockを使ってlaravelの環境構築をしたので、備忘録として書き残しておきます。あくまで参考程度にどうぞ。 &#38;nbsp …</p>
The post <a href="https://mintaku-blog.net/laradock-laravel/">Windows7でlaradockを使ってlaravelの環境を構築する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p><span style="font-weight: 400;">Windows7でlaradockを使ってlaravelの環境構築をしたので、備忘録として書き残しておきます。あくまで参考程度にどうぞ。</span></p>
<p>&nbsp;</p>
<h2><span style="font-weight: 400;">実施環境</span></h2>
<ul>
<li><span style="font-weight: 400;">Windows7</span></li>
<li><span style="font-weight: 400;">VirtualBox-5.0.16</span></li>
<li><span style="font-weight: 400;">DockerToolbox-18.03.0</span></li>
</ul>
<p>&nbsp;</p>
<h2><span style="font-weight: 400;">作業環境</span></h2>
<p><span style="font-weight: 400;">環境構築する前にdockerコマンドが使えることを確認します。</span></p><pre class="crayon-plain-tag">$ docker -v
Docker version 18.03.0-ce

$ docker-compose -version
docker-compose version 1.20.1

$ docker-machine --version
docker-machine version 0.14.0</pre><p>&nbsp;</p>
<h2><span style="font-weight: 400;">laradockをクローン</span></h2>
<p><span style="font-weight: 400;">laradockをクローンするためのディレクトリを作成します。作成したディレクトリに移動し、laradockをクローンします。</span></p>
<p><span style="font-weight: 400;">クローンに成功するとlaraveltest/laradockが作成されるので確認しましょう。</span></p><pre class="crayon-plain-tag">$ mkdir laraveltest
$ cd laraveltest/
$ git clone https://github.com/LaraDock/laradock.git</pre><p>&nbsp;</p>
<h2><span style="font-weight: 400;">.envファイルをコピー</span></h2>
<p><span style="font-weight: 400;">laradockのディレクトリに移動し、「env-example」ファイルをコピーし、「.env」ファイルを作成します。</span></p><pre class="crayon-plain-tag">$ cd laradock/
$ cp env-example .env</pre><p></p>
<h2><span style="font-weight: 400;">dockerコンテナの起動</span></h2>
<p><span style="font-weight: 400;">nginxとmysqlを起動しましょう。psコマンドで起動されていることを確認します。</span></p><pre class="crayon-plain-tag">$ docker-compose up -d nginx mysql
$ docker-compose ps</pre><p>&nbsp;</p>
<h2><span style="font-weight: 400;">IPアドレスを表示</span></h2>
<p><span style="font-weight: 400;">IPアドレスを表示し、アクセスすると404となっていることを確認します。</span></p><pre class="crayon-plain-tag">$ docker-machine ip</pre><p>&nbsp;</p>
<h2><span style="font-weight: 400;">Laravelプロジェクトを作成</span></h2>
<p><span style="font-weight: 400;">workspaceコンテナの中に入り、Laravelプロジェクトを作成します。今回は、testというプロジェクト名で作成しました。</span></p><pre class="crayon-plain-tag">$ docker exec -it {workspace-container-id} /bin/bash
$ composer create-project --prefer-dist laravel/laravel test</pre><p>&nbsp;</p>
<h2><span style="font-weight: 400;">.envファイルの編集(laraveltest\laradock配下)</span></h2>
<p><span style="font-weight: 400;">.envファイルを編集します。デフォルトでは、「../」となっているので、正しいパスに変更しましょう。</span></p><pre class="crayon-plain-tag">APP_CODE_PATH_HOST=../test</pre><p>&nbsp;</p>
<h2><span style="font-weight: 400;">.env の変更を反映し、コンテナを再起動</span></h2>
<p><span style="font-weight: 400;">.envファイルの編集が終わったら、変更を反映させるために一時停止します。その後、コンテナを再起動します。</span></p><pre class="crayon-plain-tag">$ docker-compose stop
$ docker-compose up -d nginx php-fpm mysql workspace</pre><p>&nbsp;</p>
<p><span style="font-weight: 400;">$ docker-machine ipで表示されたIPにブラウザでアクセスし、</span><span style="font-weight: 400;">このようにlaravelの画面が表示されたら成功です。</span></p>
<p><img data-attachment-id="487" data-permalink="https://mintaku-blog.net/docker-nginx/attachment-0/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/キャプチャ.png?fit=1282%2C776&amp;ssl=1" data-orig-size="1282,776" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="キャプチャ" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/キャプチャ.png?fit=300%2C182&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/キャプチャ.png?fit=800%2C484&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-487" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/キャプチャ-1024x620.png?resize=800%2C484" alt="" width="800" height="484" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/キャプチャ.png?resize=1024%2C620&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/キャプチャ.png?resize=300%2C182&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/キャプチャ.png?resize=768%2C465&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/07/キャプチャ.png?w=1282&amp;ssl=1 1282w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p><span style="font-weight: 400;">初めてなのでハマリまくったが、なんとかできた&#8230;。</span></p>The post <a href="https://mintaku-blog.net/laradock-laravel/">Windows7でlaradockを使ってlaravelの環境を構築する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/laradock-laravel/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">494</post-id>	</item>
	</channel>
</rss>
