diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f7ecb0b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,123 @@ +FROM php:8.3-fpm + +# 1. Сначала обновляем и ставим минимальные зависимости +RUN apt-get update && apt-get install -y \ + wget \ + gnupg \ + ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +# 2. Устанавливаем зависимости для самых важных расширений +RUN apt-get update && apt-get install -y \ + libzip-dev \ + libxml2-dev \ + libonig-dev \ + libicu-dev \ + libcurl4-openssl-dev \ + libssl-dev \ + zlib1g-dev \ + && rm -rf /var/lib/apt/lists/* + +# 3. Устанавливаем БАЗОВЫЕ расширения (которые точно работают) +RUN docker-php-ext-install \ + bcmath \ + intl \ + mbstring \ + zip \ + opcache \ + pdo + +# 4. Устанавливаем зависимости для GD +RUN apt-get update && apt-get install -y \ + libpng-dev \ + libjpeg-dev \ + libfreetype6-dev \ + libwebp-dev \ + && rm -rf /var/lib/apt/lists/* + +# 5. Настраиваем и устанавливаем GD +RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \ + && docker-php-ext-install gd + +# 6. Устанавливаем зависимости для баз данных +RUN apt-get update && apt-get install -y \ + libpq-dev \ + && rm -rf /var/lib/apt/lists/* + +# 7. Устанавливаем расширения для баз данных +RUN docker-php-ext-install \ + mysqli \ + pdo_mysql \ + pdo_pgsql \ + pgsql + +# 8. Устанавливаем оставшиеся расширения +RUN docker-php-ext-install \ + calendar \ + ctype \ + curl \ + fileinfo \ + ftp \ + gettext \ + iconv \ + phar \ + posix \ + xml \ + dom \ + simplexml \ + sockets + +# 9. Устанавливаем зависимости для системных расширений +RUN apt-get update && apt-get install -y \ + libxslt-dev \ + libexif-dev \ + libffi-dev \ + && rm -rf /var/lib/apt/lists/* + +# 10. Устанавливаем системные расширения +RUN docker-php-ext-install \ + xsl \ + exif \ + ffi \ + shmop + +# 11. Устанавливаем PECL расширения +#RUN apt-get update && apt-get install -y \ +# libmagickwand-dev \ +# && rm -rf /var/lib/apt/lists/* + +# 12. Устанавливаем через PECL по одному с проверкой +RUN pecl install redis && docker-php-ext-enable redis + +# 13. Imagick может быть проблемным - ставим последним +#RUN if pecl install imagick; then \ +# docker-php-ext-enable imagick; \ +# fi + +# 14. Дополнительные PECL расширения (по желанию) - раскомментируйте если нужно +# RUN pecl install igbinary && docker-php-ext-enable igbinary && echo "✅ Igbinary установлен" +# RUN pecl install msgpack && docker-php-ext-enable msgpack && echo "✅ Msgpack установлен" +# RUN pecl install grpc && docker-php-ext-enable grpc && echo "✅ GRPC установлен" + +# 15. Memcache (устаревшее, но если нужно) - раскомментируйте если нужно +# RUN pecl install memcache && docker-php-ext-enable memcache && echo "✅ Memcache установлен" + +# 16. Установка Composer +RUN curl -sS https://getcomposer.org/installer | php -- \ + --install-dir=/usr/local/bin --filename=composer + +# 17. Создание пользователя +RUN groupadd -g 1000 www && \ + useradd -u 1000 -ms /bin/bash -g www www + +# 18. Копирование файлов проекта +COPY --chown=www:www . /var/www + +WORKDIR /var/www + +# 19. Смена пользователя +USER www + +# 20. Expose port 9000 и запуск php-fpm +EXPOSE 9000 +CMD ["php-fpm"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..013778d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,38 @@ +services: + #PHP Service + app: + build: + context: . + dockerfile: Dockerfile + image: kartoteka:latest + container_name: kartoteka_app + restart: unless-stopped + tty: true + environment: + SERVICE_NAME: app + SERVICE_TAGS: dev + working_dir: /var/www + volumes: + - ./:/var/www + - ./docker/php.ini:/usr/local/etc/php/conf.d/app.ini + networks: + - app-network + + #Nginx Service + webserver: + image: nginx:alpine + container_name: kartoteka_nginx + restart: unless-stopped + tty: true + ports: + - "8090:80" + volumes: + - ./:/var/www + - ./docker/nginx.conf:/etc/nginx/conf.d/default.conf + networks: + - app-network + +#Docker Networks +networks: + app-network: + driver: bridge diff --git a/docker/nginx.conf b/docker/nginx.conf new file mode 100644 index 0000000..f397fbd --- /dev/null +++ b/docker/nginx.conf @@ -0,0 +1,20 @@ +server { + listen 80; + index index.php index.html; + error_log /var/log/nginx/error.log; + access_log /var/log/nginx/access.log; + root /var/www/public; + location ~ \.php$ { + try_files $uri =404; + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass app:9000; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + } + location / { + try_files $uri $uri/ /index.php?$query_string; + gzip_static on; + } +} diff --git a/docker/php.ini b/docker/php.ini new file mode 100644 index 0000000..aacea9d --- /dev/null +++ b/docker/php.ini @@ -0,0 +1,2 @@ +upload_max_filesize=40M +post_max_size=40M diff --git a/package-lock.json b/package-lock.json index 8451b1a..a4f6cd1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1634,6 +1634,7 @@ "integrity": "sha512-9nF4PdUle+5ta4W5SyZdLCCmFd37uVimSjg1evcTqKJCyvCEEj12WKzOSBNak6r4im4J4iYXKH1OWpUV5LBYFg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@emotion/hash": "~0.8.0", "csstype": "~3.0.5" @@ -1657,6 +1658,7 @@ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", "license": "MIT", + "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/kossnocorp" @@ -2498,6 +2500,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -2902,6 +2905,7 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.4.tgz", "integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==", "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -3013,6 +3017,7 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.25.tgz", "integrity": "sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==", "license": "MIT", + "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.25", "@vue/compiler-sfc": "3.5.25",