#!/bin/bash # Function to handle PHP Artisan commands php() { docker compose exec fpm "${@}" } # Function to handle Composer commands composer() { docker compose run --rm composer composer "${@}" } # Function to handle MySQL commands mysql() { docker compose exec database "$@" } # Function to fix storage permissions fix_storage() { docker compose exec fpm chown -R www-data:www-data storage/ docker compose exec fpm chmod -R ug+rw storage docker compose exec fpm chmod -R ug+x storage/framework storage/logs docker compose exec fpm chmod -R ug+rw bootstrap/cache docker compose exec fpm chmod -R ug+x bootstrap/cache } # Function to handle NPM commands npm() { docker compose exec node "${@}" } yarn() { docker compose exec node "${@}" } # Function to initialize the compose.yml file with user inputs init() { # Prompt for PHP version echo "Fetching available php-fpm versions..." curl https://git.shihaam.dev/dockerfiles/-/packages/container/php-fpm/versions -s | grep 'flex-item-title' | sed -n 's/.*>\(.*\)<.*/\1/p' read -p "Enter PHP version (default is latest): " php_version php_version=${php_version:-latest} # Prompt for Composer version echo "Fetching available composer versions..." curl -s "https://hub.docker.com/v2/repositories/library/composer/tags/?page_size=100" | jq -r '.results[].name' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | sort -V read -p "Enter Composer version (default is latest): " composer_version composer_version=${composer_version:-latest} # Prompt for Node.js version and if they want to use Node read -p "Do you want to include Node.js? (yes/no, default: yes): " include_node include_node=${include_node:-yes} if [[ "$include_node" =~ ^([yY][eE][sS]|[yY])$ ]]; then echo "Fetching available Node.js versions..." curl -s "https://hub.docker.com/v2/repositories/library/node/tags/?page_size=100" | jq -r '.results[].name' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | sort -V read -p "Enter Node.js version (default is latest): " node_version node_version=${node_version:-latest} fi # Prompt for database type echo "Select database type:" echo "1. MariaDB" echo "2. MySQL" echo "3. PostgreSQL" echo "4. None" read -p "Enter the number corresponding to your choice (default: MariaDB): " db_choice db_choice=${db_choice:-1} # Set default database versions and variables case "$db_choice" in 1) db_service="mariadb" echo "Fetching available Mariadb versions..." curl -s "https://hub.docker.com/v2/repositories/library/mariadb/tags/?page_size=100" | jq -r '.results[].name' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | sort -V read -p "Enter MariaDB version (default is latest): " db_version db_version=${db_version:-latest} db_image="mariadb:$db_version" ;; 2) db_service="mysql" echo "Fetching available MySQL versions..." curl -s "https://hub.docker.com/v2/repositories/library/mysql/tags/?page_size=100" | jq -r '.results[].name' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | sort -V read -p "Enter MySQL version (default is latest): " db_version db_version=${db_version:-latest} db_image="mysql:$db_version" ;; 3) db_service="postgres" echo "Fetching available PostgreSQL versions..." curl -s "https://hub.docker.com/v2/repositories/library/postgres/tags/?page_size=100" | jq -r '.results[].name' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | sort -V read -p "Enter PostgreSQL version (default is latest): " db_version db_version=${db_version:-latest} db_image="postgres:$db_version" ;; 4) db_service="" db_image="" ;; *) echo "Invalid choice, defaulting to MariaDB." db_service="mariadb" db_image="mariadb:latest" ;; esac # Create compose.yml based on the input cat < compose.yml services: fpm: hostname: fpm image: git.shihaam.dev/dockerfiles/php-fpm:$php_version volumes: - ./:/var/www/html/ nginx: hostname: nginx image: git.shihaam.dev/dockerfiles/nginx-fpm:latest volumes_from: - fpm ports: - 9000:80 composer: hostname: composer image: composer:$composer_version volumes: - ./:/var/www/html/ working_dir: /var/www/html EOL # Add the node service if included if [[ "$include_node" =~ ^([yY][eE][sS]|[yY])$ ]]; then cat <> compose.yml node: hostname: node image: node:$node_version volumes: - ./:/var/www/html/ working_dir: /var/www/html EOL fi # Add the database service if selected if [[ -n "$db_service" ]]; then cat <> compose.yml $db_service: image: $db_image hostname: $db_service restart: always environment: - MYSQL_RANDOM_ROOT_PASSWORD=yes - MYSQL_USER=cusport - MYSQL_PASSWORD=cusport - MYSQL_DATABASE=cusport volumes: - ./.db:/var/lib/mysql EOL fi echo "compose.yml file created successfully!" # Run composer create-project to initialize Laravel after creating compose.yml echo "Initializing Laravel project..." echo /.db >> .gitignore docker compose run --rm composer bash -c "composer create-project --prefer-dist laravel/laravel tmp && cp -R tmp/. . && rm -rf tmp" docker compose up -d echo "Laravel project initialized successfully!" }