=encoding utf8 =head1 NAME Slovo - Искони бѣ Слово =head1 SYNOPSIS Install Slovo locally with all dependencies in less than two minutes time curl -L https://cpanmin.us | perl - -M https://cpan.metacpan.org \ -q -n -l ~/opt/slovo Slovo Run slovo for the first time in debug mode morbo ~/opt/slovo/bin/slovo Visit L. For help visit L. =head1 DESCRIPTION L is a simple to install and extensible L L with nice core features, listed below. This is a usable release, yet B and B! The project is in active development, so expect often breaking changes. =over =item * On the fly generation of static pages under Apache/CGI – perfect for cheap shared hosting and blogging – BETA; =item * Multi-domain support - BETA; =item * Multi-language pages - WIP; =item * Cached published pages and content - DONE; =item * Multi-user support - DONE; =item * User onboarding - WIP; =item * User sign in - DONE; =item * Managing pages, content, domains, users - WIP; =item * Managing groups - BASIC; =item * Multiple groups per user - DONE; =item * Ownership and permissions management per page and it's content - BETA; =item * Automatic 301 and 308 (Moved Permanently) redirects for renamed pages and content - DONE; =item * Embedded fonts for displaying all L and L characters - DONE; =item * OpenAPI 2/3.0 (Swagger) REST API - BASIC; =item * Embedded Trumbowyg - L; =item * Embedded Editor.md - L; =item * Example startup scripts for slovo and slovo_minion services for L, L and NGINX vhost configuration files. =item * Inflatable embedded themes support - BETA; =item * and more to come… =back By default Slovo comes with SQLite database, but support for PostgreSQL or MySQL is about to be added when needed. It is just a question of making compatible and/or translating some limited number of SQL queries to the corresponding SQL dialects. Contributors are welcome. The word "slovo" (слово) has one unchanged meaning during the last millennium among all slavic languages. It is actually one language that started splitting apart less than one thousand years ago. The meaning is "word" – the God's word (when used with capital letter). Hence the self-naming of this group of people C - people who have been given the God's word or people who can speak. All others were considered "mute", hence the naming (немци)... =head1 INSTALL All you need is a one-liner, it takes less than a minute. $ curl -L https://cpanmin.us | perl - -M https://cpan.metacpan.org -n -l ~/opt/slovo Slovo We recommend the use of a L environment. If you already downloaded it and you have L. $ cpanm -l ~/opt/slovo Slovo-XXXX.XX.XX.tar.gz Or even if you don't have C. Note that you need to install dependencies first. Set C, remove old Slovo installation, make, test, install, create data directory for sqlite database and run slovo to see available commands. tar zxf Slovo-XXXX.XX.XX.tar.gz cd Slovo-XXXX.XX.XX INSTALL_BASE=~/opt/slovo && rm -rf $INSTALL_BASE && make distclean; \ perl Makefile.PL INSTALL_BASE=$INSTALL_BASE && make && make test && make install \ && $INSTALL_BASE/bin/slovo eval 'app->home->child("data")->make_path({mode => 0700});' \ && $INSTALL_BASE/bin/slovo Use cpanm to install or update into a custom location as self contained application and run slovo to see how it's going. # From metacpan. org export PREFIX=~/opt/slovo; cpanm -M https://cpan.metacpan.org -n --self-contained -l $PREFIX Slovo \ $PREFIX/bin/slovo eval 'app->home->child("data")->make_path({mode => 0700});' \ $PREFIX/bin/slovo # From the directory where you unpacked Slovo export PREFIX=~/opt/slovo; cpanm . -n --self-contained -l $PREFIX Slovo $PREFIX/bin/slovo eval 'app->home->child("data")->make_path({mode => 0700});' $PREFIX/bin/slovo Start the development server and open a browser morbo ./script/slovo -l http://*:3000 & sleep 1 exo-open http://localhost:3000 =head1 USAGE cd /path/to/installed/slovo # ...and see various options ./bin/slovo =head1 CONFIGURATION, PATHS and UPGRADING L is a L application which means that everything applying to Mojolicious applies to it too. Slovo main configuration file is in C. You can use your own by setting C<$ENV{MOJO_CONFIG}> or by just copying C to $ENV{MOJO_HOME} and modify it as you wish. Routes can be added or removed in C. See L for details and examples. New plugins can be added per deployment in C section in C. C<$ENV{MOJO_HOME}> (L) is automatically detected and used. All paths, used in the application, are expected to be its children. You can add your own templates in C<$ENV{MOJO_HOME}/templates> and they will be loaded and used with priority. You can theme your own instance of Slovo by just copying C<$ENV{MOJO_HOME}/lib/Slovo/resources/templates> to C<$ENV{MOJO_HOME}/templates> and modify them. You can add your own static files to C<$ENV{MOJO_HOME}/public>. You can create custom themes by forking L and using it as a starting point. You can have separate static files and templates per domain under C<$ENV{MOJO_HOME}/domove/your.domain/public>, C<$ENV{MOJO_HOME}/domove/your.other.domain/templates>, etc. See C<$ENV{MOJO_HOME}/domove/localhost> for example. You can switch between different themes by just selecting the theme in the form for editing domains. Last but not least, you can add your own classes into C<$ENV{MOJO_HOME}/site/lib> and (why not) replace entirely some Slovo classes or just extend them. C<$ENV{MOJO_HOME}/bin/slovo> will load them with priority. With all the above, you can upgrade L by just installing new versions over it and your files will not be touched. And of course, we know that you are using versioning just in case anything goes wrong. See L. =head1 ATTRIBUTES L inherits all attributes from L and implements the following new ones. =head2 home L detects where B is not like L by where C is but by where the C