Go to file
2025-04-24 12:15:11 +02:00
Classes Modify updateCode 2025-04-24 12:15:11 +02:00
.editorconfig [TASK] Update documentation 2025-04-17 22:29:47 +02:00
.gitignore [TASK] Add base files 2024-12-14 14:10:55 +01:00
.gitlab-ci.yml [TASK] Add base files 2024-12-14 14:10:55 +01:00
alias.sh [TASK] Cleanup and improve some options 2025-04-18 14:11:54 +02:00
composer.json [TASK] Update deployer to 7.x 2025-04-17 07:38:04 +02:00
deploy.php [TASK] Cleanup and improve some options 2025-04-18 14:11:54 +02:00
README.md [TASK] Cleanup and improve some options 2025-04-18 14:11:54 +02:00

To install add Build/composer.json to the project

{
    "name": "ew/build",
    "description": "Project deployment with utilization of deployphp",
    "repositories": {
        "gitea": {
            "type": "git",
            "url": "https://gitea.fischer.im/evoWeb/ew_deployer_config.git"
        }
    },
    "require": {
        "evoweb/deployer-config": "dev-develop"
    }
}

Add to Build/alias.sh with

#!/bin/bash

function composer() {
  mkdir -p "${HOME}/.config/composer"
  mkdir -p "${HOME}/.cache/composer"
  docker run -t \
    --user $(id -u):33 \
    --env COMPOSER_CACHE_DIR=/cache \
    --env SSH_AUTH_SOCK=/ssh-agent \
    --env CI_HOST \
    --env CI_PROJECT_DIR \
    --env ENVIRONMENT \
    --env INSTANCE_ID \
    --env ADDITIONAL_CONFIG_FILE \
    --env TYPO3_CONTEXT \
    --env STAGE \
    --network db \
    --volume "$(readlink -f ${SSH_AUTH_SOCK})":/ssh-agent \
    --volume /etc/passwd:/etc/passwd:ro \
    --volume "${HOME}":"${HOME}" \
    --volume "${HOME}/.ssh/known_hosts":/home/.ssh-agent/known_hosts \
    --volume "${HOME}/.config/composer":/tmp \
    --volume "${HOME}/.cache/composer":/cache \
    --volume "${CI_PROJECT_DIR}":"${CI_PROJECT_DIR}" \
    --volume "${PWD%}":/app \
  evoweb/php:composer $@
}
alias composer=composer

Add .env to project root

ALIAS_SCRIPT=Build/alias.sh
DEPLOY_CONFIG=Build/vendor/evoweb/deployer-config/deploy.php

DOMAIN=www.evoweb.de
CI_HOST=10.10.0.25
INSTANCE_ID=website-evoweb
HOST=sebastian@10.10.0.25
PORT=22

SHARED=/mnt/Docker/website-evoweb/shared

Add Makefile to project root

MAKEFLAGS += --warn-undefined-variables
SHELL := /bin/bash
.EXPORT_ALL_VARIABLES:
.ONESHELL:
.SHELLFLAGS := -eu -o pipefail -c
.SILENT:

# use the rest as arguments for "run"
_ARGS := $(wordlist 2, $(words $(MAKECMDGOALS)), $(MAKECMDGOALS))
# ...and turn them into do-nothing targets
$(eval $(_ARGS):;@:)

production-%: ENVIRONMENT=production
production-%: TYPO3_CONTEXT=Production
staging-%: ENVIRONMENT=staging
staging-%: TYPO3_CONTEXT=Production/Staging

MKFILE_PATH := $(realpath $(firstword $(MAKEFILE_LIST)))
CI_PROJECT_DIR := $(patsubst %/,%,$(dir $(MKFILE_PATH)))

include $(CI_PROJECT_DIR)/.env

TAG := $(shell git -C $(CI_PROJECT_DIR) describe --abbrev=0)
BUILD_DIR := $(CI_PROJECT_DIR)/Build/
ALIAS_FILE := $(CI_PROJECT_DIR)/$(ALIAS_SCRIPT)
DEPLOY_FILE := $(CI_PROJECT_DIR)/$(DEPLOY_CONFIG)

.PHONY: latest-tag
latest-tag:
	echo "Latest tag is: $(shell git -C $(CI_PROJECT_DIR) describe --abbrev=0)"

.PHONY: --build-install
--build-install:
	echo "Installed build tools started"
	source $(ALIAS_FILE); \
	composer --working-dir=$(BUILD_DIR) install
	echo "Installed build tools finished"

.PHONY: --release
--release:
	echo "Release for $(ENVIRONMENT) with '$(TASK)' started"
	source $(ALIAS_FILE); \
	ENVIRONMENT="$(ENVIRONMENT)" \
	composer --working-dir=$(BUILD_DIR) exec dep -- $(VERBOSE) --file=$(DEPLOY_FILE) $(TASK) environment=$(ENVIRONMENT)
	echo "Release for $(ENVIRONMENT) with '$(TASK)' finished"

##@
##@ Commands to release tag or branch
##@

.PHONY: production-release
production-release: ##@ Release latest tag to production
production-release: TASK=deploy --tag $(TAG)
production-release: VERBOSE=
production-release: --build-install --release


.PHONY: staging-release
staging-release: ##@ Release develop to staging
staging-release: TASK=deploy --branch develop
staging-release: VERBOSE=-vv
staging-release: --build-install --release

Usage per make

Deploy branch develop to staging

make staging-release

Deploy tag 1.0.0 to production

make production-release 1.0.0

Overriding default values per host in hosts.yaml

# for more settings, look in https://github.com/deployphp/deployer/recipe/common.php
config:
    bin/php: 'docker exec -e TYPO3_CONTEXT="{{application_context}}" $(docker ps -q -f name={{INSTANCE_ID}}-php-fpm-1) php'
    http_user: sebastian
    http_group: www-data
    keep_releases: 5

    remote_user: sebastian
    identity_file: ~/.ssh/rsync_id_ed25519
    deploy_path: '{{CI_PROJECT_DIR}}/Build/cache/{{ENVIRONMENT}}'

    repository: git@gitea.fischer.im:evoWeb/website_evoweb_de.git
    composer_options: '{{composer_action}} --verbose --prefer-dist --no-progress --no-interaction --no-dev --optimize-autoloader --no-suggest --ignore-platform-reqs'

    prepare_dirs:
        - .dep
        - releases
        - shared/public/fileadmin

    shared_dirs:
        - public/fileadmin

    writable_recursive: true
    writable_dirs:
        - public/typo3temp
        - var
        - var/cache
        - var/log

    rsync:
        exclude_download:
            - current
            - shared/
            - var/*
            - '-,p public/typo3temp'

    remote_path: /srv/{{INSTANCE_ID}}/data/htdocs/{{ENVIRONMENT}}
    app_container_path: /usr/local/apache2/htdocs/{{ENVIRONMENT}}

hosts:
    staging.evoweb.de:
        hostname: '{{CI_HOST}}'
        labels:
            environment: staging
        application_context: Production/Staging
        htaccess: evoweb:website

    www.evoweb.de:
        hostname: '{{CI_HOST}}'
        labels:
            environment: production
        application_context: Production