File Layout =========== This document describes how files are laid out in the Silver Lining code base, and on production servers (and how the two relate). General Patterns ---------------- Anything that is a "script" (a file meant to be executed) generally has a ``-`` in the name somewhere, to help indicate that it is *not* a module (since you cannot import names with dashes). The Silver Lining Code Base --------------------------- Here are some notable features: * The ``silverlining`` package is basically for *managing* the process. It is *not* installed on the production servers, nor is it generally importable by applications (nor is there anything worth importing). * The ``silversupport`` is uploaded to the production server, and also used locally. Applications may find it useful to import some routines from this library. There's also simply pieces here that both ``silverlining`` and server management scripts need to use, and this is the one shared codebase for that. * ``silversupport`` gets uploaded to ``/usr/local/share/silverlining/lib`` (this directory is added to ``sys.path`` to make it importable). * There are a bunch of scripts that are run *on the server*. Lots of what Silver Lining does is just ``ssh server "command"``, with the actual code on the server. All Silver Linings scripts are uploaded *from* ``silverlining/mgr-scripts/`` to ``/usr/local/share/silverlining/mgr-scripts/``. These are *only* run on the server, not locally. Each script also adds ``/usr/local/share/silverlining/lib`` to its path at the top of the script. * Files in ``silverlining/server-files/`` are rsync'd to the server's root. That is, the file layout under that directory matches the server layout exactly. ``silversupport`` and ``mgr-scripts`` are rsync'd separately. * Some of the files used for *setting up* a server are in ``silverlining/server-sync-scripts/``. This includes the *very important* ``update-from-server.sh`` script, which does most of the configuration of servers. If there's anything that needs to be done (or checked, or fixed) every time a server is created or updated, that's probably the place to look. (Per-service tasks, like installing a database configuration file, go in the service code.) Services -------- Services are modules in ``silversupport.services.*``, named after the service. Resource files for services go in that package as well (for instance, the ``pg_hba.conf`` that the postgis service uses is in ``silversupport/services/postgis-pg_hba.conf``). Server Files ------------ The files created by ``silver setup-node`` are generally put in ``/usr/local/share/silverlining/``. Configuration files get put wherever they belong, e.g., ``/etc/apache2/sites-enabled/wsgi_runner``. Log files go in ``/var/log/silverlining/``. Individual applications have log files in ``/var/log/silverlining/apps/APP_NAME``, specifically ``errors.log`` is anything written to stderr, stdout, or ``environ['wsgi.errors']``. These items are also grouped by request (all content written is buffered, written out in one chunk with a header/footer to help group it to a request).