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
|
FROM php:8.3-apache
|
||||||
RUN a2enmod rewrite
|
RUN a2enmod rewrite
|
||||||
|
RUN docker-php-ext-install pdo_mysql
|
||||||
COPY . /var/www/html
|
COPY . /var/www/html
|
||||||
COPY --from=builder /app/public/build /var/www/html/public/build
|
COPY --from=builder /app/public/build /var/www/html/public/build
|
||||||
RUN sed -i 's|/var/www/html|/var/www/html/public|g' \
|
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\Container;
|
||||||
use src\Router;
|
use src\Router;
|
||||||
use src\Middleware\TestMiddleware;
|
use src\Middleware\TestMiddleware;
|
||||||
|
use src\Database;
|
||||||
|
|
||||||
$container = new Container();
|
$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 = new Router($container);
|
||||||
|
|
||||||
$router->addGlobalMiddleware(TestMiddleware::class);
|
$router->addGlobalMiddleware(TestMiddleware::class);
|
||||||
|
|||||||
@@ -1,12 +1,23 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace src\Controller;
|
namespace src\Controller;
|
||||||
|
|
||||||
|
use src\Database;
|
||||||
|
|
||||||
class HomeController extends BaseController
|
class HomeController extends BaseController
|
||||||
{
|
{
|
||||||
|
public function __construct(private Database $db)
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
public function index(): void
|
public function index(): void
|
||||||
{
|
{
|
||||||
|
$stmt = $this->db->pdo()->query('SELECT NOW() as now');
|
||||||
|
$row = $stmt->fetch();
|
||||||
|
|
||||||
$this->render('home', [
|
$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>
|
<button onclick="test('World')">Test</button>
|
||||||
|
|
||||||
|
<p><?= htmlspecialchars($now) ?></p>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
$content = ob_get_clean();
|
$content = ob_get_clean();
|
||||||
require __DIR__ . '/layout.php';
|
require __DIR__ . '/layout.php';
|
||||||
Reference in New Issue
Block a user