Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zaplanowana wysyłka e-maili z systemów Linux i Windows
eerie
post 30.08.2022, 17:11:13
Post #1





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 3.08.2017

Ostrzeżenie: (0%)
-----


Przeczytałem, iż można planować wysyłkę e-maili w PHP z użyciem biblioteki ssh2 oraz Cron'a. Problem jest taki, iż Cron działa pod Linux'em, ale nie działa pod Windows. Da się to jakoś rozwiązać, aby zaplanować wysyłkę tych e-maili zarówno pod systemem Linux oraz Windows? Aby skrypt działał pod oba systemami operacyjnymi jednocześnie... Bo średnio mi się uśmiecha instalować Linux'a oraz PHP i MySQL'a pod tym systemem operacyjnym. Obecnie programuję pod Windows.

Ten post edytował eerie 30.08.2022, 17:14:08
Go to the top of the page
+Quote Post
Salvation
post 30.08.2022, 17:24:40
Post #2





Grupa: Zarejestrowani
Postów: 335
Pomógł: 70
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


Można. https://blog.meloniq.net/2010/01/21/jak-uru...em-cron-na-win/

PS. Dlaczego nie korzystasz z Dockera? Wtedy masz taki system jaki tylko chcesz. Plus, teraz pod Windowsem możesz pracować na luzie z użyciem Linuxa -> WSL: https://docs.microsoft.com/en-us/windows/wsl/about
Go to the top of the page
+Quote Post
nospor
post 30.08.2022, 17:25:55
Post #3





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
Dołączył: 27.12.2004




Cron to nic innego jak odpalanie jakiegos zadania o zadanym czasie.
Poszukaj wiec w google odpowiednika cron dla Windows

google: windows cron


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
eerie
post 6.09.2022, 19:28:53
Post #4





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 3.08.2017

Ostrzeżenie: (0%)
-----


Dzięki za wskazówki... I sorry za moje pytanie, ale muszę dopytać...

Zainstalowałem najnowszy "Docker Desktop" oraz system Linux "Ubuntu" (WSL). Domyślam się, iż muszę jakoś stworzyć obraz bazowy dla Docker'a, który będzie zawierał PHP + MySQL (najlepiej XAMPP dla Linux). Potem zbudować obraz mojej aplikacji, który będzie korzystał z obrazu bazowego. Następnie uruchomić kontener... Tylko zbytnio nie rozumiem, gdzie mam umieścić pliki mojej aplikacji? Może być tam, gdzie jest do tej pory, lub muszę ją jakoś przegrać, aby była widoczna z Linux'a?

Sorry za moje pytania, ale ukończyłem zaledwie roczne informatyczne studia podyplomowe i nie miałem zbytnio styczności z Linux'em i Docker'em do tej pory. wink.gif

Będę wdzięczny za jakiekolwiek kolejne wskazówki. smile.gif

DODANE 06.09.2022:

Ok. Przeczytałem 2 razy artykuł poniżej i już zrozumiałem to i owo... Jeśli możecie polecić coś lepszego, proszę o link. wink.gif

https://frontstack.pl/docker-dockerfile-tworzenie-obrazow/

Generalnie rozumiem już, iż mogę programować, jak robiłem to do tej pory. Potem, przed sprawdzeniem efektów zmian kodu PHP w wyszukiwarce, muszę odbudować obraz mojej aplikacji webowej. Zmienione pliki są do niego wciągane, odpalam kontener i mogę sobie sprawdzić, jak aplikacja działa pod Linux'em...

W artykule jest informacja, iż można użyć gotowych obrazów systemu Linux, Apache'a, MySQL'a. Najlepszym miejscem na wyszukanie obrazów bazowych jest DockerHub. Tylko widzę, że taki obraz "httpd" jest pod system Linux Alpine, a "mysql" pod Debian. Domyślam się, iż muszę poszukać wersji np. MySQL'a, która działa pod np. Ubuntu, którego chcę używać...

Pozostaje kwestia konfiguracji np. Apache'a HTTP Server, aby jego plik konfiguracyjny wskazywał na folder, gdzie znajduje się moja aplikacja. Jak to najłatwiej zrobić? Jakoś podmienić plik "httpd.conf" w Apache'u po załadowaniu gotowego obrazu? smile.gif

