This applies where system environment variables can be configured. In this case, variables are handled in a plain text format like in the example below:
Environment variables for the context where Chevereto system is being provided. Depending on where you run it, you may want to disable some Chevereto functionality.
Once the software files gets updated it will required to update the Chevereto database schema. This process can be carried on HTTP or command-line context.
This process is for upgrading to Chevereto V4 from Chevereto V3.20 (previous major release). Check Upgrading Free if you need to upgrade from a free edition.
Review Chevereto V4 vs V3 comparison tables for a better understanding of changes in V4.
Chevereto V4 includes a command line interface enabling to perform a variety of system tasks. This console command should be invoked in the following format:
app/bin/legacy -C<command><options>
+
app/bin/legacy path to the Chevereto console file
<command> task to run
<options> options for command
Command invocation vary depending on the system context, here samples for Debian and Docker:
The encrypt-secrets command encrypts the application plain text secrets (not already encrypted) in the database.
app/bin/legacy -C encrypt-secrets
+
If the application secrets are already encrypted (stored as cipher text) it will require to pass the key for decrypting the existing secrets. Use the -k argument to indicate the key for the already stored cipher texts:
Chevereto uses ChaCha20(opens new window) algorithm to cipher secrets and sensitive data. When enabled, Chevereto will store these values encrypted in the database.
Requires manual update
Encryption in Chevereto was added in v4.0.0-beta.10. If you installed Chevereto prior to this release you will require to manually enable encryption.
Chevereto installations previous the introduction of encryption will require to manually cipher the existing data. This is a one time process that encrypts the plain text data stored in the database.
Chevereto application errors can happen by several causes, including server issues. In a multi-layered system like this is crucial to understand when an error is caused by Chevereto and not something else.
Chevereto won't cause any of the following issues:
Unable to connect (network issues)
Database server gone
CORS (missing icons, fonts)
Cookies/Sessions not working (login issues)
Restricted functions (set_time_limit)
Server restrictions (mod_security)
Wrong handling the user real connecting IP
To determine if an issue is Chevereto related may be complicated for most users. We recommend purchasing Extra Support(opens new window) if the issue needs urgent attention in your organization.
This error spawns on production context, the actual cause of this error is hidden from visitors by design to don't expose any sensitive debug info to end-users.
Something went wrong
+Please try again later. If the problem persist don't hesitate to contact the system administrator.
The update query gets dumped either because dump update query(opens new window) setting is enabled or because the database has more than 1,000,000 records plus carrying the update process in HTTP context.
If at /update you see a message which reads # Dumped update query (...) it means that you must run the CLI update command. You can also run the printed statements in the database client software of your choice.
A generic error response emitted by the web server, indicates the existence of an error but it doesn't specify any concrete explication for it.
As these may spawn in any layer, check the system error log device to determine if it is triggered in the application layer. If is not there then check for the error log for your web server.
Refer to your web server provisioning documentation for retrieving its logs.
Public IDs are always encoded to avoid content enumeration attacks.
While the data is stored in database rows indexed with integer ids, Chevereto handles these on public as encoded identifiers. Similar to how YouTube encode their video IDs. This is made to avoid enumeration of content based on incremental identifiers (retrieve N content by doing +1 on the identifier).
Public IDs are unique and vary from each different installation.
On installation Chevereto creates a random generated crypt_salt which is used by the system to encode/decode these identifiers. This allows to convert the numeric ids stored in the database to alphanumeric ids unique to your installation.
Cross-site request forgery (CSRF(opens new window)) is a type of exploit that is used to fool website's origin requests by transmitting instructions from a remote website without the user's consent, for example trigger a delete content request without the user consent or willing.
The CSRF protection is based in the usage of a request token, which is set by session when the website loads and is asked when sub-sequential request are made.
Too many invalid request forbid access to the system.
An invalid request is when a user enters a bad password or the CSRF token doesn't match. Each time an invalid request is triggered the system stores the IP and the given action that triggers that invalid request.
There is a hard-coded setting in the system that controls the limit of allowed invalid requests per day and when a user reaches this limit the system won't allow requests from that in IP in a period of 24 hours.
Control how much content/time can be added by users.
Avoid resource hungry users by configuring Flood Protection(opens new window). This enables to control how much they can upload based on configurable time settings.
A cron is system in which a command is executed in a regular basis, this way Chevereto can perform operations in the background without user intervention.
Job
Purpose
deleteExpiredImages
Deletes files set to expire at a certain date
cleanUnconfirmedUsers
Clears records for users which never confirmed their account
The command should be run by the web-server user which is www-data (may vary). To run the command in Chevereto it requires to call PHP binary at the Chevereto CLI.
Use which php to locate the PHP binary as its location.
The MySQL server is used to interact with the database storing relational data, for which Chevereto links users to media, content to reactions, folders, etc. That relational data is what is used to define what your application "is".
Run the following command to create the chevereto database and its user binding.
sudo mysql -uroot-ppassword-e"CREATE DATABASE chevereto; \
+ CREATE USER 'chevereto' IDENTIFIED BY 'user_database_password'; \
+ GRANT ALL ON chevereto.* TO 'chevereto' IDENTIFIED BY 'user_database_password';"
+
Chevereto since V4.1 (Pulento) optionally requires FFmpeg(opens new window) and FFprobe to process video uploads.
The FFmpeg binary should be available at the system path, alternatively you can configure the binary location manually.
If you can't install packages or if you are using a shared hosting, you can get the FFmpeg binary for your system from the official website(opens new window) and upload it to your server.
Packages and PECL provides the same convenience, but as packages are made for debian-based systems, you should prefer PECL if you don't have a debian-compatible system.
Packages not only contain the software, it could trigger other effects in the system.
PHP is the programming language used to write Chevereto application instructions, it is used for everything as it provides high flexibility to alter instructions on-the-fly at a minimum system performance footprint.
The image library (GD, Imagick) should be provided with support for PNG GIF JPG BMP WEBP. By default, Chevereto prefers Imagick and fallback to GD.
If you need to explicit use GD you can pass this ENV:
CHEVERETO_IMAGE_LIBRARY=gd
+
If the server doesn't provide support for all the image formats handled by Chevereto, the ENV must reflect only the system supported formats. In the following example Chevereto is configured with explicit support only for PNG, GIF, BMP and JPG (removes WEBP):
User running php must be in the owner group of the installation directory and Chevereto requires recursive read access to that directory. In addition to this, following paths require recursive read/write access:
Session path
Temp folder
./content
./images
./importing
User generated content is stored at:
./images
./content/images/users
./content/pages
In debian-based systems use the following command to set the right permissions in your Chevereto installation (change /var/www/html to reflect your path).
Chevereto requires an HTTP web server compatible with PHP. It provides official support (when using our configuration) for Apache HTTP Server and Nginx.
Alternative web servers
Any web server capable of forwarding FastCGI can be used to deploy Chevereto, but we don't provide the webserver configuration. You are encouraged to try translating .htaccess rules to your server realm, if you need help don't hesitate to ask us directly.
Chevereto restricts access exclusively to index.php and it forbids access to any other PHP file.
Built-in Apache HTTP server config (.htaccess) and provided Nginx config for Chevereto restricts access to PHP files. Only /index.php is allowed to process PHP requests. This is a security measure to prevent execution of arbitrary files that an attacker or third-party may nest in the Chevereto application filesystem.
If real connecting IP is not configured Chevereto won't be able to detect the real visitors IPs, failing to deliver IP based restrictions and flood control.
For setups under a proxy is required that the web server sets the appropriate value for the client connecting IP.
Refer to the following resources when requiring to configure real connecting IP:
+
+
+
diff --git a/assets/css/0.styles.0b548bfc.css b/assets/css/0.styles.0b548bfc.css
new file mode 100644
index 00000000..13011474
--- /dev/null
+++ b/assets/css/0.styles.0b548bfc.css
@@ -0,0 +1 @@
+.medium-zoom-overlay{z-index:100}.medium-zoom-overlay~img{z-index:101}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#006edb}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#2c3e50}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#006edb}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;-webkit-user-select:none;user-select:none;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}:root{--accentColor:#006edb;--textColor:#2c3e50;--borderColor:#eaecef;--codeBgColor:#282c34;--arrowBgColor:#ccc;--badgeTipColor:#42b983;--badgeWarningColor:#e7c000;--badgeErrorColor:#da5961;--bgColor:#fff;--kbdBgColor:#eee;--blockquoteTextColor:#999;--blockquoteBorderColor:#dfe2e5;--tableBorderColor:#dfe2e5;--tableStripeBgColor:#f6f8fa;--preTextColor:#fff;--highlightedBgColor:rgba(0,0,0,0.66);--languageTextColor:hsla(0,0%,100%,0.4);--lineNumbersColor:hsla(0,0%,100%,0.3);--tipColor:#2c3e50;--tipBgColor:#f3f5f7;--warningColor:#e7c000;--warningBgColor:rgba(255,229,100,0.3);--dangerColor:#c00;--dangerBgColor:#ffe6e6;--miniCodeBgColor:rgba(27,31,35,0.05);--searchBorderColor:#999;--lighten10AccentColor:#007df8;--lighten10TextColor:#3a5169;--lighten20TextColor:#476582;--lighten25TextColor:#4e6e8e;--lighten35TextColor:#5d82a6;--lighten40TextColor:#6a8bad;--darken10AccentColor:#0063c5;--darken10BgColor:#f2f2f2;--darken10BorderColor:#cfd4db}@media (prefers-color-scheme:light){:root{--codeBgColor:#282c34;--preTextColor:#fff;--highlightedBgColor:hsla(0,0%,87.8%,0.5);--languageTextColor:hsla(0,0%,100%,0.4);--lineNumbersColor:hsla(0,0%,100%,0.3)}}@media (prefers-color-scheme:dark){:root{--accentColor:#2b73de;--textColor:#e2e2e2;--borderColor:#4e4e4e;--arrowBgColor:#ccc;--badgeTipColor:#42b983;--badgeWarningColor:#e7c000;--badgeErrorColor:#da5961;--bgColor:#25272a;--kbdBgColor:#444;--blockquoteTextColor:#eee;--blockquoteBorderColor:#666b6f;--tableBorderColor:#4e4e4e;--tableStripeBgColor:#444;--tipColor:#e2e2e2;--tipBgColor:#3e3b3b;--warningColor:#e7c000;--warningBgColor:rgba(185,174,119,0.3);--dangerColor:#c00;--dangerBgColor:rgba(72,56,57,0.3);--miniCodeBgColor:hsla(0,0%,100%,0.1);--searchBorderColor:#eee;--lighten10AccentColor:#4081e1;--lighten10TextColor:#e5e5e5;--lighten20TextColor:#e8e8e8;--lighten25TextColor:#e9e9e9;--lighten35TextColor:#ececec;--lighten40TextColor:#eee;--darken10AccentColor:#2066ce;--darken10BgColor:#2f3235;--darken10BorderColor:#464646}}html[theme=light]{--accentColor:#006edb;--textColor:#2c3e50;--borderColor:#eaecef;--bgColor:#fff;--kbdBgColor:#eee;--blockquoteTextColor:#999;--blockquoteBorderColor:#dfe2e5;--tableBorderColor:#dfe2e5;--tableStripeBgColor:#f6f8fa;--highlightedBgColor:hsla(0,0%,87.8%,0.5);--tipColor:#2c3e50;--tipBgColor:#f3f5f7;--warningBgColor:rgba(255,229,100,0.3);--dangerBgColor:#ffe6e6;--miniCodeBgColor:rgba(27,31,35,0.05);--searchBorderColor:#999;--lighten10AccentColor:#007df8;--lighten10TextColor:#3a5169;--lighten20TextColor:#476582;--lighten25TextColor:#4e6e8e;--lighten35TextColor:#5d82a6;--lighten40TextColor:#6a8bad;--darken10AccentColor:#0063c5;--darken10BgColor:#f2f2f2;--darken10BorderColor:#cfd4db}html[theme=dark],html[theme=light]{--codeBgColor:#282c34;--arrowBgColor:#ccc;--badgeTipColor:#42b983;--badgeWarningColor:#e7c000;--badgeErrorColor:#da5961;--preTextColor:#fff;--languageTextColor:hsla(0,0%,100%,0.4);--lineNumbersColor:hsla(0,0%,100%,0.3);--warningColor:#e7c000;--dangerColor:#c00}html[theme=dark]{--accentColor:#2b73de;--textColor:#e2e2e2;--borderColor:#4e4e4e;--bgColor:#25272a;--kbdBgColor:#444;--blockquoteTextColor:#eee;--blockquoteBorderColor:#666b6f;--tableBorderColor:#4e4e4e;--tableStripeBgColor:#444;--highlightedBgColor:rgba(0,0,0,0.66);--tipColor:#e2e2e2;--tipBgColor:#3e3b3b;--warningBgColor:rgba(185,174,119,0.3);--dangerBgColor:rgba(72,56,57,0.3);--miniCodeBgColor:hsla(0,0%,100%,0.1);--searchBorderColor:#eee;--lighten10AccentColor:#4081e1;--lighten10TextColor:#e5e5e5;--lighten20TextColor:#e8e8e8;--lighten25TextColor:#e9e9e9;--lighten35TextColor:#ececec;--lighten40TextColor:#eee;--darken10AccentColor:#2066ce;--darken10BgColor:#232528;--darken10BorderColor:#464646}.navbar,.sidebar,body,html{background-color:var(--bgColor)}body{color:var(--textColor)}.navbar,h2{border-bottom-color:var(--borderColor)}.sidebar{border-right-color:var(--borderColor)}.theme-default-content:not(.custom) p.demo,kbd{border-color:var(--borderColor)}kbd{background:var(--kbdBgColor)}blockquote{color:var(--blockquoteTextColor);border-left-color:var(--blockquoteBorderColor)}a,p a code{color:var(--accentColor)}hr{border-top-color:var(--borderColor)}tr{border-top-color:var(--tableBorderColor)}tr:nth-child(2n){background-color:var(--tableStripeBgColor)}td,th{border-color:var(--tableBorderColor)}.arrow.up{border-bottom-color:var(--arrowBgColor)}.arrow.down{border-top-color:var(--arrowBgColor)}.arrow.left,.arrow.right,border-left-color var(--arrowBgColor){border-right-color:var(--arrowBgColor)}.theme-default-content code{color:var(--lighten20TextColor);background-color:var(--miniCodeBgColor)}.theme-default-content code .token.inserted{color:var(--accentColor)}.theme-default-content code .token.punctuation{color:var(--preTextColor)}.theme-default-content pre[class*=language-],div[class*=language-],div[class*=language-].line-numbers-mode:after{background-color:var(--codeBgColor)}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:var(--preTextColor)}div[class*=language-] .highlight-lines .highlighted,div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{background-color:var(--highlightedBgColor)}div[class*=language-].line-numbers-mode:after{background-color:var(--codeBgColor);border-right-color:var(--highlightedBgColor)}div[class*=language-]:before{color:var(--languageTextColor)}div[class*=language-].line-numbers-mode .line-numbers-wrapper{color:var(--lineNumbersColor)}.theme-code-block>pre,.theme-code-group .theme-code-group__nav{background-color:var(--codeBgColor)!important}.theme-code-group .theme-code-group__nav .theme-code-group__nav-tab{color:var(--textColor)!important}.theme-code-group .theme-code-group__nav .theme-code-group__nav-tab-active{border-color:var(--accentColor)!important}.custom-block.tip{border-color:var(--badgeTipColor);background-color:var(--tipBgColor)}.custom-block.tip .custom-block-title,.custom-block.tip a{color:var(--tipColor)}.custom-block.warning{border-color:var(--badgeWarningColor);background-color:var(--warningBgColor)}.custom-block.warning .custom-block-title,.custom-block.warning a{color:var(--warningColor)}.custom-block.danger{border-color:var(--badgeErrorColor);background-color:var(--dangerBgColor)}.custom-block.danger .custom-block-title,.custom-block.danger a{color:var(--dangerColor)}.custom-block.danger,.custom-block.warning{color:var(--textColor)}.custom-block.details{background-color:var(--tipBgColor)}.badge,.badge.green,.badge.tip{background-color:var(--badgeTipColor)!important}.badge.error{background-color:var(--badgeErrorColor)!important}.badge.warn,.badge.warning,.badge.yellow{background-color:var(--badgeWarningColor)!important}.global-ui .sw-update-popup{border-color:var(--accentColor)!important;background-color:var(--bgColor)!important;color:var(--textColor)!important}.global-ui .sw-update-popup button{border-color:var(--darken10AccentColor)!important;background-color:var(--accentColor)!important;color:#fff!important}.global-ui .sw-update-popup button:hover{background-color:var(--lighten10AccentColor)!important}@media (min-width:719px){::-webkit-scrollbar{max-width:6px;max-height:12px}::-webkit-scrollbar-thumb{background-color:var(--languageTextColor);border-radius:6px}}.home .hero img{max-width:450px!important}.theme-default-content code,h1,h2,h3,h4,h5,h6{word-break:break-word}.sidebar-heading{text-overflow:ellipsis;overflow:hidden}.algolia-docsearch-suggestion--title{color:#2c3e50!important}.algolia-docsearch-suggestion--highlight{color:#006edb!important}.algolia-autocomplete .ds-dropdown-menu{background-color:#fff!important}.algolia-autocomplete .ds-suggestion{border-color:#eaecef!important}.theme-code-group .theme-code-group__nav .theme-code-group__nav-tab{color:var(--preTextColor)!important}.theme-default-content code{font-size:.93em}.line-number,code,kbd{font-family:FiraCode Nerd Font,Operator Mono,Inconsolata,source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.float-left{float:left}.margin-1em{margin:1em}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.857143%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}#nprogress{pointer-events:none}#nprogress .bar{background:#006edb;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #006edb,0 0 5px #006edb;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#006edb transparent transparent #006edb;border-style:solid;border-width:2px;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.algolia-search-wrapper>span{vertical-align:middle}.algolia-search-wrapper .algolia-autocomplete{line-height:normal}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu{background-color:#fff;border:1px solid #999;border-radius:4px;font-size:16px;margin:6px 0 0;padding:4px;text-align:left}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu:before{border-color:#999}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu [class*=ds-dataset-]{border:none;padding:0}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu .ds-suggestions{margin-top:0}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu .ds-suggestion{border-bottom:1px solid #eaecef}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#2c815b}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion{border-color:#eaecef;padding:0}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--category-header{padding:5px 10px;margin-top:0;background:#006edb;color:#fff;font-weight:600}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight{background:hsla(0,0%,100%,.6)}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--wrapper{padding:0}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--title{font-weight:600;margin-bottom:0;color:#2c3e50}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{vertical-align:top;padding:5px 7px 5px 5px;border-color:#eaecef;background:#f1f3f5}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{display:none}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column-text{color:#555}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-footer{border-color:#eaecef}.algolia-search-wrapper .algolia-autocomplete .ds-cursor .algolia-docsearch-suggestion--content{background-color:#e7edf3!important;color:#2c3e50}@media (min-width:719px){.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{float:none;width:150px;min-width:150px;display:table-cell}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{float:none;display:table-cell;width:100%;vertical-align:top}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .ds-dropdown-menu{min-width:515px!important}}@media (max-width:719px){.algolia-search-wrapper .ds-dropdown-menu{min-width:calc(100vw - 4rem)!important;max-width:calc(100vw - 4rem)!important}.algolia-search-wrapper .algolia-docsearch-suggestion--wrapper{padding:5px 7px 5px 5px!important}.algolia-search-wrapper .algolia-docsearch-suggestion--subcategory-column{padding:0!important;background:#fff!important}.algolia-search-wrapper .algolia-docsearch-suggestion--subcategory-column-text:after{content:" > ";font-size:10px;line-height:14.4px;display:inline-block;width:5px;margin:-3px 3px 0;vertical-align:middle}}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#6a8bad}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#006edb;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #0063c5}.home .hero .action-button:hover{background-color:#007df8}.home .features{border-top:1px solid #eaecef;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#3a5169}.home .feature p{color:#4e6e8e}.home .footer{padding:2.5rem;border-top:1px solid #eaecef;text-align:center;color:#4e6e8e}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/assets/img/search.83621669.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#006edb}.search-box .suggestions{background:#fff;width:20rem;position:absolute;top:2rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion a{white-space:normal;color:#5d82a6}.search-box .suggestion a .page-title{font-weight:600}.search-box .suggestion a .header{font-size:.9em;margin-left:.25em}.search-box .suggestion.focused{background-color:#f3f4f5}.search-box .suggestion.focused a{color:#006edb}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.badge[data-v-15b7b770]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-15b7b770],.badge.tip[data-v-15b7b770],.badge[data-v-15b7b770]{background-color:#42b983}.badge.error[data-v-15b7b770]{background-color:#da5961}.badge.warn[data-v-15b7b770],.badge.warning[data-v-15b7b770],.badge.yellow[data-v-15b7b770]{background-color:#e7c000}.badge+.badge[data-v-15b7b770]{margin-left:5px}.theme-code-block[data-v-759a7d02]{display:none}.theme-code-block__active[data-v-759a7d02]{display:block}.theme-code-block>pre[data-v-759a7d02]{background-color:orange}.theme-code-group__nav[data-v-deefee04]{margin-bottom:-35px;background-color:#282c34;padding-bottom:22px;border-top-left-radius:6px;border-top-right-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__ul[data-v-deefee04]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__nav-tab[data-v-deefee04]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:hsla(0,0%,100%,.9);font-weight:600}.theme-code-group__nav-tab-active[data-v-deefee04]{border-bottom:1px solid #42b983}.pre-blank[data-v-deefee04]{color:#42b983}.sw-update-popup[data-v-fec8b358]{position:fixed;right:1em;bottom:1em;padding:1em;border:1px solid #3eaf7c;border-radius:3px;background:#fff;box-shadow:0 4px 16px rgba(0,0,0,.5);text-align:center;z-index:3}.sw-update-popup>button[data-v-fec8b358]{margin-top:.5em;padding:.25em 2em}.sw-update-popup-enter-active[data-v-fec8b358],.sw-update-popup-leave-active[data-v-fec8b358]{transition:opacity .3s,transform .3s}.sw-update-popup-enter[data-v-fec8b358],.sw-update-popup-leave-to[data-v-fec8b358]{opacity:0;transform:translateY(50%) scale(.5)}.searchbox{display:inline-block;position:relative;width:200px;height:32px!important;white-space:nowrap;box-sizing:border-box;visibility:visible!important}.searchbox .algolia-autocomplete{display:block;width:100%;height:100%}.searchbox__wrapper{width:100%;height:100%;z-index:999;position:relative}.searchbox__input{display:inline-block;box-sizing:border-box;transition:box-shadow .4s ease,background .4s ease;border:0;border-radius:16px;box-shadow:inset 0 0 0 1px #ccc;background:#fff!important;padding:0 26px 0 32px;width:100%;height:100%;vertical-align:middle;white-space:normal;font-size:12px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbox__input::-webkit-search-cancel-button,.searchbox__input::-webkit-search-decoration,.searchbox__input::-webkit-search-results-button,.searchbox__input::-webkit-search-results-decoration{display:none}.searchbox__input:hover{box-shadow:inset 0 0 0 1px #b3b3b3}.searchbox__input:active,.searchbox__input:focus{outline:0;box-shadow:inset 0 0 0 1px #aaa;background:#fff}.searchbox__input::-moz-placeholder{color:#aaa}.searchbox__input::placeholder{color:#aaa}.searchbox__submit{position:absolute;top:0;margin:0;border:0;border-radius:16px 0 0 16px;background-color:rgba(69,142,225,0);padding:0;width:32px;height:100%;vertical-align:middle;text-align:center;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;user-select:none;right:inherit;left:0}.searchbox__submit:before{display:inline-block;margin-right:-4px;height:100%;vertical-align:middle;content:""}.searchbox__submit:active,.searchbox__submit:hover{cursor:pointer}.searchbox__submit:focus{outline:0}.searchbox__submit svg{width:14px;height:14px;vertical-align:middle;fill:#6d7e96}.searchbox__reset{display:block;position:absolute;top:8px;right:8px;margin:0;border:0;background:none;cursor:pointer;padding:0;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;user-select:none;fill:rgba(0,0,0,.5)}.searchbox__reset.hide{display:none}.searchbox__reset:focus{outline:0}.searchbox__reset svg{display:block;margin:4px;width:8px;height:8px}.searchbox__input:valid~.searchbox__reset{display:block;animation-name:sbx-reset-in;animation-duration:.15s}@keyframes sbx-reset-in{0%{transform:translate3d(-20%,0,0);opacity:0}to{transform:none;opacity:1}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:inherit!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{right:48px}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu{left:0!important;right:inherit!important}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu:before{left:48px}.algolia-autocomplete .ds-dropdown-menu{top:-6px;border-radius:4px;margin:6px 0 0;padding:0;text-align:left;height:auto;position:relative;background:transparent;border:none;z-index:999;max-width:600px;min-width:500px;box-shadow:0 1px 0 0 rgba(0,0,0,.2),0 2px 3px 0 rgba(0,0,0,.1)}.algolia-autocomplete .ds-dropdown-menu:before{display:block;position:absolute;content:"";width:14px;height:14px;background:#fff;z-index:1000;top:-7px;border-top:1px solid #d9d9d9;border-right:1px solid #d9d9d9;transform:rotate(-45deg);border-radius:2px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions{position:relative;z-index:1000;margin-top:8px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions a:hover{text-decoration:none}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion{cursor:pointer}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion.suggestion-layout-simple,.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--content{background-color:rgba(69,142,225,.05)}.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{position:relative;border:1px solid #d9d9d9;background:#fff;border-radius:4px;overflow:auto;padding:0 8px 8px}.algolia-autocomplete .ds-dropdown-menu *{box-sizing:border-box}.algolia-autocomplete .algolia-docsearch-suggestion{display:block;position:relative;padding:0 8px;background:#fff;color:#02060c;overflow:hidden}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#174d8c;background:rgba(143,187,237,.1);padding:.1em .05em}.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{padding:0 0 1px;background:inherit;box-shadow:inset 0 -2px 0 0 rgba(69,142,225,.8);color:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--content{display:block;float:right;width:70%;position:relative;padding:5.33333px 0 5.33333px 10.66667px;cursor:pointer}.algolia-autocomplete .algolia-docsearch-suggestion--content:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;left:-1px}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{position:relative;border-bottom:1px solid #ddd;display:none;margin-top:8px;padding:4px 0;font-size:1em;color:#33363d}.algolia-autocomplete .algolia-docsearch-suggestion--wrapper{width:100%;float:left;padding:8px 0 0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{float:left;width:30%;text-align:right;position:relative;padding:5.33333px 10.66667px;color:#a4a7ae;font-size:.9em;word-wrap:break-word}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;right:0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline{display:none}.algolia-autocomplete .algolia-docsearch-suggestion--title{margin-bottom:4px;color:#02060c;font-size:.9em;font-weight:700}.algolia-autocomplete .algolia-docsearch-suggestion--text{display:block;line-height:1.2em;font-size:.85em;color:#63676d}.algolia-autocomplete .algolia-docsearch-suggestion--no-results{width:100%;padding:8px 0;text-align:center;font-size:1.2em}.algolia-autocomplete .algolia-docsearch-suggestion--no-results:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion code{padding:1px 5px;font-size:90%;border:none;color:#222;background-color:#ebebeb;border-radius:3px;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.algolia-autocomplete .algolia-docsearch-suggestion code .algolia-docsearch-suggestion--highlight{background:none}.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header,.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary{display:block}@media (min-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:block}}@media (max-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:inline-block;width:auto;float:left;padding:0;color:#02060c;font-size:.9em;font-weight:700;text-align:left;opacity:.5}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{content:"|"}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{display:inline-block;width:auto;text-align:left;float:left;padding:0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}}.algolia-autocomplete .suggestion-layout-simple.algolia-docsearch-suggestion{border-bottom:1px solid #eee;padding:8px;margin:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content{width:100%;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header{margin:0;padding:0;display:block;width:100%;border:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl0,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1{opacity:.6;font-size:.85em}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1:before{background-image:url('data:image/svg+xml;utf8,');content:"";width:10px;height:10px;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--wrapper{width:100%;float:left;margin:0;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--duplicate-content,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--subcategory-inline{display:none!important}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title{margin:0;color:#458ee1;font-size:.9em;font-weight:400}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title:before{content:"#";font-weight:700;color:#458ee1;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text{margin:4px 0 0;display:block;line-height:1.4em;padding:5.33333px 8px;background:#f8f8f8;font-size:.85em;opacity:.8}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{color:#3f4145;font-weight:700;box-shadow:none}.algolia-autocomplete .algolia-docsearch-footer{width:134px;height:20px;z-index:2000;margin-top:10.66667px;float:right;font-size:0;line-height:0}.algolia-autocomplete .algolia-docsearch-footer--logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='168' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M78.988.938h16.594a2.968 2.968 0 012.966 2.966V20.5a2.967 2.967 0 01-2.966 2.964H78.988a2.967 2.967 0 01-2.966-2.964V3.897A2.961 2.961 0 0178.988.938zm41.937 17.866c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 00-1.574-.199 5.7 5.7 0 00-.897.069 2.699 2.699 0 00-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 01-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 01-1.471-.636 3.085 3.085 0 01-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 011.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 011.82-.185 8.404 8.404 0 011.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 00-.384-.73 1.784 1.784 0 00-.724-.493 3.164 3.164 0 00-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 00-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 012.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 00-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 00-.814.24 1.46 1.46 0 00-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 01.233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 01-1.471-.635 3.085 3.085 0 01-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 012.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 00-.109-.875 1.873 1.873 0 00-.384-.731 1.784 1.784 0 00-.724-.492 3.165 3.165 0 00-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 00-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 012.073-.177zm-8.034-1.271a1.626 1.626 0 01-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 01-1.128 1.906 4.986 4.986 0 01-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 01-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 01-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 011.15-1.892 5.133 5.133 0 011.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 011.753 1.216 5.644 5.644 0 011.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 00-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 01-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 01-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 012.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17z' fill='%235468FF'/%3E%3Cpath d='M6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 00-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 01-.582-.271 13.67 13.67 0 01-.55-.287 4.275 4.275 0 01-.567-.351 6.92 6.92 0 01-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 01-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 00-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 00-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 00-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 01-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z' fill='%235D6494'/%3E%3Cpath d='M89.632 5.967v-.772a.978.978 0 00-.978-.977h-2.28a.978.978 0 00-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 011.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 00-1.382 0l-.465.465a.973.973 0 000 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 00-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 01-4.49-4.482 4.488 4.488 0 014.49-4.482 4.488 4.488 0 014.489 4.482 4.484 4.484 0 01-4.49 4.482m0-10.85a6.363 6.363 0 100 12.729 6.37 6.37 0 006.372-6.368 6.358 6.358 0 00-6.371-6.36' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;background-position:50%;background-size:100%;overflow:hidden;text-indent:-9000px;padding:0!important;width:100%;height:100%;display:block}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#2c3e50}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600}.dropdown-wrapper .mobile-dropdown-title font-size inherit:hover{color:#006edb}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:1rem 1.5rem .45rem 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#006edb}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #006edb;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#006edb}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #007af2}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit{padding:2rem}}@media (max-width:419px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#767676}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page{padding-bottom:2rem;display:block}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#2c3e50;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#006edb;border-left-color:#006edb}.sidebar-heading.clickable:hover{color:#006edb}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#006edb}a.sidebar-link.active{font-weight:600;color:#006edb;border-left-color:#006edb}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.search-box input{color:var(--lighten25TextColor);border-color:var(--darken10BorderColor);background-color:var(--bgColor)}.search-box input:focus{border-color:var(--accentColor)}.search-box .suggestions{background:var(--bgColor);border-color:var(--darken10BorderColor)}.search-box .suggestion a{color:var(--lighten35TextColor)}.search-box .suggestion.focused{background-color:var(--darken10BgColor)}.search-box .suggestion.focused a{color:var(--accentColor)}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu{background:var(--bgColor);border-color:var(--searchBorderColor)}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu:before{border-color:var(--searchBorderColor)}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu .ds-suggestion{border-bottom-color:var(--borderColor)}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion{border-color:var(--borderColor)}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--category-header{background:var(--accentColor)}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--title{color:var(--textColor)}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-footer,.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{border-color:var(--borderColor)}.algolia-search-wrapper .algolia-autocomplete .ds-cursor .algolia-docsearch-suggestion--content,.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{color:var(--textColor)}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top-color:var(--kbdBgColor)}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:var(--accentColor)}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{border-left-color:var(--accentColor)}@media (max-width:719px){.dropdown-wrapper .dropdown-title:hover{color:var(--accentColor)}}@media (min-width:719px){.dropdown-wrapper .dropdown-title .arrow{border-top-color:var(--arrowBgColor)}.dropdown-wrapper .nav-dropdown{background-color:var(--bgColor);border-color:var(--borderColor)}}.home .hero .description{color:var(--lighten40TextColor)}.home .hero .action-button{background-color:var(--accentColor);border-bottom-color:var(--darken10AccentColor)}.home .hero .action-button:hover{background-color:var(--lighten10AccentColor)}.home .features{border-top-color:var(--borderColor)}.home .feature h2{color:var(--lighten10TextColor)}.home .feature p,.home .footer{color:var(--lighten25TextColor)}.home .footer{border-top-color:var(--borderColor)}.navbar .site-name{color:var(--textColor);white-space:nowrap}.navbar .links{background:var(--bgColor)}.nav-links a.router-link-active,.nav-links a:hover{color:var(--accentColor)}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:var(--textColor)}}@media (min-width:719px){.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{border-bottom-color:var(--accentColor)}}.page-edit .edit-link a,.page-edit .last-updated .prefix{color:var(--lighten25TextColor)}.page-edit .last-updated .time{color:var(--lighten40TextColor)}.page-nav .inner,.sidebar .nav-links{border-color:var(--borderColor)}.sidebar-heading{color:var(--textColor)}.sidebar-heading.clickable.active{color:var(--accentColor);border-left-color:var(--accentColor)}.sidebar-heading.clickable:hover{color:var(--accentColor)}a.sidebar-link{color:var(--textColor)}a.sidebar-link.active,a.sidebar-link:hover{color:var(--accentColor)}a.sidebar-link.active{border-left-color:var(--accentColor)}
\ No newline at end of file
diff --git a/assets/img/cronjob.13a2a082.png b/assets/img/cronjob.13a2a082.png
new file mode 100644
index 00000000..4cf50e8a
Binary files /dev/null and b/assets/img/cronjob.13a2a082.png differ
diff --git a/assets/img/databases-add.48f8f471.png b/assets/img/databases-add.48f8f471.png
new file mode 100644
index 00000000..d21a39a9
Binary files /dev/null and b/assets/img/databases-add.48f8f471.png differ
diff --git a/assets/img/databases-done.a0441970.png b/assets/img/databases-done.a0441970.png
new file mode 100644
index 00000000..59872cb7
Binary files /dev/null and b/assets/img/databases-done.a0441970.png differ
diff --git a/assets/img/databases.5d9cf5ab.png b/assets/img/databases.5d9cf5ab.png
new file mode 100644
index 00000000..1907682c
Binary files /dev/null and b/assets/img/databases.5d9cf5ab.png differ
diff --git a/assets/img/databases.f4d298e3.png b/assets/img/databases.f4d298e3.png
new file mode 100644
index 00000000..ba844fa1
Binary files /dev/null and b/assets/img/databases.f4d298e3.png differ
diff --git a/assets/img/ffmpeg-folder.1ef2e021.png b/assets/img/ffmpeg-folder.1ef2e021.png
new file mode 100644
index 00000000..af436ce1
Binary files /dev/null and b/assets/img/ffmpeg-folder.1ef2e021.png differ
diff --git a/assets/img/file-manager-extract-files.0ef60e09.png b/assets/img/file-manager-extract-files.0ef60e09.png
new file mode 100644
index 00000000..48c88681
Binary files /dev/null and b/assets/img/file-manager-extract-files.0ef60e09.png differ
diff --git a/assets/img/file-manager-extract.657c0c2b.png b/assets/img/file-manager-extract.657c0c2b.png
new file mode 100644
index 00000000..0b8cddde
Binary files /dev/null and b/assets/img/file-manager-extract.657c0c2b.png differ
diff --git a/assets/img/file-manager-extract.72bea043.png b/assets/img/file-manager-extract.72bea043.png
new file mode 100644
index 00000000..31bf8b6c
Binary files /dev/null and b/assets/img/file-manager-extract.72bea043.png differ
diff --git a/assets/img/file-manager-remove-file.c5b2f1aa.png b/assets/img/file-manager-remove-file.c5b2f1aa.png
new file mode 100644
index 00000000..0fd528dc
Binary files /dev/null and b/assets/img/file-manager-remove-file.c5b2f1aa.png differ
diff --git a/assets/img/file-manager.c016ac19.png b/assets/img/file-manager.c016ac19.png
new file mode 100644
index 00000000..35f7b890
Binary files /dev/null and b/assets/img/file-manager.c016ac19.png differ
diff --git a/assets/img/files.4aa4878b.png b/assets/img/files.4aa4878b.png
new file mode 100644
index 00000000..9bcb6019
Binary files /dev/null and b/assets/img/files.4aa4878b.png differ
diff --git a/assets/img/files.7fc6b3d4.png b/assets/img/files.7fc6b3d4.png
new file mode 100644
index 00000000..d99a1603
Binary files /dev/null and b/assets/img/files.7fc6b3d4.png differ
diff --git a/assets/img/hosting-settings.cd381b89.png b/assets/img/hosting-settings.cd381b89.png
new file mode 100644
index 00000000..7839059e
Binary files /dev/null and b/assets/img/hosting-settings.cd381b89.png differ
diff --git a/assets/img/multiphp-ini-keys.83901b7f.png b/assets/img/multiphp-ini-keys.83901b7f.png
new file mode 100644
index 00000000..7fb1123f
Binary files /dev/null and b/assets/img/multiphp-ini-keys.83901b7f.png differ
diff --git a/assets/img/multiphp-manager.88fa8221.png b/assets/img/multiphp-manager.88fa8221.png
new file mode 100644
index 00000000..ee75ebd3
Binary files /dev/null and b/assets/img/multiphp-manager.88fa8221.png differ
diff --git a/assets/img/mutliphp-ini-editor.859b4a87.png b/assets/img/mutliphp-ini-editor.859b4a87.png
new file mode 100644
index 00000000..5653e80b
Binary files /dev/null and b/assets/img/mutliphp-ini-editor.859b4a87.png differ
diff --git a/assets/img/mysql-wizard-create-database.e64fa0ed.png b/assets/img/mysql-wizard-create-database.e64fa0ed.png
new file mode 100644
index 00000000..bfefeced
Binary files /dev/null and b/assets/img/mysql-wizard-create-database.e64fa0ed.png differ
diff --git a/assets/img/mysql-wizard-privileges.0eee95f6.png b/assets/img/mysql-wizard-privileges.0eee95f6.png
new file mode 100644
index 00000000..e29987f1
Binary files /dev/null and b/assets/img/mysql-wizard-privileges.0eee95f6.png differ
diff --git a/assets/img/php-support.997fe037.png b/assets/img/php-support.997fe037.png
new file mode 100644
index 00000000..38c28da7
Binary files /dev/null and b/assets/img/php-support.997fe037.png differ
diff --git a/assets/img/search.83621669.svg b/assets/img/search.83621669.svg
new file mode 100644
index 00000000..03d83913
--- /dev/null
+++ b/assets/img/search.83621669.svg
@@ -0,0 +1 @@
+
diff --git a/assets/img/sheduled-tasks-add.79d9d81c.png b/assets/img/sheduled-tasks-add.79d9d81c.png
new file mode 100644
index 00000000..c407f123
Binary files /dev/null and b/assets/img/sheduled-tasks-add.79d9d81c.png differ
diff --git a/assets/img/sheduled-tasks-demo.c5d5a25c.png b/assets/img/sheduled-tasks-demo.c5d5a25c.png
new file mode 100644
index 00000000..4b05bf11
Binary files /dev/null and b/assets/img/sheduled-tasks-demo.c5d5a25c.png differ
diff --git a/assets/img/sheduled-tasks-ok.8173ab49.png b/assets/img/sheduled-tasks-ok.8173ab49.png
new file mode 100644
index 00000000..aa43a560
Binary files /dev/null and b/assets/img/sheduled-tasks-ok.8173ab49.png differ
diff --git a/assets/img/sheduled-tasks.e4524d2a.png b/assets/img/sheduled-tasks.e4524d2a.png
new file mode 100644
index 00000000..621edd05
Binary files /dev/null and b/assets/img/sheduled-tasks.e4524d2a.png differ
diff --git a/assets/img/software.77971e2e.png b/assets/img/software.77971e2e.png
new file mode 100644
index 00000000..ca0ea5a9
Binary files /dev/null and b/assets/img/software.77971e2e.png differ
diff --git a/assets/img/tinkerwell-chevereto.387ddd77.png b/assets/img/tinkerwell-chevereto.387ddd77.png
new file mode 100644
index 00000000..05fd50f2
Binary files /dev/null and b/assets/img/tinkerwell-chevereto.387ddd77.png differ
diff --git a/assets/js/1.4572fa76.js b/assets/js/1.4572fa76.js
new file mode 100644
index 00000000..f8647cf9
--- /dev/null
+++ b/assets/js/1.4572fa76.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[1,12,14,26,27,29],{243:function(t,e,n){"use strict";n.d(e,"d",(function(){return s})),n.d(e,"a",(function(){return r})),n.d(e,"i",(function(){return o})),n.d(e,"f",(function(){return l})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return c})),n.d(e,"b",(function(){return h})),n.d(e,"e",(function(){return f})),n.d(e,"k",(function(){return p})),n.d(e,"l",(function(){return d})),n.d(e,"c",(function(){return m})),n.d(e,"j",(function(){return k}));n(93);const s=/#.*$/,i=/\.(md|html)$/,r=/\/$/,o=/^[a-z]+:/i;function a(t){return decodeURI(t).replace(s,"").replace(i,"")}function l(t){return o.test(t)}function u(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function h(t){if(l(t))return t;const e=t.match(s),n=e?e[0]:"",i=a(t);return r.test(i)?t:i+".html"+n}function f(t,e){const n=decodeURIComponent(t.hash),i=function(t){const e=t.match(s);if(e)return e[0]}(e);if(i&&n!==i)return!1;return a(t.path)===a(e)}function p(t,e,n){if(l(e))return{type:"external",path:e};n&&(e=function(t,e,n){const s=t.charAt(0);if("/"===s)return t;if("?"===s||"#"===s)return e+t;const i=e.split("/");n&&i[i.length-1]||i.pop();const r=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(e,n,s,i=1){if("string"==typeof e)return p(n,e,s);if(Array.isArray(e))return Object.assign(p(n,e[0],s),{title:e[1]});{const r=e.children||[];return 0===r.length&&e.path?Object.assign(p(n,e.path,s),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:r.map(e=>t(e,n,s,i+1)),collapsable:!1!==e.collapsable}}}(t,i,n)):[]}return[]}function g(t){const e=m(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function m(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function k(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},244:function(t,e,n){},245:function(t,e,n){"use strict";n.r(e);var s=n(243),i={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(s.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(s.g)(this.link)||Object(s.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(s.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(s.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},r=n(17),o=Object(r.a)(i,(function(){var t=this,e=t._self._c;return t.isInternal?e("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?e("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.default=o.exports},246:function(t,e,n){"use strict";n.r(e);var s={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},i=(n(247),n(17)),r=Object(i.a)(s,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=r.exports},247:function(t,e,n){"use strict";n(244)},248:function(t,e,n){},251:function(t,e,n){},255:function(t,e,n){"use strict";n(248)},258:function(t,e,n){"use strict";n.r(e);var s=n(245),i=n(246),r=n(94),o=n.n(r),a={name:"DropdownLink",components:{NavLink:s.default,DropdownTransition:i.default},props:{item:{required:!0}},data:()=>({open:!1}),computed:{dropdownAriaLabel(){return this.item.ariaLabel||this.item.text}},watch:{$route(){this.open=!1}},methods:{setOpen(t){this.open=t},isLastItemOfArray:(t,e)=>o()(e)===t,handleDropdown(){0===event.detail&&this.setOpen(!this.open)}}},l=(n(255),n(17)),u=Object(l.a)(a,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[e("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.handleDropdown}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow down"})]),t._v(" "),e("button",{staticClass:"mobile-dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(e){return t.setOpen(!t.open)}}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),e("DropdownTransition",[e("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(n,s){return e("li",{key:n.link||s,staticClass:"dropdown-item"},["links"===n.type?e("h4",[t._v("\n "+t._s(n.text)+"\n ")]):t._e(),t._v(" "),"links"===n.type?e("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(n.items,(function(s){return e("li",{key:s.link,staticClass:"dropdown-subitem"},[e("NavLink",{attrs:{item:s},on:{focusout:function(e){t.isLastItemOfArray(s,n.items)&&t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0):e("NavLink",{attrs:{item:n},on:{focusout:function(e){t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null);e.default=u.exports},261:function(t,e,n){"use strict";n(251)},262:function(t,e,n){},270:function(t,e,n){"use strict";n.r(e);var s=n(258),i=n(243),r={name:"NavLinks",components:{NavLink:n(245).default,DropdownLink:s.default},computed:{userNav(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav(){const{locales:t}=this.$site;if(t&&Object.keys(t).length>1){const e=this.$page.path,n=this.$router.options.routes,s=this.$site.themeConfig.locales||{},i={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(t).map(i=>{const r=t[i],o=s[i]&&s[i].label||r.lang;let a;return r.lang===this.$lang?a=e:(a=e.replace(this.$localeConfig.path,i),n.some(t=>t.path===a)||(a=i)),{text:o,link:a}})};return[...this.userNav,i]}return this.userNav},userLinks(){return(this.nav||[]).map(t=>Object.assign(Object(i.j)(t),{items:(t.items||[]).map(i.j)}))},repoLink(){const{repo:t}=this.$site.themeConfig;return t?/^https?:/.test(t)?t:"https://github.com/"+t:null},repoLabel(){if(!this.repoLink)return;if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;const t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"];for(let n=0;n{let s=i()(e,"title","");return i()(e,"frontmatter.tags")&&(s+=" "+e.frontmatter.tags.join(" ")),n&&(s+=" "+n),o(t,s)};const o=(t,e)=>{const n=t=>t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),s=new RegExp("[^\0-]"),i=t.split(/\s+/g).map(t=>t.trim()).filter(t=>!!t);if(s.test(t))return i.some(t=>e.toLowerCase().indexOf(t)>-1);{const s=t.endsWith(" ");return new RegExp(i.map((t,e)=>i.length!==e+1||s?`(?=.*\\b${n(t)}\\b)`:`(?=.*\\b${n(t)})`).join("")+".+","gi").test(e)}};var a={name:"SearchBox",data:()=>({query:"",focused:!1,focusIndex:0,placeholder:void 0}),computed:{showSuggestions(){return this.focused&&this.suggestions&&this.suggestions.length},suggestions(){const t=this.query.trim().toLowerCase();if(!t)return;const{pages:e}=this.$site,n=this.$site.themeConfig.searchMaxSuggestions||5,s=this.$localePath,i=[];for(let o=0;o=n);o++){const a=e[o];if(this.getPageLocalePath(a)===s&&this.isSearchable(a))if(r(t,a))i.push(a);else if(a.headers)for(let e=0;e=n);e++){const n=a.headers[e];n.title&&r(t,a,n.title)&&i.push(Object.assign({},a,{path:a.path+"#"+n.slug,header:n}))}}return i},alignRight(){return(this.$site.themeConfig.nav||[]).length+(this.$site.repo?1:0)<=2}},mounted(){this.placeholder=this.$site.themeConfig.searchPlaceholder||"",document.addEventListener("keydown",this.onHotkey)},beforeDestroy(){document.removeEventListener("keydown",this.onHotkey)},methods:{getPageLocalePath(t){for(const e in this.$site.locales||{})if("/"!==e&&0===t.path.indexOf(e))return e;return"/"},isSearchable(t){let e=null;return null===e||(e=Array.isArray(e)?e:new Array(e),e.filter(e=>t.path.match(e)).length>0)},onHotkey(t){t.srcElement===document.body&&["s","/"].includes(t.key)&&(this.$refs.input.focus(),t.preventDefault())},onUp(){this.showSuggestions&&(this.focusIndex>0?this.focusIndex--:this.focusIndex=this.suggestions.length-1)},onDown(){this.showSuggestions&&(this.focusIndex "+t._s(n.header.title))]):t._e()])])})),0):t._e()])}),[],!1,null,null,null).exports,c=n(290),h=n(270);function f(t,e){return t.ownerDocument.defaultView.getComputedStyle(t,null)[e]}var p={name:"Navbar",components:{SidebarButton:c.default,NavLinks:h.default,SearchBox:u,AlgoliaSearchBox:{}},data:()=>({linksWrapMaxWidth:null}),computed:{algolia(){return this.$themeLocaleConfig.algolia||this.$site.themeConfig.algolia||{}},isAlgoliaSearch(){return this.algolia&&this.algolia.apiKey&&this.algolia.indexName}},mounted(){const t=parseInt(f(this.$el,"paddingLeft"))+parseInt(f(this.$el,"paddingRight")),e=()=>{document.documentElement.clientWidth<719?this.linksWrapMaxWidth=null:this.linksWrapMaxWidth=this.$el.offsetWidth-t-(this.$refs.siteName&&this.$refs.siteName.offsetWidth||0)};e(),window.addEventListener("resize",e,!1)}},d=(n(297),Object(l.a)(p,(function(){var t=this,e=t._self._c;return e("header",{staticClass:"navbar"},[e("SidebarButton",{on:{"toggle-sidebar":function(e){return t.$emit("toggle-sidebar")}}}),t._v(" "),e("RouterLink",{staticClass:"home-link",attrs:{to:t.$localePath}},[t.$site.themeConfig.logo?e("img",{staticClass:"logo",attrs:{src:t.$withBase(t.$site.themeConfig.logo),alt:t.$siteTitle}}):t._e(),t._v(" "),t.$siteTitle?e("span",{ref:"siteName",staticClass:"site-name",class:{"can-hide":t.$site.themeConfig.logo}},[t._v(t._s(t.$siteTitle))]):t._e()]),t._v(" "),e("div",{staticClass:"links",style:t.linksWrapMaxWidth?{"max-width":t.linksWrapMaxWidth+"px"}:{}},[t.isAlgoliaSearch?e("AlgoliaSearchBox",{attrs:{options:t.algolia}}):!1!==t.$site.themeConfig.search&&!1!==t.$page.frontmatter.search?e("SearchBox"):t._e(),t._v(" "),e("NavLinks",{staticClass:"can-hide"})],1)],1)}),[],!1,null,null,null));e.default=d.exports}}]);
\ No newline at end of file
diff --git a/assets/js/10.63e6632a.js b/assets/js/10.63e6632a.js
new file mode 100644
index 00000000..79d61408
--- /dev/null
+++ b/assets/js/10.63e6632a.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[10,3,12,14,21,26,29],{243:function(t,e,n){"use strict";n.d(e,"d",(function(){return i})),n.d(e,"a",(function(){return r})),n.d(e,"i",(function(){return a})),n.d(e,"f",(function(){return l})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return c})),n.d(e,"b",(function(){return p})),n.d(e,"e",(function(){return h})),n.d(e,"k",(function(){return d})),n.d(e,"l",(function(){return f})),n.d(e,"c",(function(){return m})),n.d(e,"j",(function(){return g}));n(93);const i=/#.*$/,s=/\.(md|html)$/,r=/\/$/,a=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(i,"").replace(s,"")}function l(t){return a.test(t)}function u(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function p(t){if(l(t))return t;const e=t.match(i),n=e?e[0]:"",s=o(t);return r.test(s)?t:s+".html"+n}function h(t,e){const n=decodeURIComponent(t.hash),s=function(t){const e=t.match(i);if(e)return e[0]}(e);if(s&&n!==s)return!1;return o(t.path)===o(e)}function d(t,e,n){if(l(e))return{type:"external",path:e};n&&(e=function(t,e,n){const i=t.charAt(0);if("/"===i)return t;if("?"===i||"#"===i)return e+t;const s=e.split("/");n&&s[s.length-1]||s.pop();const r=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(e,n,i,s=1){if("string"==typeof e)return d(n,e,i);if(Array.isArray(e))return Object.assign(d(n,e[0],i),{title:e[1]});{const r=e.children||[];return 0===r.length&&e.path?Object.assign(d(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:r.map(e=>t(e,n,i,s+1)),collapsable:!1!==e.collapsable}}}(t,s,n)):[]}return[]}function b(t){const e=m(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function m(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function g(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},244:function(t,e,n){},245:function(t,e,n){"use strict";n.r(e);var i=n(243),s={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(i.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(i.g)(this.link)||Object(i.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(i.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(i.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},r=n(17),a=Object(r.a)(s,(function(){var t=this,e=t._self._c;return t.isInternal?e("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?e("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.default=a.exports},246:function(t,e,n){"use strict";n.r(e);var i={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},s=(n(247),n(17)),r=Object(s.a)(i,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=r.exports},247:function(t,e,n){"use strict";n(244)},248:function(t,e,n){},249:function(t,e,n){},251:function(t,e,n){},254:function(t,e,n){},255:function(t,e,n){"use strict";n(248)},256:function(t,e,n){"use strict";n(249)},257:function(t,e,n){"use strict";n.r(e);var i=n(271),s=n(259),r=n(243);function a(t,e){if("group"===e.type){const n=e.path&&Object(r.e)(t,e.path),i=e.children.some(e=>"group"===e.type?a(t,e):"page"===e.type&&Object(r.e)(t,e.path));return n||i}return!1}var o={name:"SidebarLinks",components:{SidebarGroup:i.default,SidebarLink:s.default},props:["items","depth","sidebarDepth","initialOpenGroupIndex"],data(){return{openGroupIndex:this.initialOpenGroupIndex||0}},watch:{$route(){this.refreshIndex()}},created(){this.refreshIndex()},methods:{refreshIndex(){const t=function(t,e){for(let n=0;n-1&&(this.openGroupIndex=t)},toggleGroup(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive(t){return Object(r.e)(this.$route,t.regularPath)}}},l=n(17),u=Object(l.a)(o,(function(){var t=this,e=t._self._c;return t.items.length?e("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(n,i){return e("li",{key:i},["group"===n.type?e("SidebarGroup",{attrs:{item:n,open:i===t.openGroupIndex,collapsable:n.collapsable||n.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(i)}}}):e("SidebarLink",{attrs:{"sidebar-depth":t.sidebarDepth,item:n}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=u.exports},258:function(t,e,n){"use strict";n.r(e);var i=n(245),s=n(246),r=n(94),a=n.n(r),o={name:"DropdownLink",components:{NavLink:i.default,DropdownTransition:s.default},props:{item:{required:!0}},data:()=>({open:!1}),computed:{dropdownAriaLabel(){return this.item.ariaLabel||this.item.text}},watch:{$route(){this.open=!1}},methods:{setOpen(t){this.open=t},isLastItemOfArray:(t,e)=>a()(e)===t,handleDropdown(){0===event.detail&&this.setOpen(!this.open)}}},l=(n(255),n(17)),u=Object(l.a)(o,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[e("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.handleDropdown}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow down"})]),t._v(" "),e("button",{staticClass:"mobile-dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(e){return t.setOpen(!t.open)}}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),e("DropdownTransition",[e("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(n,i){return e("li",{key:n.link||i,staticClass:"dropdown-item"},["links"===n.type?e("h4",[t._v("\n "+t._s(n.text)+"\n ")]):t._e(),t._v(" "),"links"===n.type?e("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(n.items,(function(i){return e("li",{key:i.link,staticClass:"dropdown-subitem"},[e("NavLink",{attrs:{item:i},on:{focusout:function(e){t.isLastItemOfArray(i,n.items)&&t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0):e("NavLink",{attrs:{item:n},on:{focusout:function(e){t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null);e.default=u.exports},259:function(t,e,n){"use strict";n.r(e);var i=n(243);function s(t,e,n,i,s){const r={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:i,"sidebar-link":!0}};return s>2&&(r.style={"padding-left":s+"rem"}),t("RouterLink",r,n)}function r(t,e,n,a,o,l=1){return!e||l>o?null:t("ul",{class:"sidebar-sub-headers"},e.map(e=>{const u=Object(i.e)(a,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[s(t,n+"#"+e.slug,e.title,u,e.level-1),r(t,e.children,n,a,o,l+1)])}))}var a={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:e,$site:n,$route:a,$themeConfig:o,$themeLocaleConfig:l},props:{item:u,sidebarDepth:c}}){const p=Object(i.e)(a,u.path),h="auto"===u.type?p||u.children.some(t=>Object(i.e)(a,u.basePath+"#"+t.slug)):p,d="external"===u.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,u.path,u.title||u.path):s(t,u.path,u.title||u.path,h),f=[e.frontmatter.sidebarDepth,c,l.sidebarDepth,o.sidebarDepth,1].find(t=>void 0!==t),b=l.displayAllHeaders||o.displayAllHeaders;if("auto"===u.type)return[d,r(t,u.children,u.basePath,a,f)];if((h||b)&&u.headers&&!i.d.test(u.path)){return[d,r(t,Object(i.c)(u.headers),u.path,a,f)]}return d}},o=(n(256),n(17)),l=Object(o.a)(a,void 0,void 0,!1,null,null,null);e.default=l.exports},261:function(t,e,n){"use strict";n(251)},267:function(t,e,n){"use strict";n(254)},268:function(t,e,n){},270:function(t,e,n){"use strict";n.r(e);var i=n(258),s=n(243),r={name:"NavLinks",components:{NavLink:n(245).default,DropdownLink:i.default},computed:{userNav(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav(){const{locales:t}=this.$site;if(t&&Object.keys(t).length>1){const e=this.$page.path,n=this.$router.options.routes,i=this.$site.themeConfig.locales||{},s={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(t).map(s=>{const r=t[s],a=i[s]&&i[s].label||r.lang;let o;return r.lang===this.$lang?o=e:(o=e.replace(this.$localeConfig.path,s),n.some(t=>t.path===o)||(o=s)),{text:a,link:o}})};return[...this.userNav,s]}return this.userNav},userLinks(){return(this.nav||[]).map(t=>Object.assign(Object(s.j)(t),{items:(t.items||[]).map(s.j)}))},repoLink(){const{repo:t}=this.$site.themeConfig;return t?/^https?:/.test(t)?t:"https://github.com/"+t:null},repoLabel(){if(!this.repoLink)return;if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;const t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"];for(let n=0;nfunction t(e,n,r,i=1){if("string"==typeof e)return d(n,e,r);if(Array.isArray(e))return Object.assign(d(n,e[0],r),{title:e[1]});{const a=e.children||[];return 0===a.length&&e.path?Object.assign(d(n,e.path,r),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:a.map(e=>t(e,n,r,i+1)),collapsable:!1!==e.collapsable}}}(t,i,n)):[]}return[]}function g(t){const e=v(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function v(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function m(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},250:function(t,e){t.exports=function(t){return null==t}},252:function(t,e,n){},253:function(t,e,n){},263:function(t,e,n){"use strict";n(252)},264:function(t,e,n){var r=n(14),i=n(6),a=n(12);t.exports=function(t){return"string"==typeof t||!i(t)&&a(t)&&"[object String]"==r(t)}},265:function(t,e,n){"use strict";n(253)},266:function(t,e,n){},272:function(t,e,n){"use strict";n.r(e);var r=n(250),i=n.n(r),a=n(243),s={name:"PageEdit",computed:{lastUpdated(){return this.$page.lastUpdated},lastUpdatedText(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},editLink(){const t=i()(this.$page.frontmatter.editLink)?this.$site.themeConfig.editLinks:this.$page.frontmatter.editLink,{repo:e,docsDir:n="",docsBranch:r="master",docsRepo:a=e}=this.$site.themeConfig;return t&&a&&this.$page.relativePath?this.createEditLink(e,a,n,r,this.$page.relativePath):null},editLinkText(){return this.$themeLocaleConfig.editLinkText||this.$site.themeConfig.editLinkText||"Edit this page"}},methods:{createEditLink(t,e,n,r,i){if(/bitbucket.org/.test(e)){return e.replace(a.a,"")+"/src"+`/${r}/`+(n?n.replace(a.a,"")+"/":"")+i+`?mode=edit&spa=0&at=${r}&fileviewer=file-view-default`}if(/gitlab.com/.test(e)){return e.replace(a.a,"")+"/-/edit"+`/${r}/`+(n?n.replace(a.a,"")+"/":"")+i}return(a.i.test(e)?e:"https://github.com/"+e).replace(a.a,"")+"/edit"+`/${r}/`+(n?n.replace(a.a,"")+"/":"")+i}}},o=(n(263),n(17)),u=Object(o.a)(s,(function(){var t=this,e=t._self._c;return e("footer",{staticClass:"page-edit"},[t.editLink?e("div",{staticClass:"edit-link"},[e("a",{attrs:{href:t.editLink,target:"_blank",rel:"noopener noreferrer"}},[t._v(t._s(t.editLinkText))]),t._v(" "),e("OutboundLink")],1):t._e(),t._v(" "),t.lastUpdated?e("div",{staticClass:"last-updated"},[e("span",{staticClass:"prefix"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),e("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])]):t._e()])}),[],!1,null,null,null);e.default=u.exports},273:function(t,e,n){"use strict";n.r(e);n(93);var r=n(243),i=n(264),a=n.n(i),s=n(250),o=n.n(s),u={name:"PageNav",props:["sidebarItems"],computed:{prev(){return l(c.PREV,this)},next(){return l(c.NEXT,this)}}};const c={NEXT:{resolveLink:function(t,e){return p(t,e,1)},getThemeLinkConfig:({nextLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.next},PREV:{resolveLink:function(t,e){return p(t,e,-1)},getThemeLinkConfig:({prevLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.prev}};function l(t,{$themeConfig:e,$page:n,$route:i,$site:s,sidebarItems:u}){const{resolveLink:c,getThemeLinkConfig:l,getPageLinkConfig:p}=t,f=l(e),d=p(n),h=o()(d)?f:d;return!1===h?void 0:a()(h)?Object(r.k)(s.pages,h,i.path):c(n,u)}function p(t,e,n){const r=[];!function t(e,n){for(let r=0,i=e.length;rfunction t(e,n,i,r=1){if("string"==typeof e)return f(n,e,i);if(Array.isArray(e))return Object.assign(f(n,e[0],i),{title:e[1]});{const s=e.children||[];return 0===s.length&&e.path?Object.assign(f(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:s.map(e=>t(e,n,i,r+1)),collapsable:!1!==e.collapsable}}}(t,r,n)):[]}return[]}function m(t){const e=b(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function b(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function g(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},244:function(t,e,n){},245:function(t,e,n){"use strict";n.r(e);var i=n(243),r={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(i.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(i.g)(this.link)||Object(i.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(i.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(i.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},s=n(17),a=Object(s.a)(r,(function(){var t=this,e=t._self._c;return t.isInternal?e("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?e("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.default=a.exports},246:function(t,e,n){"use strict";n.r(e);var i={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},r=(n(247),n(17)),s=Object(r.a)(i,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=s.exports},247:function(t,e,n){"use strict";n(244)},248:function(t,e,n){},251:function(t,e,n){},255:function(t,e,n){"use strict";n(248)},258:function(t,e,n){"use strict";n.r(e);var i=n(245),r=n(246),s=n(94),a=n.n(s),o={name:"DropdownLink",components:{NavLink:i.default,DropdownTransition:r.default},props:{item:{required:!0}},data:()=>({open:!1}),computed:{dropdownAriaLabel(){return this.item.ariaLabel||this.item.text}},watch:{$route(){this.open=!1}},methods:{setOpen(t){this.open=t},isLastItemOfArray:(t,e)=>a()(e)===t,handleDropdown(){0===event.detail&&this.setOpen(!this.open)}}},l=(n(255),n(17)),u=Object(l.a)(o,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[e("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.handleDropdown}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow down"})]),t._v(" "),e("button",{staticClass:"mobile-dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(e){return t.setOpen(!t.open)}}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),e("DropdownTransition",[e("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(n,i){return e("li",{key:n.link||i,staticClass:"dropdown-item"},["links"===n.type?e("h4",[t._v("\n "+t._s(n.text)+"\n ")]):t._e(),t._v(" "),"links"===n.type?e("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(n.items,(function(i){return e("li",{key:i.link,staticClass:"dropdown-subitem"},[e("NavLink",{attrs:{item:i},on:{focusout:function(e){t.isLastItemOfArray(i,n.items)&&t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0):e("NavLink",{attrs:{item:n},on:{focusout:function(e){t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null);e.default=u.exports},261:function(t,e,n){"use strict";n(251)},270:function(t,e,n){"use strict";n.r(e);var i=n(258),r=n(243),s={name:"NavLinks",components:{NavLink:n(245).default,DropdownLink:i.default},computed:{userNav(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav(){const{locales:t}=this.$site;if(t&&Object.keys(t).length>1){const e=this.$page.path,n=this.$router.options.routes,i=this.$site.themeConfig.locales||{},r={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(t).map(r=>{const s=t[r],a=i[r]&&i[r].label||s.lang;let o;return s.lang===this.$lang?o=e:(o=e.replace(this.$localeConfig.path,r),n.some(t=>t.path===o)||(o=r)),{text:a,link:o}})};return[...this.userNav,r]}return this.userNav},userLinks(){return(this.nav||[]).map(t=>Object.assign(Object(r.j)(t),{items:(t.items||[]).map(r.j)}))},repoLink(){const{repo:t}=this.$site.themeConfig;return t?/^https?:/.test(t)?t:"https://github.com/"+t:null},repoLabel(){if(!this.repoLink)return;if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;const t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"];for(let n=0;n({placeholder:void 0}),watch:{$lang(e){this.update(this.options,e)},options(e){this.update(e,this.$lang)}},mounted(){this.initialize(this.options,this.$lang),this.placeholder=this.$site.themeConfig.searchPlaceholder||""},methods:{initialize(e,t){Promise.all([Promise.all([a.e(0),a.e(9)]).then(a.t.bind(null,330,7)),Promise.all([a.e(0),a.e(9)]).then(a.t.bind(null,331,7))]).then(([a])=>{a=a.default;const{algoliaOptions:i={}}=e;a(Object.assign({},e,{inputSelector:"#algolia-search-input",algoliaOptions:{...i,facetFilters:["lang:"+t].concat(i.facetFilters||[])},handleSelected:(e,t,a)=>{const{pathname:i,hash:n}=new URL(a.url),r=i.replace(this.$site.base,"/"),s=decodeURIComponent(n);this.$router.push(`${r}${s}`)}}))})},update(e,t){this.$el.innerHTML='',this.initialize(e,t)}}},n=(a(295),a(17)),r=Object(n.a)(i,(function(){var e=this._self._c;return e("form",{staticClass:"algolia-search-wrapper search-box",attrs:{id:"search-form",role:"search"}},[e("input",{staticClass:"search-query",attrs:{id:"algolia-search-input",placeholder:this.placeholder}})])}),[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/14.fc4a1a9f.js b/assets/js/14.fc4a1a9f.js
new file mode 100644
index 00000000..75c48edc
--- /dev/null
+++ b/assets/js/14.fc4a1a9f.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[14,26,29],{243:function(t,e,n){"use strict";n.d(e,"d",(function(){return i})),n.d(e,"a",(function(){return s})),n.d(e,"i",(function(){return o})),n.d(e,"f",(function(){return l})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return c})),n.d(e,"b",(function(){return p})),n.d(e,"e",(function(){return f})),n.d(e,"k",(function(){return h})),n.d(e,"l",(function(){return d})),n.d(e,"c",(function(){return b})),n.d(e,"j",(function(){return g}));n(93);const i=/#.*$/,r=/\.(md|html)$/,s=/\/$/,o=/^[a-z]+:/i;function a(t){return decodeURI(t).replace(i,"").replace(r,"")}function l(t){return o.test(t)}function u(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function p(t){if(l(t))return t;const e=t.match(i),n=e?e[0]:"",r=a(t);return s.test(r)?t:r+".html"+n}function f(t,e){const n=decodeURIComponent(t.hash),r=function(t){const e=t.match(i);if(e)return e[0]}(e);if(r&&n!==r)return!1;return a(t.path)===a(e)}function h(t,e,n){if(l(e))return{type:"external",path:e};n&&(e=function(t,e,n){const i=t.charAt(0);if("/"===i)return t;if("?"===i||"#"===i)return e+t;const r=e.split("/");n&&r[r.length-1]||r.pop();const s=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(e,n,i,r=1){if("string"==typeof e)return h(n,e,i);if(Array.isArray(e))return Object.assign(h(n,e[0],i),{title:e[1]});{const s=e.children||[];return 0===s.length&&e.path?Object.assign(h(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:s.map(e=>t(e,n,i,r+1)),collapsable:!1!==e.collapsable}}}(t,r,n)):[]}return[]}function m(t){const e=b(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function b(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function g(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},244:function(t,e,n){},245:function(t,e,n){"use strict";n.r(e);var i=n(243),r={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(i.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(i.g)(this.link)||Object(i.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(i.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(i.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},s=n(17),o=Object(s.a)(r,(function(){var t=this,e=t._self._c;return t.isInternal?e("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?e("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.default=o.exports},246:function(t,e,n){"use strict";n.r(e);var i={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},r=(n(247),n(17)),s=Object(r.a)(i,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=s.exports},247:function(t,e,n){"use strict";n(244)},248:function(t,e,n){},255:function(t,e,n){"use strict";n(248)},258:function(t,e,n){"use strict";n.r(e);var i=n(245),r=n(246),s=n(94),o=n.n(s),a={name:"DropdownLink",components:{NavLink:i.default,DropdownTransition:r.default},props:{item:{required:!0}},data:()=>({open:!1}),computed:{dropdownAriaLabel(){return this.item.ariaLabel||this.item.text}},watch:{$route(){this.open=!1}},methods:{setOpen(t){this.open=t},isLastItemOfArray:(t,e)=>o()(e)===t,handleDropdown(){0===event.detail&&this.setOpen(!this.open)}}},l=(n(255),n(17)),u=Object(l.a)(a,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[e("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.handleDropdown}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow down"})]),t._v(" "),e("button",{staticClass:"mobile-dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(e){return t.setOpen(!t.open)}}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),e("DropdownTransition",[e("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(n,i){return e("li",{key:n.link||i,staticClass:"dropdown-item"},["links"===n.type?e("h4",[t._v("\n "+t._s(n.text)+"\n ")]):t._e(),t._v(" "),"links"===n.type?e("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(n.items,(function(i){return e("li",{key:i.link,staticClass:"dropdown-subitem"},[e("NavLink",{attrs:{item:i},on:{focusout:function(e){t.isLastItemOfArray(i,n.items)&&t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0):e("NavLink",{attrs:{item:n},on:{focusout:function(e){t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null);e.default=u.exports}}]);
\ No newline at end of file
diff --git a/assets/js/15.995f9cc0.js b/assets/js/15.995f9cc0.js
new file mode 100644
index 00000000..bc907eee
--- /dev/null
+++ b/assets/js/15.995f9cc0.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{243:function(t,n,e){"use strict";e.d(n,"d",(function(){return r})),e.d(n,"a",(function(){return o})),e.d(n,"i",(function(){return a})),e.d(n,"f",(function(){return u})),e.d(n,"g",(function(){return c})),e.d(n,"h",(function(){return p})),e.d(n,"b",(function(){return l})),e.d(n,"e",(function(){return f})),e.d(n,"k",(function(){return h})),e.d(n,"l",(function(){return d})),e.d(n,"c",(function(){return v})),e.d(n,"j",(function(){return b}));e(93);const r=/#.*$/,i=/\.(md|html)$/,o=/\/$/,a=/^[a-z]+:/i;function s(t){return decodeURI(t).replace(r,"").replace(i,"")}function u(t){return a.test(t)}function c(t){return/^mailto:/.test(t)}function p(t){return/^tel:/.test(t)}function l(t){if(u(t))return t;const n=t.match(r),e=n?n[0]:"",i=s(t);return o.test(i)?t:i+".html"+e}function f(t,n){const e=decodeURIComponent(t.hash),i=function(t){const n=t.match(r);if(n)return n[0]}(n);if(i&&e!==i)return!1;return s(t.path)===s(n)}function h(t,n,e){if(u(n))return{type:"external",path:n};e&&(n=function(t,n,e){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return n+t;const i=n.split("/");e&&i[i.length-1]||i.pop();const o=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(n,e,r,i=1){if("string"==typeof n)return h(e,n,r);if(Array.isArray(n))return Object.assign(h(e,n[0],r),{title:n[1]});{const o=n.children||[];return 0===o.length&&n.path?Object.assign(h(e,n.path,r),{title:n.title}):{type:"group",path:n.path,title:n.title,sidebarDepth:n.sidebarDepth,initialOpenGroupIndex:n.initialOpenGroupIndex,children:o.map(n=>t(n,e,r,i+1)),collapsable:!1!==n.collapsable}}}(t,i,e)):[]}return[]}function g(t){const n=v(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:n.map(n=>({type:"auto",title:n.title,basePath:t.path,path:t.path+"#"+n.slug,children:n.children||[]}))}]}function v(t){let n;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?n=t:n&&(n.children||(n.children=[])).push(t)}),t.filter(t=>2===t.level)}function b(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},250:function(t,n){t.exports=function(t){return null==t}},253:function(t,n,e){},264:function(t,n,e){var r=e(14),i=e(6),o=e(12);t.exports=function(t){return"string"==typeof t||!i(t)&&o(t)&&"[object String]"==r(t)}},265:function(t,n,e){"use strict";e(253)},273:function(t,n,e){"use strict";e.r(n);e(93);var r=e(243),i=e(264),o=e.n(i),a=e(250),s=e.n(a),u={name:"PageNav",props:["sidebarItems"],computed:{prev(){return p(c.PREV,this)},next(){return p(c.NEXT,this)}}};const c={NEXT:{resolveLink:function(t,n){return l(t,n,1)},getThemeLinkConfig:({nextLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.next},PREV:{resolveLink:function(t,n){return l(t,n,-1)},getThemeLinkConfig:({prevLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.prev}};function p(t,{$themeConfig:n,$page:e,$route:i,$site:a,sidebarItems:u}){const{resolveLink:c,getThemeLinkConfig:p,getPageLinkConfig:l}=t,f=p(n),h=l(e),d=s()(h)?f:h;return!1===d?void 0:o()(d)?Object(r.k)(a.pages,d,i.path):c(e,u)}function l(t,n,e){const r=[];!function t(n,e){for(let r=0,i=n.length;rfunction t(e,n,i,r=1){if("string"==typeof e)return d(n,e,i);if(Array.isArray(e))return Object.assign(d(n,e[0],i),{title:e[1]});{const a=e.children||[];return 0===a.length&&e.path?Object.assign(d(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:a.map(e=>t(e,n,i,r+1)),collapsable:!1!==e.collapsable}}}(t,r,n)):[]}return[]}function m(t){const e=g(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function g(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function b(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},245:function(t,e,n){"use strict";n.r(e);var i=n(243),r={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(i.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(i.g)(this.link)||Object(i.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(i.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(i.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},a=n(17),s=Object(a.a)(r,(function(){var t=this,e=t._self._c;return t.isInternal?e("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?e("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.default=s.exports},260:function(t,e,n){},274:function(t,e,n){"use strict";n(260)},287:function(t,e,n){"use strict";n.r(e);var i={name:"Home",components:{NavLink:n(245).default},computed:{data(){return this.$page.frontmatter},actionLink(){return{link:this.data.actionLink,text:this.data.actionText}}}},r=(n(274),n(17)),a=Object(r.a)(i,(function(){var t=this,e=t._self._c;return e("main",{staticClass:"home",attrs:{"aria-labelledby":null!==t.data.heroText?"main-title":null}},[e("header",{staticClass:"hero"},[t.data.heroImage?e("img",{attrs:{src:t.$withBase(t.data.heroImage),alt:t.data.heroAlt||"hero"}}):t._e(),t._v(" "),null!==t.data.heroText?e("h1",{attrs:{id:"main-title"}},[t._v("\n "+t._s(t.data.heroText||t.$title||"Hello")+"\n ")]):t._e(),t._v(" "),null!==t.data.tagline?e("p",{staticClass:"description"},[t._v("\n "+t._s(t.data.tagline||t.$description||"Welcome to your VuePress site")+"\n ")]):t._e(),t._v(" "),t.data.actionText&&t.data.actionLink?e("p",{staticClass:"action"},[e("NavLink",{staticClass:"action-button",attrs:{item:t.actionLink}})],1):t._e()]),t._v(" "),t.data.features&&t.data.features.length?e("div",{staticClass:"features"},t._l(t.data.features,(function(n,i){return e("div",{key:i,staticClass:"feature"},[e("h2",[t._v(t._s(n.title))]),t._v(" "),e("p",[t._v(t._s(n.details))])])})),0):t._e(),t._v(" "),e("Content",{staticClass:"theme-default-content custom"}),t._v(" "),t.data.footer?e("div",{staticClass:"footer"},[t._v("\n "+t._s(t.data.footer)+"\n ")]):e("Content",{staticClass:"footer",attrs:{"slot-key":"footer"}})],1)}),[],!1,null,null,null);e.default=a.exports}}]);
\ No newline at end of file
diff --git a/assets/js/17.142792a6.js b/assets/js/17.142792a6.js
new file mode 100644
index 00000000..e5a12a0f
--- /dev/null
+++ b/assets/js/17.142792a6.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{243:function(t,e,n){"use strict";n.d(e,"d",(function(){return i})),n.d(e,"a",(function(){return a})),n.d(e,"i",(function(){return s})),n.d(e,"f",(function(){return c})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return l})),n.d(e,"b",(function(){return d})),n.d(e,"e",(function(){return p})),n.d(e,"k",(function(){return f})),n.d(e,"l",(function(){return h})),n.d(e,"c",(function(){return m})),n.d(e,"j",(function(){return b}));n(93);const i=/#.*$/,r=/\.(md|html)$/,a=/\/$/,s=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(i,"").replace(r,"")}function c(t){return s.test(t)}function u(t){return/^mailto:/.test(t)}function l(t){return/^tel:/.test(t)}function d(t){if(c(t))return t;const e=t.match(i),n=e?e[0]:"",r=o(t);return a.test(r)?t:r+".html"+n}function p(t,e){const n=decodeURIComponent(t.hash),r=function(t){const e=t.match(i);if(e)return e[0]}(e);if(r&&n!==r)return!1;return o(t.path)===o(e)}function f(t,e,n){if(c(e))return{type:"external",path:e};n&&(e=function(t,e,n){const i=t.charAt(0);if("/"===i)return t;if("?"===i||"#"===i)return e+t;const r=e.split("/");n&&r[r.length-1]||r.pop();const a=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(e,n,i,r=1){if("string"==typeof e)return f(n,e,i);if(Array.isArray(e))return Object.assign(f(n,e[0],i),{title:e[1]});{const a=e.children||[];return 0===a.length&&e.path?Object.assign(f(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:a.map(e=>t(e,n,i,r+1)),collapsable:!1!==e.collapsable}}}(t,r,n)):[]}return[]}function g(t){const e=m(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function m(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function b(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},250:function(t,e){t.exports=function(t){return null==t}},252:function(t,e,n){},263:function(t,e,n){"use strict";n(252)},272:function(t,e,n){"use strict";n.r(e);var i=n(250),r=n.n(i),a=n(243),s={name:"PageEdit",computed:{lastUpdated(){return this.$page.lastUpdated},lastUpdatedText(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},editLink(){const t=r()(this.$page.frontmatter.editLink)?this.$site.themeConfig.editLinks:this.$page.frontmatter.editLink,{repo:e,docsDir:n="",docsBranch:i="master",docsRepo:a=e}=this.$site.themeConfig;return t&&a&&this.$page.relativePath?this.createEditLink(e,a,n,i,this.$page.relativePath):null},editLinkText(){return this.$themeLocaleConfig.editLinkText||this.$site.themeConfig.editLinkText||"Edit this page"}},methods:{createEditLink(t,e,n,i,r){if(/bitbucket.org/.test(e)){return e.replace(a.a,"")+"/src"+`/${i}/`+(n?n.replace(a.a,"")+"/":"")+r+`?mode=edit&spa=0&at=${i}&fileviewer=file-view-default`}if(/gitlab.com/.test(e)){return e.replace(a.a,"")+"/-/edit"+`/${i}/`+(n?n.replace(a.a,"")+"/":"")+r}return(a.i.test(e)?e:"https://github.com/"+e).replace(a.a,"")+"/edit"+`/${i}/`+(n?n.replace(a.a,"")+"/":"")+r}}},o=(n(263),n(17)),c=Object(o.a)(s,(function(){var t=this,e=t._self._c;return e("footer",{staticClass:"page-edit"},[t.editLink?e("div",{staticClass:"edit-link"},[e("a",{attrs:{href:t.editLink,target:"_blank",rel:"noopener noreferrer"}},[t._v(t._s(t.editLinkText))]),t._v(" "),e("OutboundLink")],1):t._e(),t._v(" "),t.lastUpdated?e("div",{staticClass:"last-updated"},[e("span",{staticClass:"prefix"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),e("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])]):t._e()])}),[],!1,null,null,null);e.default=c.exports}}]);
\ No newline at end of file
diff --git a/assets/js/18.8543f3b0.js b/assets/js/18.8543f3b0.js
new file mode 100644
index 00000000..2617bdf4
--- /dev/null
+++ b/assets/js/18.8543f3b0.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{310:function(t,e,a){t.exports=a.p+"assets/img/software.77971e2e.png"},311:function(t,e,a){t.exports=a.p+"assets/img/mutliphp-ini-editor.859b4a87.png"},312:function(t,e,a){t.exports=a.p+"assets/img/multiphp-ini-keys.83901b7f.png"},313:function(t,e,a){t.exports=a.p+"assets/img/multiphp-manager.88fa8221.png"},368:function(t,e,a){"use strict";a.r(e);var s=a(17),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"cpanel-php"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cpanel-php"}},[t._v("#")]),t._v(" cPanel PHP")]),t._v(" "),e("h2",{attrs:{id:"multiphp-ini-editor"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#multiphp-ini-editor"}},[t._v("#")]),t._v(" MultiPHP INI Editor")]),t._v(" "),e("p",[t._v("Go to "),e("strong",[t._v("MultiPHP INI Editor")]),t._v(" under "),e("strong",[t._v("Software")]),t._v(".")]),t._v(" "),e("p",[e("img",{attrs:{src:a(310),alt:"Software"}})]),t._v(" "),e("p",[t._v("Select your website under "),e("strong",[t._v("Configure PHP INI basic settings")]),t._v(".")]),t._v(" "),e("p",[e("img",{attrs:{src:a(311),alt:"MultiPHP INI editor"}})]),t._v(" "),e("p",[t._v("Take note on the following configurable keys:")]),t._v(" "),e("p",[e("img",{attrs:{src:a(312),alt:"MultiPHP INI keys"}})]),t._v(" "),e("ul",[e("li",[e("code",[t._v("max_execution_time")]),t._v(" 30")]),t._v(" "),e("li",[e("code",[t._v("memory_limit")]),t._v(" 256M (min)")]),t._v(" "),e("li",[t._v("Use "),e("code",[t._v("post_max_size")]),t._v(" and "),e("code",[t._v("upload_max_filesize")]),t._v(" to limit the file upload max. size allowed for uploads")])]),t._v(" "),e("h2",{attrs:{id:"multiphp-manager"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#multiphp-manager"}},[t._v("#")]),t._v(" MultiPHP Manager")]),t._v(" "),e("p",[t._v("Go to "),e("strong",[t._v("MultiPHP Manager")]),t._v(" and select "),e("code",[t._v("PHP 8.1")]),t._v(" for your website.")]),t._v(" "),e("p",[e("img",{attrs:{src:a(313),alt:"MultiPHP manager"}})]),t._v(" "),e("ul",[e("li",[t._v("From here you can also enable the "),e("RouterLink",{attrs:{to:"/application/stack/php.html#extensions"}},[t._v("PHP extensions required")]),t._v(" by Chevereto.")],1)]),t._v(" "),e("div",{staticClass:"custom-block danger"},[e("p",{staticClass:"custom-block-title"},[t._v("PHP Extensions")]),t._v(" "),e("p",[t._v("Refer to the cPanel "),e("a",{attrs:{href:"https://docs.cpanel.net/whm/software/php-extensions-and-applications-package/",target:"_blank",rel:"noopener noreferrer"}},[t._v("PHP Extensions and Applications Package"),e("OutboundLink")],1),t._v(" and WHM "),e("a",{attrs:{href:"https://support.cpanel.net/hc/en-us/articles/360050971633",target:"_blank",rel:"noopener noreferrer"}},[t._v("How to install a PHP extension in WHM"),e("OutboundLink")],1),t._v(" documentation if your cPanel provisioning lacks the extensions required by Chevereto.")])]),t._v(" "),e("h2",{attrs:{id:"php-versioning"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#php-versioning"}},[t._v("#")]),t._v(" PHP Versioning")]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("Did you know?")]),t._v(" "),e("p",[t._v("cPanel uses root "),e("code",[t._v(".htaccess")]),t._v(" file to add rules that enable to override the default cPanel PHP versioning. This may cause issues in your Chevereto installation.")])]),t._v(" "),e("p",[t._v("If you have PHP versioning issues make sure that the root "),e("code",[t._v(".htaccess")]),t._v(" file contains the following:")]),t._v(" "),e("code-group",[e("code-block",{attrs:{title:"Apache"}},[e("div",{staticClass:"language-apacheconf extra-class"},[e("pre",{pre:!0,attrs:{class:"language-apacheconf"}},[e("code",[e("span",{pre:!0,attrs:{class:"token directive-block tag"}},[e("span",{pre:!0,attrs:{class:"token directive-block tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("IfModule")]),e("span",{pre:!0,attrs:{class:"token directive-block-parameter attr-value"}},[t._v(" mime_module")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive-inline property"}},[t._v("AddHandler")]),t._v(" application/x-httpd-ea-php81 .php\n"),e("span",{pre:!0,attrs:{class:"token directive-block tag"}},[e("span",{pre:!0,attrs:{class:"token directive-block tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("IfModule")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])])]),t._v(" "),e("code-block",{attrs:{title:"LiteSpeed"}},[e("div",{staticClass:"language-apacheconf extra-class"},[e("pre",{pre:!0,attrs:{class:"language-apacheconf"}},[e("code",[e("span",{pre:!0,attrs:{class:"token directive-block tag"}},[e("span",{pre:!0,attrs:{class:"token directive-block tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("IfModule")]),e("span",{pre:!0,attrs:{class:"token directive-block-parameter attr-value"}},[t._v(" mime_module")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive-inline property"}},[t._v("AddHandler")]),t._v(" application/x-httpd-ea-php81___lsphp .php\n"),e("span",{pre:!0,attrs:{class:"token directive-block tag"}},[e("span",{pre:!0,attrs:{class:"token directive-block tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("IfModule")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])])])],1),t._v(" "),e("p",[t._v("Note that the configuration in your system may vary. Double-check with your service provider.")]),t._v(" "),e("h2",{attrs:{id:"troubleshooting"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#troubleshooting"}},[t._v("#")]),t._v(" Troubleshooting")]),t._v(" "),e("p",[t._v("As cPanel uses "),e("code",[t._v(".htaccess")]),t._v(" to configure PHP version, it needs a special handling when you want to change the PHP version of your website.")]),t._v(" "),e("ol",[e("li",[t._v("Upload Chevereto's "),e("code",[t._v(".htaccess")])]),t._v(" "),e("li",[t._v("Go to Multi-PHP and select the new PHP version")])])],1)}),[],!1,null,null,null);e.default=n.exports}}]);
\ No newline at end of file
diff --git a/assets/js/19.be4ffaa4.js b/assets/js/19.be4ffaa4.js
new file mode 100644
index 00000000..d14ca952
--- /dev/null
+++ b/assets/js/19.be4ffaa4.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{314:function(e,t,a){e.exports=a.p+"assets/img/files.7fc6b3d4.png"},315:function(e,t,a){e.exports=a.p+"assets/img/file-manager.c016ac19.png"},316:function(e,t,a){e.exports=a.p+"assets/img/file-manager-extract.657c0c2b.png"},317:function(e,t,a){e.exports=a.p+"assets/img/file-manager-remove-file.c5b2f1aa.png"},372:function(e,t,a){"use strict";a.r(t);var i=a(17),s=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"plesk-app-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#plesk-app-files"}},[e._v("#")]),e._v(" Plesk App files")]),e._v(" "),t("h2",{attrs:{id:"installing-chevereto"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installing-chevereto"}},[e._v("#")]),e._v(" Installing Chevereto")]),e._v(" "),t("p",[e._v("To install Chevereto on Plesk you need to use the release package and Plesk's file manager to unzip this package in your target website.")]),e._v(" "),t("ul",[t("li",[e._v("Go to "),t("strong",[e._v("File Manager")]),e._v(" under "),t("strong",[e._v("Your website")])])]),e._v(" "),t("p",[t("img",{attrs:{src:a(314),alt:"Files"}})]),e._v(" "),t("ul",[t("li",[e._v("Navigate to your home "),t("code",[e._v("/home/httpdocs/")]),e._v(" directory")])]),e._v(" "),t("p",[t("img",{attrs:{src:a(315),alt:"File Manager"}})]),e._v(" "),t("ul",[t("li",[e._v("Click on the "),t("strong",[e._v("Plus button")]),e._v(" and select "),t("strong",[e._v("Upload File")])]),e._v(" "),t("li",[e._v("Upload the release zip file that you downloaded following "),t("RouterLink",{attrs:{to:"/application/installing/installation.html#using-release-package"}},[e._v("using release package")]),e._v(" instructions")],1),e._v(" "),t("li",[t("strong",[e._v("Click")]),e._v(" on the uploaded zip file file and select "),t("strong",[e._v("Extract")])])]),e._v(" "),t("p",[t("img",{attrs:{src:a(316),alt:"File Manager Extract"}})]),e._v(" "),t("ul",[t("li",[e._v("A prompt appears to confirm the zip extraction")]),e._v(" "),t("li",[e._v("Select "),t("strong",[e._v("Replace existing files")]),e._v(" and click on "),t("strong",[e._v("OK")])]),e._v(" "),t("li",[e._v("Once done, remove the zip file")])]),e._v(" "),t("p",[t("img",{attrs:{src:a(317),alt:"File Manager Remove File"}})]),e._v(" "),t("ul",[t("li",[e._v("If you are installing Chevereto for the first time you can continue with "),t("RouterLink",{attrs:{to:"/application/installing/installation.html#setup"}},[e._v("Setup")]),e._v(".")],1)]),e._v(" "),t("h2",{attrs:{id:"updating-chevereto"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#updating-chevereto"}},[e._v("#")]),e._v(" Updating Chevereto")]),e._v(" "),t("p",[e._v("To update Chevereto on Plesk simply follow the steps described above. That process only alters the application files, it won't touch the website contents.")]),e._v(" "),t("p",[e._v("If you made modifications to the software you may want to review these changes before.")])])}),[],!1,null,null,null);t.default=s.exports}}]);
\ No newline at end of file
diff --git a/assets/js/2.bd715938.js b/assets/js/2.bd715938.js
new file mode 100644
index 00000000..7e12e740
--- /dev/null
+++ b/assets/js/2.bd715938.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{249:function(t,e,a){},250:function(t,e){t.exports=function(t){return null==t}},252:function(t,e,a){},253:function(t,e,a){},254:function(t,e,a){},256:function(t,e,a){"use strict";a(249)},257:function(t,e,a){"use strict";a.r(e);var n=a(271),s=a(259),i=a(243);function r(t,e){if("group"===e.type){const a=e.path&&Object(i.e)(t,e.path),n=e.children.some(e=>"group"===e.type?r(t,e):"page"===e.type&&Object(i.e)(t,e.path));return a||n}return!1}var o={name:"SidebarLinks",components:{SidebarGroup:n.default,SidebarLink:s.default},props:["items","depth","sidebarDepth","initialOpenGroupIndex"],data(){return{openGroupIndex:this.initialOpenGroupIndex||0}},watch:{$route(){this.refreshIndex()}},created(){this.refreshIndex()},methods:{refreshIndex(){const t=function(t,e){for(let a=0;a-1&&(this.openGroupIndex=t)},toggleGroup(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive(t){return Object(i.e)(this.$route,t.regularPath)}}},l=a(17),u=Object(l.a)(o,(function(){var t=this,e=t._self._c;return t.items.length?e("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(a,n){return e("li",{key:n},["group"===a.type?e("SidebarGroup",{attrs:{item:a,open:n===t.openGroupIndex,collapsable:a.collapsable||a.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(n)}}}):e("SidebarLink",{attrs:{"sidebar-depth":t.sidebarDepth,item:a}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=u.exports},259:function(t,e,a){"use strict";a.r(e);var n=a(243);function s(t,e,a,n,s){const i={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:n,"sidebar-link":!0}};return s>2&&(i.style={"padding-left":s+"rem"}),t("RouterLink",i,a)}function i(t,e,a,r,o,l=1){return!e||l>o?null:t("ul",{class:"sidebar-sub-headers"},e.map(e=>{const u=Object(n.e)(r,a+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[s(t,a+"#"+e.slug,e.title,u,e.level-1),i(t,e.children,a,r,o,l+1)])}))}var r={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:e,$site:a,$route:r,$themeConfig:o,$themeLocaleConfig:l},props:{item:u,sidebarDepth:c}}){const d=Object(n.e)(r,u.path),p="auto"===u.type?d||u.children.some(t=>Object(n.e)(r,u.basePath+"#"+t.slug)):d,h="external"===u.type?function(t,e,a){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[a,t("OutboundLink")])}(t,u.path,u.title||u.path):s(t,u.path,u.title||u.path,p),f=[e.frontmatter.sidebarDepth,c,l.sidebarDepth,o.sidebarDepth,1].find(t=>void 0!==t),b=l.displayAllHeaders||o.displayAllHeaders;if("auto"===u.type)return[h,i(t,u.children,u.basePath,r,f)];if((p||b)&&u.headers&&!n.d.test(u.path)){return[h,i(t,Object(n.c)(u.headers),u.path,r,f)]}return h}},o=(a(256),a(17)),l=Object(o.a)(r,void 0,void 0,!1,null,null,null);e.default=l.exports},260:function(t,e,a){},263:function(t,e,a){"use strict";a(252)},264:function(t,e,a){var n=a(14),s=a(6),i=a(12);t.exports=function(t){return"string"==typeof t||!s(t)&&i(t)&&"[object String]"==n(t)}},265:function(t,e,a){"use strict";a(253)},266:function(t,e,a){},267:function(t,e,a){"use strict";a(254)},268:function(t,e,a){},271:function(t,e,a){"use strict";a.r(e);var n=a(243),s={name:"SidebarGroup",components:{DropdownTransition:a(246).default},props:["item","open","collapsable","depth"],beforeCreate(){this.$options.components.SidebarLinks=a(257).default},methods:{isActive:n.e}},i=(a(267),a(17)),r=Object(i.a)(s,(function(){var t=this,e=t._self._c;return e("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?e("RouterLink",{staticClass:"sidebar-heading clickable",class:{open:t.open,active:t.isActive(t.$route,t.item.path)},attrs:{to:t.item.path},nativeOn:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):e("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),e("DropdownTransition",[t.open||!t.collapsable?e("SidebarLinks",{staticClass:"sidebar-group-items",attrs:{items:t.item.children,"sidebar-depth":t.item.sidebarDepth,"initial-open-group-index":t.item.initialOpenGroupIndex,depth:t.depth+1}}):t._e()],1)],1)}),[],!1,null,null,null);e.default=r.exports},272:function(t,e,a){"use strict";a.r(e);var n=a(250),s=a.n(n),i=a(243),r={name:"PageEdit",computed:{lastUpdated(){return this.$page.lastUpdated},lastUpdatedText(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},editLink(){const t=s()(this.$page.frontmatter.editLink)?this.$site.themeConfig.editLinks:this.$page.frontmatter.editLink,{repo:e,docsDir:a="",docsBranch:n="master",docsRepo:i=e}=this.$site.themeConfig;return t&&i&&this.$page.relativePath?this.createEditLink(e,i,a,n,this.$page.relativePath):null},editLinkText(){return this.$themeLocaleConfig.editLinkText||this.$site.themeConfig.editLinkText||"Edit this page"}},methods:{createEditLink(t,e,a,n,s){if(/bitbucket.org/.test(e)){return e.replace(i.a,"")+"/src"+`/${n}/`+(a?a.replace(i.a,"")+"/":"")+s+`?mode=edit&spa=0&at=${n}&fileviewer=file-view-default`}if(/gitlab.com/.test(e)){return e.replace(i.a,"")+"/-/edit"+`/${n}/`+(a?a.replace(i.a,"")+"/":"")+s}return(i.i.test(e)?e:"https://github.com/"+e).replace(i.a,"")+"/edit"+`/${n}/`+(a?a.replace(i.a,"")+"/":"")+s}}},o=(a(263),a(17)),l=Object(o.a)(r,(function(){var t=this,e=t._self._c;return e("footer",{staticClass:"page-edit"},[t.editLink?e("div",{staticClass:"edit-link"},[e("a",{attrs:{href:t.editLink,target:"_blank",rel:"noopener noreferrer"}},[t._v(t._s(t.editLinkText))]),t._v(" "),e("OutboundLink")],1):t._e(),t._v(" "),t.lastUpdated?e("div",{staticClass:"last-updated"},[e("span",{staticClass:"prefix"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),e("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])]):t._e()])}),[],!1,null,null,null);e.default=l.exports},273:function(t,e,a){"use strict";a.r(e);a(93);var n=a(243),s=a(264),i=a.n(s),r=a(250),o=a.n(r),l={name:"PageNav",props:["sidebarItems"],computed:{prev(){return c(u.PREV,this)},next(){return c(u.NEXT,this)}}};const u={NEXT:{resolveLink:function(t,e){return d(t,e,1)},getThemeLinkConfig:({nextLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.next},PREV:{resolveLink:function(t,e){return d(t,e,-1)},getThemeLinkConfig:({prevLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.prev}};function c(t,{$themeConfig:e,$page:a,$route:s,$site:r,sidebarItems:l}){const{resolveLink:u,getThemeLinkConfig:c,getPageLinkConfig:d}=t,p=c(e),h=d(a),f=o()(h)?p:h;return!1===f?void 0:i()(f)?Object(n.k)(r.pages,f,s.path):u(a,l)}function d(t,e,a){const n=[];!function t(e,a){for(let n=0,s=e.length;n({isSidebarOpen:!1}),computed:{shouldShowNavbar(){const{themeConfig:t}=this.$site,{frontmatter:e}=this.$page;return!1!==e.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar(){const{frontmatter:t}=this.$page;return!t.home&&!1!==t.sidebar&&this.sidebarItems.length},sidebarItems(){return Object(o.l)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses(){const t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar},t]}},mounted(){this.$router.afterEach(()=>{this.isSidebarOpen=!1})},methods:{toggleSidebar(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},onTouchStart(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd(t){const e=t.changedTouches[0].clientX-this.touchStart.x,a=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(a)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},u=a(17),c={components:{ParentLayout:Object(u.a)(l,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?e("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),e("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),e("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),t.$page.frontmatter.home?e("Home"):e("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("page-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("page-bottom")]},proxy:!0}],null,!0)})],1)}),[],!1,null,null,null).exports},computed:{defaultTheme(){const t=this.$themeConfig.overrideTheme,e=this.$themeConfig.prefersTheme,a=!window.matchMedia("(prefers-color-scheme: light)").matches&&!window.matchMedia("(prefers-color-scheme: dark)").matches;if("object"==typeof t){const e=(new Date).getHours();let a=!1;for(const n in t){const s=t[n];if(s[0]<=s[1]){if(s[0]<=e&&efunction t(e,n,r,i=1){if("string"==typeof e)return d(n,e,r);if(Array.isArray(e))return Object.assign(d(n,e[0],r),{title:e[1]});{const a=e.children||[];return 0===a.length&&e.path?Object.assign(d(n,e.path,r),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:a.map(e=>t(e,n,r,i+1)),collapsable:!1!==e.collapsable}}}(t,i,n)):[]}return[]}function b(t){const e=g(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function g(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function m(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},249:function(t,e,n){},256:function(t,e,n){"use strict";n(249)},259:function(t,e,n){"use strict";n.r(e);var r=n(243);function i(t,e,n,r,i){const a={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:r,"sidebar-link":!0}};return i>2&&(a.style={"padding-left":i+"rem"}),t("RouterLink",a,n)}function a(t,e,n,s,u,o=1){return!e||o>u?null:t("ul",{class:"sidebar-sub-headers"},e.map(e=>{const c=Object(r.e)(s,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[i(t,n+"#"+e.slug,e.title,c,e.level-1),a(t,e.children,n,s,u,o+1)])}))}var s={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:e,$site:n,$route:s,$themeConfig:u,$themeLocaleConfig:o},props:{item:c,sidebarDepth:l}}){const p=Object(r.e)(s,c.path),f="auto"===c.type?p||c.children.some(t=>Object(r.e)(s,c.basePath+"#"+t.slug)):p,d="external"===c.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,c.path,c.title||c.path):i(t,c.path,c.title||c.path,f),h=[e.frontmatter.sidebarDepth,l,o.sidebarDepth,u.sidebarDepth,1].find(t=>void 0!==t),b=o.displayAllHeaders||u.displayAllHeaders;if("auto"===c.type)return[d,a(t,c.children,c.basePath,s,h)];if((f||b)&&c.headers&&!r.d.test(c.path)){return[d,a(t,Object(r.c)(c.headers),c.path,s,h)]}return d}},u=(n(256),n(17)),o=Object(u.a)(s,void 0,void 0,!1,null,null,null);e.default=o.exports}}]);
\ No newline at end of file
diff --git a/assets/js/22.25b0b8c5.js b/assets/js/22.25b0b8c5.js
new file mode 100644
index 00000000..3672a99d
--- /dev/null
+++ b/assets/js/22.25b0b8c5.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{306:function(e,t,a){e.exports=a.p+"assets/img/files.4aa4878b.png"},307:function(e,t,a){e.exports=a.p+"assets/img/file-manager-extract.72bea043.png"},308:function(e,t,a){e.exports=a.p+"assets/img/file-manager-extract-files.0ef60e09.png"},364:function(e,t,a){"use strict";a.r(t);var i=a(17),o=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"cpanel-app-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cpanel-app-files"}},[e._v("#")]),e._v(" cPanel App files")]),e._v(" "),t("h2",{attrs:{id:"installing-chevereto"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installing-chevereto"}},[e._v("#")]),e._v(" Installing Chevereto")]),e._v(" "),t("p",[e._v("To install Chevereto on cPanel you need to use the release package and cPanel's file manager to unzip this package in your target website.")]),e._v(" "),t("ul",[t("li",[e._v("Go to "),t("strong",[e._v("File Manager")]),e._v(" under "),t("strong",[e._v("Files")])])]),e._v(" "),t("p",[t("img",{attrs:{src:a(306),alt:"Files"}})]),e._v(" "),t("ul",[t("li",[e._v("Navigate to your home "),t("code",[e._v("/home/user/")]),e._v(" home directory")]),e._v(" "),t("li",[e._v("Click on "),t("strong",[e._v("Upload")]),e._v(" and on "),t("strong",[e._v("Select File")])]),e._v(" "),t("li",[e._v("Upload the release zip file that you downloaded following "),t("RouterLink",{attrs:{to:"/application/installing/installation.html#using-release-package"}},[e._v("using release package")]),e._v(" instructions")],1),e._v(" "),t("li",[e._v("Once uploaded, go back to the file manager at "),t("code",[e._v("/home/user/")]),e._v(" directory")]),e._v(" "),t("li",[e._v("Right-click on the zip file file and select "),t("strong",[e._v("Extract")])])]),e._v(" "),t("p",[t("img",{attrs:{src:a(307),alt:"File Manager Extract"}})]),e._v(" "),t("ul",[t("li",[e._v("A prompt appears, enter path "),t("code",[e._v("/public_html")]),e._v(" and click on "),t("strong",[e._v("Extract Files")])])]),e._v(" "),t("p",[e._v("You can customize "),t("code",[e._v("/public_html")]),e._v(" to reflect the path for your configured website.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(308),alt:"File Manager Extract Files"}})]),e._v(" "),t("ul",[t("li",[e._v("If you are installing Chevereto for the first time you can continue with "),t("RouterLink",{attrs:{to:"/application/installing/installation.html#setup"}},[e._v("Setup")]),e._v(".")],1)]),e._v(" "),t("h2",{attrs:{id:"updating-chevereto"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#updating-chevereto"}},[e._v("#")]),e._v(" Updating Chevereto")]),e._v(" "),t("p",[e._v("To update Chevereto on cPanel simply follow the steps described above. That process only alters the application files, it won't touch the website contents.")]),e._v(" "),t("p",[e._v("If you made modifications to the software you may want to review these changes before.")])])}),[],!1,null,null,null);t.default=o.exports}}]);
\ No newline at end of file
diff --git a/assets/js/23.5e66975b.js b/assets/js/23.5e66975b.js
new file mode 100644
index 00000000..1a4330f6
--- /dev/null
+++ b/assets/js/23.5e66975b.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{303:function(a,t,e){a.exports=e.p+"assets/img/databases.f4d298e3.png"},304:function(a,t,e){a.exports=e.p+"assets/img/mysql-wizard-create-database.e64fa0ed.png"},305:function(a,t,e){a.exports=e.p+"assets/img/mysql-wizard-privileges.0eee95f6.png"},363:function(a,t,e){"use strict";e.r(t);var s=e(17),r=Object(s.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"cpanel-database"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cpanel-database"}},[a._v("#")]),a._v(" cPanel Database")]),a._v(" "),t("h2",{attrs:{id:"creating-a-database"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-database"}},[a._v("#")]),a._v(" Creating a database")]),a._v(" "),t("ul",[t("li",[a._v("Go to the "),t("strong",[a._v("MySQL Database Wizard")]),a._v(" under "),t("strong",[a._v("Databases")]),a._v(". Follow the process to create a database and its user.")])]),a._v(" "),t("p",[t("img",{attrs:{src:e(303),alt:"databases"}})]),a._v(" "),t("ul",[t("li",[a._v("Take note on the MySQL "),t("strong",[a._v("database name")]),a._v(", "),t("strong",[a._v("username")]),a._v(" and "),t("strong",[a._v("password")]),a._v(".")])]),a._v(" "),t("p",[t("img",{attrs:{src:e(304),alt:"MySQL wizard create"}})]),a._v(" "),t("ul",[t("li",[a._v("Grant "),t("code",[a._v("ALL PRIVILEGES")]),a._v(" on the newly created database and user.")])]),a._v(" "),t("p",[t("img",{attrs:{src:e(305),alt:"MySQL wizard privileges"}})])])}),[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/24.8a277349.js b/assets/js/24.8a277349.js
new file mode 100644
index 00000000..887a0229
--- /dev/null
+++ b/assets/js/24.8a277349.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{322:function(a,t,s){a.exports=s.p+"assets/img/databases.5d9cf5ab.png"},323:function(a,t,s){a.exports=s.p+"assets/img/databases-add.48f8f471.png"},324:function(a,t,s){a.exports=s.p+"assets/img/databases-done.a0441970.png"},374:function(a,t,s){"use strict";s.r(t);var e=s(17),r=Object(e.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"plesk-database"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#plesk-database"}},[a._v("#")]),a._v(" Plesk Database")]),a._v(" "),t("h2",{attrs:{id:"creating-a-database"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-database"}},[a._v("#")]),a._v(" Creating a database")]),a._v(" "),t("ul",[t("li",[a._v("Go to "),t("strong",[a._v("Databases")])])]),a._v(" "),t("p",[t("img",{attrs:{src:s(322),alt:"Databases"}})]),a._v(" "),t("ul",[t("li",[a._v("Click on "),t("strong",[a._v("Add Database")]),a._v(" and follow the process to create a database and its user. Make sure to relate this database to your website.")])]),a._v(" "),t("p",[t("img",{attrs:{src:s(323),alt:"Databases Add"}})]),a._v(" "),t("ul",[t("li",[a._v("Take note on the MySQL "),t("strong",[a._v("database name")]),a._v(", "),t("strong",[a._v("username")]),a._v(" and "),t("strong",[a._v("password")]),a._v(".")])]),a._v(" "),t("p",[t("img",{attrs:{src:s(324),alt:"Databases done"}})])])}),[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/25.ff594898.js b/assets/js/25.ff594898.js
new file mode 100644
index 00000000..81fa359c
--- /dev/null
+++ b/assets/js/25.ff594898.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{286:function(t,e,n){},327:function(t,e,n){"use strict";n(286)},333:function(t,e,n){"use strict";n.r(e);var s=n(13),a=n(0);const o={"/":{message:"New content is available.",buttonText:"Refresh"},"/zh/":{message:"发现新内容可用",buttonText:"刷新"},"/ru/":{message:"Доступен новый контент.",buttonText:"Обновить"},"/uk/":{message:"Доступний новий контент.",buttonText:"Оновити"},"/ja/":{message:"新しいコンテンツがあります。",buttonText:"更新する"},"/es/":{message:"Hay nuevo contenido disponible.",buttonText:"Actualizar"}};var u={name:"SWUpdatePopup",data:()=>({rawPopupConfig:!0,updateEvent:null}),computed:{popupConfig(){return Object(a.g)(this,this.rawPopupConfig)},enabled(){return Boolean(this.popupConfig&&this.updateEvent)},message(){const t=this.popupConfig;return t&&t.message||o["/"].message},buttonText(){const t=this.popupConfig;return t&&t.buttonText||o["/"].buttonText}},created(){s.a.$on("sw-updated",this.onSWUpdated),this.rawPopupConfig=o},methods:{onSWUpdated(t){this.updateEvent=t},reload(){this.updateEvent&&(this.updateEvent.skipWaiting().then(()=>{location.reload(!0)}),this.updateEvent=null)}}},p=(n(327),n(17)),i=Object(p.a)(u,(function(){var t=this,e=t._self._c;return e("transition",{attrs:{name:"sw-update-popup"}},[t._t("default",(function(){return[t.enabled?e("div",{staticClass:"sw-update-popup"},[t._v("\n "+t._s(t.message)+"\n\n "),e("br"),t._v(" "),e("button",{on:{click:t.reload}},[t._v("\n "+t._s(t.buttonText)+"\n ")])]):t._e()]}),{reload:t.reload,enabled:t.enabled,message:t.message,buttonText:t.buttonText})],2)}),[],!1,null,"fec8b358",null);e.default=i.exports}}]);
\ No newline at end of file
diff --git a/assets/js/26.5843dbdc.js b/assets/js/26.5843dbdc.js
new file mode 100644
index 00000000..dd159074
--- /dev/null
+++ b/assets/js/26.5843dbdc.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{244:function(t,e,n){},246:function(t,e,n){"use strict";n.r(e);var s={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},i=(n(247),n(17)),o=Object(i.a)(s,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=o.exports},247:function(t,e,n){"use strict";n(244)}}]);
\ No newline at end of file
diff --git a/assets/js/27.ed7a479a.js b/assets/js/27.ed7a479a.js
new file mode 100644
index 00000000..96f67fee
--- /dev/null
+++ b/assets/js/27.ed7a479a.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{262:function(t,c,n){},275:function(t,c,n){"use strict";n(262)},290:function(t,c,n){"use strict";n.r(c);n(275);var i=n(17),s=Object(i.a)({},(function(){var t=this,c=t._self._c;return c("div",{staticClass:"sidebar-button",on:{click:function(c){return t.$emit("toggle-sidebar")}}},[c("svg",{staticClass:"icon",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",viewBox:"0 0 448 512"}},[c("path",{attrs:{fill:"currentColor",d:"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"}})])])}),[],!1,null,null,null);c.default=s.exports}}]);
\ No newline at end of file
diff --git a/assets/js/28.5e109e3e.js b/assets/js/28.5e109e3e.js
new file mode 100644
index 00000000..d28bde64
--- /dev/null
+++ b/assets/js/28.5e109e3e.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{325:function(t,s,e){t.exports=e.p+"assets/img/hosting-settings.cd381b89.png"},326:function(t,s,e){t.exports=e.p+"assets/img/php-support.997fe037.png"},375:function(t,s,e){"use strict";e.r(s);var n=e(17),p=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"plesk-php"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#plesk-php"}},[t._v("#")]),t._v(" Plesk PHP")]),t._v(" "),s("h2",{attrs:{id:"php-setup"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#php-setup"}},[t._v("#")]),t._v(" PHP Setup")]),t._v(" "),s("ul",[s("li",[t._v("Go to "),s("strong",[t._v("Hosting Settings")]),t._v(" under "),s("strong",[t._v("Hosting & DNS")]),t._v(".")])]),t._v(" "),s("p",[s("img",{attrs:{src:e(325),alt:"Hosting Settings"}})]),t._v(" "),s("ul",[s("li",[t._v("Under "),s("strong",[t._v("Web scripting and statistics")]),t._v(" select PHP "),s("code",[t._v("8")]),t._v(" and "),s("code",[t._v("FPM application server by Apache")]),t._v(".")])]),t._v(" "),s("p",[s("img",{attrs:{src:e(326),alt:"PHP Support"}})])])}),[],!1,null,null,null);s.default=p.exports}}]);
\ No newline at end of file
diff --git a/assets/js/29.75b0aae6.js b/assets/js/29.75b0aae6.js
new file mode 100644
index 00000000..3cd0d887
--- /dev/null
+++ b/assets/js/29.75b0aae6.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{243:function(t,n,e){"use strict";e.d(n,"d",(function(){return r})),e.d(n,"a",(function(){return s})),e.d(n,"i",(function(){return u})),e.d(n,"f",(function(){return a})),e.d(n,"g",(function(){return l})),e.d(n,"h",(function(){return c})),e.d(n,"b",(function(){return f})),e.d(n,"e",(function(){return h})),e.d(n,"k",(function(){return p})),e.d(n,"l",(function(){return d})),e.d(n,"c",(function(){return b})),e.d(n,"j",(function(){return m}));e(93);const r=/#.*$/,i=/\.(md|html)$/,s=/\/$/,u=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(r,"").replace(i,"")}function a(t){return u.test(t)}function l(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function f(t){if(a(t))return t;const n=t.match(r),e=n?n[0]:"",i=o(t);return s.test(i)?t:i+".html"+e}function h(t,n){const e=decodeURIComponent(t.hash),i=function(t){const n=t.match(r);if(n)return n[0]}(n);if(i&&e!==i)return!1;return o(t.path)===o(n)}function p(t,n,e){if(a(n))return{type:"external",path:n};e&&(n=function(t,n,e){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return n+t;const i=n.split("/");e&&i[i.length-1]||i.pop();const s=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(n,e,r,i=1){if("string"==typeof n)return p(e,n,r);if(Array.isArray(n))return Object.assign(p(e,n[0],r),{title:n[1]});{const s=n.children||[];return 0===s.length&&n.path?Object.assign(p(e,n.path,r),{title:n.title}):{type:"group",path:n.path,title:n.title,sidebarDepth:n.sidebarDepth,initialOpenGroupIndex:n.initialOpenGroupIndex,children:s.map(n=>t(n,e,r,i+1)),collapsable:!1!==n.collapsable}}}(t,i,e)):[]}return[]}function g(t){const n=b(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:n.map(n=>({type:"auto",title:n.title,basePath:t.path,path:t.path+"#"+n.slug,children:n.children||[]}))}]}function b(t){let n;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?n=t:n&&(n.children||(n.children=[])).push(t)}),t.filter(t=>2===t.level)}function m(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},245:function(t,n,e){"use strict";e.r(n);var r=e(243),i={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(r.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(r.g)(this.link)||Object(r.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(r.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(r.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},s=e(17),u=Object(s.a)(i,(function(){var t=this,n=t._self._c;return t.isInternal?n("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(n){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):n("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?n("OutboundLink"):t._e()],1)}),[],!1,null,null,null);n.default=u.exports}}]);
\ No newline at end of file
diff --git a/assets/js/3.aca46339.js b/assets/js/3.aca46339.js
new file mode 100644
index 00000000..7de62f84
--- /dev/null
+++ b/assets/js/3.aca46339.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[3,21,26],{243:function(t,e,n){"use strict";n.d(e,"d",(function(){return r})),n.d(e,"a",(function(){return s})),n.d(e,"i",(function(){return a})),n.d(e,"f",(function(){return l})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return c})),n.d(e,"b",(function(){return p})),n.d(e,"e",(function(){return d})),n.d(e,"k",(function(){return h})),n.d(e,"l",(function(){return f})),n.d(e,"c",(function(){return g})),n.d(e,"j",(function(){return m}));n(93);const r=/#.*$/,i=/\.(md|html)$/,s=/\/$/,a=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(r,"").replace(i,"")}function l(t){return a.test(t)}function u(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function p(t){if(l(t))return t;const e=t.match(r),n=e?e[0]:"",i=o(t);return s.test(i)?t:i+".html"+n}function d(t,e){const n=decodeURIComponent(t.hash),i=function(t){const e=t.match(r);if(e)return e[0]}(e);if(i&&n!==i)return!1;return o(t.path)===o(e)}function h(t,e,n){if(l(e))return{type:"external",path:e};n&&(e=function(t,e,n){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;const i=e.split("/");n&&i[i.length-1]||i.pop();const s=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(e,n,r,i=1){if("string"==typeof e)return h(n,e,r);if(Array.isArray(e))return Object.assign(h(n,e[0],r),{title:e[1]});{const s=e.children||[];return 0===s.length&&e.path?Object.assign(h(n,e.path,r),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:s.map(e=>t(e,n,r,i+1)),collapsable:!1!==e.collapsable}}}(t,i,n)):[]}return[]}function b(t){const e=g(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function g(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function m(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},244:function(t,e,n){},246:function(t,e,n){"use strict";n.r(e);var r={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},i=(n(247),n(17)),s=Object(i.a)(r,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=s.exports},247:function(t,e,n){"use strict";n(244)},249:function(t,e,n){},254:function(t,e,n){},256:function(t,e,n){"use strict";n(249)},257:function(t,e,n){"use strict";n.r(e);var r=n(271),i=n(259),s=n(243);function a(t,e){if("group"===e.type){const n=e.path&&Object(s.e)(t,e.path),r=e.children.some(e=>"group"===e.type?a(t,e):"page"===e.type&&Object(s.e)(t,e.path));return n||r}return!1}var o={name:"SidebarLinks",components:{SidebarGroup:r.default,SidebarLink:i.default},props:["items","depth","sidebarDepth","initialOpenGroupIndex"],data(){return{openGroupIndex:this.initialOpenGroupIndex||0}},watch:{$route(){this.refreshIndex()}},created(){this.refreshIndex()},methods:{refreshIndex(){const t=function(t,e){for(let n=0;n-1&&(this.openGroupIndex=t)},toggleGroup(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive(t){return Object(s.e)(this.$route,t.regularPath)}}},l=n(17),u=Object(l.a)(o,(function(){var t=this,e=t._self._c;return t.items.length?e("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(n,r){return e("li",{key:r},["group"===n.type?e("SidebarGroup",{attrs:{item:n,open:r===t.openGroupIndex,collapsable:n.collapsable||n.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(r)}}}):e("SidebarLink",{attrs:{"sidebar-depth":t.sidebarDepth,item:n}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=u.exports},259:function(t,e,n){"use strict";n.r(e);var r=n(243);function i(t,e,n,r,i){const s={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:r,"sidebar-link":!0}};return i>2&&(s.style={"padding-left":i+"rem"}),t("RouterLink",s,n)}function s(t,e,n,a,o,l=1){return!e||l>o?null:t("ul",{class:"sidebar-sub-headers"},e.map(e=>{const u=Object(r.e)(a,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[i(t,n+"#"+e.slug,e.title,u,e.level-1),s(t,e.children,n,a,o,l+1)])}))}var a={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:e,$site:n,$route:a,$themeConfig:o,$themeLocaleConfig:l},props:{item:u,sidebarDepth:c}}){const p=Object(r.e)(a,u.path),d="auto"===u.type?p||u.children.some(t=>Object(r.e)(a,u.basePath+"#"+t.slug)):p,h="external"===u.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,u.path,u.title||u.path):i(t,u.path,u.title||u.path,d),f=[e.frontmatter.sidebarDepth,c,l.sidebarDepth,o.sidebarDepth,1].find(t=>void 0!==t),b=l.displayAllHeaders||o.displayAllHeaders;if("auto"===u.type)return[h,s(t,u.children,u.basePath,a,f)];if((d||b)&&u.headers&&!r.d.test(u.path)){return[h,s(t,Object(r.c)(u.headers),u.path,a,f)]}return h}},o=(n(256),n(17)),l=Object(o.a)(a,void 0,void 0,!1,null,null,null);e.default=l.exports},267:function(t,e,n){"use strict";n(254)},271:function(t,e,n){"use strict";n.r(e);var r=n(243),i={name:"SidebarGroup",components:{DropdownTransition:n(246).default},props:["item","open","collapsable","depth"],beforeCreate(){this.$options.components.SidebarLinks=n(257).default},methods:{isActive:r.e}},s=(n(267),n(17)),a=Object(s.a)(i,(function(){var t=this,e=t._self._c;return e("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?e("RouterLink",{staticClass:"sidebar-heading clickable",class:{open:t.open,active:t.isActive(t.$route,t.item.path)},attrs:{to:t.item.path},nativeOn:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):e("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),e("DropdownTransition",[t.open||!t.collapsable?e("SidebarLinks",{staticClass:"sidebar-group-items",attrs:{items:t.item.children,"sidebar-depth":t.item.sidebarDepth,"initial-open-group-index":t.item.initialOpenGroupIndex,depth:t.depth+1}}):t._e()],1)],1)}),[],!1,null,null,null);e.default=a.exports}}]);
\ No newline at end of file
diff --git a/assets/js/30.975a7720.js b/assets/js/30.975a7720.js
new file mode 100644
index 00000000..f18bc020
--- /dev/null
+++ b/assets/js/30.975a7720.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{269:function(e,t,s){e.exports=s.p+"assets/img/ffmpeg-folder.1ef2e021.png"},352:function(e,t,s){"use strict";s.r(t);var r=s(17),a=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"operating-system"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#operating-system"}},[e._v("#")]),e._v(" Operating system")]),e._v(" "),t("p",[e._v("Chevereto V4 is made for Unix-like systems and it is CI tested against "),t("a",{attrs:{href:"https://ubuntu.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Ubuntu"),t("OutboundLink")],1),e._v(" "),t("code",[e._v("ubuntu-latest")]),e._v(".")]),e._v(" "),t("p",[e._v("V4 documentation at this time is written for "),t("strong",[e._v("Debian-based")]),e._v(" systems. We "),t("strong",[e._v("recommend")]),e._v(" checking/contributing with system-specific commands.")]),e._v(" "),t("h2",{attrs:{id:"non-debian-based"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#non-debian-based"}},[e._v("#")]),e._v(" Non Debian-based")]),e._v(" "),t("p",[e._v("Non Debian-based systems should work fine with Chevereto V4 long as the system stack packages matches with the versions available on Debian.")]),e._v(" "),t("p",[e._v("Make sure to replace references in this documentation from "),t("strong",[e._v("www-data")]),e._v(" to the target web-server user.")]),e._v(" "),t("h2",{attrs:{id:"windows-and-others"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#windows-and-others"}},[e._v("#")]),e._v(" Windows and others")]),e._v(" "),t("p",[e._v("For non Unix-like systems as Windows we "),t("strong",[e._v("recommend")]),e._v(" using our "),t("RouterLink",{attrs:{to:"/guides/docker/"}},[e._v("Docker")]),e._v(" provisioning.")],1),e._v(" "),t("h2",{attrs:{id:"video-processing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#video-processing"}},[e._v("#")]),e._v(" Video processing")]),e._v(" "),t("p",[e._v("Chevereto since V4.1 (Pulento) optionally requires "),t("a",{attrs:{href:"https://ffmpeg.org",target:"_blank",rel:"noopener noreferrer"}},[e._v("FFmpeg"),t("OutboundLink")],1),e._v(" and FFprobe to process video uploads.")]),e._v(" "),t("p",[e._v("The FFmpeg binary should be available at the system path, alternatively you can configure the "),t("RouterLink",{attrs:{to:"/application/configuration/environment.html#binary-paths"}},[e._v("binary location")]),e._v(" manually.")],1),e._v(" "),t("p",[e._v("If you can't install packages or if you are using a shared hosting, you can get the FFmpeg binary for your system from the "),t("a",{attrs:{href:"https://ffmpeg.org/download.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("official website"),t("OutboundLink")],1),e._v(" and upload it to your server.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(269),alt:"FFmpeg folder"}})])])}),[],!1,null,null,null);t.default=a.exports}}]);
\ No newline at end of file
diff --git a/assets/js/31.8acbb16b.js b/assets/js/31.8acbb16b.js
new file mode 100644
index 00000000..3ef2befa
--- /dev/null
+++ b/assets/js/31.8acbb16b.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{302:function(t,s,a){t.exports=a.p+"assets/img/tinkerwell-chevereto.387ddd77.png"},360:function(t,s,a){"use strict";a.r(s);var n=a(17),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"repl"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#repl"}},[t._v("#")]),t._v(" REPL")]),t._v(" "),s("p",[t._v("Chevereto supports "),s("a",{attrs:{href:"https://tinkerwell.app/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Tinkewell"),s("OutboundLink")],1),t._v(" and "),s("a",{attrs:{href:"https://psysh.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("PsySH"),s("OutboundLink")],1),t._v(", enabling to execute any set of instructions under the environment of a "),s("a",{attrs:{href:"https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop",target:"_blank",rel:"noopener noreferrer"}},[t._v("read–eval–print loop"),s("OutboundLink")],1),t._v(" (REPL).")]),t._v(" "),s("p",[t._v("You can interact directly with the Chevereto application as it enables to query the database, call any function within the public API, debug and to facilitate "),s("a",{attrs:{href:"https://en.wikipedia.org/wiki/Exploratory_programming",target:"_blank",rel:"noopener noreferrer"}},[t._v("exploratory programming"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[s("img",{attrs:{src:a(302),alt:"Tinkerwell Chevereto"}})]),t._v(" "),s("details",{staticClass:"custom-block details"},[s("summary",[t._v("Sample code")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token package"}},[t._v("Chevereto"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Legacy"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Classes"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("DB")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token package"}},[t._v("Chevereto"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Legacy"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Classes"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Login")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$row")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("DB")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token argument-name"}},[t._v("table")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'users'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token argument-name"}},[t._v("values")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'all'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token argument-name"}},[t._v("limit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$row")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("DB")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("formatRows")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$row")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$row")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//?")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$row")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'website'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//?")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$row")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'bio'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//?")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$googleSecret")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Login")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getProviders")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'all'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'google'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'secret'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//?")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$enabledProviders")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Login")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getProviders")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enabled'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),s("h2",{attrs:{id:"using-psysh"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#using-psysh"}},[t._v("#")]),t._v(" Using PsySH")]),t._v(" "),s("p",[t._v("PsySH comes included with Chevereto V4, run the following command to start the REPL environment.")]),t._v(" "),s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[t._v("app/bin/repl\n")])])]),s("h2",{attrs:{id:"using-tinkerwell"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#using-tinkerwell"}},[t._v("#")]),t._v(" Using Tinkerwell")]),t._v(" "),s("p",[t._v("To use Tinkerwell with Chevereto configure the PHP binary and open/connect your Chevereto installation.")])])}),[],!1,null,null,null);s.default=e.exports}}]);
\ No newline at end of file
diff --git a/assets/js/32.f9a33f58.js b/assets/js/32.f9a33f58.js
new file mode 100644
index 00000000..138f1228
--- /dev/null
+++ b/assets/js/32.f9a33f58.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{309:function(a,t,e){a.exports=e.p+"assets/img/cronjob.13a2a082.png"},366:function(a,t,e){"use strict";e.r(t);var s=e(17),r=Object(s.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"cpanel-cron"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cpanel-cron"}},[a._v("#")]),a._v(" cPanel CRON")]),a._v(" "),t("h2",{attrs:{id:"add-new-cron-job"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#add-new-cron-job"}},[a._v("#")]),a._v(" Add new CRON job")]),a._v(" "),t("ul",[t("li",[a._v("Go to "),t("strong",[a._v("Cron Jobs")]),a._v(" under "),t("strong",[a._v("Advanced")])]),a._v(" "),t("li",[a._v("Scroll to "),t("strong",[a._v("Add New Cron Job")])])]),a._v(" "),t("p",[t("img",{attrs:{src:e(309),alt:"Cronjob"}})]),a._v(" "),t("ul",[t("li",[a._v("Under "),t("strong",[a._v("Common Settings")]),a._v(" pick "),t("code",[a._v("Once Per Minute (* * * * *)")])])]),a._v(" "),t("p",[a._v("The command invocation vary depending on use context, you need to create "),t("em",[a._v("your own")]),a._v(" command based on the following general form:")]),a._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[a._v("php-binary cli-path "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("cron")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("/dev/null "),t("span",{pre:!0,attrs:{class:"token operator"}},[t("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[a._v("2")]),a._v(">")]),t("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[a._v("&1")]),a._v("\n")])])]),t("ul",[t("li",[t("strong",[a._v("php-binary")]),a._v(" Check the "),t("code",[a._v("PHP command examples")]),a._v(" section under "),t("strong",[a._v("Add New Cron Job")]),a._v(" where you can learn about the PHP path for your system.")]),a._v(" "),t("li",[t("strong",[a._v("cli-path")]),a._v(" Chevereto CLI path can be found on your Dashboard panel under "),t("strong",[a._v("Installation details")]),a._v(".")]),a._v(" "),t("li",[t("strong",[a._v("-C cron")]),a._v(' C-option to pass the "cron" app-command')])]),a._v(" "),t("h3",{attrs:{id:"command-examples"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#command-examples"}},[a._v("#")]),a._v(" Command examples")]),a._v(" "),t("code-group",[t("code-block",{attrs:{title:"General"}},[t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[a._v("/usr/local/bin/ea-php81 /home/chevereto/public_html/app/bin/legacy "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("cron")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("/dev/null "),t("span",{pre:!0,attrs:{class:"token operator"}},[t("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[a._v("2")]),a._v(">")]),t("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[a._v("&1")]),a._v("\n")])])])]),a._v(" "),t("code-block",{attrs:{title:"CloudLinux"}},[t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[a._v("/opt/alt/php81/usr/bin/php /home/chevereto/public_html/app/bin/legacy "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("cron")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("/dev/null "),t("span",{pre:!0,attrs:{class:"token operator"}},[t("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[a._v("2")]),a._v(">")]),t("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[a._v("&1")]),a._v("\n")])])])])],1)],1)}),[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/33.75b9ca8c.js b/assets/js/33.75b9ca8c.js
new file mode 100644
index 00000000..0a6776ae
--- /dev/null
+++ b/assets/js/33.75b9ca8c.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{269:function(e,t,a){e.exports=a.p+"assets/img/ffmpeg-folder.1ef2e021.png"},367:function(e,t,a){"use strict";a.r(t);var s=a(17),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"cpanel-ffmpeg"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cpanel-ffmpeg"}},[e._v("#")]),e._v(" cPanel FFmpeg")]),e._v(" "),t("p",[e._v("To get video uploads to work on cPanel you need to install FFmpeg and configure Chevereto to use it.")]),e._v(" "),t("h2",{attrs:{id:"download-ffmpeg"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#download-ffmpeg"}},[e._v("#")]),e._v(" Download FFmpeg")]),e._v(" "),t("p",[e._v("Download FFmpeg static build from the official website at "),t("a",{attrs:{href:"https://ffmpeg.org/download.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("ffmpeg.org/download.html"),t("OutboundLink")],1),e._v(". Double check that you are downloading the static build, and that it is compatible with your server's architecture.")]),e._v(" "),t("p",[e._v('You can check your cPanel server architecture under the "Server Information" section.')]),e._v(" "),t("h2",{attrs:{id:"upload-ffmpeg"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#upload-ffmpeg"}},[e._v("#")]),e._v(" Upload FFmpeg")]),e._v(" "),t("p",[e._v("The FFmpeg distribution comes in a compressed file, you need to extract it and upload the folder containing the binaries to your server.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(269),alt:"FFmpeg folder"}})]),e._v(" "),t("p",[e._v("You can upload these to any directory long as it is visible for your cPanel user. For example, you can use "),t("code",[e._v("/home/user/bin/")]),e._v(" and ending up with:")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("/home/user/bin/ffmpeg-7.0.2-amd64-static\n")])])]),t("h2",{attrs:{id:"configure-chevereto"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#configure-chevereto"}},[e._v("#")]),e._v(" Configure Chevereto")]),e._v(" "),t("p",[e._v("After installing Chevereto you can configure it to use custom FFmpeg binaries. You need to "),t("RouterLink",{attrs:{to:"/application/configuration/configuring.html#using-app-env-php"}},[e._v("configure")]),e._v(" to use the following environment variables matching to the paths where you uploaded the binaries:")],1),e._v(" "),t("div",{staticClass:"language-php extra-class"},[t("pre",{pre:!0,attrs:{class:"language-php"}},[t("code",[t("span",{pre:!0,attrs:{class:"token php language-php"}},[t("span",{pre:!0,attrs:{class:"token delimiter important"}},[e._v("")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[e._v("'/home/user/bin/ffmpeg-7.0.2-amd64-static/ffmpeg'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[e._v("'CHEVERETO_BINARY_FFPROBE'")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=>")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[e._v("'/home/user/bin/ffmpeg-7.0.2-amd64-static/ffprobe'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n")])])])]),t("p",[e._v("You can check if this worked by going to "),t("code",[e._v("/dashboard")]),e._v(" where you will see the report on detected FFmpeg and FFPROBE.")])])}),[],!1,null,null,null);t.default=n.exports}}]);
\ No newline at end of file
diff --git a/assets/js/34.25b78c2a.js b/assets/js/34.25b78c2a.js
new file mode 100644
index 00000000..96bf99ff
--- /dev/null
+++ b/assets/js/34.25b78c2a.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{269:function(e,t,a){e.exports=a.p+"assets/img/ffmpeg-folder.1ef2e021.png"},376:function(e,t,a){"use strict";a.r(t);var s=a(17),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"plesk-ffmpeg"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#plesk-ffmpeg"}},[e._v("#")]),e._v(" Plesk FFmpeg")]),e._v(" "),t("p",[e._v("To get video uploads to work on Plesk you need to install FFmpeg and configure Chevereto to use it.")]),e._v(" "),t("h2",{attrs:{id:"download-ffmpeg"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#download-ffmpeg"}},[e._v("#")]),e._v(" Download FFmpeg")]),e._v(" "),t("p",[e._v("Download FFmpeg static build from the official website at "),t("a",{attrs:{href:"https://ffmpeg.org/download.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("ffmpeg.org/download.html"),t("OutboundLink")],1),e._v(". Double check that you are downloading the static build, and that it is compatible with your server's architecture.")]),e._v(" "),t("p",[e._v('You can check your Plesk server architecture under the "Server Information" section.')]),e._v(" "),t("h2",{attrs:{id:"upload-ffmpeg"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#upload-ffmpeg"}},[e._v("#")]),e._v(" Upload FFmpeg")]),e._v(" "),t("p",[e._v("The FFmpeg distribution comes in a compressed file, you need to extract it and upload the folder containing the binaries to your server.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(269),alt:"FFmpeg folder"}})]),e._v(" "),t("p",[e._v("You can upload these to any directory long as it is visible for your Plesk user. For example, you can use "),t("code",[e._v("/home/user/bin/")]),e._v(" and ending up with:")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("/home/user/bin/ffmpeg-7.0.2-amd64-static\n")])])]),t("h2",{attrs:{id:"configure-chevereto"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#configure-chevereto"}},[e._v("#")]),e._v(" Configure Chevereto")]),e._v(" "),t("p",[e._v("After installing Chevereto you can configure it to use custom FFmpeg binaries. You need to "),t("RouterLink",{attrs:{to:"/application/configuration/configuring.html#using-app-env-php"}},[e._v("configure")]),e._v(" to use the following environment variables matching to the paths where you uploaded the binaries:")],1),e._v(" "),t("div",{staticClass:"language-php extra-class"},[t("pre",{pre:!0,attrs:{class:"language-php"}},[t("code",[t("span",{pre:!0,attrs:{class:"token php language-php"}},[t("span",{pre:!0,attrs:{class:"token delimiter important"}},[e._v("")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[e._v("'/home/user/bin/ffmpeg-7.0.2-amd64-static/ffmpeg'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[e._v("'CHEVERETO_BINARY_FFPROBE'")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=>")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[e._v("'/home/user/bin/ffmpeg-7.0.2-amd64-static/ffprobe'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n")])])])]),t("p",[e._v("You can check if this worked by going to "),t("code",[e._v("/dashboard")]),e._v(" where you will see the report on detected FFmpeg and FFPROBE.")])])}),[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/35.c19cbc68.js b/assets/js/35.c19cbc68.js
new file mode 100644
index 00000000..7ad7d5dc
--- /dev/null
+++ b/assets/js/35.c19cbc68.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{339:function(e,t,r){"use strict";r.r(t);var o=r(17),a=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"chevereto-v4-docs"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-v4-docs"}},[e._v("#")]),e._v(" Chevereto V4 Docs")]),e._v(" "),t("p",[t("img",{attrs:{src:"/chevereto.svg",alt:"Chevereto"}})]),e._v(" "),t("p",[t("a",{attrs:{href:"https://chevereto.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto"),t("OutboundLink")],1),e._v(" is a robust, self-hosted media-sharing platform that prioritizes flexibility and control. It enables you to build and manage a media-sharing website on your own server, granting you complete autonomy over your hosting environment and policies. With Chevereto, you eliminate the risk of platform restrictions and shutdowns, ensuring your site operates entirely on your terms.")]),e._v(" "),t("h2",{attrs:{id:"install"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install"}},[e._v("#")]),e._v(" Install")]),e._v(" "),t("p",[e._v("Chevereto runs anywhere, system requirements are minimal and it can run on any server.")]),e._v(" "),t("p",[e._v("Install Chevereto following our guides for:")]),e._v(" "),t("ul",[t("li",[e._v("Docker (Multi-arch image compatible with "),t("code",[e._v("x86_64")]),e._v(" and "),t("code",[e._v("arm64")]),e._v(")\n"),t("ul",[t("li",[t("RouterLink",{attrs:{to:"/guides/docker/"}},[e._v("Chevereto Docker")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/guides/docker/pure-docker.html"}},[e._v("Pure Docker")])],1)])]),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/guides/server/vps.html"}},[e._v("VPS")]),e._v(" (DigitalOcean, Linode, Vultr, etc)")],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/guides/cpanel/"}},[e._v("cPanel")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/guides/plesk/"}},[e._v("Plesk")])],1)]),e._v(" "),t("p",[e._v("Chevereto is also available at "),t("a",{attrs:{href:"https://chevereto.com/go/digitalocean",target:"_blank",rel:"noopener noreferrer"}},[e._v("DigitalOcean Marketplace"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://chevereto.com/go/vultr",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vultr Marketplace"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://installatron.com/chevereto",target:"_blank",rel:"noopener noreferrer"}},[e._v("Installatron"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://www.softaculous.com/apps/galleries/Chevereto",target:"_blank",rel:"noopener noreferrer"}},[e._v("Softaculous"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://swiftwave.org/docs/dashboard/swiftwave_app_store/",target:"_blank",rel:"noopener noreferrer"}},[e._v("SwiftWave"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Review our "),t("RouterLink",{attrs:{to:"/application/installing/installation.html"}},[e._v("Installation docs")]),e._v(" for all alternatives.")],1),e._v(" "),t("h2",{attrs:{id:"updating"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#updating"}},[e._v("#")]),e._v(" Updating")]),e._v(" "),t("p",[e._v("For Chevereto V4 users:")]),e._v(" "),t("ul",[t("li",[e._v("Follow the "),t("RouterLink",{attrs:{to:"/application/installing/updating.html"}},[e._v("Updating guide")]),e._v(" to keep your Chevereto V4 system updated.")],1)]),e._v(" "),t("h2",{attrs:{id:"upgrading"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#upgrading"}},[e._v("#")]),e._v(" Upgrading")]),e._v(" "),t("p",[e._v("For Chevereto V3 users:")]),e._v(" "),t("ul",[t("li",[e._v("Follow the "),t("RouterLink",{attrs:{to:"/application/installing/upgrading.html"}},[e._v("Upgrading guide")]),e._v(" to upgrade to Chevereto V4.")],1),e._v(" "),t("li",[e._v("Check the "),t("RouterLink",{attrs:{to:"/introduction/changelog/welcome-back.html#chevereto-v4-vs-v3"}},[e._v("Welcome back")]),e._v(" reference.")],1)]),e._v(" "),t("h2",{attrs:{id:"troubleshooting"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#troubleshooting"}},[e._v("#")]),e._v(" Troubleshooting")]),e._v(" "),t("p",[e._v("Got a "),t("code",[e._v("Something went wrong")]),e._v(" message? Don't panic and check our "),t("RouterLink",{attrs:{to:"/application/reference/errors.html#something-went-wrong"}},[e._v("Troubleshooting")]),e._v(" guide.")],1),e._v(" "),t("h2",{attrs:{id:"support"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#support"}},[e._v("#")]),e._v(" Support")]),e._v(" "),t("p",[e._v("Go to "),t("a",{attrs:{href:"https://chevereto.com/support",target:"_blank",rel:"noopener noreferrer"}},[e._v("chevereto.com/support"),t("OutboundLink")],1),e._v(".")])])}),[],!1,null,null,null);t.default=a.exports}}]);
\ No newline at end of file
diff --git a/assets/js/36.837a0b44.js b/assets/js/36.837a0b44.js
new file mode 100644
index 00000000..a87b5671
--- /dev/null
+++ b/assets/js/36.837a0b44.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{340:function(s,t,n){"use strict";n.r(t);var a=n(17),e=Object(a.a)({},(function(){var s=this,t=s._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"configuring"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#configuring"}},[s._v("#")]),s._v(" Configuring")]),s._v(" "),t("p",[s._v("Chevereto V4 uses "),t("RouterLink",{attrs:{to:"/application/configuration/environment.html"}},[s._v("environment variables")]),s._v(" for configuring system level settings.")],1),s._v(" "),t("p",[s._v("Environment variables configured at "),t("code",[s._v("ENV")]),s._v(" system level will "),t("strong",[s._v("override")]),s._v(" the configuration at "),t("code",[s._v("app/env.php")]),s._v(".")]),s._v(" "),t("h2",{attrs:{id:"using-app-env-php"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#using-app-env-php"}},[s._v("#")]),s._v(" Using "),t("code",[s._v("app/env.php")])]),s._v(" "),t("p",[s._v("For the most common use-case, set the system settings at the "),t("code",[s._v("app/env.php")]),s._v(" file, which contains the application level settings.")]),s._v(" "),t("p",[s._v("This applies for "),t("code",[s._v("ENV")]),s._v(" variables not set as "),t("code",[s._v("app/env.php")]),s._v(" has "),t("strong",[s._v("lower priority")]),s._v(" than system wide "),t("RouterLink",{attrs:{to:"/application/configuration/environment.html"}},[s._v("ENV")]),s._v(".")],1),s._v(" "),t("h3",{attrs:{id:"creating-env-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-env-file"}},[s._v("#")]),s._v(" Creating env file")]),s._v(" "),t("p",[s._v("This file will be created on installation after submitting the database details. You can also manually create it, it may look like this:")]),s._v(" "),t("div",{staticClass:"language-php extra-class"},[t("pre",{pre:!0,attrs:{class:"language-php"}},[t("code",[t("span",{pre:!0,attrs:{class:"token php language-php"}},[t("span",{pre:!0,attrs:{class:"token delimiter important"}},[s._v("")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'chevereto'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_PASS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'user_database_password'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_PORT'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'3306'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_TABLE_PREFIX'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'chv_'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_USER'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'user_database'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])])])]),t("p",[t("strong",[s._v("Note:")]),s._v(" The system requires to pass only the values that "),t("strong",[s._v("overrides")]),s._v(" the "),t("a",{attrs:{href:"#defaults"}},[s._v("defaults")]),s._v(".")]),s._v(" "),t("h3",{attrs:{id:"defaults"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#defaults"}},[s._v("#")]),s._v(" Defaults")]),s._v(" "),t("p",[s._v("The "),t("code",[s._v("app/env-default.php")]),s._v(" file contains the default settings that are passed. Here below is how this file looks like:")]),s._v(" "),t("details",{staticClass:"custom-block details"},[t("summary",[s._v("app/env-default.php")]),s._v(" "),t("div",{staticClass:"language-php extra-class"},[t("pre",{pre:!0,attrs:{class:"language-php"}},[t("code",[t("span",{pre:!0,attrs:{class:"token php language-php"}},[t("span",{pre:!0,attrs:{class:"token delimiter important"}},[s._v("")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'ffmpeg'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_BINARY_FFPROBE'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'ffprobe'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_CONTEXT'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_DRIVER'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'mysql'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_HOST'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'localhost'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_NAME'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_PASS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_PDO_ATTRS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'[]'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_PORT'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'3306'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_TABLE_PREFIX'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'chv_'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_USER'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DEBUG_LEVEL'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_EDITION'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'pro'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_API_GUEST'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_BANNERS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_BULK_IMPORTER'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_CAPTCHA'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_CDN'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_CONSENT_SCREEN'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_COOKIE_COMPLIANCE'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_DEBUG'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_EXPOSE_PAID_FEATURES'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_EXTERNAL_SERVICES'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_EXTERNAL_STORAGE_PROVIDERS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_FAVICON'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_FOLLOWERS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_FORCE_POWERED_BY_FOOTER'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_HTACCESS_CHECK'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_IP_BANS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_LANGUAGE_CHOOSER'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_LIKES'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_LOCAL_STORAGE'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_LOGIN_PROVIDERS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_LOGO_CUSTOM'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_MODERATION'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_NEWS_CHECK'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_NOTIFICATIONS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_PAGES'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_PHP_PAGES'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_POWERED_BY_SETTING'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_PUP_CUSTOM_URL'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_ROUTING'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_SEO_ALBUM_URL'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_SEO_IMAGE_URL'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_SERVICE_AKISMET'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_SERVICE_MODERATECONTENT'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_SERVICE_PROJECTARACHNID'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_SERVICE_STOPFORUMSPAM'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_STOPWORDS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_UPDATE_CHECK'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_UPDATE_CLI'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_UPDATE_HTTP'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_UPLOAD_FLOOD_PROTECTION'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_UPLOAD_PLUGIN'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_UPLOAD_URL'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_UPLOAD_WATERMARK'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_USERS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_XRDEBUG'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENCRYPTION_KEY'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ERROR_LOG_CLI'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ERROR_LOG_CRON'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ERROR_LOG'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'php://stderr'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_HEADER_CLIENT_IP'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_HOSTNAME_PATH'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'/'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_HOSTNAME'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'localhost'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_HTTPS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_IMAGE_FORMATS_AVAILABLE'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v('\'["AVIF","JPEG","PNG","BMP","GIF","WEBP"]\'')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_IMAGE_LIBRARY'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'imagick'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_ADMINS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_ALBUMS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_CATEGORIES'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_EXECUTION_TIME_SECONDS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'30'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_FILES'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_LOGIN_PROVIDERS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_MANAGERS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_MEMORY_SIZE'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'512M'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_PAGES'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_POST_SIZE'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'100M'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_STORAGES'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_TAGS_PER_FILE'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_TAGS_PER_LISTING'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_TAGS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_UPLOAD_SIZE'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'100M'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_USER_ALBUMS_LIST'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'500'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_USERS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MIN_STORAGES_ACTIVE'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_SERVICING'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'server'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_SESSION_SAVE_HANDLER'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'files'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_SESSION_SAVE_PATH'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'/tmp'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_XRDEBUG_HOST'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'localhost'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_XRDEBUG_HTTPS'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_XRDEBUG_KEY'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_XRDEBUG_PORT'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'27420'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])])])])]),s._v(" "),t("h2",{attrs:{id:"using-env"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#using-env"}},[s._v("#")]),s._v(" Using "),t("code",[s._v("ENV")])]),s._v(" "),t("p",[s._v("This applies where system environment variables can be configured. In this case, variables are handled in a plain text format like in the example below:")]),s._v(" "),t("div",{staticClass:"language-plain extra-class"},[t("pre",{pre:!0,attrs:{class:"language-plain"}},[t("code",[s._v("CHEVERETO_DB_HOST=localhost\n")])])]),t("h3",{attrs:{id:"apache-http-web-server-php-module"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#apache-http-web-server-php-module"}},[s._v("#")]),s._v(" Apache HTTP Web Server (PHP module)")]),s._v(" "),t("p",[s._v("If PHP is provided using "),t("code",[s._v("mpm_prefork")]),s._v(" you must refer to the documentation on "),t("a",{attrs:{href:"https://httpd.apache.org/docs/current/env.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("Apache HTTP Server environment variables"),t("OutboundLink")],1),s._v(".")]),s._v(" "),t("h3",{attrs:{id:"other-setups"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#other-setups"}},[s._v("#")]),s._v(" Other setups")]),s._v(" "),t("p",[s._v("For these you will be running "),t("a",{attrs:{href:"https://www.php.net/manual/en/install.fpm.configuration.php",target:"_blank",rel:"noopener noreferrer"}},[s._v("PHP-FPM"),t("OutboundLink")],1),s._v(" so you can add those settings at your "),t("code",[s._v("php-fpm.conf")]),s._v(" file.")]),s._v(" "),t("h3",{attrs:{id:"application-servers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#application-servers"}},[s._v("#")]),s._v(" Application servers")]),s._v(" "),t("p",[s._v("For these you will be running PHP CLI so you should be able to pass those at "),t("code",[s._v("php.ini")]),s._v(" for your CLI. You can also "),t("code",[s._v("export")]),s._v(" those in your shell.")]),s._v(" "),t("p",[s._v("Refer to the documentation of each application server for the best way to pass environment variables to Chevereto.")]),s._v(" "),t("h3",{attrs:{id:"container"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#container"}},[s._v("#")]),s._v(" Container")]),s._v(" "),t("p",[s._v("Pass the environment variables to the "),t("code",[s._v("docker run")]),s._v(" command or at "),t("code",[s._v("docker compose")]),s._v(" layer (.yml file).")])])}),[],!1,null,null,null);t.default=e.exports}}]);
\ No newline at end of file
diff --git a/assets/js/37.348e11b6.js b/assets/js/37.348e11b6.js
new file mode 100644
index 00000000..f384d1d6
--- /dev/null
+++ b/assets/js/37.348e11b6.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{344:function(_,t,v){"use strict";v.r(t);var E=v(17),e=Object(E.a)({},(function(){var _=this,t=_._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":_.$parent.slotKey}},[t("h1",{attrs:{id:"environment"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#environment"}},[_._v("#")]),_._v(" Environment")]),_._v(" "),t("h2",{attrs:{id:"system-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#system-variables"}},[_._v("#")]),_._v(" System variables")]),_._v(" "),t("p",[_._v("Environment variables for the system context.")]),_._v(" "),t("table",[t("thead",[t("tr",[t("th",[_._v("Variable")]),_._v(" "),t("th",[_._v("Example")])])]),_._v(" "),t("tbody",[t("tr",[t("td",[_._v("CHEVERETO_SERVICING")]),_._v(" "),t("td",[t("code",[_._v("server")]),_._v(", "),t("code",[_._v("docker")])])])])]),_._v(" "),t("h2",{attrs:{id:"database-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#database-variables"}},[_._v("#")]),_._v(" Database variables")]),_._v(" "),t("p",[_._v("Environment variables for the database details.")]),_._v(" "),t("table",[t("thead",[t("tr",[t("th",[_._v("Variable")]),_._v(" "),t("th",[_._v("Example")])])]),_._v(" "),t("tbody",[t("tr",[t("td",[_._v("CHEVERETO_DB_DRIVER")]),_._v(" "),t("td",[t("code",[_._v("mysql")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_DB_HOST")]),_._v(" "),t("td",[t("code",[_._v("mariadb")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_DB_NAME")]),_._v(" "),t("td",[t("code",[_._v("chevereto")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_DB_PASS")]),_._v(" "),t("td",[t("code",[_._v("user_database_password")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_DB_PDO_ATTRS")]),_._v(" "),t("td",[t("code",[_._v('{"key":"value"}')]),_._v(" (json)")])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_DB_PORT")]),_._v(" "),t("td",[t("code",[_._v("3306")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_DB_TABLE_PREFIX")]),_._v(" "),t("td",[t("code",[_._v("chv_")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_DB_USER")]),_._v(" "),t("td",[t("code",[_._v("chevereto")])])])])]),_._v(" "),t("h2",{attrs:{id:"error-logging-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#error-logging-variables"}},[_._v("#")]),_._v(" Error logging variables")]),_._v(" "),t("p",[_._v("Environment variables for handling "),t("RouterLink",{attrs:{to:"/application/reference/errors.html"}},[_._v("error")]),_._v(" logging.")],1),_._v(" "),t("table",[t("thead",[t("tr",[t("th",[_._v("Variable")]),_._v(" "),t("th",[_._v("Default")])])]),_._v(" "),t("tbody",[t("tr",[t("td",[_._v("CHEVERETO_ERROR_LOG_CLI")]),_._v(" "),t("td")]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ERROR_LOG_CRON")]),_._v(" "),t("td")]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ERROR_LOG")]),_._v(" "),t("td",[t("code",[_._v("php://stderr")])])])])]),_._v(" "),t("h2",{attrs:{id:"debug-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#debug-variables"}},[_._v("#")]),_._v(" Debug variables")]),_._v(" "),t("p",[_._v("Environment variables for "),t("RouterLink",{attrs:{to:"/developer/how-to/debug.html"}},[_._v("debug")]),_._v(".")],1),_._v(" "),t("table",[t("thead",[t("tr",[t("th",[_._v("Variable")]),_._v(" "),t("th",[_._v("Example")])])]),_._v(" "),t("tbody",[t("tr",[t("td",[_._v("CHEVERETO_DEBUG_LEVEL")]),_._v(" "),t("td",[t("code",[_._v("1")])])])])]),_._v(" "),t("h2",{attrs:{id:"xrdebug-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#xrdebug-variables"}},[_._v("#")]),_._v(" xrDebug variables")]),_._v(" "),t("table",[t("thead",[t("tr",[t("th",[_._v("Variable")]),_._v(" "),t("th",[_._v("Example")])])]),_._v(" "),t("tbody",[t("tr",[t("td",[_._v("CHEVERETO_ENABLE_XRDEBUG")]),_._v(" "),t("td",[t("code",[_._v("0")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_XRDEBUG_HOST")]),_._v(" "),t("td",[t("code",[_._v("localhost")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_XRDEBUG_HTTPS")]),_._v(" "),t("td",[t("code",[_._v("0")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_XRDEBUG_KEY")]),_._v(" "),t("td",[t("code",[_._v("")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_XRDEBUG_PORT")]),_._v(" "),t("td",[t("code",[_._v("27420")])])])])]),_._v(" "),t("h2",{attrs:{id:"hostname-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#hostname-variables"}},[_._v("#")]),_._v(" Hostname variables")]),_._v(" "),t("p",[_._v("Environment variables for the hostname configuration.")]),_._v(" "),t("table",[t("thead",[t("tr",[t("th",[_._v("Variable")]),_._v(" "),t("th",[_._v("Example")])])]),_._v(" "),t("tbody",[t("tr",[t("td",[_._v("CHEVERETO_HOSTNAME")]),_._v(" "),t("td",[t("code",[_._v("chevereto.internal")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_HOSTNAME_PATH")]),_._v(" "),t("td",[t("code",[_._v("/")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_HTTPS")]),_._v(" "),t("td",[t("code",[_._v("1")])])])])]),_._v(" "),t("h2",{attrs:{id:"encryption-key"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#encryption-key"}},[_._v("#")]),_._v(" Encryption key")]),_._v(" "),t("p",[_._v("Environment variables for the "),t("RouterLink",{attrs:{to:"/application/reference/encryption.html"}},[_._v("encryption")]),_._v(" functionality.")],1),_._v(" "),t("table",[t("thead",[t("tr",[t("th",[_._v("Variable")]),_._v(" "),t("th",[_._v("Type")])])]),_._v(" "),t("tbody",[t("tr",[t("td",[_._v("CHEVERETO_ENCRYPTION_KEY")]),_._v(" "),t("td",[_._v("base64 encoded (size 32)")])])])]),_._v(" "),t("h2",{attrs:{id:"session-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#session-variables"}},[_._v("#")]),_._v(" Session variables")]),_._v(" "),t("p",[_._v("Environment variables for the session driver.")]),_._v(" "),t("table",[t("thead",[t("tr",[t("th",[_._v("Variable")]),_._v(" "),t("th",[_._v("Example")])])]),_._v(" "),t("tbody",[t("tr",[t("td",[_._v("CHEVERETO_SESSION_SAVE_HANDLER")]),_._v(" "),t("td",[t("code",[_._v("files")]),_._v(", "),t("code",[_._v("redis")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_SESSION_SAVE_PATH")]),_._v(" "),t("td",[t("code",[_._v("/tmp")])])])])]),_._v(" "),t("h2",{attrs:{id:"image-handling-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#image-handling-variables"}},[_._v("#")]),_._v(" Image handling variables")]),_._v(" "),t("p",[_._v("Environment variables for controlling image handling.")]),_._v(" "),t("table",[t("thead",[t("tr",[t("th",[_._v("Variable")]),_._v(" "),t("th",[_._v("Example")])])]),_._v(" "),t("tbody",[t("tr",[t("td",[_._v("CHEVERETO_IMAGE_FORMATS_AVAILABLE")]),_._v(" "),t("td",[t("code",[_._v("'JPG','PNG','BMP','GIF','WEBP'")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_IMAGE_LIBRARY")]),_._v(" "),t("td",[t("code",[_._v("imagick")])])])])]),_._v(" "),t("h2",{attrs:{id:"binary-paths"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#binary-paths"}},[_._v("#")]),_._v(" Binary paths")]),_._v(" "),t("p",[_._v("Environment variables for controlling binary tools used by Chevereto.")]),_._v(" "),t("table",[t("thead",[t("tr",[t("th",[_._v("Variable")]),_._v(" "),t("th",[_._v("Example")])])]),_._v(" "),t("tbody",[t("tr",[t("td",[_._v("CHEVERETO_BINARY_FFMPEG")]),_._v(" "),t("td",[t("code",[_._v("/some/path/ffmpeg")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_BINARY_FFPROBE")]),_._v(" "),t("td",[t("code",[_._v("/some/path/ffprobe")])])])])]),_._v(" "),t("h2",{attrs:{id:"toggles"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#toggles"}},[_._v("#")]),_._v(" Toggles")]),_._v(" "),t("p",[_._v("Environment variables for the context where Chevereto system is being provided. Depending on where you run it, you may want to disable some Chevereto functionality.")]),_._v(" "),t("table",[t("thead",[t("tr",[t("th",[_._v("Variable")]),_._v(" "),t("th",[_._v("Default")])])]),_._v(" "),t("tbody",[t("tr",[t("td",[_._v("CHEVERETO_ENABLE_API_GUEST")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_BANNERS")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_BULK_IMPORTER")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_CAPTCHA")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_CDN")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_CONSENT_SCREEN")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_COOKIE_COMPLIANCE")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_DEBUG")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_EXPOSE_PAID_FEATURES")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_EXTERNAL_SERVICES")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_EXTERNAL_STORAGE_PROVIDERS")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_FAVICON")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_FOLLOWERS")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_FORCE_POWERED_BY_FOOTER")]),_._v(" "),t("td",[t("code",[_._v("0")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_HTACCESS_CHECK")]),_._v(" "),t("td",[t("code",[_._v("0")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_IP_BANS")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_LANGUAGE_CHOOSER")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_LIKES")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_LOCAL_STORAGE")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_LOGIN_PROVIDERS")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_LOGO_CUSTOM")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_MODERATION")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_NEWS_CHECK")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_NOTIFICATIONS")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_PAGES")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_PHP_PAGES")]),_._v(" "),t("td",[t("code",[_._v("0")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_POWERED_BY_SETTING")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_PUP_CUSTOM_URL")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_ROUTING")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_SEO_ALBUM_URL")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_SEO_IMAGE_URL")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_SERVICE_AKISMET")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_SERVICE_MODERATECONTENT")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_SERVICE_PROJECTARACHNID")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_SERVICE_STOPFORUMSPAM")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_STOPWORDS")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_UPDATE_CHECK")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_UPDATE_CLI")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_UPDATE_HTTP")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_UPLOAD_FLOOD_PROTECTION")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_UPLOAD_PLUGIN")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_UPLOAD_URL")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_UPLOAD_WATERMARK")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_USERS")]),_._v(" "),t("td",[t("code",[_._v("1")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_ENABLE_XRDEBUG")]),_._v(" "),t("td",[t("code",[_._v("0")])])])])]),_._v(" "),t("h2",{attrs:{id:"limits"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#limits"}},[_._v("#")]),_._v(" Limits")]),_._v(" "),t("p",[_._v("Environment variables that limits the use for Chevereto")]),_._v(" "),t("p",[_._v("Zero "),t("code",[_._v("0")]),_._v(" means no limit.")]),_._v(" "),t("table",[t("thead",[t("tr",[t("th",[_._v("Variable")]),_._v(" "),t("th",[_._v("Example")])])]),_._v(" "),t("tbody",[t("tr",[t("td",[_._v("CHEVERETO_MAX_ADMINS")]),_._v(" "),t("td",[t("code",[_._v("0")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_ALBUMS")]),_._v(" "),t("td",[t("code",[_._v("0")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_CATEGORIES")]),_._v(" "),t("td",[t("code",[_._v("0")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_EXECUTION_TIME_SECONDS")]),_._v(" "),t("td",[t("code",[_._v("30")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_FILES")]),_._v(" "),t("td",[t("code",[_._v("0")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_LOGIN_PROVIDERS")]),_._v(" "),t("td",[t("code",[_._v("0")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_MANAGERS")]),_._v(" "),t("td",[t("code",[_._v("0")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_MEMORY_SIZE")]),_._v(" "),t("td",[t("code",[_._v("512M")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_PAGES")]),_._v(" "),t("td",[t("code",[_._v("0")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_POST_SIZE")]),_._v(" "),t("td",[t("code",[_._v("100M")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_STORAGES")]),_._v(" "),t("td",[t("code",[_._v("0")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_TAGS_PER_FILE")]),_._v(" "),t("td",[t("code",[_._v("0")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_TAGS_PER_LISTING")]),_._v(" "),t("td",[t("code",[_._v("0")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_TAGS")]),_._v(" "),t("td",[t("code",[_._v("0")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_UPLOAD_SIZE")]),_._v(" "),t("td",[t("code",[_._v("100M")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_USER_ALBUMS_LIST")]),_._v(" "),t("td",[t("code",[_._v("500")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_USERS")]),_._v(" "),t("td",[t("code",[_._v("0")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MIN_STORAGES_ACTIVE")]),_._v(" "),t("td",[t("code",[_._v("0")])])])])]),_._v(" "),t("ul",[t("li",[_._v("For "),t("code",[_._v("CHEVERETO_MAX_USER_ALBUMS_LIST")]),_._v(" it affects the number of albums on user's dropdown album menus.")])]),_._v(" "),t("h2",{attrs:{id:"file-upload"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#file-upload"}},[_._v("#")]),_._v(" File upload")]),_._v(" "),t("p",[_._v("Environment variables for the file uploading limits. It applies only for our container provisioning.")]),_._v(" "),t("p",[_._v("For "),t("strong",[_._v("non-container")]),_._v(" based provisioning you need to change these settings at "),t("RouterLink",{attrs:{to:"/application/stack/php.html#configuration"}},[_._v("php.ini configuration")]),_._v(".")],1),_._v(" "),t("table",[t("thead",[t("tr",[t("th",[_._v("Variable")]),_._v(" "),t("th",[_._v("Example")])])]),_._v(" "),t("tbody",[t("tr",[t("td",[_._v("CHEVERETO_MAX_UPLOAD_SIZE")]),_._v(" "),t("td",[t("code",[_._v("64M")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_POST_SIZE")]),_._v(" "),t("td",[t("code",[_._v("64M")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_EXECUTION_TIME_SECONDS")]),_._v(" "),t("td",[t("code",[_._v("30")])])]),_._v(" "),t("tr",[t("td",[_._v("CHEVERETO_MAX_MEMORY_SIZE")]),_._v(" "),t("td",[t("code",[_._v("512M")])])])])]),_._v(" "),t("h2",{attrs:{id:"proxy"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#proxy"}},[_._v("#")]),_._v(" Proxy")]),_._v(" "),t("p",[_._v("Environment variables for tweaking server handling when the server is under a proxy.")]),_._v(" "),t("table",[t("thead",[t("tr",[t("th",[_._v("Variable")]),_._v(" "),t("th",[_._v("Example")])])]),_._v(" "),t("tbody",[t("tr",[t("td",[_._v("CHEVERETO_HEADER_CLIENT_IP")]),_._v(" "),t("td",[t("code",[_._v("X-Real-IP")])])])])])])}),[],!1,null,null,null);t.default=e.exports}}]);
\ No newline at end of file
diff --git a/assets/js/38.984281dd.js b/assets/js/38.984281dd.js
new file mode 100644
index 00000000..06dac1a5
--- /dev/null
+++ b/assets/js/38.984281dd.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{342:function(e,t,r){"use strict";r.r(t);var o=r(17),n=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"from-free"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#from-free"}},[e._v("#")]),e._v(" From free")]),e._v(" "),t("p",[e._v("You can upgrade from Chevereto free edition to any paid edition.")]),e._v(" "),t("h2",{attrs:{id:"chevereto-chevereto"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-chevereto"}},[e._v("#")]),e._v(" chevereto/chevereto")]),e._v(" "),t("p",[e._v("Users of "),t("a",{attrs:{href:"https://github.com/chevereto/chevereto",target:"_blank",rel:"noopener noreferrer"}},[e._v("chevereto/chevereto"),t("OutboundLink")],1),e._v(" can one-click upgrade from the dashboard panel.")]),e._v(" "),t("ul",[t("li",[e._v("Go to "),t("code",[e._v("/dashboard")])]),e._v(" "),t("li",[e._v("Click on "),t("strong",[e._v("License key")]),e._v(" button")]),e._v(" "),t("li",[e._v("Enter license key and click on "),t("strong",[e._v("Save changes")])]),e._v(" "),t("li",[e._v("Follow the on-screen upgrade instructions")])]),e._v(" "),t("p",[e._v("To manual upgrade follow the "),t("RouterLink",{attrs:{to:"/application/installing/updating.html"}},[e._v("Updating")]),e._v(" documentation using the paid edition files.")],1),e._v(" "),t("p",[t("strong",[e._v("Note:")]),e._v(" "),t("RouterLink",{attrs:{to:"/guides/docker/"}},[e._v("Docker")]),e._v(" users don't need any of these steps, simply follow the "),t("RouterLink",{attrs:{to:"/guides/docker/#upgrading"}},[e._v("Docker upgrading")]),e._v(" guide.")],1),e._v(" "),t("h2",{attrs:{id:"rodber-chevereto-free"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rodber-chevereto-free"}},[e._v("#")]),e._v(" rodber/chevereto-free")]),e._v(" "),t("p",[e._v("Users of "),t("a",{attrs:{href:"https://github.com/rodber/chevereto-free",target:"_blank",rel:"noopener noreferrer"}},[e._v("rodber/chevereto-free"),t("OutboundLink")],1),e._v(" need to update to Chevereto-Free "),t("code",[e._v("1.6.2")]),e._v(" and from there follow the "),t("RouterLink",{attrs:{to:"/application/installing/upgrading.html"}},[e._v("Upgrading")]),e._v(" documentation ignoring the remark about V3.20 requirement.")],1)])}),[],!1,null,null,null);t.default=n.exports}}]);
\ No newline at end of file
diff --git a/assets/js/39.4dcfde5c.js b/assets/js/39.4dcfde5c.js
new file mode 100644
index 00000000..fbc35f4a
--- /dev/null
+++ b/assets/js/39.4dcfde5c.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{341:function(e,t,a){"use strict";a.r(t);var r=a(17),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"installation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[e._v("#")]),e._v(" Installation")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Installation service available")]),e._v(" "),t("p",[e._v("We offer a "),t("a",{attrs:{href:"https://chevereto.com/support",target:"_blank",rel:"noopener noreferrer"}},[e._v("paid installation service"),t("OutboundLink")],1),e._v(" for Chevereto. We will install Chevereto for you, including all the requirements and configurations.")])]),e._v(" "),t("p",[e._v("Installation refers to the process where the "),t("strong",[e._v("software files")]),e._v(" gets provided in the target machine.")]),e._v(" "),t("h2",{attrs:{id:"stack"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#stack"}},[e._v("#")]),e._v(" Stack")]),e._v(" "),t("p",[e._v("Chevereto requires "),t("RouterLink",{attrs:{to:"/application/stack/php.html"}},[e._v("PHP")]),e._v(", a "),t("RouterLink",{attrs:{to:"/application/stack/web-server.html"}},[e._v("Web Server")]),e._v(", "),t("RouterLink",{attrs:{to:"/application/stack/mysql-server.html"}},[e._v("MySQL database")]),e._v(" and "),t("RouterLink",{attrs:{to:"/application/stack/cron.html"}},[e._v("CRON")]),e._v(".")],1),e._v(" "),t("h2",{attrs:{id:"official-guides"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#official-guides"}},[e._v("#")]),e._v(" Official guides")]),e._v(" "),t("p",[e._v("For fresh installations continue with one of the following guides.")]),e._v(" "),t("ul",[t("li",[e._v("Docker\n"),t("ul",[t("li",[t("RouterLink",{attrs:{to:"/guides/docker/"}},[e._v("Chevereto Docker")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/guides/docker/pure-docker.html"}},[e._v("Pure Docker")])],1)])]),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/guides/server/vps.html"}},[e._v("VPS")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/guides/cpanel/"}},[e._v("cPanel")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/guides/plesk/"}},[e._v("Plesk")])],1)]),e._v(" "),t("h2",{attrs:{id:"community-guides"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#community-guides"}},[e._v("#")]),e._v(" Community guides")]),e._v(" "),t("p",[e._v("The following guides have been contributed by users of the software.")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://mariushosting.com/how-to-install-chevereto-on-your-synology-nas/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto Synology NAS"),t("OutboundLink")],1),e._v(" (Portainer)")])]),e._v(" "),t("h2",{attrs:{id:"marketplace"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#marketplace"}},[e._v("#")]),e._v(" Marketplace")]),e._v(" "),t("p",[e._v("Chevereto is available at the following application marketplaces.")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://chevereto.com/go/digitalocean",target:"_blank",rel:"noopener noreferrer"}},[e._v("DigitalOcean Marketplace"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://chevereto.com/go/vultr",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vultr Marketplace"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"using-installer-software"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#using-installer-software"}},[e._v("#")]),e._v(" Using installer software")]),e._v(" "),t("p",[e._v("Chevereto is available at the following installers, look for the following software at your hosting control panel.")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://installatron.com/chevereto",target:"_blank",rel:"noopener noreferrer"}},[e._v("Installatron"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://www.softaculous.com/apps/galleries/Chevereto",target:"_blank",rel:"noopener noreferrer"}},[e._v("Softaculous"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://swiftwave.org/docs/dashboard/swiftwave_app_store/",target:"_blank",rel:"noopener noreferrer"}},[e._v("SwiftWave"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"using-release-package"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#using-release-package"}},[e._v("#")]),e._v(" Using release package")]),e._v(" "),t("p",[e._v("The release package is a "),t("code",[e._v("zip")]),e._v(" file containing the software files.")]),e._v(" "),t("ul",[t("li",[e._v("Paid edition package available at your "),t("a",{attrs:{href:"https://chevereto.com/panel/downloads",target:"_blank",rel:"noopener noreferrer"}},[e._v("client panel"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[e._v("Free edition package available at "),t("a",{attrs:{href:"https://github.com/chevereto/chevereto/releases",target:"_blank",rel:"noopener noreferrer"}},[e._v("chevereto/chevereto"),t("OutboundLink")],1),e._v(".")])]),e._v(" "),t("h3",{attrs:{id:"manual-cli"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#manual-cli"}},[e._v("#")]),e._v(" Manual (CLI)")]),e._v(" "),t("p",[e._v("Run the following "),t("a",{attrs:{href:"https://github.com/chevereto/vps#get",target:"_blank",rel:"noopener noreferrer"}},[e._v("command"),t("OutboundLink")],1),e._v(" to download and extract package:")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-s")]),e._v(" https://raw.githubusercontent.com/chevereto/vps/4.0/common/get.sh"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n")])])]),t("h3",{attrs:{id:"manual-gui"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#manual-gui"}},[e._v("#")]),e._v(" Manual (GUI)")]),e._v(" "),t("ul",[t("li",[e._v("Upload the latest release to a non-public path in your server")]),e._v(" "),t("li",[e._v("Unzip the package in the target website directory ("),t("code",[e._v("public_html")]),e._v(" folder)")]),e._v(" "),t("li",[e._v("Remove the "),t("code",[e._v(".zip")]),e._v(" file")]),e._v(" "),t("li",[e._v("Open your target website URL and follow the "),t("a",{attrs:{href:"#setup"}},[e._v("Setup")]),e._v(" instructions")])]),e._v(" "),t("h2",{attrs:{id:"setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setup"}},[e._v("#")]),e._v(" Setup")]),e._v(" "),t("p",[e._v("Once the software files are provided the software is ready for "),t("a",{attrs:{href:"#setup"}},[e._v("Setup")]),e._v(". This is required only once per instance.")]),e._v(" "),t("p",[e._v("Setup refers to the process when the Chevereto database tables and its admin user is created. You can carry this process in "),t("a",{attrs:{href:"#install-gui"}},[e._v("HTTP")]),e._v(" or "),t("a",{attrs:{href:"#install-cli"}},[e._v("CLI")]),e._v(" context.")]),e._v(" "),t("h3",{attrs:{id:"install-gui"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-gui"}},[e._v("#")]),e._v(" Install (GUI)")]),e._v(" "),t("ul",[t("li",[e._v("Go to "),t("code",[e._v("/install")])])]),e._v(" "),t("h3",{attrs:{id:"install-cli"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-cli"}},[e._v("#")]),e._v(" Install (CLI)")]),e._v(" "),t("ul",[t("li",[e._v("Refer to "),t("RouterLink",{attrs:{to:"/application/reference/cli.html#install"}},[e._v("CLI install")]),e._v(".")],1)])])}),[],!1,null,null,null);t.default=s.exports}}]);
\ No newline at end of file
diff --git a/assets/js/4.d9734694.js b/assets/js/4.d9734694.js
new file mode 100644
index 00000000..12b5490a
--- /dev/null
+++ b/assets/js/4.d9734694.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{282:function(t,e,n){},298:function(t,e,n){"use strict";n(282)},338:function(t,e,n){"use strict";n.r(e);var i={functional:!0,props:{type:{type:String,default:"tip"},text:String,vertical:{type:String,default:"top"}},render:(t,{props:e,slots:n})=>t("span",{class:["badge",e.type],style:{verticalAlign:e.vertical}},e.text||n().default)},p=(n(298),n(17)),l=Object(p.a)(i,void 0,void 0,!1,null,"15b7b770",null);e.default=l.exports}}]);
\ No newline at end of file
diff --git a/assets/js/40.428c19d9.js b/assets/js/40.428c19d9.js
new file mode 100644
index 00000000..54e8e32b
--- /dev/null
+++ b/assets/js/40.428c19d9.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{343:function(e,t,a){"use strict";a.r(t);var r=a(17),o=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"updating"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#updating"}},[e._v("#")]),e._v(" Updating")]),e._v(" "),t("p",[e._v("This process is for instances already running "),t("strong",[e._v("Chevereto V4")]),e._v(". The process consist in update software files and then proceed with database migrations.")]),e._v(" "),t("h2",{attrs:{id:"software-filesystem-update"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#software-filesystem-update"}},[e._v("#")]),e._v(" Software filesystem update")]),e._v(" "),t("p",[e._v("To update the software files depends on how you installed Chevereto. Follow the instructions for your installation method.")]),e._v(" "),t("h3",{attrs:{id:"release-package"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-package"}},[e._v("#")]),e._v(" Release package")]),e._v(" "),t("p",[e._v("This applies to any "),t("strong",[e._v("non-Docker")]),e._v(" installation.")]),e._v(" "),t("p",[t("strong",[e._v("Note:")]),e._v(" For paid edition and if you haven't entered your license key make to visit "),t("code",[e._v("/dashboard/?license")]),e._v(" first.")]),e._v(" "),t("ul",[t("li",[e._v("Go to "),t("code",[e._v("/dashboard")])]),e._v(" "),t("li",[e._v("Click on "),t("strong",[e._v("Check upgrades")]),e._v(" button")]),e._v(" "),t("li",[e._v("Follow the on-screen upgrade instructions")])]),e._v(" "),t("p",[e._v("For CLI driven update run the following command:")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("php app/upgrading.php\n")])])]),t("p",[e._v("If you need to force upgrade (re-download software files) you can do it by accessing to "),t("code",[e._v("/dashboard/?upgrade")]),e._v(".")]),e._v(" "),t("p",[e._v("For manual upgrade refer to "),t("RouterLink",{attrs:{to:"/application/installing/installation.html#using-release-package"}},[e._v("Installing")]),e._v(" for instructions on how to install the software files.")],1),e._v(" "),t("h3",{attrs:{id:"docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#docker"}},[e._v("#")]),e._v(" Docker")]),e._v(" "),t("p",[e._v("When using Docker it will required to re-build the Chevereto image ("),t("a",{attrs:{href:"https://github.com/chevereto/docker/blob/4.2/docs/BUILDING.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("make image"),t("OutboundLink")],1),e._v(" or "),t("a",{attrs:{href:"https://github.com/chevereto/docker/blob/4.2/docs/PURE-DOCKER.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("docker build"),t("OutboundLink")],1),e._v(") and then re-start the containers.")]),e._v(" "),t("p",[e._v("Refer to "),t("a",{attrs:{href:"https://github.com/chevereto/docker/blob/4.2/docs/UPDATING.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("UPDATING"),t("OutboundLink")],1),e._v(" for instructions.")]),e._v(" "),t("h2",{attrs:{id:"database-update"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#database-update"}},[e._v("#")]),e._v(" Database update")]),e._v(" "),t("p",[e._v("Once the software files gets updated it will required to update the Chevereto database schema. This process can be carried on HTTP or command-line context.")]),e._v(" "),t("h3",{attrs:{id:"http-database-update"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#http-database-update"}},[e._v("#")]),e._v(" HTTP database update")]),e._v(" "),t("p",[e._v("To update Chevereto database via web:")]),e._v(" "),t("ul",[t("li",[e._v("Login as Admin")]),e._v(" "),t("li",[e._v("Go to "),t("code",[e._v("/update")])])]),e._v(" "),t("h3",{attrs:{id:"cli-database-update"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cli-database-update"}},[e._v("#")]),e._v(" CLI database update")]),e._v(" "),t("p",[e._v("To update Chevereto database from the command line:")]),e._v(" "),t("ul",[t("li",[e._v("SSH and "),t("code",[e._v("cd")]),e._v(" to your Chevereto instance")]),e._v(" "),t("li",[e._v("Run "),t("RouterLink",{attrs:{to:"/application/reference/cli.html#update"}},[e._v("CLI update")]),e._v(" "),t("code",[e._v("app/bin/legacy -C update")])],1)])])}),[],!1,null,null,null);t.default=o.exports}}]);
\ No newline at end of file
diff --git a/assets/js/41.c7dc5ffc.js b/assets/js/41.c7dc5ffc.js
new file mode 100644
index 00000000..04b2b715
--- /dev/null
+++ b/assets/js/41.c7dc5ffc.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{345:function(t,s,a){"use strict";a.r(s);var e=a(17),n=Object(e.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"upgrading"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#upgrading"}},[t._v("#")]),t._v(" Upgrading")]),t._v(" "),s("p",[t._v("This process is for upgrading to Chevereto V4 from "),s("strong",[t._v("Chevereto V3.20")]),t._v(" (previous major release). Check "),s("RouterLink",{attrs:{to:"/application/installing/from-free.html"}},[t._v("Upgrading Free")]),t._v(" if you need to upgrade from a free edition.")],1),t._v(" "),s("p",[t._v("Review "),s("RouterLink",{attrs:{to:"/introduction/changelog/welcome-back.html#chevereto-v4-vs-v3"}},[t._v("Chevereto V4 vs V3")]),t._v(" comparison tables for a better understanding of changes in V4.")],1),t._v(" "),s("h2",{attrs:{id:"requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),s("ul",[s("li",[t._v("Existing installation running Chevereto V3.20")]),t._v(" "),s("li",[t._v("Backup for the existing previous installation (optional, recommended)")])]),t._v(" "),s("h2",{attrs:{id:"upgrade-to-v4"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#upgrade-to-v4"}},[t._v("#")]),t._v(" Upgrade to V4")]),t._v(" "),s("p",[t._v("Upgrade to Chevereto V4 is performed by overriding the previous software files with the new files provided by Chevereto V4.")]),t._v(" "),s("p",[t._v("Follow these step:")]),t._v(" "),s("ul",[s("li",[t._v("Remove "),s("code",[t._v("app/vendor")]),t._v(" from your Chevereto V3 installation")]),t._v(" "),s("li",[t._v("Override Chevereto V3 files with Chevereto V4 files")]),t._v(" "),s("li",[t._v("Switch to PHP 8")]),t._v(" "),s("li",[t._v("Create "),s("RouterLink",{attrs:{to:"/application/configuration/configuring.html#using-appenvphp"}},[t._v("app/env.php")]),t._v(" (see remark below)")],1),t._v(" "),s("li",[t._v("Proceed with "),s("RouterLink",{attrs:{to:"/application/installing/updating.html#database-update"}},[t._v("database update")])],1)]),t._v(" "),s("h3",{attrs:{id:"application-settings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#application-settings"}},[t._v("#")]),t._v(" Application settings")]),t._v(" "),s("p",[t._v("Chevereto V4 uses a new "),s("RouterLink",{attrs:{to:"/application/configuration/configuring.html"}},[t._v("configuration")]),t._v(" standard.")],1),t._v(" "),s("ul",[s("li",[t._v("Rename "),s("code",[t._v("app/settings.php")]),t._v(" to "),s("code",[t._v("app/env.php")])]),t._v(" "),s("li",[t._v("Update file accordingly the updated "),s("RouterLink",{attrs:{to:"/application/configuration/environment.html"}},[t._v("environment")])],1)]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token php language-php"}},[s("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'localhost'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'CHEVERETO_DB_NAME'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'chevereto'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'CHEVERETO_DB_USER'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'user'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'CHEVERETO_DB_PASS'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'pass'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),s("h3",{attrs:{id:"cron"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#cron"}},[t._v("#")]),t._v(" CRON")]),t._v(" "),s("p",[t._v("Chevereto V4 comes with a new console. You must update your "),s("RouterLink",{attrs:{to:"/application/stack/cron.html"}},[t._v("CRON")]),t._v(" command to point to the new location.")],1),t._v(" "),s("p",[t._v("From Chevereto V3 cron:")]),t._v(" "),s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[t._v("cli.php "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-C")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cron")]),t._v("\n")])])]),s("p",[t._v("To Chevereto V4 cron:")]),t._v(" "),s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[t._v("app/bin/legacy "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-C")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cron")]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=n.exports}}]);
\ No newline at end of file
diff --git a/assets/js/42.b2678117.js b/assets/js/42.b2678117.js
new file mode 100644
index 00000000..f5bbeb06
--- /dev/null
+++ b/assets/js/42.b2678117.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{347:function(a,e,t){"use strict";t.r(e);var s=t(17),r=Object(s.a)({},(function(){var a=this,e=a._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"cli"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cli"}},[a._v("#")]),a._v(" CLI")]),a._v(" "),e("p",[e("code",[a._v("app/bin/legacy")])]),a._v(" "),e("p",[a._v("Chevereto V4 includes a command line interface enabling to perform a variety of system tasks. This console command should be invoked in the following format:")]),a._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[a._v("app/bin/legacy "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("command"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("options"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n")])])]),e("ul",[e("li",[e("code",[a._v("app/bin/legacy")]),a._v(" path to the Chevereto console file")]),a._v(" "),e("li",[e("code",[a._v("")]),a._v(" task to run")]),a._v(" "),e("li",[e("code",[a._v("")]),a._v(" options for command")])]),a._v(" "),e("p",[a._v("Command invocation vary depending on the system context, here samples for Debian and Docker:")]),a._v(" "),e("code-group",[e("code-block",{attrs:{title:"Debian"}},[e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-u")]),a._v(" www-data app/bin/legacy "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("command"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("options"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n")])])])]),a._v(" "),e("code-block",{attrs:{title:"Docker"}},[e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--user")]),a._v(" www-data "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n container_name "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n app/bin/legacy "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("command"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("options"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n")])])])])],1),a._v(" "),e("h2",{attrs:{id:"install"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#install"}},[a._v("#")]),a._v(" Install")]),a._v(" "),e("p",[a._v("The "),e("code",[a._v("install")]),a._v(" command installs Chevereto. It requires to pass the admin user details.")]),a._v(" "),e("p",[a._v('To install Chevereto for user "rodolfo" with password "myPassword":')]),a._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[a._v("app/bin/legacy "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-u")]),a._v(" rodolfo "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" rodolfo@chevereto.loc "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-x")]),a._v(" myPassword\n")])])]),e("table",[e("thead",[e("tr",[e("th",[a._v("Option")]),a._v(" "),e("th",[a._v("Description")])])]),a._v(" "),e("tbody",[e("tr",[e("td",[a._v("u")]),a._v(" "),e("td",[a._v("Admin username")])]),a._v(" "),e("tr",[e("td",[a._v("e")]),a._v(" "),e("td",[a._v("Admin email")])]),a._v(" "),e("tr",[e("td",[a._v("x")]),a._v(" "),e("td",[a._v("Admin password")])])])]),a._v(" "),e("h2",{attrs:{id:"update"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#update"}},[a._v("#")]),a._v(" Update")]),a._v(" "),e("p",[a._v("The "),e("code",[a._v("update")]),a._v(" command updates the Chevereto database schema.")]),a._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[a._v("app/bin/legacy "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" update\n")])])]),e("h2",{attrs:{id:"version"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#version"}},[a._v("#")]),a._v(" Version")]),a._v(" "),e("p",[a._v("The "),e("code",[a._v("version")]),a._v(" command outputs the Chevereto filesystem version.")]),a._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[a._v("app/bin/legacy "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" version\n")])])]),e("h2",{attrs:{id:"cron"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cron"}},[a._v("#")]),a._v(" Cron")]),a._v(" "),e("p",[a._v("The "),e("code",[a._v("cron")]),a._v(" command runs the background jobs required by Chevereto.")]),a._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[a._v("app/bin/legacy "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("cron")]),a._v("\n")])])]),e("h2",{attrs:{id:"bulk-importer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#bulk-importer"}},[a._v("#")]),a._v(" Bulk importer")]),a._v(" "),e("p",[a._v("The "),e("code",[a._v("bulk-importer")]),a._v(" command process files for "),e("a",{attrs:{href:"https://v4-admin.chevereto.com/dashboard/bulk-importer.html",target:"_blank",rel:"noopener noreferrer"}},[a._v("Bulk importer"),e("OutboundLink")],1),a._v(".")]),a._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[a._v("app/bin/legacy "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" bulk-importer\n")])])]),e("h2",{attrs:{id:"encryption"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#encryption"}},[a._v("#")]),a._v(" Encryption")]),a._v(" "),e("p",[a._v("To use encryption it requires to configure the "),e("RouterLink",{attrs:{to:"/application/configuration/environment.html#encryption-key"}},[a._v("CHEVERETO_ENCRYPTION_KEY")]),a._v(" environment variable.")],1),a._v(" "),e("h3",{attrs:{id:"encrypt-secrets"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#encrypt-secrets"}},[a._v("#")]),a._v(" Encrypt secrets")]),a._v(" "),e("p",[a._v("The "),e("code",[a._v("encrypt-secrets")]),a._v(" command "),e("RouterLink",{attrs:{to:"/application/reference/encryption.html"}},[a._v("encrypts")]),a._v(" the application plain text secrets (not already encrypted) in the database.")],1),a._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[a._v("app/bin/legacy "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" encrypt-secrets\n")])])]),e("p",[a._v("If the application secrets are "),e("strong",[a._v("already encrypted")]),a._v(" (stored as cipher text) it will require to pass the key for decrypting the existing secrets. Use the "),e("code",[a._v("-k")]),a._v(" argument to indicate the key for the already stored cipher texts:")]),a._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[a._v("app/bin/legacy "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" encrypt-secrets "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-k")]),a._v(" key_for_stored_data\n")])])]),e("h3",{attrs:{id:"decrypt-secrets"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#decrypt-secrets"}},[a._v("#")]),a._v(" Decrypt secrets")]),a._v(" "),e("p",[a._v("The "),e("code",[a._v("decrypt-secrets")]),a._v(" command decrypts the application secrets stored as cipher text in the database.")]),a._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[a._v("app/bin/legacy "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" decrypt-secrets\n")])])]),e("p",[a._v("After running the above command set "),e("code",[a._v("CHEVERETO_ENCRYPTION_KEY")]),a._v(" to "),e("strong",[a._v("empty string")]),a._v(" to disable encryption.")]),a._v(" "),e("h2",{attrs:{id:"htaccess"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#htaccess"}},[a._v("#")]),a._v(" Htaccess")]),a._v(" "),e("h3",{attrs:{id:"htaccess-checksum"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#htaccess-checksum"}},[a._v("#")]),a._v(" Htaccess checksum")]),a._v(" "),e("p",[a._v("The "),e("code",[a._v("htaccess-checksum")]),a._v(" command generates safe "),e("code",[a._v(".htaccess")]),a._v(" for Chevereto folders.")]),a._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[a._v("app/bin/legacy "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" htaccess-checksum\n")])])]),e("h3",{attrs:{id:"htaccess-enforce"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#htaccess-enforce"}},[a._v("#")]),a._v(" Htaccess enforce")]),a._v(" "),e("p",[a._v("The "),e("code",[a._v("htaccess-enforce")]),a._v(" command checks for any alteration on the "),e("code",[a._v(".htaccess")]),a._v(" files and reverts them to the defaults included by Chevereto.")]),a._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[a._v("app/bin/legacy "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" htaccess-enforce\n")])])]),e("h2",{attrs:{id:"langs"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#langs"}},[a._v("#")]),a._v(" Langs")]),a._v(" "),e("p",[a._v("The "),e("code",[a._v("langs")]),a._v(" command generates the cache for language translations. The command outputs the list of languages processed.")]),a._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[a._v("app/bin/legacy "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" langs\n")])])]),e("h2",{attrs:{id:"password-reset"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#password-reset"}},[a._v("#")]),a._v(" Password reset")]),a._v(" "),e("p",[a._v("The "),e("code",[a._v("password-reset")]),a._v(" command generates and assign a new password for the target username. The command outputs the new password.")]),a._v(" "),e("p",[a._v('To reset the password for user "rodolfo":')]),a._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[a._v("app/bin/legacy "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" password-reset "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-u")]),a._v(" rodolfo\n")])])]),e("h2",{attrs:{id:"settings"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[a._v("#")]),a._v(" Settings")]),a._v(" "),e("h3",{attrs:{id:"setting-get"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#setting-get"}},[a._v("#")]),a._v(" Setting get")]),a._v(" "),e("p",[a._v("The "),e("code",[a._v("setting-get")]),a._v(" command retrieves the target database setting key value.")]),a._v(" "),e("p",[a._v('To get the value for "chevereto_version_installed":')]),a._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[a._v("app/bin/legacy "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" setting-get "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-k")]),a._v(" chevereto_version_installed\n")])])]),e("h3",{attrs:{id:"setting-update"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#setting-update"}},[a._v("#")]),a._v(" Setting update")]),a._v(" "),e("p",[a._v("The "),e("code",[a._v("setting-update")]),a._v(" command updates the target database setting key value. It outputs the value after update.")]),a._v(" "),e("p",[a._v('To update the value for "maintenance":')]),a._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[a._v("app/bin/legacy "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-C")]),a._v(" setting-update "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-k")]),a._v(" maintenance "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[a._v("true")]),a._v("\n")])])])],1)}),[],!1,null,null,null);e.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/43.33b7b337.js b/assets/js/43.33b7b337.js
new file mode 100644
index 00000000..b4d8ee57
--- /dev/null
+++ b/assets/js/43.33b7b337.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{346:function(e,t,r){"use strict";r.r(t);var a=r(17),n=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"encryption"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#encryption"}},[e._v("#")]),e._v(" Encryption")]),e._v(" "),t("p",[e._v("Chevereto uses "),t("a",{attrs:{href:"https://datatracker.ietf.org/doc/html/rfc7539",target:"_blank",rel:"noopener noreferrer"}},[e._v("ChaCha20"),t("OutboundLink")],1),e._v(" algorithm to cipher secrets and sensitive data. When enabled, Chevereto will store these values encrypted in the database.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Requires manual update")]),e._v(" "),t("p",[e._v("Encryption in Chevereto was added in "),t("code",[e._v("v4.0.0-beta.10")]),e._v(". If you installed Chevereto prior to this release you will require to "),t("a",{attrs:{href:"#enabling-encryption"}},[e._v("manually enable encryption")]),e._v(".")])]),e._v(" "),t("h2",{attrs:{id:"what-is-encrypted"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#what-is-encrypted"}},[e._v("#")]),e._v(" What is encrypted?")]),e._v(" "),t("h3",{attrs:{id:"settings-secrets"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#settings-secrets"}},[e._v("#")]),e._v(" Settings secrets")]),e._v(" "),t("p",[e._v("The following settings are encrypted in the database:")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Setting")]),e._v(" "),t("th",[e._v("Key")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[t("RouterLink",{attrs:{to:"/developer/api/api-v1.html#key"}},[e._v("API V1 key (public)")])],1),e._v(" "),t("td",[e._v("api_v1_key")])]),e._v(" "),t("tr",[t("td",[e._v("Album password")]),e._v(" "),t("td",[e._v("album_password")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/email.html#smtp-server-and-port",target:"_blank",rel:"noopener noreferrer"}},[e._v("SMTP server"),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("email_smtp_server")])]),e._v(" "),t("tr",[t("td",[e._v("SMTP port")]),e._v(" "),t("td",[e._v("email_smtp_server_port")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/email.html#smtp-username",target:"_blank",rel:"noopener noreferrer"}},[e._v("SMTP username"),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("email_smtp_server_username")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/email.html#smtp-password",target:"_blank",rel:"noopener noreferrer"}},[e._v("SMTP password"),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("email_smtp_server_password")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/external-services.html#recaptcha-secret-key",target:"_blank",rel:"noopener noreferrer"}},[e._v("reCAPTCHA secret key"),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("recaptcha_private_key")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/external-services.html#disqus-secret-key",target:"_blank",rel:"noopener noreferrer"}},[e._v("Disqus secret key"),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("disqus_secret_key")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/external-services.html#akismet-api-key",target:"_blank",rel:"noopener noreferrer"}},[e._v("Akismet API key"),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("akismet_api_key")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/external-services.html#moderatecontent-api-key",target:"_blank",rel:"noopener noreferrer"}},[e._v("ModerateContent API Key"),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("moderatecontent_key")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/external-services.html#project-arachnid-api-key",target:"_blank",rel:"noopener noreferrer"}},[e._v("Project Arachnid API Username"),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("arachnid_api_username")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/external-services.html#project-arachnid-api-key",target:"_blank",rel:"noopener noreferrer"}},[e._v("Project Arachnid API Password"),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("arachnid_api_password")])])])]),e._v(" "),t("h3",{attrs:{id:"storage-credentials"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#storage-credentials"}},[e._v("#")]),e._v(" Storage credentials")]),e._v(" "),t("p",[e._v("The following storage columns for "),t("code",[e._v("chv_storages")]),e._v(" are encrypted in the database:")]),e._v(" "),t("ul",[t("li",[e._v("server")]),e._v(" "),t("li",[e._v("service")]),e._v(" "),t("li",[e._v("account_id")]),e._v(" "),t("li",[e._v("account_name")]),e._v(" "),t("li",[e._v("key")]),e._v(" "),t("li",[e._v("secret")]),e._v(" "),t("li",[e._v("bucket")])]),e._v(" "),t("h3",{attrs:{id:"two-factor-secrets"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#two-factor-secrets"}},[e._v("#")]),e._v(" Two-factor secrets")]),e._v(" "),t("p",[e._v("Two-factor secret codes used to generate TOTP are encrypted in the database. Table "),t("code",[e._v("chv_two_factors")]),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"key"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#key"}},[e._v("#")]),e._v(" Key")]),e._v(" "),t("p",[e._v("The encryption key is base64 encoded random string of size 32. To generate a key use "),t("code",[e._v("openssl")]),e._v(":")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("openssl rand "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-base64")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("32")]),e._v("\n")])])]),t("h3",{attrs:{id:"key-security"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#key-security"}},[e._v("#")]),e._v(" Key security")]),e._v(" "),t("p",[e._v("Handle the encryption key with the same discretion of a password.")]),e._v(" "),t("ul",[t("li",[e._v("The encryption key should remain "),t("strong",[e._v("private")]),e._v(".")]),e._v(" "),t("li",[e._v("Don't re-use the same key in different installations.")]),e._v(" "),t("li",[e._v("Backup the key in a safe location.")])]),e._v(" "),t("h2",{attrs:{id:"enabling-encryption"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enabling-encryption"}},[e._v("#")]),e._v(" Enabling encryption")]),e._v(" "),t("p",[e._v("To enable encryption provide the "),t("RouterLink",{attrs:{to:"/application/configuration/environment.html#encryption-key"}},[e._v("CHEVERETO_ENCRYPTION_KEY")]),e._v(" environment variable.")],1),e._v(" "),t("p",[e._v("This key is automatic provided on "),t("RouterLink",{attrs:{to:"/application/installing/installation.html#setup"}},[e._v("setup")]),e._v(", stored in the "),t("RouterLink",{attrs:{to:"/application/configuration/configuring.html#using-appenvphp"}},[e._v("app/env.php")]),e._v(" file.")],1),e._v(" "),t("h3",{attrs:{id:"from-previous-versions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#from-previous-versions"}},[e._v("#")]),e._v(" From previous versions")]),e._v(" "),t("p",[e._v("Chevereto installations previous the introduction of encryption will require to manually cipher the existing data. This is a one time process that encrypts the plain text data stored in the database.")]),e._v(" "),t("p",[e._v("To manually enable encryption:")]),e._v(" "),t("ul",[t("li",[e._v("Enable "),t("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/system.html#maintenance",target:"_blank",rel:"noopener noreferrer"}},[e._v("maintenance"),t("OutboundLink")],1),e._v(" mode.")]),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/application/configuration/configuring.html"}},[e._v("Configure")]),e._v(" the "),t("code",[e._v("CHEVERETO_ENCRYPTION_KEY")]),e._v(" variable.")],1),e._v(" "),t("li",[e._v("Run "),t("RouterLink",{attrs:{to:"/application/reference/cli.html#encrypt-secrets"}},[e._v("encrypt-secrets")]),e._v(" command.")],1),e._v(" "),t("li",[e._v("Disable maintenance mode.")])]),e._v(" "),t("h2",{attrs:{id:"disabling-encryption"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#disabling-encryption"}},[e._v("#")]),e._v(" Disabling encryption")]),e._v(" "),t("p",[e._v("When disabling encryption all the cipher texts stored in the database will be reverted to its plain text value.")]),e._v(" "),t("p",[e._v("To disable encryption:")]),e._v(" "),t("ul",[t("li",[e._v("Enable "),t("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/system.html#maintenance",target:"_blank",rel:"noopener noreferrer"}},[e._v("maintenance"),t("OutboundLink")],1),e._v(" mode.")]),e._v(" "),t("li",[e._v("Run "),t("RouterLink",{attrs:{to:"/application/reference/cli.html#decrypt-secrets"}},[e._v("decrypt-secrets")]),e._v(" command.")],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/application/configuration/configuring.html"}},[e._v("Configure")]),e._v(" the "),t("code",[e._v("CHEVERETO_ENCRYPTION_KEY")]),e._v(" variable to empty string.")],1),e._v(" "),t("li",[e._v("Disable maintenance mode.")])])])}),[],!1,null,null,null);t.default=n.exports}}]);
\ No newline at end of file
diff --git a/assets/js/44.ec8baa63.js b/assets/js/44.ec8baa63.js
new file mode 100644
index 00000000..3d72afea
--- /dev/null
+++ b/assets/js/44.ec8baa63.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{348:function(e,t,r){"use strict";r.r(t);var o=r(17),s=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"errors"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#errors"}},[e._v("#")]),e._v(" Errors")]),e._v(" "),t("p",[e._v("Chevereto application errors can happen by several causes, including server issues. In a multi-layered system like this is crucial to understand when an error is caused by Chevereto and not "),t("em",[e._v("something else")]),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"chevereto-related"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-related"}},[e._v("#")]),e._v(" Chevereto related?")]),e._v(" "),t("p",[e._v("Chevereto "),t("strong",[e._v("won't cause")]),e._v(" any of the following issues:")]),e._v(" "),t("ul",[t("li",[e._v("Unable to connect (network issues)")]),e._v(" "),t("li",[e._v("Database server gone")]),e._v(" "),t("li",[e._v("CORS (missing icons, fonts)")]),e._v(" "),t("li",[e._v("Cookies/Sessions not working (login issues)")]),e._v(" "),t("li",[e._v("Restricted functions ("),t("code",[e._v("set_time_limit")]),e._v(")")]),e._v(" "),t("li",[e._v("Server restrictions ("),t("code",[e._v("mod_security")]),e._v(")")]),e._v(" "),t("li",[e._v("Wrong handling the user real connecting IP")])]),e._v(" "),t("p",[e._v("To determine if an issue is Chevereto related may be complicated for most users. We recommend purchasing "),t("a",{attrs:{href:"https://chevereto.com/panel/support",target:"_blank",rel:"noopener noreferrer"}},[e._v("Extra Support"),t("OutboundLink")],1),e._v(" if the issue needs urgent attention in your organization.")]),e._v(" "),t("h2",{attrs:{id:"incident-id"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#incident-id"}},[e._v("#")]),e._v(" Incident id")]),e._v(" "),t("p",[e._v("Chevereto logs all error events under an unique random incident id. This enables to to lookup the error in the log device.")]),e._v(" "),t("p",[e._v("The id is randomly generated and is unique per error event.")]),e._v(" "),t("h2",{attrs:{id:"something-went-wrong"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#something-went-wrong"}},[e._v("#")]),e._v(" Something went wrong")]),e._v(" "),t("p",[e._v("This error spawns on "),t("strong",[e._v("production")]),e._v(" context, the actual cause of this error is "),t("strong",[e._v("hidden from visitors by design")]),e._v(" to don't expose any sensitive debug info to end-users.")]),e._v(" "),t("blockquote",[t("p",[e._v("Something went wrong\nPlease try again later. If the problem persist don't hesitate to contact the system administrator.")])]),e._v(" "),t("p",[t("strong",[e._v("Note:")]),e._v(" "),t("em",[e._v("You are the system administrator")]),e._v(".")]),e._v(" "),t("p",[e._v("This "),t("a",{attrs:{href:"https://chevere.github.io/throwable-handler/demo/output/html-silent.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("silent message"),t("OutboundLink")],1),e._v(" indicates an error caught by Chevereto, but without disclosing the actual cause of error.")]),e._v(" "),t("ul",[t("li",[e._v("Go to "),t("strong",[e._v("Dashboard > Settings > System")]),e._v(" and enable "),t("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/system.html#debug-errors",target:"_blank",rel:"noopener noreferrer"}},[e._v("Debug errors"),t("OutboundLink")],1),e._v(" to print the error message to administrators.")]),e._v(" "),t("li",[e._v("Learn more at "),t("RouterLink",{attrs:{to:"/developer/how-to/debug.html"}},[e._v("Debug")]),e._v(" to retrieve these errors from the "),t("RouterLink",{attrs:{to:"/application/configuration/environment.html#error-logging-variables"}},[e._v("configured log device")]),e._v(".")],1)]),e._v(" "),t("h2",{attrs:{id:"exception-thrown"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#exception-thrown"}},[e._v("#")]),e._v(" Exception thrown")]),e._v(" "),t("p",[e._v("This error spawns in development context.")]),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"https://chevere.github.io/throwable-handler/demo/output/html.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("exception message"),t("OutboundLink")],1),e._v(" indicates an error caught by Chevereto fully disclosing the actual cause of error.")]),e._v(" "),t("p",[e._v("Although the message doesn't leak function arguments neither variables, you should handle these messages with the same discretion as a password.")]),e._v(" "),t("h3",{attrs:{id:"dumped-update-query"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#dumped-update-query"}},[e._v("#")]),e._v(" Dumped update query")]),e._v(" "),t("p",[e._v("The update query gets dumped either because "),t("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/system.html#dump-update-query",target:"_blank",rel:"noopener noreferrer"}},[e._v("dump update query"),t("OutboundLink")],1),e._v(" setting is enabled or because the database has more than 1,000,000 records plus carrying the update process in HTTP context.")]),e._v(" "),t("p",[e._v("If at "),t("code",[e._v("/update")]),e._v(" you see a message which reads "),t("code",[e._v("# Dumped update query (...)")]),e._v(" it means that you "),t("strong",[e._v("must")]),e._v(" run the "),t("RouterLink",{attrs:{to:"/application/reference/cli.html#update"}},[e._v("CLI update command")]),e._v(". You can also run the printed statements in the database client software of your choice.")],1),e._v(" "),t("h3",{attrs:{id:"http-500-internal-server-error"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#http-500-internal-server-error"}},[e._v("#")]),e._v(" HTTP 500 - Internal Server Error")]),e._v(" "),t("p",[e._v("A generic error response emitted by the "),t("RouterLink",{attrs:{to:"/application/stack/web-server.html"}},[e._v("web server")]),e._v(", indicates the existence of an error but it doesn't specify any concrete explication for it.")],1),e._v(" "),t("p",[e._v("As these may spawn in any layer, check the system "),t("RouterLink",{attrs:{to:"/developer/how-to/debug.html#finding-the-logs"}},[e._v("error log")]),e._v(" device to determine if it is triggered in the application layer. If is not there then check for the error log for your web server.")],1),e._v(" "),t("p",[e._v("Refer to your web server provisioning documentation for retrieving its logs.")])])}),[],!1,null,null,null);t.default=s.exports}}]);
\ No newline at end of file
diff --git a/assets/js/45.46812190.js b/assets/js/45.46812190.js
new file mode 100644
index 00000000..d50b1d50
--- /dev/null
+++ b/assets/js/45.46812190.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{349:function(e,t,a){"use strict";a.r(t);var s=a(17),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"security"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#security"}},[e._v("#")]),e._v(" Security")]),e._v(" "),t("h2",{attrs:{id:"security-checklist"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#security-checklist"}},[e._v("#")]),e._v(" Security Checklist")]),e._v(" "),t("p",[e._v("Must "),t("strong",[e._v("constantly double-checking")]),e._v(" the following:")]),e._v(" "),t("ul",[t("li",[t("RouterLink",{attrs:{to:"/application/stack/php.html#filesystem"}},[e._v("PHP Filesystem")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/application/stack/web-server.html#real-connecting-ip"}},[e._v("Real connecting IP")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/application/stack/web-server.html#restrict-php"}},[e._v("Restrict access to PHP files")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/application/stack/cron.html"}},[e._v("CRON setup")])],1),e._v(" "),t("li",[t("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/email.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Email setup"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"encryption"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#encryption"}},[e._v("#")]),e._v(" Encryption")]),e._v(" "),t("p",[e._v("Sensitive data such as service credentials is stored "),t("RouterLink",{attrs:{to:"/application/reference/encryption.html"}},[e._v("encrypted")]),e._v(" in the database.")],1),e._v(" "),t("h2",{attrs:{id:"two-factor-authentication"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#two-factor-authentication"}},[e._v("#")]),e._v(" Two-factor authentication")]),e._v(" "),t("p",[e._v("Users and specially administrators should always configure a two-factor device for an additional layer of security.")]),e._v(" "),t("h2",{attrs:{id:"encoded-ids"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#encoded-ids"}},[e._v("#")]),e._v(" Encoded IDs")]),e._v(" "),t("p",[e._v("Public IDs are "),t("strong",[e._v("always encoded")]),e._v(" to avoid content enumeration attacks.")]),e._v(" "),t("p",[e._v("While the data is stored in database rows indexed with integer ids, Chevereto handles these on public as encoded identifiers. Similar to how YouTube encode their video IDs. This is made to avoid enumeration of content based on incremental identifiers (retrieve N content by doing "),t("code",[e._v("+1")]),e._v(" on the identifier).")]),e._v(" "),t("h3",{attrs:{id:"encoding-and-decoding-ids"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#encoding-and-decoding-ids"}},[e._v("#")]),e._v(" Encoding and decoding IDs")]),e._v(" "),t("p",[e._v("Public IDs "),t("strong",[e._v("are unique")]),e._v(" and vary from each different installation.")]),e._v(" "),t("p",[e._v("On installation Chevereto creates a random generated "),t("code",[e._v("crypt_salt")]),e._v(" which is used by the system to encode/decode these identifiers. This allows to convert the numeric ids stored in the database to alphanumeric ids unique to your installation.")]),e._v(" "),t("h3",{attrs:{id:"making-encoded-ids-larger"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#making-encoded-ids-larger"}},[e._v("#")]),e._v(" Making encoded IDs larger")]),e._v(" "),t("p",[e._v("The length of encoded IDs can be customized.")]),e._v(" "),t("p",[e._v("Larger encoded IDs will be always better for preserving the privacy of the uploaded content. Two alternatives to achieve larger encoded IDs:")]),e._v(" "),t("h4",{attrs:{id:"altering-id-padding-setting"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#altering-id-padding-setting"}},[e._v("#")]),e._v(" Altering "),t("code",[e._v("id_padding")]),e._v(" setting")]),e._v(" "),t("p",[e._v("💡 This method will affect previous generated links. Use it only if is safe to edit the IDs.")]),e._v(" "),t("p",[e._v("Go to the database, find the "),t("code",[e._v("chv_settings")]),e._v(" table and edit the "),t("code",[e._v("setting_name")]),e._v(" identified as "),t("code",[e._v("id_padding")]),e._v(". (zero by default).")]),e._v(" "),t("p",[e._v("Entering an integer value like "),t("code",[e._v("5000")]),e._v(" will instruct the system to generate IDs using this base padding.")]),e._v(" "),t("h4",{attrs:{id:"altering-chv-images-table"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#altering-chv-images-table"}},[e._v("#")]),e._v(" Altering "),t("code",[e._v("chv_images")]),e._v(" table")]),e._v(" "),t("p",[e._v("This method won't affect any previous generated links.")]),e._v(" "),t("p",[e._v("Go to the database, find the "),t("code",[e._v("chv_images")]),e._v(" table and change the "),t("code",[e._v("AUTOINCREMENT")]),e._v(" to the ID padding you want to use.")]),e._v(" "),t("h2",{attrs:{id:"cross-site-request-forgery"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cross-site-request-forgery"}},[e._v("#")]),e._v(" Cross-site request forgery")]),e._v(" "),t("p",[e._v("Cross-site request forgery ("),t("a",{attrs:{href:"https://en.wikipedia.org/wiki/Cross-site_request_forgery",target:"_blank",rel:"noopener noreferrer"}},[e._v("CSRF"),t("OutboundLink")],1),e._v(") is a type of exploit that is used to fool website's origin requests by transmitting instructions from a remote website without the user's consent, for example trigger a delete content request without the user consent or willing.")]),e._v(" "),t("p",[e._v("The CSRF protection is based in the usage of a request token, which is set by session when the website loads and is asked when sub-sequential request are made.")]),e._v(" "),t("h2",{attrs:{id:"hashing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#hashing"}},[e._v("#")]),e._v(" Hashing")]),e._v(" "),t("p",[e._v("Chevereto uses "),t("a",{attrs:{href:"https://en.wikipedia.org/wiki/Bcrypt",target:"_blank",rel:"noopener noreferrer"}},[e._v("BCrypt"),t("OutboundLink")],1),e._v(" cryptography to store passwords and cookie hashes.")]),e._v(" "),t("h2",{attrs:{id:"recaptcha"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#recaptcha"}},[e._v("#")]),e._v(" reCAPTCHA")]),e._v(" "),t("p",[e._v("Chevereto includes support for "),t("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/external-services.html#recaptcha",target:"_blank",rel:"noopener noreferrer"}},[e._v("reCAPTCHA"),t("OutboundLink")],1),e._v(" which helps to prevent bots from signing up and try to brute-force a user password.")]),e._v(" "),t("h2",{attrs:{id:"daily-invalid-requests"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#daily-invalid-requests"}},[e._v("#")]),e._v(" Daily Invalid Requests")]),e._v(" "),t("p",[e._v("Too many invalid request forbid access to the system.")]),e._v(" "),t("p",[e._v("An invalid request is when a user enters a bad password or the CSRF token doesn't match. Each time an invalid request is triggered the system stores the IP and the given action that triggers that invalid request.")]),e._v(" "),t("p",[e._v("There is a hard-coded setting in the system that controls the limit of allowed invalid requests per day and when a user reaches this limit the system won't allow requests from that in IP in a period of 24 hours.")]),e._v(" "),t("h2",{attrs:{id:"flood-protection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#flood-protection"}},[e._v("#")]),e._v(" Flood Protection")]),e._v(" "),t("p",[e._v("Control how much content/time can be added by users.")]),e._v(" "),t("p",[e._v("Avoid resource hungry users by configuring "),t("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/flood-protection.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flood Protection"),t("OutboundLink")],1),e._v(". This enables to control how much they can upload based on configurable time settings.")])])}),[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/46.f6de3a9b.js b/assets/js/46.f6de3a9b.js
new file mode 100644
index 00000000..d7d9c2b0
--- /dev/null
+++ b/assets/js/46.f6de3a9b.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{350:function(e,t,r){"use strict";r.r(t);var a=r(17),s=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"cron"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cron"}},[e._v("#")]),e._v(" CRON")]),e._v(" "),t("p",[e._v("Chevereto requires to setup "),t("a",{attrs:{href:"https://en.wikipedia.org/wiki/Cron",target:"_blank",rel:"noopener noreferrer"}},[e._v("cron"),t("OutboundLink")],1),e._v(" to run background jobs.")]),e._v(" "),t("p",[e._v("This cron setup reference applies "),t("em",[e._v("mostly")]),e._v(" for "),t("strong",[e._v("Debian-based")]),e._v(" systems. We "),t("strong",[e._v("recommend")]),e._v(" checking your server documentation on how to setup and run cron.")]),e._v(" "),t("p",[e._v("Consider to contribute to this documentation with alternative cron setup alternatives.")]),e._v(" "),t("h2",{attrs:{id:"what-it-does"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#what-it-does"}},[e._v("#")]),e._v(" What it does?")]),e._v(" "),t("p",[e._v("A cron is system in which a command is executed in a regular basis, this way Chevereto can perform operations in the background without user intervention.")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Job")]),e._v(" "),t("th",[e._v("Purpose")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("deleteExpiredImages")]),e._v(" "),t("td",[e._v("Deletes files set to expire at a certain date")])]),e._v(" "),t("tr",[t("td",[e._v("cleanUnconfirmedUsers")]),e._v(" "),t("td",[e._v("Clears records for users which never confirmed their account")])]),e._v(" "),t("tr",[t("td",[e._v("removeDeleteLog")]),e._v(" "),t("td",[e._v("Removes the old delete log entries")])]),e._v(" "),t("tr",[t("td",[e._v("storageDelete")]),e._v(" "),t("td",[e._v("Delete files queued to removal")])]),e._v(" "),t("tr",[t("td",[e._v("checkForUpdates")]),e._v(" "),t("td",[e._v("Check for available Chevereto updates")])]),e._v(" "),t("tr",[t("td",[e._v("checkForNews")]),e._v(" "),t("td",[e._v("Check for news about Chevereto")])]),e._v(" "),t("tr",[t("td",[e._v("checkHtaccess")]),e._v(" "),t("td",[e._v("Check the integrity of the "),t("code",[e._v(".htaccess")]),e._v(" files")])])])]),e._v(" "),t("h2",{attrs:{id:"troubleshoot"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#troubleshoot"}},[e._v("#")]),e._v(" Troubleshoot")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("Refer to your system documentation and/or administrator for the best strategy when running Chevereto's cron requirements.")])]),e._v(" "),t("p",[e._v("Having issues? Check the following common pitfalls:")]),e._v(" "),t("ul",[t("li",[e._v("Invalid format for cron schedule")]),e._v(" "),t("li",[e._v("The PHP binary "),t("strong",[e._v("may not")]),e._v(" be available in cron context, use the full PHP path binary")]),e._v(" "),t("li",[e._v("The location of the "),t("code",[e._v("app/bin/legacy")]),e._v(" console may vary, use what reflects the file in your system")]),e._v(" "),t("li",[e._v("Wrong user running the command (requires a "),t("strong",[e._v("normal user")]),e._v(" with access to the project directory)")]),e._v(" "),t("li",[e._v("User "),t("code",[e._v("www-data")]),e._v(" applies only for "),t("strong",[e._v("Debian-based")]),e._v(" system. Refer to your sysadmin for the appropriate user when using other OS")])]),e._v(" "),t("h2",{attrs:{id:"command"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#command"}},[e._v("#")]),e._v(" Command")]),e._v(" "),t("p",[e._v("The command should be run by the web-server user which is "),t("code",[e._v("www-data")]),e._v(" (may vary). To run the command in Chevereto it requires to call PHP binary at the Chevereto CLI.")]),e._v(" "),t("p",[e._v("Use "),t("code",[e._v("which php")]),e._v(" to locate the PHP binary as its location.")]),e._v(" "),t("p",[e._v("Refer to "),t("RouterLink",{attrs:{to:"/application/reference/cli.html#cron"}},[e._v("CLI Cron")]),e._v(".")],1),e._v(" "),t("h3",{attrs:{id:"docker-command"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#docker-command"}},[e._v("#")]),e._v(" Docker command")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("docker")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("exec")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-it")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--user")]),e._v(" www-data "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n chevereto-container app/bin/legacy "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-C")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cron")]),e._v("\n")])])]),t("h2",{attrs:{id:"cron-d-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cron-d-file"}},[e._v("#")]),e._v(" Cron.d file")]),e._v(" "),t("p",[e._v("Recommended setup is to create a "),t("a",{attrs:{href:"https://manpages.debian.org/stretch/cron/cron.8",target:"_blank",rel:"noopener noreferrer"}},[e._v("cron.d file"),t("OutboundLink")],1),e._v(". This is easy as:")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("/etc/cron.d/chevereto "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<<")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("EOM\n* * * * * www-data php /var/www/html/app/bin/legacy -C cron\nEOM")]),e._v("\n")])])]),t("p",[e._v("In the instruction above "),t("a",{attrs:{href:"https://crontab.guru/#*_*_*_*_*",target:"_blank",rel:"noopener noreferrer"}},[e._v("* * * * *"),t("OutboundLink")],1),e._v(" is the cron schedule to run every minute.")])])}),[],!1,null,null,null);t.default=s.exports}}]);
\ No newline at end of file
diff --git a/assets/js/47.072cb433.js b/assets/js/47.072cb433.js
new file mode 100644
index 00000000..fd1cdc73
--- /dev/null
+++ b/assets/js/47.072cb433.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[47],{351:function(e,t,a){"use strict";a.r(t);var s=a(17),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"mysql-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mysql-server"}},[e._v("#")]),e._v(" MySQL Server")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Version")]),e._v(" "),t("th",[e._v("MySQL")]),e._v(" "),t("th",[e._v("MariaDB")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("4.2")]),e._v(" "),t("td",[e._v("8.0.1")]),e._v(" "),t("td",[e._v("10.2.2")])]),e._v(" "),t("tr",[t("td",[e._v("4.1")]),e._v(" "),t("td",[e._v("5.7; 8")]),e._v(" "),t("td",[e._v("10")])]),e._v(" "),t("tr",[t("td",[e._v("4.0")]),e._v(" "),t("td",[e._v("5.7; 8")]),e._v(" "),t("td",[e._v("10")])])])]),e._v(" "),t("p",[e._v("Chevereto support both MySQL/MariaDB database servers but we refer indistinctly as "),t("strong",[e._v("MySQL")]),e._v(".")]),e._v(" "),t("p",[e._v("Chevereto V4 rely in a "),t("a",{attrs:{href:"https://en.wikipedia.org/wiki/Relational_database",target:"_blank",rel:"noopener noreferrer"}},[e._v("RDBMS"),t("OutboundLink")],1),e._v(" provided by a MySQL server.")]),e._v(" "),t("h2",{attrs:{id:"resources"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#resources"}},[e._v("#")]),e._v(" Resources")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://www.mysql.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("MySQL Website"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://mariadb.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("MariaDB Website"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"what-it-does"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#what-it-does"}},[e._v("#")]),e._v(" What it does?")]),e._v(" "),t("p",[e._v('The MySQL server is used to interact with the database storing relational data, for which Chevereto links users to media, content to reactions, folders, etc. That relational data is what is used to define what your application "is".')]),e._v(" "),t("h2",{attrs:{id:"troubleshoot"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#troubleshoot"}},[e._v("#")]),e._v(" Troubleshoot")]),e._v(" "),t("p",[e._v("Having issues? Check the following common pitfalls:")]),e._v(" "),t("ul",[t("li",[e._v("Wrong credentials (user/password)")]),e._v(" "),t("li",[e._v("Invalid or missing privileges (read/write in the database)")]),e._v(" "),t("li",[e._v("Outdated MySQL version")]),e._v(" "),t("li",[e._v("Bad configured MySQL socket")]),e._v(" "),t("li",[e._v("Usage of MyISAM storage engine ("),t("code",[e._v("ALTER")]),e._v(" table to InnoDB storage)")])]),e._v(" "),t("h2",{attrs:{id:"database-permissions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#database-permissions"}},[e._v("#")]),e._v(" Database Permissions")]),e._v(" "),t("p",[e._v("Database user must have "),t("code",[e._v("ALL PRIVILEGES")]),e._v(" over the target database.")]),e._v(" "),t("h2",{attrs:{id:"database-storage-engine"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#database-storage-engine"}},[e._v("#")]),e._v(" Database Storage engine")]),e._v(" "),t("p",[e._v("InnoDB table storage engine.")]),e._v(" "),t("p",[e._v("Old versions using MyISAM table storage engine will require to convert the old tables to InnoDB. Read "),t("a",{attrs:{href:"https://dev.mysql.com/doc/refman/8.0/en/converting-tables-to-innodb.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Convert MyISAM tables to InnoDB"),t("OutboundLink")],1)]),e._v(" "),t("h2",{attrs:{id:"creating-the-database"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-the-database"}},[e._v("#")]),e._v(" Creating the database")]),e._v(" "),t("h3",{attrs:{id:"using-the-mysql-console"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#using-the-mysql-console"}},[e._v("#")]),e._v(" Using the MySQL console")]),e._v(" "),t("p",[e._v("Run the following command to create the "),t("code",[e._v("chevereto")]),e._v(" database and its user binding.")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" mysql "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-uroot")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-ppassword")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-e")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("\"CREATE DATABASE chevereto; \\\n CREATE USER 'chevereto' IDENTIFIED BY 'user_database_password'; \\\n GRANT ALL ON chevereto.* TO 'chevereto' IDENTIFIED BY 'user_database_password';\"")]),e._v("\n")])])]),t("h3",{attrs:{id:"using-web-panels"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#using-web-panels"}},[e._v("#")]),e._v(" Using web panels")]),e._v(" "),t("p",[e._v("Links for the most popular panels:")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://docs.cpanel.net/cpanel/databases/mysql-databases/",target:"_blank",rel:"noopener noreferrer"}},[e._v("cPanel Database"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://docs.plesk.com/en-US/obsidian/customer-guide/website-databases/creating-databases.65157/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Plesk Database"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://www.cloudpanel.io/docs/cloudpanel-ce/frontend-area/databases",target:"_blank",rel:"noopener noreferrer"}},[e._v("CloudPanel Database"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"updating"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#updating"}},[e._v("#")]),e._v(" Updating")]),e._v(" "),t("p",[e._v("When manual updating the database keep the following considerations:")]),e._v(" "),t("ul",[t("li",[e._v("Disconnect all peers")]),e._v(" "),t("li",[e._v("Turn off the MySQL server, work in its console (phpMyAdmin, Adminer, CLI)")]),e._v(" "),t("li",[e._v("Run the MySQL statements one-by-one (a semi-colon "),t("code",[e._v(";")]),e._v(" denotes when a MySQL statement ends)")])])])}),[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/48.66c53a0a.js b/assets/js/48.66c53a0a.js
new file mode 100644
index 00000000..4479ee42
--- /dev/null
+++ b/assets/js/48.66c53a0a.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[48],{354:function(t,e,a){"use strict";a.r(e);var s=a(17),r=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"php"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#php"}},[t._v("#")]),t._v(" PHP")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Version")]),t._v(" "),e("th",[t._v("PHP")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("4.2")]),t._v(" "),e("td",[t._v("8.1.28")])]),t._v(" "),e("tr",[e("td",[t._v("4.1")]),t._v(" "),e("td",[t._v("8.0.30")])]),t._v(" "),e("tr",[e("td",[t._v("4.0")]),t._v(" "),e("td",[t._v("~8.0")])])])]),t._v(" "),e("p",[t._v("Chevereto V4 is "),e("a",{attrs:{href:"https://php.net/",target:"_blank",rel:"noopener noreferrer"}},[t._v("PHP"),e("OutboundLink")],1),t._v(" software, it has been designed using:")]),t._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"https://chevere.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Chevere"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://deb.sury.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("PHP packages"),e("OutboundLink")],1),t._v(" from Ondřej Surý.")]),t._v(" "),e("li",[e("a",{attrs:{href:"https://www.php.net/manual/en/extensions.membership.php",target:"_blank",rel:"noopener noreferrer"}},[t._v("PHP extensions"),e("OutboundLink")],1),t._v(" provided by "),e("a",{attrs:{href:"https://pecl.php.net/",target:"_blank",rel:"noopener noreferrer"}},[t._v("PECL"),e("OutboundLink")],1),t._v(".")])]),t._v(" "),e("p",[t._v("Packages and PECL provides the same convenience, but as packages are made for debian-based systems, you should prefer PECL if you don't have a debian-compatible system.")]),t._v(" "),e("p",[t._v("Packages not only contain the software, it could trigger other effects in the system.")]),t._v(" "),e("h2",{attrs:{id:"resources"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#resources"}},[t._v("#")]),t._v(" Resources")]),t._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"https://php.net",target:"_blank",rel:"noopener noreferrer"}},[t._v("PHP Website"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://php.net/langref",target:"_blank",rel:"noopener noreferrer"}},[t._v("PHP Language reference"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://php.net/funcref",target:"_blank",rel:"noopener noreferrer"}},[t._v("PHP Function reference"),e("OutboundLink")],1)])]),t._v(" "),e("h2",{attrs:{id:"what-it-does"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#what-it-does"}},[t._v("#")]),t._v(" What it does?")]),t._v(" "),e("p",[t._v("PHP is the programming language used to write Chevereto application instructions, it is used for everything as it provides high flexibility to alter instructions on-the-fly at a minimum system performance footprint.")]),t._v(" "),e("h2",{attrs:{id:"troubleshoot"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#troubleshoot"}},[t._v("#")]),t._v(" Troubleshoot")]),t._v(" "),e("p",[t._v("Having issues? Check the following common pitfalls:")]),t._v(" "),e("ul",[e("li",[t._v("Outdated PHP version")]),t._v(" "),e("li",[t._v("Misconfiguration in PHP libraries")]),t._v(" "),e("li",[t._v("Bad php.ini directives")]),t._v(" "),e("li",[t._v("Low execution time")]),t._v(" "),e("li",[t._v("Bad sessions setup")]),t._v(" "),e("li",[t._v("Open basedir restrictions")])]),t._v(" "),e("h2",{attrs:{id:"configuration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),e("p",[t._v("The following "),e("code",[t._v("ini")]),t._v(" values are recommended for Chevereto installations.")]),t._v(" "),e("p",[e("strong",[t._v("Note:")]),t._v(" Check which "),e("code",[t._v("ini")]),t._v(" files are loaded at your Chevereto "),e("code",[t._v("/dashboard")]),t._v(".")]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[t._v("upload_max_filesize "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" 64M"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\npost_max_size "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" 64M"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nmax_execution_time "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nmemory_limit "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" 512M"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("table",[e("thead",[e("tr",[e("th",[t._v("Property")]),t._v(" "),e("th",[t._v("Description")]),t._v(" "),e("th",[t._v("Example")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("upload_max_filesize")]),t._v(" "),e("td",[t._v("Maximum upload size")]),t._v(" "),e("td",[e("code",[t._v("64M")]),t._v(" for 64 MB")])]),t._v(" "),e("tr",[e("td",[t._v("post_max_size")]),t._v(" "),e("td",[t._v("Maximum post size")]),t._v(" "),e("td",[t._v("Same as above")])]),t._v(" "),e("tr",[e("td",[t._v("max_execution_time")]),t._v(" "),e("td",[t._v("Maximum time to execute the software, in seconds")]),t._v(" "),e("td",[e("code",[t._v("30")]),t._v(" for 30 seconds")])]),t._v(" "),e("tr",[e("td",[t._v("memory_limit")]),t._v(" "),e("td",[t._v("Maximum memory to allocate")]),t._v(" "),e("td",[e("code",[t._v("512M")]),t._v(" for 512 MB")])])])]),t._v(" "),e("p",[t._v("You can toggle this limits to reflect your hardware and server load. Check this article for more info: "),e("a",{attrs:{href:"http://www.php.net/manual/en/features.file-upload.common-pitfalls.php",target:"_blank",rel:"noopener noreferrer"}},[t._v("PHP common pitfalls"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("h2",{attrs:{id:"extensions"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#extensions"}},[t._v("#")]),t._v(" Extensions")]),t._v(" "),e("p",[t._v("The following PHP extensions are required for Chevereto.")]),t._v(" "),e("ul",[e("li",[t._v("curl")]),t._v(" "),e("li",[t._v("exif")]),t._v(" "),e("li",[t._v("fileinfo")]),t._v(" "),e("li",[t._v("gd")]),t._v(" "),e("li",[t._v("hash")]),t._v(" "),e("li",[t._v("imagick")]),t._v(" "),e("li",[t._v("json")]),t._v(" "),e("li",[t._v("pdo")]),t._v(" "),e("li",[t._v("pdo-mysql")]),t._v(" "),e("li",[t._v("session")]),t._v(" "),e("li",[t._v("xml")])]),t._v(" "),e("h2",{attrs:{id:"features"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[t._v("#")]),t._v(" Features")]),t._v(" "),e("p",[t._v("Chevereto requires unrestricted access to "),e("strong",[t._v("all PHP functions")]),t._v(". Note that the following functions "),e("strong",[t._v("should not")]),t._v(" be restricted:")]),t._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"https://www.php.net/set-time-limit",target:"_blank",rel:"noopener noreferrer"}},[t._v("set_time_limit"),e("OutboundLink")],1)])]),t._v(" "),e("h2",{attrs:{id:"image-library"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#image-library"}},[t._v("#")]),t._v(" Image library")]),t._v(" "),e("p",[t._v("The image library (GD, Imagick) should be provided with support for "),e("code",[t._v("PNG GIF JPG BMP WEBP")]),t._v(". By default, Chevereto prefers Imagick and fallback to GD.")]),t._v(" "),e("p",[t._v("If you need to explicit use GD you can pass this "),e("RouterLink",{attrs:{to:"/application/configuration/environment.html#image-handling-variables"}},[t._v("ENV")]),t._v(":")],1),t._v(" "),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CHEVERETO_IMAGE_LIBRARY")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("gd\n")])])]),e("p",[t._v("If the server doesn't provide support for all the image formats handled by Chevereto, the ENV must reflect only the system supported formats. In the following example Chevereto is configured with explicit support only for PNG, GIF, BMP and JPG (removes WEBP):")]),t._v(" "),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CHEVERETO_IMAGE_FORMATS_AVAILABLE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v('\'["JPG","PNG","BMP","GIF"]\'')]),t._v("\n")])])]),e("h3",{attrs:{id:"configuring-imagemagick"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configuring-imagemagick"}},[t._v("#")]),t._v(" Configuring ImageMagick")]),t._v(" "),e("p",[t._v("Additional recommended ImageMagick configuration at "),e("code",[t._v("/etc/ImageMagick-6/policy.xml")]),t._v(" file:")]),t._v(" "),e("div",{staticClass:"language-xml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-xml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("policymap")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- policies --\x3e")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("policy")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("domain")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("resource"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("width"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("16KP"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("policy")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("domain")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("resource"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("height"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("16KP"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("policymap")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])]),e("h2",{attrs:{id:"filesystem"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#filesystem"}},[t._v("#")]),t._v(" Filesystem")]),t._v(" "),e("p",[t._v("User running "),e("code",[t._v("php")]),t._v(" must be in the "),e("strong",[t._v("owner group")]),t._v(" of the installation directory and Chevereto requires recursive "),e("strong",[t._v("read")]),t._v(" access to that directory. In addition to this, following paths require recursive "),e("strong",[t._v("read/write")]),t._v(" access:")]),t._v(" "),e("ul",[e("li",[t._v("Session path")]),t._v(" "),e("li",[t._v("Temp folder")]),t._v(" "),e("li",[t._v("./content")]),t._v(" "),e("li",[t._v("./images")]),t._v(" "),e("li",[t._v("./importing")])]),t._v(" "),e("p",[t._v("User generated content is stored at:")]),t._v(" "),e("ul",[e("li",[t._v("./images")]),t._v(" "),e("li",[t._v("./content/images/users")]),t._v(" "),e("li",[t._v("./content/pages")])]),t._v(" "),e("p",[t._v("In "),e("strong",[t._v("debian-based")]),t._v(" systems use the following command to set the right permissions in your Chevereto installation (change "),e("code",[t._v("/var/www/html")]),t._v(" to reflect your path).")]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("chown")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-R")]),t._v(" www-data: /var/www/html\n")])])])])}),[],!1,null,null,null);e.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/49.e6308390.js b/assets/js/49.e6308390.js
new file mode 100644
index 00000000..68747f34
--- /dev/null
+++ b/assets/js/49.e6308390.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{355:function(t,e,s){"use strict";s.r(e);var a=s(17),r=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"web-server"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#web-server"}},[t._v("#")]),t._v(" Web Server")]),t._v(" "),e("p",[t._v("Chevereto requires an HTTP web server compatible with PHP. It provides official support (when using our configuration) for Apache HTTP Server and Nginx.")]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("Alternative web servers")]),t._v(" "),e("p",[t._v("Any web server capable of forwarding FastCGI can be used to deploy Chevereto, but we don't provide the webserver configuration. You are encouraged to try translating "),e("code",[t._v(".htaccess")]),t._v(" rules to your server realm, if you need help don't hesitate to ask us directly.")])]),t._v(" "),e("h2",{attrs:{id:"resources"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#resources"}},[t._v("#")]),t._v(" Resources")]),t._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"https://httpd.apache.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Apache HTTP Server"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://nginx.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Nginx"),e("OutboundLink")],1)])]),t._v(" "),e("h2",{attrs:{id:"what-it-does"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#what-it-does"}},[t._v("#")]),t._v(" What it does?")]),t._v(" "),e("p",[t._v("The web server exposes the Chevereto application using the HTTP(s) protocol.")]),t._v(" "),e("h2",{attrs:{id:"troubleshoot"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#troubleshoot"}},[t._v("#")]),t._v(" Troubleshoot")]),t._v(" "),e("p",[t._v("Having issues? Check the following common pitfalls:")]),t._v(" "),e("ul",[e("li",[t._v("Apache "),e("code",[t._v("mod_rewrite")]),t._v(" disabled or "),e("code",[t._v("Allow Override All")]),t._v(" missing in virtual hosts")]),t._v(" "),e("li",[t._v("Missing writing permissions in Chevereto paths")]),t._v(" "),e("li",[t._v("Bad or invalid setup (timezone, multi-views, timeout, etc.)")]),t._v(" "),e("li",[t._v("Wrong nginx server block / PHP-FPM issues")]),t._v(" "),e("li",[e("code",[t._v("mod_security")]),t._v(" or any other artifact blocking requests from/to")])]),t._v(" "),e("h2",{attrs:{id:"restrict-php"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#restrict-php"}},[t._v("#")]),t._v(" Restrict PHP")]),t._v(" "),e("div",{staticClass:"custom-block danger"},[e("p",{staticClass:"custom-block-title"},[t._v("DANGER")]),t._v(" "),e("p",[t._v("Chevereto restricts access exclusively to "),e("code",[t._v("index.php")]),t._v(" and it forbids access to any other PHP file.")])]),t._v(" "),e("p",[t._v("Built-in "),e("a",{attrs:{href:"#apache-http-server"}},[t._v("Apache HTTP server")]),t._v(" config ("),e("code",[t._v(".htaccess")]),t._v(") and provided "),e("a",{attrs:{href:"#nginx"}},[t._v("Nginx")]),t._v(" config for "),e("strong",[t._v("Chevereto restricts access to PHP files")]),t._v(". Only "),e("code",[t._v("/index.php")]),t._v(" is allowed to process PHP requests. This is a security measure to prevent execution of arbitrary files that an attacker or third-party may nest in the Chevereto application filesystem.")]),t._v(" "),e("h2",{attrs:{id:"real-connecting-ip"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#real-connecting-ip"}},[t._v("#")]),t._v(" Real connecting IP")]),t._v(" "),e("div",{staticClass:"custom-block danger"},[e("p",{staticClass:"custom-block-title"},[t._v("DANGER")]),t._v(" "),e("p",[t._v("If real connecting IP is not configured Chevereto won't be able to detect the real visitors IPs, failing to deliver IP based restrictions and flood control.")])]),t._v(" "),e("p",[t._v("For setups under a proxy is required that the web server sets the appropriate value for the client connecting IP.")]),t._v(" "),e("p",[t._v("Refer to the following resources when requiring to configure real connecting IP:")]),t._v(" "),e("ul",[e("li",[t._v("Apache HTTP Server: "),e("code",[t._v("mod_remoteip")])]),t._v(" "),e("li",[t._v("nginx: "),e("code",[t._v("ngx_http_realip_module")])]),t._v(" "),e("li",[e("a",{attrs:{href:"https://developers.cloudflare.com/support/troubleshooting/restoring-visitor-ips/restoring-original-visitor-ips/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Guides for CloudFlare"),e("OutboundLink")],1),t._v(" (make sure to setup the appropriate "),e("a",{attrs:{href:"https://www.cloudflare.com/ips/",target:"_blank",rel:"noopener noreferrer"}},[t._v("IP ranges"),e("OutboundLink")],1),t._v(")")])]),t._v(" "),e("h2",{attrs:{id:"apache-http-server"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#apache-http-server"}},[t._v("#")]),t._v(" Apache HTTP server")]),t._v(" "),e("p",[t._v("Apache configuration "),e("code",[t._v(".htaccess")]),t._v(" files are included in Chevereto files. The only requirement is to enable module "),e("a",{attrs:{href:"https://httpd.apache.org/docs/current/mod/mod_rewrite.html",target:"_blank",rel:"noopener noreferrer"}},[e("code",[t._v("mod_rewrite")]),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("p",[t._v("Virtual host settings must allow URL rewriting.")]),t._v(" "),e("details",{staticClass:"custom-block details"},[e("summary",[t._v("vhost")]),t._v(" "),e("div",{staticClass:"language-apacheconf extra-class"},[e("pre",{pre:!0,attrs:{class:"language-apacheconf"}},[e("code",[t._v(" "),e("span",{pre:!0,attrs:{class:"token directive-block tag"}},[e("span",{pre:!0,attrs:{class:"token directive-block tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("Directory")]),e("span",{pre:!0,attrs:{class:"token directive-block-parameter attr-value"}},[t._v(" /var/www/html")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive-inline property"}},[t._v("Options")]),t._v(" -Indexes +FollowSymLinks +MultiViews\n "),e("span",{pre:!0,attrs:{class:"token directive-inline property"}},[t._v("AllowOverride")]),t._v(" All\n "),e("span",{pre:!0,attrs:{class:"token directive-inline property"}},[t._v("Require")]),t._v(" all granted\n "),e("span",{pre:!0,attrs:{class:"token directive-block tag"}},[e("span",{pre:!0,attrs:{class:"token directive-block tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")]),t._v("Directory")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])])]),t._v(" "),e("h2",{attrs:{id:"nginx"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#nginx"}},[t._v("#")]),t._v(" nginx")]),t._v(" "),e("p",[t._v("This is the "),e("strong",[t._v("recommended")]),t._v(" "),e("code",[t._v("nginx.conf")]),t._v(" for "),e("code",[t._v("server {}")]),t._v(" block.")]),t._v(" "),e("details",{staticClass:"custom-block details"},[e("summary",[t._v("nginx.conf")]),t._v(" "),e("div",{staticClass:"language-nginx extra-class"},[e("pre",{pre:!0,attrs:{class:"language-nginx"}},[e("code",[t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Disable access to sensitive application files")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("location")]),t._v(" ~* (app|content|lib)/.*\\.(po|php|lock|sql)$")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("404")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("location")]),t._v(" ~* composer\\.json|composer\\.lock|.gitignore$")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("404")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("location")]),t._v(" ~* /\\.ht")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("404")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Image not found replacement")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("location")]),t._v(" ~* \\.(jpe?g|png|gif|webp)$")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("log_not_found")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("off")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("error_page")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("404")]),t._v(" /content/images/system/default/404.gif")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# CORS header (avoids font rendering issues)")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("location")]),t._v(" ~* \\.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js)$")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("add_header")]),t._v(" Access-Control-Allow-Origin "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"*"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# PHP front controller")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("location")]),t._v(" /")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("index")]),t._v(" index.php")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try_files")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$uri")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$uri")]),t._v("/ /index.php"),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$is_args")]),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$query_string")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Single PHP-entrypoint (disables direct access to .php files)")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("location")]),t._v(" ~* \\.php$")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("internal")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("include")]),t._v(" snippets/fastcgi-php.conf")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token directive"}},[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fastcgi_pass")]),t._v(" unix:/var/run/php/php8.1-fpm.sock")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])])}),[],!1,null,null,null);e.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/5.a04d67cb.js b/assets/js/5.a04d67cb.js
new file mode 100644
index 00000000..318538a1
--- /dev/null
+++ b/assets/js/5.a04d67cb.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{283:function(t,e,a){},299:function(t,e,a){"use strict";a(283)},335:function(t,e,a){"use strict";a.r(e);var s={name:"CodeBlock",props:{title:{type:String,required:!0},active:{type:Boolean,default:!1}},mounted(){this.$parent&&this.$parent.loadTabs&&this.$parent.loadTabs()}},i=(a(299),a(17)),n=Object(i.a)(s,(function(){return(0,this._self._c)("div",{staticClass:"theme-code-block",class:{"theme-code-block__active":this.active}},[this._t("default")],2)}),[],!1,null,"759a7d02",null);e.default=n.exports}}]);
\ No newline at end of file
diff --git a/assets/js/50.ee2da8b1.js b/assets/js/50.ee2da8b1.js
new file mode 100644
index 00000000..9fb1ba80
--- /dev/null
+++ b/assets/js/50.ee2da8b1.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{353:function(t,s,a){"use strict";a.r(s);var e=a(17),r=Object(e.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"api-version-1-1"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#api-version-1-1"}},[t._v("#")]),t._v(" API Version 1.1")]),t._v(" "),s("p",[t._v("Chevereto API enables programmatic file uploads, allowing you to seamlessly integrate our uploading functionality into your own applications.")]),t._v(" "),s("h2",{attrs:{id:"key"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#key"}},[t._v("#")]),t._v(" Key")]),t._v(" "),s("p",[t._v("API V1.1 works with an user key which is available for each user at "),s("code",[t._v("/settings/api")]),t._v(".")]),t._v(" "),s("p",[t._v("Admin user can set the public API key for guest uploads at the "),s("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/guest-api.html#public-api-key",target:"_blank",rel:"noopener noreferrer"}},[t._v("Dashboard panel"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"request-method"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#request-method"}},[t._v("#")]),t._v(" Request method")]),t._v(" "),s("p",[t._v("API V1 calls can be made using POST or GET request methods.")]),t._v(" "),s("p",[t._v("POST request method is "),s("strong",[t._v("recommended")]),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"request-url"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#request-url"}},[t._v("#")]),t._v(" Request URL")]),t._v(" "),s("div",{staticClass:"language-plain extra-class"},[s("pre",{pre:!0,attrs:{class:"language-plain"}},[s("code",[t._v("http://mysite.com/api/1/upload\n")])])]),s("h2",{attrs:{id:"authorization"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#authorization"}},[t._v("#")]),t._v(" Authorization")]),t._v(" "),s("p",[t._v("API V1.1 supports header authorization by passing the "),s("code",[t._v("X-API-Key")]),t._v(" header with an API key.")]),t._v(" "),s("div",{staticClass:"language-plain extra-class"},[s("pre",{pre:!0,attrs:{class:"language-plain"}},[s("code",[t._v("X-API-Key: chv_key_here\n")])])]),s("h2",{attrs:{id:"parameters"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#parameters"}},[t._v("#")]),t._v(" Parameters")]),t._v(" "),s("h3",{attrs:{id:"source"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#source"}},[t._v("#")]),t._v(" source")]),t._v(" "),s("p",[t._v("A binary file, base64 data, or a URL for an image.")]),t._v(" "),s("h3",{attrs:{id:"key-optional"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#key-optional"}},[t._v("#")]),t._v(" key (optional)")]),t._v(" "),s("p",[t._v("The API key. You can use this parameter if unable to provide auth via headers.")]),t._v(" "),s("h3",{attrs:{id:"title-optional"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#title-optional"}},[t._v("#")]),t._v(" title (optional)")]),t._v(" "),s("p",[t._v("File title. This is automatically detected from metadata if not provided.")]),t._v(" "),s("h3",{attrs:{id:"description-optional"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#description-optional"}},[t._v("#")]),t._v(" description (optional)")]),t._v(" "),s("p",[t._v("File description. This is automatically detected from metadata if not provided.")]),t._v(" "),s("h3",{attrs:{id:"tags-optional"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#tags-optional"}},[t._v("#")]),t._v(" tags (optional)")]),t._v(" "),s("p",[t._v("File tag(s). Comma separated list of tags.")]),t._v(" "),s("h3",{attrs:{id:"album-id-optional"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#album-id-optional"}},[t._v("#")]),t._v(" album_id (optional)")]),t._v(" "),s("p",[t._v("File album id, must be owned by the API key user.")]),t._v(" "),s("h3",{attrs:{id:"category-id-optional"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#category-id-optional"}},[t._v("#")]),t._v(" category_id (optional)")]),t._v(" "),s("p",[t._v("Category id. Determines the file category to assign.")]),t._v(" "),s("h3",{attrs:{id:"width-optional"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#width-optional"}},[t._v("#")]),t._v(" width (optional)")]),t._v(" "),s("p",[t._v("Target resize width, will automatic detect height.")]),t._v(" "),s("h3",{attrs:{id:"expiration-optional"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#expiration-optional"}},[t._v("#")]),t._v(" expiration (optional)")]),t._v(" "),s("p",[t._v("Expiration time to auto-delete the file in date interval format. For example, PT5M for five minutes in the future. P3D for three days in the future.")]),t._v(" "),s("h3",{attrs:{id:"nsfw-optional"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#nsfw-optional"}},[t._v("#")]),t._v(" nsfw (optional)")]),t._v(" "),s("p",[t._v("Not safe for work flag "),s("code",[t._v("[0, 1]")]),t._v(".")]),t._v(" "),s("h3",{attrs:{id:"format-optional"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#format-optional"}},[t._v("#")]),t._v(" format (optional)")]),t._v(" "),s("p",[t._v("Return format "),s("code",[t._v("[json, redirect, txt]")]),t._v(".")]),t._v(" "),s("h3",{attrs:{id:"use-file-date-optional-admin-only"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#use-file-date-optional-admin-only"}},[t._v("#")]),t._v(" use_file_date (optional, admin only)")]),t._v(" "),s("p",[t._v("Configure to use file date taken (Exif) instead of upload date "),s("code",[t._v("[0, 1]")]),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"example-call"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-call"}},[t._v("#")]),t._v(" Example call")]),t._v(" "),s("div",{staticClass:"language-plain extra-class"},[s("pre",{pre:!0,attrs:{class:"language-plain"}},[s("code",[t._v('curl --fail-with-body -X POST \\\n -H "X-API-Key: $key" \\\n -H "Content-Type: multipart/form-data" \\\n -F "source=@image.jpeg" \\\n http://mysite.com/api/1/upload\n')])])]),s("h2",{attrs:{id:"api-response"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#api-response"}},[t._v("#")]),t._v(" API response")]),t._v(" "),s("p",[t._v("API V1 responses will vary depending on the "),s("strong",[t._v("format")]),t._v(" parameter:")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",[t._v("Format")]),t._v(" "),s("th",[t._v("Output")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[t._v("json")]),t._v(" "),s("td",[t._v("Image upload info in JSON format (default)")])]),t._v(" "),s("tr",[s("td",[t._v("txt")]),t._v(" "),s("td",[t._v("Image direct URL in text/plain format")])]),t._v(" "),s("tr",[s("td",[t._v("redirect")]),t._v(" "),s("td",[t._v("Redirects to the image viewer URL")])])])]),t._v(" "),s("p",[t._v("When using JSON the response output will contain the "),s("code",[t._v("status_txt")]),t._v(" and "),s("code",[t._v("status_code")]),t._v(" properties.")]),t._v(" "),s("h2",{attrs:{id:"example-response-json"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-response-json"}},[t._v("#")]),t._v(" Example response (JSON)")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"status_code"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"success"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"message"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"file uploaded"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"code"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"image"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers-animated-music-video"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"extension"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mp4"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"size"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3011299")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"width"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("496")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"height"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("360")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"date"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2024-10-10 16:58:00"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"date_gmt"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2024-10-10 19:58:00"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"title"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers animated music video MrWeebl"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tags"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"description"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"nsfw"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"storage_mode"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"datefolder"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"md5"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"7a120d5c28de264bdbb934f023a628fd"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"source_md5"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"original_filename"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers _ animated music video _ MrWeebl.mp4"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"original_exifdata"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"views"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"category_id"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"chain"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("21")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"thumb_size"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("21212")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"medium_size"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"frame_size"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("19804")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"expiration_date_gmt"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2024-10-10 20:28:00"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"likes"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"is_animated"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"is_approved"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"is_360"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"duration"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("73")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"video"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tags_string"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"file"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"resource"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"url"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"id_encoded"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ZfGd"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"filename"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers-animated-music-video.mp4"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"mime"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"video/mp4"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/images/2024/10/10/Badgers-animated-music-video.mp4"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ratio"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.3777777777777778")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"size_formatted"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"3 MB"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"frame"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"filename"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers-animated-music-video.fr.jpeg"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers-animated-music-video.fr"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"mime"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"image/jpeg"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"extension"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"jpeg"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/images/2024/10/10/Badgers-animated-music-video.fr.jpeg"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"size"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("19804")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"image"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"filename"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers-animated-music-video.mp4"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers-animated-music-video"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"mime"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"video/mp4"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"extension"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mp4"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/images/2024/10/10/Badgers-animated-music-video.mp4"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"size"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3011299")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"thumb"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"filename"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers-animated-music-video.th.jpeg"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers-animated-music-video.th"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"mime"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"image/jpeg"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"extension"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"jpeg"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/images/2024/10/10/Badgers-animated-music-video.th.jpeg"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"size"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("21212")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url_frame"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/images/2024/10/10/Badgers-animated-music-video.fr.jpeg"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"medium"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"filename"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"mime"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"extension"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"duration_time"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"01:13"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url_viewer"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/clip/Badgers-animated-music-video-MrWeebl.ZfGd"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"path_viewer"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/clip/Badgers-animated-music-video-MrWeebl.ZfGd"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url_short"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/clip/ZfGd"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"display_url"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/images/2024/10/10/Badgers-animated-music-video.fr.jpeg"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"display_width"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("496")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"display_height"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("360")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"views_label"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"views"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"likes_label"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"likes"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"how_long_ago"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"moments ago"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"date_fixed_peer"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2024-10-10 19:58:00"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"title_truncated"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers animated music vi..."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"title_truncated_html"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers animated music vi..."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"is_use_loader"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"display_title"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers animated music video MrWeebl"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"delete_url"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/clip/ZfGd/delete/e8b07479818bc58d3b9849c431e9c2b28827ccce7809ed4f"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"status_txt"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"OK"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"example-response-txt"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-response-txt"}},[t._v("#")]),t._v(" Example response (txt)")]),t._v(" "),s("div",{staticClass:"language-plain extra-class"},[s("pre",{pre:!0,attrs:{class:"language-plain"}},[s("code",[t._v("http://localhost/images/2024/10/10/Badgers-animated-music-video.mp4\n")])])]),s("h2",{attrs:{id:"example-response-redirect"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-response-redirect"}},[t._v("#")]),t._v(" Example response (redirect)")]),t._v(" "),s("div",{staticClass:"language-plain extra-class"},[s("pre",{pre:!0,attrs:{class:"language-plain"}},[s("code",[t._v("Location: /clip/Badgers-animated-music-video-MrWeebl.ZfGd\n")])])])])}),[],!1,null,null,null);s.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/51.d4d7b514.js b/assets/js/51.d4d7b514.js
new file mode 100644
index 00000000..a82aec99
--- /dev/null
+++ b/assets/js/51.d4d7b514.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{356:function(e,a,t){"use strict";t.r(a);var s=t(17),o=Object(s.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"language"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#language"}},[e._v("#")]),e._v(" Language")]),e._v(" "),a("p",[e._v("Chevereto uses gettext for its translations and the system comes with a lot of languages built-in which you can find in the "),a("code",[e._v("app/languages")]),e._v(" folder.")]),e._v(" "),a("h2",{attrs:{id:"add-new-languages"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#add-new-languages"}},[e._v("#")]),e._v(" Add new languages")]),e._v(" "),a("h3",{attrs:{id:"onesky"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#onesky"}},[e._v("#")]),e._v(" OneSky")]),e._v(" "),a("p",[e._v("If you want to add a new language we encourage you to apply to "),a("a",{attrs:{href:"http://translate.chevereto.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("translation"),a("OutboundLink")],1),e._v(", where you can easily contribute a new language which will get added to Chevereto "),a("strong",[e._v("distribution")]),e._v(". OneSky features a complete suite for translations with no additional software required.")]),e._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),a("p",[e._v("Translations contributed will get added to the software.")])]),e._v(" "),a("h3",{attrs:{id:"manually"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#manually"}},[e._v("#")]),e._v(" Manually")]),e._v(" "),a("p",[e._v("Put your "),a("code",[e._v(".po")]),e._v(" files at "),a("code",[e._v("app/languages")]),e._v(" folder. Try copying an existing language and rename it to your language code. For example, to add a new language called "),a("code",[e._v("es")]),e._v(" (Spanish) you would copy the "),a("code",[e._v("en.po")]),e._v(" file and rename it to "),a("code",[e._v("es.po")]),e._v(".")]),e._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),a("p",[e._v("Considering using a "),a("a",{attrs:{href:"https://www.google.com/search?q=po%20editor",target:"_blank",rel:"noopener noreferrer"}},[e._v(".po editor software"),a("OutboundLink")],1),e._v(" to create the translation file.")])]),e._v(" "),a("p",[e._v("Specialized software for handling PO files is recommended as this file on its header contains metadata that instructs how the language handle plural forms and more.")]),e._v(" "),a("h2",{attrs:{id:"customizing-language-strings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#customizing-language-strings"}},[e._v("#")]),e._v(" Customizing language strings")]),e._v(" "),a("p",[e._v("All language strings can be customized to fit what you want to show to your visitors. You don't need to touch the theme at all for customizing displayed text.")]),e._v(" "),a("p",[e._v("The system works by overriding the target translation. For example, replacing "),a("code",[e._v("Upload and share your media")]),e._v(' to "Upload, do it now!" by following this procedure:')]),e._v(" "),a("h3",{attrs:{id:"_1-get-the-translation-string-msgid-and-msgstr-values"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-get-the-translation-string-msgid-and-msgstr-values"}},[e._v("#")]),e._v(" 1. Get the translation string ("),a("code",[e._v("msgid")]),e._v(" and "),a("code",[e._v("msgstr")]),e._v(" values)")]),e._v(" "),a("ul",[a("li",[e._v("Go to the "),a("code",[e._v("app/languages")]),e._v(" folder")]),e._v(" "),a("li",[e._v("Open the file "),a("code",[e._v("en.po")]),e._v(" (in this example we are overriding English language)")]),e._v(" "),a("li",[e._v("Find this text: "),a("code",[e._v("Upload and share your media")])]),e._v(" "),a("li",[e._v("Copy the "),a("code",[e._v("msgid")]),e._v(" and the "),a("code",[e._v("msgstr")]),e._v(" lines, you should get something like this:")])]),e._v(" "),a("div",{staticClass:"language-po extra-class"},[a("pre",{pre:!0,attrs:{class:"language-po"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("msgid")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Upload and share your media"')]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("msgstr")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('""')]),e._v("\n")])])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),a("p",[e._v("The property "),a("code",[e._v("msgstr")]),e._v(" is empty because English is the base language. If you open any other language you will see that value actually translated.")])]),e._v(" "),a("h3",{attrs:{id:"_2-override-translation-string"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_2-override-translation-string"}},[e._v("#")]),e._v(" 2. Override translation string")]),e._v(" "),a("ul",[a("li",[e._v("Go to the "),a("code",[e._v("app/languages/overrides")]),e._v(" folder (create it if it doesn't exist)")]),e._v(" "),a("li",[e._v("Create the file "),a("code",[e._v("app/languages/overrides/en.po")]),e._v(" with these contents:")])]),e._v(" "),a("div",{staticClass:"language-po extra-class"},[a("pre",{pre:!0,attrs:{class:"language-po"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("msgid")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Upload and share your media"')]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("msgstr")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Upload, do it now!"')]),e._v("\n")])])]),a("p",[e._v("You only need to replace "),a("code",[e._v("msgstr")]),e._v(" because that is the translation string.")]),e._v(" "),a("p",[e._v("The result is that the system now will display "),a("code",[e._v("Upload, do it now!")]),e._v(" instead of the default "),a("code",[e._v("Upload and share your media")]),e._v(" and it will only affect "),a("code",[e._v("en")]),e._v(" language.")]),e._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),a("p",[a("strong",[e._v("Note:")]),e._v(" You don't actually need a gettext editor for language overrides, but make sure to use double-quotes. If you need to put a double quote inside "),a("code",[e._v("msgstr")]),e._v(" use "),a("code",[e._v('\\"')]),e._v(" (escaped double-quote).")])]),e._v(" "),a("h3",{attrs:{id:"_3-adding-more-overrides"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-adding-more-overrides"}},[e._v("#")]),e._v(" 3. Adding more overrides")]),e._v(" "),a("p",[e._v("You can add as many string overrides as you want, just make sure to follow the same structure. For example, to also override the "),a("code",[e._v("Recent")]),e._v(" string your "),a("code",[e._v("app/languages/overrides/en.po")]),e._v(" file should look like this:")]),e._v(" "),a("div",{staticClass:"language-po extra-class"},[a("pre",{pre:!0,attrs:{class:"language-po"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("msgid")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Upload and share your media"')]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("msgstr")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Upload, do it now!"')]),e._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("msgid")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Recent"')]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("msgstr")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"New!"')]),e._v("\n")])])]),a("h2",{attrs:{id:"cache-languages"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#cache-languages"}},[e._v("#")]),e._v(" Cache languages")]),e._v(" "),a("p",[e._v("In Chevereto the "),a("code",[e._v(".po")]),e._v(" files contain the translations, but these files aren't used at runtime. The system needs to cache these translations to make these available for the application.")]),e._v(" "),a("p",[e._v("Run the "),a("RouterLink",{attrs:{to:"/application/reference/cli.html#langs"}},[e._v("langs command")]),e._v(" to cache language strings, including any override you have made.")],1),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("app/bin/legacy "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-C")]),e._v(" langs\n")])])]),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[e._v("Default cache")]),e._v(" "),a("p",[a("strong",[e._v("Note:")]),e._v(" You need to re-cache your languages for every system update "),a("strong",[e._v("only")]),e._v(" if you have added new languages or overrides.")])])])}),[],!1,null,null,null);a.default=o.exports}}]);
\ No newline at end of file
diff --git a/assets/js/52.9132819c.js b/assets/js/52.9132819c.js
new file mode 100644
index 00000000..5ee157a6
--- /dev/null
+++ b/assets/js/52.9132819c.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{357:function(e,t,o){"use strict";o.r(t);var r=o(17),a=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"routes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#routes"}},[e._v("#")]),e._v(" Routes")]),e._v(" "),t("p",[t("code",[e._v("😪 Outdated docs - please check later.")])]),e._v(" "),t("p",[e._v("Routes refers to virtual paths like "),t("code",[e._v("/dashboard")]),e._v(" which doesn't exists in the system as a real folder and Chevereto map that request to PHP. By default Chevereto comes with a lot of routes and all of them are in the "),t("code",[e._v("/app/routes")]),e._v(" folder.")]),e._v(" "),t("p",[e._v("Custom routes are useful if you want to add things like your own API or you want to change how the default "),t("code",[e._v("/image")]),e._v(" route works. With this system you don't need plugins at all and you can highly customize anything by adding routes or overriding the existing ones.")]),e._v(" "),t("h2",{attrs:{id:"adding-or-overwriting-routes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adding-or-overwriting-routes"}},[e._v("#")]),e._v(" Adding or overwriting routes")]),e._v(" "),t("p",[e._v("You can totally overwrite the default routes or add your own new routes safely. To do this simply do your work in the "),t("code",[e._v("app/routes/overrides")]),e._v(" folder. You will need to look around the default routes to get used to it.")]),e._v(" "),t("p",[e._v("Feel free to do anything you want in the "),t("code",[e._v("app/routes/overrides")]),e._v(" folder, your changes won't mess the default routes at all and you will keep your changes when you update the script.")]),e._v(" "),t("p",[e._v("Routes are a feature of G\\ Library so you should check the "),t("a",{attrs:{href:"https://g.chevereto.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("G\\ Library documentation"),t("OutboundLink")],1),e._v(" for extended information about system routes.")])])}),[],!1,null,null,null);t.default=a.exports}}]);
\ No newline at end of file
diff --git a/assets/js/53.abef1e0c.js b/assets/js/53.abef1e0c.js
new file mode 100644
index 00000000..c2252086
--- /dev/null
+++ b/assets/js/53.abef1e0c.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{358:function(e,t,o){"use strict";o.r(t);var a=o(17),s=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"theme"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#theme"}},[e._v("#")]),e._v(" Theme")]),e._v(" "),t("p",[e._v("Chevereto's built-in theme is designed to offer a turn-key experience for users and you may customize it using several methods.")]),e._v(" "),t("h2",{attrs:{id:"theme-overrides"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#theme-overrides"}},[e._v("#")]),e._v(" Theme overrides")]),e._v(" "),t("p",[t("code",[e._v("content/legacy/themes/Peafowl/overrides/")])]),e._v(" "),t("p",[e._v("Theme overrides can be used to override any file in the theme.")]),e._v(" "),t("p",[e._v("Theme overrides works by detecting a file override which "),t("strong",[e._v("replaces a given theme file")]),e._v(", so the system will use the override instead of the default file. Overrides are placed at "),t("code",[e._v("content/legacy/themes/Peafowl/overrides/")]),e._v(" directory and follow the same structure as the theme.")]),e._v(" "),t("p",[e._v("For example, let's say you want to replace "),t("code",[e._v("content/legacy/themes/Peafowl/views/image.php")]),e._v(". To do this copy the file to "),t("code",[e._v("content/legacy/themes/Peafowl/overrides/views/image.php")]),e._v(", make some changes and you will notice that the system now use the override instead of the default file.")]),e._v(" "),t("h2",{attrs:{id:"custom-hooks"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#custom-hooks"}},[e._v("#")]),e._v(" Custom hooks")]),e._v(" "),t("p",[t("code",[e._v("content/legacy/themes/Peafowl/custom_hooks/")])]),e._v(" "),t("p",[e._v("Custom hooks allows to add or edit code in designated areas or segments of the theme.")]),e._v(" "),t("p",[e._v("List of available custom hooks:")]),e._v(" "),t("ul",[t("li",[e._v("body_open.php")]),e._v(" "),t("li",[e._v("footer.php")]),e._v(" "),t("li",[e._v("head_after.php")]),e._v(" "),t("li",[e._v("head_open.php")]),e._v(" "),t("li",[e._v("head.php")]),e._v(" "),t("li",[e._v("header.php")]),e._v(" "),t("li",[e._v("share_links.php")]),e._v(" "),t("li",[e._v("style.css")])]),e._v(" "),t("p",[e._v("For example, to customize the share buttons using custom hooks:")]),e._v(" "),t("ul",[t("li",[e._v("Go to the theme custom hooks folder at "),t("code",[e._v("content/legacy/themes/Peafowl/custom_hooks/")])]),e._v(" "),t("li",[e._v("Make a copy of "),t("code",[e._v("share_links.sample.php")]),e._v(" (do all your editing needed in this copy)")]),e._v(" "),t("li",[e._v("Rename your working copy to "),t("code",[e._v("share_links.php")])])]),e._v(" "),t("p",[e._v("Chevereto will detect your hooks and it will load these files.")]),e._v(" "),t("h2",{attrs:{id:"clone-default-theme"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#clone-default-theme"}},[e._v("#")]),e._v(" Clone default theme")]),e._v(" "),t("p",[e._v('If you need more customization you should clone the default "Peafowl" theme and do your work in this new theme.')]),e._v(" "),t("p",[e._v("To clone the default theme:")]),e._v(" "),t("ul",[t("li",[e._v("Copy "),t("code",[e._v("content/legacy/themes/Peafowl/")]),e._v(" and paste it in the same directory")]),e._v(" "),t("li",[e._v("Name your new theme as anything you want (no white spaces)")])]),e._v(" "),t("p",[e._v("Best way to keep a track of default theme changes is by creating a local git repo in your computer. Create a local git repo with last Chevereto version and commit each time you want to merge the code and will be able to see exactly all the changes line by line.")])])}),[],!1,null,null,null);t.default=s.exports}}]);
\ No newline at end of file
diff --git a/assets/js/54.7d8747c5.js b/assets/js/54.7d8747c5.js
new file mode 100644
index 00000000..24816978
--- /dev/null
+++ b/assets/js/54.7d8747c5.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{359:function(e,t,r){"use strict";r.r(t);var a=r(17),s=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"debug"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#debug"}},[e._v("#")]),e._v(" Debug")]),e._v(" "),t("p",[e._v("Debug enables to dump information about errors that may be affecting the software functionality. If Chevereto isn't working properly it will require debugging to understand the situation.")]),e._v(" "),t("p",[e._v("Debug refers to check the system logs, error messages, and any other information to identify the root cause of the problem.")]),e._v(" "),t("h2",{attrs:{id:"debug-with-user-interface"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#debug-with-user-interface"}},[e._v("#")]),e._v(" Debug with user interface")]),e._v(" "),t("p",[e._v("To debug errors go to "),t("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/system.html#debug-errors",target:"_blank",rel:"noopener noreferrer"}},[e._v("Settings > System > Debug errors"),t("OutboundLink")],1),e._v(' and enable "Debug errors". By enabling this Chevereto will debug errors to the screen (only to administrators).')]),e._v(" "),t("h2",{attrs:{id:"debug-with-xrdebug"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#debug-with-xrdebug"}},[e._v("#")]),e._v(" Debug with xrDebug")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://xrdebug.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("xrDebug"),t("OutboundLink")],1),e._v(" enables to spawn a user-friendly debugger that will automatically catch and display errors in real-time.")]),e._v(" "),t("p",[e._v("You can "),t("a",{attrs:{href:"https://docs.xrdebug.com/install/",target:"_blank",rel:"noopener noreferrer"}},[e._v("install"),t("OutboundLink")],1),e._v(" xrDebug anywhere and connect it to your Chevereto, xrDebug also comes built-in with Chevereto.")]),e._v(" "),t("ul",[t("li",[e._v("Run xrDebug built-in server:")])]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("cd")]),e._v(" app "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" vendor/bin/xrdebug\n")])])]),t("ul",[t("li",[e._v("Enable xrDebug by configuring the "),t("RouterLink",{attrs:{to:"/application/configuration/environment.html#xrdebug-variables"}},[e._v("xrDebug variables")]),e._v(".")],1)]),e._v(" "),t("h2",{attrs:{id:"debug-with-docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#debug-with-docker"}},[e._v("#")]),e._v(" Debug with Docker")]),e._v(" "),t("p",[e._v("Replace "),t("code",[e._v("CONTAINER")]),e._v(" with the container name.")]),e._v(" "),t("p",[e._v("Chevereto error log:")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("docker")]),e._v(" logs CONTAINER "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-f")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[t("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[e._v("1")]),e._v(">")]),e._v("/dev/null\n")])])]),t("p",[e._v("Chevereto access log:")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("docker")]),e._v(" logs CONTAINER "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-f")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[t("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[e._v("2")]),e._v(">")]),e._v("/dev/null\n")])])]),t("h2",{attrs:{id:"debug-with-logging"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#debug-with-logging"}},[e._v("#")]),e._v(" Debug with logging")]),e._v(" "),t("p",[e._v("Debug can be "),t("RouterLink",{attrs:{to:"/application/configuration/configuring.html"}},[e._v("configured")]),e._v(" using "),t("RouterLink",{attrs:{to:"/application/configuration/environment.html#debug-variables"}},[e._v("environment variables")]),e._v(" to log to a file or device.")],1),e._v(" "),t("h3",{attrs:{id:"debug-level"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#debug-level"}},[e._v("#")]),e._v(" Debug level")]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Note on debug levels")]),e._v(" "),t("p",[e._v("Error level >= 2 is not recommended for production environments. Is not safe to print the errors to the screen, handle it with care.")])]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Level (N)")]),e._v(" "),t("th",[e._v("Description")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("0")]),e._v(" "),t("td",[e._v("No debug")])]),e._v(" "),t("tr",[t("td",[e._v("1")]),e._v(" "),t("td",[e._v("(default) Debug to "),t("code",[e._v("log_device")])])]),e._v(" "),t("tr",[t("td",[e._v("2")]),e._v(" "),t("td",[e._v("Print errors (no logging)")])]),e._v(" "),t("tr",[t("td",[e._v("3")]),e._v(" "),t("td",[e._v("Print errors and log to "),t("code",[e._v("log_device")])])])])]),e._v(" "),t("p",[e._v("Use "),t("code",[e._v("CHEVERETO_DEBUG_LEVEL=N")]),e._v(" to configure the debug level.")]),e._v(" "),t("h2",{attrs:{id:"error-log-device"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#error-log-device"}},[e._v("#")]),e._v(" Error log device")]),e._v(" "),t("p",[e._v("Use "),t("RouterLink",{attrs:{to:"/application/configuration/environment.html#error-logging-variables"}},[t("code",[e._v("CHEVERETO_ERROR_LOG")])]),e._v(" to customize where error log will be written.")],1),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Permissions")]),e._v(" "),t("p",[e._v("Double-check that the target log device is writable by the user running PHP.")])]),e._v(" "),t("h2",{attrs:{id:"debug-development"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#debug-development"}},[e._v("#")]),e._v(" Debug (development)")]),e._v(" "),t("p",[e._v("To enable debug in development you can set the environment variable "),t("code",[e._v("CHEVERETO_ENVIRONMENT")]),e._v(" to "),t("code",[e._v("dev")]),e._v(". "),t("strong",[e._v("Note:")]),e._v(" This variable is read from "),t("code",[e._v("$_ENV")]),e._v(" (server context) not from "),t("code",[e._v("app/env.php")]),e._v(" (Chevereto app).")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CHEVERETO_ENVIRONMENT")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("dev\n")])])]),t("h3",{attrs:{id:"editing-source"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#editing-source"}},[e._v("#")]),e._v(" Editing source")]),e._v(" "),t("p",[e._v("In cases where the error is preventing the application to boot you can force error display by editing the source code. This will allow to debug early in the application bootstrapping process.")]),e._v(" "),t("ul",[t("li",[e._v("Open "),t("code",[e._v("app/legacy/load/register-handlers.php")])]),e._v(" "),t("li",[e._v("Change this:")])]),e._v(" "),t("div",{staticClass:"language-php extra-class"},[t("pre",{pre:!0,attrs:{class:"language-php"}},[t("code",[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$doDebug")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("in_array")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$debugLevel")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("3")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token constant boolean"}},[e._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("||")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("isDebug")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n")])])]),t("ul",[t("li",[e._v("To this:")])]),e._v(" "),t("div",{staticClass:"language-php extra-class"},[t("pre",{pre:!0,attrs:{class:"language-php"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//$doDebug = in_array($debugLevel, [2, 3], true) || isDebug();")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$doDebug")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token constant boolean"}},[e._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n")])])]),t("h2",{attrs:{id:"finding-the-logs"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#finding-the-logs"}},[e._v("#")]),e._v(" Finding the logs")]),e._v(" "),t("p",[e._v("This vary depending the server provider and how PHP runs in the server. In doubt, always ask first to your system administrator.")]),e._v(" "),t("ul",[t("li",[e._v("Chevereto\n"),t("ul",[t("li",[e._v("Logs by default at "),t("code",[e._v("php://stderr")])]),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/application/configuration/environment.html#error-logging-variables"}},[e._v("Configurable")]),e._v(" via\n"),t("ul",[t("li",[t("code",[e._v("CHEVERETO_ERROR_LOG")])]),e._v(" "),t("li",[t("code",[e._v("CHEVERETO_ERROR_LOG_CLI")])]),e._v(" "),t("li",[t("code",[e._v("CHEVERETO_ERROR_LOG_CRON")])])])],1)])]),e._v(" "),t("li",[e._v("Docker\n"),t("ul",[t("li",[e._v("Logs to "),t("code",[e._v("/dev/stderr")])])])]),e._v(" "),t("li",[e._v("xrDebug\n"),t("ul",[t("li",[e._v("Streams the debug messages to the xrDebug session")])])]),e._v(" "),t("li",[e._v("Apache\n"),t("ul",[t("li",[e._v("Logs by default at "),t("code",[e._v("/var/log/apache2/error.log")])]),e._v(" "),t("li",[e._v("Virtual host directive defines custom error log location")]),e._v(" "),t("li",[e._v("Commonly configured for "),t("code",[e._v("/var/www/domain.com/logs")])])])]),e._v(" "),t("li",[e._v("nginx\n"),t("ul",[t("li",[e._v("Logs by default at "),t("code",[e._v("/var/log/nginx/error.log")])]),e._v(" "),t("li",[e._v("Server block defines custom error log location")]),e._v(" "),t("li",[e._v("Commonly configured for "),t("code",[e._v("/var/www/domain.com/logs")])])])]),e._v(" "),t("li",[e._v("cPanel\n"),t("ul",[t("li",[e._v("Logs by default at "),t("code",[e._v("../domain.com.error.log")]),e._v(" (parent of "),t("code",[e._v("public_html")]),e._v(" folder)")]),e._v(" "),t("li",[e._v("Vary a lot from providers and cPanel version")])])])]),e._v(" "),t("h3",{attrs:{id:"i-can-t-find-the-logs"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#i-can-t-find-the-logs"}},[e._v("#")]),e._v(" I can't find the logs")]),e._v(" "),t("p",[e._v("You can configure "),t("code",[e._v("CHEVERETO_DEBUG_LEVEL")]),e._v(" >= 2 but note that this error reporting level "),t("strong",[e._v("could compromise")]),e._v(" your installation. Restrict any public access to your website and revert to "),t("code",[e._v("CHEVERETO_DEBUG_LEVEL=1")]),e._v(" as soon as possible.")]),e._v(" "),t("p",[e._v("If you can't find the logs or you are having a hard time with this you can request "),t("a",{attrs:{href:"https://chevereto.com/support",target:"_blank",rel:"noopener noreferrer"}},[e._v("Extra Support"),t("OutboundLink")],1),e._v(" so we can safely debug your installation.")])])}),[],!1,null,null,null);t.default=s.exports}}]);
\ No newline at end of file
diff --git a/assets/js/55.8eed8c4a.js b/assets/js/55.8eed8c4a.js
new file mode 100644
index 00000000..add2a54c
--- /dev/null
+++ b/assets/js/55.8eed8c4a.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[55],{361:function(t,e,o){"use strict";o.r(e);var r=o(17),s=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"troubleshoot"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#troubleshoot"}},[t._v("#")]),t._v(" Troubleshoot")]),t._v(" "),e("p",[t._v("Having issues? Check the troubleshoot for well-known issues.")]),t._v(" "),e("ul",[e("li",[e("RouterLink",{attrs:{to:"/application/stack/web-server.html#troubleshoot"}},[t._v("Web server Troubleshoot")])],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/application/stack/php.html#troubleshoot"}},[t._v("PHP Troubleshoot")])],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/application/stack/mysql-server.html#troubleshoot"}},[t._v("MySQL Server Troubleshoot")])],1)]),t._v(" "),e("p",[t._v("If that didn't help it will be required to "),e("RouterLink",{attrs:{to:"/developer/how-to/debug.html"}},[t._v("debug")]),t._v(" the system.")],1),t._v(" "),e("h2",{attrs:{id:"getting-help"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#getting-help"}},[t._v("#")]),t._v(" Getting help")]),t._v(" "),e("p",[t._v("Get help at "),e("a",{attrs:{href:"https://chevereto.com/support",target:"_blank",rel:"noopener noreferrer"}},[t._v("chevereto.com/support"),e("OutboundLink")],1)])])}),[],!1,null,null,null);e.default=s.exports}}]);
\ No newline at end of file
diff --git a/assets/js/56.39f30fca.js b/assets/js/56.39f30fca.js
new file mode 100644
index 00000000..6a8a4786
--- /dev/null
+++ b/assets/js/56.39f30fca.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{365:function(e,t,o){"use strict";o.r(t);var r=o(17),a=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"installation-guides"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installation-guides"}},[e._v("#")]),e._v(" Installation guides")]),e._v(" "),t("p",[e._v("We have prepared several guides on how you can install Chevereto. If you are new to self-hosting this is a good starting point.")]),e._v(" "),t("p",[e._v("Please note that there are more ways to install Chevereto as the software can be deployed everywhere. If you want to contribute here or if you want to purpose a new guide feel free to contact us.")]),e._v(" "),t("h2",{attrs:{id:"official-guides"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#official-guides"}},[e._v("#")]),e._v(" Official guides")]),e._v(" "),t("p",[e._v("Install Chevereto following our guides for:")]),e._v(" "),t("ul",[t("li",[e._v("Docker (Multi-arch image compatible with "),t("code",[e._v("x86_64")]),e._v(" and "),t("code",[e._v("arm64")]),e._v(")\n"),t("ul",[t("li",[t("RouterLink",{attrs:{to:"/guides/docker/"}},[e._v("Chevereto Docker")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/guides/docker/pure-docker.html"}},[e._v("Pure Docker")])],1)])]),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/guides/server/vps.html"}},[e._v("VPS")]),e._v(" (DigitalOcean, Linode, Vultr, etc)")],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/guides/cpanel/"}},[e._v("cPanel")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/guides/plesk/"}},[e._v("Plesk")])],1)]),e._v(" "),t("h2",{attrs:{id:"community-guides"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#community-guides"}},[e._v("#")]),e._v(" Community guides")]),e._v(" "),t("p",[e._v("The following guides have been contributed by users of the software.")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://mariushosting.com/how-to-install-chevereto-on-your-synology-nas/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto Synology NAS"),t("OutboundLink")],1),e._v(" (Portainer)")])])])}),[],!1,null,null,null);t.default=a.exports}}]);
\ No newline at end of file
diff --git a/assets/js/57.4b7c6343.js b/assets/js/57.4b7c6343.js
new file mode 100644
index 00000000..636c432c
--- /dev/null
+++ b/assets/js/57.4b7c6343.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{362:function(e,t,r){"use strict";r.r(t);var a=r(17),s=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"chevereto-cpanel"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-cpanel"}},[e._v("#")]),e._v(" Chevereto cPanel")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Installation service available")]),e._v(" "),t("p",[e._v("We offer a "),t("a",{attrs:{href:"https://chevereto.com/support",target:"_blank",rel:"noopener noreferrer"}},[e._v("paid installation service"),t("OutboundLink")],1),e._v(" for this guide. We will install Chevereto cPanel for you, including all the requirements and configurations.")])]),e._v(" "),t("p",[e._v("cPanel is a web panel software available in managed servers, which are machines where the system libraries are installed and provisioned by your provider. In managed servers there's no need to install packages or compile libraries as cPanel provides an user interface for configuring the server.")]),e._v(" "),t("p",[e._v("This deploy alternative doesn't require tech knowledge. But it comes at a cost as the system infrastructure is not on your control. If you are new to self-hosted and need the convenience of an easy system with user interface this is a good starting point.")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("cPanel based hosting service")]),e._v(" "),t("li",[e._v("Chevereto license (for paid edition)")])])])}),[],!1,null,null,null);t.default=s.exports}}]);
\ No newline at end of file
diff --git a/assets/js/58.a0b12336.js b/assets/js/58.a0b12336.js
new file mode 100644
index 00000000..b3708f94
--- /dev/null
+++ b/assets/js/58.a0b12336.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[58],{369:function(e,t,a){"use strict";a.r(t);var s=a(17),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"chevereto-docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-docker"}},[e._v("#")]),e._v(" Chevereto Docker")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Installation service available")]),e._v(" "),t("p",[e._v("We offer a "),t("a",{attrs:{href:"https://chevereto.com/support",target:"_blank",rel:"noopener noreferrer"}},[e._v("paid installation service"),t("OutboundLink")],1),e._v(" for this guide. We will install Chevereto Docker for you, including all the requirements and configurations.")])]),e._v(" "),t("p",[e._v("Roll your own multi-website Chevereto infrastructure with Chevereto Docker, a Docker-based system that allows you to deploy and maintain one or multiple Chevereto websites on demand.")]),e._v(" "),t("p",[e._v("By the end of this tutorial, you'll have your own Chevereto Docker up and running, capable of deploying and maintaining multiple Chevereto websites on demand, all with automatic sub-domain creation and renewable HTTPS certificates.")]),e._v(" "),t("h2",{attrs:{id:"advantages"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advantages"}},[e._v("#")]),e._v(" Advantages")]),e._v(" "),t("p",[e._v("There are several advantages of our Docker system:")]),e._v(" "),t("ul",[t("li",[e._v("Run multiple websites with ease")]),e._v(" "),t("li",[e._v("Portability")]),e._v(" "),t("li",[e._v("Easy to update")]),e._v(" "),t("li",[e._v("Automatic HTTPS setup")]),e._v(" "),t("li",[e._v("CloudFlare integration")])]),e._v(" "),t("h2",{attrs:{id:"repository"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repository"}},[e._v("#")]),e._v(" Repository")]),e._v(" "),t("p",[e._v("Check the project repository at "),t("a",{attrs:{href:"https://github.com/chevereto/docker",target:"_blank",rel:"noopener noreferrer"}},[e._v("chevereto/docker"),t("OutboundLink")],1),e._v(" for all instructions and source code.")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("To follow this guide, make sure you have:")]),e._v(" "),t("ul",[t("li",[e._v("Ubuntu server with shell access and public IP address.")]),e._v(" "),t("li",[e._v("Domain managed by CloudFlare (if using integration)")]),e._v(" "),t("li",[e._v("Chevereto license (required for the paid edition)\n"),t("ul",[t("li",[t("a",{attrs:{href:"https://chevereto.com/pricing",target:"_blank",rel:"noopener noreferrer"}},[e._v("Purchase"),t("OutboundLink")],1),e._v(" new license")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://chevereto.com/panel/license",target:"_blank",rel:"noopener noreferrer"}},[e._v("Access"),t("OutboundLink")],1),e._v(" existing purchase")])])])]),e._v(" "),t("h2",{attrs:{id:"getting-a-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#getting-a-server"}},[e._v("#")]),e._v(" Getting a server")]),e._v(" "),t("p",[e._v("You'll need a server where you can install Chevereto Docker For this guide we recommend an Ubuntu 24.04 server, but any Unix-like system will do.")]),e._v(" "),t("h2",{attrs:{id:"accessing-server-shell"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#accessing-server-shell"}},[e._v("#")]),e._v(" Accessing server shell")]),e._v(" "),t("p",[e._v("To interact with your server use a terminal emulator. Here are some terminal emulator software by operating system:")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("System")]),e._v(" "),t("th",[e._v("Software")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("macOS")]),e._v(" "),t("td",[e._v("Terminal, iTerm 2")])]),e._v(" "),t("tr",[t("td",[e._v("Windows")]),e._v(" "),t("td",[e._v("Windows Terminal, Putty")])]),e._v(" "),t("tr",[t("td",[e._v("Linux")]),e._v(" "),t("td",[e._v("Gnome Terminal, Tilix, XTerm")])])])]),e._v(" "),t("p",[e._v("Access your server via "),t("a",{attrs:{href:"https://en.wikipedia.org/wiki/Secure_Shell",target:"_blank",rel:"noopener noreferrer"}},[e._v("SSH"),t("OutboundLink")],1),e._v(" using the following command from your computer:")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("ssh")]),e._v(" root@"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("server ip"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])])]),t("p",[e._v("Make sure to check your server provider's documentation for specific instructions on accessing the shell.")]),e._v(" "),t("h2",{attrs:{id:"installing-chevereto-docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installing-chevereto-docker"}},[e._v("#")]),e._v(" Installing chevereto/docker")]),e._v(" "),t("p",[e._v("Start by installing Chevereto Docker repository and its dependencies by running the following command.")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-s")]),e._v(" https://chevereto.com/sh/ubuntu/24.04/docker.sh"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n")])])]),t("h2",{attrs:{id:"setting-up-cloudflare-integration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-up-cloudflare-integration"}},[e._v("#")]),e._v(" Setting up CloudFlare integration")]),e._v(" "),t("p",[e._v("Skip this section if you don't need CloudFlare integration to manage domain DNS.")]),e._v(" "),t("p",[e._v("Integrate Chevereto Docker with CloudFlare to automate sub-domain creation for your websites. If you aren't using CloudFlare go to "),t("a",{attrs:{href:"https://cloudflare.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("cloudflare.com"),t("OutboundLink")],1),e._v(" to get started, it is free. Add your domain to continue with this guide.")]),e._v(" "),t("p",[e._v("To setup CloudFlare with Chevereto Docker:")]),e._v(" "),t("ul",[t("li",[e._v("Navigate to the DNS configuration for your domain on CloudFlare.")]),e._v(" "),t("li",[e._v("Create a new A record, take note as it will be your "),t("code",[e._v("CLOUDFLARE_A_NAME")]),e._v(" environment value. Use the following properties:\n"),t("ul",[t("li",[e._v("Type: A")]),e._v(" "),t("li",[e._v("Name: chevereto-factory")]),e._v(" "),t("li",[e._v("Content: {server ip}")]),e._v(" "),t("li",[e._v("Proxy status: DNS only")]),e._v(" "),t("li",[e._v("TTL: Auto")])])]),e._v(" "),t("li",[e._v("Navigate to SSL/TLS configuration and under "),t("strong",[e._v("Overview")]),e._v(" set mode to "),t("strong",[e._v("Full (strict)")]),e._v(".")])]),e._v(" "),t("p",[e._v("Next create an API token, take note as it will be your "),t("code",[e._v("CLOUDFLARE_TOKEN")]),e._v(" environment value.")]),e._v(" "),t("ul",[t("li",[e._v("Go to "),t("a",{attrs:{href:"https://dash.cloudflare.com/profile/api-tokens",target:"_blank",rel:"noopener noreferrer"}},[e._v("api-tokens"),t("OutboundLink")],1),e._v(" and click on "),t("strong",[e._v("Create Token")])]),e._v(" "),t("li",[e._v("Use template "),t("strong",[e._v("Edit zone DNS")])]),e._v(" "),t("li",[e._v("Permissions: "),t("strong",[e._v("Zone DNS Edit")])]),e._v(" "),t("li",[e._v("Resources: "),t("strong",[e._v("Include Specific zone DOMAIN")])])]),e._v(" "),t("p",[e._v("You will require to take note on "),t("code",[e._v("CLOUDFLARE_ZONE_ID")]),e._v(" and "),t("code",[e._v("CLOUDFLARE_ACCOUNT_ID")]),e._v(" which you can get from the "),t("strong",[e._v("domain overview")]),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"create-configuration-env-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-configuration-env-file"}},[e._v("#")]),e._v(" Create configuration (.env file)")]),e._v(" "),t("p",[e._v("To create the configuration file run the following command and follow the on-screen instructions.")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("make")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("env")]),e._v("\n")])])]),t("ul",[t("li",[t("code",[e._v("CHEVERETO_LICENSE_KEY")]),e._v(": Your Chevereto license key (required for the paid edition, leave empty for free edition).")]),e._v(" "),t("li",[t("code",[e._v("DOMAIN")]),e._v(": The domain/hostame you'll use for spawning Chevereto installations.")]),e._v(" "),t("li",[t("code",[e._v("EMAIL_HTTPS")]),e._v(": The email to receive HTTPS certificate notifications from Let’s Encrypt.")]),e._v(" "),t("li",[t("code",[e._v("CLOUDFLARE_*")]),e._v(" options: Integration details for CloudFlare.")])]),e._v(" "),t("h2",{attrs:{id:"setting-up-system"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-up-system"}},[e._v("#")]),e._v(" Setting up system")]),e._v(" "),t("p",[e._v("By setting up the system you will enable background processing and nginx ingress HTTP proxy.")]),e._v(" "),t("p",[e._v("To set up the system run the following command:")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("make")]),e._v(" setup\n")])])]),t("h2",{attrs:{id:"building-the-chevereto-image"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#building-the-chevereto-image"}},[e._v("#")]),e._v(" Building the Chevereto image")]),e._v(" "),t("p",[e._v("If you're using free edition you can skip this step, as the image is freely available on "),t("a",{attrs:{href:"https://github.com/chevereto/chevereto/pkgs/container/chevereto",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub Container Registry"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Build the Chevereto container image for the latest release by running the following command.")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("make")]),e._v(" image\n")])])]),t("h2",{attrs:{id:"deploying"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#deploying"}},[e._v("#")]),e._v(" Deploying")]),e._v(" "),t("p",[e._v("To deploy a new website use the following command format:")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("make")]),e._v(" deploy "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("NAMESPACE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("namespace"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("ADMIN_EMAIL")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("email"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("Replace {namespace} with the desired sub-domain and {email} with the admin email for the website.")]),e._v(" "),t("p",[e._v("For example:")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("make")]),e._v(" deploy "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("NAMESPACE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("demo "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("ADMIN_EMAIL")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("email@mywebsite.com\n")])])]),t("p",[e._v("The Chevereto website will be available within seconds as the new sub-domain propagates.")]),e._v(" "),t("h2",{attrs:{id:"upgrading"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#upgrading"}},[e._v("#")]),e._v(" Upgrading")]),e._v(" "),t("p",[e._v("To upgrade you need to (1) Sync repository, (2) Re-build the container image, and (3) Update Chevereto instances.")]),e._v(" "),t("h3",{attrs:{id:"step-1-sync-repository"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-1-sync-repository"}},[e._v("#")]),e._v(" Step 1: Sync repository")]),e._v(" "),t("p",[e._v("Sync this repository to get the latest changes.")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("make")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sync")]),e._v("\n")])])]),t("p",[t("strong",[e._v("Note:")]),e._v(" If there's a new branch (for example 4.2) switch to that branch running the following command:")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" switch "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("4.2")]),e._v("\n")])])]),t("h3",{attrs:{id:"step-2-re-build-the-container-image"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-2-re-build-the-container-image"}},[e._v("#")]),e._v(" Step 2: Re-build the container image")]),e._v(" "),t("p",[e._v("Build a new container image to reflect the newest release.")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("make")]),e._v(" image\n")])])]),t("h3",{attrs:{id:"step-3-update-chevereto-instances"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-3-update-chevereto-instances"}},[e._v("#")]),e._v(" Step 3: Update Chevereto instances")]),e._v(" "),t("p",[e._v("This will down and re-up the containers and carry the required database update.")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("make")]),e._v(" update\n")])])])])}),[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/59.09055047.js b/assets/js/59.09055047.js
new file mode 100644
index 00000000..5a44e9a9
--- /dev/null
+++ b/assets/js/59.09055047.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[59],{370:function(a,t,e){"use strict";e.r(t);var s=e(17),r=Object(s.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"pure-docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#pure-docker"}},[a._v("#")]),a._v(" Pure Docker")]),a._v(" "),t("p",[a._v("This is the most basic way to run Chevereto using Docker.")]),a._v(" "),t("p",[a._v("Pure Docker refers to running Chevereto using Docker without the extra provisions of "),t("RouterLink",{attrs:{to:"/guides/docker/"}},[a._v("Chevereto Docker")]),a._v(" (nginx ingress proxy, CloudFlare integration).")],1),a._v(" "),t("h2",{attrs:{id:"build-image-paid-edition"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#build-image-paid-edition"}},[a._v("#")]),a._v(" Build image (paid edition)")]),a._v(" "),t("p",[a._v("Image building is "),t("strong",[a._v("recommended")]),a._v(" for Chevereto "),t("strong",[a._v("paid edition")]),a._v(". Skip to "),t("a",{attrs:{href:"#run-free-edition"}},[a._v("Run (free edition)")]),a._v(" if you are using Chevereto free edition or if you want to upgrade to paid edition within the application itself.")]),a._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[a._v("Workaround image building")]),a._v(" "),t("p",[a._v("If you can't build the paid image you can use the free edition image and upgrade to paid within the application itself. To do this, pass the environment "),t("code",[a._v("CHEVERETO_SERVICING=server")]),a._v(" to the container runtime and go to "),t("code",[a._v("/dashboard?license")]),a._v(" to enter the license key and proceed with the upgrading process. You will also need to setup persistent storage for the application files.")])]),a._v(" "),t("h3",{attrs:{id:"clone-repository"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#clone-repository"}},[a._v("#")]),a._v(" Clone repository")]),a._v(" "),t("p",[a._v("Clone the "),t("a",{attrs:{href:"https://github.com/chevereto/docker",target:"_blank",rel:"noopener noreferrer"}},[a._v("chevereto/docker"),t("OutboundLink")],1),a._v(" repository and create an "),t("code",[a._v(".env")]),a._v(" file with your license key:")]),a._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_LICENSE_KEY")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("your_license_key\n")])])]),t("h3",{attrs:{id:"make-image"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#make-image"}},[a._v("#")]),a._v(" Make image")]),a._v(" "),t("p",[a._v("Run the following command to create the Chevereto image:")]),a._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" image\n")])])]),t("p",[a._v("By running the above command you will generate the following tags:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("chevereto:latest")])]),a._v(" "),t("li",[t("code",[a._v("chevereto:4")])]),a._v(" "),t("li",[t("code",[a._v("chevereto:4.2")])]),a._v(" "),t("li",[t("code",[a._v("chevereto:4.2.1")])])]),a._v(" "),t("h2",{attrs:{id:"upgrading"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#upgrading"}},[a._v("#")]),a._v(" Upgrading")]),a._v(" "),t("p",[a._v("To upgrade your Chevereto application you need to (1) Sync repository, (2) Re-build the container image, and (3) Down and re-up the container.")]),a._v(" "),t("h3",{attrs:{id:"step-1-sync-repository"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-1-sync-repository"}},[a._v("#")]),a._v(" Step 1: Sync repository")]),a._v(" "),t("p",[a._v("Sync latest changes from "),t("a",{attrs:{href:"https://github.com/chevereto/docker",target:"_blank",rel:"noopener noreferrer"}},[a._v("chevereto/docker"),t("OutboundLink")],1),a._v(" repository:")]),a._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sync")]),a._v("\n")])])]),t("p",[t("strong",[a._v("Note:")]),a._v(" If there's a new branch (for example 4.2) switch to that branch running the following command:")]),a._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("git")]),a._v(" switch "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("4.3")]),a._v("\n")])])]),t("h3",{attrs:{id:"step-2-re-build-the-container-image"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-2-re-build-the-container-image"}},[a._v("#")]),a._v(" Step 2: Re-build the container image")]),a._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("make")]),a._v(" image\n")])])]),t("h3",{attrs:{id:"step-3-down-and-re-up-the-container"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-3-down-and-re-up-the-container"}},[a._v("#")]),a._v(" Step 3: Down and re-up the container")]),a._v(" "),t("p",[a._v("Down the container:")]),a._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" stop "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" chevereto\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("rm")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" chevereto\n")])])]),t("p",[a._v("Then re-up the container using the same command you used to run it the first time.")]),a._v(" "),t("h2",{attrs:{id:"run-paid-edition"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#run-paid-edition"}},[a._v("#")]),a._v(" Run (paid edition)")]),a._v(" "),t("p",[a._v("To run "),t("a",{attrs:{href:"https://chevereto.com/pricing",target:"_blank",rel:"noopener noreferrer"}},[a._v("chevereto.com"),t("OutboundLink")],1),a._v(" (paid edition) you need to pass the environment targeting your private build image, in this example "),t("code",[a._v("chevereto:latest")]),a._v(".")]),a._v(" "),t("blockquote",[t("p",[a._v("Note: For running this command you need to fill your own database credentials.")])]),a._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" run "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" chevereto "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-p")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("80")]),a._v(":80 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_DB_HOST")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("database "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_DB_USER")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("chevereto "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_DB_PASS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("user_database_password "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_DB_PORT")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("3306")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_DB_NAME")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("chevereto "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_MAX_POST_SIZE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("2G "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_MAX_UPLOAD_SIZE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("2G "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" /var/www/html/images/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n chevereto:latest\n")])])]),t("h2",{attrs:{id:"run-free-edition"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#run-free-edition"}},[a._v("#")]),a._v(" Run (free edition)")]),a._v(" "),t("p",[a._v("To run "),t("a",{attrs:{href:"https://github.com/chevereto/chevereto",target:"_blank",rel:"noopener noreferrer"}},[a._v("chevereto/chevereto"),t("OutboundLink")],1),a._v(" (Chevereto free edition) you need to pass the environment targeting public image "),t("code",[a._v("ghcr.io/chevereto/chevereto:latest")]),a._v(".")]),a._v(" "),t("p",[a._v("Alternatively, you can pass "),t("code",[a._v("chevereto/chevereto:latest")]),a._v(" which is the "),t("a",{attrs:{href:"https://hub.docker.com/r/chevereto/chevereto",target:"_blank",rel:"noopener noreferrer"}},[a._v("Chevereto mirror on DockerHub"),t("OutboundLink")],1),a._v(".")]),a._v(" "),t("blockquote",[t("p",[a._v("Note: For running this command you need to fill your own database credentials.")])]),a._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" run "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" chevereto "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-p")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("80")]),a._v(":80 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_DB_HOST")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("database "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_DB_USER")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("chevereto "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_DB_PASS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("user_database_password "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_DB_PORT")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("3306")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_DB_NAME")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("chevereto "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_MAX_POST_SIZE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("2G "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_MAX_UPLOAD_SIZE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("2G "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_SERVICING")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("server "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" /var/www/html/images/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n ghcr.io/chevereto/chevereto:latest\n")])])]),t("h2",{attrs:{id:"run-free-edition-with-application-upgrade"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#run-free-edition-with-application-upgrade"}},[a._v("#")]),a._v(" Run free edition with application upgrade")]),a._v(" "),t("p",[a._v("If you want to run the free edition and manage the application upgrade within the application itself you need to pass "),t("code",[a._v("-e CHEVERETO_SERVICING=server")]),a._v(" and setup persistent storage for the application files:")]),a._v(" "),t("blockquote",[t("p",[a._v("Note: For running this command you need to fill your own database credentials.")])]),a._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" run "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" chevereto "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-p")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("80")]),a._v(":80 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_DB_HOST")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("database "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_DB_USER")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("chevereto "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_DB_PASS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("user_database_password "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_DB_PORT")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("3306")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_DB_NAME")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("chevereto "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_MAX_POST_SIZE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("2G "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_MAX_UPLOAD_SIZE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("2G "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("CHEVERETO_SERVICING")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("server "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" /var/www/html/images/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" /var/www/html/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n ghcr.io/chevereto/chevereto:latest\n")])])]),t("h2",{attrs:{id:"using-compose"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#using-compose"}},[a._v("#")]),a._v(" Using compose")]),a._v(" "),t("p",[a._v("Create your own "),t("code",[a._v("docker-compose.yml")]),a._v(" at your project folder. See more examples at "),t("a",{attrs:{href:"https://github.com/chevereto/docker",target:"_blank",rel:"noopener noreferrer"}},[a._v("chevereto/docker"),t("OutboundLink")],1),a._v(".")]),a._v(" "),t("div",{staticClass:"language-yml extra-class"},[t("pre",{pre:!0,attrs:{class:"language-yml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("services")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("database")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("image")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" mariadb"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("jammy\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("networks")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v(" chevereto\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("volumes")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v(" database"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("/var/lib/mysql\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("restart")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" always\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("healthcheck")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("test")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"CMD"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"healthcheck.sh"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"--su-mysql"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"--connect"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("interval")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" 10s\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("timeout")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" 5s\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("retries")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("3")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("environment")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("MYSQL_ROOT_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" password\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("MYSQL_DATABASE")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" chevereto\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("MYSQL_USER")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" chevereto\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("MYSQL_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" user_database_password\n\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("php")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("image")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" chevereto/chevereto"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("latest "),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# tweak with target image to run")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("networks")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v(" chevereto\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("volumes")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v(" storage"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("/var/www/html/images/\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# - app:/var/www/html/ # uncomment when using CHEVERETO_SERVICING=server")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("restart")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" always\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("depends_on")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("database")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("condition")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" service_healthy\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("expose")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("80")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("environment")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("CHEVERETO_DB_HOST")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" database\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("CHEVERETO_DB_USER")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" chevereto\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("CHEVERETO_DB_PASS")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" user_database_password\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("CHEVERETO_DB_PORT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("3306")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("CHEVERETO_DB_NAME")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" chevereto\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("CHEVERETO_HOSTNAME")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" hostname.com\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("CHEVERETO_HOSTNAME_PATH")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" /\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("CHEVERETO_HTTPS")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("CHEVERETO_MAX_POST_SIZE")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" 2G\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("CHEVERETO_MAX_UPLOAD_SIZE")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" 2G\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# CHEVERETO_SERVICING: server # uncomment to enable application filesystem upgrades")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("volumes")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("database")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("storage")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# app: # uncomment when using CHEVERETO_SERVICING=server")]),a._v("\n\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("networks")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("chevereto")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n")])])])])}),[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/6.566c6793.js b/assets/js/6.566c6793.js
new file mode 100644
index 00000000..9c26d926
--- /dev/null
+++ b/assets/js/6.566c6793.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{284:function(e,t,a){},300:function(e,t,a){"use strict";a(284)},336:function(e,t,a){"use strict";a.r(t);var o={name:"CodeGroup",data:()=>({codeTabs:[],activeCodeTabIndex:-1}),watch:{activeCodeTabIndex(e){this.activateCodeTab(e)}},mounted(){this.loadTabs()},methods:{changeCodeTab(e){this.activeCodeTabIndex=e},loadTabs(){this.codeTabs=(this.$slots.default||[]).filter(e=>Boolean(e.componentOptions)).map((e,t)=>(""===e.componentOptions.propsData.active&&(this.activeCodeTabIndex=t),{title:e.componentOptions.propsData.title,elm:e.elm})),-1===this.activeCodeTabIndex&&this.codeTabs.length>0&&(this.activeCodeTabIndex=0),this.activateCodeTab(0)},activateCodeTab(e){this.codeTabs.forEach(e=>{e.elm&&e.elm.classList.remove("theme-code-block__active")}),this.codeTabs[e].elm&&this.codeTabs[e].elm.classList.add("theme-code-block__active")}}},s=(a(300),a(17)),c=Object(s.a)(o,(function(){var e=this,t=e._self._c;return t("ClientOnly",[t("div",{staticClass:"theme-code-group"},[t("div",{staticClass:"theme-code-group__nav"},[t("ul",{staticClass:"theme-code-group__ul"},e._l(e.codeTabs,(function(a,o){return t("li",{key:a.title,staticClass:"theme-code-group__li"},[t("button",{staticClass:"theme-code-group__nav-tab",class:{"theme-code-group__nav-tab-active":o===e.activeCodeTabIndex},on:{click:function(t){return e.changeCodeTab(o)}}},[e._v("\n "+e._s(a.title)+"\n ")])])})),0)]),e._v(" "),e._t("default"),e._v(" "),e.codeTabs.length<1?t("pre",{staticClass:"pre-blank"},[e._v("// Make sure to add code blocks to your code group")]):e._e()],2)])}),[],!1,null,"deefee04",null);t.default=c.exports}}]);
\ No newline at end of file
diff --git a/assets/js/60.6848de8f.js b/assets/js/60.6848de8f.js
new file mode 100644
index 00000000..972f47f6
--- /dev/null
+++ b/assets/js/60.6848de8f.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[60],{371:function(e,t,s){"use strict";s.r(t);var r=s(17),a=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"chevereto-plesk"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-plesk"}},[e._v("#")]),e._v(" Chevereto Plesk")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Installation service available")]),e._v(" "),t("p",[e._v("We offer a "),t("a",{attrs:{href:"https://chevereto.com/support",target:"_blank",rel:"noopener noreferrer"}},[e._v("paid installation service"),t("OutboundLink")],1),e._v(" for this guide. We will install Chevereto Plesk for you, including all the requirements and configurations.")])]),e._v(" "),t("p",[e._v("Plesk is a web panel software available in managed servers, which are machines where the system libraries are installed and provisioned by your provider. In managed servers there's no need to install packages or compile libraries as Plesk provides an user interface for configuring the server.")]),e._v(" "),t("p",[e._v("This deploy alternative doesn't require tech knowledge. But it comes at a cost as the system infrastructure is not on your control. If you are new to self-hosted and need the convenience of an easy system with user interface this is a good starting point.")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("Plesk based hosting service")]),e._v(" "),t("li",[e._v("Chevereto license (for paid edition)")])])])}),[],!1,null,null,null);t.default=a.exports}}]);
\ No newline at end of file
diff --git a/assets/js/61.9d8b7053.js b/assets/js/61.9d8b7053.js
new file mode 100644
index 00000000..69c4a2ba
--- /dev/null
+++ b/assets/js/61.9d8b7053.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{377:function(e,t,a){"use strict";a.r(t);var s=a(17),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"chevereto-vps"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-vps"}},[e._v("#")]),e._v(" Chevereto VPS")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Installation service available")]),e._v(" "),t("p",[e._v("We offer a "),t("a",{attrs:{href:"https://chevereto.com/support",target:"_blank",rel:"noopener noreferrer"}},[e._v("paid installation service"),t("OutboundLink")],1),e._v(" for this guide. We will install Chevereto VPS for you, including all the requirements and configurations.")])]),e._v(" "),t("p",[e._v("Collection of universal bash scripts to install Chevereto in any VPS (Virtual Private Server). We strongly recommend "),t("a",{attrs:{href:"https://chevereto.com/go/digitalocean",target:"_blank",rel:"noopener noreferrer"}},[e._v("DigitalOcean"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://chevereto.com/go/vultr",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vultr"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://chevereto.com/go/linode",target:"_blank",rel:"noopener noreferrer"}},[e._v("Linode"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"repository"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repository"}},[e._v("#")]),e._v(" Repository")]),e._v(" "),t("p",[e._v("We have a GitHub repository with all the commands we will need. Check the repository at "),t("a",{attrs:{href:"https://github.com/chevereto/vps",target:"_blank",rel:"noopener noreferrer"}},[e._v("chevereto/vps"),t("OutboundLink")],1),e._v(" for instructions.")]),e._v(" "),t("h2",{attrs:{id:"instructions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#instructions"}},[e._v("#")]),e._v(" Instructions")]),e._v(" "),t("ul",[t("li",[e._v("Root login to your VPS")]),e._v(" "),t("li",[e._v("Run the following script(s)")])]),e._v(" "),t("h2",{attrs:{id:"ubuntu"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ubuntu"}},[e._v("#")]),e._v(" Ubuntu")]),e._v(" "),t("blockquote",[t("p",[t("strong",[e._v("Note")]),e._v(": Ubuntu LTS 24.04 is recommended. If you run other system you may need to alter the scripts. Feel free to contribute.")])]),e._v(" "),t("h3",{attrs:{id:"prepare"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#prepare"}},[e._v("#")]),e._v(" Prepare")]),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"https://github.com/chevereto/vps/blob/4.2/ubuntu/24.04/prepare.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("prepare.sh"),t("OutboundLink")],1),e._v(" script install the system stack (PHP, Apache HTTP Web server, MySQL Server, Composer, FFmpeg and Certbot) on Ubuntu.")]),e._v(" "),t("p",[e._v("Reboot the VPS to make sure to apply any pending kernel updates:")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("systemctl "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("reboot")]),e._v("\n")])])]),t("p",[e._v("Make sure to change "),t("code",[e._v("24.04")]),e._v(" to match your Ubuntu LTS (available 20.04, 22.04 and 24.04).")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-s")]),e._v(" https://raw.githubusercontent.com/chevereto/vps/4.2/ubuntu/24.04/prepare.sh"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n")])])]),t("p",[e._v("This message will be shown on success:")]),e._v(" "),t("div",{staticClass:"language-plain extra-class"},[t("pre",{pre:!0,attrs:{class:"language-plain"}},[t("code",[e._v("[OK] Stack ready for Chevereto!\n")])])]),t("h2",{attrs:{id:"common"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#common"}},[e._v("#")]),e._v(" Common")]),e._v(" "),t("ul",[t("li",[e._v("The scripts at "),t("code",[e._v("common/")]),e._v(" will work under any unix-like system")]),e._v(" "),t("li",[e._v("Requires "),t("code",[e._v("curl")]),e._v(" and "),t("code",[e._v("unzip")])])]),e._v(" "),t("h3",{attrs:{id:"new"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#new"}},[e._v("#")]),e._v(" New")]),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"https://github.com/chevereto/vps/blob/4.2/common/new.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("new.sh"),t("OutboundLink")],1),e._v(" script downloads Chevereto and configures Apache HTTP Web server, MySQL, CRON and FFmpeg. Its purpose is to prepare for "),t("a",{attrs:{href:"https://v4-docs.chevereto.com/application/installing/installation.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto Installation"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("This is intended to brand new installations and it should run after "),t("a",{attrs:{href:"#prepare"}},[e._v("prepare")]),e._v(" as it assumes that the system stack is ready.")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-s")]),e._v(" https://raw.githubusercontent.com/chevereto/vps/4.2/common/new.sh"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n")])])]),t("h4",{attrs:{id:"notes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#notes"}},[e._v("#")]),e._v(" Notes")]),e._v(" "),t("p",[e._v("On the server:")]),e._v(" "),t("ul",[t("li",[e._v("The web root is located at "),t("code",[e._v("/var/www/html")])]),e._v(" "),t("li",[e._v("The MySQL root password is saved at "),t("code",[e._v("/root/.mysql_password")])]),e._v(" "),t("li",[e._v("Logs are at "),t("code",[e._v("/var/log/apache2")])])]),e._v(" "),t("p",[e._v("IMPORTANT:")]),e._v(" "),t("ul",[t("li",[e._v("Secure your database by running "),t("code",[e._v("mysql_secure_installation")])])]),e._v(" "),t("h3",{attrs:{id:"get"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#get"}},[e._v("#")]),e._v(" Get")]),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"https://github.com/chevereto/vps/blob/4.2/common/get.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("get.sh"),t("OutboundLink")],1),e._v(" script download and extracts Chevereto in the "),t("strong",[e._v("current working folder")]),e._v(".")]),e._v(" "),t("ul",[t("li",[t("code",[e._v("cd")]),e._v(" into the website project folder (for example "),t("code",[e._v("/var/www/html")]),e._v(")")]),e._v(" "),t("li",[e._v("Run the following command")])]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-s")]),e._v(" https://raw.githubusercontent.com/chevereto/vps/4.2/common/get.sh"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n")])])]),t("h3",{attrs:{id:"cloudflare-remote-ip"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cloudflare-remote-ip"}},[e._v("#")]),e._v(" Cloudflare remote IP")]),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"https://github.com/chevereto/vps/blob/4.2/common/cf-remoteip.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("cf-remoteip.sh"),t("OutboundLink")],1),e._v(" script syncs the known IPs for CloudFlare remote IP. This "),t("strong",[e._v("must")]),e._v(" be used if you are using CloudFlare.")]),e._v(" "),t("blockquote",[t("p",[t("strong",[e._v("Warning")]),e._v(": If you use CloudFlare and not complete this setup your Chevereto installation won't be able to retrieve real visitors IP.")])]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-s")]),e._v(" https://raw.githubusercontent.com/chevereto/vps/4.2/common/cf-remoteip.sh"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n")])])]),t("ul",[t("li",[e._v("To save the above script in your VPS:")])]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-f")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-SOJL")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n --output-dir /etc/apache2 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n https://raw.githubusercontent.com/chevereto/vps/4.2/common/cf-remoteip.sh\n")])])]),t("ul",[t("li",[e._v("To add the above script to CRON (cron.d) to keep these IP ranges auto updated:")])]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("/etc/cron.d/cf-remoteip "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<<")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("EOM\n30 3 * * * /etc/apache2/cf-remoteip.sh >/dev/null 2>&1\nEOM")]),e._v("\n")])])]),t("h2",{attrs:{id:"https-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#https-setup"}},[e._v("#")]),e._v(" HTTPS setup")]),e._v(" "),t("p",[e._v("Run the following command to get automatic renewable HTTPS thanks to certbot. Mind to change "),t("code",[e._v("example.com")]),e._v(" with the target domain(s).")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("certbot "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--apache")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" example.com\n")])])]),t("p",[e._v("If you are using "),t("code",[e._v("www.")]),e._v(" subdomain you can add it like this:")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("certbot "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--apache")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" example.com "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" www.example.com\n")])])])])}),[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/62.b76a1080.js b/assets/js/62.b76a1080.js
new file mode 100644
index 00000000..918218c8
--- /dev/null
+++ b/assets/js/62.b76a1080.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[62],{378:function(e,t,r){"use strict";r.r(t);var a=r(17),o=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"_4-0-macanudo"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_4-0-macanudo"}},[e._v("#")]),e._v(" 4.0 Macanudo")]),e._v(" "),t("p",[e._v("Chevereto v4.0 codename "),t("a",{attrs:{href:"https://dle.rae.es/macanudo",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("Macanudo")]),t("OutboundLink")],1),e._v(" is a re-write of the entire codebase. Its development took five years and it settles the ground base for the transition towards a headless API.")]),e._v(" "),t("h2",{attrs:{id:"videos"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#videos"}},[e._v("#")]),e._v(" Videos")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://www.youtube.com/watch?v=C-AZVuMEFMg",target:"_blank",rel:"noopener noreferrer"}},[e._v("Features summary"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://www.youtube.com/watch?v=TirAHdfEOR8",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto v4.0.6"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://www.youtube.com/watch?v=ClF4uCbYKdA",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto v4.0.7"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"custom-semantics"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#custom-semantics"}},[e._v("#")]),e._v(" Custom semantics")]),e._v(" "),t("p",[e._v("Fits your context.")]),e._v(" "),t("p",[e._v("Configure the terms used for all content labels including images, albums, categories and more. With semantics you can now bend Chevereto to wrap your content and context the exact way you want, providing a more engaging experience for your users.")]),e._v(" "),t("p",[e._v("With Chevereto you define the context.")]),e._v(" "),t("h2",{attrs:{id:"call-to-action-buttons"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#call-to-action-buttons"}},[e._v("#")]),e._v(" Call to action buttons")]),e._v(" "),t("p",[e._v("Get more leads.")]),e._v(" "),t("p",[e._v("Add buttons for custom actions pointing to a purchase link, messenger contact, send an email, book calendar and more. With CTA buttons Chevereto turns into an attractive gallery to showcase anything you need to offer.")]),e._v(" "),t("p",[e._v("Offer anything with Chevereto and easy plug it to the world.")]),e._v(" "),t("h2",{attrs:{id:"user-based-api"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#user-based-api"}},[e._v("#")]),e._v(" User-based API")]),e._v(" "),t("p",[e._v("API available to all users.")]),e._v(" "),t("p",[e._v("With the "),t("RouterLink",{attrs:{to:"/developer/api/api-v1.html"}},[e._v("API V1.1")]),e._v(" users can interact with Chevereto from another system, i.e. to upload screenshots using "),t("a",{attrs:{href:"https://v4-user.chevereto.com/integrations/sharex.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("ShareX"),t("OutboundLink")],1),e._v(" directly to the user's account.")],1),e._v(" "),t("p",[e._v("Enable uploading to Chevereto from anywhere.")]),e._v(" "),t("h2",{attrs:{id:"theme-palettes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#theme-palettes"}},[e._v("#")]),e._v(" Theme palettes")]),e._v(" "),t("p",[e._v("Give color.")]),e._v(" "),t("p",[e._v("User-selectable theme palettes with plenty of choices to pick from. Users can preview changes on the fly and easy switch colors from their profile menu.")]),e._v(" "),t("p",[e._v("Brings a new visual comfort layer to Chevereto.")]),e._v(" "),t("h2",{attrs:{id:"mobile-gorgeous"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mobile-gorgeous"}},[e._v("#")]),e._v(" Mobile gorgeous")]),e._v(" "),t("p",[e._v("Better on mobile devices.")]),e._v(" "),t("p",[e._v("The mobile experience has been improved with a focus in make the user interface more predictable with scrolling tabs, haptic feedback and fancy effects all-aboard the display.")]),e._v(" "),t("p",[e._v("Best mobile experience for Chevereto.")]),e._v(" "),t("h2",{attrs:{id:"faster-rendering"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#faster-rendering"}},[e._v("#")]),e._v(" Faster rendering")]),e._v(" "),t("p",[e._v("The fast and the "),t("em",[e._v("htmlorious")]),e._v(".")]),e._v(" "),t("p",[e._v("Listings, TFFB and HTML rendering have been massively improved with lazy load listings and a myriad of enhancements to make your websites load faster.")]),e._v(" "),t("p",[e._v("Delivers your Chevereto website, faster and more SEO friendly.")]),e._v(" "),t("h2",{attrs:{id:"keyboard-shortcuts"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#keyboard-shortcuts"}},[e._v("#")]),e._v(" Keyboard shortcuts")]),e._v(" "),t("p",[e._v("⌨️ Do more in less time.")]),e._v(" "),t("p",[e._v("All buttons include a keyboard shortcut binding to provide a richer user experience enabling to chop these roundtrips of the trackpad.")]),e._v(" "),t("p",[e._v("Chevereto gets delightful productive.")]),e._v(" "),t("h2",{attrs:{id:"csam-protection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#csam-protection"}},[e._v("#")]),e._v(" CSAM protection")]),e._v(" "),t("p",[e._v("Project Arachnid integration.")]),e._v(" "),t("p",[e._v("Operated by the Canadian Centre for Child Protection, "),t("a",{attrs:{href:"https://projectarachnid.ca/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Project Arachnid"),t("OutboundLink")],1),e._v(" is an innovative tool to combat the growing proliferation of child sexual abuse material (CSAM) on the internet.")]),e._v(" "),t("p",[e._v("Adds CSAM protection to Chevereto.")]),e._v(" "),t("h2",{attrs:{id:"folder-upload"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#folder-upload"}},[e._v("#")]),e._v(" Folder upload")]),e._v(" "),t("p",[e._v("Drag-and-drop without hassle.")]),e._v(" "),t("p",[e._v("Drop folder upload support. Easy as drag the folder to the uploader screen and it will queue compatible files for uploading.")]),e._v(" "),t("p",[e._v("Easier to upload tons of content to Chevereto.")]),e._v(" "),t("h2",{attrs:{id:"two-factor-auth"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#two-factor-auth"}},[e._v("#")]),e._v(" Two-factor auth")]),e._v(" "),t("p",[e._v("Time-based one-time password.")]),e._v(" "),t("p",[e._v("Authentication using TOTP enables users to strength their accounts by adding a second security layer. If someone gets access to a user password it will be useless without the two-factor device.")]),e._v(" "),t("p",[e._v("Enables safer account security for Chevereto.")]),e._v(" "),t("h2",{attrs:{id:"xrdebug"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#xrdebug"}},[e._v("#")]),e._v(" xrDebug")]),e._v(" "),t("p",[e._v("The friendly debug tool.")]),e._v(" "),t("p",[e._v("The debug process doesn't need to be for hackers neither a pain requiring to install server libraries for it. With "),t("a",{attrs:{href:"https://xrdebug.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("xrDebug"),t("OutboundLink")],1),e._v(" you can easy debug on the web browser. Enjoy a beautiful modern debugger with a focus in minimalism and message export tools.")]),e._v(" "),t("p",[e._v("Comes built-in with a debug application made by us, for us.")]),e._v(" "),t("h2",{attrs:{id:"improved-console"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#improved-console"}},[e._v("#")]),e._v(" Improved console")]),e._v(" "),t("p",[e._v("Boosted CLI tools.")]),e._v(" "),t("p",[e._v("The "),t("RouterLink",{attrs:{to:"/application/reference/cli.html"}},[e._v("application console")]),e._v(" has been improved with commands for encrypt, decrypt, password reset, settings handling and more.")],1),e._v(" "),t("p",[e._v("Provides extra console commands for Chevereto.")]),e._v(" "),t("h2",{attrs:{id:"repl"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repl"}},[e._v("#")]),e._v(" REPL")]),e._v(" "),t("p",[e._v("Stop dying all the time.")]),e._v(" "),t("p",[e._v("Built-in "),t("RouterLink",{attrs:{to:"/developer/how-to/repl.html"}},[e._v("REPL support")]),e._v(" for both console and desktop. The joy for developers, spawn an interactive context where any code can be evaluated and studied.")],1),e._v(" "),t("p",[e._v("Easy exploratory programming for the Chevereto application.")]),e._v(" "),t("h2",{attrs:{id:"web-share-api"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#web-share-api"}},[e._v("#")]),e._v(" Web Share API")]),e._v(" "),t("p",[e._v("Enhanced sharing experience.")]),e._v(" "),t("p",[e._v("With "),t("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/Web_Share_API",target:"_blank",rel:"noopener noreferrer"}},[e._v("Web Share API"),t("OutboundLink")],1),e._v(" users can enjoy seamless sharing natively integrated with their target device.")]),e._v(" "),t("p",[e._v("Powers device context aware sharing options for Chevereto.")]),e._v(" "),t("h2",{attrs:{id:"root-routing-settings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#root-routing-settings"}},[e._v("#")]),e._v(" Root routing settings")]),e._v(" "),t("p",[e._v("Own the "),t("code",[e._v("/root")]),e._v(" behavior.")]),e._v(" "),t("p",[e._v("Routing configuration enables to select what resolves at root level. Either images, users or albums, the root can be configured to suit any need.")]),e._v(" "),t("p",[e._v("Sparks freedom of choice for the most important routes for your website.")]),e._v(" "),t("h2",{attrs:{id:"uses-chevere-software"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uses-chevere-software"}},[e._v("#")]),e._v(" Uses Chevere software")]),e._v(" "),t("p",[e._v("¡Que "),t("em",[e._v("chévere")]),e._v("!")]),e._v(" "),t("p",[e._v("Includes superb software packages like "),t("a",{attrs:{href:"https://chevere.org/packages/throwable-handler",target:"_blank",rel:"noopener noreferrer"}},[e._v("ThrowableHandler"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://chevere.org/packages/xrdebug",target:"_blank",rel:"noopener noreferrer"}},[e._v("xrDebug"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://chevere.org/packages/var-dump",target:"_blank",rel:"noopener noreferrer"}},[e._v("VarDump"),t("OutboundLink")],1),e._v(". The application is made on top of an entire software foundation made for us.")]),e._v(" "),t("p",[e._v("Introduces "),t("a",{attrs:{href:"https://chevere.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevere"),t("OutboundLink")],1),e._v(" software for Chevereto.")]),e._v(" "),t("h2",{attrs:{id:"encrypted-secrets"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#encrypted-secrets"}},[e._v("#")]),e._v(" Encrypted secrets")]),e._v(" "),t("p",[e._v("Safe application secrets.")]),e._v(" "),t("p",[e._v("Sensible secrets like email provider or external storage credentials can be stored using a cipher. The encrypted secrets keep the data safe brings peace of mind when delegating the database system to another party.")]),e._v(" "),t("p",[e._v("Adds another layer of security for Chevereto systems.")]),e._v(" "),t("h2",{attrs:{id:"image-delete-link"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#image-delete-link"}},[e._v("#")]),e._v(" Image delete link")]),e._v(" "),t("p",[e._v("And it's gone!")]),e._v(" "),t("p",[e._v("Image uploads include a unique delete link which on access will permanently remove the image. This adds portability for the content building block of all installations.")]),e._v(" "),t("p",[e._v("Adds another layer for image disposal.")]),e._v(" "),t("h2",{attrs:{id:"one-click-system-update"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#one-click-system-update"}},[e._v("#")]),e._v(" One-click system update")]),e._v(" "),t("p",[e._v("Easy as pie.")]),e._v(" "),t("p",[e._v("Update the system with a single click, directly from the dashboard panel. Manage your Chevereto license with ease, and keep your system up-to-date.")]),e._v(" "),t("h2",{attrs:{id:"tons-of-small-bits"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#tons-of-small-bits"}},[e._v("#")]),e._v(" Tons of small bits")]),e._v(" "),t("p",[e._v("Little details everywhere.")]),e._v(" "),t("p",[e._v("Review the complete changelog starting at "),t("a",{attrs:{href:"https://releases.chevereto.com/4.X/4.0/4.0.0.beta.1.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("V4.0.0.beta.1"),t("OutboundLink")],1),e._v(" and carried over a year. There are tons of exciting new "),t("em",[e._v("Macanudas")]),e._v(" features in this Chevereto version.")]),e._v(" "),t("ul",[t("li",[e._v("Text-based logo")]),e._v(" "),t("li",[e._v("Zoomable listing viewer")]),e._v(" "),t("li",[e._v("Extended configurable system settings")]),e._v(" "),t("li",[e._v("Re-classified error codes")]),e._v(" "),t("li",[e._v("FontAwesome 6 on all icons")]),e._v(" "),t("li",[e._v("Better screen usage on mobile")]),e._v(" "),t("li",[e._v("More configurable restrictions for guest")]),e._v(" "),t("li",[e._v("Root-level maximum limits")]),e._v(" "),t("li",[e._v("Improved SEO")])])])}),[],!1,null,null,null);t.default=o.exports}}]);
\ No newline at end of file
diff --git a/assets/js/63.78a628fd.js b/assets/js/63.78a628fd.js
new file mode 100644
index 00000000..d84917cb
--- /dev/null
+++ b/assets/js/63.78a628fd.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{379:function(e,t,o){"use strict";o.r(t);var r=o(17),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"_4-1-pulento"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_4-1-pulento"}},[e._v("#")]),e._v(" 4.1 Pulento")]),e._v(" "),t("p",[e._v("Chevereto v4.1 codename "),t("a",{attrs:{href:"https://dle.rae.es/pulento",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("Pulento")]),t("OutboundLink")],1),e._v(" carries the development started with "),t("RouterLink",{attrs:{to:"/introduction/changelog/4.0.html"}},[e._v("Macanudo")]),e._v(". It adds Video support, customizable theme font and it starts to deliver the user-based API.")],1),e._v(" "),t("p",[e._v("With "),t("em",[e._v("Pulento")]),e._v(" Chevereto has now become an Image and Video hosting software.")]),e._v(" "),t("h2",{attrs:{id:"blog-posts"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#blog-posts"}},[e._v("#")]),e._v(" Blog posts")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://rodolfoberrios.com/2024/04/20/chevereto-4-1/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto 4.1"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.chevereto.com/upcoming/video-support/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Video support"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.chevereto.com/upcoming/user-based-api/",target:"_blank",rel:"noopener noreferrer"}},[e._v("User-based API"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"video-support"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#video-support"}},[e._v("#")]),e._v(" Video support")]),e._v(" "),t("p",[e._v("Now with support for video content.")]),e._v(" "),t("p",[e._v("Chevereto has always been the photo-sharing champion, and we're not going anywhere. But we see video as the next frontier for creative expression, and we want to be your one-stop shop for all your media needs.")]),e._v(" "),t("h2",{attrs:{id:"configurable-view-for-user-profiles"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#configurable-view-for-user-profiles"}},[e._v("#")]),e._v(" Configurable view for user profiles")]),e._v(" "),t("p",[e._v("Customize display of files or images for user profile homepage.")]),e._v(" "),t("h2",{attrs:{id:"customizable-theme-font"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#customizable-theme-font"}},[e._v("#")]),e._v(" Customizable theme font")]),e._v(" "),t("p",[e._v("Easy select Chevereto system font to fit your style.")]),e._v(" "),t("p",[e._v("You can now select the font used in the Chevereto theme, this is a system-wide setting that will affect all users, and it is a great way to make Chevereto feel more like home.")])])}),[],!1,null,null,null);t.default=s.exports}}]);
\ No newline at end of file
diff --git a/assets/js/64.3914ab44.js b/assets/js/64.3914ab44.js
new file mode 100644
index 00000000..f86ebe8d
--- /dev/null
+++ b/assets/js/64.3914ab44.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[64],{380:function(e,t,a){"use strict";a.r(t);var n=a(17),r=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"_4-2-regio"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_4-2-regio"}},[e._v("#")]),e._v(" 4.2 Regio")]),e._v(" "),t("p",[e._v("Chevereto v4.2, codenamed "),t("a",{attrs:{href:"https://dle.rae.es/regio",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("Regio")]),t("OutboundLink")],1),e._v(", takes Chevereto to new heights with enhanced cloud capabilities. It introduces powerful tag support with an advanced filtering system, more customizable restrictions for fine-tuning your website's service, and optimized storage management. This release also adds AVIF image format support, expanded content listings for albums, users, and tags, along with performance enhancements, bug fixes, and a refreshed mobile experience.")]),e._v(" "),t("h2",{attrs:{id:"blog-posts"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#blog-posts"}},[e._v("#")]),e._v(" Blog posts")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.chevereto.com/2024/10/24/chevereto-4-2/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto 4.2 (Regio)"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.chevereto.com/upcoming/tags-support/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Tags support"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"tagging-system-enhancements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#tagging-system-enhancements"}},[e._v("#")]),e._v(" Tagging System Enhancements")]),e._v(" "),t("p",[e._v("Bring context everywhere.")]),e._v(" "),t("p",[e._v("This release significantly expands tag functionality with a comprehensive filtering system, content tags, tag autocompletion, and top tags exploration. Users can now leverage combined tag filtering and automatic camera model tagging for more intuitive media organization. Additionally, metadata tags are supported in the bulk importer, streamlining large-scale content uploads.")]),e._v(" "),t("h2",{attrs:{id:"improved-storage-management"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#improved-storage-management"}},[e._v("#")]),e._v(" Improved Storage Management")]),e._v(" "),t("p",[e._v("Consolidated storage management.")]),e._v(" "),t("p",[e._v('Chevereto v4.2 brings improvements to external storage handling, adding a "Use path style endpoint" option and enabling storage removal for better resource management. Enhanced credentials handling ensures smoother integrations, while database settings for asset storage add further flexibility.')]),e._v(" "),t("h2",{attrs:{id:"avif-image-format-support"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#avif-image-format-support"}},[e._v("#")]),e._v(" AVIF Image Format Support")]),e._v(" "),t("p",[e._v("High-efficiency image compression.")]),e._v(" "),t("p",[e._v("Chevereto now supports the AVIF image format, providing users with modern, high-efficiency image compression for faster loading times and reduced storage costs, without sacrificing visual quality.")]),e._v(" "),t("h2",{attrs:{id:"system-and-performance-improvements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#system-and-performance-improvements"}},[e._v("#")]),e._v(" System and Performance Improvements")]),e._v(" "),t("p",[e._v("Enhanced backend performance.")]),e._v(" "),t("p",[e._v("This version introduces several backend improvements, including better CRON error handling, API request optimization, and enhanced session handling. Chevereto also now requires PHP 8.1, further improving stability and compatibility with modern standards.")]),e._v(" "),t("h2",{attrs:{id:"user-interface-and-mobile-experience"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#user-interface-and-mobile-experience"}},[e._v("#")]),e._v(" User Interface and Mobile Experience")]),e._v(" "),t("p",[e._v("A refined user experience.")]),e._v(" "),t("p",[e._v("A revamped mobile experience with optimized font sizing, and multi-column mobile menus. Additionally, the interface has been polished with a unified design language, new dark palette options, and numerous UX enhancements such as improved modals and bulk selection tools.")]),e._v(" "),t("p",[e._v("Chevereto v4.2 delivers an elevated user experience, greater flexibility, and enhanced performance across all platforms, making it easier than ever to manage and share media.")]),e._v(" "),t("h2",{attrs:{id:"expanded-content-listings-in-explore"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#expanded-content-listings-in-explore"}},[e._v("#")]),e._v(" Expanded Content Listings in Explore")]),e._v(" "),t("p",[e._v("Discover more content.")]),e._v(" "),t("p",[e._v("Chevereto v4.2 introduces new content listings in the Explore section, enhancing navigation and content discovery. Users can now explore a dedicated listing for albums, users, and tags, making it easier to browse through specific content types. These new listings, combined with the advanced tag filtering system, provide a more structured and intuitive way to interact with and discover media within the platform, improving the overall user experience.")]),e._v(" "),t("h2",{attrs:{id:"bug-fixes-and-stability-improvements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-and-stability-improvements"}},[e._v("#")]),e._v(" Bug Fixes and Stability Improvements")]),e._v(" "),t("p",[e._v("Quality and reliability enhancements.")]),e._v(" "),t("p",[e._v("Chevereto v4.2 also addresses a number of important bug fixes to enhance system reliability and user experience. Issues such as failing asset uploads when running in sub-directories, broken album sharing buttons, and problems with password resets have been resolved. Additionally, fixes were made to oEmbed tags, sub-album listings, and video uploads with watermarks. These corrections, alongside improvements to the listing selection tools and URL handling, ensure smoother operation and a more consistent user experience across the platform.")])])}),[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/65.4455247e.js b/assets/js/65.4455247e.js
new file mode 100644
index 00000000..0ede0f1b
--- /dev/null
+++ b/assets/js/65.4455247e.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[65],{382:function(e,t,r){"use strict";r.r(t);var o=r(17),a=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"welcome-back"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#welcome-back"}},[e._v("#")]),e._v(" Welcome back")]),e._v(" "),t("p",[e._v("Have used Chevereto before? That's awesome!")]),e._v(" "),t("p",[e._v("We have prepared a short summary in what you can expect coming from older versions of the software.")]),e._v(" "),t("h2",{attrs:{id:"from-chevereto-v3"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#from-chevereto-v3"}},[e._v("#")]),e._v(" From Chevereto V3")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://releases.chevereto.com/3.X/",target:"_blank",rel:"noopener noreferrer"}},[e._v("V3.X releases"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v("The user interface has evolved to a mature status, with new icons, gestures, keyboard shortcuts and many more. The experience is snappier as it supports PHP 8 and is built on top of "),t("a",{attrs:{href:"https://chevere.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevere"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Coming from V3, users will experience a better user interface design, improved debug experience, more system reliability and speed. V4 also introduced theme palettes, support for more login providers, user based API, two-factor authentication and database encryption.")]),e._v(" "),t("h3",{attrs:{id:"chevereto-v4-vs-v3"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-v4-vs-v3"}},[e._v("#")]),e._v(" Chevereto V4 vs V3")]),e._v(" "),t("div",{staticClass:"embed-responsive embed-responsive-16by9"},[t("iframe",{staticClass:"embed-responsive-item m-0",attrs:{src:"https://www.youtube.com/embed/ytw2Ep1Xm1A",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:""}})]),e._v(" "),t("p",[e._v("The following tables summarizes the significative differences between Chevereto V3 and Chevereto V4.")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("System")]),e._v(" "),t("th",[e._v("V4")]),e._v(" "),t("th",[e._v("V3")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("PHP")]),e._v(" "),t("td",[e._v("8")]),e._v(" "),t("td",[e._v("7.4")])])])]),e._v(" "),t("table",[t("thead",[t("tr",[t("th"),e._v(" "),t("th",[e._v("V4 Path")]),e._v(" "),t("th",[e._v("V3 Path")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("Settings")]),e._v(" "),t("td",[e._v("/app/env.php")]),e._v(" "),t("td",[e._v("/app/settings.php")])]),e._v(" "),t("tr",[t("td",[e._v("Composer")]),e._v(" "),t("td",[e._v("/app/composer.json")]),e._v(" "),t("td",[e._v("/composer.json")])]),e._v(" "),t("tr",[t("td",[t("RouterLink",{attrs:{to:"/application/reference/cli.html"}},[e._v("CLI")])],1),e._v(" "),t("td",[e._v("/app/bin/legacy")]),e._v(" "),t("td",[e._v("/cli.php")])]),e._v(" "),t("tr",[t("td",[e._v("Themes")]),e._v(" "),t("td",[e._v("/content/legacy/themes")]),e._v(" "),t("td",[e._v("/app/themes")])]),e._v(" "),t("tr",[t("td",[e._v("Peafowl")]),e._v(" "),t("td",[e._v("/content/legacy/themes/Peafowl/lib")]),e._v(" "),t("td",[e._v("/lib")])])])]),e._v(" "),t("h3",{attrs:{id:"settings-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#settings-setup"}},[e._v("#")]),e._v(" Settings setup")]),e._v(" "),t("p",[e._v("Chevereto V4 deprecates "),t("code",[e._v("app/settings.php")]),e._v(" in favor of "),t("RouterLink",{attrs:{to:"/application/configuration/environment.html"}},[e._v("environment variables")]),e._v(" for "),t("RouterLink",{attrs:{to:"/application/configuration/configuring.html"}},[e._v("configuring")]),e._v(" the application.")],1),e._v(" "),t("p",[e._v("Your existing application settings must be migrated to enable Chevereto V4 to connect to the database and configure the system.")]),e._v(" "),t("h2",{attrs:{id:"from-chevereto-free"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#from-chevereto-free"}},[e._v("#")]),e._v(" From Chevereto-Free")]),e._v(" "),t("p",[e._v("As "),t("a",{attrs:{href:"https://github.com/rodber/chevereto-free",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto-Free"),t("OutboundLink")],1),e._v(" is a fork of "),t("a",{attrs:{href:"https://releases.chevereto.com/3.X/3.16/3.16.0",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto V3.16"),t("OutboundLink")],1),e._v(", it adds on top of that branch.")]),e._v(" "),t("p",[e._v("The code at V4 is notorious newer as V4 was released on 2022. Chevereto-Free contains code old as 2020.")]),e._v(" "),t("p",[e._v("Coming from Chevereto-Free, users will experience a solid software system with active software support offering, a mature design, multi-languages and all-features included.")]),e._v(" "),t("h2",{attrs:{id:"from-chevereto-v2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#from-chevereto-v2"}},[e._v("#")]),e._v(" From Chevereto V2")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://releases.chevereto.com/2.X/",target:"_blank",rel:"noopener noreferrer"}},[e._v("V2.X releases"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v("Adding on "),t("a",{attrs:{href:"#from-chevereto-v3"}},[e._v("From Chevereto V3")]),e._v(", the system now supports multi-user and the user interface has been dramatically improved. The software got albums, profiles, search, explore and an admin dashboard.")]),e._v(" "),t("p",[e._v("Coming from V2, users will experience that Chevereto is more than a simple one-click image host but a full-featured media hosting solution.")]),e._v(" "),t("h2",{attrs:{id:"from-chevereto-v1"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#from-chevereto-v1"}},[e._v("#")]),e._v(" From Chevereto V1")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://releases.chevereto.com/1.X/",target:"_blank",rel:"noopener noreferrer"}},[e._v("V1.X releases"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v("Adding on "),t("a",{attrs:{href:"#from-chevereto-v2"}},[e._v("From Chevereto V2")]),e._v(", the software went from an mvp to a real project.")]),e._v(" "),t("p",[e._v("Coming from V1, users will experience that the software is not longer is a robust media hosting solution.")])])}),[],!1,null,null,null);t.default=a.exports}}]);
\ No newline at end of file
diff --git a/assets/js/66.dabad6be.js b/assets/js/66.dabad6be.js
new file mode 100644
index 00000000..0e68da75
--- /dev/null
+++ b/assets/js/66.dabad6be.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{381:function(e,t,o){"use strict";o.r(t);var r=o(17),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"chevereto-free"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-free"}},[e._v("#")]),e._v(" Chevereto Free")]),e._v(" "),t("p",[e._v("Chevereto Free edition is a self-hosted media-sharing solution designed for personal use. It offers core functionality to create a personal media hosting website on your own server, ensuring full control over your content and privacy.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Get Chevereto Free")]),e._v(" "),t("p",[e._v("This Chevereto edition is Open Source software available at "),t("a",{attrs:{href:"https://github.com/chevereto/chevereto",target:"_blank",rel:"noopener noreferrer"}},[e._v("chevereto/chevereto"),t("OutboundLink")],1),e._v(".")])]),e._v(" "),t("h2",{attrs:{id:"key-features"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#key-features"}},[e._v("#")]),e._v(" Key features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Image and video hosting")]),e._v(" - Upload, organize, and manage media effortlessly.")]),e._v(" "),t("li",[t("strong",[e._v("No subscriptions")]),e._v(" - A one-time setup for personal use.")])]),e._v(" "),t("h2",{attrs:{id:"limitations"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#limitations"}},[e._v("#")]),e._v(" Limitations")]),e._v(" "),t("p",[e._v("Chevereto Free edition is focused on personal use and excludes features like multi-user support, advanced storage integrations (e.g., S3), and other enhancements available in "),t("RouterLink",{attrs:{to:"/introduction/editions/chevereto-lite.html"}},[e._v("Chevereto Lite")]),e._v(" and "),t("RouterLink",{attrs:{to:"/introduction/editions/chevereto-pro.html"}},[e._v("Chevereto Pro")]),e._v(".")],1),e._v(" "),t("h2",{attrs:{id:"use-cases"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#use-cases"}},[e._v("#")]),e._v(" Use cases")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Personal media storage")]),e._v(" - A personal library for your images and video.")]),e._v(" "),t("li",[t("strong",[e._v("Hobby projects")]),e._v(" - Experiment with creating your own media-sharing platform.")]),e._v(" "),t("li",[t("strong",[e._v("Learning tool")]),e._v(" - Explore self-hosting and media management.")])]),e._v(" "),t("h2",{attrs:{id:"why-choose-chevereto-free-edition"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#why-choose-chevereto-free-edition"}},[e._v("#")]),e._v(" Why choose Chevereto Free edition?")]),e._v(" "),t("p",[e._v("Chevereto Free edition is an ideal choice for individuals seeking a simple yet powerful media-sharing solution. It's a stepping stone to Chevereto paid editions for those needing more advanced features in the future.")])])}),[],!1,null,null,null);t.default=s.exports}}]);
\ No newline at end of file
diff --git a/assets/js/67.3e566f01.js b/assets/js/67.3e566f01.js
new file mode 100644
index 00000000..d44fed7c
--- /dev/null
+++ b/assets/js/67.3e566f01.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{383:function(e,t,r){"use strict";r.r(t);var o=r(17),s=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"chevereto-lite"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-lite"}},[e._v("#")]),e._v(" Chevereto Lite")]),e._v(" "),t("p",[e._v("Chevereto Lite Edition is a lightweight, affordable media-sharing solution designed for communities of all types. It provides a simple and secure way to share and organize media within trusted groups.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Get Chevereto Lite")]),e._v(" "),t("p",[e._v("This Chevereto edition will be available for purchase at "),t("a",{attrs:{href:"https://chevereto.com/pricing",target:"_blank",rel:"noopener noreferrer"}},[e._v("chevereto.com/pricing"),t("OutboundLink")],1),e._v(".")])]),e._v(" "),t("h2",{attrs:{id:"key-features"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#key-features"}},[e._v("#")]),e._v(" Key features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Image and video hosting")]),e._v(" - Upload, organize, and manage media effortlessly.")]),e._v(" "),t("li",[t("strong",[e._v("Multi-user support")]),e._v(" - Allow users to create accounts and share content.")]),e._v(" "),t("li",[t("strong",[e._v("Community sharing")]),e._v(" - Perfect for teams, classes, sports groups, and more.")]),e._v(" "),t("li",[t("strong",[e._v("Affordable")]),e._v(" - Budget-friendly without sacrificing reliability.")])]),e._v(" "),t("h2",{attrs:{id:"benefits-for-communities"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#benefits-for-communities"}},[e._v("#")]),e._v(" Benefits for communities")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Shared spaces")]),e._v(" - Centralize media for easy access and collaboration.")]),e._v(" "),t("li",[t("strong",[e._v("Private and secure")]),e._v(" - Protect content and share only with your group.")]),e._v(" "),t("li",[t("strong",[e._v("Scalable")]),e._v(" - Transition seamlessly to "),t("RouterLink",{attrs:{to:"/introduction/editions/chevereto-pro.html"}},[e._v("Chevereto Pro")]),e._v(" edition as your community grows.")],1)]),e._v(" "),t("h2",{attrs:{id:"use-cases"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#use-cases"}},[e._v("#")]),e._v(" Use cases")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Creative collectives")]),e._v(" - Showcase and exchange creative works like art or photography.")]),e._v(" "),t("li",[t("strong",[e._v("Event organizers")]),e._v(" - Distribute photos and videos from private gatherings or celebrations.")]),e._v(" "),t("li",[t("strong",[e._v("School projects")]),e._v(" - Host and share files for group assignments or class events.")]),e._v(" "),t("li",[t("strong",[e._v("Sports teams")]),e._v(" - Share training videos, game highlights, and team updates.")]),e._v(" "),t("li",[t("strong",[e._v("Workplace teams")]),e._v(" - Centralize internal resources and media for collaboration.")]),e._v(" "),t("li",[t("strong",[e._v("Neighborhood groups")]),e._v(" - Build a local community hub for sharing moments and updates.")])]),e._v(" "),t("h2",{attrs:{id:"why-choose-chevereto-lite-edition"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#why-choose-chevereto-lite-edition"}},[e._v("#")]),e._v(" Why choose Chevereto Lite edition?")]),e._v(" "),t("p",[e._v("Chevereto Lite Edition is tailored for communities looking for an affordable, user-friendly media-sharing platform. Its simplicity, privacy-first approach, and versatility make it an ideal choice for teams, groups, and organizations of all kinds.")])])}),[],!1,null,null,null);t.default=s.exports}}]);
\ No newline at end of file
diff --git a/assets/js/68.2839881f.js b/assets/js/68.2839881f.js
new file mode 100644
index 00000000..15be7f64
--- /dev/null
+++ b/assets/js/68.2839881f.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[68],{389:function(e,t,o){"use strict";o.r(t);var s=o(17),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"chevereto-pro"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-pro"}},[e._v("#")]),e._v(" Chevereto Pro")]),e._v(" "),t("p",[e._v("Chevereto Pro edition is a robust self-hosted media-sharing platform tailored for professional and commercial use. It provides powerful tools and advanced features to create and manage a fully customizable media hosting service on your own infrastructure.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Get Chevereto Pro")]),e._v(" "),t("p",[e._v("This Chevereto edition is available for purchase at "),t("a",{attrs:{href:"https://chevereto.com/pricing",target:"_blank",rel:"noopener noreferrer"}},[e._v("chevereto.com/pricing"),t("OutboundLink")],1),e._v(".")])]),e._v(" "),t("h2",{attrs:{id:"key-features"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#key-features"}},[e._v("#")]),e._v(" Key features")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Image and video hosting")]),e._v(" - Upload, organize, and manage media effortlessly.")]),e._v(" "),t("li",[t("strong",[e._v("Multi-user support")]),e._v(" - Allow users to create accounts and share content.")]),e._v(" "),t("li",[t("strong",[e._v("Advanced storage integrations")]),e._v(" - Seamlessly connect with S3, Cloudflare R2, and more.")]),e._v(" "),t("li",[t("strong",[e._v("Copyright branding")]),e._v(" - Fully personalize the platform to match your business.")]),e._v(" "),t("li",[t("strong",[e._v("Scalable")]),e._v(" - Designed to grow with your needs.")])]),e._v(" "),t("h2",{attrs:{id:"benefits-for-professionals"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#benefits-for-professionals"}},[e._v("#")]),e._v(" Benefits for professionals")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Control and independence")]),e._v(" - Avoid relying on third-party platforms and retain full ownership of your content.")]),e._v(" "),t("li",[t("strong",[e._v("Commercial use")]),e._v(" - Ideal for agencies, businesses, and content creators.")]),e._v(" "),t("li",[t("strong",[e._v("Custom workflows")]),e._v(" - Tailor the platform to fit your operational requirements.")]),e._v(" "),t("li",[t("strong",[e._v("Chevereto Subscription")]),e._v(" - Enjoy continuous support, regular updates, and access to progressive features that keep your media hosting ahead of the curve.")])]),e._v(" "),t("h2",{attrs:{id:"use-cases"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#use-cases"}},[e._v("#")]),e._v(" Use cases")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Media hosting services")]),e._v(" - Build your own image or video hosting business.")]),e._v(" "),t("li",[t("strong",[e._v("Content management")]),e._v(" - Efficiently organize and distribute digital assets.")]),e._v(" "),t("li",[t("strong",[e._v("Agency tools")]),e._v(" - Provide a branded media-sharing platform for clients.")]),e._v(" "),t("li",[t("strong",[e._v("Internal solutions")]),e._v(" - Host private content for secure organizational access.")])]),e._v(" "),t("h2",{attrs:{id:"why-choose-chevereto-pro-edition"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#why-choose-chevereto-pro-edition"}},[e._v("#")]),e._v(" Why choose Chevereto Pro edition?")]),e._v(" "),t("p",[e._v("Chevereto Pro edition empowers businesses and professionals with a mature, feature-rich media hosting solution. Its scalability, flexibility, and strong privacy focus make it the go-to choice for those needing a reliable platform to handle media at scale.")])])}),[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/assets/js/69.082e8ca6.js b/assets/js/69.082e8ca6.js
new file mode 100644
index 00000000..fbdddbec
--- /dev/null
+++ b/assets/js/69.082e8ca6.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[69],{386:function(t,e,a){"use strict";a.r(e);var v=a(17),i=Object(v.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"compare-editions"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#compare-editions"}},[t._v("#")]),t._v(" Compare editions")]),t._v(" "),e("p",[t._v("This is a brief overview of the features available across Chevereto editions ("),e("RouterLink",{attrs:{to:"/introduction/editions/chevereto-free.html"}},[t._v("Chevereto Free")]),t._v(", "),e("RouterLink",{attrs:{to:"/introduction/editions/chevereto-lite.html"}},[t._v("Chevereto Lite")]),t._v(", and "),e("RouterLink",{attrs:{to:"/introduction/editions/chevereto-pro.html"}},[t._v("Chevereto Pro")]),t._v(").")],1),t._v(" "),e("p",[t._v("For a closer look at all the features in action, request a demo of the Chevereto Pro edition at "),e("a",{attrs:{href:"https://chevereto.com",target:"_blank",rel:"noopener noreferrer"}},[t._v("chevereto.com"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("h2",{attrs:{id:"files-supported"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#files-supported"}},[t._v("#")]),t._v(" Files supported")]),t._v(" "),e("p",[t._v("Upload and share the following media types from device file browser, drag and drop, on-the-fly device camera, clipboard, URL, ShareX and via API.")]),t._v(" "),e("ul",[e("li",[t._v("image/avif")]),t._v(" "),e("li",[t._v("image/jpeg")]),t._v(" "),e("li",[t._v("image/gif")]),t._v(" "),e("li",[t._v("image/png")]),t._v(" "),e("li",[t._v("image/webp")]),t._v(" "),e("li",[t._v("image/bmp")]),t._v(" "),e("li",[t._v("video/quicktime")]),t._v(" "),e("li",[t._v("video/mp4")]),t._v(" "),e("li",[t._v("video/webm")])]),t._v(" "),e("h2",{attrs:{id:"uploading-features"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#uploading-features"}},[t._v("#")]),t._v(" Uploading features")]),t._v(" "),e("ul",[e("li",[t._v("Image & Video uploads")]),t._v(" "),e("li",[t._v("AVIF JPEG PNG BMP GIF WEBP MOV MP4 WEBM")]),t._v(" "),e("li",[t._v("API uploading (ShareX, etc)")]),t._v(" "),e("li",[t._v("Equirectangular 360° images")]),t._v(" "),e("li",[t._v("EXIF data (read, strip)")]),t._v(" "),e("li",[t._v("Clipboard upload")]),t._v(" "),e("li",[t._v("Drag-and-drop upload (drop zone)")]),t._v(" "),e("li",[t._v("File delete link")]),t._v(" "),e("li",[t._v("Time-based expirable uploads")]),t._v(" "),e("li",[t._v("Generate thumbs & medium sized images")]),t._v(" "),e("li",[t._v("Generate video frame image")]),t._v(" "),e("li",[t._v("Duplicate media detection")]),t._v(" "),e("li",[t._v("Auto file-naming options")]),t._v(" "),e("li",[t._v("Storage modes (date, direct)")]),t._v(" "),e("li",[t._v("Upload user interface (container, page)")]),t._v(" "),e("li",[t._v("Upload plugin (PUP.js, postMessage)")]),t._v(" "),e("li",[t._v("Bulk importer")])]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Uploading features")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Free")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Lite")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Pro")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("Upload moderation")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Watermark image uploads")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Asset storage API")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("Local")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("Local")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("All")])]),t._v(" "),e("tr",[e("td",[t._v("External storage servers API")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("Local")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("Local")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("All")])])])]),t._v(" "),e("h2",{attrs:{id:"external-storage-apis"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#external-storage-apis"}},[t._v("#")]),t._v(" External storage APIs")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Storage API")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Free")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Lite")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Pro")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("Amazon S3")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("S3 compatible")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Google Cloud Storage")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Microsoft Azure")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Alibaba Cloud OSS")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("SFTP")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("FTP")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("OpenStack Swift")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Backblaze B2 (legacy)")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])])])]),t._v(" "),e("h2",{attrs:{id:"content-features"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#content-features"}},[t._v("#")]),t._v(" Content features")]),t._v(" "),e("ul",[e("li",[t._v("Listing viewer")]),t._v(" "),e("li",[t._v("Dedicated Media, Album, Tags & Users listings")]),t._v(" "),e("li",[t._v("Configure items per page")]),t._v(" "),e("li",[t._v("Listing type (paginated/endless)")]),t._v(" "),e("li",[t._v("Image listing size (fixed, fluid)")]),t._v(" "),e("li",[t._v("Configure album listing requirement")]),t._v(" "),e("li",[t._v("Configure listing columns per device (mobile, tablet, etc.)")])]),t._v(" "),e("h2",{attrs:{id:"organization-features"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#organization-features"}},[t._v("#")]),t._v(" Organization features")]),t._v(" "),e("ul",[e("li",[t._v("User defined Tags")]),t._v(" "),e("li",[t._v("Albums & Sub-albums (nested)")]),t._v(" "),e("li",[t._v("Categories")]),t._v(" "),e("li",[t._v("Search")]),t._v(" "),e("li",[t._v("Explore & Discovery")])]),t._v(" "),e("h2",{attrs:{id:"tags-features"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#tags-features"}},[t._v("#")]),t._v(" Tags features")]),t._v(" "),e("ul",[e("li",[t._v("On-the-fly tag creation")]),t._v(" "),e("li",[t._v("Tag description")]),t._v(" "),e("li",[t._v("Tag listings")]),t._v(" "),e("li",[t._v("Tag filtering (users, albums)")]),t._v(" "),e("li",[t._v("Tag autocomplete")]),t._v(" "),e("li",[t._v("Top tags")]),t._v(" "),e("li",[t._v("Exif camera model auto-tagging")])]),t._v(" "),e("h2",{attrs:{id:"album-features"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#album-features"}},[t._v("#")]),t._v(" Album features")]),t._v(" "),e("ul",[e("li",[t._v("Nested albums (breadcrumbs)")]),t._v(" "),e("li",[t._v("Album cover image")]),t._v(" "),e("li",[t._v("Album privacy")]),t._v(" "),e("li",[t._v("Album password")]),t._v(" "),e("li",[t._v("Album description")])]),t._v(" "),e("h2",{attrs:{id:"sharing-features"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#sharing-features"}},[t._v("#")]),t._v(" Sharing features")]),t._v(" "),e("ul",[e("li",[t._v("Direct link sharing")]),t._v(" "),e("li",[t._v("Sharing button")]),t._v(" "),e("li",[t._v("Media oEmbed")]),t._v(" "),e("li",[t._v("HTML, Markdown & BBCodes")]),t._v(" "),e("li",[t._v("Embed codes on upload complete")]),t._v(" "),e("li",[t._v("Embed codes on selected media")]),t._v(" "),e("li",[t._v("Embed codes media page")])]),t._v(" "),e("h2",{attrs:{id:"user-features"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#user-features"}},[t._v("#")]),t._v(" User features")]),t._v(" "),e("ul",[e("li",[t._v("User profiles")]),t._v(" "),e("li",[t._v("Private user profiles")]),t._v(" "),e("li",[t._v("User-based API")])]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("User features")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Free")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Lite")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Pro")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("Roles available")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("admin")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("admin, manager & user")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("admin, manager & user")])]),t._v(" "),e("tr",[e("td",[t._v("Multiple users")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("User management")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Guest API")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])])])]),t._v(" "),e("h2",{attrs:{id:"social-features"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#social-features"}},[t._v("#")]),t._v(" Social features")]),t._v(" "),e("ul",[e("li",[t._v("Call-to-action album buttons")]),t._v(" "),e("li",[t._v("Random button")]),t._v(" "),e("li",[t._v("Notifications")]),t._v(" "),e("li",[t._v("List users")])]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Social features")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Free")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Lite")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Pro")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("Followers")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Likes")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])])])]),t._v(" "),e("h2",{attrs:{id:"security-features"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#security-features"}},[t._v("#")]),t._v(" Security features")]),t._v(" "),e("ul",[e("li",[t._v("Two-Factor Authentication (2FA)")]),t._v(" "),e("li",[t._v("Encrypt secrets")]),t._v(" "),e("li",[t._v("Crypt-salted IDs")])]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Feature")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Free")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Lite")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Pro")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("IP banning")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Stop words")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])])])]),t._v(" "),e("h2",{attrs:{id:"admin-features"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#admin-features"}},[t._v("#")]),t._v(" Admin features")]),t._v(" "),e("ul",[e("li",[t._v("Album creation on behalf of users")]),t._v(" "),e("li",[t._v("Dashboard (admin UI)")]),t._v(" "),e("li",[t._v("System stats & usage")]),t._v(" "),e("li",[t._v("Website name")]),t._v(" "),e("li",[t._v("Website doctitle")]),t._v(" "),e("li",[t._v("Website description")]),t._v(" "),e("li",[t._v("Website privacy mode (public, private)")]),t._v(" "),e("li",[t._v("Default timezone")]),t._v(" "),e("li",[t._v("Uploadable file extensions")]),t._v(" "),e("li",[t._v("Guest uploads auto delete")]),t._v(" "),e("li",[t._v("Upload threads")]),t._v(" "),e("li",[t._v("Upload maximum image size")]),t._v(" "),e("li",[t._v("Upload Exif removal")]),t._v(" "),e("li",[t._v("Upload max file size (users and guest)")]),t._v(" "),e("li",[t._v("Upload path")]),t._v(" "),e("li",[t._v("Upload file naming")]),t._v(" "),e("li",[t._v("Upload thumb size")]),t._v(" "),e("li",[t._v("Upload medium size and dimension")]),t._v(" "),e("li",[t._v("Semantics")]),t._v(" "),e("li",[t._v("Default palette")]),t._v(" "),e("li",[t._v("Default font")]),t._v(" "),e("li",[t._v("Image load max file size")]),t._v(" "),e("li",[t._v("Image first tab")]),t._v(" "),e("li",[t._v("Embed codes (content)")]),t._v(" "),e("li",[t._v("Custom JS & CSS")]),t._v(" "),e("li",[t._v("Universal CDN support")]),t._v(" "),e("li",[e("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/languages.html#default-language",target:"_blank",rel:"noopener noreferrer"}},[t._v("Default language"),e("OutboundLink")],1)]),t._v(" "),e("li",[t._v("Logo & branding")]),t._v(" "),e("li",[t._v("Logo type (vector, image, text)")]),t._v(" "),e("li",[t._v("Logo height")]),t._v(" "),e("li",[t._v("Logo favicon image")])]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Admin features")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Free")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Lite")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Pro")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("OAuth2 login providers (Amazon, Google, Discord, etc)")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Homepage style")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Homepage cover images")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Homepage title & paragraph")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Homepage call to action")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Pages")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Lock NSFW editing")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("User min age required")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("User avatar max file size")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("User background max file size")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Guest API key")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v('Hide "Powered by Chevereto" footer')]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[e("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/languages.html#enabled-languages",target:"_blank",rel:"noopener noreferrer"}},[t._v("Enabled languages"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Routing (user, image, album)")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Routing root")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("External services")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Comments API (Disqus, JS)")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Analytics code")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Akismet spam protection")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("StopForumSpam spam protection")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("CAPTCHA (reCAPTCHA, hCaptcha)")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Configurable CAPTCHA threshold")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Shield by Project Arachnid")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("ModerateContent (auto approve, block, flag)")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Banners")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Watermark uploads (guest, user, admin)")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Watermark file toggles")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Watermark size requirement")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Watermark custom image")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Watermark position")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Watermark percentage")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Watermark margin")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Watermark opacity")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])])])]),t._v(" "),e("h2",{attrs:{id:"admin-toggles"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#admin-toggles"}},[t._v("#")]),t._v(" Admin toggles")]),t._v(" "),e("ul",[e("li",[t._v("Search (users and guest)")]),t._v(" "),e("li",[t._v("Explore (users and guest)")]),t._v(" "),e("li",[t._v("Random (users and guest)")]),t._v(" "),e("li",[t._v("NSFW listings")]),t._v(" "),e("li",[t._v("Blur NSFW content")]),t._v(" "),e("li",[t._v("NSFW on random mode")]),t._v(" "),e("li",[t._v("Banners on NSFW")]),t._v(" "),e("li",[t._v("Uploads (users and guest)")]),t._v(" "),e("li",[t._v("Uploads (URL)")]),t._v(" "),e("li",[t._v("Upload moderation")]),t._v(" "),e("li",[t._v("Upload embed codes")]),t._v(" "),e("li",[t._v("Upload redirection")]),t._v(" "),e("li",[t._v("Upload duplication")]),t._v(" "),e("li",[t._v("Upload expiration")]),t._v(" "),e("li",[t._v("Upload NSFW checkbox")]),t._v(" "),e("li",[t._v("Download button")]),t._v(" "),e("li",[t._v("Right click")]),t._v(" "),e("li",[t._v("Show Exif data")]),t._v(" "),e("li",[t._v("Social share buttons")]),t._v(" "),e("li",[t._v("Automatic updates check")]),t._v(" "),e("li",[t._v("Dump update query")]),t._v(" "),e("li",[t._v("Debug errors")])]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Admin toggles")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Free")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Lite")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Pro")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("Consent screen (age gate)")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("User sign up")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("User content delete")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("User notify sign up")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("User email confirmation")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("User email for social login")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[e("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/languages.html#auto-language",target:"_blank",rel:"noopener noreferrer"}},[t._v("Auto language"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[e("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/languages.html#language-chooser",target:"_blank",rel:"noopener noreferrer"}},[t._v("Language chooser"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("SEO URLs (media and album)")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Cookie law compliance")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Flood protection")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),e("tr",[e("td",[t._v("Watermarks")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])])])]),t._v(" "),e("h2",{attrs:{id:"system-features"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#system-features"}},[t._v("#")]),t._v(" System features")]),t._v(" "),e("ul",[e("li",[t._v("Image handling using GD or ImageMagick")]),t._v(" "),e("li",[t._v("Theme palettes (10)")]),t._v(" "),e("li",[t._v("One-click upgrade (web & CLI)")]),t._v(" "),e("li",[t._v("Maintenance mode")]),t._v(" "),e("li",[t._v("Email SMTP + phpmail()")]),t._v(" "),e("li",[t._v("Cipher ID")]),t._v(" "),e("li",[t._v("Test-email")]),t._v(" "),e("li",[t._v("Export user")]),t._v(" "),e("li",[t._v("Regenerate external storage stats")]),t._v(" "),e("li",[t._v("Migrate external storage records")]),t._v(" "),e("li",[t._v("Docker support")]),t._v(" "),e("li",[t._v("CLI console")]),t._v(" "),e("li",[t._v("Built-in debugger ("),e("a",{attrs:{href:"https://xrdebug.com",target:"_blank",rel:"noopener noreferrer"}},[t._v("xrDebug"),e("OutboundLink")],1),t._v(")")]),t._v(" "),e("li",[t._v("Built-in REPL (PsySH)")]),t._v(" "),e("li",[t._v("Supports Tinkerwel REPL")]),t._v(" "),e("li",[t._v("Queue handling")]),t._v(" "),e("li",[t._v("Configurable cache TTL")]),t._v(" "),e("li",[t._v("Hreflang")]),t._v(" "),e("li",[t._v("Session storage (files, redis)")])])])}),[],!1,null,null,null);e.default=i.exports}}]);
\ No newline at end of file
diff --git a/assets/js/7.668cd0e0.js b/assets/js/7.668cd0e0.js
new file mode 100644
index 00000000..82baed36
--- /dev/null
+++ b/assets/js/7.668cd0e0.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{337:function(t,e,s){"use strict";s.r(e);const o=["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."];var n={methods:{getMsg:()=>o[Math.floor(Math.random()*o.length)]}},h=s(17),i=Object(h.a)(n,(function(){var t=this._self._c;return t("div",{staticClass:"theme-container"},[t("div",{staticClass:"theme-default-content"},[t("h1",[this._v("404")]),this._v(" "),t("blockquote",[this._v(this._s(this.getMsg()))]),this._v(" "),t("RouterLink",{attrs:{to:"/"}},[this._v("\n Take me home.\n ")])],1)])}),[],!1,null,null,null);e.default=i.exports}}]);
\ No newline at end of file
diff --git a/assets/js/70.0acc904f.js b/assets/js/70.0acc904f.js
new file mode 100644
index 00000000..d69a07a7
--- /dev/null
+++ b/assets/js/70.0acc904f.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[70],{385:function(e,t,o){"use strict";o.r(t);var r=o(17),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"contributing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#contributing"}},[e._v("#")]),e._v(" Contributing")]),e._v(" "),t("p",[e._v("Contribute to Chevereto to show your support and care for the software. Anyone can contribute, don't hesitate to "),t("a",{attrs:{href:"https://chevereto.com/contact",target:"_blank",rel:"noopener noreferrer"}},[e._v("contact us"),t("OutboundLink")],1),e._v(" if you have something in your mind not covered here.")]),e._v(" "),t("h2",{attrs:{id:"show-and-tell"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#show-and-tell"}},[e._v("#")]),e._v(" Show and tell")]),e._v(" "),t("p",[e._v("The best way you can support us is by spreading the word about the software we do.")]),e._v(" "),t("p",[e._v("Tell others what Chevereto does and how you use it.")]),e._v(" "),t("h2",{attrs:{id:"documentation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#documentation"}},[e._v("#")]),e._v(" Documentation")]),e._v(" "),t("p",[e._v("We make typing mistakes, we may provide complex instructions hard to follow and so on. If something in this documentation is wrong or in need of extra care let us know!")]),e._v(" "),t("p",[e._v("Feel free to contribute to the "),t("a",{attrs:{href:"https://github.com/chevereto/v4-docs",target:"_blank",rel:"noopener noreferrer"}},[e._v("docs repo"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"servers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#servers"}},[e._v("#")]),e._v(" Servers")]),e._v(" "),t("p",[e._v("Chevereto is self-hosted software running in many different system configurations and use cases. While the software is capable of this feat, it may show some issues which at the same time are hard to narrow down.")]),e._v(" "),t("p",[e._v("Hosting providers and heavy users are advised to donate us servers for this purpose. We always need access to commercial available servers to make compatibility tests and checking.")])])}),[],!1,null,null,null);t.default=s.exports}}]);
\ No newline at end of file
diff --git a/assets/js/71.50ed70c5.js b/assets/js/71.50ed70c5.js
new file mode 100644
index 00000000..6b4fb336
--- /dev/null
+++ b/assets/js/71.50ed70c5.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[71],{384:function(e,t,r){"use strict";r.r(t);var o=r(17),n=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"copyright"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#copyright"}},[e._v("#")]),e._v(" Copyright")]),e._v(" "),t("p",[e._v("Copyright 2024 "),t("a",{attrs:{href:"https://rodolfoberrios.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rodolfo Berrios A."),t("OutboundLink")],1)]),e._v(" "),t("h2",{attrs:{id:"software"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#software"}},[e._v("#")]),e._v(" Software")]),e._v(" "),t("p",[e._v("Chevereto V4 is released under the "),t("strong",[e._v("Chevereto License")]),e._v(", See "),t("a",{attrs:{href:"https://chevereto.com/license",target:"_blank",rel:"noopener noreferrer"}},[e._v("License"),t("OutboundLink")],1),e._v(" for the complete license text.")]),e._v(" "),t("p",[e._v("You can use Chevereto V4 software according to the grants in the license document.")]),e._v(" "),t("h2",{attrs:{id:"documentation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#documentation"}},[e._v("#")]),e._v(" Documentation")]),e._v(" "),t("p",[e._v("Chevereto V4 documentation is licensed under the "),t("strong",[e._v("Apache License")]),e._v(", Version 2.0. See "),t("a",{attrs:{href:"https://github.com/chevereto/v4-docs/blob/main/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[e._v("LICENSE"),t("OutboundLink")],1),e._v(" for the full license text.")]),e._v(" "),t("p",[e._v("This documentation is Open Source. You can help to improve it, or modify for any purpose.")])])}),[],!1,null,null,null);t.default=n.exports}}]);
\ No newline at end of file
diff --git a/assets/js/72.6579eac1.js b/assets/js/72.6579eac1.js
new file mode 100644
index 00000000..a49cb799
--- /dev/null
+++ b/assets/js/72.6579eac1.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[72],{387:function(e,r,t){"use strict";t.r(r);var o=t(17),s=Object(o.a)({},(function(){var e=this,r=e._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"links"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#links"}},[e._v("#")]),e._v(" Links")]),e._v(" "),r("p",[e._v("Explore essential resources, updates, and related projects to get the most out of Chevereto.")]),e._v(" "),r("h2",{attrs:{id:"chevereto-v4-resources"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-v4-resources"}},[e._v("#")]),e._v(" Chevereto V4 resources")]),e._v(" "),r("p",[e._v("Dive into detailed documentation and resources specifically tailored for Chevereto V4 users. From setup to advanced features, these links will guide you through every aspect of the platform.")]),e._v(" "),r("ul",[r("li",[r("a",{attrs:{href:"https://v4-user.chevereto.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto V4 User manual"),r("OutboundLink")],1),e._v(" - User guides for Chevereto V4.")]),e._v(" "),r("li",[r("a",{attrs:{href:"https://v4-user.chevereto.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto V4 Admin manual"),r("OutboundLink")],1),e._v(" - Admin-specific documentation.")]),e._v(" "),r("li",[r("a",{attrs:{href:"https://releases.chevereto.com/4.X/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto V4 Releases"),r("OutboundLink")],1),e._v(" - Latest updates and changelogs.")])]),e._v(" "),r("h2",{attrs:{id:"general-resources"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#general-resources"}},[e._v("#")]),e._v(" General resources")]),e._v(" "),r("p",[e._v("Access a variety of platforms to stay informed, learn, and connect with the Chevereto community. These links are your gateway to official updates, tutorials, and discussions.")]),e._v(" "),r("ul",[r("li",[r("a",{attrs:{href:"https://chevereto.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Website"),r("OutboundLink")],1),e._v(" - The main hub for all things Chevereto.")]),e._v(" "),r("li",[r("a",{attrs:{href:"https://www.youtube.com/@cheveretocms",target:"_blank",rel:"noopener noreferrer"}},[e._v("YouTube"),r("OutboundLink")],1),e._v(" - Tutorials and video guides.")]),e._v(" "),r("li",[r("a",{attrs:{href:"https://chevereto.com/go/newsletter",target:"_blank",rel:"noopener noreferrer"}},[e._v("Newsletter"),r("OutboundLink")],1),e._v(" - Get updates via email.")]),e._v(" "),r("li",[r("a",{attrs:{href:"https://blog.chevereto.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Blog"),r("OutboundLink")],1),e._v(" - News and announcements.")]),e._v(" "),r("li",[r("a",{attrs:{href:"https://chevereto.com/community/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Community"),r("OutboundLink")],1),e._v(" - Forums to connect with others.")]),e._v(" "),r("li",[r("a",{attrs:{href:"https://chevereto.com/go/discord",target:"_blank",rel:"noopener noreferrer"}},[e._v("Discord"),r("OutboundLink")],1),e._v(" - Live chat with the community.")]),e._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/chevereto",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub"),r("OutboundLink")],1),e._v(" - Open source projects and contributions.")]),e._v(" "),r("li",[r("a",{attrs:{href:"https://releases.chevereto.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Releases"),r("OutboundLink")],1),e._v(" - All software release notes.")])]),e._v(" "),r("h2",{attrs:{id:"author-s-resources"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#author-s-resources"}},[e._v("#")]),e._v(" Author's resources")]),e._v(" "),r("p",[e._v("Learn more about the person behind Chevereto. Discover the author's work, contributions, and personal projects that reflect the philosophy driving the platform.")]),e._v(" "),r("ul",[r("li",[r("a",{attrs:{href:"https://rodolfoberrios.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rodolfo Berrios"),r("OutboundLink")],1),e._v(" - Creator of Chevereto.")]),e._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/rodber",target:"_blank",rel:"noopener noreferrer"}},[e._v("rodber (GitHub)"),r("OutboundLink")],1),e._v(" - Open source contributions.")])]),e._v(" "),r("h2",{attrs:{id:"related-projects"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#related-projects"}},[e._v("#")]),e._v(" Related projects")]),e._v(" "),r("p",[e._v("Chevereto is supported by complementary tools and libraries that extend its functionality and showcase its innovative roots. Explore these related projects for additional resources.")]),e._v(" "),r("ul",[r("li",[r("a",{attrs:{href:"https://chevere.org",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevere"),r("OutboundLink")],1),e._v(" - PHP development library.")]),e._v(" "),r("li",[r("a",{attrs:{href:"https://xrdebug.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("xrDebug"),r("OutboundLink")],1),e._v(" - Debugging tool.")])])])}),[],!1,null,null,null);r.default=s.exports}}]);
\ No newline at end of file
diff --git a/assets/js/73.112b5a33.js b/assets/js/73.112b5a33.js
new file mode 100644
index 00000000..ce356c00
--- /dev/null
+++ b/assets/js/73.112b5a33.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[73],{388:function(e,t,r){"use strict";r.r(t);var a=r(17),o=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"welcome-to-chevereto"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#welcome-to-chevereto"}},[e._v("#")]),e._v(" Welcome to Chevereto!")]),e._v(" "),t("div",{staticClass:"embed-responsive embed-responsive-16by9"},[t("iframe",{staticClass:"embed-responsive-item m-0",attrs:{src:"https://www.youtube.com/embed/vbV_u1Aw1XA",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:""}})]),e._v(" "),t("h2",{attrs:{id:"what-is-chevereto"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#what-is-chevereto"}},[e._v("#")]),e._v(" What is Chevereto?")]),e._v(" "),t("p",[t("a",{attrs:{href:"https://chevereto.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto"),t("OutboundLink")],1),e._v(" is a self-hosted multi-user, full-featured media hosting solution. It can be used to create a myriad of applications or to empower existing systems, all around the concept of users hosting and interacting with media content.")]),e._v(" "),t("h2",{attrs:{id:"use-cases"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#use-cases"}},[e._v("#")]),e._v(" Use cases")]),e._v(" "),t("p",[e._v("Chevereto on its core provides an image and video hosting service that you can configure to use it in different contexts. It is a turnkey system with many "),t("a",{attrs:{href:"https://chevereto.com/features",target:"_blank",rel:"noopener noreferrer"}},[e._v("features"),t("OutboundLink")],1),e._v(", including:")]),e._v(" "),t("ul",[t("li",[e._v("Image and video "),t("a",{attrs:{href:"https://chevereto.com/service-providers",target:"_blank",rel:"noopener noreferrer"}},[e._v("host/sharing service"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Media-based "),t("a",{attrs:{href:"https://chevereto.com/communities",target:"_blank",rel:"noopener noreferrer"}},[e._v("sharing communities"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Media-driven portfolios for "),t("a",{attrs:{href:"https://chevereto.com/content-creators",target:"_blank",rel:"noopener noreferrer"}},[e._v("content-creators"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Photography showcase for "),t("a",{attrs:{href:"https://chevereto.com/photographers",target:"_blank",rel:"noopener noreferrer"}},[e._v("photographers"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Image and video media asset storage")])]),e._v(" "),t("p",[e._v("Chevereto could be used to build your "),t("a",{attrs:{href:"https://chevereto.com/stores",target:"_blank",rel:"noopener noreferrer"}},[e._v("store's gallery"),t("OutboundLink")],1),e._v(", a client portfolio, manage thousand of media assets and more. From a simple media gallery up to end-users interacting with each-other, Chevereto can leverage all the load of the media sharing layer for your project.")]),e._v(" "),t("p",[e._v("The point of Chevereto is that it handles "),t("em",[e._v("very")]),e._v(" large image collections and is optimized for network usage. Chevereto has been designed to provide media hosting and sharing at large scale. It is a robust and reliable solution that can be used to power your media driven project.")]),e._v(" "),t("h2",{attrs:{id:"origin"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#origin"}},[e._v("#")]),e._v(" Origin")]),e._v(" "),t("p",[e._v("Chevereto project began in "),t("strong",[e._v("2007")]),e._v(" as a self-hosted alternative to ImageShack. It started as one-click image hosting service and here we are. Chevereto is by far the most mature, advanced and feature-rich media hosting software available.")]),e._v(" "),t("p",[e._v("You can learn the complete release history at "),t("a",{attrs:{href:"https://releases.chevereto.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("releases.chevereto.com"),t("OutboundLink")],1)])])}),[],!1,null,null,null);t.default=o.exports}}]);
\ No newline at end of file
diff --git a/assets/js/74.da72703c.js b/assets/js/74.da72703c.js
new file mode 100644
index 00000000..28c71e53
--- /dev/null
+++ b/assets/js/74.da72703c.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[74],{329:function(n,e,t){"use strict";t.r(e),t.d(e,"register",(function(){return o})),t.d(e,"unregister",(function(){return c}));var r;function o(n,e){void 0===e&&(e={});var t=e.registrationOptions;void 0===t&&(t={}),delete e.registrationOptions;var o=function(n){for(var t=[],r=arguments.length-1;r-- >0;)t[r]=arguments[r+1];e&&e[n]&&e[n].apply(e,t)};"serviceWorker"in navigator&&r.then((function(){Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/))?(!function(n,e,t){fetch(n).then((function(r){404===r.status?(e("error",new Error("Service worker not found at "+n)),c()):-1===r.headers.get("content-type").indexOf("javascript")?(e("error",new Error("Expected "+n+" to have javascript content-type, but received "+r.headers.get("content-type"))),c()):a(n,e,t)})).catch((function(n){return i(e,n)}))}(n,o,t),navigator.serviceWorker.ready.then((function(n){o("ready",n)})).catch((function(n){return i(o,n)}))):(a(n,o,t),navigator.serviceWorker.ready.then((function(n){o("ready",n)})).catch((function(n){return i(o,n)})))}))}function i(n,e){navigator.onLine||n("offline"),n("error",e)}function a(n,e,t){navigator.serviceWorker.register(n,t).then((function(n){e("registered",n),n.waiting?e("updated",n):n.onupdatefound=function(){e("updatefound",n);var t=n.installing;t.onstatechange=function(){"installed"===t.state&&(navigator.serviceWorker.controller?e("updated",n):e("cached",n))}}})).catch((function(n){return i(e,n)}))}function c(){"serviceWorker"in navigator&&navigator.serviceWorker.ready.then((function(n){n.unregister()})).catch((function(n){return i(emit,n)}))}"undefined"!=typeof window&&(r="undefined"!=typeof Promise?new Promise((function(n){return window.addEventListener("load",n)})):{then:function(n){return window.addEventListener("load",n)}})}}]);
\ No newline at end of file
diff --git a/assets/js/app.3ce00b6b.js b/assets/js/app.3ce00b6b.js
new file mode 100644
index 00000000..c3db535c
--- /dev/null
+++ b/assets/js/app.3ce00b6b.js
@@ -0,0 +1,21 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(e){function t(t){for(var r,a,s=t[0],l=t[1],c=t[2],p=0,f=[];pPromise.all([n.e(0),n.e(13)]).then(n.bind(null,334)),"components/DropdownLink":()=>Promise.all([n.e(0),n.e(14)]).then(n.bind(null,258)),"components/DropdownTransition":()=>Promise.all([n.e(0),n.e(26)]).then(n.bind(null,246)),"components/Home":()=>Promise.all([n.e(0),n.e(16)]).then(n.bind(null,287)),"components/NavLink":()=>n.e(29).then(n.bind(null,245)),"components/NavLinks":()=>Promise.all([n.e(0),n.e(12)]).then(n.bind(null,270)),"components/Navbar":()=>Promise.all([n.e(0),n.e(1)]).then(n.bind(null,328)),"components/Page":()=>Promise.all([n.e(0),n.e(11)]).then(n.bind(null,288)),"components/PageEdit":()=>Promise.all([n.e(0),n.e(17)]).then(n.bind(null,272)),"components/PageNav":()=>Promise.all([n.e(0),n.e(15)]).then(n.bind(null,273)),"components/Sidebar":()=>Promise.all([n.e(0),n.e(10)]).then(n.bind(null,289)),"components/SidebarButton":()=>Promise.all([n.e(0),n.e(27)]).then(n.bind(null,290)),"components/SidebarGroup":()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,271)),"components/SidebarLink":()=>Promise.all([n.e(0),n.e(21)]).then(n.bind(null,259)),"components/SidebarLinks":()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,257)),"global-components/Badge":()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,338)),"global-components/CodeBlock":()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,335)),"global-components/CodeGroup":()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,336)),"layouts/404":()=>n.e(7).then(n.bind(null,337)),"layouts/Layout":()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,332)),NotFound:()=>n.e(7).then(n.bind(null,337)),Layout:()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,332))},i={"v-191607df":()=>n.e(35).then(n.bind(null,339)),"v-418937bc":()=>n.e(36).then(n.bind(null,340)),"v-2a95a87c":()=>n.e(39).then(n.bind(null,341)),"v-670c6a88":()=>n.e(38).then(n.bind(null,342)),"v-315e2b7c":()=>n.e(40).then(n.bind(null,343)),"v-05aac9bc":()=>n.e(37).then(n.bind(null,344)),"v-31df7c30":()=>n.e(41).then(n.bind(null,345)),"v-a8bfd188":()=>n.e(43).then(n.bind(null,346)),"v-48c2ce08":()=>n.e(42).then(n.bind(null,347)),"v-6f525128":()=>n.e(44).then(n.bind(null,348)),"v-54bc8a42":()=>n.e(45).then(n.bind(null,349)),"v-1778dd40":()=>n.e(46).then(n.bind(null,350)),"v-0a8420e0":()=>n.e(47).then(n.bind(null,351)),"v-0b251c06":()=>n.e(30).then(n.bind(null,352)),"v-41910a10":()=>n.e(50).then(n.bind(null,353)),"v-77606048":()=>n.e(48).then(n.bind(null,354)),"v-125aca44":()=>n.e(49).then(n.bind(null,355)),"v-3a4790d6":()=>n.e(51).then(n.bind(null,356)),"v-df47199c":()=>n.e(52).then(n.bind(null,357)),"v-39ac771c":()=>n.e(53).then(n.bind(null,358)),"v-6a9553f4":()=>n.e(54).then(n.bind(null,359)),"v-2392f608":()=>n.e(31).then(n.bind(null,360)),"v-ec13b648":()=>n.e(55).then(n.bind(null,361)),"v-78f48acb":()=>n.e(57).then(n.bind(null,362)),"v-0423b926":()=>n.e(23).then(n.bind(null,363)),"v-d9c3d388":()=>n.e(22).then(n.bind(null,364)),"v-f7ae5da2":()=>n.e(56).then(n.bind(null,365)),"v-f30d9700":()=>n.e(32).then(n.bind(null,366)),"v-5ddb1e5c":()=>n.e(33).then(n.bind(null,367)),"v-796bfcdc":()=>n.e(18).then(n.bind(null,368)),"v-4bc1824d":()=>n.e(58).then(n.bind(null,369)),"v-1cab1548":()=>n.e(59).then(n.bind(null,370)),"v-5adf9a22":()=>n.e(60).then(n.bind(null,371)),"v-2e71813e":()=>n.e(19).then(n.bind(null,372)),"v-ea028cc8":()=>n.e(20).then(n.bind(null,373)),"v-9de05e08":()=>n.e(24).then(n.bind(null,374)),"v-91f2b438":()=>n.e(28).then(n.bind(null,375)),"v-2e554f7c":()=>n.e(34).then(n.bind(null,376)),"v-6b0f5e08":()=>n.e(61).then(n.bind(null,377)),"v-0633c108":()=>n.e(62).then(n.bind(null,378)),"v-72da307a":()=>n.e(63).then(n.bind(null,379)),"v-2e637d10":()=>n.e(64).then(n.bind(null,380)),"v-33e4c286":()=>n.e(66).then(n.bind(null,381)),"v-11167d5c":()=>n.e(65).then(n.bind(null,382)),"v-11572afc":()=>n.e(67).then(n.bind(null,383)),"v-1c59c924":()=>n.e(71).then(n.bind(null,384)),"v-4b514b9c":()=>n.e(70).then(n.bind(null,385)),"v-425187c8":()=>n.e(69).then(n.bind(null,386)),"v-3d490e0a":()=>n.e(72).then(n.bind(null,387)),"v-2a490f38":()=>n.e(73).then(n.bind(null,388)),"v-399dc3c8":()=>n.e(68).then(n.bind(null,389))};function a(e){const t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}const s=/-(\w)/g,l=a(e=>e.replace(s,(e,t)=>t?t.toUpperCase():"")),c=/\B([A-Z])/g,u=a(e=>e.replace(c,"-$1").toLowerCase()),p=a(e=>e.charAt(0).toUpperCase()+e.slice(1));function f(e,t){if(!t)return;if(e(t))return e(t);return t.includes("-")?e(p(l(t))):e(p(t))||e(u(t))}const d=Object.assign({},o,i),h=e=>d[e],v=e=>i[e],g=e=>o[e],m=e=>r.a.component(e);function y(e){return f(v,e)}function b(e){return f(g,e)}function _(e){return f(h,e)}function w(e){return f(m,e)}function x(...e){return Promise.all(e.filter(e=>e).map(async e=>{if(!w(e)&&_(e)){const t=await _(e)();r.a.component(e,t.default)}}))}function k(e,t,n){switch(t){case"components":e[t]||(e[t]={}),Object.assign(e[t],n);break;case"mixins":e[t]||(e[t]=[]),e[t].push(...n);break;default:throw new Error("Unknown option name.")}}function C(e,t){const{$localePath:n}=e;return"object"==typeof t&&t[n]?t[n]:t}function O(e,t){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[e]=t)}},function(e,t,n){"use strict";n.d(t,"a",(function(){return Wn}));
+/*!
+ * Vue.js v2.7.14
+ * (c) 2014-2022 Evan You
+ * Released under the MIT License.
+ */
+var r=Object.freeze({}),o=Array.isArray;function i(e){return null==e}function a(e){return null!=e}function s(e){return!0===e}function l(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function c(e){return"function"==typeof e}function u(e){return null!==e&&"object"==typeof e}var p=Object.prototype.toString;function f(e){return"[object Object]"===p.call(e)}function d(e){return"[object RegExp]"===p.call(e)}function h(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function v(e){return a(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function g(e){return null==e?"":Array.isArray(e)||f(e)&&e.toString===p?JSON.stringify(e,null,2):String(e)}function m(e){var t=parseFloat(e);return isNaN(t)?e:t}function y(e,t){for(var n=Object.create(null),r=e.split(","),o=0;o-1)return e.splice(r,1)}}var w=Object.prototype.hasOwnProperty;function x(e,t){return w.call(e,t)}function k(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var C=/-(\w)/g,O=k((function(e){return e.replace(C,(function(e,t){return t?t.toUpperCase():""}))})),P=k((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),S=/\B([A-Z])/g,E=k((function(e){return e.replace(S,"-$1").toLowerCase()}));var j=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function $(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function A(e,t){for(var n in t)e[n]=t[n];return e}function T(e){for(var t={},n=0;n0,Y=X&&X.indexOf("edge/")>0;X&&X.indexOf("android");var Q=X&&/iphone|ipad|ipod|ios/.test(X);X&&/chrome\/\d+/.test(X),X&&/phantomjs/.test(X);var ee,te=X&&X.match(/firefox\/(\d+)/),ne={}.watch,re=!1;if(K)try{var oe={};Object.defineProperty(oe,"passive",{get:function(){re=!0}}),window.addEventListener("test-passive",null,oe)}catch(e){}var ie=function(){return void 0===ee&&(ee=!K&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),ee},ae=K&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function se(e){return"function"==typeof e&&/native code/.test(e.toString())}var le,ce="undefined"!=typeof Symbol&&se(Symbol)&&"undefined"!=typeof Reflect&&se(Reflect.ownKeys);le="undefined"!=typeof Set&&se(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ue=null;function pe(e){void 0===e&&(e=null),e||ue&&ue._scope.off(),ue=e,e&&e._scope.on()}var fe=function(){function e(e,t,n,r,o,i,a,s){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=t&&t.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(e.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),e}(),de=function(e){void 0===e&&(e="");var t=new fe;return t.text=e,t.isComment=!0,t};function he(e){return new fe(void 0,void 0,void 0,String(e))}function ve(e){var t=new fe(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isComment=e.isComment,t.fnContext=e.fnContext,t.fnOptions=e.fnOptions,t.fnScopeId=e.fnScopeId,t.asyncMeta=e.asyncMeta,t.isCloned=!0,t}var ge=0,me=[],ye=function(){function e(){this._pending=!1,this.id=ge++,this.subs=[]}return e.prototype.addSub=function(e){this.subs.push(e)},e.prototype.removeSub=function(e){this.subs[this.subs.indexOf(e)]=null,this._pending||(this._pending=!0,me.push(this))},e.prototype.depend=function(t){e.target&&e.target.addDep(this)},e.prototype.notify=function(e){var t=this.subs.filter((function(e){return e}));for(var n=0,r=t.length;n0&&(Xe((c=e(c,"".concat(n||"","_").concat(r)))[0])&&Xe(p)&&(f[u]=he(p.text+c[0].text),c.shift()),f.push.apply(f,c)):l(c)?Xe(p)?f[u]=he(p.text+c):""!==c&&f.push(he(c)):Xe(c)&&Xe(p)?f[u]=he(p.text+c.text):(s(t._isVList)&&a(c.tag)&&i(c.key)&&a(n)&&(c.key="__vlist".concat(n,"_").concat(r,"__")),f.push(c)));return f}(e):void 0}function Xe(e){return a(e)&&a(e.text)&&!1===e.isComment}function Ze(e,t){var n,r,i,s,l=null;if(o(e)||"string"==typeof e)for(l=new Array(e.length),n=0,r=e.length;n0,s=t?!!t.$stable:!a,l=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(s&&o&&o!==r&&l===o.$key&&!a&&!o.$hasNormal)return o;for(var c in i={},t)t[c]&&"$"!==c[0]&&(i[c]=vt(e,n,c,t[c]))}else i={};for(var u in n)u in i||(i[u]=gt(n,u));return t&&Object.isExtensible(t)&&(t._normalized=i),q(i,"$stable",s),q(i,"$key",l),q(i,"$hasNormal",a),i}function vt(e,t,n,r){var i=function(){var t=ue;pe(e);var n=arguments.length?r.apply(null,arguments):r({}),i=(n=n&&"object"==typeof n&&!o(n)?[n]:Ke(n))&&n[0];return pe(t),n&&(!i||1===n.length&&i.isComment&&!dt(i))?void 0:n};return r.proxy&&Object.defineProperty(t,n,{get:i,enumerable:!0,configurable:!0}),i}function gt(e,t){return function(){return e[t]}}function mt(e){return{get attrs(){if(!e._attrsProxy){var t=e._attrsProxy={};q(t,"_v_attr_proxy",!0),yt(t,e.$attrs,r,e,"$attrs")}return e._attrsProxy},get listeners(){e._listenersProxy||yt(e._listenersProxy={},e.$listeners,r,e,"$listeners");return e._listenersProxy},get slots(){return function(e){e._slotsProxy||_t(e._slotsProxy={},e.$scopedSlots);return e._slotsProxy}(e)},emit:j(e.$emit,e),expose:function(t){t&&Object.keys(t).forEach((function(n){return Ne(e,t,n)}))}}}function yt(e,t,n,r,o){var i=!1;for(var a in t)a in e?t[a]!==n[a]&&(i=!0):(i=!0,bt(e,a,r,o));for(var a in e)a in t||(i=!0,delete e[a]);return i}function bt(e,t,n,r){Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){return n[r][t]}})}function _t(e,t){for(var n in t)e[n]=t[n];for(var n in e)n in t||delete e[n]}var wt=null;function xt(e,t){return(e.__esModule||ce&&"Module"===e[Symbol.toStringTag])&&(e=e.default),u(e)?t.extend(e):e}function kt(e){if(o(e))for(var t=0;tdocument.createEvent("Event").timeStamp&&(ln=function(){return cn.now()})}var un=function(e,t){if(e.post){if(!t.post)return 1}else if(t.post)return-1;return e.id-t.id};function pn(){var e,t;for(sn=ln(),on=!0,en.sort(un),an=0;anan&&en[n].id>e.id;)n--;en.splice(n+1,0,e)}else en.push(e);rn||(rn=!0,Dt(pn))}}function dn(e,t){if(e){for(var n=Object.create(null),r=ce?Reflect.ownKeys(e):Object.keys(e),o=0;o-1)if(i&&!x(o,"default"))a=!1;else if(""===a||a===E(e)){var l=zn(String,o.type);(l<0||s-1:"string"==typeof e?e.split(",").indexOf(t)>-1:!!d(e)&&e.test(t)}function Zn(e,t){var n=e.cache,r=e.keys,o=e._vnode;for(var i in n){var a=n[i];if(a){var s=a.name;s&&!t(s)&&Jn(n,i,r,o)}}}function Jn(e,t,n,r){var o=e[t];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),e[t]=null,_(n,t)}!function(e){e.prototype._init=function(e){var t=this;t._uid=Vn++,t._isVue=!0,t.__v_skip=!0,t._scope=new Fe(!0),t._scope._vm=!0,e&&e._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(t,e):t.$options=jn(qn(t.constructor),e||{},t),t._renderProxy=t,t._self=t,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._provided=n?n._provided:Object.create(null),e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(t),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&Kt(e,t)}(t),function(e){e._vnode=null,e._staticTrees=null;var t=e.$options,n=e.$vnode=t._parentVnode,o=n&&n.context;e.$slots=pt(t._renderChildren,o),e.$scopedSlots=n?ht(e.$parent,n.data.scopedSlots,e.$slots):r,e._c=function(t,n,r,o){return Ct(e,t,n,r,o,!1)},e.$createElement=function(t,n,r,o){return Ct(e,t,n,r,o,!0)};var i=n&&n.data;Ae(e,"$attrs",i&&i.attrs||r,null,!0),Ae(e,"$listeners",t._parentListeners||r,null,!0)}(t),Qt(t,"beforeCreate",void 0,!1),function(e){var t=dn(e.$options.inject,e);t&&(Se(!1),Object.keys(t).forEach((function(n){Ae(e,n,t[n])})),Se(!0))}(t),Dn(t),function(e){var t=e.$options.provide;if(t){var n=c(t)?t.call(e):t;if(!u(n))return;for(var r=He(e),o=ce?Reflect.ownKeys(n):Object.keys(n),i=0;i1?$(n):n;for(var r=$(arguments,1),o='event handler for "'.concat(e,'"'),i=0,a=n.length;iparseInt(this.max)&&Jn(e,t[0],t,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)Jn(this.cache,e,this.keys)},mounted:function(){var e=this;this.cacheVNode(),this.$watch("include",(function(t){Zn(e,(function(e){return Xn(t,e)}))})),this.$watch("exclude",(function(t){Zn(e,(function(e){return!Xn(t,e)}))}))},updated:function(){this.cacheVNode()},render:function(){var e=this.$slots.default,t=kt(e),n=t&&t.componentOptions;if(n){var r=Kn(n),o=this.include,i=this.exclude;if(o&&(!r||!Xn(o,r))||i&&r&&Xn(i,r))return t;var a=this.cache,s=this.keys,l=null==t.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):t.key;a[l]?(t.componentInstance=a[l].componentInstance,_(s,l),s.push(l)):(this.vnodeToCache=t,this.keyToCache=l),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return H}};Object.defineProperty(e,"config",t),e.util={warn:xn,extend:A,mergeOptions:jn,defineReactive:Ae},e.set=Te,e.delete=Le,e.nextTick=Dt,e.observable=function(e){return $e(e),e},e.options=Object.create(null),U.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,A(e.options.components,Qn),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=$(arguments,1);return n.unshift(this),c(e.install)?e.install.apply(e,n):c(e)&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=jn(this.options,e),this}}(e),Gn(e),function(e){U.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&f(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&c(n)&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}(e)}(Wn),Object.defineProperty(Wn.prototype,"$isServer",{get:ie}),Object.defineProperty(Wn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Wn,"FunctionalRenderContext",{value:hn}),Wn.version="2.7.14";var er=y("style,class"),tr=y("input,textarea,option,select,progress"),nr=y("contenteditable,draggable,spellcheck"),rr=y("events,caret,typing,plaintext-only"),or=y("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),ir="http://www.w3.org/1999/xlink",ar=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},sr=function(e){return ar(e)?e.slice(6,e.length):""},lr=function(e){return null==e||!1===e};function cr(e){for(var t=e.data,n=e,r=e;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(t=ur(r.data,t));for(;a(n=n.parent);)n&&n.data&&(t=ur(t,n.data));return function(e,t){if(a(e)||a(t))return pr(e,fr(t));return""}(t.staticClass,t.class)}function ur(e,t){return{staticClass:pr(e.staticClass,t.staticClass),class:a(e.class)?[e.class,t.class]:t.class}}function pr(e,t){return e?t?e+" "+t:e:t||""}function fr(e){return Array.isArray(e)?function(e){for(var t,n="",r=0,o=e.length;r-1?Ir(e,t,n):or(t)?lr(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):nr(t)?e.setAttribute(t,function(e,t){return lr(t)||"false"===t?"false":"contenteditable"===e&&rr(t)?t:"true"}(t,n)):ar(t)?lr(n)?e.removeAttributeNS(ir,sr(t)):e.setAttributeNS(ir,t,n):Ir(e,t,n)}function Ir(e,t,n){if(lr(n))e.removeAttribute(t);else{if(Z&&!J&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",r)};e.addEventListener("input",r),e.__ieph=!0}e.setAttribute(t,n)}}var Mr={create:Rr,update:Rr};function Dr(e,t){var n=t.elm,r=t.data,o=e.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var s=cr(t),l=n._transitionClasses;a(l)&&(s=pr(s,fr(l))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Nr,Ur={create:Dr,update:Dr};function Fr(e,t,n){var r=Nr;return function o(){var i=t.apply(null,arguments);null!==i&&Vr(e,o,n,r)}}var Hr=$t&&!(te&&Number(te[1])<=53);function Br(e,t,n,r){if(Hr){var o=sn,i=t;t=i._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=o||e.timeStamp<=0||e.target.ownerDocument!==document)return i.apply(this,arguments)}}Nr.addEventListener(e,t,re?{capture:n,passive:r}:n)}function Vr(e,t,n,r){(r||Nr).removeEventListener(e,t._wrapper||t,n)}function qr(e,t){if(!i(e.data.on)||!i(t.data.on)){var n=t.data.on||{},r=e.data.on||{};Nr=t.elm||e.elm,function(e){if(a(e.__r)){var t=Z?"change":"input";e[t]=[].concat(e.__r,e[t]||[]),delete e.__r}a(e.__c)&&(e.change=[].concat(e.__c,e.change||[]),delete e.__c)}(n),qe(n,r,Br,Vr,Fr,t.context),Nr=void 0}}var Wr,Gr={create:qr,update:qr,destroy:function(e){return qr(e,kr)}};function Kr(e,t){if(!i(e.data.domProps)||!i(t.data.domProps)){var n,r,o=t.elm,l=e.data.domProps||{},c=t.data.domProps||{};for(n in(a(c.__ob__)||s(c._v_attr_proxy))&&(c=t.data.domProps=A({},c)),l)n in c||(o[n]="");for(n in c){if(r=c[n],"textContent"===n||"innerHTML"===n){if(t.children&&(t.children.length=0),r===l[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var u=i(r)?"":String(r);Xr(o,u)&&(o.value=u)}else if("innerHTML"===n&&vr(o.tagName)&&i(o.innerHTML)){(Wr=Wr||document.createElement("div")).innerHTML="");for(var p=Wr.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;p.firstChild;)o.appendChild(p.firstChild)}else if(r!==l[n])try{o[n]=r}catch(e){}}}}function Xr(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var n=e.value,r=e._vModifiers;if(a(r)){if(r.number)return m(n)!==m(t);if(r.trim)return n.trim()!==t.trim()}return n!==t}(e,t))}var Zr={create:Kr,update:Kr},Jr=k((function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach((function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}})),t}));function Yr(e){var t=Qr(e.style);return e.staticStyle?A(e.staticStyle,t):t}function Qr(e){return Array.isArray(e)?T(e):"string"==typeof e?Jr(e):e}var eo,to=/^--/,no=/\s*!important$/,ro=function(e,t,n){if(to.test(t))e.style.setProperty(t,n);else if(no.test(n))e.style.setProperty(E(t),n.replace(no,""),"important");else{var r=io(t);if(Array.isArray(n))for(var o=0,i=n.length;o-1?t.split(lo).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=" ".concat(e.getAttribute("class")||""," ");n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function uo(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(lo).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" ".concat(e.getAttribute("class")||""," "),r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function po(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&A(t,fo(e.name||"v")),A(t,e),t}return"string"==typeof e?fo(e):void 0}}var fo=k((function(e){return{enterClass:"".concat(e,"-enter"),enterToClass:"".concat(e,"-enter-to"),enterActiveClass:"".concat(e,"-enter-active"),leaveClass:"".concat(e,"-leave"),leaveToClass:"".concat(e,"-leave-to"),leaveActiveClass:"".concat(e,"-leave-active")}})),ho=K&&!J,vo="transition",go="transitionend",mo="animation",yo="animationend";ho&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(vo="WebkitTransition",go="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(mo="WebkitAnimation",yo="webkitAnimationEnd"));var bo=K?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function _o(e){bo((function(){bo(e)}))}function wo(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),co(e,t))}function xo(e,t){e._transitionClasses&&_(e._transitionClasses,t),uo(e,t)}function ko(e,t,n){var r=Oo(e,t),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s="transition"===o?go:yo,l=0,c=function(){e.removeEventListener(s,u),n()},u=function(t){t.target===e&&++l>=a&&c()};setTimeout((function(){l0&&(n="transition",u=a,p=i.length):"animation"===t?c>0&&(n="animation",u=c,p=l.length):p=(n=(u=Math.max(a,c))>0?a>c?"transition":"animation":null)?"transition"===n?i.length:l.length:0,{type:n,timeout:u,propCount:p,hasTransform:"transition"===n&&Co.test(r[vo+"Property"])}}function Po(e,t){for(;e.length1}function To(e,t){!0!==t.data.show&&Eo(t)}var Lo=function(e){var t,n,r={},c=e.modules,u=e.nodeOps;for(t=0;th?_(e,i(n[m+1])?null:n[m+1].elm,n,d,m,r):d>m&&x(t,p,h)}(p,v,m,n,c):a(m)?(a(e.text)&&u.setTextContent(p,""),_(p,null,m,0,m.length-1,n)):a(v)?x(v,0,v.length-1):a(e.text)&&u.setTextContent(p,""):e.text!==t.text&&u.setTextContent(p,t.text),a(h)&&a(d=h.hook)&&a(d=d.postpatch)&&d(e,t)}}}function P(e,t,n){if(s(n)&&a(e.parent))e.parent.data.pendingInsert=t;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(I(Do(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));o||(e.selectedIndex=-1)}}function Mo(e,t){return t.every((function(t){return!I(t,e)}))}function Do(e){return"_value"in e?e._value:e.value}function No(e){e.target.composing=!0}function Uo(e){e.target.composing&&(e.target.composing=!1,Fo(e.target,"input"))}function Fo(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Ho(e){return!e.componentInstance||e.data&&e.data.transition?e:Ho(e.componentInstance._vnode)}var Bo={model:Ro,show:{bind:function(e,t,n){var r=t.value,o=(n=Ho(n)).data&&n.data.transition,i=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;r&&o?(n.data.show=!0,Eo(n,(function(){e.style.display=i}))):e.style.display=r?i:"none"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=Ho(n)).data&&n.data.transition?(n.data.show=!0,r?Eo(n,(function(){e.style.display=e.__vOriginalDisplay})):jo(n,(function(){e.style.display="none"}))):e.style.display=r?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,r,o){o||(e.style.display=e.__vOriginalDisplay)}}},Vo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function qo(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?qo(kt(t.children)):e}function Wo(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var o=n._parentListeners;for(var r in o)t[O(r)]=o[r];return t}function Go(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var Ko=function(e){return e.tag||dt(e)},Xo=function(e){return"show"===e.name},Zo={name:"transition",props:Vo,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(Ko)).length){0;var r=this.mode;0;var o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var i=qo(o);if(!i)return o;if(this._leaving)return Go(e,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:l(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var s=(i.data||(i.data={})).transition=Wo(this),c=this._vnode,u=qo(c);if(i.data.directives&&i.data.directives.some(Xo)&&(i.data.show=!0),u&&u.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(i,u)&&!dt(u)&&(!u.componentInstance||!u.componentInstance._vnode.isComment)){var p=u.data.transition=A({},s);if("out-in"===r)return this._leaving=!0,We(p,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),Go(e,o);if("in-out"===r){if(dt(i))return c;var f,d=function(){f()};We(s,"afterEnter",d),We(s,"enterCancelled",d),We(p,"delayLeave",(function(e){f=e}))}}return o}}},Jo=A({tag:String,moveClass:String},Vo);function Yo(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function Qo(e){e.data.newPos=e.elm.getBoundingClientRect()}function ei(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,o=t.top-n.top;if(r||o){e.data.moved=!0;var i=e.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}delete Jo.mode;var ti={Transition:Zo,TransitionGroup:{props:Jo,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var o=Zt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,o(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Wo(this),s=0;s-1?mr[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:mr[e]=/HTMLUnknownElement/.test(t.toString())},A(Wn.options.directives,Bo),A(Wn.options.components,ti),Wn.prototype.__patch__=K?Lo:L,Wn.prototype.$mount=function(e,t){return function(e,t,n){var r;e.$el=t,e.$options.render||(e.$options.render=de),Qt(e,"beforeMount"),r=function(){e._update(e._render(),n)},new Vt(e,r,L,{before:function(){e._isMounted&&!e._isDestroyed&&Qt(e,"beforeUpdate")}},!0),n=!1;var o=e._preWatchers;if(o)for(var i=0;i