+ heroku docker
This commit is contained in:
89
.dev/Dockerfile
Normal file
89
.dev/Dockerfile
Normal 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
13
.dev/bashrc
Normal 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
36
.dev/entrypoint-dev.sh
Normal 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"
|
||||
@@ -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";
|
||||
|
||||
@@ -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}"
|
||||
###########################################################################
|
||||
|
||||
Reference in New Issue
Block a user