diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..593f846 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +.git/ +.env diff --git a/.env b/.env new file mode 100644 index 0000000..3cc3d68 --- /dev/null +++ b/.env @@ -0,0 +1,14 @@ +# You can use any free port +WEB_PORT=8090 +MYSQL_PORT=3316 +PHPMYADMIN_PORT=8091 + +# Change this in production +MYSQL_ROOT_PASSWORD=gymone_root_password +MYSQL_DATABASE=gymone_db +MYSQL_USER=gymone_user +MYSQL_PASSWORD=gymone_password + +# This URL can be your domain +APP_URL=http://localhost:8090 +APP_ENV=production diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..718423b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,64 @@ +FROM ubuntu:22.04 + +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && apt-get install -y \ + apache2 \ + php8.1 \ + php8.1-cli \ + php8.1-common \ + php8.1-mysql \ + php8.1-zip \ + php8.1-gd \ + php8.1-mbstring \ + php8.1-curl \ + php8.1-xml \ + php8.1-bcmath \ + php8.1-bz2 \ + php8.1-calendar \ + php8.1-exif \ + php8.1-ftp \ + php8.1-gettext \ + php8.1-mysqli \ + php8.1-pdo-mysql \ + php8.1-pdo-sqlite \ + php8.1-phar \ + php8.1-readline \ + php8.1-fileinfo \ + php8.1-simplexml \ + libapache2-mod-php8.1 \ + curl \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +RUN a2enmod rewrite + +RUN echo '\n\ + Options FollowSymLinks\n\ + AllowOverride All\n\ + Require all granted\n\ +' > /etc/apache2/conf-available/gymone.conf \ + && a2enconf gymone + +RUN echo "memory_limit = 256M" > /etc/php/8.1/apache2/conf.d/gymone.ini && \ + echo "upload_max_filesize = 50M" >> /etc/php/8.1/apache2/conf.d/gymone.ini && \ + echo "post_max_size = 50M" >> /etc/php/8.1/apache2/conf.d/gymone.ini && \ + echo "max_execution_time = 300" >> /etc/php/8.1/apache2/conf.d/gymone.ini + +WORKDIR /var/www/html + +COPY . . + +RUN chmod -R 777 /var/www/html \ + && chown -R www-data:www-data /var/www/html + +RUN echo '#!/bin/bash\n\ +chmod -R 777 /var/www/html\n\ +chown -R www-data:www-data /var/www/html\n\ +service apache2 start\n\ +tail -f /var/log/apache2/error.log' > /entrypoint.sh \ + && chmod +x /entrypoint.sh + +EXPOSE 80 + +CMD ["/entrypoint.sh"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..91bd368 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,71 @@ +version: '3.8' + +services: + gymone-web: + build: . + container_name: gymone-app + ports: + - "${WEB_PORT:-8090}:80" + volumes: + # For development - mount current directory + - ./:/var/www/html + # Named volumes for persistent data + - gymone-data:/var/www/html/data + - gymone-uploads:/var/www/html/uploads + - gymone-cache:/var/www/html/cache + environment: + - APACHE_RUN_USER=www-data + - APACHE_RUN_GROUP=www-data + - DEBIAN_FRONTEND=noninteractive + networks: + - gymone-network + depends_on: + - gymone-mysql + restart: unless-stopped + + gymone-mysql: + image: mysql:8.0-debian + container_name: gymone-db + restart: unless-stopped + environment: + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-gymone_root_password} + MYSQL_DATABASE: ${MYSQL_DATABASE:-gymone_db} + MYSQL_USER: ${MYSQL_USER:-gymone_user} + MYSQL_PASSWORD: ${MYSQL_PASSWORD:-gymone_password} + ports: + - "${MYSQL_PORT:-3316}:3306" + volumes: + - mysql-data:/var/lib/mysql + networks: + - gymone-network + command: --default-authentication-plugin=mysql_native_password + + gymone-phpmyadmin: + image: phpmyadmin:latest + container_name: gymone-phpmyadmin + restart: unless-stopped + environment: + PMA_HOST: gymone-mysql + PMA_USER: root + PMA_PASSWORD: ${MYSQL_ROOT_PASSWORD:-gymone_root_password} + UPLOAD_LIMIT: 50M + ports: + - "${PHPMYADMIN_PORT:-8091}:80" + networks: + - gymone-network + depends_on: + - gymone-mysql + +volumes: + mysql-data: + driver: local + gymone-data: + driver: local + gymone-uploads: + driver: local + gymone-cache: + driver: local + +networks: + gymone-network: + driver: bridge