Ten post edytował eerie 6.09.2022, 19:32:12
Go to the top of the page
+Quote Post
viking
post 7.09.2022, 08:36:45
Post #5





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1113
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Utwórz sobie plik docker-compose.yml (i poszukaj o nim informacji) w którym wrzucisz zależności i mapowania. Przykładowo jeśli w obrazie php chcesz aby twój lokalny folder z plikami projektu wskazywał na jakiś folder www to robisz
Kod
version: "3"
services:
    php:
        volumes:
          - /moj_folder_na_dysku:/var/www #czyli po wykonaniu docker exec -it php bash i cd /var/www będziesz widział pliki z lokalnego dysku


Dodatkowo mały hint. Jeżeli chcesz dodawać rozszerzenia do obrazu php (sugeruję raczej wersję na debianie, alpine mimo że mniejszy to potrafi robić problemy) to najlepiej przez https://github.com/mlocati/docker-php-extension-installer

Ten post edytował viking 7.09.2022, 08:37:16


--------------------
Go to the top of the page
+Quote Post
eerie
post 12.09.2022, 20:09:08
Post #6





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 3.08.2017

Ostrzeżenie: (0%)
-----


Poradziłem sobie z Docker'em. Opierałem się na tym przykładzie: https://www.section.io/engineering-educatio...nt-environment/

Jednak mam problem. Mój instalator skryptu php, który piszę, wymaga zmiany uprawnień pliku konfiguracyjnego na 666. Pod Windows było ok. Pod Linux'em mam komunikat:

Cytat
Warning: chmod(): Operation not permitted in /var/www/html/install.php on line 19


Próbowałem zmieniać uprawnienia na root dla kontenerów Docker'a, ale to nie pomogło. Pewnie rozwiązanie mojego problemu jest proste, ale "raczkuję" w Linux'ie i nie potrafię sobie z tym poradzić... wink.gif

Jak prosto zrobić, aby mój skrypt php miał uprawnienia do zmiany zawartości własnych plików? Taki WordPress jakoś to robi... smile.gif

I jeszcze jedno pytanie odnośnie Cron'a. Znalazłem przykład, jak zaplanować wysyłkę e-mail'i z użyciem biblioteki ssh2: https://code.tutsplus.com/tutorials/managin...-php--net-19428

Da się to zrobić inaczej/lepiej bez użycia tej biblioteki?
Go to the top of the page
+Quote Post
viking
post 13.09.2022, 07:12:30
Post #7





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1113
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Możliwe że właścicielem plików jest root, natomiast po stronie php-fpm będzie to 33:33 www-data:www-data (lub 82:82 na alpine). Jeśli tak, to nie będziesz mógł zmienić uprawnień. Pliki dostępne dla php zrób z odpowiednimi uprawnieniami dla usera:grupy php.


--------------------
Go to the top of the page
+Quote Post
eerie
post 13.09.2022, 19:25:00
Post #8





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 3.08.2017

Ostrzeżenie: (0%)
-----


Nie wiem zbytnio, jak to zrobić, aby zadziałało. Dodałem w Dockerfile fragment kodu poniżej i dostaję komunikat, że nie ma takiego pliku/katalogu.

Kod
RUN chown -R www-data:www-data /var/www/config/options.php
RUN chmod 666 /var/www/config/options.php
Go to the top of the page
+Quote Post
viking
post 14.09.2022, 05:55:24
Post #9





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1113
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Więc pewnie nie ma tego pliku w chwili budowania.


--------------------
Go to the top of the page
+Quote Post
eerie
post 15.09.2022, 17:31:29
Post #10





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 3.08.2017

Ostrzeżenie: (0%)
-----


Próbowałem również ustawić dostęp przy kopiowaniu i też nie zadziałało.

Kod
COPY --chown=www-data:www-data . /var/www


Jednak finalnie udało się z poziomu "Wiersza polecenia":

Cytat
docker exec -it php-apache bash
cd /var/www/config
ls -l
chmod 666 /var/www/config/options.php
chown -R www-data:www-data /var/www/config/options.php
ls -l
exit


DODANE 15.09.2022:

Ok. Umieszczam poniżej ustawienia Docker'a dla mojego projektu. Jeśli coś jest jeszcze nie tak, proszę o uwagi. Przetestowałem i działa dobrze. Tylko nie wiem, dlaczego po każdorazowym odpaleniu Docker'a tworzy mi się w katalogu aplikacji pusty folder "html". Nie powinien czasem istnieć/tworzyć się wyłącznie w kontenerze php-apache?

./README.md
Kod
# Go to the application directory
cd <path to project>

# Start the application stack defined in docker-compose.yml
docker-compose up -d

