Browse Source

First base version

Vova Tkach 4 years ago
parent
commit
ccceeb78c6

+ 8 - 0
.dockerignore

@@ -0,0 +1,8 @@
+.git
+build
+.dockerignore
+.gitignore
+Dockerfile
+LICENSE
+Makefile
+README.md

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+/build/*
+!/build/.keep

+ 29 - 0
Dockerfile

@@ -0,0 +1,29 @@
+FROM debian:latest
+MAINTAINER Vova Tkach <vladimirok5959@gmail.com>
+
+ENV PHP_VERSION=7.3
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+RUN apt-get -y update && \
+	apt-get -y upgrade && \
+	apt-get install -y nginx && \
+	apt-get install -y php7.3-fpm && \
+	apt-get install -y php7.3-cgi && \
+	apt-get install -y php7.3-gd && \
+	apt-get install -y php7.3-mysql && \
+	apt-get install -y php7.3-curl && \
+	/etc/init.d/nginx stop && \
+	/etc/init.d/php7.3-fpm stop && \
+	rm /var/www/html/* && \
+	echo "" >> /root/.profile && \
+	echo "TIME_ZONE=\$(cat /etc/timezone)" >> /root/.profile && \
+	echo "export TZ=\"\${TIME_ZONE}\"" >> /root/.profile && \
+	echo "" >> /root/.bashrc && \
+	echo "TIME_ZONE=\$(cat /etc/timezone)" >> /root/.bashrc && \
+	echo "export TZ=\"\${TIME_ZONE}\"" >> /root/.bashrc
+
+COPY --chown=root:root ./docker /
+RUN chown www-data:www-data /var/www/html/index.php
+
+CMD /start.sh

+ 30 - 0
Makefile

@@ -0,0 +1,30 @@
+VERSION="1.0.0"
+
+docker-build:
+	@-docker rmi docker-nginx-php-fpm:latest
+	docker build -t docker-nginx-php-fpm:latest ./
+
+docker-export:
+	@-rm ./build/docker-nginx-php-fpm.tar
+	docker save docker-nginx-php-fpm:latest > ./build/docker-nginx-php-fpm.tar
+
+docker-import:
+	@-docker rmi docker-nginx-php-fpm:latest
+	docker load < ./build/docker-nginx-php-fpm.tar
+
+docker-test:
+	docker run --rm \
+		--network host \
+		--name docker-nginx-php-fpm-test \
+		-v /etc/timezone:/etc/timezone:ro \
+		-it docker-nginx-php-fpm:latest
+
+docker-push:
+	docker tag docker-nginx-php-fpm:latest vladimirok5959/docker-nginx-php-fpm:${VERSION}
+	docker tag docker-nginx-php-fpm vladimirok5959/docker-nginx-php-fpm:latest
+	docker login
+	docker push vladimirok5959/docker-nginx-php-fpm:${VERSION}
+	docker push vladimirok5959/docker-nginx-php-fpm:latest
+	docker rmi vladimirok5959/docker-nginx-php-fpm:${VERSION}
+	docker rmi vladimirok5959/docker-nginx-php-fpm:latest
+	docker rmi docker-nginx-php-fpm:latest

+ 1 - 0
README.md

@@ -1,2 +1,3 @@
 # docker-nginx-php-fpm
+
 Docker image with Nginx + PHP + FPM

+ 0 - 0
build/.keep


+ 35 - 0
docker/etc/nginx/nginx.conf

@@ -0,0 +1,35 @@
+daemon off;
+user www-data;
+worker_processes 1;
+pid /run/nginx.pid;
+
+include /etc/nginx/modules-enabled/*.conf;
+
+events {
+	worker_connections 768;
+}
+
+http {
+	sendfile on;
+	tcp_nopush on;
+	tcp_nodelay on;
+	keepalive_timeout 65;
+	types_hash_max_size 2048;
+	server_tokens off;
+
+	include /etc/nginx/mime.types;
+	default_type application/octet-stream;
+
+	# SSL Settings
+	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+	ssl_prefer_server_ciphers on;
+
+	# Logging Settings
+	access_log /dev/stdout;
+	error_log /dev/stdout info;
+
+	gzip off;
+
+	include /etc/nginx/conf.d/*.conf;
+	include /etc/nginx/sites-enabled/*;
+}

+ 29 - 0
docker/etc/nginx/sites-available/default

@@ -0,0 +1,29 @@
+server {
+	listen 80 default_server;
+	listen [::]:80 default_server;
+
+	server_name _;
+	root /var/www/html;
+	index index.php;
+
+	location ~ /\. {
+		deny all;
+	}
+
+	location ~* ^.+\.(svg|svgz|eot|otf|woff|ttf|jpg|jpeg|gif|png|ico|txt)$ {
+		expires max;
+		access_log off;
+		log_not_found off;
+	}
+
+	location / {
+		try_files $uri $uri/ /index.php?$args;
+	}
+
+	location ~ \.php$ {
+		include fastcgi_params;
+		fastcgi_index index.php;
+		fastcgi_pass unix:/run/php/php7.3-fpm.sock;
+		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+	}
+}

+ 145 - 0
docker/etc/php/7.3/fpm/php-fpm.conf

@@ -0,0 +1,145 @@
+;;;;;;;;;;;;;;;;;;;;;
+; FPM Configuration ;
+;;;;;;;;;;;;;;;;;;;;;
+
+; All relative paths in this configuration file are relative to PHP's install
+; prefix (/usr). This prefix can be dynamically changed by using the
+; '-p' argument from the command line.
+
+;;;;;;;;;;;;;;;;;;
+; Global Options ;
+;;;;;;;;;;;;;;;;;;
+
+[global]
+; Pid file
+; Note: the default prefix is /var
+; Default Value: none
+pid = /run/php/php7.3-fpm.pid
+
+; Error log file
+; If it's set to "syslog", log is sent to syslogd instead of being written
+; into a local file.
+; Note: the default prefix is /var
+; Default Value: log/php-fpm.log
+; error_log = /var/log/php7.3-fpm.log
+error_log = /dev/stderr
+
+; syslog_facility is used to specify what type of program is logging the
+; message. This lets syslogd specify that messages from different facilities
+; will be handled differently.
+; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON)
+; Default Value: daemon
+;syslog.facility = daemon
+
+; syslog_ident is prepended to every message. If you have multiple FPM
+; instances running on the same server, you can change the default value
+; which must suit common needs.
+; Default Value: php-fpm
+;syslog.ident = php-fpm
+
+; Log level
+; Possible Values: alert, error, warning, notice, debug
+; Default Value: notice
+;log_level = notice
+
+; Log limit on number of characters in the single line (log entry). If the
+; line is over the limit, it is wrapped on multiple lines. The limit is for
+; all logged characters including message prefix and suffix if present. However
+; the new line character does not count into it as it is present only when
+; logging to a file descriptor. It means the new line character is not present
+; when logging to syslog.
+; Default Value: 1024
+;log_limit = 4096
+
+; Log buffering specifies if the log line is buffered which means that the
+; line is written in a single write operation. If the value is false, then the
+; data is written directly into the file descriptor. It is an experimental
+; option that can potentionaly improve logging performance and memory usage
+; for some heavy logging scenarios. This option is ignored if logging to syslog
+; as it has to be always buffered.
+; Default value: yes
+;log_buffering = no
+
+; If this number of child processes exit with SIGSEGV or SIGBUS within the time
+; interval set by emergency_restart_interval then FPM will restart. A value
+; of '0' means 'Off'.
+; Default Value: 0
+;emergency_restart_threshold = 0
+
+; Interval of time used by emergency_restart_interval to determine when
+; a graceful restart will be initiated.  This can be useful to work around
+; accidental corruptions in an accelerator's shared memory.
+; Available Units: s(econds), m(inutes), h(ours), or d(ays)
+; Default Unit: seconds
+; Default Value: 0
+;emergency_restart_interval = 0
+
+; Time limit for child processes to wait for a reaction on signals from master.
+; Available units: s(econds), m(inutes), h(ours), or d(ays)
+; Default Unit: seconds
+; Default Value: 0
+;process_control_timeout = 0
+
+; The maximum number of processes FPM will fork. This has been designed to control
+; the global number of processes when using dynamic PM within a lot of pools.
+; Use it with caution.
+; Note: A value of 0 indicates no limit
+; Default Value: 0
+; process.max = 128
+process.max = 1
+
+; Specify the nice(2) priority to apply to the master process (only if set)
+; The value can vary from -19 (highest priority) to 20 (lowest priority)
+; Note: - It will only work if the FPM master process is launched as root
+;       - The pool process will inherit the master process priority
+;         unless specified otherwise
+; Default Value: no set
+; process.priority = -19
+
+; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging.
+; Default Value: yes
+;daemonize = yes
+
+; Set open file descriptor rlimit for the master process.
+; Default Value: system defined value
+;rlimit_files = 1024
+
+; Set max core size rlimit for the master process.
+; Possible Values: 'unlimited' or an integer greater or equal to 0
+; Default Value: system defined value
+;rlimit_core = 0
+
+; Specify the event mechanism FPM will use. The following is available:
+; - select     (any POSIX os)
+; - poll       (any POSIX os)
+; - epoll      (linux >= 2.5.44)
+; - kqueue     (FreeBSD >= 4.1, OpenBSD >= 2.9, NetBSD >= 2.0)
+; - /dev/poll  (Solaris >= 7)
+; - port       (Solaris >= 10)
+; Default Value: not set (auto detection)
+;events.mechanism = epoll
+
+; When FPM is built with systemd integration, specify the interval,
+; in seconds, between health report notification to systemd.
+; Set to 0 to disable.
+; Available Units: s(econds), m(inutes), h(ours)
+; Default Unit: seconds
+; Default value: 10
+;systemd_interval = 10
+
+;;;;;;;;;;;;;;;;;;;;
+; Pool Definitions ;
+;;;;;;;;;;;;;;;;;;;;
+
+; Multiple pools of child processes may be started with different listening
+; ports and different management options.  The name of the pool will be
+; used in logs and stats. There is no limitation on the number of pools which
+; FPM can handle. Your system will tell you anyway :)
+
+; Include one or more files. If glob(3) exists, it is used to include a bunch of
+; files from a glob(3) pattern. This directive can be used everywhere in the
+; file.
+; Relative path can also be used. They will be prefixed by:
+;  - the global prefix if it's been set (-p argument)
+;  - /usr otherwise
+include=/etc/php/7.3/fpm/pool.d/*.conf

+ 14 - 0
docker/start.sh

@@ -0,0 +1,14 @@
+#!/bin/bash
+
+# Set timezone
+TIME_ZONE=$(cat /etc/timezone)
+export TZ="${TIME_ZONE}"
+
+# Env variables
+/usr/bin/printenv > /var/www/.env
+
+# PHP service
+/etc/init.d/php7.3-fpm start
+
+# Nginx
+/usr/sbin/nginx

+ 2 - 0
docker/var/www/html/index.php

@@ -0,0 +1,2 @@
+<?php
+  echo "It's works!";