mirror of
https://github.com/10h30/kazewp.git
synced 2026-05-12 15:21:20 +09:00
initial commit
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
#!/bin/bash
|
||||
|
||||
reload_caddy() {
|
||||
echo "Reloading Caddy configuration..."
|
||||
docker exec caddy caddy reload --config /etc/caddy/Caddyfile
|
||||
}
|
||||
|
||||
create_caddy_config() {
|
||||
export DOMAIN=$1
|
||||
export CONFIG_FILE="${CADDY_DIR}/sites/${DOMAIN}.caddy"
|
||||
|
||||
mkdir -p "${CADDY_DIR}/sites"
|
||||
|
||||
envsubst < "${SCRIPT_DIR}/templates/caddy.template" > "$CONFIG_FILE"
|
||||
|
||||
if ! grep -q "import sites/\*.caddy" "${CADDY_DIR}/Caddyfile"; then
|
||||
echo 'import sites/*.caddy' >> "${CADDY_DIR}/Caddyfile"
|
||||
fi
|
||||
}
|
||||
|
||||
create_caddy_docker_compose() {
|
||||
mkdir -p "${CADDY_DIR}"
|
||||
|
||||
# Create necessary directories
|
||||
mkdir -p "${CADDY_DIR}/sites"
|
||||
mkdir -p "${CADDY_DIR}/caddy_data"
|
||||
mkdir -p "${CADDY_DIR}/caddy_config"
|
||||
|
||||
# Create initial Caddyfile
|
||||
cat > "${CADDY_DIR}/Caddyfile" <<EOL
|
||||
{
|
||||
# Global options
|
||||
admin off
|
||||
persist_config off
|
||||
}
|
||||
|
||||
# Site configurations will be imported below
|
||||
import sites/*.caddy
|
||||
EOL
|
||||
|
||||
# Create docker-compose.yaml
|
||||
cat > "${CADDY_DIR}/compose.yaml" <<EOL
|
||||
services:
|
||||
caddy:
|
||||
container_name: caddy
|
||||
image: caddy:latest
|
||||
restart: always
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- ./Caddyfile:/etc/caddy/Caddyfile
|
||||
- ./sites:/etc/caddy/sites
|
||||
- ./caddy_data:/data
|
||||
- ./caddy_config:/config
|
||||
- ../wordpress:/var/www
|
||||
networks:
|
||||
- caddy_net
|
||||
|
||||
networks:
|
||||
caddy_net:
|
||||
name: caddy_net
|
||||
EOL
|
||||
}
|
||||
|
||||
setup_directories() {
|
||||
mkdir -p "${WORDPRESS_DIR}"
|
||||
mkdir -p "${CADDY_DIR}/sites"
|
||||
mkdir -p "${CADDY_DIR}/caddy_data"
|
||||
mkdir -p "${CADDY_DIR}/caddy_config"
|
||||
|
||||
if [ ! -f "${CADDY_DIR}/Caddyfile" ]; then
|
||||
echo "Creating initial Caddy configuration..."
|
||||
create_caddy_docker_compose
|
||||
fi
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
#BASE_DIR="/home"
|
||||
BASE_DIR="${SCRIPT_DIR}"
|
||||
WORDPRESS_DIR="${BASE_DIR}/wordpress"
|
||||
CADDY_DIR="${BASE_DIR}/caddy"
|
||||
@@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
|
||||
check_container_running() {
|
||||
docker ps --format '{{.Names}}' | grep -q "^$1$"
|
||||
return $?
|
||||
}
|
||||
|
||||
create_docker_compose() {
|
||||
export DOMAIN=$1
|
||||
export MYSQL_ROOT_PASSWORD=$2
|
||||
export MYSQL_PASSWORD=$3
|
||||
|
||||
envsubst < "${SCRIPT_DIR}/templates/docker-compose.yml.template" > compose.yaml
|
||||
#envsubst '$DOMAIN $MYSQL_ROOT_PASSWORD $MYSQL_PASSWORD' < "${SCRIPT_DIR}/templates/docker-compose.yml.template" > compose.yaml
|
||||
|
||||
}
|
||||
|
||||
start_services() {
|
||||
local FIRST_TIME=$1
|
||||
local DOMAIN=$2
|
||||
|
||||
if [ "$FIRST_TIME" = true ]; then
|
||||
echo "Starting Caddy server..."
|
||||
cd "${CADDY_DIR}"
|
||||
docker compose up -d
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}Failed to start Caddy server${NC}"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
# Check if Caddy is running and reload configuration
|
||||
if check_container_running "caddy"; then
|
||||
reload_caddy
|
||||
else
|
||||
echo -e "${RED}Caddy is not running. Please start it first${NC}"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Starting WordPress for ${DOMAIN}..."
|
||||
cd "${WORDPRESS_DIR}/${DOMAIN}"
|
||||
docker compose up -d
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}Failed to start WordPress services${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
|
||||
function generate_password() {
|
||||
openssl rand -base64 12
|
||||
}
|
||||
export -f generate_password
|
||||
|
||||
function save_credentials() {
|
||||
local WP_PROJECT_DIR=$1
|
||||
local DOMAIN=$2
|
||||
local ADMIN_USER=$3
|
||||
local ADMIN_PASSWORD=$4
|
||||
local ADMIN_EMAIL=$5
|
||||
|
||||
cat > "${WP_PROJECT_DIR}/credentials.txt" <<EOL
|
||||
WordPress Site Credentials
|
||||
========================
|
||||
Domain: https://${DOMAIN}
|
||||
Admin URL: https://${DOMAIN}/wp-admin
|
||||
Username: ${ADMIN_USER}
|
||||
Password: ${ADMIN_PASSWORD}
|
||||
Email: ${ADMIN_EMAIL}
|
||||
------------------------
|
||||
Directory Information:
|
||||
WordPress: ${WP_PROJECT_DIR}
|
||||
Caddy Config: ${CADDY_DIR}/sites/${DOMAIN}.caddy
|
||||
========================
|
||||
Generated on: $(date)
|
||||
EOL
|
||||
|
||||
chmod 600 "${WP_PROJECT_DIR}/credentials.txt"
|
||||
}
|
||||
export -f save_credentials
|
||||
@@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
|
||||
validate_domain() {
|
||||
if [[ ! $1 =~ ^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$ ]]; then
|
||||
echo -e "${RED}Invalid domain format${NC}"
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
validate_email() {
|
||||
if [[ ! $1 =~ ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ ]]; then
|
||||
echo -e "${RED}Invalid email format${NC}"
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
#!/bin/bash
|
||||
|
||||
wait_for_wordpress() {
|
||||
local DOMAIN=$1
|
||||
local MAX_ATTEMPTS=30
|
||||
local ATTEMPT=1
|
||||
|
||||
echo "Waiting for WordPress to be ready..."
|
||||
while [ $ATTEMPT -le $MAX_ATTEMPTS ]; do
|
||||
#if docker run --rm --network container:wordpress_${DOMAIN} wordpress:cli-php8.1 wp core is-installed > /dev/null 2>&1; then
|
||||
if docker compose run --rm wpcli core is-installed > /dev/null 2>&1; then
|
||||
return 0
|
||||
fi
|
||||
echo "Attempt $ATTEMPT of $MAX_ATTEMPTS..."
|
||||
sleep 10
|
||||
ATTEMPT=$((ATTEMPT + 1))
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
create_env_file() {
|
||||
export DOMAIN=$1
|
||||
export ADMIN_USER=$2
|
||||
export ADMIN_PASSWORD=$3
|
||||
export ADMIN_EMAIL=$4
|
||||
export MYSQL_ROOT_PASSWORD=$5
|
||||
export MYSQL_PASSWORD=$6
|
||||
|
||||
# Output file
|
||||
ENV_FILE=".env"
|
||||
# Generate .env file
|
||||
echo "Generating $ENV_FILE..."
|
||||
|
||||
cat <<EOL > "${WP_PROJECT_DIR}/$ENV_FILE"
|
||||
DOMAIN_NAME = ${DOMAIN}
|
||||
|
||||
## Wordpress ##
|
||||
WORDPRESS_DB_USER=wordpress
|
||||
WORDPRESS_DB_PASSWORD=${DB_PASSWORD}
|
||||
WORDPRESS_DB_NAME=wordpress
|
||||
WORDPRESS_DB_HOST=db_${DOMAIN}:3306
|
||||
|
||||
# Website Credentials
|
||||
WORDPRESS_ADMIN_USER=${ADMIN_USER}
|
||||
WORDPRESS_ADMIN_PASSWORD=${ADMIN_PASSWORD}
|
||||
WORDPRESS_ADMIN_EMAIL=${ADMIN_EMAIL}
|
||||
|
||||
## MYSQL ##
|
||||
MYSQL_USER=wordpress
|
||||
MYSQL_PASSWORD=${MYSQL_PASSWORD}
|
||||
MYSQL_DATABASE=wordpress
|
||||
MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
|
||||
|
||||
EOL
|
||||
|
||||
echo "$ENV_FILE generated successfully!"
|
||||
}
|
||||
|
||||
|
||||
create_wp_setup() {
|
||||
export DOMAIN=$1
|
||||
export ADMIN_USER=$2
|
||||
export ADMIN_PASSWORD=$3
|
||||
export ADMIN_EMAIL=$4
|
||||
export SITE_TITLE=$5
|
||||
|
||||
envsubst '$DOMAIN $ADMIN_USER $ADMIN_PASSWORD $ADMIN_EMAIL $SITE_TITLE' < "${SCRIPT_DIR}/templates/wp-setup.sh.template" > wp-setup.sh
|
||||
chmod +x wp-setup.sh
|
||||
}
|
||||
|
||||
run_wp_setup() {
|
||||
local DOMAIN=$1
|
||||
|
||||
echo "Running WordPress setup..."
|
||||
cd "${WORDPRESS_DIR}/${DOMAIN}"
|
||||
|
||||
#if ! wait_for_wordpress "$DOMAIN"; then
|
||||
# echo -e "${RED}WordPress failed to start properly${NC}"
|
||||
# return 1
|
||||
#fi
|
||||
|
||||
if ./wp-setup.sh 2>&1; then
|
||||
echo -e "${GREEN}WordPress setup completed successfully${NC}"
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}WordPress setup failed${NC}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
Reference in New Issue
Block a user