Добавлен Dockerfile на базе Alpine Linux
- Dockerfile с PHP 8.3 и необходимыми расширениями - Конфигурация БД через переменные окружения: DB_HOST, DB_PORT, DB_CHARSET - .dockerignore для оптимизации сборки Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
8
.dockerignore
Normal file
8
.dockerignore
Normal file
@@ -0,0 +1,8 @@
|
||||
.git
|
||||
.gitignore
|
||||
.claude
|
||||
.cursor
|
||||
*.md
|
||||
*.bak
|
||||
vendor
|
||||
.DS_Store
|
||||
44
Dockerfile
Normal file
44
Dockerfile
Normal file
@@ -0,0 +1,44 @@
|
||||
FROM alpine:3.19
|
||||
|
||||
# Установка PHP и необходимых расширений
|
||||
RUN apk add --no-cache \
|
||||
php83 \
|
||||
php83-pdo \
|
||||
php83-pdo_mysql \
|
||||
php83-session \
|
||||
php83-json \
|
||||
php83-mbstring \
|
||||
php83-openssl \
|
||||
php83-phar \
|
||||
php83-zlib \
|
||||
php83-dom \
|
||||
php83-xml \
|
||||
php83-tokenizer \
|
||||
curl
|
||||
|
||||
# Создаём симлинк php -> php83
|
||||
RUN ln -sf /usr/bin/php83 /usr/bin/php
|
||||
|
||||
# Установка Composer
|
||||
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Копируем composer файлы и устанавливаем зависимости
|
||||
COPY composer.json ./
|
||||
RUN composer install --no-dev --optimize-autoloader --no-scripts
|
||||
|
||||
# Копируем исходный код
|
||||
COPY src/ ./src/
|
||||
COPY public/ ./public/
|
||||
|
||||
# Переменные окружения по умолчанию
|
||||
ENV DB_HOST=localhost
|
||||
ENV DB_PORT=3306
|
||||
ENV DB_CHARSET=utf8mb4
|
||||
ENV PHP_ERROR_DISPLAY=false
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
# Запуск встроенного PHP сервера
|
||||
CMD ["php", "-S", "0.0.0.0:8080", "-t", "public"]
|
||||
19
src/Db.php
19
src/Db.php
@@ -6,6 +6,15 @@ use PDOException;
|
||||
|
||||
class Db
|
||||
{
|
||||
private static function getDsn(): string
|
||||
{
|
||||
$host = getenv('DB_HOST') ?: 'localhost';
|
||||
$port = getenv('DB_PORT') ?: '3306';
|
||||
$charset = getenv('DB_CHARSET') ?: 'utf8mb4';
|
||||
|
||||
return "mysql:host={$host};port={$port};charset={$charset}";
|
||||
}
|
||||
|
||||
// Простая фабрика PDO по логину/паролю MariaDB из сессии
|
||||
public static function connectFromSession(): PDO
|
||||
{
|
||||
@@ -16,12 +25,9 @@ class Db
|
||||
$user = $_SESSION['db_user'];
|
||||
$pass = $_SESSION['db_pass'];
|
||||
|
||||
// TODO: вынести host/port/charset в конфиг .env
|
||||
$dsn = 'mysql:host=localhost;port=3306;charset=utf8mb4';
|
||||
|
||||
$pdo = new PDO($dsn, $user, $pass, [
|
||||
$pdo = new PDO(self::getDsn(), $user, $pass, [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_EMULATE_PREPARES => false, // важная настройка [web:28][web:25]
|
||||
PDO::ATTR_EMULATE_PREPARES => false,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
]);
|
||||
|
||||
@@ -30,9 +36,8 @@ class Db
|
||||
|
||||
public static function testConnection(string $user, string $pass): void
|
||||
{
|
||||
$dsn = 'mysql:host=localhost;port=3306;charset=utf8mb4'; // MariaDB совместим [web:22][web:28]
|
||||
try {
|
||||
new PDO($dsn, $user, $pass, [
|
||||
new PDO(self::getDsn(), $user, $pass, [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_EMULATE_PREPARES => false,
|
||||
]);
|
||||
|
||||
Reference in New Issue
Block a user