From 7a6603b8da132c9bd9ee5a6911ec92921aa536f0 Mon Sep 17 00:00:00 2001 From: Avunu LLC Date: Wed, 11 Sep 2024 16:55:59 +0000 Subject: [PATCH] init temp branch --- .gitignore | 5 ++++- docker-compose.yml | 39 +++++++++++++++++++++++++++++++++++++++ docker-entrypoint.sh | 26 +++++++++++++++----------- flake.lock | 6 +++--- test.sh | 14 ++++++++++++++ wordpress.nix | 19 ++++++++++--------- 6 files changed, 85 insertions(+), 24 deletions(-) create mode 100644 docker-compose.yml create mode 100755 test.sh diff --git a/.gitignore b/.gitignore index 073c638..8781088 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ -result* result +result* +wordpress +wordpress* +wordpress/* \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..877149b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,39 @@ +version: '3.8' + +services: + wordpress: + # image: ghcr.io/avunu/wordpress:latest-php83 + image: wordpress-php82:latest + ports: + - "8080:80" + volumes: + - ./wordpress:/var/www/html + environment: + - WORDPRESS_DB_HOST=db + - WORDPRESS_DB_USER=wordpress + - WORDPRESS_DB_PASSWORD=wordpresspassword + - WORDPRESS_DB_NAME=wordpress + - WORDPRESS_AUTH_KEY=$AUTH_KEY + - WORDPRESS_SECURE_AUTH_KEY=$SECURE_AUTH_KEY + - WORDPRESS_LOGGED_IN_KEY=$LOGGED_IN_KEY + - WORDPRESS_NONCE_KEY=$NONCE_KEY + - WORDPRESS_AUTH_SALT=$AUTH_SALT + - WORDPRESS_SECURE_AUTH_SALT=$SECURE_AUTH_SALT + - WORDPRESS_LOGGED_IN_SALT=$LOGGED_IN_SALT + - WORDPRESS_NONCE_SALT=$NONCE_SALT + depends_on: + - db + + db: + image: mysql:8.0 + volumes: + - db_data:/var/lib/mysql + restart: always + environment: + - MYSQL_ROOT_PASSWORD=rootpassword + - MYSQL_DATABASE=wordpress + - MYSQL_USER=wordpress + - MYSQL_PASSWORD=wordpresspassword + +volumes: + db_data: \ No newline at end of file diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 5846751..49ce0b3 100644 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -1,5 +1,5 @@ -#!/bin/bash -set -euo pipefail +#!/bin/sh +set -e # Default WordPress URL if not provided WORDPRESS_SOURCE_URL=${WORDPRESS_SOURCE_URL:-"https://wordpress.org/latest.zip"} @@ -7,10 +7,11 @@ WORDPRESS_SOURCE_URL=${WORDPRESS_SOURCE_URL:-"https://wordpress.org/latest.zip"} # Function to download and install WordPress install_wordpress() { echo "WordPress not found. Downloading and installing from: $WORDPRESS_SOURCE_URL" - curl -o wordpress.zip "$WORDPRESS_SOURCE_URL" + wget -O wordpress.zip "$WORDPRESS_SOURCE_URL" # Create a temporary directory for extraction - TEMP_DIR=$(mktemp -d) + TEMP_DIR="/tmp/wordpress" + mkdir -p "$TEMP_DIR" unzip wordpress.zip -d "$TEMP_DIR" # Find WordPress files @@ -26,13 +27,13 @@ install_wordpress() { # Clean up rm -rf "$TEMP_DIR" wordpress.zip - chown -R nobody:nobody /var/www/html + # chown -R nobody:nobody /var/www/html # Import database if WORDPRESS_DB_URL is set if [ -n "${WORDPRESS_DB_URL:-}" ]; then - if command -v wp &> /dev/null; then + if command -v wp >/dev/null 2>&1; then import_db_wp_cli - elif command -v mysql &> /dev/null; then + elif command -v mysql >/dev/null 2>&1; then import_db_mysql else echo "Error: Neither wp-cli nor mysql cli are available. Cannot import database." @@ -43,7 +44,7 @@ install_wordpress() { # Function to import database using wp-cli import_db_wp_cli() { echo "Importing database using wp-cli from: $WORDPRESS_DB_URL" - curl -o db_dump.sql "$WORDPRESS_DB_URL" + wget -O db_dump.sql "$WORDPRESS_DB_URL" wp db import db_dump.sql --allow-root rm db_dump.sql } @@ -51,7 +52,7 @@ import_db_wp_cli() { # Function to import database using mysql cli import_db_mysql() { echo "Importing database using mysql from: $WORDPRESS_DB_URL" - curl -o db_dump.sql "$WORDPRESS_DB_URL" + wget -O db_dump.sql "$WORDPRESS_DB_URL" mysql -h"$WORDPRESS_DB_HOST" -u"$WORDPRESS_DB_USER" -p"$WORDPRESS_DB_PASSWORD" "$WORDPRESS_DB_NAME" < db_dump.sql rm db_dump.sql } @@ -59,13 +60,16 @@ import_db_mysql() { # Always copy the custom wp-config.php echo "Copying custom wp-config.php" cp /wp-config.php /var/www/html/wp-config.php -# chown nobody:nobody /var/www/html/wp-config.php chmod 644 /var/www/html/wp-config.php - # Check if WordPress is installed if [ ! -f /var/www/html/wp-includes/version.php ]; then install_wordpress fi +# # Always copy the custom mu-plugins +# echo "Copying custom mu-plugins" +# cp -r /mu-plugins /var/www/html/wp-content/mu-plugins +# chmod 755 /var/www/html/wp-content/mu-plugins + exec "$@" \ No newline at end of file diff --git a/flake.lock b/flake.lock index f588694..b6be346 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1723991338, - "narHash": "sha256-Grh5PF0+gootJfOJFenTTxDTYPidA3V28dqJ/WV7iis=", + "lastModified": 1725983898, + "narHash": "sha256-4b3A9zPpxAxLnkF9MawJNHDtOOl6ruL0r6Og1TEDGCE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8a3354191c0d7144db9756a74755672387b702ba", + "rev": "1355a0cbfeac61d785b7183c0caaec1f97361b43", "type": "github" }, "original": { diff --git a/test.sh b/test.sh new file mode 100755 index 0000000..11b3356 --- /dev/null +++ b/test.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +# Generate random keys and salts +export WORDPRESS_AUTH_KEY=$(openssl rand -base64 32) +export WORDPRESS_SECURE_AUTH_KEY=$(openssl rand -base64 32) +export WORDPRESS_LOGGED_IN_KEY=$(openssl rand -base64 32) +export WORDPRESS_NONCE_KEY=$(openssl rand -base64 32) +export WORDPRESS_AUTH_SALT=$(openssl rand -base64 32) +export WORDPRESS_SECURE_AUTH_SALT=$(openssl rand -base64 32) +export WORDPRESS_LOGGED_IN_SALT=$(openssl rand -base64 32) +export WORDPRESS_NONCE_SALT=$(openssl rand -base64 32) + +# Run docker-compose +docker-compose up \ No newline at end of file diff --git a/wordpress.nix b/wordpress.nix index fddea87..247b284 100644 --- a/wordpress.nix +++ b/wordpress.nix @@ -43,28 +43,26 @@ pkgs.dockerTools.buildLayeredImage { tag = "latest"; contents = [ phpBuild - pkgs.bashInteractive + pkgs.busybox pkgs.cacert - pkgs.coreutils - pkgs.curl - pkgs.findutils pkgs.frankenphp pkgs.ghostscript - pkgs.gnused pkgs.imagemagick pkgs.mysql.client - pkgs.unzip pkgs.vips + pkgs.wp-cli ]; config = { - Entrypoint = [ "/bin/bash" "/docker-entrypoint.sh" ]; - Cmd = [ "frankenphp" "php-server" "--root" "/var/www/html" "--listen" "0.0.0.0:80" ]; + Entrypoint = [ "${pkgs.busybox}/bin/sh" "/docker-entrypoint.sh" ]; + Cmd = [ "${pkgs.lib.getExe pkgs.frankenphp}" "php-server" "--root" "/var/www/html" "--listen" "0.0.0.0:80" ]; ExposedPorts = { - "80/tcp" = {}; + "80/tcp" = { }; }; Env = [ + "SERVER_NAME=0.0.0.0:80" "WORDPRESS_SOURCE_URL=https://wordpress.org/latest.zip" + "WORDPRESS_DB_URL=" "WORDPRESS_DB_HOST=localhost" "WORDPRESS_DB_USER=wordpress" "WORDPRESS_DB_PASSWORD=wordpress" @@ -81,10 +79,13 @@ pkgs.dockerTools.buildLayeredImage { }; extraCommands = '' + # Copy WordPress files mkdir -p var/www/html cp ${./wp-config.php} wp-config.php cp ${./docker-entrypoint.sh} docker-entrypoint.sh chmod +x docker-entrypoint.sh + + # Symlink CA certificates ln -s ${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt etc/ssl/certs/ca-certificates.crt ''; }