2016-04-14 14:20:23 +02:00
<!DOCTYPE html>
< html >
< head >
< meta charset = "utf-8" >
< meta name = "generator" content = "pandoc" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0, user-scalable=yes" >
< title > Shaarli – Create and serve multiple Shaarlis (farm)< / title >
< style type = "text/css" > code { white-space : pre ; } < / style >
< style type = "text/css" >
div.sourceCode { overflow-x: auto; }
table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
margin: 0; padding: 0; vertical-align: baseline; border: none; }
table.sourceCode { width: 100%; line-height: 100%; }
td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
td.sourceCode { padding-left: 5px; }
code > span.kw { color: #007020; font-weight: bold; } /* Keyword */
code > span.dt { color: #902000; } /* DataType */
code > span.dv { color: #40a070; } /* DecVal */
code > span.bn { color: #40a070; } /* BaseN */
code > span.fl { color: #40a070; } /* Float */
code > span.ch { color: #4070a0; } /* Char */
code > span.st { color: #4070a0; } /* String */
code > span.co { color: #60a0b0; font-style: italic; } /* Comment */
code > span.ot { color: #007020; } /* Other */
code > span.al { color: #ff0000; font-weight: bold; } /* Alert */
code > span.fu { color: #06287e; } /* Function */
code > span.er { color: #ff0000; font-weight: bold; } /* Error */
code > span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
code > span.cn { color: #880000; } /* Constant */
code > span.sc { color: #4070a0; } /* SpecialChar */
code > span.vs { color: #4070a0; } /* VerbatimString */
code > span.ss { color: #bb6688; } /* SpecialString */
code > span.im { } /* Import */
code > span.va { color: #19177c; } /* Variable */
code > span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code > span.op { color: #666666; } /* Operator */
code > span.bu { } /* BuiltIn */
code > span.ex { } /* Extension */
code > span.pp { color: #bc7a00; } /* Preprocessor */
code > span.at { color: #7d9029; } /* Attribute */
code > span.do { color: #ba2121; font-style: italic; } /* Documentation */
code > span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code > span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
< / style >
< link rel = "stylesheet" href = "github-markdown.css" >
<!-- [if lt IE 9]>
< script src = "//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js" > < / script >
<![endif]-->
< / head >
< body >
< div id = "local-sidebar" >
< ul >
< li > < a href = "Home.html" > Home< / a > < / li >
2016-10-12 12:36:59 +02:00
< li > Setup
2016-04-14 14:20:23 +02:00
< ul >
2016-10-12 12:36:59 +02:00
< li > < a href = "Download-and-Installation.html" > Download and Installation< / a > < / li >
< li > < a href = "Upgrade-and-migration.html" > Upgrade and migration< / a > < / li >
2016-04-14 14:20:23 +02:00
< li > < a href = "Server-requirements.html" > Server requirements< / a > < / li >
< li > < a href = "Server-configuration.html" > Server configuration< / a > < / li >
< li > < a href = "Server-security.html" > Server security< / a > < / li >
< li > < a href = "Shaarli-configuration.html" > Shaarli configuration< / a > < / li >
2016-05-14 11:37:28 +02:00
< li > < a href = "Plugins.html" > Plugins< / a > < / li >
2016-04-14 14:20:23 +02:00
< / ul > < / li >
< li > < a href = "Docker.html" > Docker< / a > < / li >
< li > < a href = "Usage.html" > Usage< / a >
< ul >
< li > < a href = "Sharing-button.html" > Sharing button< / a > (bookmarklet)< / li >
< li > < a href = "Browsing-and-Searching.html" > Browsing and Searching< / a > < / li >
< li > < a href = "Firefox-share.html" > Firefox share< / a > < / li >
< li > < a href = "RSS-feeds.html" > RSS feeds< / a > < / li >
2017-05-07 18:44:05 +02:00
< li > < a href = "REST-API.html" > REST API< / a > < / li >
2016-04-14 14:20:23 +02:00
< / ul > < / li >
< li > How To
< ul >
< li > < a href = "Backup,-restore,-import-and-export.html" > Backup, restore, import and export< / a > < / li >
< li > < a href = "Copy-an-existing-installation-over-SSH-and-serve-it-locally.html" > Copy an existing installation over SSH and serve it locally< / a > < / li >
< li > < a href = "Create-and-serve-multiple-Shaarlis-(farm).html" > Create and serve multiple Shaarlis (farm)< / a > < / li >
< li > < a href = "Download-CSS-styles-from-an-OPML-list.html" > Download CSS styles from an OPML list< / a > < / li >
< li > < a href = "Datastore-hacks.html" > Datastore hacks< / a > < / li >
< / ul > < / li >
< li > < a href = "Troubleshooting.html" > Troubleshooting< / a > < / li >
< li > < a href = "Development.html" > Development< / a >
< ul >
< li > < a href = "GnuPG-signature.html" > GnuPG signature< / a > < / li >
< li > < a href = "Coding-guidelines.html" > Coding guidelines< / a > < / li >
< li > < a href = "Directory-structure.html" > Directory structure< / a > < / li >
< li > < a href = "3rd-party-libraries.html" > 3rd party libraries< / a > < / li >
< li > < a href = "Plugin-System.html" > Plugin System< / a > < / li >
< li > < a href = "Release-Shaarli.html" > Release Shaarli< / a > < / li >
2017-05-07 18:44:05 +02:00
< li > < a href = "Versioning-and-Branches.html" > Versioning and Branches< / a > < / li >
2016-04-14 14:20:23 +02:00
< li > < a href = "Security.html" > Security< / a > < / li >
< li > < a href = "Static-analysis.html" > Static analysis< / a > < / li >
< li > < a href = "Theming.html" > Theming< / a > < / li >
< li > < a href = "Unit-tests.html" > Unit tests< / a > < / li >
< / ul > < / li >
< li > About
< ul >
< li > < a href = "FAQ.html" > FAQ< / a > < / li >
< li > < a href = "Community-&-Related-software.html" > Community & Related software< / a > < / li >
< / ul > < / li >
< / ul >
< / div >
< h1 id = "create-and-serve-multiple-shaarlis-farm" > Create and serve multiple Shaarlis (farm)< / h1 >
< p > Example bash script (creates multiple shaarli instances and generates an HTML index of them)< / p >
< div class = "sourceCode" > < pre class = "sourceCode bash" > < code class = "sourceCode bash" > < span class = "co" > #!/bin/bash< / span >
2016-10-12 12:36:59 +02:00
< span class = "kw" > set< / span > < span class = "ex" > -o< / span > errexit
< span class = "kw" > set< / span > < span class = "ex" > -o< / span > nounset
2016-04-14 14:20:23 +02:00
< span class = "co" > #config< / span >
2016-10-12 12:36:59 +02:00
< span class = "va" > shaarli_base_dir=< / span > < span class = "st" > ' /var/www/shaarli' < / span >
< span class = "va" > accounts=< / span > < span class = "st" > ' bob john whatever username' < / span >
< span class = "va" > shaarli_repo_url=< / span > < span class = "st" > ' https://github.com/shaarli/Shaarli' < / span >
< span class = "va" > ref=< / span > < span class = "st" > " master" < / span >
2016-04-14 14:20:23 +02:00
< span class = "co" > #clone multiple shaarli instances< / span >
2016-10-12 12:36:59 +02:00
< span class = "kw" > if< / span > < span class = "bu" > [< / span > < span class = "ot" > !< / span > < span class = "ot" > -d< / span > < span class = "st" > " < / span > < span class = "va" > $shaarli_base_dir< / span > < span class = "st" > " < / span > < span class = "bu" > ]< / span > ; < span class = "kw" > then< / span > < span class = "fu" > mkdir< / span > < span class = "st" > " < / span > < span class = "va" > $shaarli_base_dir< / span > < span class = "st" > " < / span > < span class = "kw" > ;< / span > < span class = "kw" > fi< / span > []< span class = "kw" > (< / span > < span class = "ex" > .html< / span > < span class = "kw" > )< / span >
2016-04-14 14:20:23 +02:00
2016-10-12 12:36:59 +02:00
< span class = "kw" > for< / span > < span class = "ex" > account< / span > in < span class = "va" > $accounts< / span > < span class = "kw" > ;< / span > < span class = "kw" > do< / span >
< span class = "kw" > if< / span > < span class = "bu" > [< / span > < span class = "ot" > -d< / span > < span class = "st" > " < / span > < span class = "va" > $shaarli_base_dir< / span > < span class = "st" > /< / span > < span class = "va" > $account< / span > < span class = "st" > " < / span > < span class = "bu" > ]< / span > ;[]< span class = "kw" > (< / span > < span class = "ex" > .html< / span > < span class = "kw" > )< / span >
< span class = "kw" > then< / span > < span class = "bu" > echo< / span > < span class = "st" > " [info] account < / span > < span class = "va" > $account< / span > < span class = "st" > already exists, skipping" < / span > < span class = "kw" > ;< / span > []< span class = "kw" > (< / span > < span class = "ex" > .html< / span > < span class = "kw" > )< / span >
< span class = "kw" > else< / span > < span class = "bu" > echo< / span > < span class = "st" > " [info] creating new account < / span > < span class = "va" > $account< / span > < span class = "st" > ..." < / span > < span class = "kw" > ;< / span > < span class = "fu" > git< / span > clone --quiet < span class = "st" > " < / span > < span class = "va" > $shaarli_repo_url< / span > < span class = "st" > " < / span > -b < span class = "st" > " < / span > < span class = "va" > $ref< / span > < span class = "st" > " < / span > < span class = "st" > " < / span > < span class = "va" > $shaarli_base_dir< / span > < span class = "st" > /< / span > < span class = "va" > $account< / span > < span class = "st" > " < / span > < span class = "kw" > ;< / span > < span class = "kw" > fi< / span > []< span class = "kw" > (< / span > < span class = "ex" > .html< / span > < span class = "kw" > )< / span >
2016-04-14 14:20:23 +02:00
< span class = "kw" > done< / span >
< span class = "co" > #generate html index of shaarlis< / span >
2016-10-12 12:36:59 +02:00
< span class = "va" > htmlhead=< / span > < span class = "st" > ' < !DOCTYPE html PUBLIC " -//W3C//DTD HTML 4.01//EN" " http://www.w3.org/TR/html4/strict.dtd" > < / span >
2016-04-14 14:20:23 +02:00
< span class = "st" > < !-- Minimal html template thanks to http://www.sitepoint.com/a-minimal-html-document/ --> < / span >
< span class = "st" > < html lang=" en" > < / span >
< span class = "st" > < head> < / span >
< span class = "st" > < meta http-equiv=" content-type" content=" text/html; charset=utf-8" > < / span >
< span class = "st" > < title> My Shaarli farm< /title> < / span >
< span class = "st" > < style> body {font-family: " Open Sans" }< /style> < / span >
< span class = "st" > < /head> < / span >
< span class = "st" > < body> < / span >
< span class = "st" > < div> < / span >
< span class = "st" > < h1> My Shaarli farm< /h1> < / span >
< span class = "st" > < ul style=" list-style-type: none;" > ' < / span >
2016-10-12 12:36:59 +02:00
< span class = "va" > accountlinks=< / span > < span class = "st" > ' ' < / span >
2016-04-14 14:20:23 +02:00
2016-10-12 12:36:59 +02:00
< span class = "va" > htmlfooter=< / span > < span class = "st" > ' < / span >
2016-04-14 14:20:23 +02:00
< span class = "st" > < /ul> < / span >
< span class = "st" > < /div> < / span >
< span class = "st" > < /body> < / span >
< span class = "st" > < /html> ' < / span >
2016-10-12 12:36:59 +02:00
< span class = "kw" > for< / span > < span class = "ex" > account< / span > in < span class = "va" > $accounts< / span > < span class = "kw" > ;< / span > < span class = "kw" > do< / span > < span class = "va" > accountlinks=< / span > < span class = "st" > " < / span > < span class = "va" > $accountlinks< / span > < span class = "st" > \n< li> < a href=< / span > < span class = "dt" > \" < / span > < span class = "va" > $account< / span > < span class = "dt" > \" < / span > < span class = "st" > > < / span > < span class = "va" > $account< / span > < span class = "st" > < /a> < /li> " < / span > ; < span class = "kw" > done< / span >
< span class = "kw" > if< / span > < span class = "bu" > [< / span > < span class = "ot" > -d< / span > < span class = "st" > " < / span > < span class = "va" > $shaarli_base_dir< / span > < span class = "st" > /index.html" < / span > < span class = "bu" > ]< / span > ; < span class = "kw" > then< / span > < span class = "bu" > echo< / span > < span class = "st" > " [removing old index.html]" < / span > < span class = "kw" > ;< / span > < span class = "fu" > rm< / span > < span class = "st" > " < / span > < span class = "va" > $shaarli_base_dir< / span > < span class = "st" > /index.html" < / span > ]< span class = "kw" > ;< / span > < span class = "kw" > fi< / span > []< span class = "kw" > (< / span > < span class = "ex" > .html< / span > < span class = "kw" > )< / span >
< span class = "bu" > echo< / span > < span class = "st" > " [info] generating new index of shaarlis" < / span > [](.html)
< span class = "bu" > echo< / span > -e < span class = "st" > " < / span > < span class = "va" > $htmlhead< / span > < span class = "st" > < / span > < span class = "va" > $accountlinks< / span > < span class = "st" > < / span > < span class = "va" > $htmlfooter< / span > < span class = "st" > " < / span > < span class = "op" > > < / span > < span class = "st" > " < / span > < span class = "va" > $shaarli_base_dir< / span > < span class = "st" > /index.html" < / span >
< span class = "bu" > echo< / span > < span class = "st" > ' [info] done.' < / span > [](.html)
< span class = "bu" > echo< / span > < span class = "st" > " [info] list of accounts: < / span > < span class = "va" > $accounts< / span > < span class = "st" > " < / span > [](.html)
< span class = "bu" > echo< / span > < span class = "st" > " [info] contents of < / span > < span class = "va" > $shaarli_base_dir< / span > < span class = "st" > :" < / span > [](.html)
< span class = "ex" > tree< / span > -a -L 1 < span class = "st" > " < / span > < span class = "va" > $shaarli_base_dir< / span > < span class = "st" > " < / span > < / code > < / pre > < / div >
2016-04-14 14:20:23 +02:00
< p > This script just serves as an example. More precise or complex (applying custom configuration, etc) automation is possible using configuration management software like < a href = "https://www.ansible.com/" > Ansible< / a > < a href = ".html" > < / a > < / p >
< / body >
< / html >