Web Server Configuration¶
Before Puli can generate URLs for your public resources, you need to add a web server to the Puli configuration and publish your resources there.
Adding a Web Server¶
A web server can be added with the server --add
command of the Puli CLI:
$ php puli.phar server --add localhost public_html
This command adds a new server to your puli.json
. The command receives a
name for the server as first argument. Here we chose “localhost”, but you can
use any name you like. The second argument is the path to the document root of
the server.
Listing Web Servers¶
You can list all configured web servers with the server
command:
$ php puli.phar server
Server Name Installer Document Root URL Format
localhost symlink public_html /%s
The command returns a list of servers and their current configuration. In this
example, our configuration contains one server named “localhost”. The document
root of the server is the public_html
directory. Resources are installed
there using symbolic links. Finally, the format string /%s
is used to
generate URLs for the resources published to this server. You will learn more
about URL formats in Custom URL Formats.
Changing a Web Server¶
The configuration of a web server can be changed with the server -u
(or
--update
) command:
$ php puli.phar server -u localhost --document-root public_html
The first argument is the name of the server you want to change. You can pass
additional options with the updated options. Run server -h
to learn more
about the supported options and their usage:
$ php puli.phar server -h
Deleting a Web Server¶
A web server can be deleted with the server -d
(or --delete
) command:
$ php puli.phar server -d localhost
Publishing Resources¶
To publish resources to a server, use the publish
command:
$ php puli.phar publish /app/public localhost
The command stores the created mapping in your puli.json
file. The first
argument is the Puli path of the resource(s) you want to publish. The second
is the name of the server you want to publish the resources in.
By default, the resources are published in the document root of the web server. If you want to publish the resources in a sub-directory instead, pass the path to the directory in the third argument:
$ php puli.phar publish /batman/blog/public localhost /blog
Listing Public Resources¶
You can display all public resources with the publish
command:
$ php puli.phar publish
The following resources are published:
Server localhost
Location: public_html
Installer: symlink
URL Format: /%s
4f1f14 /app/public /
d1a9d5 /batman/blog/public /blog
Use "puli publish --install" to install the resources on your servers.
Every public resource is identified by a UUID. This UUID can be used to update or delete the resource.
Unpublishing a Resource¶
To unpublish a resource, call publish -d
(or --delete
) with the UUID of
the resource in question:
$ php puli.phar publish -d d1a9d5
Installing Resources¶
The publish
command does not actually move your public resources to the web
server. This is done by publish --install
:
$ php puli.phar publish --install
Installing /app/public into public_html via symlink...
Installing /batman/blog/public into public_html/blog via symlink...
By default, Puli tries to create symbolic links in the document of your web server. If that’s not possible, it will fall back to copying your files.
Custom URL Formats¶
By default, web servers use the URL format /%s
to generate URLs for
resources published to that server. The format is a simple sprintf-string: The
%s
in the format is replaced by the path of the resource relative to the
document root of the server.
For example, if you publish your /app/public
directory to the document root
of your server, Puli will generate the URL /images/logo.png
for the Puli
path /app/public/images/logo.png
.
You can change the URL format with the --url-format
option when adding or
changing a server:
$ php puli.phar server -u localhost --url-format http://example.com/%s
There are two major use cases for changing the default URL format:
- When you install your resources on a different server, you need to include the domain name in every URL.
- By appending a query string (like
?v2
) to your generated URLs you can implement a very simple cache invalidation mechanism for your resources.