GCP × Ubuntu で Web アプリを公開するまでの完全手順

こんにちは。anuimaでインターンをさせてもらっているryuseiです。

今回は前から試してみたかったVPS導入の前段階としてGCPを触ってみたので、実装方法を含めて紹介したいと思います。

この記事では、僕が実際に踏んだステップを 細かい手順つき でまとめています。
「クラウドって難しそう…」と思っている方も、この記事を読めば同じように環境を作れるはずです。

STEP
GCP プロジェクトと前準備

プロジェクト作成

  1. Google Cloud Console にログイン
  2. 「プロジェクトを作成」ボタンをクリック
  3. プロジェクト名を決める(例:my-first-project
  4. 自動で プロジェクトID が付与される(後で使うので控える)

課金アカウント設定

  • クレジットカードを登録して 課金アカウントを有効化
  • GCPは最初に「無料トライアル(クレジット付き)」があるので安心
  • ただし、インスタンスを動かしっぱなしにすると課金されるので注意

API 有効化

  • 「APIとサービス > ライブラリ」で以下を有効化:
    • Compute Engine API(必須)
    • 必要なら Cloud SQL / Cloud Run / Cloud Build も

gcloud CLI の準備

  • ローカル開発PCに gcloud CLI をインストールするか
  • Cloud Shell(ブラウザから使えるターミナル)を使うと便利

僕はまず Cloud Shell を使いました。ブラウザ上で Linux 環境が使えるのはかなり手軽です。

STEP
Compute Engine(仮想マシン)の作成

VM インスタンスを立てる

  1. Console 左メニュー → 「Compute Engine > VM インスタンス」
  2. 「インスタンスを作成」ボタン
  3. 以下のように設定
項目設定例
名前my-vm-instance
リージョン / ゾーンasia-northeast1-a(東京)
マシンタイプe2-micro(Always Free 対象)
ブートディスクUbuntu 22.04 LTS
ファイアウォールHTTP/HTTPS を許可

静的IP を割り当てておくと、IPアドレスが固定されて便利。

作成ボタンを押すと数十秒で起動。ステータスが RUNNING になればOKです。

STEP
SSH 接続と初期環境構築

SSH ログイン

  • Console の「SSH」ボタンからブラウザログイン
  • もしくはターミナルから:
gcloud compute ssh my-vm-instance --zone asia-northeast1-a

初期設定(Ubuntu)

sudo apt update
sudo apt upgrade -y

Nginx インストール

sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx

動作確認:

curl localhost

Welcome to nginx! が出れば成功。

僕はこの瞬間、「自分のサーバが立った!」と一番ワクワクしました。

STEP
Web アプリの配置と起動

Python Flask アプリを例に

必要パッケージ

sudo apt install -y python3 python3-venv python3-pip git

アプリを取得

git clone https://github.com/あなたのリポジトリ.git
cd あなたのリポジトリ

仮想環境と依存関係

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Gunicorn で起動

gunicorn --bind 0.0.0.0:8000 app:app

http://VMの外部IP:8000 で確認できる

Nginx をリバースプロキシ化

/etc/nginx/sites-available/your-app.conf を作成:

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

反映:

sudo ln -s /etc/nginx/sites-available/your-app.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

これで外部IPにアクセスすると Flask アプリが表示されます。

STEP
ドメイン設定と HTTPS 化

ドメイン設定

  • お名前.com や Google Domains で取得
  • DNS で Aレコード → VMの静的IP に設定

SSL(Let’s Encrypt)

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

テスト更新:

sudo certbot renew --dry-run

これで https://yourdomain.com でアクセス可能になります。
SSL化したときは一気に「サービスっぽさ」が増してテンション上がりました。

STEP
. 運用・コスト管理のポイント

僕が意識している点は以下です:

  • 使わないときは VM を停止(秒単位課金)
  • Always Free 枠(e2-micro, 30GB HDD, 1GB/月転送無料)を徹底活用
  • セキュリティ:
    • 公開鍵認証の利用
    • 不要ポートを閉じる
    • 定期アップデート(apt upgrade

さらに本格運用するなら:

  • Cloud Monitoring で死活監視
  • スナップショットでバックアップ
  • スケールするなら Cloud Run や GKE も検討

まとめと僕の気づき

今回の流れ:

  1. プロジェクト作成 & 課金設定
  2. VM(Ubuntu)作成
  3. SSH で環境構築 → nginx 起動
  4. Flask アプリを配置 & Gunicorn+Nginx
  5. ドメイン + HTTPS 化
  6. コストとセキュリティを意識した運用

正直「クラウドを使うのは難しい」と思っていたんですが、やってみると1つ1つの手順はシンプルでした。
自分で公開したサービスをブラウザで見たときの達成感は大きく、「次はもっと自動化しよう」「スケールする仕組みを組み込みたい」と欲が出てきます。


学生でもクラウドを使って世界にサービスを公開できるので、この記事が誰かの一歩を後押しできれば嬉しいです。