Autorska aplikacja PHP+MySQL uruchomiona na Dockerze

W pewnej firmie zaszła konieczność utworzenia aplikacji ułatwiającej i jednocześnie przyspieszającej proces wyliczania dodatku za pracę w warunkach szkodliwych dla pracowników. Pierwotnie dane były wyciągane z systemu średnio co kwartał, następnie trzeba było je obrobić, wrzucić później do szablonu w Excelu, odpowiednio skonfigurować i przygotować do wydruku. 13 pracowników na zmianie x ilość miesięcy x ilość dni pracujących. Trochę tego było i trochę to trwało. Oczywiście w jakim stopniu byś nie ogarniał Excela, tam zawsze się musi coś rozjechać 😀 Pomysł padł na wykorzystanie duetu PHP + MySQL. Aby można było to szybko przenieść na inny serwer wykorzystałem kontenery Dockerowe.

 

# Hardware
Z powodu braku możliwości uruchomienia VM albo Dockera na obecnych serwerach postanowiłem wykorzystać Raspberry Pi 3 model A+. Został wpięty do lokalnej sieci Wi-Fi. Serwer nie jest wystawiony na zewnątrz – jedynie dostęp lokalny.

 

# PHP
Programowanie w PHP-ie to nie do końca moja działka. Coś tam się kiedyś wyrzeźbiło, ale to nie było nic dużego. Mimo wszystko podstawy jakieś miałem – ogólnie na studiach było dużo programowania (algorytmy, różne języki), więc programowanie mimo wszystko jako Inżynier z grubsza ogarniam. Jako, iż to miał być tylko program hobbistyczny / dodatkowy / zapełnienie wolnego czasu (niepotrzebne skreślić 😛 ) stwierdziłem, że nie będę się męczył z rzeźbieniem wszystkiego od podstaw tylko do pomocy zaprzęgnę ChatGPT. Wiedziałem, że potrzebuję sesje użytkowników (panel logowania, bez konieczności rejestracji / resetowania hasłem – czyli ogólnej obsługi użytkowników), chciałem też, aby zmieniała się tylko część strony, a nie przeładowywało całość (w związku z tym wykorzystaniem include).

Usiadłem więc do pracy i konwersacji z AI. Prompty wklepywane, kod z odpowiedzi doklejany do apki. Wbrew pozorom diagnostyki i 'troubleshootingu’ była cała masa. Podstawy programowania + analityczne myślenie + ewentualne poprawki w promptcie i udało się wyrzeźbić działającą aplikację. Nic skomplikowanego, nic rozbudowanego – zapewne początkujący programista PHP by to napisał milion razy lepiej. Ale jednak udało się to ogarnąć przez admina systemowego. I co najważniejsze – działa 🙂

Panel logowania umożliwiający podanie loginu i hasła (poświadczeń zdefiniowanych w odpowiedniej tabeli bazy danych), następnie po zalogowaniu okno główne apki (z instrukcją dla użytkowników) i kilka zakładek – wyświetlenie stanowisk, stawek dla poszczególnych stopni, pracowników z podziałem na zmiany (z możliwością edycji każdego z nich – dane personalne, stanowisko, itp). Importowanie danych pobranych z zewnętrznego systemu (teraz ograniczało się jedynie do skrócenia danych w jednej kolumnie i dopasowanie stopnia szkodliwości dla nich) oraz wyświetlenie ich (z podziałem na pracowników, zmiany). Ostatnia zakładka to generowanie zestawienia – tutaj operator musi jedynie wybrać pracownika oraz zakres dat. I to tyle. W efekcie otrzymuje odpowiednio uzupełniony plik PDF (do tego wykorzystałem bibliotekę TCPDF).

Zaimportowane pliki z danymi mają modyfikowaną nazwę (dorzucany timestamp) oraz są wrzucane do odpowiedniego katalogu na serwerze.

 

# Docker
Całość działa na 4 kontenerach:
nginx (jako serwer www)
MariaDB (jako baza danych)
PHP
phpMyAdmin (w celu ułatwienia zarządzania danymi w bazie).

 

Do uruchomienia wykorzystałem Docker compose. Kontener PHP był budowany na podstawie takiego dockerfile:

     FROM php:8.2-fpm

     RUN apt-get update && \
              apt-get install -y zip libzip-dev libpng-dev

     RUN docker-php-ext-install mysqli pdo pdo_mysql gd zip


Plik docker-compose.yml dla całego środowiska prezentuje się następująco:
     version: '3.3′

     services:

     php:
          build:
              dockerfile: php-dockerfile
         volumes:
              – ’./html:/var/www/html’
         depends_on:
              – mariadb

     nginx:
          image: nginx:latest
          ports:
              – 80:80
          links:
             – 'php’
         volumes:
             – ’./html:/var/www/html’
             – ’./nginx-conf:/etc/nginx/conf.d’
         depends_on:
              – php

     mariadb:
         image: mariadb:10.9
         environment:
             MYSQL_ROOT_PASSWORD: root_password
             MYSQL_DATABASE: db_name
              MYSQL_USER: db_user
              MYSQL_PASSWORD: db_pass
          volumes:
             – mysqldata:/var/lib/mysql

     phpmyadmin:
          image: phpmyadmin/phpmyadmin:latest
          ports:
             – 8080:80
         environment:
             PMA_HOST: mariadb
        depends_on:
             – mariadb

     volumes:

          mysqldata:

Cała apka znajduje się w katalogu html, który podmontowywany jest do /var/www/html na nginx. Dodatkowo w katalogu nginx-conf znajduje się plik nginx.conf, który zawiera wymaganą konfigurację:

server {
     listen 80 default_server;
     listen [::]:80 default_server;

     server_name localhost;

     root /var/www/html;
     index index.php index.html;

     location / {
         try_files $uri $uri/ /index.php?$args;
     }

     location ~* \.php$ {
          fastcgi_pass php:9000;
         include fastcgi_params;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          fastcgi_param SCRIPT_NAME $fastcgi_script_name;
     }

}

 

# Podsumowanie
Udało się utworzyć działającą aplikację, która przede wszystkim realizuje założone cele. Działa to na Dockerze, co w prosty sposób umożliwi ewentualne przeniesienie w przyszłości na inny serwer. Każdy z użytkowników posiada własne konto.

Co do pomysłów na modyfikację:
– dodanie obsługi wyjątków
– życzenie od operatorów, aby zaprzęgnąć AI do modyfikacji danych w wspomnianej wcześniej kolumnie 😀

W celu świadczenia usług na najwyższym poziomie stosujemy pliki cookies, które będą zamieszczane w Państwa urządzeniu (komputerze, laptopie, smartfonie). W każdym momencie mogą Państwo dokonać zmiany ustawień Państwa przeglądarki internetowej i wyłączyć opcję zapisu plików cookies. View more
Zaakceptuj