From e95066416f28d6c35c8396e12abf6a45e9b7b373 Mon Sep 17 00:00:00 2001 From: Bram Kelchtermans Date: Sun, 9 Jun 2024 20:40:04 +0200 Subject: [PATCH] laravel dev docker --- Dockers/laravel-dev-server/Dockerfile | 50 +++++++++++++++++++++++ Dockers/laravel-dev-server/entrypoint.sh | 51 ++++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 Dockers/laravel-dev-server/Dockerfile create mode 100644 Dockers/laravel-dev-server/entrypoint.sh diff --git a/Dockers/laravel-dev-server/Dockerfile b/Dockers/laravel-dev-server/Dockerfile new file mode 100644 index 0000000..87b459b --- /dev/null +++ b/Dockers/laravel-dev-server/Dockerfile @@ -0,0 +1,50 @@ +# Use an official PHP runtime as a parent image +FROM php:8.1-fpm + +# Set the working directory +WORKDIR /workspace + +# Install dependencies +RUN apt-get update && apt-get install -y \ + git \ + openssh-client \ + unzip \ + libpng-dev \ + libjpeg-dev \ + libfreetype6-dev \ + libonig-dev \ + libzip-dev \ + libpq-dev \ + zip \ + fish \ + && docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install gd mbstring zip pdo pdo_mysql pdo_pgsql + +# Install Composer +COPY --from=composer:latest /usr/bin/composer /usr/bin/composer + +# Install Node.js and npm +RUN curl -sL https://deb.nodesource.com/setup_16.x | bash - && \ + apt-get install -y nodejs + +# Install PM2 globally +RUN npm install -g pm2 + +# Switch to Fish shell +SHELL [ "fish", "--command" ] +RUN chsh -s /usr/bin/fish +ENV SHELL /usr/bin/fish +ENV LANG=C.UTF-8 LANGUAGE=C.UTF-8 LC_ALL=C.UTF-8 + +# Create a directory for the SSH keys +RUN mkdir -p /root/.ssh + +# Copy the entrypoint script into the container +COPY entrypoint.sh /usr/local/bin/entrypoint.sh +RUN chmod +x /usr/local/bin/entrypoint.sh + +# Expose ports +EXPOSE 8000 + +# Set the entrypoint +ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] diff --git a/Dockers/laravel-dev-server/entrypoint.sh b/Dockers/laravel-dev-server/entrypoint.sh new file mode 100644 index 0000000..e3e4d46 --- /dev/null +++ b/Dockers/laravel-dev-server/entrypoint.sh @@ -0,0 +1,51 @@ +#!/bin/bash +set -e + +# Check if the required environment variables are set +if [ -z "$REPO_URL" ]; then + echo "Error: REPO_URL environment variable must be set." + exit 1 +fi + +# Check if the SSH key exists +if [ ! -f /root/.ssh/id_rsa ]; then + echo "Error: SSH private key not found at /root/.ssh/id_rsa" + exit 1 +fi + +# Ensure the SSH key has the correct permissions +chmod 600 /root/.ssh/id_rsa + +# Extract the domain from the REPO_URL +DOMAIN=$(echo $REPO_URL | awk -F'[@:]' '{print $3}') + +# Check if the repository directory already exists +if [ ! -d "/workspace/.git" ]; then + # Add the SSH configuration for the domain + echo "Host $DOMAIN + HostName $DOMAIN + IdentityFile /root/.ssh/id_rsa + StrictHostKeyChecking no + " >> /root/.ssh/config + # Clone the repository if it doesn't exist + git clone $REPO_URL /workspace +fi + +# Add the public SSH key to authorized_keys +if [ -f /root/.ssh/hostkey.pub ]; then + cat /root/.ssh/hostkey.pub >> /root/.ssh/authorized_keys +fi + +# Change to the repository directory +cd /workspace + +# Install PHP dependencies +composer install + +# Copy the environment file to the repository's environments directory +if [ -f /environment/.env ]; then + cp /environment/.env /workspace/.env +fi + +# Start the application with pm2 +exec pm2-runtime "php artisan serve --host=0.0.0.0 --port=8000"