init
This commit is contained in:
commit
5cd1a914fc
5 changed files with 231 additions and 0 deletions
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
tmp
|
||||||
|
oont
|
||||||
|
wordpress
|
||||||
|
db
|
37
README.md
Normal file
37
README.md
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# Live to Devlopment environment
|
||||||
|
|
||||||
|
## Usage:
|
||||||
|
1. Clone this repo and cd into it
|
||||||
|
```
|
||||||
|
git clone https://git.askar.tv/oont/oont-dev
|
||||||
|
cd oont-dev
|
||||||
|
```
|
||||||
|
2. download Themes, plugins, themes and extract them in oont
|
||||||
|
### Mac & Linux
|
||||||
|
```
|
||||||
|
curl -o temp.zip 'https://fs.nmd.mov/p/oont/?zip' && unzip temp.zip -d oont && rm temp.zip
|
||||||
|
```
|
||||||
|
### Windows
|
||||||
|
```
|
||||||
|
curl -o temp.zip 'https://fs.nmd.mov/p/oont/?zip' ; Expand-Archive temp.zip -DestinationPath oont ; Remove-Item temp.zip
|
||||||
|
```
|
||||||
|
### Manual Download
|
||||||
|
```
|
||||||
|
https://fs.nmd.mov/p/oont/?zip
|
||||||
|
|
||||||
|
!!Then Extract it into oont directory inside the repo!!
|
||||||
|
```
|
||||||
|
3. Install docker if you dont have it
|
||||||
|
```
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Sync
|
||||||
|
```
|
||||||
|
docker exec -it wp-wordpress-1 sync
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Pateience, your local wp should be at
|
||||||
|
```
|
||||||
|
http://localhost:8081
|
||||||
|
```
|
43
docker-compose.yaml
Normal file
43
docker-compose.yaml
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
services:
|
||||||
|
|
||||||
|
wordpress:
|
||||||
|
image: wordpress
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- 8081:80
|
||||||
|
environment:
|
||||||
|
WORDPRESS_HOME: "http://localhost:8081" # Your local wordpress url
|
||||||
|
WORDPRESS_SITEURL: "http://localhost:8081" # Your local wordpress url
|
||||||
|
WORDPRESS_DB_HOST: db # Your local ip address
|
||||||
|
PROD_DOMAIN: "oont.co" # Live Domain
|
||||||
|
DEV_DOMAIN: "localhost:8081" # Local wordpress domain
|
||||||
|
|
||||||
|
# Local DB as specified Below
|
||||||
|
WORDPRESS_DB_USER: exampleuser
|
||||||
|
WORDPRESS_DB_PASSWORD: examplepass
|
||||||
|
WORDPRESS_DB_NAME: oont-dev
|
||||||
|
|
||||||
|
# Live remote DB
|
||||||
|
PROD_DB_HOST: "sql688.your-server.de"
|
||||||
|
PROD_DB_USER: "wp_oonty_1"
|
||||||
|
PROD_DB_PASS: "m3B1iEjUcZ318j5W"
|
||||||
|
PROD_DB_NAME: "wp_oonty_db1"
|
||||||
|
volumes:
|
||||||
|
- ./wordpress:/var/www/html
|
||||||
|
- ./tmp/prod-dump.sql:/tmp/prod-dump.sql
|
||||||
|
- ./sync-prod-to-dev.sh:/usr/local/bin/sync
|
||||||
|
- ./wp-cli.phar:/usr/local/bin/wp
|
||||||
|
- ./oont/:/var/www/oont
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: mysql:8.0
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- 3306:3306
|
||||||
|
environment:
|
||||||
|
MYSQL_DATABASE: oont-dev
|
||||||
|
MYSQL_USER: exampleuser
|
||||||
|
MYSQL_PASSWORD: examplepass
|
||||||
|
MYSQL_RANDOM_ROOT_PASSWORD: '1'
|
||||||
|
volumes:
|
||||||
|
- ./db:/var/lib/mysql
|
147
sync-prod-to-dev.sh
Executable file
147
sync-prod-to-dev.sh
Executable file
|
@ -0,0 +1,147 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# sync-prod-to-dev.sh
|
||||||
|
#
|
||||||
|
# 1. Dump the Production WordPress DB using mysqldump
|
||||||
|
# 2. Transfer the dump file to Dev (optional step if needed)
|
||||||
|
# 3. Import the dump into Dev using mysql
|
||||||
|
# 4. Use WP-CLI on Dev to run search-replace for the domain
|
||||||
|
#
|
||||||
|
# Assumes:
|
||||||
|
# - You have MySQL credentials for both Prod and Dev
|
||||||
|
# - WP-CLI is installed on Dev
|
||||||
|
# - The Dev WordPress site is configured (wp-config.php) in the DEV_WP_PATH
|
||||||
|
# - SSH is set up between local/Dev and Prod (if they are separate servers)
|
||||||
|
#
|
||||||
|
# Note: For dev environment, typical domain is "http://localhost:8080" or "http://dev.example.com".
|
||||||
|
#
|
||||||
|
# IMPORTANT: This will overwrite your Dev database each time it's run.
|
||||||
|
####################################
|
||||||
|
# COPY THEMES AND PLUGINS
|
||||||
|
####################################
|
||||||
|
echo "=== Copying Themes, plugins & uploads ==="
|
||||||
|
cp -r /var/www/oont/themes/ /var/www/html/wp-content
|
||||||
|
cp -r /var/www/oont/plugins/ /var/www/html/wp-content
|
||||||
|
cp -r /var/www/oont/uploads /var/www/html/wp-content
|
||||||
|
cp -r /var/www/oont/uploads-webpc/ /var/www/html/wp-content
|
||||||
|
####################################
|
||||||
|
# 1. CONFIGURE THESE VARIABLES
|
||||||
|
####################################
|
||||||
|
|
||||||
|
# --- Production DB ---
|
||||||
|
PROD_DB_HOST="${PROD_DB_HOST}"
|
||||||
|
PROD_DB_USER="${PROD_DB_USER}"
|
||||||
|
PROD_DB_PASS="${PROD_DB_PASS}"
|
||||||
|
PROD_DB_NAME="${PROD_DB_NAME}"
|
||||||
|
|
||||||
|
|
||||||
|
# --- Dev DB ---
|
||||||
|
DEV_DB_HOST="${WORDPRESS_DB_HOST}"
|
||||||
|
DEV_DB_USER="${WORDPRESS_DB_USER}"
|
||||||
|
DEV_DB_PASS="${WORDPRESS_DB_PASSWORD}"
|
||||||
|
DEV_DB_NAME="${WORDPRESS_DB_NAME}"
|
||||||
|
|
||||||
|
|
||||||
|
# Temporary SQL dump file
|
||||||
|
SQL_FILE="/tmp/prod-dump.sql"
|
||||||
|
|
||||||
|
# Old (production) and New (dev) domain
|
||||||
|
OLD_DOMAIN="${PROD_DOMAIN}"
|
||||||
|
NEW_DOMAIN="${DEV_DOMAIN}"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
####################################
|
||||||
|
# 2. DUMP PRODUCTION DB
|
||||||
|
####################################
|
||||||
|
apt update && apt install mariadb-client
|
||||||
|
echo -e "\033[31mDo you want to dump the latest DB? [y/N]: \033[0m"
|
||||||
|
read -n 1 -r
|
||||||
|
echo # move to a new line
|
||||||
|
|
||||||
|
# Check the response (if the first character is y/Y, proceed)
|
||||||
|
if [[ "$REPLY" =~ ^[Yy]$ ]]; then
|
||||||
|
|
||||||
|
echo "=== Dumping Production DB from ${PROD_DB_HOST} ==="
|
||||||
|
mysqldump --single-transaction \
|
||||||
|
-h "${PROD_DB_HOST}" \
|
||||||
|
-u "${PROD_DB_USER}" \
|
||||||
|
-p"${PROD_DB_PASS}" \
|
||||||
|
--add-drop-table \
|
||||||
|
"${PROD_DB_NAME}" \
|
||||||
|
> "${SQL_FILE}" &
|
||||||
|
|
||||||
|
# Capture the PID of the mysqldump job
|
||||||
|
DUMP_PID=$!
|
||||||
|
|
||||||
|
echo "Mysqldump started (PID: $DUMP_PID). Monitoring file size..."
|
||||||
|
|
||||||
|
# While the dump is still running, show file size every 5 seconds
|
||||||
|
while kill -0 "$DUMP_PID" 2>/dev/null; do
|
||||||
|
CURRENT_SIZE=$(du -h "${SQL_FILE}" 2>/dev/null | cut -f1)
|
||||||
|
echo "Current dump size: $CURRENT_SIZE"
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
|
||||||
|
# Wait for mysqldump to finish (or capture its exit code)
|
||||||
|
wait "$DUMP_PID"
|
||||||
|
EXIT_CODE=$?
|
||||||
|
|
||||||
|
if [ $EXIT_CODE -eq 0 ]; then
|
||||||
|
echo "Dump completed successfully!"
|
||||||
|
else
|
||||||
|
echo "Dump failed with exit code $EXIT_CODE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
echo "Skipping database dump."
|
||||||
|
fi
|
||||||
|
|
||||||
|
####################################
|
||||||
|
# 3. IMPORT INTO DEV DB
|
||||||
|
####################################
|
||||||
|
echo "=== Importing dump into Dev DB on ${DEV_DB_HOST} ==="
|
||||||
|
mysql \
|
||||||
|
-h "${DEV_DB_HOST}" \
|
||||||
|
-u "${DEV_DB_USER}" \
|
||||||
|
-p"${DEV_DB_PASS}" \
|
||||||
|
"${DEV_DB_NAME}" \
|
||||||
|
< "${SQL_FILE}"
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "ERROR: Failed to import into dev DB."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
####################################
|
||||||
|
# 4. SEARCH & REPLACE WITH WP-CLI
|
||||||
|
####################################
|
||||||
|
echo "=== Running WP-CLI search-replace to fix domain: ${OLD_DOMAIN} -> ${NEW_DOMAIN} ==="
|
||||||
|
cd "${DEV_WP_PATH}" || {
|
||||||
|
echo "ERROR: Cannot cd into dev WP path: ${DEV_WP_PATH}"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# We do two replacements to handle both http and https references.
|
||||||
|
# If your production is strictly https, you can remove the http line.
|
||||||
|
# If your prod is strictly http, you can remove the https line.
|
||||||
|
# Otherwise, let's do both for completeness.
|
||||||
|
|
||||||
|
# Replace https://OLD_DOMAIN with http://NEW_DOMAIN
|
||||||
|
php -d memory_limit=512M /usr/local/bin/wp search-replace "https://${OLD_DOMAIN}" "http://${NEW_DOMAIN}" --skip-columns=guid --allow-root
|
||||||
|
php -d memory_limit=512M /usr/local/bin/wp search-replace "http://${OLD_DOMAIN}" "http://${NEW_DOMAIN}" --skip-columns=guid --allow-root
|
||||||
|
# If you want your dev site to be https too, adjust accordingly.
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "ERROR: WP-CLI search-replace failed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
####################################
|
||||||
|
# 5. CLEANUP (OPTIONAL)
|
||||||
|
####################################
|
||||||
|
# echo "=== Removing SQL file: ${SQL_FILE} ==="
|
||||||
|
# rm -f "${SQL_FILE}"
|
||||||
|
#
|
||||||
|
echo "=== Done! Your Dev DB is now synced from Prod and domain references updated. ==="
|
||||||
|
|
BIN
wp-cli.phar
Executable file
BIN
wp-cli.phar
Executable file
Binary file not shown.
Loading…
Reference in a new issue