initial commit

This commit is contained in:
2024-12-30 19:16:20 +09:00
commit d22b377f73
15 changed files with 619 additions and 0 deletions
+76
View File
@@ -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
}
+4
View File
@@ -0,0 +1,4 @@
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
#BASE_DIR="/home"
BASE_DIR="${SCRIPT_DIR}"
WORDPRESS_DIR="${BASE_DIR}/wordpress"
CADDY_DIR="${BASE_DIR}/caddy"
+49
View File
@@ -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
}
+33
View File
@@ -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
+17
View File
@@ -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
}
+89
View File
@@ -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
}