| Classes | ||
| .editorconfig | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| alias.sh | ||
| composer.json | ||
| deploy.php | ||
| README.md | ||
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