# Set the permissions and access for the php-apache container
docker exec -it php-apache bash
cd /var/www/config
ls -l
chmod 666 /var/www/config/options.php
chown -R www-data:www-data /var/www/config/options.php
ls -l
exit

# Stop the application stack
docker-compose down


./docker-compose.yml
Kod
version: '3.8'
services:
    php-apache-environment:
        container_name: php-apache
        build:
            context: ./docker/php
            dockerfile: Dockerfile
        depends_on:
            - db
        ports:
            - '8000:80'
        volumes:
            - .:/var/www
            - ./public:/var/www/html
    db:
        container_name: db
        image: mysql:8.0
        restart: always
        environment:
            MYSQL_ALLOW_EMPTY_PASSWORD: true
            MYSQL_ROOT_PASSWORD:
            MYSQL_DATABASE: emailsender
            MYSQL_USER: emailsender
            MYSQL_PASSWORD: 1234567890
        ports:
            - '9906:3306'
    phpmyadmin:
        container_name: pma
        image: phpmyadmin/phpmyadmin
        restart: always
        environment:
            PMA_HOST: db
            PMA_PORT: 3306
            PMA_ARBITRARY: 1
        depends_on:
            - db
        ports:
            - '8001:80'


./docker/php/Dockerfile
Kod
FROM php:8.0-apache

RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli && a2enmod rewrite
RUN apt-get update && apt-get upgrade -y


Ten post edytował eerie 15.09.2022, 17:39:57
Go to the top of the page
+Quote Post
viking
post 16.09.2022, 06:12:09
Post #11





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1113
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Masz jakieś pliki w ./public? (czyli bieżący folder w którym jest docker-compose.yml)
Trochę dziwnie wygląda podwójne montowanie tego samego. . pod /var/www i zaraz ponownie public. Ja bym przeniósł pliki projektu gdzieś poza konfigurację.


--------------------
Go to the top of the page
+Quote Post
eerie
post 16.09.2022, 15:25:03
Post #12





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 3.08.2017

Ostrzeżenie: (0%)
-----


W ./public są tylko pliki, które mają być dostępne z poziomu przeglądarki. W głównym katalogu aplikacji są też foldery ./config, ./src, ./templates oraz pliki ./docker-compose.yml i ./README.md, do których przeglądarka nie ma mieć dostępu... A zaczęło się tak, iż ustawiłem "volumes" na "./public:/var/www/html" i przeglądarka znalazła mi główny plik index.php, ale wywaliło błędy przy includowaniu, iż nie widzi pozostałych plików. Poszukałem w Google i znalazłem przykład, na podstawie którego dodałem ".:/var/www". Od tej pory aplikacja działa poprawnie i nie wywala błędów przy dołączaniu plików (np. z folderu ./src) do głównego ./public/index.php. Jak wpisuję "http://localhost:8000" w przeglądarce, to widzi mi tylko pliki z ./public (/var/www/html w kontenerze php-apache). Nie znam się, ale może tak wolno, skoro znalazłem taki przykład w sieci i dobrze mi to działa... wink.gif

PS Sprawdziłem jeszcze przed chwilą z ciekawości i kontener php-apache w /var/www zawiera zarówno katalog html oraz public. Obydwa z identyczną zawartością. Pliki w środku tych katalogów więc się dublują.
Go to the top of the page
+Quote Post
viking
post 16.09.2022, 15:28:30
Post #13





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1113
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Traktuj swój folder jako jeden vhost. Zatem najlepiej rób taką strukturę żeby montując jeden folder hosta mieć wszystkie pliki projektu. Zapewne folder html jest w tym obrazie odczytywany jako główny punkt wejścia dla apache. Możesz sobie pewnie włączyć hosta w jakimś sites-enabled i wskaż mu wtedy że folderem odczytu jest public.


--------------------
Go to the top of the page
+Quote Post
eerie
post 27.09.2022, 18:35:45
Post #14





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 3.08.2017

Ostrzeżenie: (0%)
-----


Zmieniłem

Kod
        volumes:
            - .:/var/www
            - ./public:/var/www/html


na

Kod
        volumes:
            - .:/var/www
            - ./docker/php/php-apache.conf:/etc/apache2/sites-enabled/000-default.conf


i dodałem

./docker/php/php-apache.conf
Kod
<VirtualHost *:80>
    ServerAdmin admin@domain.com
    DocumentRoot "/var/www/public"
    ServerName php-apache
</VirtualHost>


i wszystko działa dobrze. smile.gif

PS Wzorowałem się na tym przykładzie: https://www.zehntech.com/quick-guide-to-imp...in-just-10-min/

