Add Docker Compose support und MySQL Datenbank Yipppeeeee

This commit is contained in:
2026-04-23 15:37:50 +02:00
parent cfa72be700
commit 3d3d15e8e5
7 changed files with 120 additions and 1 deletions
+1
View File
@@ -13,6 +13,7 @@ RUN ./node_modules/.bin/tailwindcss -i ./assets/css/app.css -o ./public/build/ap
FROM php:8.3-apache
RUN a2enmod rewrite
RUN docker-php-ext-install pdo_mysql
COPY . /var/www/html
COPY --from=builder /app/public/build /var/www/html/public/build
RUN sed -i 's|/var/www/html|/var/www/html/public|g' \
+40
View File
@@ -0,0 +1,40 @@
services:
app:
build:
context: .
dockerfile: Dockerfile
container_name: pawra-app
ports:
- "8080:80"
environment:
DB_HOST: db
DB_PORT: 3306
DB_NAME: pawra
DB_USER: pawra
DB_PASS: pawra_pw
depends_on:
db:
condition: service_healthy
db:
image: mysql:8.4
container_name: pawra-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: root_pw
MYSQL_DATABASE: pawra
MYSQL_USER: pawra
MYSQL_PASSWORD: pawra_pw
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
- ./migrations/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql:ro
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost -uroot -proot_pw || exit 1"]
interval: 5s
timeout: 3s
retries: 20
volumes:
db_data:
+23
View File
@@ -0,0 +1,23 @@
CREATE DATABASE IF NOT EXISTS auth_system
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE auth_system;
CREATE TABLE IF NOT EXISTS users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(30) NOT NULL UNIQUE,
email VARCHAR(255) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_login DATETIME NULL,
is_active TINYINT(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS remember_tokens (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id INT UNSIGNED NOT NULL,
token_hash VARCHAR(255) NOT NULL,
expires_at DATETIME NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+12
View File
@@ -8,8 +8,20 @@ $autoloader->register();
use src\Container;
use src\Router;
use src\Middleware\TestMiddleware;
use src\Database;
$container = new Container();
$container->bind(Database::class, function() {
return new Database(
$_ENV['DB_HOST'] ?? '127.0.0.1',
$_ENV['DB_PORT'] ?? '3306',
$_ENV['DB_NAME'] ?? 'pawra',
$_ENV['DB_USER'] ?? 'root',
$_ENV['DB_PASS'] ?? ''
);
});
$router = new Router($container);
$router->addGlobalMiddleware(TestMiddleware::class);
+12 -1
View File
@@ -1,12 +1,23 @@
<?php
namespace src\Controller;
use src\Database;
class HomeController extends BaseController
{
public function __construct(private Database $db)
{
parent::__construct();
}
public function index(): void
{
$stmt = $this->db->pdo()->query('SELECT NOW() as now');
$row = $stmt->fetch();
$this->render('home', [
'title' => 'meow :3'
'title' => 'meow :3',
'now' => $row['now'] ?? null,
]);
}
}
+30
View File
@@ -0,0 +1,30 @@
<?php
namespace src;
use PDO;
use PDOException;
class Database
{
private PDO $pdo;
public function __construct(
string $host,
string $port,
string $name,
string $user,
string $password
) {
$dsn = "mysql:host={$host};port={$port};dbname={$name};charset=utf8mb4";
$this->pdo = new PDO($dsn, $user, $password, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
}
public function pdo(): PDO
{
return $this->pdo;
}
}
+2
View File
@@ -9,6 +9,8 @@ ob_start();
<button onclick="test('World')">Test</button>
<p><?= htmlspecialchars($now) ?></p>
<?php
$content = ob_get_clean();
require __DIR__ . '/layout.php';