Skip to content

Commit 8d22726

Browse files
authored
Merge pull request #3 from psaux-it/env_dev
dev_deploy
2 parents 48f65d4 + 2145ea1 commit 8d22726

File tree

6 files changed

+154
-8
lines changed

6 files changed

+154
-8
lines changed

.env

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export NPP_NGINX_PARAMS_CONF=./nginx/fastcgi_params
2323
export NGINX_LOGS=./logs/nginx
2424

2525
# WP-CLI Settings
26-
export WORDPRESS_SITE_URL_=https://localhost
26+
export WORDPRESS_SITE_URL_=https://172.19.0.3
2727
export WORDPRESS_SITE_TITLE_="NPP Dockerized"
2828
export WORDPRESS_ADMIN_USER_=npp
2929
export WORDPRESS_ADMIN_PASSWORD_=npp
@@ -48,6 +48,14 @@ export NPP_USER_=npp
4848
export NPP_UID_=18978
4949
export NPP_GID_=33749
5050

51+
# NPP Switch Development environment
52+
export NPP_DEV_ENABLED_=1
53+
export NPP_DEV_PLUGIN_NAME_=fastcgi-cache-purge-and-preload-nginx
54+
export NPP_DEV_PLUGIN_DIR_="${NPP_WEB_ROOT_}/wp-content/plugins/${NPP_DEV_PLUGIN_NAME_}"
55+
export NPP_DEV_TMP_CLONE_DIR_="/tmp/${NPP_DEV_PLUGIN_NAME_}"
56+
export NPP_DEV_PLUGIN_FILE_="${NPP_DEV_PLUGIN_DIR_}/${NPP_DEV_PLUGIN_NAME_}.php"
57+
export NPP_DEV_GITHUB_REPO_="https://github.com/psaux-it/nginx-fastcgi-cache-purge-and-preload.git"
58+
5159
# Plugins to Install (comma seperated)
5260
export NPP_PLUGINS_="fastcgi-cache-purge-and-preload-nginx"
5361

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ docker compose up -d --build
5353

