diff --git a/docs/30_Configuration/20_Templates.md b/docs/30_Configuration/20_Templates.md index c1cd7d53ec9349fbd8c96f7f7aafc7cc43fe6de2..9cdad7f64fb2abd842ca72ff31cd5db63e70a3e5 100644 --- a/docs/30_Configuration/20_Templates.md +++ b/docs/30_Configuration/20_Templates.md @@ -1,35 +1,232 @@ # Basic rules -* All files in the `docker/templates/` directory will be processed. +* Do not start with the Teplates! Edit the [init.sh.cfg](10_init.sh.cfg.md) first to define placeholders and variables. +* All files in the `docker/templates/` directory will be processed. This also means: you can add as many custom files here as you want - and the will processed too. * in the first line must be a line `# TARGET: [name of target file]` to define the target file. If this line does not exist, then the file will be skipped. * Placeholdrs have the syntax variable in double brackets, i.e. `{{VARNAME}}` * variables to be replaced are those in docker/init.sh.cfg and `{{genrator}}` # Templates -## docker-compose.yml +## ❎ docker-compose.yml Main configuration for docker conposer. -## dot_env +Network and servers get a application name as prefix. + +❎ **It is not needed to change this file.** + +Optional changes: + +* if you have more directories than webroot add a mount in the volumes section + +```yaml +# TARGET: docker/docker-compose.yml +# +# {{generator}} +# +# ====================================================================== +# +# (1) see .env for set variables +# (2) run "docker-compose up" to startup +# +# ====================================================================== +version: '3.9' + +networks: + {{APP_NAME}}-network: + +services: + + # ----- apache httpd + php + {{APP_NAME}}-web-server: + build: + context: . + dockerfile: ./containers/web-server/Dockerfile + image: "php:{{APP_PHP_VERSION}}-apache" + container_name: '{{APP_NAME}}-server' + ports: + - '${APP_PORT}:80' + + working_dir: ${WEBROOT} + + volumes: + - ../:/var/www/${APP_NAME} + - ./containers/web-server/apache/sites-enabled:/etc/apache2/sites-enabled + - ./containers/web-server/php/extra-php-config.ini:/usr/local/etc/php/conf.d/extra-php-config.ini + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost"] + interval: 10s + timeout: 3s + retries: 5 + # start_period: 40s + + networks: + - {{APP_NAME}}-network + + user: ${DOCKER_USER_UID} + + # --- 8< --- {{CUTTER_NO_DATABASE}} --- 8< --- + + depends_on: + - {{APP_NAME}}-db-server + + # ----- mariadb + {{APP_NAME}}-db-server: + image: {{MYSQL_IMAGE}} + container_name: '${APP_NAME}-db' + # restart: always + ports: + - '${DB_PORT}:3306' + environment: + MYSQL_ROOT_PASSWORD: '${MYSQL_ROOT_PASS}' + MYSQL_USER: '${MYSQL_USER}' + MYSQL_PASSWORD: '${MYSQL_PASS}' + MYSQL_DATABASE: '${MYSQL_DB}' + volumes: + # - ./containers/db-server/db_data:/var/lib/mysql + - ./containers/db-server/mariadb/my.cnf:/etc/mysql/conf.d/my.cnf + healthcheck: + test: mysqladmin ping -h 127.0.0.1 -u root --password=$$MYSQL_ROOT_PASSWORD + interval: 5s + retries: 5 + networks: + - {{APP_NAME}}-network + +``` + +## ❎ dot_env The template for `.env` of docker composer. -## web-server-Dockerfile +❎ **It is not needed to change this file.** + +```shell +# TARGET: docker/.env +# ====================================================================== +# +# {{generator}} +# values to be used in docker-composer.yml +# +# ====================================================================== + +# ----- application +APP_NAME={{APP_NAME}} + +# uid of www-data in the docker container +DOCKER_USER_UID={{DOCKER_USER_UID}} + +APP_PORT={{APP_PORT}} +WEBROOT={{WEBROOT}} + +# --- 8< --- {{CUTTER_NO_DATABASE}} --- 8< --- + +DB_PORT={{DB_PORT}} + +# ----- database settings +MYSQL_RANDOM_ROOT_PASSWORD={{MYSQL_RANDOM_ROOT_PASSWORD}} +MYSQL_ALLOW_EMPTY_PASSWORD={{MYSQL_ALLOW_EMPTY_PASSWORD}} +MYSQL_ROOT_PASS={{MYSQL_ROOT_PASS}} +MYSQL_USER={{APP_NAME}} +MYSQL_PASS={{MYSQL_PASS}} +MYSQL_DB={{APP_NAME}} +``` + +## ❎ Webserver-Dockerfile Docker container file for Apache httpd and PHP. -It uses the oficial PHP docker images by default. +It uses the oficial PHP docker images by default. It installes given packages +and php modules. To override default module settings see template with "extra-php-config.ini" below. + +❎ **It is not needed to change this file.** + +```shell +# TARGET: docker/containers/web-server/Dockerfile +# +# {{generator}} +# +FROM php:{{APP_PHP_VERSION}}-apache + +# install packages +RUN apt-get update && apt-get install -y {{APP_APT_PACKAGES}} + +# enable apache modules +RUN a2enmod {{APP_APACHE_MODULES}} + +# install php packages +COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/ +RUN install-php-extensions {{APP_PHP_MODULES}} +``` -## vhost_app.conf +## ❗vhost_app.conf Apache vhost configuration for your app. + +❗**It's a MUST to change this file.** + Setup modules and the vhost including rewrites , ... -## extra-php-config.ini +```txt +# TARGET: docker/containers/web-server/apache/sites-enabled/vhost_app.conf +# +# {{generator}} +# +<VirtualHost *:80> + DocumentRoot {{WEBROOT}} + <Directory {{WEBROOT}}> + AllowOverride None + Order Allow,Deny + Allow from All + </Directory> + + # example to prevent access with http + <Location "/no-access"> + Require all denied + </Location> + +</VirtualHost> +``` + +## ✳️ extra-php-config.ini Custom PHP config file for you additional settings. -## my.cnf +✳️ You **SHOULD** change this to setup Mysql database service for your needs. + +```ini +# TARGET: docker/containers/web-server/php/extra-php-config.ini +; +; {{generator}} +; +[PHP] + +; ---------------------------------------------------------------------- +; XDEBUG STUFF BELOW +; ---------------------------------------------------------------------- +; +; error_reporting=E_ALL +; +; [xdebug] +; xdebug.mode=develop,debug +; ; xdebug.client_host=localhost +; xdebug.start_with_request=yes +; ; xdebug.start_with_request=trigger +; +; xdebug.log=/tmp/xdebug.log +; xdebug.discover_client_host = 1 +; ; xdebug.client_port=9003 +; xdebug.idekey="netbeans-xdebug" +``` + +## ✳️ my.cnf If you use a Mariadb a 2nd container will be initialized using this my.cnf. +✳️ You **SHOULD** change this to setup Mysql database service for your needs. + +```ini +# TARGET: docker/containers/db-server/mariadb/my.cnf +[mysqld] +; collation-server = utf8mb4_unicode_ci +; character-set-server = utf8mb4 +``` \ No newline at end of file diff --git a/docs/config.json b/docs/config.json index 40f94ed2c567a8834070ea35728366abf5baa8e4..be9d539b91a1e83ae68296e1f7e659d7e6aa83b3 100644 --- a/docs/config.json +++ b/docs/config.json @@ -3,7 +3,7 @@ "author": "Axel Hahn", "tagline": "Bring up a docker container with a PHP 8.x dev environment", "ignore": { - "files": ["30_PHP-client/Plugins/Checks/_skeleton.md"], + "files": ["_skeleton.md"], "folders": ["99_Not_Ready"] }, "html": {