167 lines
5.2 KiB
Bash
Executable File
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!"
|
|
}
|
|
|