167 lines
5.2 KiB
Bash
Executable File

#!/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 <<EOL > 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 <<EOL >> 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 <<EOL >> 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!"
}