Created
June 4, 2025 09:06
-
-
Save mpociot/1d6809a600701beca4fa544551acd2de to your computer and use it in GitHub Desktop.
OpenAI Codex PHP environment setup for Laravel
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/bin/bash -c "$(curl -fsSL https://php.new/install/linux)" | |
export PATH="/root/.config/herd-lite/bin/:$PATH" | |
composer install | |
cp .env.example .env | |
php artisan key:generate | |
php artisan migrate --seed --force -n | |
npm install | |
npm run build |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
here is the version with MySQL
IT WORKS
`#!/usr/bin/env bash
this makes the script strict:
-e: exit on any error
-u: error on undefined variables
-o pipefail: exit if any command in a pipeline fails
set -euo pipefail
Adds a package repository that provides the latest PHP versions
(see https://deb.sury.org/ for details)
add-apt-repository -y ppa:ondrej/php
Updates package lists to get the latest information about available packages
apt-get update
Install PHP 8.4 and extensions commonly needed for Symfony applications
apt-get install -y
php8.4
php8.4-cli
php8.4-mbstring
php8.4-xml
php8.4-intl
php8.4-gd
php8.4-zip
php8.4-curl
php8.4-mysql # ✅ Also switch from pgsql to mysql now
This makes PHP 8.4 available through the global 'php' binary,
which is expected by many commands
update-alternatives --install /usr/bin/php php /usr/bin/php8.4 84
update-alternatives --set php /usr/bin/php8.4
Install Composer as a global 'composer' binary following the safest practices
EXPECTED_CHECKSUM="$(curl -fsSL https://composer.github.io/installer.sig)"
curl -fsSL https://getcomposer.org/installer -o composer-setup.php
ACTUAL_CHECKSUM="$(sha384sum composer-setup.php | cut -d ' ' -f 1)"
if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ]; then
echo 'ERROR: Invalid composer installer checksum.' >&2
rm composer-setup.php
exit 1
fi
php composer-setup.php --install-dir=/usr/local/bin --filename=composer --quiet
rm composer-setup.php
Install the PHP dependencies of your project;
private packages require some more work explained later in this article
composer install --ignore-platform-req=ext-bcmath
Show installed versions to check if everything worked
php -v
composer --version
Load Laravel-style environment variables
DB_DATABASE="${DB_DATABASE:-mydb}"
DB_USERNAME="${DB_USERNAME:-myuser}"
DB_PASSWORD="${DB_PASSWORD:-mypassword}"
Default MySQL root password (optional, can be customized)
MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD:-root}"
apt-get install -y mysql-client mysql-common mysql-server-core-8.0
mkdir -p /tmp/mysql-data
mysqld --initialize-insecure --datadir=/tmp/mysql-data
Fix for secure-file-priv error
mkdir -p /var/lib/mysql-files
Start MySQL manually
nohup mysqld --user=root --datadir=/tmp/mysql-data --socket=/tmp/mysql.sock > /tmp/mysql.log 2>&1 &
Wait for socket
echo "Waiting for MySQL to be ready..."
for i in {30..0}; do
if [ -S /tmp/mysql.sock ]; then
echo "✅ MySQL socket is ready"
break
fi
sleep 1
done
if ! [ -S /tmp/mysql.sock ]; then
echo "❌ MySQL failed to start"
tail -n 50 /tmp/mysql.log || true
exit 1
fi
Setup user/db
mysql -u root --socket=/tmp/mysql.sock <<-EOSQL
CREATE DATABASE IF NOT EXISTS `${DB_DATABASE}`;
CREATE USER IF NOT EXISTS '${DB_USERNAME}'@'localhost' IDENTIFIED BY '${DB_PASSWORD}';
GRANT ALL PRIVILEGES ON `${DB_DATABASE}`.* TO '${DB_USERNAME}'@'localhost';
FLUSH PRIVILEGES;
EOSQL
Show installed MySQL version
mysql --version
cp .env.example .env
php artisan key:generate
php artisan migrate --seed --force -n
npm install --no-save
npm run build`