DODANE 20.09.2022:

Mam jeszcze małą wątpliwość. Gdy odpalam Docker'a, za każdym razem w katalogu projektu tworzy mi się pusty folder html. Zastanawiam się, czy nie poprawniej byłoby umieszczać wszystkie pliki strony nie w "/var/www", ale w "/var/www/html", jak jest w przykładzie z linka powyżej? Chyba że da się pozbyć tego folderu html w inny sposób...

DODANE 26.09.2022:

Poczytałem trochę i wygląda mi na to, iż główne foldery aplikacji php powinny być kopiowane jako podkatalogi /var/www (np. /var/www/1sitename, /var/www/2sitename). Ponieważ w moim projekcie mam w kontenerze tylko jedną stronę, to umieściłem ją domyślnie w /var/www/html. Do tego zauważyłem, że folder html ma dostęp dla www-data:www-data. Dlatego zrobiłem małe zmiany w kodzie i trochę inaczej kopiuję pliki, aby wszystkie miały te same uprawnienia (777 i www-data)... Nie wiem, czy to jest dobra praktyka, aby zmieniać wszystko z root na www-data? Teraz przynajmniej nie muszę nic robić z "Wiersza polecenia" poza wystartowaniem Docker'a. Prosiłbym o wszelkie uwagi i wątpliwości odnośnie prawidłowości kodu. smile.gif

./docker-compose.yml
Kod
version: '3.9'
services:
    php-apache-environment:
        container_name: php-apache
        build:
            context: .
            dockerfile: Dockerfile
        depends_on:
            - db
        ports:
            - '8000:80'
        volumes:
            - ./php-apache.conf:/etc/apache2/sites-enabled/000-default.conf
[...]


./Dockerfile
Kod
FROM php:8.0-apache

COPY --chown=www-data:www-data --chmod=777 . /var/www/html

RUN a2enmod rewrite
RUN apt-get update && apt-get install -y apt-transport-https
RUN apt-get install -y libssh2-1-dev libssh2-1 \
    && pecl install ssh2-1.3.1 \
    && docker-php-ext-enable ssh2
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
RUN apt-get update && apt-get upgrade -y


./php-apache.conf
Kod
<VirtualHost *:80>
    ServerAdmin admin@domain.com
    DocumentRoot "/var/www/html/public"
    ServerName php-apache
</VirtualHost>


Przeniosłem pliki Dockerfile i php-apache.conf do katalogu głównego aplikacji, bo miałem problem, że kopiowało mi do html w kontenerze tylko zawartość folderu ./docker/php. Nie udało mi się wyjść z niego przy kopiowaniu w stylu ./../../ czy jakoś tak... Nie wiem, jak to zrobić pod Linux'em... wink.gif

PS Musiałem dodać ponownie mapowanie "- .:/var/www/html" dla "volumes:" w pliku "docker-compose.yml". Bez tego zmiany w plikach nie są widoczne na bieżąco, a tylko stan z momentu kopiowania... Niestety dostęp powraca wtedy do root.

Ten post edytował eerie 26.09.2022, 19:22:40
Go to the top of the page
+Quote Post
viking
post 27.09.2022, 19:06:24
Post #15





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1113
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Ale po co ty kopiujesz pliki do obrazu? Nie wrzucasz tego na produkcję tylko chcesz deva.


--------------------
Go to the top of the page
+Quote Post
eerie
post 29.09.2022, 19:11:06
Post #16





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 3.08.2017

Ostrzeżenie: (0%)
-----


Faktycznie... Usunąłem COPY z Dockerfile i ponownie używam mapowania ".:/var/www/html".

Co do Cron'a. Znalazłem przykład: https://code.tutsplus.com/tutorials/managin...-php--net-19428

Tylko jest taki problem, że SSH2 służy do zdalnego korzystania z zasobów innej maszyny. Wątpię, aby firmy hostingowe na to pozwalały... Musiałbym chyba jakoś korzystać z Cron'a bezpośrednio z komputera, gdzie mam odpaloną moją aplikację i gdzie chcę wysyłać e-mail'e. I tu mam wątpliwość. Trzeba do tego mieć chyba specjalne uprawnienia, żeby korzystać z Cron'a? Nie wiem, czy firmy hostingowe na coś takiego pozwalają? Aplikacja ma docelowo działać nie na mojej maszynie, ale na zdalnym serwerze (usługa hostingowa). Prosiłbym o jakąś podpowiedź, jak to najprościej rozwiązać...
Go to the top of the page
+Quote Post
viking
post 30.09.2022, 08:46:51
Post #17





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1113
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Nie znam firmy hostingowej która by nie dawała obsługi cron u siebie.


