Help us understand the problem. What is going on with this article?

GCPでWEBサーバー構築を試した(GCE-GCS-SQL)

More than 1 year has passed since last update.

まずは手を動かして苦手意識をなくそう。ということで
GCE-GCS-SQLの構成でPHPの公開環境を作ってみた。

はじめに

利用に応じて少なからず課金されます。
お試し後は、作成したリソースの削除をしましょう。
(ほとんどの人は、無料枠に収まるけれども。)

決めごと

リージョンとゾーンを決めておこう。これはサーバーを立てる場所のこと。
お試しなら、下記で大丈夫。

[リージョン]us-central1
[ゾーン]us-central1-a

GCEの作成(コンピューティング・WEBサーバ)

■インスタンス作成
Compute Engineサービスで「VM インスタンス」を作成する。
ここでは、下記を設定。

[名前] bloghost
[ブートディスク]
Debian GNU/Linux 9(stretch)
[ファイアウォール]
HTTP トラフィックを許可する ON

※記載していない項目については、デフォルトのままで大丈夫。

■起動時のスクリプトを設定
「管理」タブの[起動スクリプト] に下記を設定。
これで各サービスが立ち上がるぞ。

apt-get update
apt-get install apache2 php php-mysql -y
service apache2 restart

■動作確認
VMインスタンスのIPアドレスを確認。
内部IPアドレスはGCP内の各インスタンス同士でアクセスし合う時に使う。
外部IPアドレスはオンライン公開。

WEBブラウザのURL欄に、外部IPアドレスを入れてみるとアクセスできるはずだ。

GCSの作成(ストレージ)

■バケット作成
画面右上から
「Google Cloud Shell」を起動。これは、コマンドプロント的なモノだ。

リージョンに応じて変数を作成。

export LOCATION=US

mbコマンドでMakeBucketsしてみる。
Cloud Shellでは、デフォルトでDEVSHELL_PROJECT_ID環境変数にプロジェクトIDが含まれているのでこれを利用できる。
gsutil mb -l $LOCATION gs://$DEVSHELL_PROJECT_ID

■ファイル配置
一般公開されている画像をCloud Storageへコピーしてみる。

gsutil cp gs://cloud-training/gcpfci/my-excellent-blog.png \
my-excellent-blog.png
gsutil cp my-excellent-blog.png \
gs://$DEVSHELL_PROJECT_ID/my-excellent-blog.png

Cloud Storageサービスを開くと、先ほど作成したバケットとファイルが確認できる。

my-excellent-blog.png というオブジェクトがあるので、[一般公開で共有する]をONにするとURLが出力される。
画像であれば、こんな感じでHTMLファイルから読み込むことができるようになるはずだ。
<img src='https://storage.googleapis.com/gcp-012345689/my-excellent-blog.png'>

Cloud SQL(DBサーバ)

■インスタンス作成
[データベース エンジンの選択] MySQL
[インスタンス ID]任意
[root パスワード]任意
で作成。

[SQLインスタンス] ページで、からIP アドレスをコピーしてメモしておこう。

■ユーザ作成
詳細ページの[ユーザー]タブから「ユーザーアカウントを作成」。
[ユーザー名] 任意
[パスワード] 任意

■通信許可
詳細ページの[承認] タブから「ネットワークを追加」。

[名前]web front end
[ネットワーク] GCEインスタンスの外部IP アドレス/32(例 35.192.xxx.xxx/32)

結合

GCEインスタンスからGCSとSQLを呼んでみる。

VMインスタンスの[SSH] をクリックすると、コマンドプロンプトが開く。
nanoエディタで、index.phpファイルを編集。

cd /var/www/html
sudo nano index.php
<html>
<head><title>Welcome to My Blog</title></head>
<body>
<h1>Welcome to My Blog</h1>
<?php
  $dbserver = "※CloudSQLのIPアドレス";
  $dbuser = "※CloudSQLのユーザ名";
  $dbpassword = "※CloudSQLので作成したユーザパスワード";

  $conn = new mysqli($dbserver, $dbuser, $dbpassword);
  if (mysqli_connect_error()) {
          echo ("Connection failed: " . mysqli_connect_error());
  } else {
          echo ("Connection succee.");
  }
?>
<img src='※GCSで発行したURL'>
</body>
</html>

■動作確認
ウェブサーバーを再起動。
sudo service apache2 restart

ブラウザから外部IP アドレスにアクセスすると、
反映されていることが確認できる。

R_TK_8170
ソフトウェアエンジニア。高級言語が好き。 最近は、スクラム開発の手法とAWSソリューションアーキテクトについて勉強中。
https://twitter.com/R_TK_8170
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした