Skip to content

Instantly share code, notes, and snippets.

@RafaelKa
Created September 6, 2013 23:32
Show Gist options
  • Save RafaelKa/6471345 to your computer and use it in GitHub Desktop.
Save RafaelKa/6471345 to your computer and use it in GitHub Desktop.

Lua script and VHost.conf for generating mass virtual hosting environment like "user_dir" with "auto-map" on PHP5-FPM

Create unix users and add www-data to theyr groups.

Chown directories /srv/projects/projectname/workingspace to users and crate fpm-pools and put ports for fpm dependent on projectname in fpm-socket-ports-by-project-name.txt

; pool.d file for fpm
[iq]
user = iq
group = iq
listen = 127.0.0.1:9026
; .....
<VirtualHost *:80>
ServerName lua.local.dev
### LUA HOOKS
LuaRoot /etc/apache2/luascripts/lua.local.dev/
LuaHookTranslateName mass_vhost.lua handle
<Directory /srv/projects/*/workingspace>
AllowOverride None
Require all denied
</Directory>
### @todo: set this by LuaHooks only for matched DocumentRoot directory.
<Directory /srv/projects/*/workingspace/www >
AllowOverride All
Require all granted
</Directory>
# Clear PHP settings of this website
<FilesMatch "\.ph(p3?|tml)$">
SetHandler None
</FilesMatch>
### @todo: observe merging unix socket support for fcgi:// in mod_proxy_fcgi
RewriteMap FPM_PORTS txt:/etc/apache2/fpm-socket-ports-by-project-name.txt
<Directory /srv/projects/*/workingspace/www >
RewriteEngine on
RewriteRule ^/srv/projects/([^/]*)/(.*\.php(/.*)?)$ fcgi://127.0.0.1:${FPM_PORTS:$1}/srv/projects/$1/$2 [P]
</Directory>
</VirtualHost>
--[[ Script for generating mass virtual hosting environment like "user_dir"
Features:
Automatic detection and mapping on php5-fpm pool
currently with RewriteMap based on projectname => port Key-Value txt file,
by merging unix socket functionality for mod_proxy_fcgi RewriteMap is not needed anymore and
then row 28 can be replaces with:
RewriteRule ^/srv/projects/([^/]*)/(.*\.php(/.*)?)$ fcgi://socket=/path/to/$1.sock/./srv/projects/$1/$2 [P]
.
Ideas:
Switch DocumentRoot for webspaces(VHosts) relative to defaults with database/KV-heaps
(See f.e. MySQLs "MEMORY Storage Engine" -> http://dev.mysql.com/doc/refman/5.5/en/memory-storage-engine.html )
Make "projects" replaceable by configuration.
]]--
-- project name based on uri pattern "/projects/([^/]*)"
local projectName = ""
-- request uri relative to base uri(/projects/projectname/~)
local requestUri = ""
local documentRoot = ""
-- resolved file
-- @todo : follow symlinks only until /srv/projects/projectName/workingspace/./
local filePathAndFilename = ""
-- @todo : split and expand this function
function resolveVhostSettings(r)
projectName = r.uri:match("/projects/([^/]*)")
requestUri = r.uri:match("/projects/[^/]*/(.*)")
-- @todo : set different(relative) DocumentRoot on this place
if projectName then
documentRoot = "/srv/projects/" .. projectName .. "/workingspace/www"
end
if requestUri then
filePathAndFilename = documentRoot .. "/" .. requestUri
else
filePathAndFilename = documentRoot
end
end
function handle(r)
resolveVhostSettings(r)
setDocumentRoot(r)
setFileName(r)
return apache2.OK
end
function setDocumentRoot(r)
if documentRoot then
r:set_document_root(documentRoot)
end
end
function setFileName(r)
r.filename = filePathAndFilename
end
-- @todo : connect to database and resolve VHost-settings
; pool.d file for fpm
[puzzle]
user = puzzle
group = puzzle
listen = 127.0.0.1:9025
; .....
@RafaelKa
Copy link
Author

RafaelKa commented Sep 6, 2013

https://gist.github.com/RafaelKa/6471345#file-lua-local-dev-conf-L26-L29 fixes problem with order of execution:
without wrapped like here https://gist.github.com/RafaelKa/7302c4e934c13a710694#file-dynamic-php-fpm-conf-L22 LuaHookTranslateName comes not to executing code and DocumentRoot is then /var/www (also default)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment