Compare commits

..

5 Commits

Author SHA1 Message Date
7937261925 🐞 fix: Update code formatting 2026-03-07 23:08:50 +00:00
7babef1372 🔵 other: Remove phpinfo file 2026-03-07 22:47:09 +00:00
d7ca1abece feature: Update bootstrap script 2026-03-07 22:35:04 +00:00
dev
e8d324e89d Samba shares, host file updates 2026-03-07 22:24:24 +00:00
dev
292e7e98bc Samba shares, host file updates 2026-03-07 22:23:55 +00:00
11 changed files with 707 additions and 560 deletions

View File

@@ -1,3 +1,5 @@
[user] [user]
name = VDI Devs name = VDI Devs
email = dev@vincentdesign.ca email = dev@vincentdesign.ca
[safe]
directory = /var/www

7
.gitignore vendored
View File

@@ -4,3 +4,10 @@
.well-known/ .well-known/
logs/ logs/
*.sqlite *.sqlite
.cache/
.config/
.local/
.npm/
.zcompdump
*.local

1
.zshrc Normal file
View File

@@ -0,0 +1 @@
# Created by newuser for 5.9

File diff suppressed because it is too large Load Diff

8
helpers/dev-sites.path Normal file
View File

@@ -0,0 +1,8 @@
[Unit]
Description=Watch for new dev sites
[Path]
PathModified=/var/www
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,6 @@
[Unit]
Description=Update hosts entries for dev sites
[Service]
Type=oneshot
ExecStart=/usr/local/bin/update-dev-hosts.sh

56
helpers/gen-wpcontent-shares Executable file
View File

@@ -0,0 +1,56 @@
#!/usr/bin/env bash
set -euo pipefail
wwwRoot="/var/www"
outFile="/etc/samba/wordops-wpcontent-shares.conf"
tmpFile="$(mktemp)"
# Change these to match your world:
sambaGroup="dev" # group allowed to access shares
forceGroup="dev" # group to force on created files (optional)
{
echo "; AUTO-GENERATED FILE - DO NOT EDIT"
echo "; Generated: $(date -Is)"
echo
shopt -s nullglob
for siteDir in "${wwwRoot}"/*; do
site="$(basename "${siteDir}")"
wpContent="${wwwRoot}/${site}/htdocs/wp-content"
# Only create shares for sites that look like WP installs
if [[ -d "${wpContent}" ]]; then
cat <<SHARE
[${site}]
comment = WordPress wp-content for ${site}
path = ${wpContent}
browseable = yes
writable = yes
read only = no
guest ok = no
; Lock access down to a group
valid users = @${sambaGroup}
; Keep permissions sane for webserver + devs
force group = ${forceGroup}
create mask = 0664
directory mask = 2775
; Optional: reduce Finder/Windows junk
veto files = /Thumbs.db/.DS_Store/._.DS_Store/
SHARE
fi
done
} > "${tmpFile}"
# Basic sanity check: refuse to install a broken file
testparm -s "${tmpFile}" >/dev/null
sudo mv "${tmpFile}" "${outFile}"
sudo chmod 0644 "${outFile}"
# Reload Samba to pick up new shares (no disconnect like restart)
sudo systemctl reload smbd || sudo systemctl reload samba

View File

@@ -0,0 +1,9 @@
[Unit]
Description=Watch /var/www and regenerate Samba shares on change
[Path]
PathChanged=/var/www
PathModified=/var/www
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,6 @@
[Unit]
Description=Generate Samba shares for WordPress wp-content folders
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/gen-wpcontent-shares

View File

@@ -0,0 +1,31 @@
#!/usr/bin/env bash
HOSTS_FILE="/etc/hosts"
SITES_DIR="/var/www"
DEV_DOMAIN="vincentdevelopment.ca"
TMP=$(mktemp)
echo "# BEGIN DEV-SITES" >> "$TMP"
for dir in "$SITES_DIR"/*; do
site=$(basename "$dir")
# Skip system dirs
[[ "$site" == "html" ]] && continue
echo "127.0.0.1 $site" >> "$TMP"
# Uncomment when system goes live
# echo "127.0.0.1 $site $site.$DEV_DOMAIN"
done
echo "# END DEV-SITES" >> "$TMP"
# Remove existing block
sed -i '/# BEGIN DEV-SITES/,/# END DEV-SITES/d' "$HOSTS_FILE"
# Append fresh block
cat "$TMP" >> "$HOSTS_FILE"
rm "$TMP"

View File

@@ -90,8 +90,10 @@ else
if wp user list --field=user_email | grep -q "^${ADMIN_EMAIL}\$"; then if wp user list --field=user_email | grep -q "^${ADMIN_EMAIL}\$"; then
echo "Admin email ${ADMIN_EMAIL} already in use; skipping user create." echo "Admin email ${ADMIN_EMAIL} already in use; skipping user create."
else else
wp user create "$ADMIN_USER" "$ADMIN_EMAIL" --role=administrator --user_pass="$(openssl rand -base64 16)" PASS=$(openssl rand -base64 16)
echo "Admin user $ADMIN_USER created with email $ADMIN_EMAIL (random password)."
wp user create "$ADMIN_USER" "$ADMIN_EMAIL" --role=administrator --user_pass="$PASS"
echo "Admin user $ADMIN_USER created with email $ADMIN_EMAIL ($PASS)."
fi fi
fi fi
@@ -119,6 +121,12 @@ DEV_PLUGINS=(
query-monitor query-monitor
user-switching user-switching
debug-bar debug-bar
https://docs.vincentdevelopment.ca/files/advanced-custom-fields-pro.zip
https://docs.vincentdevelopment.ca/files/gravity-forms.zip
autodescription
better-search-replace
google-site-kit
simple-history
) )
for PLUGIN in "${DEV_PLUGINS[@]}"; do for PLUGIN in "${DEV_PLUGINS[@]}"; do
@@ -151,7 +159,7 @@ if [[ -n "$THEME_STARTER_REPO" ]]; then
mkdir -p "$THEMES_DIR" mkdir -p "$THEMES_DIR"
# Slug from project name # Slug from project name
THEME_SLUG=$(echo "$PROJECT_NAME" | tr '[:upper:]' '[:lower:]' | tr -cs 'a-z0-9' '-') THEME_SLUG=$(echo "$PROJECT_NAME" | tr '[:upper:]' '[:lower:]' | tr -cs 'a-z0-9' '-' | sed 's/-$//')
[[ -z "$THEME_SLUG" ]] && THEME_SLUG="custom-theme" [[ -z "$THEME_SLUG" ]] && THEME_SLUG="custom-theme"
TARGET_THEME_DIR="${THEMES_DIR}/${THEME_SLUG}" TARGET_THEME_DIR="${THEMES_DIR}/${THEME_SLUG}"
@@ -187,4 +195,15 @@ else
echo "==> Theme starter repo not provided; skipping theme bootstrap." echo "==> Theme starter repo not provided; skipping theme bootstrap."
fi fi
echo "==> Installing dependencies..."
cd "$TARGET_THEME_DIR"
/usr/local/bin/composer install
/usr/bin/npm install
echo "==> Doing initial build..."
/usr/bin/npm run build
echo "==> Updating site permissions..."
sudo /usr/local/bin/wo-fix-perms.sh "$DOMAIN"
echo "==> Bootstrap complete." echo "==> Bootstrap complete."