# Development Environment PHP8.3 + MySQL8.4

PHPを利用した開発環境構築用の設定ファイル群です。Docker環境とVM環境の両方に対応しています。

## 特徴

- Docker/VM両環境に対応
- HTTPSに標準対応（開発環境は自己証明書、本番環境は正式な証明書を利用）
- MySQLの外部接続に対応
- 開発/本番環境の切り替えが容易

## 動作環境

### Docker環境
- Docker Engine
- Docker Compose

### VM環境
- Ubuntu 22.04 LTS

## システム構成

- Ubuntu 22.04 LTS
- Apache 2.4
- MySQL 8.0
- PHP 8.3
  - php8.3-curl
  - php8.3-bcmath
  - php8.3-mbstring
  - php8.3-mysql
  - php8.3-xml

## クイックスタート

### Docker環境での起動

```bash
# 環境変数ファイルの準備
cp .env.example .env

# 開発用SSL証明書の生成
chmod +x ssl/generate-cert.sh
./ssl/generate-cert.sh

# Docker環境の起動
cd docker
docker-compose up -d
```

### VM環境での起動

```bash
# セットアップスクリプトの実行
chmod +x vm/setup.sh
sudo ./vm/setup.sh

# プロンプトに従って以下の情報を入力
# - Gitリポジトリ URL
# - ブランチ名
# - データベース情報
```

## ディレクトリ構造

```
.
├── docker/                # Docker関連ファイル
│   ├── Dockerfile
│   ├── docker-compose.yml
│   ├── apache-config.conf
│   ├── apache-ssl.conf
│   └── start-services.sh
├── vm/                    # VM環境用セットアップスクリプト
│   └── setup.sh
├── ssl/                   # SSL証明書関連
│   ├── generate-cert.sh
│   ├── dev/      # 開発環境用証明書
│   │   ├── server.key   # git管理外
│   │   ├── server.crt   # git管理外
│   │   └── server.csr   # git管理外
│   └── prod/      # 本番環境用証明書（git管理外）
│       ├── server.key
│       ├── server.crt
│       └── chain.crt
├── src/                  # Laravelプロジェクト
├── .env.example
└── .gitignore
```

## 環境設定

### 開発環境

1. `.env.example`をコピーして`.env`を作成
2. 必要に応じて環境変数を調整
3. 開発用SSL証明書を生成
4. Docker環境またはVM環境でセットアップを実行

### 本番環境

1. 正式なSSL証明書ファイルを`ssl/prod/`に配置
  - `server.crt`（サーバー証明書）
  - `server.key`（秘密鍵）
  - `chain.crt`（中間証明書）

2. Docker環境の場合：
  - `docker-compose.yml`の証明書マウント設定を本番用に変更

3. VM環境の場合：
  - 証明書ファイルを所定の場所にコピー
  - Apache SSL設定で中間証明書の設定を有効化

## アクセス方法

- HTTP: `http://localhost`（または設定したポート）
- HTTPS: `https://localhost`（または設定したポート）
- MySQL: localhost:3306（または設定したポート）

## セキュリティ注意事項

1. 本番環境では必ず以下の対応を行ってください：
  - デフォルトパスワードの変更
  - 正式なSSL証明書の使用
  - 不要なポートのクローズ
  - MySQLの接続制限の設定

2. 開発環境の自己証明書について：
  - 開発環境のみで使用し、本番環境では使用しないでください
  - ブラウザでアクセスする際は、自己証明書の警告が表示されます

## トラブルシューティング

### よくある問題と解決方法

1. 権限エラー
```bash
# Dockerの場合
docker-compose exec web chown -R www-data:www-data /var/www/html

# VMの場合
sudo chown -R www-data:www-data /var/www/html
```

2. ポートの競合
```bash
# .envファイルで使用ポートを変更
APP_PORT=8080
APP_SSL_PORT=8443
MYSQL_PORT=33306
```

3. SSL証明書のエラー
```bash
# 証明書の再生成（開発環境）
./ssl/generate-cert.sh
```

## サポート

問題が発生した場合は、以下のログを確認してください：

- Apacheログ: `/var/log/apache2/`
- MySQLログ: `/var/log/mysql/`
- PHPログ: `/var/log/php/`
