209 lines
5.6 KiB
Markdown
209 lines
5.6 KiB
Markdown
# Docker Development Environment Setup
|
|
|
|
This README provides instructions for setting up and using a Docker-based development environment with Apache, multiple PHP versions, and build tools.
|
|
|
|
## Table of Contents
|
|
|
|
1. [Prerequisites](#prerequisites)
|
|
2. [Directory Structure](#directory-structure)
|
|
3. [Setup Instructions](#setup-instructions)
|
|
4. [Managing Projects](#managing-projects)
|
|
5. [Switching PHP Versions](#switching-php-versions)
|
|
6. [Using the Build Tools Container](#using-the-build-tools-container)
|
|
7. [Using php-spy Profiler](#using-php-spy-profiler)
|
|
8. [Troubleshooting](#troubleshooting)
|
|
|
|
## Prerequisites
|
|
|
|
- Docker
|
|
- Docker Compose
|
|
- Git
|
|
|
|
## Directory Structure
|
|
|
|
```
|
|
.
|
|
├── apache/
|
|
│ ├── Dockerfile
|
|
│ ├── apache2.conf
|
|
│ ├── php-fpm.conf
|
|
│ └── vhosts/
|
|
├── php/
|
|
│ ├── Dockerfile-7.4
|
|
│ ├── Dockerfile-8.1
|
|
│ ├── Dockerfile-8.3
|
|
│ └── Dockerfile-8.4
|
|
├── build_tools/
|
|
│ └── Dockerfile
|
|
├── projects/
|
|
├── ssl/
|
|
└── docker-compose.yml
|
|
```
|
|
|
|
## Setup Instructions
|
|
|
|
1. Clone this repository:
|
|
```
|
|
git clone <repository-url>
|
|
cd <repository-directory>
|
|
```
|
|
|
|
2. Create the necessary directories:
|
|
```
|
|
mkdir -p apache/vhosts projects ssl
|
|
```
|
|
|
|
3. Copy the provided Dockerfiles and configuration files into their respective directories.
|
|
|
|
4. Build and start the Docker environment:
|
|
```
|
|
docker-compose up -d
|
|
```
|
|
|
|
5. Ensure your local machine's hosts file points `*.test` to `127.0.0.1`.
|
|
|
|
## Managing Projects
|
|
|
|
### Adding a New Project
|
|
|
|
1. Create a new folder in the `./projects` directory:
|
|
```
|
|
mkdir -p ./projects/domainname.test/public_html ./projects/domainname.test/logs
|
|
```
|
|
|
|
2. Add a new virtual host configuration in `./apache/vhosts/`:
|
|
```apache
|
|
<VirtualHost *:80>
|
|
ServerName domainname.test
|
|
DocumentRoot /var/www/domainname.test/public_html
|
|
ErrorLog /var/www/domainname.test/logs/error.log
|
|
CustomLog /var/www/domainname.test/logs/access.log combined
|
|
|
|
<FilesMatch \.php$>
|
|
SetHandler "proxy:fcgi://php74:9074"
|
|
</FilesMatch>
|
|
</VirtualHost>
|
|
|
|
<VirtualHost *:443>
|
|
ServerName domainname.test
|
|
DocumentRoot /var/www/domainname.test/public_html
|
|
ErrorLog /var/www/domainname.test/logs/error.log
|
|
CustomLog /var/www/domainname.test/logs/access.log combined
|
|
|
|
SSLEngine on
|
|
SSLCertificateFile /etc/ssl/private/domainname.test.crt
|
|
SSLCertificateKeyFile /etc/ssl/private/domainname.test.key
|
|
|
|
<FilesMatch \.php$>
|
|
SetHandler "proxy:fcgi://php74:9074"
|
|
</FilesMatch>
|
|
</VirtualHost>
|
|
```
|
|
|
|
3. Generate a self-signed SSL certificate:
|
|
```
|
|
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./ssl/domainname.test.key -out ./ssl/domainname.test.crt
|
|
```
|
|
|
|
4. Restart the Apache container:
|
|
```
|
|
docker-compose restart apache
|
|
```
|
|
|
|
### Enabling a Project
|
|
|
|
Ensure the virtual host configuration file is present in `./apache/vhosts/` and restart the Apache container:
|
|
```
|
|
docker-compose restart apache
|
|
```
|
|
|
|
### Disabling a Project
|
|
|
|
1. Rename the virtual host configuration file in `./apache/vhosts/` to add a `.disabled` extension.
|
|
2. Restart the Apache container:
|
|
```
|
|
docker-compose restart apache
|
|
```
|
|
|
|
### Removing a Project
|
|
|
|
1. Remove the project folder from `./projects/`.
|
|
2. Remove the virtual host configuration file from `./apache/vhosts/`.
|
|
3. Remove the SSL certificate files from `./ssl/`.
|
|
4. Restart the Apache container:
|
|
```
|
|
docker-compose restart apache
|
|
```
|
|
|
|
## Switching PHP Versions
|
|
|
|
To switch PHP versions for a specific project:
|
|
|
|
1. Edit the virtual host configuration file in `./apache/vhosts/`:
|
|
```apache
|
|
<FilesMatch \.php$>
|
|
# Choose the appropriate PHP version:
|
|
# For PHP 7.4 (default):
|
|
SetHandler "proxy:fcgi://php74:9074"
|
|
# For PHP 8.1:
|
|
# SetHandler "proxy:fcgi://php81:9081"
|
|
# For PHP 8.3:
|
|
# SetHandler "proxy:fcgi://php83:9083"
|
|
# For PHP 8.4:
|
|
# SetHandler "proxy:fcgi://php84:9084"
|
|
</FilesMatch>
|
|
```
|
|
|
|
2. Restart the Apache container:
|
|
```
|
|
docker-compose restart apache
|
|
```
|
|
|
|
## Using the Build Tools Container
|
|
|
|
To access the build tools container via SSH:
|
|
|
|
```
|
|
ssh root@localhost -p 2222
|
|
```
|
|
|
|
The default password is 'password'. It's recommended to change this in a production environment.
|
|
|
|
When working with Node.js in the build tools container:
|
|
|
|
1. First, run: `source ~/.nvm/nvm.sh`
|
|
2. Then you can use Node.js and npm commands as usual.
|
|
|
|
## Using php-spy Profiler
|
|
|
|
To profile a PHP script using php-spy:
|
|
|
|
1. Connect to the appropriate PHP container:
|
|
```
|
|
docker-compose exec php74 bash # or php81, php83, php84
|
|
```
|
|
|
|
2. Run php-spy on a specific PHP process:
|
|
```
|
|
phpspy -p [PID_OF_PHP_PROCESS]
|
|
```
|
|
|
|
You can find the PID of the PHP process using `ps aux | grep php-fpm`.
|
|
|
|
## Troubleshooting
|
|
|
|
- If you encounter permission issues, ensure that your project directories and files have the correct ownership and permissions.
|
|
- If a site is not accessible, check that the virtual host configuration is correct and that the Apache container has been restarted.
|
|
- For SSL issues, verify that the SSL certificate files are correctly generated and placed in the `./ssl/` directory.
|
|
- If PHP processing is not working, ensure that the correct PHP version is specified in the virtual host configuration and that the corresponding PHP-FPM container is running.
|
|
|
|
For any other issues, check the Docker logs:
|
|
```
|
|
docker-compose logs
|
|
```
|
|
|
|
You can also check individual service logs, e.g.:
|
|
```
|
|
docker-compose logs apache
|
|
docker-compose logs php74
|
|
```
|