+ heroku docker

This commit is contained in:
felegy
2022-06-10 15:06:45 +02:00
parent 039d95726c
commit e68f6ff23d
17 changed files with 5478 additions and 114 deletions

89
.dev/Dockerfile Normal file
View File

@@ -0,0 +1,89 @@
ARG STACK_VERSION=20
ARG YQ_VERSION=4.25.2
ARG JQ_VERSION=1.6
ARG XDEBUG_VERSION=3.1.5
ARG USER_NAME=heroku
ARG UID=1000
ARG GID=1000
FROM heroku/heroku:${STACK_VERSION}-build AS dev-base
ENV DEBIAN_FRONTEND noninteractive
RUN \
apt-get -qq update; \
apt-get install -y --no-install-recommends \
mysql-client \
awscli \
&& apt-get download nginx-common \
&& rm -rf /var/lib/apt/lists/*; \
wget -qO- https://cli-assets.heroku.com/install-ubuntu.sh | sh; \
curl -sLo /usr/local/bin/mhsendmail \
https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64; \
chmod +x /usr/local/bin/mhsendmail;
FROM composer AS build
ARG YQ_VERSION
ARG JQ_VERSION
WORKDIR /workspace/bin
RUN \
curl -sSLo ./yq https://github.com/mikefarah/yq/releases/download/v${YQ_VERSION}/yq_linux_amd64; \
chmod a+x ./yq; \
curl -sSLo ./jq https://github.com/stedolan/jq/releases/download/jq-${JQ_VERSION}/jq-linux64; \
chmod a+x ./jq;
WORKDIR /workspace
COPY ./composer.json /tmp/composer.json
RUN \
PATH="/workspace/bin:$PATH"; \
php_version=$(cat /tmp/composer.json | jq '.require .php' --raw-output); \
composer init --name "heroku/dev" --type project --require="php:$php_version" --stability=stable --no-interaction 2>/dev/stdout; \
composer install --ignore-platform-reqs --no-dev --prefer-dist --optimize-autoloader --no-interaction 2>/dev/stdout; \
rm -rf ./vendor; \
php_modules=$(cat /tmp/composer.json | bin/jq '.require | keys []' --raw-output | grep ext-); \
for m in $php_modules; do composer require --no-install --ignore-platform-reqs $m:* 2>/dev/stdout; done;
FROM dev-base
ARG STACK_VERSION
ARG USER_NAME
ARG UID
ARG GID
ARG STACK=heroku-${STACK_VERSION}
ARG XDEBUG_VERSION
COPY .dev/bashrc /tmp/bashrc
COPY .dev/entrypoint-dev.sh /entrypoint.sh
RUN groupadd -r --gid ${GID} ${USER_NAME}; \
useradd -M ${USER_NAME} -d /app --uid ${UID} --gid ${GID}; \
cat /tmp/bashrc >> /etc/profile; rm /tmp/bashrc; \
mkdir -p /app /workspace /buildpacks; chown -R ${USER_NAME}:${USER_NAME} /app /workspace /buildpacks; \
chmod a+x /entrypoint.sh;
COPY --chown=${USER_NAME}:${USER_NAME} .dev/xdebug-install.sh /tmp/xdebug-install.sh
COPY --chown=${USER_NAME}:${USER_NAME} --from=build /workspace /workspace
USER ${USER_NAME}
WORKDIR /workspace
RUN \
mkdir -p /buildpacks/php; \
curl -fsSL https://buildpack-registry.s3.amazonaws.com/buildpacks/heroku/php.tgz | tar -xz -C /buildpacks/php; \
echo "web: tail -f /dev/null" >> Procfile; \
mkdir -p /tmp/build_cache /tmp/env; \
/buildpacks/php/bin/compile $(pwd) /tmp/build_cache /tmp/env 2>/dev/stdout; \
PATH="/workspace/.heroku/php/bin:$PATH"; \
LOGDIR=/tmp /tmp/xdebug-install.sh 2>/dev/stdout; \
rm -rf /tmp/* /app/*
WORKDIR /app
ENV STACK=${STACK}
ENV PORT=3000
ENV FORCE_SECRETS=0
ENTRYPOINT [ "/entrypoint.sh" ]
CMD ["web"]

13
.dev/bashrc Normal file
View File

@@ -0,0 +1,13 @@
# prompt
export PS1='\[\033[01;34m\]\w\[\033[00m\] \[\033[01;32m\]$ \[\033[00m\]'
# profile feature switch
if [ -d $HOME/.profile.d ]; then
for i in $HOME/.profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi

36
.dev/entrypoint-dev.sh Normal file
View File

@@ -0,0 +1,36 @@
#!/usr/bin/env sh
COMMAND=$*
if [ ! -d /app/.heroku ]; then
cp -r /workspace/.heroku /app
fi
if [ ! -f /app/.profile.d/100-php.sh ]; then
cp -r /workspace/.profile.d /app
fi
XDEBUG_ENABLE=${XDEBUG_ENABLE-0}
export XDEBUG_ENABLE
rm -f /app/.heroku/php/etc/php/conf.d/999-xdebug.ini
if [ "$XDEBUG_ENABLE" = 1 ]; then
ln -sn $(pwd)/.dev/xdebug.ini /app/.heroku/php/etc/php/conf.d/999-xdebug.ini
fi
PATH="/workspace/bin:$PATH"
export PATH
HISTFILE=${HISTFILE-/tmp/.bash_history}
export HISTFILE
keys=$(yq e '. | keys' Procfile | cut -c 3-)
for key in $keys; do
echo '#!/usr/bin/env bash' > "/workspace/bin/$key"
yq e ".$key" Procfile >> "/workspace/bin/$key"
chmod +x "/workspace/bin/$key"
done
bash -l -c "$COMMAND"

View File

@@ -2,15 +2,15 @@
PHP_BUILDPACK=${PHP_BUILDPACK:-"/buildpack/php"};
mkdir -p /tmp/build_cache /tmp/env;
mkdir -p /tmp/build_cache;
rm -rf /app/.heroku /app/.profile.d /app/vendor/*
rm -rf /app/.heroku /app/vendor/*
STACK=heroku-20 "$PHP_BUILDPACK/bin/compile" /app /tmp/build_cache /tmp/env;
STACK=heroku-20 "$PHP_BUILDPACK/bin/compile" /app /tmp/build_cache /run/secrets;
cp -v config/mailhog.ini /app/.heroku/php/etc/php/conf.d/225-mailhog.ini;
rm -rf /app/vendor/*;
composer install;
exec .dev/xdebug-install.sh;
exec ".dev/xdebug-install.sh";

View File

@@ -28,7 +28,7 @@ echo -e "${OK}done${NC}"
#git clone git://github.com/xdebug/xdebug.git $XDEBUG_SRC_PATH
#echo -e "${OK}done${NC}"
LOGDIR="${PWD}/.log"
LOGDIR=${LOGDIR-"${PWD}/.log"}
mkdir -p "${LOGDIR}"
LOGFILE="${LOGDIR}/xdebug_build.log"
@@ -59,13 +59,13 @@ echo -e "${LED}XDEBUG${NC} Compile at $XDEBUG_SRC_PATH ..."
cp -v modules/*.la $LIB_PATH
echo -e "${OK}done${NC}"
echo -e "${LED}XDEBUG${NC} Install ini to $INSTALL_PATH ..."
if [ ! -f $XDEBUG_INI_PATH ]; then
echo "zend_extension = xdebug.so" >> $XDEBUG_INI_PATH
fi
# echo -e "${LED}XDEBUG${NC} Install ini to $INSTALL_PATH ..."
# if [ ! -f $XDEBUG_INI_PATH ]; then
# echo "zend_extension = xdebug.so" >> $XDEBUG_INI_PATH
# fi
cp -v $XDEBUG_INI_PATH $INSTALL_PATH/$XDEBUG_INI
echo -e "${OK}done${NC}"
# cp -v $XDEBUG_INI_PATH $INSTALL_PATH/$XDEBUG_INI
# echo -e "${OK}done${NC}"
echo -e "${LED}XDEBUG${NC} All Install ${OK}done${NC}"
###########################################################################