|
; ****************************************************************************** |
|
; * Dockerfile for PHP Laravel Development Environment |
|
; * |
|
; * This Dockerfile creates a development environment for PHP Laravel projects. |
|
; * It includes PHP 8.3, Composer, Node.js with npm, and Laravel Installer. |
|
; * |
|
; * Arguments: |
|
; * - PROJECT_NAME: The name of the project/application. |
|
; * |
|
; * Environment Variables: |
|
; * - APP_NAME: The name of the application. |
|
; * - MYSQL_USER: MySQL database username. |
|
; * - MYSQL_PASSWORD: MySQL database password. |
|
; * - MYSQL_DATABASE: MySQL database name. |
|
; * |
|
; * Exposed Ports: |
|
; * - 22: SSH port |
|
; * - 8000: Laravel development server port |
|
; * |
|
; * Volumes: |
|
; * - /var/www: Application code volume |
|
; * |
|
; * Usage: |
|
; * 1. Build the Docker image: |
|
; * docker build --build-arg PROJECT_NAME=myapp -t laravel-dev . |
|
; * |
|
; * 2. Run the Docker container: |
|
; * docker run -p 8000:8000 -p 2222:22 --name laravel-container -v $(pwd):/var/www laravel-dev |
|
; * |
|
; ****************************************************************************** |
|
|
|
; ****************************************************************************** |
|
; * Base Image and Environment Setup |
|
; ****************************************************************************** |
|
FROM ubuntu:20.04 |
|
|
|
; ****************************************************************************** |
|
; * Arguments and Environment Variables |
|
; ****************************************************************************** |
|
ARG PROJECT_NAME=myapp |
|
ENV APP_NAME=${PROJECT_NAME} |
|
ENV MYSQL_USER=${PROJECT_NAME}user |
|
ENV MYSQL_PASSWORD=${PROJECT_NAME}password |
|
ENV MYSQL_DATABASE=${PROJECT_NAME} |
|
|
|
; ****************************************************************************** |
|
; * Installing Dependencies |
|
; ****************************************************************************** |
|
RUN apt-get update && apt-get install -y \ |
|
software-properties-common \ |
|
&& add-apt-repository ppa:ondrej/php \ |
|
&& apt-get update && apt-get install -y \ |
|
php8.3 \ |
|
php8.3-mysql \ |
|
php8.3-xml \ |
|
php8.3-mbstring \ |
|
php8.3-curl \ |
|
php8.3-zip \ |
|
unzip \ |
|
curl \ |
|
git \ |
|
openssh-server \ |
|
&& apt-get clean |
|
|
|
; ****************************************************************************** |
|
; * Installing Composer and NVM |
|
; ****************************************************************************** |
|
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer |
|
|
|
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash \ |
|
&& export NVM_DIR="$HOME/.nvm" \ |
|
&& [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" \ |
|
&& nvm install 20 \ |
|
&& nvm use 20 \ |
|
&& nvm alias default 20 |
|
|
|
; ****************************************************************************** |
|
; * Installing Node.js and npm |
|
; ****************************************************************************** |
|
RUN curl -fsSL https://deb.nodesource.com/setup_16.x | bash - \ |
|
&& apt-get install -y nodejs \ |
|
&& npm install -g npm@latest |
|
|
|
; ****************************************************************************** |
|
; * Installing Laravel Installer |
|
; ****************************************************************************** |
|
RUN composer global require laravel/installer |
|
|
|
; ****************************************************************************** |
|
; * Creating User and Group |
|
; ****************************************************************************** |
|
RUN groupadd -r ${PROJECT_NAME} && useradd -r -g ${PROJECT_NAME} ${PROJECT_NAME} |
|
|
|
; ****************************************************************************** |
|
; * Setting Working Directory and Copying Application Code |
|
; ****************************************************************************** |
|
WORKDIR /var/www |
|
|
|
COPY . . |
|
|
|
; ****************************************************************************** |
|
; * Installing Application Dependencies |
|
; ****************************************************************************** |
|
RUN composer install |
|
|
|
RUN npm install && npm update |
|
|
|
; ****************************************************************************** |
|
; * Exposing Ports and Configuring SSH |
|
; ****************************************************************************** |
|
EXPOSE 22 |
|
EXPOSE 8000 |
|
|
|
RUN echo 'root:password' | chpasswd |
|
|
|
RUN ssh-keygen -A |
|
|
|
; ****************************************************************************** |
|
; * Running Services |
|
; ****************************************************************************** |
|
CMD service ssh start && php artisan serve --host=0.0.0.0 --port=8000 |