--------------------
Go to the top of the page
+Quote Post
eerie
post 3.10.2022, 19:31:39
Post #18





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 3.08.2017

Ostrzeżenie: (0%)
-----


Prawie sobie poradziłem z zagadnieniem... Zamiast używać biblioteki SSH2, korzystam z funkcji exec() języka php. Tylko mam problem z odpaleniem kontenera php-apache z wystartowanym cron'em i php jednocześnie. Udaje mi się wystartować cron'a, jak w przykładzie poniżej, ale nie działa wtedy php. Jak usunę "CMD ["cron", "-f"]" z pliku Dockerfile, to działa php, ale cron'a muszę odpalić z wiersza polecenia. Nie udaje mi się odpalić jednego i drugiego jednocześnie. Jak to wygląda w plikach, podaję poniżej:

./Dockerfile
Kod
FROM php:8.0-apache

RUN a2enmod rewrite
RUN apt-get update && apt-get install -y cron
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
RUN apt-get update && apt-get upgrade -y

CMD ["cron", "-f"]


./public/index.php
Kod
<?php

if (exec('crontab crontab.txt >/dev/null 2>&1') !== false) {
    echo 'OK';
} else {
    echo 'BAD';
}


./public/run.php
Kod
<?php

// Check on your command line: crontab -u www-data -l
exec('crontab -r >/dev/null 2>&1');


./public/crontab.txt
Kod
* * * * * /usr/local/bin/php /var/www/html/public/run.php >/dev/null 2>&1



PS Korzystałem tu z tych przydatnych stron:

https://www.thesitewizard.com/general/set-cron-job.shtml
https://www.looklinux.com/bash-crontab-command-not-found/
Go to the top of the page
+Quote Post
viking
post 4.10.2022, 07:14:30
Post #19





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1113
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Dodaj sobie gdzieś plik crona
Kod
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * www-data php /var/www/html/public/run.php >> /dev/null 2>&1


Następnie w dockerfile
Kod
## CRON
COPY ścieżka do tego pliku/cron.d/ /etc/cron.d/
RUN chmod 0544 /etc/cron.d/* && touch /var/log/cron.log && crontab /etc/cron.d/*


I w pliku uruchomieniowym (jeśli jest w tym obrazie takie coś, zazwyczaj entrypoint.sh)
Kod
service cron start


--------------------
Go to the top of the page
+Quote Post
eerie
post 5.10.2022, 18:33:18
Post #20





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 3.08.2017

Ostrzeżenie: (0%)
-----


Siedzę nad tym i nie mogę dojść, jak to powinno działać:

1. Zamierzałem zrobić tak, iż tworzę zadanie dla cron'a (crontab crontab.txt), gdy zaplanuję wysyłkę (przycisk "Send"). Gdy wysyłka się skończy, skrypt usuwa to zadanie (crontab -r).

2. Jednak zastanawiam się, czy nie powinno być tak, iż na starcie serwera jest uruchomione zadanie odpalania okresowo jakiegoś pliku php. W tym pliku sprawdzam, czy jest zaplanowana wysyłka. Jak jest, to wysyłam. Jak nie ma, to nie robię nic. I tak w kółko 24/7.

Który wariant jest poprawny? Bo wydaje mi się, iż nie ma sensu ciągle sprawdzać, czy skrypt ma coś wysłać, gdy nic nie zaplanowałem do wysyłki... wink.gif

DODANE 05.10.2022:

Przeanalizowałem jeszcze raz tamten przykład klasy, która korzysta z biblioteki SSH2. I na potrzeby mojej aplikacji to chyba optymalne rozwiązanie. Czyli np. w folderze ./config tworzę plik "crontab.txt". Na jego podstawie tworzę zadanie cron'a i kasuję ten plik. Gdy wysyłka e-mail'i dobiegnie końca, to usuwam moje zadanie cron'a...

Ten przykład z "SHELL=..." i "PATH=..." (crontab.txt) nie chciał mi ruszyć, aż usunąłem "www-data". Po prostu coś nie chciało mi odpalić pliku "run.php", ale już działa.

I udało mi się uruchomić cron'a i php jednocześnie. W pliku Dockerfile zamieniłem ostatnią linię na "CMD (cron -f -l 8 &) && apache2-foreground". I wszystko już działa. smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.03.2024 - 05:30