5454
### 🚀 **Post-Container Startup Access**
5555
- The WordPress site can be accessed at the host machine:
56-
- 🔒 [https://localhost](https://localhost)
57-
- 🌐 [http://localhost](http://localhost)
56+
- 🔒 [https://172.19.0.3](https://172.19.0.3)
57+
- 🌐 [http://172.19.0.3](http://172.19.0.3)
5858

5959
- Default WordPress **wp-admin** login credentials:
6060
- **Username**: `npp`

docker-compose.yml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,20 @@ services:
3030
- WORDPRESS_CONFIG_EXTRA=
3131
define('FORCE_SSL_ADMIN', true);
3232
define('FORCE_SSL_LOGIN', true);
33-
if (defined('WP_CLI') && WP_CLI && !isset($$_SERVER['HTTP_HOST'])) { $$_SERVER['HTTP_HOST'] = "localhost"; }
33+
if (defined('WP_CLI') && WP_CLI && !isset($$_SERVER['HTTP_HOST'])) $$_SERVER['HTTP_HOST'] = "172.19.0.3";
3434
- NPP_WEB_ROOT=${NPP_WEB_ROOT_}
3535
- NPP_NGINX_CACHE_PATH=${NPP_NGINX_CACHE_PATH_}
3636
- NPP_USER=${NPP_USER_}
3737
- NPP_UID=${NPP_UID_}
3838
- NPP_GID=${NPP_GID_}
3939
- NPP_PLUGINS=${NPP_PLUGINS_}
4040
- NPP_THEMES=${NPP_THEMES_}
41+
- NPP_DEV_ENABLED=${NPP_DEV_ENABLED_}
42+
- NPP_DEV_PLUGIN_NAME=${NPP_DEV_PLUGIN_NAME_}
43+
- NPP_DEV_PLUGIN_DIR=${NPP_DEV_PLUGIN_DIR_}
44+
- NPP_DEV_TMP_CLONE_DIR=${NPP_DEV_TMP_CLONE_DIR_}
45+
- NPP_DEV_PLUGIN_FILE=${NPP_DEV_PLUGIN_FILE_}
46+
- NPP_DEV_GITHUB_REPO=${NPP_DEV_GITHUB_REPO_}
4147
- MOUNT_DIR=${MOUNT_DIR_}
4248
- WORDPRESS_SITE_URL=${WORDPRESS_SITE_URL_}
4349
- WORDPRESS_SITE_TITLE=${WORDPRESS_SITE_TITLE_}
@@ -118,6 +124,7 @@ services:
118124
- NPP_UID=${NPP_UID_}
119125
- NPP_GID=${NPP_GID_}
120126
- NGINX_WEB_USER=${NGINX_WEB_USER_}
127+
- MOUNT_DIR=${MOUNT_DIR_}
121128
networks:
122129
npp_network:
123130
ipv4_address: 172.19.0.3

nginx/entrypoint-nginx.sh

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ wait_for_service "wordpress" 9001
6565
wait_for_service "wordpress" 9999
6666

6767
# Check if required environment variables are set
68-
for var in NPP_UID NPP_GID NPP_USER NPP_WEB_ROOT NGINX_WEB_USER; do
68+
for var in NPP_UID NPP_GID NPP_USER NPP_WEB_ROOT NGINX_WEB_USER MOUNT_DIR; do
6969
if [[ -z "${!var:-}" ]]; then
7070
echo -e "${COLOR_RED}${COLOR_BOLD}NPP-NGINX-FATAL:${COLOR_RESET} Missing required environment variable: ${COLOR_LIGHT_CYAN}${var}${COLOR_RESET} - ${COLOR_RED}Exiting...${COLOR_RESET}"
7171
exit 1
@@ -106,15 +106,22 @@ echo -e "\n${COLOR_YELLOW}━━━━━━━━━━━━━━━━━━
106106

107107
# URL Access Information
108108
echo -e "\n${COLOR_GREEN}${COLOR_BOLD}🔑 Access your WordPress admin page at:${COLOR_RESET}"
109-
echo -e "${COLOR_LIGHT_CYAN}https://localhost/wp-admin${COLOR_RESET}"
109+
echo -e "${COLOR_LIGHT_CYAN}URL: ${COLOR_RESET}${COLOR_BOLD}https://172.19.0.3/wp-admin${COLOR_RESET}"
110110

111111
# Separator for credentials
112112
echo -e "\n${COLOR_YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${COLOR_RESET}"
113113

114114
# Default credentials
115115
echo -e "\n${COLOR_GREEN}${COLOR_BOLD}📝 Default Credentials:${COLOR_RESET}"
116-
echo -e "${COLOR_LIGHT_CYAN}Username: ${COLOR_RESET}${COLOR_BOLD}npp${COLOR_RESET}"
117-
echo -e "${COLOR_LIGHT_CYAN}Password: ${COLOR_RESET}${COLOR_BOLD}npp${COLOR_RESET}"
116+
echo -e "${COLOR_LIGHT_CYAN}Username: ${COLOR_RESET}${COLOR_BOLD}${NPP_USER}${COLOR_RESET}"
117+
echo -e "${COLOR_LIGHT_CYAN}Password: ${COLOR_RESET}${COLOR_BOLD}${NPP_USER}${COLOR_RESET}"
118+
119+
# Separator for cache path
120+
echo -e "\n${COLOR_YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${COLOR_RESET}"
121+
122+
# Default Nginx cache path
123+
echo -e "\n${COLOR_GREEN}${COLOR_BOLD}💾 Nginx Cache Path:${COLOR_RESET}"
124+
echo -e "${COLOR_LIGHT_CYAN}Path: ${COLOR_RESET}${COLOR_BOLD}${MOUNT_DIR}${COLOR_RESET}"
118125

119126
# Final separator
120127
echo -e "\n${COLOR_YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${COLOR_RESET}"

wordpress/Dockerfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ RUN apt-get update && apt-get install -y \
4949
netcat-traditional \
5050
# Install common dependencies
5151
curl \
52+
# Install dev deploy dependencies
53+
git \
54+
dos2unix \
5255
# Install build time dependencies for 'bindfs'
5356
build-essential \
5457
automake \

wordpress/wp-cli.sh

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@ for var in \
6363
NPP_USER \
6464
NPP_UID \
6565
NPP_GID \
66+
NPP_DEV_ENABLED \
67+
NPP_DEV_PLUGIN_NAME \
68+
NPP_DEV_PLUGIN_DIR \
69+
NPP_DEV_TMP_CLONE_DIR \
70+
NPP_DEV_PLUGIN_FILE \
71+
NPP_DEV_GITHUB_REPO \
6672
WORDPRESS_DB_USER \
6773
WORDPRESS_DB_PASSWORD \
6874
WORDPRESS_DB_NAME \
@@ -183,6 +189,121 @@ else
183189
echo -e "${COLOR_YELLOW}${COLOR_BOLD}NPP-WP-CLI:${COLOR_RESET} ${COLOR_CYAN}No themes${COLOR_RESET} to install."
184190
fi
185191

192+
# Check development deploy wanted
193+
if [[ "${NPP_DEV_ENABLED}" -eq 1 ]]; then
194+
# Set variables
195+
PLUGIN_NAME="${NPP_DEV_PLUGIN_NAME}"
196+
PLUGIN_DIR="${NPP_DEV_PLUGIN_DIR}"
197+
TMP_CLONE_DIR="${NPP_DEV_TMP_CLONE_DIR}"
198+
PLUGIN_FILE="${NPP_DEV_PLUGIN_FILE}"
199+
GITHUB_REPO="${NPP_DEV_GITHUB_REPO}"
200+
201+
# -----------------------------------------------------------------------------
202+
# 1. Fetch latest development branch details from GitHub
203+
# -----------------------------------------------------------------------------
204+
TARGET_BRANCH=$(git ls-remote --heads "${GITHUB_REPO}" \
205+
| awk '{print $2}' \
206+
| sed 's#refs/heads/##' \
207+
| grep '^v[0-9]' \
208+
| sort -V \
209+
| tail -n1 \
210+
| awk '{$1=$1;print}')
211+
212+
LATEST_VERSION="${TARGET_BRANCH#v}"
213+
REMOTE_COMMIT_HASH=$(git ls-remote --heads "${GITHUB_REPO}" "refs/heads/${TARGET_BRANCH}" \
214+
| awk '{print substr($1,1,7)}' | awk '{$1=$1;print}')
215+
216+
echo -e "${COLOR_GREEN}${COLOR_BOLD}NPP-DEV:${COLOR_RESET} Latest branch: ${COLOR_CYAN}${TARGET_BRANCH}${COLOR_RESET}"
217+
echo -e "${COLOR_GREEN}${COLOR_BOLD}NPP-DEV:${COLOR_RESET} Latest dev version: ${COLOR_CYAN}${LATEST_VERSION}${COLOR_RESET}"
218+
echo -e "${COLOR_GREEN}${COLOR_BOLD}NPP-DEV:${COLOR_RESET} Remote commit: ${COLOR_CYAN}${REMOTE_COMMIT_HASH}${COLOR_RESET}"
219+
echo -e "${COLOR_GREEN}${COLOR_BOLD}NPP-DEV:${COLOR_RESET} ${COLOR_LIGHT_CYAN}######################${COLOR_RESET}"
220+
221+
# -----------------------------------------------------------------------------
222+
# 2. Retrieve the installed plugin version and commit hash
223+
# -----------------------------------------------------------------------------
224+
CURRENT_VERSION="0.0.0"
225+
INSTALLED_COMMIT_HASH=""
226+
227+
if [[ -f "${PLUGIN_FILE}" ]]; then
228+
CURRENT_VERSION=$(grep -i "Version:" "${PLUGIN_FILE}" | head -n1 | awk '{print $NF}' | awk '{$1=$1;print}')
229+
echo -e "${COLOR_GREEN}${COLOR_BOLD}NPP-DEV:${COLOR_RESET} Local version: ${COLOR_CYAN}${CURRENT_VERSION}${COLOR_RESET}"
230+
if grep -qi "Latest Commit:" "${PLUGIN_FILE}"; then
231+
INSTALLED_COMMIT_HASH=$(grep -i "Latest Commit:" "${PLUGIN_FILE}" | head -n1 | awk '{print $NF}' | awk '{$1=$1;print}')
232+
echo -e "${COLOR_GREEN}${COLOR_BOLD}NPP-DEV:${COLOR_RESET} Local commit: ${COLOR_CYAN}${INSTALLED_COMMIT_HASH}${COLOR_RESET}"
233+
else
234+
echo -e "${COLOR_YELLOW}${COLOR_BOLD}NPP-DEV:${COLOR_RESET} ${COLOR_CYAN}No commit history${COLOR_RESET} in plugin header."
235+
fi
236+
else
237+
echo -e "${COLOR_YELLOW}${COLOR_BOLD}NPP-DEV:${COLOR_RESET} Plugin not installed; proceeding with fresh deployment."
238+
fi
239+
240+
# -----------------------------------------------------------------------------
241+
# 3. Determine if an update is required
242+
# -----------------------------------------------------------------------------
243+
need_update=0
244+
245+
if [[ -f "${PLUGIN_FILE}" ]]; then
246+
# Check for version mismatch (installed version is older than latest)
247+
if [[ "${CURRENT_VERSION}" != "${LATEST_VERSION}" && \
248+
"$(echo -e "${CURRENT_VERSION}\n${LATEST_VERSION}" | sort -V | head -n1)" != "${LATEST_VERSION}" ]]; then
249+
echo -e "${COLOR_YELLOW}${COLOR_BOLD}NPP-DEV:${COLOR_RESET} Version discrepancy found..."
250+
need_update=1
251+
fi
252+
253+
# Check for commit hash mismatch
254+
if [[ "${INSTALLED_COMMIT_HASH}" != "${REMOTE_COMMIT_HASH}" ]]; then
255+
echo -e "${COLOR_YELLOW}${COLOR_BOLD}NPP-DEV:${COLOR_RESET} Commit hash discrepancy found..."
256+
need_update=1
257+
fi
258+
else
259+
need_update=1
260+
fi
261+
262+
# -----------------------------------------------------------------------------
263+
# 4. Deploy/update the plugin if required
264+
# -----------------------------------------------------------------------------
265+
if [[ "${need_update}" -eq 1 ]]; then
266+
echo -e "${COLOR_YELLOW}${COLOR_BOLD}NPP-DEV:${COLOR_RESET} Deploying development build ${COLOR_CYAN}${LATEST_VERSION}${COLOR_RESET}..."
267+
268+
# Remove the current plugin directory (if it exists)
269+
rm -rf "${PLUGIN_DIR:?}"
270+
271+
# Clone the target branch into a temporary directory
272+
mkdir -p "${TMP_CLONE_DIR:?}" && cd "${TMP_CLONE_DIR:?}"
273+
git clone --branch "${TARGET_BRANCH:?}" "${GITHUB_REPO:?}" . >/dev/null 2>&1
274+
275+
# Fix line-ending issues
276+
find "${TMP_CLONE_DIR:?}" -type f -exec dos2unix {} + >/dev/null 2>&1
277+
278+
# Retrieve the commit hash from the clone
279+
CLONED_COMMIT_HASH=$(git rev-parse --short HEAD)
280+
281+
# Move the cloned files to the plugin directory and clean up
282+
mv "${TMP_CLONE_DIR:?}" "${PLUGIN_DIR:?}"
283+
rm -rf "${TMP_CLONE_DIR:?}" >/dev/null 2>&1
284+
rm -rf "${PLUGIN_DIR:?}/.git" >/dev/null 2>&1
285+
rm -f "${PLUGIN_DIR:?}/README.md" "${PLUGIN_DIR:?}/version" >/dev/null 2>&1
286+
287+
# Update the plugin header: Version and Latest Commit
288+
if [[ -f "${PLUGIN_FILE}" ]]; then
289+
sed -i "s/^\(\s*\*\s*Version:\s*\).*$/\1${LATEST_VERSION}/" "${PLUGIN_FILE}"
290+
if grep -qi "Latest Commit:" "${PLUGIN_FILE}"; then
291+
sed -i "s/^\(\s*\*\s*Latest Commit:\s*\).*$/\1${CLONED_COMMIT_HASH}/" "${PLUGIN_FILE}"
292+
echo -e "${COLOR_GREEN}${COLOR_BOLD}NPP-DEV:${COLOR_RESET} Updated plugin header commit hash to ${COLOR_CYAN}${CLONED_COMMIT_HASH}${COLOR_RESET}"
293+
else
294+
sed -i "/Version:/a \ * Latest Commit: ${CLONED_COMMIT_HASH}" "${PLUGIN_FILE}"
295+
echo -e "${COLOR_GREEN}${COLOR_BOLD}NPP-DEV:${COLOR_RESET} Added commit hash ${COLOR_CYAN}${CLONED_COMMIT_HASH}${COLOR_RESET} to plugin header."
296+
fi
297+
fi
298+
299+
# Adjust ownership (ensure NPP_USER is set in the environment)
300+
chown -R "${NPP_USER}":"${NPP_USER}" "${PLUGIN_DIR}"
301+
echo -e "${COLOR_GREEN}${COLOR_BOLD}NPP-DEV:${COLOR_RESET} Deployed build ${COLOR_CYAN}${TARGET_BRANCH}${COLOR_RESET} with (commit ${COLOR_CYAN}${CLONED_COMMIT_HASH}${COLOR_RESET})."
302+
else
303+
echo -e "${COLOR_GREEN}${COLOR_BOLD}NPP-DEV:${COLOR_RESET} Plugin is up-to-date with commit ${COLOR_CYAN}${REMOTE_COMMIT_HASH}${COLOR_RESET}."
304+
fi
305+
fi
306+
186307
# Listen on dummy port for 'nginx' container health check
187308
echo -e "${COLOR_GREEN}${COLOR_BOLD}NPP-WP-CLI:${COLOR_RESET} Starting to listen on dummy port ${COLOR_CYAN}9999${COLOR_RESET}..."
188309
if ! nc -zv 127.0.0.1 9999 2>/dev/null; then

0 commit comments

Comments
 (0)