build:添加docker文件

This commit is contained in:
2025-05-23 21:20:54 +08:00
parent b02a18d762
commit 9de698d90e
5 changed files with 365 additions and 0 deletions
+58
View File
@@ -0,0 +1,58 @@
# 定義一個 HTTP 服務器塊
server {
# 監聽 80 端口(HTTP
listen 80;
# 默認索引文件,按順序嘗試
index index.php index.html;
# 錯誤日誌和訪問日誌的路徑
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
# 網站根目錄,指向 Laravel 的 public 目錄
root /var/www/public;
# 客戶端上傳文件大小限制
client_max_body_size 100M;
# 處理所有請求
location / {
# 嘗試以 URI 作為文件查找,然後作為目錄,最後轉發到 index.php
try_files $uri $uri/ /index.php?$query_string;
# 啟用靜態 gzip 文件服務(如果存在 .gz 文件)
gzip_static on;
}
# 處理 PHP 文件請求
location ~ \.php$ {
# 如果文件不存在,返回 404
try_files $uri =404;
# 分割路徑信息,用於處理 PATH_INFO
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# 轉發 PHP 請求到 PHP-FPM 服務
fastcgi_pass app:9000;
# 設置 FastCGI 緩衝區大小
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
# 默認索引文件
fastcgi_index index.php;
# 設置 FastCGI 讀取超時時間(秒)
fastcgi_read_timeout 600;
# 包含 FastCGI 參數
include fastcgi_params;
# 設置 SCRIPT_FILENAME 參數,告訴 PHP-FPM 要執行的文件
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 設置 PATH_INFO 參數,用於獲取路徑信息
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
+114
View File
@@ -0,0 +1,114 @@
#!/bin/bash
set -e
echo "=== CFDivePlatform 容器初始化開始 ==="
# 檢查目錄結構
if [ ! -d "/var/www/storage" ]; then
echo "創建 storage 目錄..."
mkdir -p /var/www/storage
fi
if [ ! -d "/var/www/bootstrap/cache" ]; then
echo "創建 bootstrap/cache 目錄..."
mkdir -p /var/www/bootstrap/cache
fi
# 設置權限
echo "設置目錄權限..."
chown -R www-data:www-data /var/www
chmod -R 775 /var/www/storage /var/www/bootstrap/cache
# 等待 MySQL 服務啟動
echo "等待 MySQL 服務啟動..."
# 使用更穩定的方法檢查 MySQL 連接
MAX_TRIES=60
COUNT=0
wait_for_mysql() {
while [ $COUNT -lt $MAX_TRIES ]; do
if mysqladmin ping -h"db" -u"cfdiveuser" -p"cfdivepass" --silent 2>/dev/null; then
echo "✅ MySQL 服務已準備就緒"
return 0
fi
# 備用檢查方法
if php -r "
try {
\$pdo = new PDO('mysql:host=db;port=3306', 'cfdiveuser', 'cfdivepass');
echo 'PHP-PDO-OK';
exit(0);
} catch(Exception \$e) {
exit(1);
}
" 2>/dev/null; then
echo "✅ MySQL 連接成功 (通過 PHP PDO)"
break
fi
echo "⏳ 等待 MySQL... ($((COUNT+1))/$MAX_TRIES)"
sleep 2
COUNT=$((COUNT+1))
done
if [ $COUNT -eq $MAX_TRIES ]; then
echo "⚠️ 無法連接到 MySQL,但將繼續啟動服務"
fi
}
wait_for_mysql
# 檢查並安裝 Composer 依賴
echo "📦 檢查 Composer 依賴..."
if [ -f "composer.json" ]; then
if [ ! -d "vendor" ] || [ "composer.json" -nt "vendor/autoload.php" ]; then
echo "安裝 Composer 依賴..."
composer install --no-scripts --no-autoloader --optimize-autoloader
composer dump-autoload --optimize
else
echo "✅ Composer 依賴已是最新"
fi
fi
# 設置 Laravel 環境
if [ ! -f .env ]; then
echo "🔧 創建 .env 檔案..."
cp .env.example .env
php artisan key:generate
else
echo "✅ .env 檔案已存在"
fi
# 更新環境變數以確保正確配置
echo "🔧 更新資料庫配置..."
sed -i "s/DB_HOST=.*/DB_HOST=db/g" .env
sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=cfdivepass/g" .env
sed -i "s/DB_USERNAME=.*/DB_USERNAME=cfdiveuser/g" .env
sed -i "s/DB_DATABASE=.*/DB_DATABASE=CFDivePlatform/g" .env
# 執行遷移(如果數據庫已準備好)
echo "🗄️ 執行數據庫遷移..."
if php artisan migrate:status 2>/dev/null; then
php artisan migrate --force || echo "⚠️ 遷移執行遇到問題,但繼續執行"
else
echo "⚠️ 無法檢查遷移狀態,跳過遷移"
fi
# 清除與優化 Laravel 緩存
echo "🧹 清除 Laravel 緩存..."
php artisan config:clear || true
php artisan cache:clear || true
php artisan route:clear || true
php artisan view:clear || true
# 生成 Swagger 文檔(如果可能)
if php -r "echo class_exists('L5Swagger\\L5SwaggerServiceProvider') ? 'yes' : 'no';" 2>/dev/null | grep -q 'yes'; then
echo "📖 生成 API 文檔..."
php artisan l5-swagger:generate || echo "⚠️ API 文檔生成失敗"
fi
echo "✅ CFDivePlatform 初始化完成!"
# 執行傳入的命令
exec "$@"
+5
View File
@@ -0,0 +1,5 @@
upload_max_filesize=40M
post_max_size=40M
memory_limit=512M
max_execution_time=600
max_input_vars=10000