diff --git a/lamp/.flox/.gitattributes b/lamp/.flox/.gitattributes new file mode 100644 index 00000000..bb5491e1 --- /dev/null +++ b/lamp/.flox/.gitattributes @@ -0,0 +1 @@ +env/manifest.lock linguist-generated=true linguist-language=JSON diff --git a/lamp/.flox/.gitignore b/lamp/.flox/.gitignore new file mode 100644 index 00000000..8d211868 --- /dev/null +++ b/lamp/.flox/.gitignore @@ -0,0 +1,5 @@ +run/ +cache/ +lib/ +log/ +!env/ diff --git a/lamp/.flox/env.json b/lamp/.flox/env.json new file mode 100644 index 00000000..c850e07b --- /dev/null +++ b/lamp/.flox/env.json @@ -0,0 +1,4 @@ +{ + "name": "lamp", + "version": 1 +} \ No newline at end of file diff --git a/lamp/.flox/env/manifest.lock b/lamp/.flox/env/manifest.lock new file mode 100644 index 00000000..2453138a --- /dev/null +++ b/lamp/.flox/env/manifest.lock @@ -0,0 +1,411 @@ +{ + "lockfile-version": 1, + "manifest": { + "version": 1, + "install": { + "apacheHttpd": { + "pkg-path": "apacheHttpd" + }, + "mariadb": { + "pkg-path": "mariadb" + }, + "php": { + "pkg-path": "php" + } + }, + "vars": { + "MYSQL_PORT": "3306", + "WORDPRESS_DB_NAME": "wordpress", + "WORDPRESS_DB_PASSWORD": "wordpress", + "WORDPRESS_DB_USER": "wordpress", + "WORDPRESS_PORT": "8080" + }, + "hook": { + "on-activate": " echo \"🚀 Setting up LAMP stack with WordPress...\"\n\n # Create necessary directories\n mkdir -p \"$FLOX_ENV_CACHE/www\"\n mkdir -p \"$FLOX_ENV_CACHE/mysql-data\"\n mkdir -p \"$FLOX_ENV_CACHE/apache-logs\"\n mkdir -p \"$FLOX_ENV_CACHE/apache-conf\"\n mkdir -p \"$FLOX_ENV_CACHE/tmp\"\n\n # Set permissions\n chmod -R 755 \"$FLOX_ENV_CACHE/www\"\n\n # Download and install WordPress if not already present\n if [ ! -f \"$FLOX_ENV_CACHE/www/wp-config-sample.php\" ]; then\n echo \"📦 Downloading latest WordPress...\"\n cd \"$FLOX_ENV_CACHE/tmp\"\n curl -O https://wordpress.org/latest.tar.gz\n\n if [ -f latest.tar.gz ]; then\n echo \"📂 Extracting WordPress...\"\n tar -xzf latest.tar.gz\n cp -r wordpress/* \"$FLOX_ENV_CACHE/www/\"\n rm -rf wordpress latest.tar.gz\n echo \"✅ WordPress downloaded and extracted\"\n else\n echo \"❌ Failed to download WordPress\"\n exit 1\n fi\n else\n echo \"✅ WordPress already installed\"\n fi\n\n # Create Apache configuration\n cat > \"$FLOX_ENV_CACHE/apache-conf/httpd.conf\" << 'APACHE_EOF'\nServerRoot \"$FLOX_ENV_CACHE\"\nListen $WORDPRESS_PORT\n\nLoadModule mpm_prefork_module lib/httpd/modules/mod_mpm_prefork.so\nLoadModule authz_core_module lib/httpd/modules/mod_authz_core.so\nLoadModule dir_module lib/httpd/modules/mod_dir.so\nLoadModule mime_module lib/httpd/modules/mod_mime.so\nLoadModule log_config_module lib/httpd/modules/mod_log_config.so\nLoadModule unixd_module lib/httpd/modules/mod_unixd.so\nLoadModule rewrite_module lib/httpd/modules/mod_rewrite.so\nLoadModule php_module lib/httpd/modules/libphp.so\n\n\n DirectoryIndex index.php index.html\n\n\n\n SetHandler application/x-httpd-php\n\n\nServerAdmin admin@localhost\nDocumentRoot \"$FLOX_ENV_CACHE/www\"\n\n\n Options Indexes FollowSymLinks\n AllowOverride All\n Require all granted\n\n\nErrorLog \"$FLOX_ENV_CACHE/apache-logs/error.log\"\nCustomLog \"$FLOX_ENV_CACHE/apache-logs/access.log\" combined\n\nLogLevel warn\n\nTypesConfig etc/httpd/mime.types\nAPACHE_EOF\n\n # Initialize MariaDB if needed\n if [ ! -d \"$FLOX_ENV_CACHE/mysql-data/mysql\" ]; then\n echo \"🗄️ Initializing MariaDB...\"\n mysql_install_db --datadir=\"$FLOX_ENV_CACHE/mysql-data\" --auth-root-authentication-method=normal\n echo \"✅ MariaDB initialized\"\n else\n echo \"✅ MariaDB already initialized\"\n fi\n\n # Start MariaDB temporarily for database setup\n echo \"🔧 Starting MariaDB for configuration...\"\n mysqld --datadir=\"$FLOX_ENV_CACHE/mysql-data\" --socket=\"$FLOX_ENV_CACHE/mysql.sock\" --pid-file=\"$FLOX_ENV_CACHE/mysql.pid\" --skip-networking --skip-grant-tables &\n MYSQL_PID=$!\n\n # Wait for MariaDB to start\n sleep 5\n\n # Create WordPress database and user\n if mysql --socket=\"$FLOX_ENV_CACHE/mysql.sock\" -e \"USE $WORDPRESS_DB_NAME;\" 2>/dev/null; then\n echo \"✅ WordPress database already exists\"\n else\n echo \"🗄️ Setting up WordPress database...\"\n mysql --socket=\"$FLOX_ENV_CACHE/mysql.sock\" << MYSQL_EOF\nCREATE DATABASE IF NOT EXISTS $WORDPRESS_DB_NAME;\nFLUSH PRIVILEGES;\nMYSQL_EOF\n\n # Stop MariaDB\n kill $MYSQL_PID 2>/dev/null\n wait $MYSQL_PID 2>/dev/null\n\n # Restart without skip-grant-tables to create user\n echo \"🔧 Restarting MariaDB to create user...\"\n mysqld --datadir=\"$FLOX_ENV_CACHE/mysql-data\" --socket=\"$FLOX_ENV_CACHE/mysql.sock\" --pid-file=\"$FLOX_ENV_CACHE/mysql.pid\" --skip-networking &\n MYSQL_PID=$!\n sleep 5\n\n mysql --socket=\"$FLOX_ENV_CACHE/mysql.sock\" -u root << MYSQL_EOF\nCREATE USER IF NOT EXISTS '$WORDPRESS_DB_USER'@'localhost' IDENTIFIED BY '$WORDPRESS_DB_PASSWORD';\nGRANT ALL PRIVILEGES ON $WORDPRESS_DB_NAME.* TO '$WORDPRESS_DB_USER'@'localhost';\nFLUSH PRIVILEGES;\nMYSQL_EOF\n echo \"✅ Database and user configured\"\n fi\n\n # Stop temporary MariaDB\n kill $MYSQL_PID 2>/dev/null\n wait $MYSQL_PID 2>/dev/null\n\n # Create wp-config.php if it doesn't exist\n if [ ! -f \"$FLOX_ENV_CACHE/www/wp-config.php\" ]; then\n echo \"⚙️ Creating wp-config.php...\"\n cd \"$FLOX_ENV_CACHE/www\"\n\n # Get unique salts from WordPress API\n SALTS=$(curl -s https://api.wordpress.org/secret-key/1.1/salt/)\n\n cat > wp-config.php << WPCONFIG_EOF\n "$FLOX_ENV_CACHE/apache-conf/httpd.conf" << 'APACHE_EOF' +ServerRoot "$FLOX_ENV_CACHE" +Listen $WORDPRESS_PORT + +LoadModule mpm_prefork_module lib/httpd/modules/mod_mpm_prefork.so +LoadModule authz_core_module lib/httpd/modules/mod_authz_core.so +LoadModule dir_module lib/httpd/modules/mod_dir.so +LoadModule mime_module lib/httpd/modules/mod_mime.so +LoadModule log_config_module lib/httpd/modules/mod_log_config.so +LoadModule unixd_module lib/httpd/modules/mod_unixd.so +LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so +LoadModule php_module lib/httpd/modules/libphp.so + + + DirectoryIndex index.php index.html + + + + SetHandler application/x-httpd-php + + +ServerAdmin admin@localhost +DocumentRoot "$FLOX_ENV_CACHE/www" + + + Options Indexes FollowSymLinks + AllowOverride All + Require all granted + + +ErrorLog "$FLOX_ENV_CACHE/apache-logs/error.log" +CustomLog "$FLOX_ENV_CACHE/apache-logs/access.log" combined + +LogLevel warn + +TypesConfig etc/httpd/mime.types +APACHE_EOF + + # Initialize MariaDB if needed + if [ ! -d "$FLOX_ENV_CACHE/mysql-data/mysql" ]; then + echo "🗄️ Initializing MariaDB..." + mysql_install_db --datadir="$FLOX_ENV_CACHE/mysql-data" --auth-root-authentication-method=normal + echo "✅ MariaDB initialized" + else + echo "✅ MariaDB already initialized" + fi + + # Start MariaDB temporarily for database setup + echo "🔧 Starting MariaDB for configuration..." + mysqld --datadir="$FLOX_ENV_CACHE/mysql-data" --socket="$FLOX_ENV_CACHE/mysql.sock" --pid-file="$FLOX_ENV_CACHE/mysql.pid" --skip-networking --skip-grant-tables & + MYSQL_PID=$! + + # Wait for MariaDB to start + sleep 5 + + # Create WordPress database and user + if mysql --socket="$FLOX_ENV_CACHE/mysql.sock" -e "USE $WORDPRESS_DB_NAME;" 2>/dev/null; then + echo "✅ WordPress database already exists" + else + echo "🗄️ Setting up WordPress database..." + mysql --socket="$FLOX_ENV_CACHE/mysql.sock" << MYSQL_EOF +CREATE DATABASE IF NOT EXISTS $WORDPRESS_DB_NAME; +FLUSH PRIVILEGES; +MYSQL_EOF + + # Stop MariaDB + kill $MYSQL_PID 2>/dev/null + wait $MYSQL_PID 2>/dev/null + + # Restart without skip-grant-tables to create user + echo "🔧 Restarting MariaDB to create user..." + mysqld --datadir="$FLOX_ENV_CACHE/mysql-data" --socket="$FLOX_ENV_CACHE/mysql.sock" --pid-file="$FLOX_ENV_CACHE/mysql.pid" --skip-networking & + MYSQL_PID=$! + sleep 5 + + mysql --socket="$FLOX_ENV_CACHE/mysql.sock" -u root << MYSQL_EOF +CREATE USER IF NOT EXISTS '$WORDPRESS_DB_USER'@'localhost' IDENTIFIED BY '$WORDPRESS_DB_PASSWORD'; +GRANT ALL PRIVILEGES ON $WORDPRESS_DB_NAME.* TO '$WORDPRESS_DB_USER'@'localhost'; +FLUSH PRIVILEGES; +MYSQL_EOF + echo "✅ Database and user configured" + fi + + # Stop temporary MariaDB + kill $MYSQL_PID 2>/dev/null + wait $MYSQL_PID 2>/dev/null + + # Create wp-config.php if it doesn't exist + if [ ! -f "$FLOX_ENV_CACHE/www/wp-config.php" ]; then + echo "⚙️ Creating wp-config.php..." + cd "$FLOX_ENV_CACHE/www" + + # Get unique salts from WordPress API + SALTS=$(curl -s https://api.wordpress.org/secret-key/1.1/salt/) + + cat > wp-config.php << WPCONFIG_EOF + wordpress-db-backup.sql +``` + +### Reset Everything + +To start fresh, remove the cache directory: + +```bash +# Make sure services are stopped first +flox services stop + +# Remove cache +rm -rf .flox/cache/www .flox/cache/mysql-data + +# Reactivate to reinitialize +flox activate +``` + +## Troubleshooting + +### Port Already in Use + +If port 8080 is already in use, edit `.flox/env/manifest.toml` and change the `WORDPRESS_PORT` variable, then restart services. + +### MariaDB Won't Start + +Check if the socket file or PID file exists: +```bash +rm -f $FLOX_ENV_CACHE/mysql.sock $FLOX_ENV_CACHE/mysql.pid +``` + +### Apache Won't Start + +Check the error log: +```bash +cat $FLOX_ENV_CACHE/apache-logs/error.log +``` + +Common issues: +- PHP module not loading: Ensure PHP is installed in the environment +- Permission errors: Check directory permissions in `$FLOX_ENV_CACHE` + +### WordPress Shows Database Connection Error + +1. Ensure MariaDB is running: + ```bash + ps aux | grep mysqld + ``` + +2. Test database connection: + ```bash + mysql --socket="$FLOX_ENV_CACHE/mysql.sock" -u wordpress -pwordpress -e "USE wordpress;" + ``` + +3. Check wp-config.php has correct socket path: + ```bash + grep DB_HOST $FLOX_ENV_CACHE/www/wp-config.php + ``` + +## Development Tips + +### Install WordPress Plugins/Themes + +Navigate to the WordPress admin panel at `http://localhost:8080/wp-admin` and use the built-in installer, or: + +```bash +cd $FLOX_ENV_CACHE/www/wp-content/plugins +# Extract plugin here + +cd $FLOX_ENV_CACHE/www/wp-content/themes +# Extract theme here +``` + +### Enable WordPress Debug Mode + +Edit `$FLOX_ENV_CACHE/www/wp-config.php` and change: +```php +define( 'WP_DEBUG', true ); +define( 'WP_DEBUG_LOG', true ); +define( 'WP_DEBUG_DISPLAY', false ); +``` + +Debug log will be at: `$FLOX_ENV_CACHE/www/wp-content/debug.log` + +## Security Notes + +This setup is intended for local development only. For production use: + +1. Change the default database password +2. Set up proper root password for MariaDB: + ```bash + mariadb-secure-installation + ``` +3. Configure firewall rules +4. Use HTTPS with proper SSL certificates +5. Update WordPress regularly + +## Additional Resources + +- [WordPress Documentation](https://wordpress.org/documentation/) +- [MariaDB Documentation](https://mariadb.com/kb/en/) +- [Apache HTTP Server Documentation](https://httpd.apache.org/docs/) +- [PHP Documentation](https://www.php.net/docs.php) +- [Flox Documentation](https://flox.dev/docs)