🢂Docker ‑ LAMP (Linux, Apache, MySQL, PHP)
Ten projekt ułatwia uruchomienie kompletnego środowiska LAMP (Linux, Apache, MySQL, PHP) w kontenerach Dockerowych
Ten projekt ułatwia uruchomienie kompletnego środowiska LAMP (Linux, Apache, MySQL, PHP) w kontenerach Dockerowych.
Za pomocą pojedynczej komendy docker-compose up
możesz skonfigurować i uruchomić wszystkie niezbędne komponenty:
- Serwer webowy Apache: Dostarcza środowisko do hostowania stron internetowych i aplikacji PHP.
- Serwer bazy danych MySQL: Przechowuje dane aplikacji.
- PHP: Język programowania do tworzenia dynamicznych stron internetowych. Zawiera wersję od 5.4 do 8.3
- phpMyAdmin: Narzędzie służące do łatwego zarządzania bazą danych MySQL.
- Redis: nierelacyjna baza danych przechowująca dane w strukturze klucz-wartość w pamięci operacyjnej serwera, przeznaczona do działania jako klasyczna baza danych, miejsce przechowywania pamięci podręcznej oraz broker wiadomości.
Zalety:
- Szybkość i łatwość użycia: Uruchomienie LAMP nigdy nie było łatwiejsze! Potrzebujesz tylko zainstalować Docker Compose i uruchomić jedną komendę.
- Izolacja i przenoszenie: Każdy komponent działa w oddzielnym kontenerze, co zapewnia izolację i ułatwia przenoszenie środowiska na różne platformy.
- Skalowalność: Możesz łatwo skalować swoje środowisko LAMP dodając więcej kontenerów.
- Powtarzalność: Konfiguracja jest zdefiniowana w pliku docker-compose.yml, co zapewnia powtarzalność i ułatwia tworzenie kopii zapasowych i przywracanie środowiska.
Zastosowanie:
- Rozwój aplikacji webowych: Idealne rozwiązanie do lokalnego testowania i rozwoju aplikacji webowych opartych na PHP i MySQL.
- Nauka: Świetny sposób na naukę obsługi LAMP i Docker Compose.
- Demonstracje: Szybkie i łatwe demonstrowanie aplikacji LAMP.
Uwaga: Ten projekt nie nadaje się do środowisk produkcyjnych.
Instalacja
1. Pobierz repozytorium
- Otwórz terminal lub wiersz polecenia.
- Skopiuj i wklej poniższą komendę, aby sklonować repozytorium na swój komputer:
git clone https://github.com/sprintcube/docker-compose-lamp.git
2. Konfiguracja środowiska
- Przejdź do katalogu projektu:
cd docker-compose-lamp/
- Skopiuj plik konfiguracyjny przykładowy:
cp sample.env .env
- Uwaga: Plik .env zawiera poufne informacje takie jak hasło do bazy danych. Nie udostępniaj go publicznie!
- Edytuj plik .env i dostosuj wartości do swoich potrzeb.
3. Uruchomienie kontenerów
Uruchom poniższą komendę, aby uruchomić kontenery w tle (detach mode):
docker compose up -d
Kontenery zostaną utworzone i uruchomione. Możesz sprawdzić ich status komendą:
docker-compose ps
4. Dostęp do aplikacji
Twoja aplikacja będzie dostępna pod adresem http://localhost. Możesz otworzyć ją w przeglądarce internetowej.
5. Dodatkowe uwagi
Pamiętaj, że możesz zatrzymać i usunąć działające kontenery komendą:
docker-compose stop #zatrzymanie
docker-compose rm -f #usuwanie
Więcej informacji i opcji konfiguracji znajdziesz w oficjalnym repozytorium projektu: https://github.com/sprintcube/docker-compose-lamp
Plik docker-compose-lamp.yml:
version: "3"
services:
webserver:
build:
context: ./bin/${PHPVERSION}
container_name: "${COMPOSE_PROJECT_NAME}-${PHPVERSION}"
restart: "always"
ports:
- "${HOST_MACHINE_UNSECURE_HOST_PORT}:80"
- "${HOST_MACHINE_SECURE_HOST_PORT}:443"
links:
- database
volumes:
- ${DOCUMENT_ROOT-./www}:/var/www/html:rw
- ${PHP_INI-./config/php/php.ini}:/usr/local/etc/php/php.ini
- ${SSL_DIR-./config/ssl}:/etc/apache2/ssl/
- ${VHOSTS_DIR-./config/vhosts}:/etc/apache2/sites-enabled
- ${LOG_DIR-./logs/apache2}:/var/log/apache2
- ${XDEBUG_LOG_DIR-./logs/xdebug}:/var/log/xdebug
environment:
APACHE_DOCUMENT_ROOT: ${APACHE_DOCUMENT_ROOT-/var/www/html}
PMA_PORT: ${HOST_MACHINE_PMA_PORT}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
HOST_MACHINE_MYSQL_PORT: ${HOST_MACHINE_MYSQL_PORT}
XDEBUG_CONFIG: "client_host=host.docker.internal remote_port=${XDEBUG_PORT}"
extra_hosts:
- "host.docker.internal:host-gateway"
database:
build:
context: "./bin/${DATABASE}"
container_name: "${COMPOSE_PROJECT_NAME}-${DATABASE}"
restart: "always"
ports:
- "127.0.0.1:${HOST_MACHINE_MYSQL_PORT}:3306"
volumes:
- ${MYSQL_INITDB_DIR-./config/initdb}:/docker-entrypoint-initdb.d
- ${MYSQL_DATA_DIR-./data/mysql}:/var/lib/mysql
- ${MYSQL_LOG_DIR-./logs/mysql}:/var/log/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
phpmyadmin:
image: phpmyadmin
container_name: "${COMPOSE_PROJECT_NAME}-phpmyadmin"
links:
- database
environment:
PMA_HOST: database
PMA_PORT: 3306
PMA_USER: root
PMA_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
UPLOAD_LIMIT: ${UPLOAD_LIMIT}
MEMORY_LIMIT: ${MEMORY_LIMIT}
ports:
- "${HOST_MACHINE_PMA_PORT}:80"
- "${HOST_MACHINE_PMA_SECURE_PORT}:443"
volumes:
- /sessions
- ${PHP_INI-./config/php/php.ini}:/usr/local/etc/php/conf.d/php-phpmyadmin.ini
redis:
container_name: "${COMPOSE_PROJECT_NAME}-redis"
image: redis:latest
ports:
- "127.0.0.1:${HOST_MACHINE_REDIS_PORT}:6379"
Niezbędny plik .env
# Please Note:
# In PHP Versions <= 7.4 MySQL8 is not supported due to lacking pdo support
# To determine the name of your containers
COMPOSE_PROJECT_NAME=lamp
# Possible values: php54, php56, php71, php72, php73, php74, php8, php81, php82, php83
PHPVERSION=php83
DOCUMENT_ROOT=./www
APACHE_DOCUMENT_ROOT=/var/www/html
VHOSTS_DIR=./config/vhosts
APACHE_LOG_DIR=./logs/apache2
PHP_INI=./config/php/php.ini
SSL_DIR=./config/ssl
# PHPMyAdmin
UPLOAD_LIMIT=512M
MEMORY_LIMIT=512M
# Xdebug
XDEBUG_LOG_DIR=./logs/xdebug
XDEBUG_PORT=9003
#XDEBUG_PORT=9000
# Possible values: mysql57, mysql8, mariadb103, mariadb104, mariadb105, mariadb106
#
# For Apple Silicon User:
# Please select Mariadb as Database. Oracle doesn't build their SQL Containers for the arm Architecure
DATABASE=mysql8
MYSQL_INITDB_DIR=./config/initdb
MYSQL_DATA_DIR=./data/mysql
MYSQL_LOG_DIR=./logs/mysql
# If you already have the port 80 in use, you can change it (for example if you have Apache)
HOST_MACHINE_UNSECURE_HOST_PORT=80
# If you already have the port 443 in use, you can change it (for example if you have Apache)
HOST_MACHINE_SECURE_HOST_PORT=443
# If you already have the port 3306 in use, you can change it (for example if you have MySQL)
HOST_MACHINE_MYSQL_PORT=3306
# If you already have the port 8080 in use, you can change it (for example if you have PMA)
HOST_MACHINE_PMA_PORT=8080
HOST_MACHINE_PMA_SECURE_PORT=8443
# If you already has the port 6379 in use, you can change it (for example if you have Redis)
HOST_MACHINE_REDIS_PORT=6379
# MySQL root user password
MYSQL_ROOT_PASSWORD=Haslo
# Database settings: Username, password and database name
#
# If you need to give the docker user access to more databases than the "docker" db
# you can grant the privileges with phpmyadmin to the user.
MYSQL_USER=docker
MYSQL_PASSWORD=docker
MYSQL_DATABASE=docker