🢂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