Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
*.bak
*~
_tables.php
_globals.php
_cfg.php
cfg/_tables.php
cfg/_globals.php
cfg/_cfg.php
db_data/
/logs
node_modules/
playwright-report/
test-results/
.agents/*
skills-lock.json
194 changes: 131 additions & 63 deletions Docs/Development.md
Original file line number Diff line number Diff line change
@@ -1,66 +1,134 @@
# Jak si postavit vlastní prostředí:

* naklonuj [repo](https://github.com/arnost00/members) do pracovního adresáře ( můžeš potřebovat [git windows klient](https://git-scm.com/downloads/win) )
* nainstaluj docker composer - např. [Docker Desktop](https://www.docker.com/products/docker-desktop/)
* do pracovního adresáře rozpakuj soubory pro docker [members_development_files.zip](Docs/members_development_files.zip)

* konfigurace
* zkopíruj soubor members/cfg/_cfg.php.default do members/cfg/_cfg.php a uprav nebo použij připravený [_cfg.php](Docs/X_cfg.php)

* zkopíruj soubor members/cfg/_globals.php.default do members/cfg/_globals.php a uprav nebo použij připravený [_globals.php]hDocs/X_globals.php)

* zkopíruj soubor members/cfg/_tables.php.default do members/cfg/_tables.php a uprav nebo použij připravený [_tables.php](Docs/X_tables.php)

Výsledek:
```
── docker-compose.yml
├── db_init
│   └── d235220_members.sql
├── members
│   ...
│ ├── cfg
│   ...
│ ├── _cfg.php
│    ...
│   ...
└── web
    └── DockerFile
```
* spusť docker compose - z VS Code, docker desktopu, příkazové řádky, …

`docker compose -f docker-compose.yml up`
* přihlaš se do [members](http://127.0.0.1/members/) heslo 54321
* admin - administrátor - aktualizace databáze, opravy
* tnov_1 - přihlašovatel
* tnov_2 - trenér
* tnov_3 - oddílový administrátor
* tnov_4 - malý trenér
* tnov_5 - člen
* tnov_6 - finančník
* databáze je přístupná v [phpMyAdmin](http://127.0.0.1:8080/index.php?route=/database/structure&db=d235220_members)
* uživatel root, heslo dev4password
* kód můžeš měnit z hosta i z kontejneru, logy jsou v members/logs
* cli přístup do php servru
`docker exec -it zbm-web-1 bash`
* cli přístup do mysql
`docker exec -it zbm-db-1 mysql -u root -p`
# Jak si připravit vývojové prostředí

## Požadavky

* naklonuj [repozitář](https://github.com/arnost00/members) do pracovního adresáře
* ve Windows se může hodit [Git for Windows](https://git-scm.com/downloads/win)
* nainstaluj Docker s podporou `docker compose`, například [Docker Desktop](https://www.docker.com/products/docker-desktop/)

## Plné vývojové prostředí

* v kořenovém adresáři `members` spusť:

```bash
docker compose -p members-dev -f docker-compose.dev.yml up --build
```

* do Visual Studio Code přidej [Remote Explorer extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.remote-explorer)
* připoj Visual Studio Code ke kontejneru `members-dev-web-1`
* otevři adresář `/var/www/html/members`

Prostředí obsahuje Git, Playwright a další nástroje.

Konfigurační soubory, které aplikace v kontejneru používá, jsou publikované v gitu a připojené z `docker/config/dev` do `cfg` jako read-only. Upravuj proto soubory v `docker/config/dev`, ne jejich cíle v `cfg`.

Dostupné služby:

* [members](http://127.0.0.1:10100/members)
* [phpMyAdmin](http://127.0.0.1:10101)

## Automatické testy

V kořenovém adresáři `members` spusť:

```bash
docker compose -p members-autotest -f docker-compose.autotest.yml up -d --build
docker compose -p members-autotest -f docker-compose.autotest.yml exec web npm run test:e2e
docker compose -p members-autotest -f docker-compose.autotest.yml down
```

## Minimální konfigurace

Vhodná pro manuální testování a změny nastavení.

* zkopíruj `members/cfg/_cfg.php.default` do `members/cfg/_cfg.php` a uprav jej, nebo použij připravený [`_cfg.php`](X_cfg.php)
* zkopíruj `members/cfg/_globals.php.default` do `members/cfg/_globals.php` a uprav jej, nebo použij připravený [`_globals.php`](X_globals.php)
* zkopíruj `members/cfg/_tables.php.default` do `members/cfg/_tables.php` a uprav jej, nebo použij připravený [`_tables.php`](X_tables.php)

Výsledná struktura:

```text
members
├── cfg
│ ├── _cfg.php
│ ├── _globals.php
│ └── _tables.php
├── docker
│ └── db_init
└── ...
```

Spuštění:

```bash
docker compose up --build
```

Přihlášení do aplikace:

* [members](http://127.0.0.1/members/), heslo `54321`
* `admin` - administrátor, aktualizace databáze, opravy
* `tnov_1` - přihlašovatel
* `tnov_2` - trenér
* `tnov_3` - oddílový administrátor
* `tnov_4` - malý trenér
* `tnov_5` - člen
* `tnov_6` - finančník

Databáze:

* [phpMyAdmin](http://127.0.0.1:8080)
* uživatel `root`, heslo `dev4password`

Práce s kontejnery:

* kód můžeš měnit z hosta i z kontejneru, logy jsou v `members/logs`
* CLI přístup do PHP kontejneru:

```bash
docker compose exec web bash
```

* CLI přístup do databáze:

```bash
docker compose exec db mariadb -u root -p
```

Přerušení a obnovení práce:

```bash
docker compose stop
docker compose start
```

Ukončení a smazání kontejnerů:

```bash
docker compose down
```

Po změně Docker image nebo závislostí:

```bash
docker compose up --build
```

## Známé problémy
* nevytvoří se adresář logs
`docker exec -it zbm-web-1 mkdir -p /var/www/html/members/logs`
`docker exec -it zbm-web-1 chown -R www-data:www-data /var/www/html/members/logs`

## Jak dodat změny:

* změny jdou přes pull request na [arnost00/members](https://github.com/arnost00/members) z nějakého repository forku
* udělej branch, commituj změny, ptej se a navrhuj s odkazem na commit
* otestuj, proklikej gui s různými uživateli
* udělej pull request
* proběhne
* diskuze
* nasazení na test
* testování
* pojeb
* opravy
* nasazení na produkci

Nevytvoří se adresář `logs`:

```bash
docker compose exec web mkdir -p /var/www/html/members/logs
docker compose exec web chown -R www-data:www-data /var/www/html/members/logs
```

## Jak dodat změny

* změny posílej přes pull request do [arnost00/members](https://github.com/arnost00/members) z vlastního forku
* vytvoř branch a průběžně commituj
* průběžně automaticky testuj
* ptej se, navrhuj řešení a odkazuj na konkrétní commit
* změny otestuj a proklikej GUI s různými uživateli
* pošli pull request
* obvyklý průběh je: diskuze, nasazení na test, testování, připomínky, opravy a nasazení do produkce
Binary file removed Docs/members_development_files.zip
Binary file not shown.
44 changes: 44 additions & 0 deletions docker-compose.autotest.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
services:
web:
build:
context: ./docker
dockerfile: Dockerfile.srv
target: autotest
working_dir: /var/www/html/members
ports:
- "10090:10100" #this line maps your pc port to the container port
depends_on:
db:
condition: service_healthy # wait until the autotest database import is complete
volumes:
- ./:/var/www/html/members #this line maps the content of ./html in your pc to the /var/www/html of the container
# override configuration, modifiable in original place only
- ./docker/config/autotest/_cfg.php:/var/www/html/members/cfg/_cfg.php:ro
- ./docker/config/autotest/_globals.php:/var/www/html/members/cfg/_globals.php:ro
- ./docker/config/autotest/_tables.php:/var/www/html/members/cfg/_tables.php:ro
db:
image: mariadb:10.11
environment:
MARIADB_ROOT_PASSWORD: lkj234@sf!--+KLM
MARIADB_DATABASE: members_test
MARIADB_USER: appuser
MARIADB_PASSWORD: apppass
healthcheck:
test: ["CMD-SHELL", "mariadb -uroot -p\"$${MARIADB_ROOT_PASSWORD}\" -e \"SELECT 1 FROM members_test.tst_accounts LIMIT 1\" >/dev/null 2>&1"]
interval: 2s
timeout: 5s
retries: 30
start_period: 10s
volumes:
# initial database content
- ./docker/db_init/d235220_members_latest.sql:/docker-entrypoint-initdb.d/d235220_members.sql
phpmyadmin:
image: phpmyadmin/phpmyadmin
profiles:
- tools
ports:
- "10091:80" #this line maps your pc port to the container port
depends_on:
- db #this line links this container to the db container
environment:
PMA_HOST: db
36 changes: 36 additions & 0 deletions docker-compose.dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
services:
web:
build:
context: ./docker
dockerfile: Dockerfile.srv
target: dev
ports:
- "10100:10100" #this line maps your pc port to the container port
depends_on:
- db #this line links this container to the db container
volumes:
- ./:/var/www/html/members #this line maps the content of ./html in your pc to the /var/www/html of the container
# override configuration, modifiable in original place only
- ./docker/config/dev/_cfg.php:/var/www/html/members/cfg/_cfg.php:ro
- ./docker/config/dev/_globals.php:/var/www/html/members/cfg/_globals.php:ro
- ./docker/config/dev/_tables.php:/var/www/html/members/cfg/_tables.php:ro
db:
image: mariadb:10.11
environment:
MARIADB_ROOT_PASSWORD: dev4password
MARIADB_DATABASE: members_dev
MARIADB_USER: appuser
MARIADB_PASSWORD: apppass
volumes:
# persistent database storage
- ./db_data/dev:/var/lib/mysql #this line maps the content of ./db_data/dev in your pc to the /var/lib/mysql of the container
# initial database content
- ./docker/db_init/d235220_members_latest.sql:/docker-entrypoint-initdb.d/d235220_members.sql
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- "10101:80" #this line maps your pc port to the container port
depends_on:
- db #this line links this container to the db container
environment:
PMA_HOST: db
39 changes: 39 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
services:
web:
build:
context: ./docker
dockerfile: Dockerfile.srv
target: base
ports:
- "80:10100" #this line maps your pc port to the container port
depends_on:
db: #this line links this container to the db container
condition: service_healthy # wait until the autotest database import is complete
volumes:
- ./:/var/www/html/members #this line maps the content of ./html in your pc to the /var/www/html of the container
db:
image: mariadb:10.11
environment:
MARIADB_ROOT_PASSWORD: dev4password
MARIADB_DATABASE: members
MARIADB_USER: appuser
MARIADB_PASSWORD: apppass
healthcheck:
test: ["CMD-SHELL", "mariadb -uroot -p\"$${MARIADB_ROOT_PASSWORD}\" -e \"SELECT 1 FROM members.tst_accounts LIMIT 1\" >/dev/null 2>&1"]
interval: 2s
timeout: 5s
retries: 30
start_period: 10s
volumes:
# persistent database storage
- ./db_data/test:/var/lib/mysql #this line maps the content of ./db_data/dev in your pc to the /var/lib/mysql of the container
# initial database content
- ./docker/db_init/d235220_members_latest.sql:/docker-entrypoint-initdb.d/d235220_members.sql
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- "8080:80" #this line maps your pc port to the container port
depends_on:
- db #this line links this container to the db container
environment:
PMA_HOST: db
48 changes: 48 additions & 0 deletions docker/Dockerfile.srv
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
FROM php:8.2-apache as base

# Install mysqli and clean up
RUN docker-php-ext-install mysqli

# Let Apache listen on port 10100 inside the container.
RUN sed -ri 's/^Listen 80$/Listen 10100/' /etc/apache2/ports.conf \
&& sed -ri 's#<VirtualHost \\*:80>#<VirtualHost *:10100>#' /etc/apache2/sites-available/000-default.conf

# Create log directory
RUN mkdir -p /var/www/html/members/logs && chown -R www-data:www-data /var/www/html/members/logs

# Add Apache alias for /members
RUN echo '\
Alias /members /var/www/html/members\n\
<Directory /var/www/html/members>\n\
Options Indexes FollowSymLinks\n\
Require all granted\n\
</Directory>' \
> /etc/apache2/conf-available/members.conf \
&& a2enconf members

EXPOSE 10100

FROM base as autotest

ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright

# Install Playwright CLI and Chromium for browser-based tests.
RUN apt-get update \
&& apt-get install -y --no-install-recommends nodejs npm ca-certificates \
&& npm install -g playwright \
&& playwright install --with-deps chromium \
&& rm -rf /var/lib/apt/lists/*

FROM autotest as dev

# Install common VS Code Container Tools dependencies.
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
curl \
git \
iproute2 \
less \
procps \
unzip \
wget \
&& rm -rf /var/lib/apt/lists/*
Loading