Добавлен 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
|
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 из сессии
|
// Простая фабрика PDO по логину/паролю MariaDB из сессии
|
||||||
public static function connectFromSession(): PDO
|
public static function connectFromSession(): PDO
|
||||||
{
|
{
|
||||||
@@ -16,12 +25,9 @@ class Db
|
|||||||
$user = $_SESSION['db_user'];
|
$user = $_SESSION['db_user'];
|
||||||
$pass = $_SESSION['db_pass'];
|
$pass = $_SESSION['db_pass'];
|
||||||
|
|
||||||
// TODO: вынести host/port/charset в конфиг .env
|
$pdo = new PDO(self::getDsn(), $user, $pass, [
|
||||||
$dsn = 'mysql:host=localhost;port=3306;charset=utf8mb4';
|
|
||||||
|
|
||||||
$pdo = new PDO($dsn, $user, $pass, [
|
|
||||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
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,
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@@ -30,9 +36,8 @@ class Db
|
|||||||
|
|
||||||
public static function testConnection(string $user, string $pass): void
|
public static function testConnection(string $user, string $pass): void
|
||||||
{
|
{
|
||||||
$dsn = 'mysql:host=localhost;port=3306;charset=utf8mb4'; // MariaDB совместим [web:22][web:28]
|
|
||||||
try {
|
try {
|
||||||
new PDO($dsn, $user, $pass, [
|
new PDO(self::getDsn(), $user, $pass, [
|
||||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||||
PDO::ATTR_EMULATE_PREPARES => false,
|
PDO::ATTR_EMULATE_PREPARES => false,
|
||||||
]);
|
]);
|
||||||
|
|||||||
Reference in New Issue
Block a user