mirror of
https://github.com/Luzifer/docker-php5-nginx.git
synced 2024-11-08 14:10:06 +00:00
Initial version of luzifer/php5-nginx
This commit is contained in:
commit
b9e20ca030
11 changed files with 475 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.vagrant
|
22
Dockerfile
Normal file
22
Dockerfile
Normal file
|
@ -0,0 +1,22 @@
|
|||
FROM ubuntu:14.04
|
||||
|
||||
MAINTAINER Knut Ahlers
|
||||
|
||||
RUN \
|
||||
apt-get -y update && \
|
||||
apt-get install -y ansible python-apt
|
||||
|
||||
ADD . /tmp/ansible
|
||||
|
||||
RUN \
|
||||
cd /tmp/ansible && \
|
||||
ansible-playbook playbook.yml -c local -i /tmp/ansible/inventory && \
|
||||
apt-get purge -y ansible python-apt && \
|
||||
apt-get autoremove -y && \
|
||||
echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \
|
||||
cd / && rm -rf /tmp/ansible && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
EXPOSE 80
|
||||
|
||||
CMD ["nginx"]
|
122
Vagrantfile
vendored
Normal file
122
Vagrantfile
vendored
Normal file
|
@ -0,0 +1,122 @@
|
|||
# -*- mode: ruby -*-
|
||||
# vi: set ft=ruby :
|
||||
|
||||
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
|
||||
VAGRANTFILE_API_VERSION = "2"
|
||||
|
||||
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
||||
# All Vagrant configuration is done here. The most common configuration
|
||||
# options are documented and commented below. For a complete reference,
|
||||
# please see the online documentation at vagrantup.com.
|
||||
|
||||
# Every Vagrant virtual environment requires a box to build off of.
|
||||
config.vm.box = "ubuntu/trusty64"
|
||||
|
||||
# Disable automatic box update checking. If you disable this, then
|
||||
# boxes will only be checked for updates when the user runs
|
||||
# `vagrant box outdated`. This is not recommended.
|
||||
# config.vm.box_check_update = false
|
||||
|
||||
# Create a forwarded port mapping which allows access to a specific port
|
||||
# within the machine from a port on the host machine. In the example below,
|
||||
# accessing "localhost:8080" will access port 80 on the guest machine.
|
||||
# config.vm.network "forwarded_port", guest: 80, host: 8080
|
||||
|
||||
# Create a private network, which allows host-only access to the machine
|
||||
# using a specific IP.
|
||||
# config.vm.network "private_network", ip: "192.168.33.10"
|
||||
|
||||
# Create a public network, which generally matched to bridged network.
|
||||
# Bridged networks make the machine appear as another physical device on
|
||||
# your network.
|
||||
# config.vm.network "public_network"
|
||||
|
||||
# If true, then any SSH connections made will enable agent forwarding.
|
||||
# Default value: false
|
||||
# config.ssh.forward_agent = true
|
||||
|
||||
# Share an additional folder to the guest VM. The first argument is
|
||||
# the path on the host to the actual folder. The second argument is
|
||||
# the path on the guest to mount the folder. And the optional third
|
||||
# argument is a set of non-required options.
|
||||
# config.vm.synced_folder "../data", "/vagrant_data"
|
||||
|
||||
# Provider-specific configuration so you can fine-tune various
|
||||
# backing providers for Vagrant. These expose provider-specific options.
|
||||
# Example for VirtualBox:
|
||||
#
|
||||
# config.vm.provider "virtualbox" do |vb|
|
||||
# # Don't boot with headless mode
|
||||
# vb.gui = true
|
||||
#
|
||||
# # Use VBoxManage to customize the VM. For example to change memory:
|
||||
# vb.customize ["modifyvm", :id, "--memory", "1024"]
|
||||
# end
|
||||
#
|
||||
# View the documentation for the provider you're using for more
|
||||
# information on available options.
|
||||
|
||||
# Enable provisioning with CFEngine. CFEngine Community packages are
|
||||
# automatically installed. For example, configure the host as a
|
||||
# policy server and optionally a policy file to run:
|
||||
#
|
||||
# config.vm.provision "cfengine" do |cf|
|
||||
# cf.am_policy_hub = true
|
||||
# # cf.run_file = "motd.cf"
|
||||
# end
|
||||
#
|
||||
# You can also configure and bootstrap a client to an existing
|
||||
# policy server:
|
||||
#
|
||||
# config.vm.provision "cfengine" do |cf|
|
||||
# cf.policy_server_address = "10.0.2.15"
|
||||
# end
|
||||
|
||||
# Enable provisioning with Puppet stand alone. Puppet manifests
|
||||
# are contained in a directory path relative to this Vagrantfile.
|
||||
# You will need to create the manifests directory and a manifest in
|
||||
# the file default.pp in the manifests_path directory.
|
||||
#
|
||||
# config.vm.provision "puppet" do |puppet|
|
||||
# puppet.manifests_path = "manifests"
|
||||
# puppet.manifest_file = "site.pp"
|
||||
# end
|
||||
|
||||
# Enable provisioning with chef solo, specifying a cookbooks path, roles
|
||||
# path, and data_bags path (all relative to this Vagrantfile), and adding
|
||||
# some recipes and/or roles.
|
||||
#
|
||||
# config.vm.provision "chef_solo" do |chef|
|
||||
# chef.cookbooks_path = "../my-recipes/cookbooks"
|
||||
# chef.roles_path = "../my-recipes/roles"
|
||||
# chef.data_bags_path = "../my-recipes/data_bags"
|
||||
# chef.add_recipe "mysql"
|
||||
# chef.add_role "web"
|
||||
#
|
||||
# # You may also specify custom JSON attributes:
|
||||
# chef.json = { :mysql_password => "foo" }
|
||||
# end
|
||||
|
||||
# Enable provisioning with chef server, specifying the chef server URL,
|
||||
# and the path to the validation key (relative to this Vagrantfile).
|
||||
#
|
||||
# The Opscode Platform uses HTTPS. Substitute your organization for
|
||||
# ORGNAME in the URL and validation key.
|
||||
#
|
||||
# If you have your own Chef Server, use the appropriate URL, which may be
|
||||
# HTTP instead of HTTPS depending on your configuration. Also change the
|
||||
# validation key to validation.pem.
|
||||
#
|
||||
# config.vm.provision "chef_client" do |chef|
|
||||
# chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME"
|
||||
# chef.validation_key_path = "ORGNAME-validator.pem"
|
||||
# end
|
||||
#
|
||||
# If you're using the Opscode platform, your validator client is
|
||||
# ORGNAME-validator, replacing ORGNAME with your organization name.
|
||||
#
|
||||
# If you have your own Chef Server, the default validation client name is
|
||||
# chef-validator, unless you changed the configuration.
|
||||
#
|
||||
# chef.validation_client_name = "ORGNAME-validator"
|
||||
end
|
6
files/cgi_pool
Normal file
6
files/cgi_pool
Normal file
|
@ -0,0 +1,6 @@
|
|||
-a 127.0.0.1
|
||||
-p 9000
|
||||
-C 10
|
||||
-u www-data
|
||||
-g www-data
|
||||
-- /usr/bin/php-cgi
|
22
files/fastcgi_params.inc
Normal file
22
files/fastcgi_params.inc
Normal file
|
@ -0,0 +1,22 @@
|
|||
fastcgi_param QUERY_STRING $query_string;
|
||||
fastcgi_param REQUEST_METHOD $request_method;
|
||||
fastcgi_param CONTENT_TYPE $content_type;
|
||||
fastcgi_param CONTENT_LENGTH $content_length;
|
||||
|
||||
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
|
||||
fastcgi_param REQUEST_URI $request_uri;
|
||||
fastcgi_param DOCUMENT_URI $document_uri;
|
||||
fastcgi_param DOCUMENT_ROOT $document_root;
|
||||
fastcgi_param SERVER_PROTOCOL $server_protocol;
|
||||
|
||||
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
|
||||
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
|
||||
|
||||
fastcgi_param REMOTE_ADDR $remote_addr;
|
||||
fastcgi_param REMOTE_PORT $remote_port;
|
||||
fastcgi_param SERVER_ADDR $server_addr;
|
||||
fastcgi_param SERVER_PORT $server_port;
|
||||
fastcgi_param SERVER_NAME $server_name;
|
||||
|
||||
# PHP only, required if PHP was built with --enable-force-cgi-redirect
|
||||
fastcgi_param REDIRECT_STATUS 200;
|
223
files/init-spawn-fcgi.sh
Normal file
223
files/init-spawn-fcgi.sh
Normal file
|
@ -0,0 +1,223 @@
|
|||
#! /bin/bash
|
||||
### BEGIN INIT INFO
|
||||
# Provides: spawn-fcgi
|
||||
# Required-Start: $remote_fs $syslog
|
||||
# Required-Stop: $remote_fs $syslog
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Description: initscript to manage a pool of workers
|
||||
# configured in $POOL_DIR
|
||||
### END INIT INFO
|
||||
|
||||
# Author: Lars Fronius <lars@jimdo.com>
|
||||
#
|
||||
|
||||
# Do NOT "set -e"
|
||||
|
||||
# PATH should only include /usr/* if it runs after the mountnfs.sh script
|
||||
PATH=/sbin:/usr/sbin:/bin:/usr/bin
|
||||
DESC="FCGI Worker Pools"
|
||||
NAME=spawn-fcgi
|
||||
DAEMON=/usr/bin/$NAME
|
||||
POOL_DIR=/etc/spawn-fcgi
|
||||
POOLS=$(find $POOL_DIR -type f -printf "%f\n")
|
||||
SCRIPTNAME=/etc/init.d/$NAME
|
||||
|
||||
# Exit if the package is not installed
|
||||
[ -x "$DAEMON" ] || exit 0
|
||||
|
||||
# Read configuration variable file if it is present
|
||||
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
|
||||
|
||||
# Load the VERBOSE setting and other rcS variables
|
||||
. /lib/init/vars.sh
|
||||
|
||||
# Define LSB log_* functions.
|
||||
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
|
||||
# and status_of_proc is working.
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
#
|
||||
# Function that starts the daemon/service
|
||||
#
|
||||
do_start()
|
||||
{
|
||||
if [[ -n "$1" ]]; then
|
||||
POOLS=$1
|
||||
fi
|
||||
# Return
|
||||
# 0 if daemon has been started
|
||||
# 1 if daemon was already running
|
||||
# 2 if daemon could not be started
|
||||
for POOL in $POOLS; do
|
||||
POOL_ARGS=$(<$POOL_DIR/$POOL)
|
||||
PIDFILE=/var/run/${POOL}_spawn-fcgi.pid
|
||||
ARGS_FILE=/var/run/${POOL}_spawn-fcgi.args
|
||||
echo "$POOL_ARGS" > $ARGS_FILE
|
||||
start-stop-daemon --start --quiet --exec $DAEMON --test > /dev/null \
|
||||
|| return 1
|
||||
start-stop-daemon --start --quiet --exec $DAEMON --pidfile $PIDFILE -- \
|
||||
-P $PIDFILE $POOL_ARGS \
|
||||
|| return 2
|
||||
# Add code here, if necessary, that waits for the process to be ready
|
||||
# to handle requests from services started subsequently which depend
|
||||
# on this one. As a last resort, sleep for some time.
|
||||
done
|
||||
}
|
||||
|
||||
#
|
||||
# Function that stops the daemon/service
|
||||
#
|
||||
do_stop()
|
||||
{
|
||||
if [[ -n "$1" ]]; then
|
||||
POOLS=$1
|
||||
fi
|
||||
# Return
|
||||
# 0 if daemon has been stopped
|
||||
# 1 if daemon was already stopped
|
||||
# 2 if daemon could not be stopped
|
||||
# other if a failure occurred
|
||||
for POOL in $POOLS; do
|
||||
PIDFILE=/var/run/${POOL}_spawn-fcgi.pid
|
||||
ARGS_FILE=/var/run/${POOL}_spawn-fcgi.args
|
||||
for pid in $(<$PIDFILE); do
|
||||
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile <(echo ${pid})
|
||||
RETVAL="$?"
|
||||
[ "$RETVAL" = 2 ] && return 2
|
||||
start-stop-daemon --stop --quiet --retry=0/30/KILL/5 --pidfile <(echo ${pid})
|
||||
[ "$?" = 2 ] && return 2
|
||||
done
|
||||
rm -f $PIDFILE
|
||||
rm -f $ARGS_FILE
|
||||
done
|
||||
}
|
||||
|
||||
#
|
||||
# Function that reloads spawn-fcgi which have changed configs
|
||||
#
|
||||
do_reload() {
|
||||
local action=0
|
||||
for POOL in $POOLS; do
|
||||
POOL_ARGS=$(<$POOL_DIR/$POOL)
|
||||
PIDFILE=/var/run/${POOL}_spawn-fcgi.pid
|
||||
ARGS_FILE=/var/run/${POOL}_spawn-fcgi.args
|
||||
if ! [ "$(<$ARGS_FILE)" = "$POOL_ARGS" ]; then
|
||||
log_daemon_msg "Restarting $DESC $POOL" "$NAME"
|
||||
do_stop $POOL
|
||||
case "$?" in
|
||||
0|1)
|
||||
do_start $POOL
|
||||
case "$?" in
|
||||
0) log_end_msg 0 ;;
|
||||
1) log_end_msg 1 ;; # Old process is still running
|
||||
*) log_end_msg 1 ;; # Failed to start
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
# Failed to stop
|
||||
log_end_msg 1
|
||||
;;
|
||||
esac
|
||||
let "action+=1"
|
||||
fi
|
||||
done
|
||||
if [ $action -eq 0 ]; then
|
||||
log_daemon_msg "No $DESC configuration has changed, not restarting" "$NAME"
|
||||
log_end_msg 0
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
check_pools() {
|
||||
local count=0
|
||||
local check=0
|
||||
local procs=0
|
||||
for POOL in $POOLS; do
|
||||
if [ -f /var/run/${POOL}_spawn-fcgi ]; then
|
||||
PIDFILE=/var/run/${POOL}_spawn-fcgi.pid
|
||||
for pid in $(<$PIDFILE); do
|
||||
let "count++"
|
||||
ps -p ${pid} 2>&1 > /dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
let "check++"
|
||||
fi
|
||||
done
|
||||
let "procs++"
|
||||
fi
|
||||
done
|
||||
if [ $procs -ne 0 ]; then
|
||||
if [ $count -eq $check ]; then
|
||||
return 0
|
||||
else
|
||||
return 3
|
||||
fi
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
|
||||
do_start
|
||||
case "$?" in
|
||||
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
||||
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
||||
esac
|
||||
;;
|
||||
stop)
|
||||
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
|
||||
do_stop
|
||||
case "$?" in
|
||||
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
||||
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
||||
esac
|
||||
;;
|
||||
status)
|
||||
check_pools
|
||||
case "$?" in
|
||||
0)
|
||||
log_daemon_msg "All $DESC running" "$NAME" && log_end_msg 0 ;;
|
||||
1)
|
||||
log_daemon_msg "All $DESC stopped" "$NAME" && log_end_msg 0 ;;
|
||||
*)
|
||||
log_daemon_msg "Something wrong with $DESC" "$NAME" && log_end_msg 1 ;;
|
||||
esac
|
||||
;;
|
||||
reload|force-reload)
|
||||
#
|
||||
# If do_reload() is not implemented then leave this commented out
|
||||
# and leave 'force-reload' as an alias for 'restart'.
|
||||
#
|
||||
do_reload
|
||||
;;
|
||||
restart)
|
||||
#
|
||||
# If the "reload" option is implemented then remove the
|
||||
# 'force-reload' alias
|
||||
#
|
||||
log_daemon_msg "Restarting $DESC" "$NAME"
|
||||
do_stop
|
||||
case "$?" in
|
||||
0|1)
|
||||
do_start
|
||||
case "$?" in
|
||||
0) log_end_msg 0 ;;
|
||||
1) log_end_msg 1 ;; # Old process is still running
|
||||
*) log_end_msg 1 ;; # Failed to start
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
# Failed to stop
|
||||
log_end_msg 1
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload}" >&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
|
||||
:
|
20
files/nginx.conf
Normal file
20
files/nginx.conf
Normal file
|
@ -0,0 +1,20 @@
|
|||
server {
|
||||
listen 80;
|
||||
access_log /var/log/nginx/phpframework_app;
|
||||
root /application/;
|
||||
|
||||
location / {
|
||||
try_files $uri /index.php?$args;
|
||||
}
|
||||
|
||||
location /index.php {
|
||||
fastcgi_pass_header Authorization;
|
||||
fastcgi_pass 127.0.0.1:9000;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
include /etc/nginx/includes/fastcgi_params.inc;
|
||||
}
|
||||
|
||||
location ~ /\.ht {
|
||||
deny all;
|
||||
}
|
||||
}
|
6
handlers/nginx.yml
Normal file
6
handlers/nginx.yml
Normal file
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
- name: restart nginx
|
||||
service: name=nginx state=restarted
|
||||
|
||||
- name: restart spawn_fcgi
|
||||
service: name=spawn-fcgi state=restarted
|
2
inventory
Normal file
2
inventory
Normal file
|
@ -0,0 +1,2 @@
|
|||
[local]
|
||||
localhost
|
8
playbook.yml
Normal file
8
playbook.yml
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
- hosts: all
|
||||
sudo: yes
|
||||
tasks:
|
||||
- include: tasks/nginx.yml
|
||||
|
||||
handlers:
|
||||
- include: handlers/nginx.yml
|
43
tasks/nginx.yml
Normal file
43
tasks/nginx.yml
Normal file
|
@ -0,0 +1,43 @@
|
|||
---
|
||||
- name: ensure required packages are installed
|
||||
apt: name={{ item }} update_cache=yes
|
||||
with_items:
|
||||
- nginx
|
||||
- php5-cgi
|
||||
- php5-curl
|
||||
- spawn-fcgi
|
||||
notify:
|
||||
- restart spawn_fcgi
|
||||
- restart nginx
|
||||
|
||||
- name: Remove default nginx configuration
|
||||
file: path=/etc/nginx/sites-enabled/default state=absent
|
||||
|
||||
- name: Configure nginx
|
||||
copy: src=files/nginx.conf dest=/etc/nginx/sites-enabled/phpframework_app
|
||||
notify:
|
||||
- restart nginx
|
||||
|
||||
- name: Create includes directory
|
||||
file: path=/etc/nginx/includes state=directory
|
||||
|
||||
- name: Configure fastcgi params
|
||||
copy: src=files/fastcgi_params.inc dest=/etc/nginx/includes/fastcgi_params.inc
|
||||
notify:
|
||||
- restart nginx
|
||||
|
||||
- name: Create spawn-fcgi directory
|
||||
file: path=/etc/spawn-fcgi state=directory
|
||||
|
||||
- name: Configure spawn-fcgi
|
||||
copy: src=files/cgi_pool dest=/etc/spawn-fcgi/phpframework_app
|
||||
notify:
|
||||
- restart spawn_fcgi
|
||||
|
||||
- name: Set up init script for spawn-fcgi
|
||||
copy: src=files/init-spawn-fcgi.sh dest=/etc/init.d/spawn-fcgi owner=root group=root mode=0755
|
||||
notify:
|
||||
- restart spawn_fcgi
|
||||
|
||||
- name: Enable spawn-fcgi service
|
||||
service: name=spawn-fcgi enabled=yes
|
Loading…
Reference in a new issue