Add Docker Compose support und MySQL Datenbank Yipppeeeee
This commit is contained in:
@@ -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' \
|
||||
|
||||
@@ -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:
|
||||
@@ -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;
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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';
|
||||
Reference in New Issue
Block a user