diff --git a/404.html b/404.html new file mode 100644 index 00000000..cab2ed8b --- /dev/null +++ b/404.html @@ -0,0 +1,31 @@ + + + + + + Chevereto V4 Docs + + + + + + + + + + + + + + + + +

404

Looks like we've got some broken links.
+ Take me home. +
+ + + diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..829f5512 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +v4-docs.chevereto.com diff --git a/application/configuration/configuring.html b/application/configuration/configuring.html new file mode 100644 index 00000000..fc62fc18 --- /dev/null +++ b/application/configuration/configuring.html @@ -0,0 +1,316 @@ + + + + + + Configuring | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Configuring

Chevereto V4 uses environment variables for configuring system level settings.

Environment variables configured at ENV system level will override the configuration at app/env.php.

# Using app/env.php

For the most common use-case, set the system settings at the app/env.php file, which contains the application level settings.

This applies for ENV variables not set as app/env.php has lower priority than system wide ENV.

# Creating env file

This file will be created on installation after submitting the database details. You can also manually create it, it may look like this:

<?php
+
+return [
+  'CHEVERETO_DB_NAME' => 'chevereto',
+  'CHEVERETO_DB_PASS' => 'user_database_password',
+  'CHEVERETO_DB_PORT' => '3306',
+  'CHEVERETO_DB_TABLE_PREFIX' => 'chv_',
+  'CHEVERETO_DB_USER' => 'user_database',
+];
+

Note: The system requires to pass only the values that overrides the defaults.

# Defaults

The app/env-default.php file contains the default settings that are passed. Here below is how this file looks like:

app/env-default.php
<?php
+
+return [
+    'CHEVERETO_BINARY_FFMPEG' => 'ffmpeg',
+    'CHEVERETO_BINARY_FFPROBE' => 'ffprobe',
+    'CHEVERETO_CONTEXT' => '',
+    'CHEVERETO_DB_DRIVER' => 'mysql',
+    'CHEVERETO_DB_HOST' => 'localhost',
+    'CHEVERETO_DB_NAME' => '',
+    'CHEVERETO_DB_PASS' => '',
+    'CHEVERETO_DB_PDO_ATTRS' => '[]',
+    'CHEVERETO_DB_PORT' => '3306',
+    'CHEVERETO_DB_TABLE_PREFIX' => 'chv_',
+    'CHEVERETO_DB_USER' => '',
+    'CHEVERETO_DEBUG_LEVEL' => '1',
+    'CHEVERETO_EDITION' => 'pro',
+    'CHEVERETO_ENABLE_API_GUEST' => '1',
+    'CHEVERETO_ENABLE_BANNERS' => '1',
+    'CHEVERETO_ENABLE_BULK_IMPORTER' => '1',
+    'CHEVERETO_ENABLE_CAPTCHA' => '1',
+    'CHEVERETO_ENABLE_CDN' => '1',
+    'CHEVERETO_ENABLE_CONSENT_SCREEN' => '1',
+    'CHEVERETO_ENABLE_COOKIE_COMPLIANCE' => '1',
+    'CHEVERETO_ENABLE_DEBUG' => '1',
+    'CHEVERETO_ENABLE_EXPOSE_PAID_FEATURES' => '1',
+    'CHEVERETO_ENABLE_EXTERNAL_SERVICES' => '1',
+    'CHEVERETO_ENABLE_EXTERNAL_STORAGE_PROVIDERS' => '1',
+    'CHEVERETO_ENABLE_FAVICON' => '1',
+    'CHEVERETO_ENABLE_FOLLOWERS' => '1',
+    'CHEVERETO_ENABLE_FORCE_POWERED_BY_FOOTER' => '0',
+    'CHEVERETO_ENABLE_HTACCESS_CHECK' => '0',
+    'CHEVERETO_ENABLE_IP_BANS' => '1',
+    'CHEVERETO_ENABLE_LANGUAGE_CHOOSER' => '1',
+    'CHEVERETO_ENABLE_LIKES' => '1',
+    'CHEVERETO_ENABLE_LOCAL_STORAGE' => '1',
+    'CHEVERETO_ENABLE_LOGIN_PROVIDERS' => '1',
+    'CHEVERETO_ENABLE_LOGO_CUSTOM' => '1',
+    'CHEVERETO_ENABLE_MODERATION' => '1',
+    'CHEVERETO_ENABLE_NEWS_CHECK' => '1',
+    'CHEVERETO_ENABLE_NOTIFICATIONS' => '1',
+    'CHEVERETO_ENABLE_PAGES' => '1',
+    'CHEVERETO_ENABLE_PHP_PAGES' => '0',
+    'CHEVERETO_ENABLE_POWERED_BY_SETTING' => '1',
+    'CHEVERETO_ENABLE_PUP_CUSTOM_URL' => '1',
+    'CHEVERETO_ENABLE_ROUTING' => '1',
+    'CHEVERETO_ENABLE_SEO_ALBUM_URL' => '1',
+    'CHEVERETO_ENABLE_SEO_IMAGE_URL' => '1',
+    'CHEVERETO_ENABLE_SERVICE_AKISMET' => '1',
+    'CHEVERETO_ENABLE_SERVICE_MODERATECONTENT' => '1',
+    'CHEVERETO_ENABLE_SERVICE_PROJECTARACHNID' => '1',
+    'CHEVERETO_ENABLE_SERVICE_STOPFORUMSPAM' => '1',
+    'CHEVERETO_ENABLE_STOPWORDS' => '1',
+    'CHEVERETO_ENABLE_UPDATE_CHECK' => '1',
+    'CHEVERETO_ENABLE_UPDATE_CLI' => '1',
+    'CHEVERETO_ENABLE_UPDATE_HTTP' => '1',
+    'CHEVERETO_ENABLE_UPLOAD_FLOOD_PROTECTION' => '1',
+    'CHEVERETO_ENABLE_UPLOAD_PLUGIN' => '1',
+    'CHEVERETO_ENABLE_UPLOAD_URL' => '1',
+    'CHEVERETO_ENABLE_UPLOAD_WATERMARK' => '1',
+    'CHEVERETO_ENABLE_USERS' => '1',
+    'CHEVERETO_ENABLE_XRDEBUG' => '0',
+    'CHEVERETO_ENCRYPTION_KEY' => '',
+    'CHEVERETO_ERROR_LOG_CLI' => '',
+    'CHEVERETO_ERROR_LOG_CRON' => '',
+    'CHEVERETO_ERROR_LOG' => 'php://stderr',
+    'CHEVERETO_HEADER_CLIENT_IP' => '',
+    'CHEVERETO_HOSTNAME_PATH' => '/',
+    'CHEVERETO_HOSTNAME' => 'localhost',
+    'CHEVERETO_HTTPS' => '1',
+    'CHEVERETO_IMAGE_FORMATS_AVAILABLE' => '["AVIF","JPEG","PNG","BMP","GIF","WEBP"]',
+    'CHEVERETO_IMAGE_LIBRARY' => 'imagick',
+    'CHEVERETO_MAX_ADMINS' => '0',
+    'CHEVERETO_MAX_ALBUMS' => '0',
+    'CHEVERETO_MAX_CATEGORIES' => '0',
+    'CHEVERETO_MAX_EXECUTION_TIME_SECONDS' => '30',
+    'CHEVERETO_MAX_FILES' => '0',
+    'CHEVERETO_MAX_LOGIN_PROVIDERS' => '0',
+    'CHEVERETO_MAX_MANAGERS' => '0',
+    'CHEVERETO_MAX_MEMORY_SIZE' => '512M',
+    'CHEVERETO_MAX_PAGES' => '0',
+    'CHEVERETO_MAX_POST_SIZE' => '100M',
+    'CHEVERETO_MAX_STORAGES' => '0',
+    'CHEVERETO_MAX_TAGS_PER_FILE' => '0',
+    'CHEVERETO_MAX_TAGS_PER_LISTING' => '0',
+    'CHEVERETO_MAX_TAGS' => '0',
+    'CHEVERETO_MAX_UPLOAD_SIZE' => '100M',
+    'CHEVERETO_MAX_USER_ALBUMS_LIST' => '500',
+    'CHEVERETO_MAX_USERS' => '0',
+    'CHEVERETO_MIN_STORAGES_ACTIVE' => '0',
+    'CHEVERETO_SERVICING' => 'server',
+    'CHEVERETO_SESSION_SAVE_HANDLER' => 'files',
+    'CHEVERETO_SESSION_SAVE_PATH' => '/tmp',
+    'CHEVERETO_XRDEBUG_HOST' => 'localhost',
+    'CHEVERETO_XRDEBUG_HTTPS' => '0',
+    'CHEVERETO_XRDEBUG_KEY' => '',
+    'CHEVERETO_XRDEBUG_PORT' => '27420',
+];
+

# Using ENV

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:

CHEVERETO_DB_HOST=localhost
+

# Apache HTTP Web Server (PHP module)

If PHP is provided using mpm_prefork you must refer to the documentation on Apache HTTP Server environment variables (opens new window).

# Other setups

For these you will be running PHP-FPM (opens new window) so you can add those settings at your php-fpm.conf file.

# Application servers

For these you will be running PHP CLI so you should be able to pass those at php.ini for your CLI. You can also export those in your shell.

Refer to the documentation of each application server for the best way to pass environment variables to Chevereto.

# Container

Pass the environment variables to the docker run command or at docker compose layer (.yml file).

+ + + diff --git a/application/configuration/environment.html b/application/configuration/environment.html new file mode 100644 index 00000000..52edf731 --- /dev/null +++ b/application/configuration/environment.html @@ -0,0 +1,213 @@ + + + + + + Environment | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Environment

# System variables

Environment variables for the system context.

Variable Example
CHEVERETO_SERVICING server, docker

# Database variables

Environment variables for the database details.

Variable Example
CHEVERETO_DB_DRIVER mysql
CHEVERETO_DB_HOST mariadb
CHEVERETO_DB_NAME chevereto
CHEVERETO_DB_PASS user_database_password
CHEVERETO_DB_PDO_ATTRS {"key":"value"} (json)
CHEVERETO_DB_PORT 3306
CHEVERETO_DB_TABLE_PREFIX chv_
CHEVERETO_DB_USER chevereto

# Error logging variables

Environment variables for handling error logging.

Variable Default
CHEVERETO_ERROR_LOG_CLI ``
CHEVERETO_ERROR_LOG_CRON ``
CHEVERETO_ERROR_LOG php://stderr

# Debug variables

Environment variables for debug.

Variable Example
CHEVERETO_DEBUG_LEVEL 1

# xrDebug variables

| CHEVERETO_ENABLE_XRDEBUG | 0 | +| CHEVERETO_XRDEBUG_HOST | localhost | +| CHEVERETO_XRDEBUG_HTTPS | 0 | +| CHEVERETO_XRDEBUG_KEY | `` | +| CHEVERETO_XRDEBUG_PORT | 27420 |

# Hostname variables

Environment variables for the hostname configuration.

Variable Example
CHEVERETO_HOSTNAME chevereto.internal
CHEVERETO_HOSTNAME_PATH /
CHEVERETO_HTTPS true

# Encryption key

Environment variables for the encryption functionality.

Variable Type
CHEVERETO_ENCRYPTION_KEY base64 encoded (size 32)

# Session variables

Environment variables for the session driver.

Variable Example
CHEVERETO_SESSION_SAVE_HANDLER files, redis
CHEVERETO_SESSION_SAVE_PATH /tmp

# Image handling variables

Environment variables for controlling image handling.

Variable Example
CHEVERETO_IMAGE_FORMATS_AVAILABLE 'JPG','PNG','BMP','GIF','WEBP'
CHEVERETO_IMAGE_LIBRARY imagick

# Binary paths

Environment variables for controlling binary tools used by Chevereto.

Variable Example
CHEVERETO_BINARY_FFMPEG /some/path/ffmpeg
CHEVERETO_BINARY_FFPROBE /some/path/ffprobe

# Toggles

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.

Variable Default
CHEVERETO_ENABLE_API_GUEST 1
CHEVERETO_ENABLE_BANNERS 1
CHEVERETO_ENABLE_BULK_IMPORTER 1
CHEVERETO_ENABLE_CAPTCHA 1
CHEVERETO_ENABLE_CDN 1
CHEVERETO_ENABLE_CONSENT_SCREEN 1
CHEVERETO_ENABLE_COOKIE_COMPLIANCE 1
CHEVERETO_ENABLE_DEBUG 1
CHEVERETO_ENABLE_EXPOSE_PAID_FEATURES 1
CHEVERETO_ENABLE_EXTERNAL_SERVICES 1
CHEVERETO_ENABLE_EXTERNAL_STORAGE_PROVIDERS 1
CHEVERETO_ENABLE_FAVICON 1
CHEVERETO_ENABLE_FOLLOWERS 1
CHEVERETO_ENABLE_FORCE_POWERED_BY_FOOTER 0
CHEVERETO_ENABLE_HTACCESS_CHECK 0
CHEVERETO_ENABLE_IP_BANS 1
CHEVERETO_ENABLE_LANGUAGE_CHOOSER 1
CHEVERETO_ENABLE_LIKES 1
CHEVERETO_ENABLE_LOCAL_STORAGE 1
CHEVERETO_ENABLE_LOGIN_PROVIDERS 1
CHEVERETO_ENABLE_LOGO_CUSTOM 1
CHEVERETO_ENABLE_MODERATION 1
CHEVERETO_ENABLE_NEWS_CHECK 1
CHEVERETO_ENABLE_NOTIFICATIONS 1
CHEVERETO_ENABLE_PAGES 1
CHEVERETO_ENABLE_PHP_PAGES 0
CHEVERETO_ENABLE_POWERED_BY_SETTING 1
CHEVERETO_ENABLE_PUP_CUSTOM_URL 1
CHEVERETO_ENABLE_ROUTING 1
CHEVERETO_ENABLE_SEO_ALBUM_URL 1
CHEVERETO_ENABLE_SEO_IMAGE_URL 1
CHEVERETO_ENABLE_SERVICE_AKISMET 1
CHEVERETO_ENABLE_SERVICE_MODERATECONTENT 1
CHEVERETO_ENABLE_SERVICE_PROJECTARACHNID 1
CHEVERETO_ENABLE_SERVICE_STOPFORUMSPAM 1
CHEVERETO_ENABLE_STOPWORDS 1
CHEVERETO_ENABLE_UPDATE_CHECK 1
CHEVERETO_ENABLE_UPDATE_CLI 1
CHEVERETO_ENABLE_UPDATE_HTTP 1
CHEVERETO_ENABLE_UPLOAD_FLOOD_PROTECTION 1
CHEVERETO_ENABLE_UPLOAD_PLUGIN 1
CHEVERETO_ENABLE_UPLOAD_URL 1
CHEVERETO_ENABLE_UPLOAD_WATERMARK 1
CHEVERETO_ENABLE_USERS 1
CHEVERETO_ENABLE_XRDEBUG 0

# Limits

Environment variables that limits the use for Chevereto

Zero 0 means no limit.

Variable Example
CHEVERETO_MAX_ADMINS 0
CHEVERETO_MAX_ALBUMS 0
CHEVERETO_MAX_CATEGORIES 0
CHEVERETO_MAX_EXECUTION_TIME_SECONDS 30
CHEVERETO_MAX_FILES 0
CHEVERETO_MAX_LOGIN_PROVIDERS 0
CHEVERETO_MAX_MANAGERS 0
CHEVERETO_MAX_MEMORY_SIZE 512M
CHEVERETO_MAX_PAGES 0
CHEVERETO_MAX_POST_SIZE 100M
CHEVERETO_MAX_STORAGES 0
CHEVERETO_MAX_TAGS_PER_FILE 0
CHEVERETO_MAX_TAGS_PER_LISTING 0
CHEVERETO_MAX_TAGS 0
CHEVERETO_MAX_UPLOAD_SIZE 100M
CHEVERETO_MAX_USER_ALBUMS_LIST 500
CHEVERETO_MAX_USERS 0
CHEVERETO_MIN_STORAGES_ACTIVE 0
  • For CHEVERETO_MAX_USER_ALBUMS_LIST it affects the number of albums on user's dropdown album menus.

# File upload

Environment variables for the file uploading limits. It applies only for our container provisioning.

For non-container based provisioning you need to change these settings at php.ini configuration.

Variable Example
CHEVERETO_MAX_UPLOAD_SIZE 64M
CHEVERETO_MAX_POST_SIZE 64M
CHEVERETO_MAX_EXECUTION_TIME_SECONDS 30
CHEVERETO_MAX_MEMORY_SIZE 512M

# Proxy

Environment variables for tweaking server handling when the server is under a proxy.

Variable Example
CHEVERETO_HEADER_CLIENT_IP X-Real-IP
+ + + diff --git a/application/installing/from-free.html b/application/installing/from-free.html new file mode 100644 index 00000000..d4748d42 --- /dev/null +++ b/application/installing/from-free.html @@ -0,0 +1,209 @@ + + + + + + From free | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# From free

You can upgrade from Chevereto free edition to any paid edition.

# chevereto/chevereto

Users of chevereto/chevereto (opens new window) can one-click upgrade from the dashboard panel.

  • Go to /dashboard
  • Click on License key button
  • Enter license key and click on Save changes
  • Follow the on-screen upgrade instructions

To manual upgrade follow the Updating documentation using the paid edition files.

Note: Docker users don't need any of these steps, simply follow the Docker upgrading guide.

# rodber/chevereto-free

Users of rodber/chevereto-free (opens new window) need to update to Chevereto-Free 1.6.2 and from there follow the Upgrading documentation ignoring the remark about V3.20 requirement.

+ + + diff --git a/application/installing/installation.html b/application/installing/installation.html new file mode 100644 index 00000000..c78ea45f --- /dev/null +++ b/application/installing/installation.html @@ -0,0 +1,207 @@ + + + + + + Installation | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Installation

Installation service available

We offer a paid installation service (opens new window) for Chevereto. We will install Chevereto for you, including all the requirements and configurations.

Installation refers to the process where the software files gets provided in the target machine.

# Stack

Chevereto requires PHP, a Web Server, MySQL database and CRON.

# Official guides

For fresh installations continue with one of the following guides.

# Community guides

The following guides have been contributed by users of the software.

# Marketplace

Chevereto is available at the following application marketplaces.

# Using installer software

Chevereto is available at the following installers, look for the following software at your hosting control panel.

# Using release package

The release package is a zip file containing the software files.

# Manual (CLI)

Run the following command (opens new window) to download and extract package:

bash <(curl -s https://raw.githubusercontent.com/chevereto/vps/4.0/common/get.sh)
+

# Manual (GUI)

  • Upload the latest release to a non-public path in your server
  • Unzip the package in the target website directory (public_html folder)
  • Remove the .zip file
  • Open your target website URL and follow the Setup instructions

# Setup

Once the software files are provided the software is ready for Setup. This is required only once per instance.

Setup refers to the process when the Chevereto database tables and its admin user is created. You can carry this process in HTTP or CLI context.

# Install (GUI)

  • Go to /install

# Install (CLI)

+ + + diff --git a/application/installing/updating.html b/application/installing/updating.html new file mode 100644 index 00000000..9dfa8d82 --- /dev/null +++ b/application/installing/updating.html @@ -0,0 +1,210 @@ + + + + + + Updating | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Updating

This process is for instances already running Chevereto V4. The process consist in update software files and then proceed with database migrations.

# Software filesystem update

To update the software files depends on how you installed Chevereto. Follow the instructions for your installation method.

# Release package

This applies to any non-Docker installation.

Note: For paid edition and if you haven't entered your license key make to visit /dashboard/?license first.

  • Go to /dashboard
  • Click on Check upgrades button
  • Follow the on-screen upgrade instructions

For CLI driven update run the following command:

php app/upgrading.php
+

If you need to force upgrade (re-download software files) you can do it by accessing to /dashboard/?upgrade.

For manual upgrade refer to Installing for instructions on how to install the software files.

# Docker

When using Docker it will required to re-build the Chevereto image (make image (opens new window) or docker build (opens new window)) and then re-start the containers.

Refer to UPDATING (opens new window) for instructions.

# Database update

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.

# HTTP database update

To update Chevereto database via web:

  • Login as Admin
  • Go to /update

# CLI database update

To update Chevereto database from the command line:

  • SSH and cd to your Chevereto instance
  • Run CLI update app/bin/legacy -C update
+ + + diff --git a/application/installing/upgrading.html b/application/installing/upgrading.html new file mode 100644 index 00000000..ef7e324d --- /dev/null +++ b/application/installing/upgrading.html @@ -0,0 +1,223 @@ + + + + + + Upgrading | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Upgrading

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.

# Requirements

  • Existing installation running Chevereto V3.20
  • Backup for the existing previous installation (optional, recommended)

# Upgrade to V4

Upgrade to Chevereto V4 is performed by overriding the previous software files with the new files provided by Chevereto V4.

Follow these step:

  • Remove app/vendor from your Chevereto V3 installation
  • Override Chevereto V3 files with Chevereto V4 files
  • Switch to PHP 8
  • Create app/env.php (see remark below)
  • Proceed with database update

# Application settings

Chevereto V4 uses a new configuration standard.

  • Rename app/settings.php to app/env.php
  • Update file accordingly the updated environment
<?php // app/settings.php
+$settings['db_host'] = 'localhost';
+$settings['db_name'] = 'chevereto';
+$settings['db_user'] = 'user';
+$settings['db_pass'] = 'pass';
+
<?php // app/env.php
+return [
+    'CHEVERETO_DB_HOST' => 'localhost',
+    'CHEVERETO_DB_NAME' => 'chevereto',
+    'CHEVERETO_DB_USER' => 'user',
+    'CHEVERETO_DB_PASS' => 'pass',
+];
+

# CRON

Chevereto V4 comes with a new console. You must update your CRON command to point to the new location.

From Chevereto V3 cron:

cli.php -C cron
+

To Chevereto V4 cron:

app/bin/legacy -C cron
+
+ + + diff --git a/application/reference/cli.html b/application/reference/cli.html new file mode 100644 index 00000000..21adaa09 --- /dev/null +++ b/application/reference/cli.html @@ -0,0 +1,227 @@ + + + + + + CLI | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# CLI

app/bin/legacy

Don't run as root

The Chevereto console won't work when using root user. It must be called from a normal user.

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:

# Install

The install command installs Chevereto. It requires to pass the admin user details.

To install Chevereto for user "rodolfo" with password "myPassword":

app/bin/legacy -C install \
+    -u rodolfo \
+    -e rodolfo@chevereto.loc \
+    -x myPassword
+
Option Description
u Admin username
e Admin email
x Admin password

# Update

The update command updates the Chevereto database schema.

app/bin/legacy -C update
+

# Version

The version command outputs the Chevereto filesystem version.

app/bin/legacy -C version
+

# Cron

The cron command runs the background jobs required by Chevereto.

app/bin/legacy -C cron
+

# Bulk importer

The bulk-importer command process files for Bulk importer (opens new window).

app/bin/legacy -C bulk-importer
+

# Encryption

To use encryption it requires to configure the CHEVERETO_ENCRYPTION_KEY environment variable.

# Encrypt secrets

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:

app/bin/legacy -C encrypt-secrets -k key_for_stored_data
+

# Decrypt secrets

The decrypt-secrets command decrypts the application secrets stored as cipher text in the database.

app/bin/legacy -C decrypt-secrets
+

After running the above command set CHEVERETO_ENCRYPTION_KEY to empty string to disable encryption.

# Htaccess

# Htaccess checksum

The htaccess-checksum command generates safe .htaccess for Chevereto folders.

app/bin/legacy -C htaccess-checksum
+

# Htaccess enforce

The htaccess-enforce command checks for any alteration on the .htaccess files and reverts them to the defaults included by Chevereto.

app/bin/legacy -C htaccess-enforce
+

# Langs

The langs command generates the cache for language translations. The command outputs the list of languages processed.

app/bin/legacy -C langs
+

# Password reset

The password-reset command generates and assign a new password for the target username. The command outputs the new password.

To reset the password for user "rodolfo":

app/bin/legacy -C password-reset -u rodolfo
+

# Settings

# Setting get

The setting-get command retrieves the target database setting key value.

To get the value for "chevereto_version_installed":

app/bin/legacy -C setting-get -k chevereto_version_installed
+

# Setting update

The setting-update command updates the target database setting key value. It outputs the value after update.

To update the value for "maintenance":

app/bin/legacy -C setting-update -k maintenance -v true
+
+ + + diff --git a/application/reference/encryption.html b/application/reference/encryption.html new file mode 100644 index 00000000..ad4e709c --- /dev/null +++ b/application/reference/encryption.html @@ -0,0 +1,210 @@ + + + + + + Encryption | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Encryption

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.

# What is encrypted?

# Settings secrets

The following settings are encrypted in the database:

Setting Key
API V1 key (public) api_v1_key
Album password album_password
SMTP server (opens new window) email_smtp_server
SMTP port email_smtp_server_port
SMTP username (opens new window) email_smtp_server_username
SMTP password (opens new window) email_smtp_server_password
reCAPTCHA secret key (opens new window) recaptcha_private_key
Disqus secret key (opens new window) disqus_secret_key
Akismet API key (opens new window) akismet_api_key
ModerateContent API Key (opens new window) moderatecontent_key
Project Arachnid API Username (opens new window) arachnid_api_username
Project Arachnid API Password (opens new window) arachnid_api_password

# Storage credentials

The following storage columns for chv_storages are encrypted in the database:

  • server
  • service
  • account_id
  • account_name
  • key
  • secret
  • bucket

# Two-factor secrets

Two-factor secret codes used to generate TOTP are encrypted in the database. Table chv_two_factors.

# Key

The encryption key is base64 encoded random string of size 32. To generate a key use openssl:

openssl rand -base64 32
+

# Key security

Handle the encryption key with the same discretion of a password.

  • The encryption key should remain private.
  • Don't re-use the same key in different installations.
  • Backup the key in a safe location.

# Enabling encryption

To enable encryption provide the CHEVERETO_ENCRYPTION_KEY environment variable.

This key is automatic provided when using HTTP setup, stored in the env.php file.

# From previous versions

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.

To manually enable encryption:

# Disabling encryption

When disabling encryption all the cipher texts stored in the database will be reverted to its plain text value.

To disable encryption:

+ + + diff --git a/application/reference/errors.html b/application/reference/errors.html new file mode 100644 index 00000000..26e5444a --- /dev/null +++ b/application/reference/errors.html @@ -0,0 +1,210 @@ + + + + + + Errors | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Errors

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.

# Incident id

Chevereto logs all error events under an unique random incident id. This enables to to lookup the error in the log device.

The id is randomly generated and is unique per error event.

# Something went wrong

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.

Note: You are the system administrator.

This silent message (opens new window) indicates an error caught by Chevereto, but without disclosing the actual cause of error.

# Exception thrown

This error spawns in development context.

The exception message (opens new window) indicates an error caught by Chevereto fully disclosing the actual cause of error.

Although the message doesn't leak function arguments neither variables, you should handle these messages with the same discretion as a password.

# Dumped update query

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.

# HTTP 500 - Internal Server Error

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.

+ + + diff --git a/application/reference/security.html b/application/reference/security.html new file mode 100644 index 00000000..bfa83b7a --- /dev/null +++ b/application/reference/security.html @@ -0,0 +1,205 @@ + + + + + + Security | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Security

# Security Checklist

Must constantly double-checking the following:

# Encryption

Sensitive data such as service credentials is stored encrypted in the database.

# Two-factor authentication

Users and specially administrators should always configure a two-factor device for an additional layer of security.

# Encoded IDs

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).

# Encoding and decoding IDs

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.

# Making encoded IDs larger

The length of encoded IDs can be customized.

Larger encoded IDs will be always better for preserving the privacy of the uploaded content. Two alternatives to achieve larger encoded IDs:

# Altering id_padding setting

💡 This method will affect previous generated links. Use it only if is safe to edit the IDs.

Go to the database, find the chv_settings table and edit the setting_name identified as id_padding. (zero by default).

Entering an integer value like 5000 will instruct the system to generate IDs using this base padding.

# Altering chv_images table

This method won't affect any previous generated links.

Go to the database, find the chv_images table and change the AUTOINCREMENT to the ID padding you want to use.

# Cross-site request forgery

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.

# Hashing

Chevereto uses BCrypt (opens new window) cryptography to store passwords and cookie hashes.

# reCAPTCHA

Chevereto includes support for reCAPTCHA (opens new window) which helps to prevent bots from signing up and try to brute-force a user password.

# Daily Invalid Requests

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.

# Flood Protection

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.

+ + + diff --git a/application/stack/cron.html b/application/stack/cron.html new file mode 100644 index 00000000..9fb03f82 --- /dev/null +++ b/application/stack/cron.html @@ -0,0 +1,215 @@ + + + + + + CRON | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# CRON

Chevereto requires to setup cron (opens new window) to run background jobs.

This cron setup reference applies mostly for Debian-based systems. We recommend checking your server documentation on how to setup and run cron.

Consider to contribute to this documentation with alternative cron setup alternatives.

# What it does?

A cron is system in which a command is executed in a regular basis, this way Chevereto can perform operations in the background.

# Troubleshoot

TIP

Refer to your system documentation and/or administrator for the best strategy when running Chevereto's cron requirements.

Having issues? Check the following common pitfalls:

  • Invalid format for cron schedule
  • The PHP binary may not be available in cron context, use the full PHP path binary
  • The location of the app/bin/legacy console may vary, use what reflects the file in your system
  • Wrong user running the command (requires a normal user with access to the project directory)
  • User www-data applies only for Debian-based system. Refer to your sysadmin for the appropriate user when using other OS

# Command

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.

Refer to CLI Cron.

# Docker command

docker exec -it \
+    --user www-data \
+    chevereto-container app/bin/legacy -C cron
+

# Cron.d file

Recommended setup is to create a cron.d file (opens new window). This is easy as:

cat >/etc/cron.d/chevereto <<EOM
+* * * * * www-data php /var/www/html/app/bin/legacy -C cron
+EOM
+

In the instruction above * * * * * (opens new window) is the cron schedule to run every minute.

+ + + diff --git a/application/stack/mysql-server.html b/application/stack/mysql-server.html new file mode 100644 index 00000000..03f0ae60 --- /dev/null +++ b/application/stack/mysql-server.html @@ -0,0 +1,212 @@ + + + + + + MySQL Server | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# MySQL Server

Version MySQL MariaDB
4.0 5.7, 8 10

Chevereto support both MySQL/MariaDB database servers but we refer indistinctly as MySQL.

Chevereto V4 rely in a RDBMS (opens new window) provided by a MySQL server.

# Resources

# What it does?

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".

# Troubleshoot

Having issues? Check the following common pitfalls:

  • Wrong credentials (user/password)
  • Invalid or missing privileges (read/write in the database)
  • Outdated MySQL version
  • Bad configured MySQL socket
  • Usage of MyISAM storage engine (ALTER table to InnoDB storage)

# Database Permissions

Database user must have ALL PRIVILEGES over the target database.

# Database Storage engine

InnoDB table storage engine.

Old versions using MyISAM table storage engine will require to convert the old tables to InnoDB. Read Convert MyISAM tables to InnoDB (opens new window)

# Creating the database

# Using the MySQL console

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';"
+

# Using web panels

Links for the most popular panels:

# Updating

When manual updating the database keep the following considerations:

  • Disconnect all peers
  • Turn off the MySQL server, work in its console (phpMyAdmin, Adminer, CLI)
  • Run the MySQL statements one-by-one (a semi-colon ; denotes when a MySQL statement ends)
+ + + diff --git a/application/stack/operating-system.html b/application/stack/operating-system.html new file mode 100644 index 00000000..d660c537 --- /dev/null +++ b/application/stack/operating-system.html @@ -0,0 +1,209 @@ + + + + + + Operating system | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Operating system

Chevereto V4 is made for Unix-like systems and it is CI tested against Ubuntu (opens new window) ubuntu-latest.

V4 documentation at this time is written for Debian-based systems. We recommend checking/contributing with system-specific commands.

# Non Debian-based

Non Debian-based systems should work fine with Chevereto V4 long as the system stack packages matches with the versions available on Debian.

Make sure to replace references in this documentation from www-data to the target web-server user.

# Windows and others

For non Unix-like systems as Windows we recommend using our Docker provisioning.

# Video processing

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.

FFmpeg folder

+ + + diff --git a/application/stack/php.html b/application/stack/php.html new file mode 100644 index 00000000..9681501a --- /dev/null +++ b/application/stack/php.html @@ -0,0 +1,221 @@ + + + + + + PHP | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# PHP

Version PHP
4.1 8.0.30
4.0 ~8.0

Chevereto V4 is PHP (opens new window) software, it has been designed using:

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.

# Resources

# What it does?

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.

# Troubleshoot

Having issues? Check the following common pitfalls:

  • Outdated PHP version
  • Misconfiguration in PHP libraries
  • Bad php.ini directives
  • Low execution time
  • Bad sessions setup
  • Open basedir restrictions

# Configuration

The following ini values are recommended for Chevereto installations.

Note: Check which ini files are loaded at your Chevereto /dashboard.

upload_max_filesize = 64M;
+post_max_size = 64M;
+max_execution_time = 30;
+memory_limit = 512M;
+
Property Description Example
upload_max_filesize Maximum upload size 64M for 64 MB
post_max_size Maximum post size Same as above
max_execution_time Maximum time to execute the software, in seconds 30 for 30 seconds
memory_limit Maximum memory to allocate 512M for 512 MB

You can toggle this limits to reflect your hardware and server load. Check this article for more info: PHP common pitfalls (opens new window).

# Extensions

The following PHP extensions are required for Chevereto.

  • curl
  • exif
  • fileinfo
  • gd
  • hash
  • imagick
  • json
  • pdo
  • pdo-mysql
  • session
  • xml

# Features

Chevereto requires unrestricted access to all PHP functions. Note that the following functions should not be restricted:

# Image library

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):

CHEVERETO_IMAGE_FORMATS_AVAILABLE='["JPG","PNG","BMP","GIF"]'
+

# Configuring ImageMagick

Additional recommended ImageMagick configuration at /etc/ImageMagick-6/policy.xml file:

<policymap>
+    <!-- policies -->
+    <policy domain="resource" name="width" value="16KP"/>
+    <policy domain="resource" name="height" value="16KP"/>
+</policymap>
+

# Filesystem

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).

chown -R www-data: /var/www/html
+
+ + + diff --git a/application/stack/web-server.html b/application/stack/web-server.html new file mode 100644 index 00000000..d05d4004 --- /dev/null +++ b/application/stack/web-server.html @@ -0,0 +1,248 @@ + + + + + + Web Server | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Web Server

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.

# Resources

# What it does?

The web server exposes the Chevereto application using the HTTP(s) protocol.

# Troubleshoot

Having issues? Check the following common pitfalls:

  • Apache mod_rewrite disabled or Allow Override All missing in virtual hosts
  • Missing writing permissions in Chevereto paths
  • Bad or invalid setup (timezone, multi-views, timeout, etc.)
  • Wrong nginx server block / PHP-FPM issues
  • mod_security or any other artifact blocking requests from/to

# Restrict PHP

DANGER

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.

# Real connecting IP

DANGER

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:

# Apache HTTP server

Apache configuration .htaccess files are included in Chevereto files. The only requirement is to enable module mod_rewrite (opens new window).

Virtual host settings must allow URL rewriting.

vhost
    <Directory /var/www/html>
+        Options -Indexes +FollowSymLinks +MultiViews
+        AllowOverride All
+        Require all granted
+    </Directory>
+

# nginx

This is the recommended nginx.conf for server {} block.

nginx.conf
    # Disable access to sensitive application files
+    location ~* (app|content|lib)/.*\.(po|php|lock|sql)$ {
+        return 404;
+    }
+    location ~* composer\.json|composer\.lock|.gitignore$ {
+        return 404;
+    }
+    location ~* /\.ht {
+        return 404;
+    }
+
+    # Image not found replacement
+    location ~* \.(jpe?g|png|gif|webp)$ {
+        log_not_found off;
+        error_page 404 /content/images/system/default/404.gif;
+    }
+
+    # CORS header (avoids font rendering issues)
+    location ~* \.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js)$ {
+        add_header Access-Control-Allow-Origin "*";
+    }
+
+    # PHP front controller
+    location / {
+        index index.php;
+        try_files $uri $uri/ /index.php$is_args$query_string;
+    }
+
+    # Single PHP-entrypoint (disables direct access to .php files)
+    location ~* \.php$  {
+        internal;
+        include snippets/fastcgi-php.conf;
+        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
+    }
+
+ + + diff --git a/assets/css/0.styles.9554c03f.css b/assets/css/0.styles.9554c03f.css new file mode 100644 index 00000000..27355c9b --- /dev/null +++ b/assets/css/0.styles.9554c03f.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;-ms-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:#23a8e0}.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:#23a8e0}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;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:#23a8e0;--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:#39b1e3;--lighten10TextColor:#3a5169;--lighten20TextColor:#476582;--lighten25TextColor:#4e6e8e;--lighten35TextColor:#5d82a6;--lighten40TextColor:#6a8bad;--darken10AccentColor:#1d98cc;--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:#23a8e0;--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:#39b1e3;--lighten10TextColor:#e5e5e5;--lighten20TextColor:#e8e8e8;--lighten25TextColor:#e9e9e9;--lighten35TextColor:#ececec;--lighten40TextColor:#eee;--darken10AccentColor:#1d98cc;--darken10BgColor:#2f3235;--darken10BorderColor:#464646}}html[theme=light]{--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;--lighten10TextColor:#3a5169;--lighten20TextColor:#476582;--lighten25TextColor:#4e6e8e;--lighten35TextColor:#5d82a6;--lighten40TextColor:#6a8bad;--darken10BgColor:#f2f2f2;--darken10BorderColor:#cfd4db}html[theme=dark],html[theme=light]{--accentColor:#23a8e0;--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;--lighten10AccentColor:#39b1e3;--darken10AccentColor:#1d98cc}html[theme=dark]{--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;--lighten10TextColor:#e5e5e5;--lighten20TextColor:#e8e8e8;--lighten25TextColor:#e9e9e9;--lighten35TextColor:#ececec;--lighten40TextColor:#eee;--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:#23a8e0!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:#23a8e0;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 #23a8e0,0 0 5px #23a8e0;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:#23a8e0 transparent transparent #23a8e0;border-style:solid;border-width:2px;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;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}@-webkit-keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@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}.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:#23a8e0;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #1d98cc}.home .hero .action-button:hover{background-color:#39b1e3}.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:#23a8e0}.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:#23a8e0}@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}.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:#23a8e0}.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:#23a8e0}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #23a8e0;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.open:blur{display:none}.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:#23a8e0}.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 #35afe2}}.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:#23a8e0;border-left-color:#23a8e0}.sidebar-heading.clickable:hover{color:#23a8e0}.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:#23a8e0}a.sidebar-link.active{font-weight:600;color:#23a8e0;border-left-color:#23a8e0}.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)}.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)} \ 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/10.99d3a08d.js b/assets/js/10.99d3a08d.js new file mode 100644 index 00000000..9e4b3922 --- /dev/null +++ b/assets/js/10.99d3a08d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{400:function(t,e,n){},455:function(t,e,n){"use strict";n(400)},515: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:function(t,e){var n=e.props,i=e.slots;return t("span",{class:["badge",n.type],style:{verticalAlign:n.vertical}},n.text||i().default)}},r=(n(455),n(68)),p=Object(r.a)(i,void 0,void 0,!1,null,"15b7b770",null);e.default=p.exports}}]); \ No newline at end of file diff --git a/assets/js/11.49fd923d.js b/assets/js/11.49fd923d.js new file mode 100644 index 00000000..83111ea2 --- /dev/null +++ b/assets/js/11.49fd923d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{401:function(t,e,a){},456:function(t,e,a){"use strict";a(401)},463:function(t,e,a){"use strict";a.r(e);var n={name:"CodeBlock",props:{title:{type:String,required:!0},active:{type:Boolean,default:!1}},mounted:function(){this.$parent&&this.$parent.loadTabs&&this.$parent.loadTabs()}},i=(a(456),a(68)),s=Object(i.a)(n,(function(){var t=this.$createElement;return(this._self._c||t)("div",{staticClass:"theme-code-block",class:{"theme-code-block__active":this.active}},[this._t("default")],2)}),[],!1,null,"759a7d02",null);e.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/12.aa8a9090.js b/assets/js/12.aa8a9090.js new file mode 100644 index 00000000..f8c89c21 --- /dev/null +++ b/assets/js/12.aa8a9090.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{402:function(e,t,a){},457:function(e,t,a){"use strict";a(402)},464:function(e,t,a){"use strict";a.r(t);a(95),a(46),a(10),a(127),a(128);var o={name:"CodeGroup",data:function(){return{codeTabs:[],activeCodeTabIndex:-1}},watch:{activeCodeTabIndex:function(e){this.activateCodeTab(e)}},mounted:function(){this.loadTabs()},methods:{changeCodeTab:function(e){this.activeCodeTabIndex=e},loadTabs:function(){var e=this;this.codeTabs=(this.$slots.default||[]).filter((function(e){return Boolean(e.componentOptions)})).map((function(t,a){return""===t.componentOptions.propsData.active&&(e.activeCodeTabIndex=a),{title:t.componentOptions.propsData.title,elm:t.elm}})),-1===this.activeCodeTabIndex&&this.codeTabs.length>0&&(this.activeCodeTabIndex=0),this.activateCodeTab(0)},activateCodeTab:function(e){this.codeTabs.forEach((function(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")}}},n=(a(457),a(68)),c=Object(n.a)(o,(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ClientOnly",[a("div",{staticClass:"theme-code-group"},[a("div",{staticClass:"theme-code-group__nav"},[a("ul",{staticClass:"theme-code-group__ul"},e._l(e.codeTabs,(function(t,o){return a("li",{key:t.title,staticClass:"theme-code-group__li"},[a("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(t.title)+"\n ")])])})),0)]),e._v(" "),e._t("default"),e._v(" "),e.codeTabs.length<1?a("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/13.8bc1897a.js b/assets/js/13.8bc1897a.js new file mode 100644 index 00000000..e44d7c5b --- /dev/null +++ b/assets/js/13.8bc1897a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{449:function(t,s,e){t.exports=e.p+"assets/img/hosting-settings.cd381b89.png"},450:function(t,s,e){t.exports=e.p+"assets/img/php-support.997fe037.png"},502:function(t,s,e){"use strict";e.r(s);var n=e(68),p=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"plesk-php"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#plesk-php"}},[t._v("#")]),t._v(" Plesk PHP")]),t._v(" "),n("h2",{attrs:{id:"php-setup"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#php-setup"}},[t._v("#")]),t._v(" PHP Setup")]),t._v(" "),n("ul",[n("li",[t._v("Go to "),n("strong",[t._v("Hosting Settings")]),t._v(" under "),n("strong",[t._v("Hosting & DNS")]),t._v(".")])]),t._v(" "),n("p",[n("img",{attrs:{src:e(449),alt:"Hosting Settings"}})]),t._v(" "),n("ul",[n("li",[t._v("Under "),n("strong",[t._v("Web scripting and statistics")]),t._v(" select PHP "),n("code",[t._v("8")]),t._v(" and "),n("code",[t._v("FPM application server by Apache")]),t._v(".")])]),t._v(" "),n("p",[n("img",{attrs:{src:e(450),alt:"PHP Support"}})])])}),[],!1,null,null,null);s.default=p.exports}}]); \ No newline at end of file diff --git a/assets/js/14.f4ff5d07.js b/assets/js/14.f4ff5d07.js new file mode 100644 index 00000000..58f50d54 --- /dev/null +++ b/assets/js/14.f4ff5d07.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{373:function(e,t,s){e.exports=s.p+"assets/img/ffmpeg-folder.1ef2e021.png"},479:function(e,t,s){"use strict";s.r(t);var r=s(68),a=Object(r.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"operating-system"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#operating-system"}},[e._v("#")]),e._v(" Operating system")]),e._v(" "),r("p",[e._v("Chevereto V4 is made for Unix-like systems and it is CI tested against "),r("a",{attrs:{href:"https://ubuntu.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Ubuntu"),r("OutboundLink")],1),e._v(" "),r("code",[e._v("ubuntu-latest")]),e._v(".")]),e._v(" "),r("p",[e._v("V4 documentation at this time is written for "),r("strong",[e._v("Debian-based")]),e._v(" systems. We "),r("strong",[e._v("recommend")]),e._v(" checking/contributing with system-specific commands.")]),e._v(" "),r("h2",{attrs:{id:"non-debian-based"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#non-debian-based"}},[e._v("#")]),e._v(" Non Debian-based")]),e._v(" "),r("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(" "),r("p",[e._v("Make sure to replace references in this documentation from "),r("strong",[e._v("www-data")]),e._v(" to the target web-server user.")]),e._v(" "),r("h2",{attrs:{id:"windows-and-others"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#windows-and-others"}},[e._v("#")]),e._v(" Windows and others")]),e._v(" "),r("p",[e._v("For non Unix-like systems as Windows we "),r("strong",[e._v("recommend")]),e._v(" using our "),r("RouterLink",{attrs:{to:"/guides/docker/"}},[e._v("Docker")]),e._v(" provisioning.")],1),e._v(" "),r("h2",{attrs:{id:"video-processing"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#video-processing"}},[e._v("#")]),e._v(" Video processing")]),e._v(" "),r("p",[e._v("Chevereto since V4.1 (Pulento) optionally requires "),r("a",{attrs:{href:"https://ffmpeg.org",target:"_blank",rel:"noopener noreferrer"}},[e._v("FFmpeg"),r("OutboundLink")],1),e._v(" and FFprobe to process video uploads.")]),e._v(" "),r("p",[e._v("The FFmpeg binary should be available at the system path, alternatively you can configure the "),r("RouterLink",{attrs:{to:"/application/configuration/environment.html#binary-paths"}},[e._v("binary location")]),e._v(" manually.")],1),e._v(" "),r("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 "),r("a",{attrs:{href:"https://ffmpeg.org/download.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("official website"),r("OutboundLink")],1),e._v(" and upload it to your server.")]),e._v(" "),r("p",[r("img",{attrs:{src:s(373),alt:"FFmpeg folder"}})])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/15.0208a74d.js b/assets/js/15.0208a74d.js new file mode 100644 index 00000000..8ace69f0 --- /dev/null +++ b/assets/js/15.0208a74d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{430:function(t,s,a){t.exports=a.p+"assets/img/tinkerwell-chevereto.387ddd77.png"},486:function(t,s,a){"use strict";a.r(s);var n=a(68),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"repl"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#repl"}},[t._v("#")]),t._v(" REPL")]),t._v(" "),n("p",[t._v("Chevereto supports "),n("a",{attrs:{href:"https://tinkerwell.app/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Tinkewell"),n("OutboundLink")],1),t._v(" and "),n("a",{attrs:{href:"https://psysh.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("PsySH"),n("OutboundLink")],1),t._v(", enabling to execute any set of instructions under the environment of a "),n("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"),n("OutboundLink")],1),t._v(" (REPL).")]),t._v(" "),n("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 "),n("a",{attrs:{href:"https://en.wikipedia.org/wiki/Exploratory_programming",target:"_blank",rel:"noopener noreferrer"}},[t._v("exploratory programming"),n("OutboundLink")],1),t._v(".")]),t._v(" "),n("p",[n("img",{attrs:{src:a(430),alt:"Tinkerwell Chevereto"}})]),t._v(" "),n("details",{staticClass:"custom-block details"},[n("summary",[t._v("Sample code")]),t._v(" "),n("div",{staticClass:"language-php extra-class"},[n("pre",{pre:!0,attrs:{class:"language-php"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token package"}},[t._v("Chevereto"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Legacy"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Classes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("DB")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token package"}},[t._v("Chevereto"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Legacy"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Classes"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Login")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$row")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("DB")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token argument-name"}},[t._v("table")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'users'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token argument-name"}},[t._v("values")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'all'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token argument-name"}},[t._v("limit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$row")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("DB")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("formatRows")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$row")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$row")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'name'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//?")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$row")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'website'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//?")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$row")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'bio'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//?")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$googleSecret")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Login")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getProviders")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'all'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'google'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'secret'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//?")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$enabledProviders")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Login")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getProviders")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enabled'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),t._v(" "),n("h2",{attrs:{id:"using-psysh"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#using-psysh"}},[t._v("#")]),t._v(" Using PsySH")]),t._v(" "),n("p",[t._v("PsySH comes included with Chevereto V4, run the following command to start the REPL environment.")]),t._v(" "),n("div",{staticClass:"language-sh extra-class"},[n("pre",{pre:!0,attrs:{class:"language-sh"}},[n("code",[t._v("app/bin/repl\n")])])]),n("h2",{attrs:{id:"using-tinkerwell"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#using-tinkerwell"}},[t._v("#")]),t._v(" Using Tinkerwell")]),t._v(" "),n("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/16.0856fd9c.js b/assets/js/16.0856fd9c.js new file mode 100644 index 00000000..952d4f33 --- /dev/null +++ b/assets/js/16.0856fd9c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{437:function(t,a,e){t.exports=e.p+"assets/img/cronjob.13a2a082.png"},493:function(t,a,e){"use strict";e.r(a);var s=e(68),r=Object(s.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"cpanel-cron"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#cpanel-cron"}},[t._v("#")]),t._v(" cPanel CRON")]),t._v(" "),s("h2",{attrs:{id:"add-new-cron-job"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#add-new-cron-job"}},[t._v("#")]),t._v(" Add new CRON job")]),t._v(" "),s("ul",[s("li",[t._v("Go to "),s("strong",[t._v("Cron Jobs")]),t._v(" under "),s("strong",[t._v("Advanced")])]),t._v(" "),s("li",[t._v("Scroll to "),s("strong",[t._v("Add New Cron Job")])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(437),alt:"Cronjob"}})]),t._v(" "),s("ul",[s("li",[t._v("Under "),s("strong",[t._v("Common Settings")]),t._v(" pick "),s("code",[t._v("Once Per Minute (* * * * *)")])])]),t._v(" "),s("p",[t._v("The command invocation vary depending on use context, you need to create "),s("em",[t._v("your own")]),t._v(" command based on the following general form:")]),t._v(" "),s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[t._v("php-binary cli-path -C "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cron")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("/dev/null "),s("span",{pre:!0,attrs:{class:"token operator"}},[s("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[t._v("2")]),t._v(">")]),s("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[t._v("&1")]),t._v("\n")])])]),s("ul",[s("li",[s("strong",[t._v("php-binary")]),t._v(" Check the "),s("code",[t._v("PHP command examples")]),t._v(" section under "),s("strong",[t._v("Add New Cron Job")]),t._v(" where you can learn about the PHP path for your system.")]),t._v(" "),s("li",[s("strong",[t._v("cli-path")]),t._v(" Chevereto CLI path can be found on your Dashboard panel under "),s("strong",[t._v("Installation details")]),t._v(".")]),t._v(" "),s("li",[s("strong",[t._v("-C cron")]),t._v(' C-option to pass the "cron" app-command')])]),t._v(" "),s("h3",{attrs:{id:"command-examples"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#command-examples"}},[t._v("#")]),t._v(" Command examples")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"General"}},[s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[t._v("/usr/local/bin/ea-php81 /home/chevereto/public_html/app/bin/legacy -C "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cron")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("/dev/null "),s("span",{pre:!0,attrs:{class:"token operator"}},[s("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[t._v("2")]),t._v(">")]),s("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[t._v("&1")]),t._v("\n")])])])]),t._v(" "),s("code-block",{attrs:{title:"CloudLinux"}},[s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[t._v("/opt/alt/php81/usr/bin/php /home/chevereto/public_html/app/bin/legacy -C "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cron")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("/dev/null "),s("span",{pre:!0,attrs:{class:"token operator"}},[s("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[t._v("2")]),t._v(">")]),s("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[t._v("&1")]),t._v("\n")])])])])],1)],1)}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/17.7d3e4633.js b/assets/js/17.7d3e4633.js new file mode 100644 index 00000000..aa33e582 --- /dev/null +++ b/assets/js/17.7d3e4633.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{373:function(e,t,a){e.exports=a.p+"assets/img/ffmpeg-folder.1ef2e021.png"},494:function(e,t,a){"use strict";a.r(t);var s=a(68),n=Object(s.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"cpanel-ffmpeg"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#cpanel-ffmpeg"}},[e._v("#")]),e._v(" cPanel FFmpeg")]),e._v(" "),s("p",[e._v("To get video uploads to work on cPanel you need to install FFmpeg and configure Chevereto to use it.")]),e._v(" "),s("h2",{attrs:{id:"download-ffmpeg"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#download-ffmpeg"}},[e._v("#")]),e._v(" Download FFmpeg")]),e._v(" "),s("p",[e._v("Download FFmpeg static build from the official website at "),s("a",{attrs:{href:"https://ffmpeg.org/download.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("ffmpeg.org/download.html"),s("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(" "),s("p",[e._v('You can check your cPanel server architecture under the "Server Information" section.')]),e._v(" "),s("h2",{attrs:{id:"upload-ffmpeg"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#upload-ffmpeg"}},[e._v("#")]),e._v(" Upload FFmpeg")]),e._v(" "),s("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(" "),s("p",[s("img",{attrs:{src:a(373),alt:"FFmpeg folder"}})]),e._v(" "),s("p",[e._v("You can upload these to any directory long as it is visible for your cPanel user. For example, you can use "),s("code",[e._v("/home/user/bin/")]),e._v(" and ending up with:")]),e._v(" "),s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[e._v("/home/user/bin/ffmpeg-7.0.2-amd64-static\n")])])]),s("h2",{attrs:{id:"configure-chevereto"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configure-chevereto"}},[e._v("#")]),e._v(" Configure Chevereto")]),e._v(" "),s("p",[e._v("After installing Chevereto you can configure it to use custom FFmpeg binaries. You need to "),s("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(" "),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"}},[e._v("")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[e._v("'/home/user/bin/ffmpeg-7.0.2-amd64-static/ffmpeg'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[e._v("'CHEVERETO_BINARY_FFPROBE'")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=>")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[e._v("'/home/user/bin/ffmpeg-7.0.2-amd64-static/ffprobe'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n")])])])]),s("p",[e._v("You can check if this worked by going to "),s("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/18.289d8056.js b/assets/js/18.289d8056.js new file mode 100644 index 00000000..fe23ac0d --- /dev/null +++ b/assets/js/18.289d8056.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{373:function(e,t,a){e.exports=a.p+"assets/img/ffmpeg-folder.1ef2e021.png"},500:function(e,t,a){"use strict";a.r(t);var s=a(68),r=Object(s.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"plesk-ffmpeg"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#plesk-ffmpeg"}},[e._v("#")]),e._v(" Plesk FFmpeg")]),e._v(" "),s("p",[e._v("To get video uploads to work on Plesk you need to install FFmpeg and configure Chevereto to use it.")]),e._v(" "),s("h2",{attrs:{id:"download-ffmpeg"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#download-ffmpeg"}},[e._v("#")]),e._v(" Download FFmpeg")]),e._v(" "),s("p",[e._v("Download FFmpeg static build from the official website at "),s("a",{attrs:{href:"https://ffmpeg.org/download.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("ffmpeg.org/download.html"),s("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(" "),s("p",[e._v('You can check your Plesk server architecture under the "Server Information" section.')]),e._v(" "),s("h2",{attrs:{id:"upload-ffmpeg"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#upload-ffmpeg"}},[e._v("#")]),e._v(" Upload FFmpeg")]),e._v(" "),s("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(" "),s("p",[s("img",{attrs:{src:a(373),alt:"FFmpeg folder"}})]),e._v(" "),s("p",[e._v("You can upload these to any directory long as it is visible for your Plesk user. For example, you can use "),s("code",[e._v("/home/user/bin/")]),e._v(" and ending up with:")]),e._v(" "),s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[e._v("/home/user/bin/ffmpeg-7.0.2-amd64-static\n")])])]),s("h2",{attrs:{id:"configure-chevereto"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configure-chevereto"}},[e._v("#")]),e._v(" Configure Chevereto")]),e._v(" "),s("p",[e._v("After installing Chevereto you can configure it to use custom FFmpeg binaries. You need to "),s("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(" "),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"}},[e._v("")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[e._v("'/home/user/bin/ffmpeg-7.0.2-amd64-static/ffmpeg'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[e._v("'CHEVERETO_BINARY_FFPROBE'")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=>")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[e._v("'/home/user/bin/ffmpeg-7.0.2-amd64-static/ffprobe'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n")])])])]),s("p",[e._v("You can check if this worked by going to "),s("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/19.85c294bb.js b/assets/js/19.85c294bb.js new file mode 100644 index 00000000..34169178 --- /dev/null +++ b/assets/js/19.85c294bb.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{462:function(t,e,s){"use strict";s.r(e);var n=["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],o={methods:{getMsg:function(){return n[Math.floor(Math.random()*n.length)]}}},i=s(68),h=Object(i.a)(o,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"theme-container"},[e("div",{staticClass:"theme-default-content"},[e("h1",[this._v("404")]),this._v(" "),e("blockquote",[this._v(this._s(this.getMsg()))]),this._v(" "),e("RouterLink",{attrs:{to:"/"}},[this._v("\n Take me home.\n ")])],1)])}),[],!1,null,null,null);e.default=h.exports}}]); \ No newline at end of file diff --git a/assets/js/2.b975addd.js b/assets/js/2.b975addd.js new file mode 100644 index 00000000..24be095a --- /dev/null +++ b/assets/js/2.b975addd.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{372: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 u})),n.d(e,"g",(function(){return l})),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 v})),n.d(e,"j",(function(){return m}));n(33),n(96),n(374),n(124),n(376),n(209),n(95),n(127),n(10),n(128),n(46),n(129),n(203);var i=/#.*$/,r=/\.(md|html)$/,a=/\/$/,s=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(i,"").replace(r,"")}function u(t){return s.test(t)}function l(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function h(t){if(u(t))return t;var e=t.match(i),n=e?e[0]:"",r=o(t);return a.test(r)?t:r+".html"+n}function f(t,e){var n=decodeURIComponent(t.hash),r=function(t){var e=t.match(i);if(e)return e[0]}(e);return(!r||n===r)&&o(t.path)===o(e)}function p(t,e,n){if(u(e))return{type:"external",path:e};n&&(e=function(t,e,n){var i=t.charAt(0);if("/"===i)return t;if("?"===i||"#"===i)return e+t;var r=e.split("/");n&&r[r.length-1]||r.pop();for(var a=t.replace(/^\//,"").split("/"),s=0;s3&&void 0!==arguments[3]?arguments[3]:1;if("string"==typeof e)return p(n,e,i);if(Array.isArray(e))return Object.assign(p(n,e[0],i),{title:e[1]});var a=e.children||[];return 0===a.length&&e.path?Object.assign(p(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:a.map((function(e){return t(e,n,i,r+1)})),collapsable:!1!==e.collapsable}}(t,r,l)})):[]}return[]}function g(t){var e=v(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map((function(e){return{type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}}))}]}function v(t){var e;return(t=t.map((function(t){return Object.assign({},t)}))).forEach((function(t){2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)})),t.filter((function(t){return 2===t.level}))}function m(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},374:function(t,e,n){"use strict";var i=n(8),r=n(206),a=n(13),s=n(97),o=n(19),u=n(34),l=n(69),c=n(207),h=n(208);r("match",(function(t,e,n){return[function(e){var n=u(this),r=null==e?void 0:l(e,t);return r?i(r,e,n):new RegExp(e)[t](o(n))},function(t){var i=a(this),r=o(t),u=n(e,i,r);if(u.done)return u.value;if(!i.global)return h(i,r);var l=i.unicode;i.lastIndex=0;for(var f,p=[],d=0;null!==(f=h(i,r));){var g=o(f[0]);p[d]=g,""===g&&(i.lastIndex=c(r,s(i.lastIndex),l)),d++}return 0===d?null:p}]}))},375:function(t,e){t.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},376:function(t,e,n){"use strict";var i=n(38),r=n(8),a=n(5),s=n(206),o=n(204),u=n(13),l=n(34),c=n(132),h=n(207),f=n(97),p=n(19),d=n(69),g=n(212),v=n(208),m=n(99),b=n(202),k=n(4),_=b.UNSUPPORTED_Y,x=Math.min,y=[].push,C=a(/./.exec),$=a(y),L=a("".slice);s("split",(function(t,e,n){var a;return a="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,n){var a=p(l(this)),s=void 0===n?4294967295:n>>>0;if(0===s)return[];if(void 0===t)return[a];if(!o(t))return r(e,a,t,s);for(var u,c,h,f=[],d=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),v=0,b=new RegExp(t.source,d+"g");(u=r(m,b,a))&&!((c=b.lastIndex)>v&&($(f,L(a,v,u.index)),u.length>1&&u.index=s));)b.lastIndex===u.index&&b.lastIndex++;return v===a.length?!h&&C(b,"")||$(f,""):$(f,L(a,v)),f.length>s?g(f,0,s):f}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:r(e,this,t,n)}:e,[function(e,n){var i=l(this),s=null==e?void 0:d(e,t);return s?r(s,e,i,n):r(a,p(i),e,n)},function(t,i){var r=u(this),s=p(t),o=n(a,r,s,i,a!==e);if(o.done)return o.value;var l=c(r,RegExp),d=r.unicode,g=(r.ignoreCase?"i":"")+(r.multiline?"m":"")+(r.unicode?"u":"")+(_?"g":"y"),m=new l(_?"^(?:"+r.source+")":r,g),b=void 0===i?4294967295:i>>>0;if(0===b)return[];if(0===s.length)return null===v(m,s)?[s]:[];for(var k=0,y=0,C=[];y@^][^\s!#%&*+<=>@^]*>/,N=/a/g,P=/a/g,A=new L(N)!==N,D=d.MISSED_STICKY,U=d.UNSUPPORTED_Y,H=i&&(!A||D||y||C||m((function(){return P[$]=!1,L(N)!=N||L(P)==P||"/a/i"!=L(N,"i")})));if(s("RegExp",H)){for(var W=function(t,e){var n,i,r,a,s,l,d=c(w,this),g=h(t),v=void 0===e,m=[],_=t;if(!d&&g&&v&&t.constructor===W)return t;if((g||c(w,t))&&(t=t.source,v&&(e=p(_))),t=void 0===t?"":f(t),e=void 0===e?"":f(e),_=t,y&&"dotAll"in N&&(i=!!e&&j(e,"s")>-1)&&(e=E(e,/s/g,"")),n=e,D&&"sticky"in N&&(r=!!e&&j(e,"y")>-1)&&U&&(e=E(e,/y/g,"")),C&&(t=(a=function(t){for(var e,n=t.length,i=0,r="",a=[],s={},o=!1,u=!1,l=0,c="";i<=n;i++){if("\\"===(e=I(t,i)))e+=I(t,++i);else if("]"===e)o=!1;else if(!o)switch(!0){case"["===e:o=!0;break;case"("===e:S(R,T(t,i+1))&&(i+=2,u=!0),r+=e,l++;continue;case">"===e&&u:if(""===c||b(s,c))throw new O("Invalid capture group name");s[c]=!0,a[a.length]=[c,l],u=!1,c="";continue}u?c+=e:r+=e}return[r,a]}(t))[0],m=a[1]),s=o(L(t,e),d?this:w,W),(i||r||m.length)&&(l=k(s),i&&(l.dotAll=!0,l.raw=W(function(t){for(var e,n=t.length,i=0,r="",a=!1;i<=n;i++)"\\"!==(e=I(t,i))?a||"."!==e?("["===e?a=!0:"]"===e&&(a=!1),r+=e):r+="[\\s\\S]":r+=e+I(t,++i);return r}(t),n)),r&&(l.sticky=!0),m.length&&(l.groups=m)),t!==_)try{u(s,"source",""===_?"(?:)":_)}catch(t){}return s},B=l(L),G=0;B.length>G;)g(W,L,B[G++]);w.constructor=W,W.prototype=w,v(r,"RegExp",W)}_("RegExp")},381:function(t,e,n){var i=n(8),r=n(12),a=n(36),s=n(213),o=RegExp.prototype;t.exports=function(t){var e=t.flags;return void 0!==e||"flags"in o||r(t,"flags")||!a(o,t)?e:i(s,t)}},382:function(t,e,n){var i=n(1),r=n(11),a=n(205),s=n(27),o=n(383),u=n(35).get,l=RegExp.prototype,c=i.TypeError;r&&a&&o(l,"dotAll",{configurable:!0,get:function(){if(this!==l){if("RegExp"===s(this))return!!u(this).dotAll;throw c("Incompatible receiver, RegExp required")}}})},383:function(t,e,n){var i=n(210),r=n(14);t.exports=function(t,e,n){return n.get&&i(n.get,e,{getter:!0}),n.set&&i(n.set,e,{setter:!0}),r.f(t,e,n)}},384:function(t,e,n){var i=n(1),r=n(11),a=n(202).MISSED_STICKY,s=n(27),o=n(383),u=n(35).get,l=RegExp.prototype,c=i.TypeError;r&&a&&o(l,"sticky",{configurable:!0,get:function(){if(this!==l){if("RegExp"===s(this))return!!u(this).sticky;throw c("Incompatible receiver, RegExp required")}}})},385:function(t,e,n){"use strict";var i=n(98).PROPER,r=n(17),a=n(13),s=n(19),o=n(4),u=n(381),l=RegExp.prototype.toString,c=o((function(){return"/a/b"!=l.call({source:"a",flags:"b"})})),h=i&&"toString"!=l.name;(c||h)&&r(RegExp.prototype,"toString",(function(){var t=a(this);return"/"+s(t.source)+"/"+s(u(t))}),{unsafe:!0})},386:function(t,e,n){},387:function(t,e,n){},388:function(t,e,n){},389:function(t,e,n){},390:function(t,e,n){},391:function(t,e,n){},392:function(t,e){t.exports=function(t){return null==t}},393:function(t,e,n){},394:function(t,e,n){},395:function(t,e,n){},396:function(t,e,n){},397:function(t,e,n){},398:function(t,e,n){},399:function(t,e,n){},404:function(t,e,n){"use strict";n.r(e);n(125),n(10);var i=n(372),r={name:"SidebarGroup",components:{DropdownTransition:n(405).a},props:["item","open","collapsable","depth"],beforeCreate:function(){this.$options.components.SidebarLinks=n(404).default},methods:{isActive:i.e}},a=(n(425),n(68)),s=Object(a.a)(r,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?n("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")}}},[n("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?n("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):n("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(e){return t.$emit("toggle")}}},[n("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?n("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),n("DropdownTransition",[t.open||!t.collapsable?n("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).exports;n(426),n(33),n(124),n(95);function o(t,e,n,i,r){var a={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:i,"sidebar-link":!0}};return r>2&&(a.style={"padding-left":r+"rem"}),t("RouterLink",a,n)}function u(t,e,n,r,a){var s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:1;return!e||s>a?null:t("ul",{class:"sidebar-sub-headers"},e.map((function(e){var l=Object(i.e)(r,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[o(t,n+"#"+e.slug,e.title,l,e.level-1),u(t,e.children,n,r,a,s+1)])})))}var l={functional:!0,props:["item","sidebarDepth"],render:function(t,e){var n=e.parent,r=n.$page,a=(n.$site,n.$route),s=n.$themeConfig,l=n.$themeLocaleConfig,c=e.props,h=c.item,f=c.sidebarDepth,p=Object(i.e)(a,h.path),d="auto"===h.type?p||h.children.some((function(t){return Object(i.e)(a,h.basePath+"#"+t.slug)})):p,g="external"===h.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,h.path,h.title||h.path):o(t,h.path,h.title||h.path,d),v=[r.frontmatter.sidebarDepth,f,l.sidebarDepth,s.sidebarDepth,1].find((function(t){return void 0!==t})),m=l.displayAllHeaders||s.displayAllHeaders;return"auto"===h.type?[g,u(t,h.children,h.basePath,a,v)]:(d||m)&&h.headers&&!i.d.test(h.path)?[g,u(t,Object(i.c)(h.headers),h.path,a,v)]:g}};n(427);function c(t,e){if("group"===e.type){var n=e.path&&Object(i.e)(t,e.path),r=e.children.some((function(e){return"group"===e.type?c(t,e):"page"===e.type&&Object(i.e)(t,e.path)}));return n||r}return!1}var h={name:"SidebarLinks",components:{SidebarGroup:s,SidebarLink:Object(a.a)(l,void 0,void 0,!1,null,null,null).exports},props:["items","depth","sidebarDepth","initialOpenGroupIndex"],data:function(){return{openGroupIndex:this.initialOpenGroupIndex||0}},watch:{$route:function(){this.refreshIndex()}},created:function(){this.refreshIndex()},methods:{refreshIndex:function(){var t=function(t,e){for(var n=0;n-1&&(this.openGroupIndex=t)},toggleGroup:function(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive:function(t){return Object(i.e)(this.$route,t.regularPath)}}},f=Object(a.a)(h,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.items.length?n("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(e,i){return n("li",{key:i},["group"===e.type?n("SidebarGroup",{attrs:{item:e,open:i===t.openGroupIndex,collapsable:e.collapsable||e.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(i)}}}):n("SidebarLink",{attrs:{"sidebar-depth":t.sidebarDepth,item:e}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=f.exports},405:function(t,e,n){"use strict";var i={name:"DropdownTransition",methods:{setHeight:function(t){t.style.height=t.scrollHeight+"px"},unsetHeight:function(t){t.style.height=""}}},r=(n(417),n(68)),a=Object(r.a)(i,(function(){var t=this.$createElement;return(this._self._c||t)("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.a=a.exports},406:function(t,e,n){var i=n(5),r=n(17),a=Date.prototype,s=i(a.toString),o=i(a.getTime);"Invalid Date"!=String(new Date(NaN))&&r(a,"toString",(function(){var t=o(this);return t==t?s(this):"Invalid Date"}))},407:function(t,e,n){"use strict";var i=n(2),r=n(408);i({target:"String",proto:!0,forced:n(409)("link")},{link:function(t){return r(this,"a","href",t)}})},408:function(t,e,n){var i=n(5),r=n(34),a=n(19),s=/"/g,o=i("".replace);t.exports=function(t,e,n,i){var u=a(r(t)),l="<"+e;return""!==n&&(l+=" "+n+'="'+o(a(i),s,""")+'"'),l+">"+u+""}},409:function(t,e,n){var i=n(4);t.exports=function(t){return i((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},410:function(t,e,n){"use strict";n(377)},411:function(t,e,n){var i=n(2),r=n(412);i({global:!0,forced:parseInt!=r},{parseInt:r})},412:function(t,e,n){var i=n(1),r=n(4),a=n(5),s=n(19),o=n(378).trim,u=n(375),l=i.parseInt,c=i.Symbol,h=c&&c.iterator,f=/^[+-]?0x/i,p=a(f.exec),d=8!==l(u+"08")||22!==l(u+"0x16")||h&&!r((function(){l(Object(h))}));t.exports=d?function(t,e){var n=o(s(t));return l(n,e>>>0||(p(f,n)?16:10))}:l},413:function(t,e,n){var i=n(98).PROPER,r=n(4),a=n(375);t.exports=function(t){return r((function(){return!!a[t]()||"​…᠎"!=="​…᠎"[t]()||i&&a[t].name!==t}))}},414:function(t,e,n){"use strict";var i,r=n(2),a=n(5),s=n(37).f,o=n(97),u=n(19),l=n(133),c=n(34),h=n(134),f=n(16),p=a("".endsWith),d=a("".slice),g=Math.min,v=h("endsWith");r({target:"String",proto:!0,forced:!!(f||v||(i=s(String.prototype,"endsWith"),!i||i.writable))&&!v},{endsWith:function(t){var e=u(c(this));l(t);var n=arguments.length>1?arguments[1]:void 0,i=e.length,r=void 0===n?i:g(o(n),i),a=u(t);return p?p(e,a,r):d(e,r-a.length,r)===a}})},415:function(t,e,n){"use strict";n(386)},416:function(t,e,n){"use strict";n(387)},417:function(t,e,n){"use strict";n(388)},418:function(t,e,n){"use strict";n(389)},419:function(t,e,n){"use strict";n(390)},420:function(t,e,n){"use strict";n(391)},421:function(t,e,n){"use strict";n(393)},422:function(t,e,n){var i=n(48),r=n(23),a=n(39);t.exports=function(t){return"string"==typeof t||!r(t)&&a(t)&&"[object String]"==i(t)}},423:function(t,e,n){"use strict";n(394)},424:function(t,e,n){"use strict";n(395)},425:function(t,e,n){"use strict";n(396)},426:function(t,e,n){"use strict";var i=n(2),r=n(47).find,a=n(130),s=!0;"find"in[]&&Array(1).find((function(){s=!1})),i({target:"Array",proto:!0,forced:s},{find:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),a("find")},427:function(t,e,n){"use strict";n(397)},428:function(t,e,n){"use strict";n(398)},429:function(t,e,n){"use strict";n(399)},460:function(t,e,n){"use strict";n.r(e);var i=n(92),r=(n(406),n(407),n(125),n(10),n(126),n(372)),a={name:"NavLink",props:{item:{required:!0}},computed:{link:function(){return Object(r.b)(this.item.link)},exact:function(){var t=this;return this.$site.locales?Object.keys(this.$site.locales).some((function(e){return e===t.link})):"/"===this.link},isNonHttpURI:function(){return Object(r.g)(this.link)||Object(r.h)(this.link)},isBlankTarget:function(){return"_blank"===this.target},isInternal:function(){return!Object(r.f)(this.link)&&!this.isBlankTarget},target:function(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(r.f)(this.link)?"_blank":""},rel:function(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction:function(){this.$emit("focusout")}}},s=n(68),o=Object(s.a)(a,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.isInternal?n("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")]):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).exports,u={name:"Home",components:{NavLink:o},computed:{data:function(){return this.$page.frontmatter},actionLink:function(){return{link:this.data.actionLink,text:this.data.actionText}}}},l=(n(410),Object(s.a)(u,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("main",{staticClass:"home",attrs:{"aria-labelledby":null!==t.data.heroText?"main-title":null}},[n("header",{staticClass:"hero"},[t.data.heroImage?n("img",{attrs:{src:t.$withBase(t.data.heroImage),alt:t.data.heroAlt||"hero"}}):t._e(),t._v(" "),null!==t.data.heroText?n("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?n("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?n("p",{staticClass:"action"},[n("NavLink",{staticClass:"action-button",attrs:{item:t.actionLink}})],1):t._e()]),t._v(" "),t.data.features&&t.data.features.length?n("div",{staticClass:"features"},t._l(t.data.features,(function(e,i){return n("div",{key:i,staticClass:"feature"},[n("h2",[t._v(t._s(e.title))]),t._v(" "),n("p",[t._v(t._s(e.details))])])})),0):t._e(),t._v(" "),n("Content",{staticClass:"theme-default-content custom"}),t._v(" "),t.data.footer?n("div",{staticClass:"footer"},[t._v("\n "+t._s(t.data.footer)+"\n ")]):n("Content",{staticClass:"footer",attrs:{"slot-key":"footer"}})],1)}),[],!1,null,null,null).exports),c=(n(411),n(379),n(203),n(129),n(46),n(33),n(374),n(217),n(218),n(209),n(96),n(380),n(382),n(384),n(385),n(95),n(376),n(124),n(414),n(220)),h=n.n(c),f=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=h()(e,"title","");return h()(e,"frontmatter.tags")&&(i+=" ".concat(e.frontmatter.tags.join(" "))),n&&(i+=" ".concat(n)),p(t,i)},p=function(t,e){var n=function(t){return t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")},i=new RegExp("[^\0-]"),r=t.split(/\s+/g).map((function(t){return t.trim()})).filter((function(t){return!!t}));if(i.test(t))return r.some((function(t){return e.toLowerCase().indexOf(t)>-1}));var a=t.endsWith(" ");return new RegExp(r.map((function(t,e){return r.length!==e+1||a?"(?=.*\\b".concat(n(t),"\\b)"):"(?=.*\\b".concat(n(t),")")})).join("")+".+","gi").test(e)},d={name:"SearchBox",data:function(){return{query:"",focused:!1,focusIndex:0,placeholder:void 0}},computed:{showSuggestions:function(){return this.focused&&this.suggestions&&this.suggestions.length},suggestions:function(){var t=this.query.trim().toLowerCase();if(t){for(var e=this.$site.pages,n=this.$site.themeConfig.searchMaxSuggestions||5,i=this.$localePath,r=[],a=0;a=n);a++){var s=e[a];if(this.getPageLocalePath(s)===i&&this.isSearchable(s))if(f(t,s))r.push(s);else if(s.headers)for(var o=0;o=n);o++){var u=s.headers[o];u.title&&f(t,s,u.title)&&r.push(Object.assign({},s,{path:s.path+"#"+u.slug,header:u}))}}return r}},alignRight:function(){return(this.$site.themeConfig.nav||[]).length+(this.$site.repo?1:0)<=2}},mounted:function(){this.placeholder=this.$site.themeConfig.searchPlaceholder||"",document.addEventListener("keydown",this.onHotkey)},beforeDestroy:function(){document.removeEventListener("keydown",this.onHotkey)},methods:{getPageLocalePath:function(t){for(var e in this.$site.locales||{})if("/"!==e&&0===t.path.indexOf(e))return e;return"/"},isSearchable:function(t){var e=null;return null===e||(e=Array.isArray(e)?e:new Array(e)).filter((function(e){return t.path.match(e)})).length>0},onHotkey:function(t){t.srcElement===document.body&&["s","/"].includes(t.key)&&(this.$refs.input.focus(),t.preventDefault())},onUp:function(){this.showSuggestions&&(this.focusIndex>0?this.focusIndex--:this.focusIndex=this.suggestions.length-1)},onDown:function(){this.showSuggestions&&(this.focusIndex "+t._s(e.header.title))]):t._e()])])})),0):t._e()])}),[],!1,null,null,null).exports),v=(n(416),Object(s.a)({},(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"sidebar-button",on:{click:function(e){return t.$emit("toggle-sidebar")}}},[n("svg",{staticClass:"icon",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",viewBox:"0 0 448 512"}},[n("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).exports),m=n(66),b=(n(219),n(405)),k=n(221),_=n.n(k),x={name:"DropdownLink",components:{NavLink:o,DropdownTransition:b.a},props:{item:{required:!0}},data:function(){return{open:!1}},computed:{dropdownAriaLabel:function(){return this.item.ariaLabel||this.item.text}},watch:{$route:function(){this.open=!1}},methods:{setOpen:function(t){this.open=t},isLastItemOfArray:function(t,e){return _()(e)===t},handleDropdown:function(){0===event.detail&&this.setOpen(!this.open)}}},y=(n(418),{name:"NavLinks",components:{NavLink:o,DropdownLink:Object(s.a)(x,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[n("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.handleDropdown}},[n("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),n("span",{staticClass:"arrow down"})]),t._v(" "),n("button",{staticClass:"mobile-dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(e){return t.setOpen(!t.open)}}},[n("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),n("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),n("DropdownTransition",[n("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(e,i){return n("li",{key:e.link||i,staticClass:"dropdown-item"},["links"===e.type?n("h4",[t._v("\n "+t._s(e.text)+"\n ")]):t._e(),t._v(" "),"links"===e.type?n("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(e.items,(function(i){return n("li",{key:i.link,staticClass:"dropdown-subitem"},[n("NavLink",{attrs:{item:i},on:{focusout:function(n){t.isLastItemOfArray(i,e.items)&&t.isLastItemOfArray(e,t.item.items)&&t.setOpen(!1)}}})],1)})),0):n("NavLink",{attrs:{item:e},on:{focusout:function(n){t.isLastItemOfArray(e,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null).exports},computed:{userNav:function(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav:function(){var t=this,e=this.$site.locales;if(e&&Object.keys(e).length>1){var n=this.$page.path,i=this.$router.options.routes,r=this.$site.themeConfig.locales||{},a={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(e).map((function(a){var s,o=e[a],u=r[a]&&r[a].label||o.lang;return o.lang===t.$lang?s=n:(s=n.replace(t.$localeConfig.path,a),i.some((function(t){return t.path===s}))||(s=a)),{text:u,link:s}}))};return[].concat(Object(m.a)(this.userNav),[a])}return this.userNav},userLinks:function(){return(this.nav||[]).map((function(t){return Object.assign(Object(r.j)(t),{items:(t.items||[]).map(r.j)})}))},repoLink:function(){var t=this.$site.themeConfig.repo;return t?/^https?:/.test(t)?t:"https://github.com/".concat(t):null},repoLabel:function(){if(this.repoLink){if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;for(var t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"],n=0;nMath.abs(n)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}}),G={components:{ParentLayout:Object(s.a)(B,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?n("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),n("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),n("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?n("Home"):n("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:function(){var t=this.$themeConfig.overrideTheme,e=this.$themeConfig.prefersTheme,n=!window.matchMedia("(prefers-color-scheme: light)").matches&&!window.matchMedia("(prefers-color-scheme: dark)").matches;if("object"===Object(i.a)(t)){var r=(new Date).getHours(),a=!1;for(var s in t){var o=t[s];if(o[0]<=o[1]){if(o[0]<=r&&r")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'chevereto'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_PASS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'user_database_password'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_PORT'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'3306'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_TABLE_PREFIX'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'chv_'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_USER'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'user_database'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])])])]),n("p",[n("strong",[s._v("Note:")]),s._v(" The system requires to pass only the values that "),n("strong",[s._v("overrides")]),s._v(" the "),n("a",{attrs:{href:"#defaults"}},[s._v("defaults")]),s._v(".")]),s._v(" "),n("h3",{attrs:{id:"defaults"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#defaults"}},[s._v("#")]),s._v(" Defaults")]),s._v(" "),n("p",[s._v("The "),n("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(" "),n("details",{staticClass:"custom-block details"},[n("summary",[s._v("app/env-default.php")]),s._v(" "),n("div",{staticClass:"language-php extra-class"},[n("pre",{pre:!0,attrs:{class:"language-php"}},[n("code",[n("span",{pre:!0,attrs:{class:"token php language-php"}},[n("span",{pre:!0,attrs:{class:"token delimiter important"}},[s._v("")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'ffmpeg'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_BINARY_FFPROBE'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'ffprobe'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_CONTEXT'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_DRIVER'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'mysql'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_HOST'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'localhost'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_NAME'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_PASS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_PDO_ATTRS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'[]'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_PORT'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'3306'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_TABLE_PREFIX'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'chv_'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DB_USER'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_DEBUG_LEVEL'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_EDITION'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'pro'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_API_GUEST'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_BANNERS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_BULK_IMPORTER'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_CAPTCHA'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_CDN'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_CONSENT_SCREEN'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_COOKIE_COMPLIANCE'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_DEBUG'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_EXPOSE_PAID_FEATURES'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_EXTERNAL_SERVICES'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_EXTERNAL_STORAGE_PROVIDERS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_FAVICON'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_FOLLOWERS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_FORCE_POWERED_BY_FOOTER'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_HTACCESS_CHECK'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_IP_BANS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_LANGUAGE_CHOOSER'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_LIKES'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_LOCAL_STORAGE'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_LOGIN_PROVIDERS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_LOGO_CUSTOM'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_MODERATION'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_NEWS_CHECK'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_NOTIFICATIONS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_PAGES'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_PHP_PAGES'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_POWERED_BY_SETTING'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_PUP_CUSTOM_URL'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_ROUTING'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_SEO_ALBUM_URL'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_SEO_IMAGE_URL'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_SERVICE_AKISMET'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_SERVICE_MODERATECONTENT'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_SERVICE_PROJECTARACHNID'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_SERVICE_STOPFORUMSPAM'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_STOPWORDS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_UPDATE_CHECK'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_UPDATE_CLI'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_UPDATE_HTTP'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_UPLOAD_FLOOD_PROTECTION'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_UPLOAD_PLUGIN'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_UPLOAD_URL'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_UPLOAD_WATERMARK'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_USERS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENABLE_XRDEBUG'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ENCRYPTION_KEY'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ERROR_LOG_CLI'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ERROR_LOG_CRON'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_ERROR_LOG'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'php://stderr'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_HEADER_CLIENT_IP'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_HOSTNAME_PATH'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'/'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_HOSTNAME'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'localhost'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_HTTPS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'1'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_IMAGE_FORMATS_AVAILABLE'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v('\'["AVIF","JPEG","PNG","BMP","GIF","WEBP"]\'')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_IMAGE_LIBRARY'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'imagick'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_ADMINS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_ALBUMS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_CATEGORIES'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_EXECUTION_TIME_SECONDS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'30'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_FILES'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_LOGIN_PROVIDERS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_MANAGERS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_MEMORY_SIZE'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'512M'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_PAGES'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_POST_SIZE'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'100M'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_STORAGES'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_TAGS_PER_FILE'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_TAGS_PER_LISTING'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_TAGS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_UPLOAD_SIZE'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'100M'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_USER_ALBUMS_LIST'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'500'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MAX_USERS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_MIN_STORAGES_ACTIVE'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_SERVICING'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'server'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_SESSION_SAVE_HANDLER'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'files'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_SESSION_SAVE_PATH'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'/tmp'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_XRDEBUG_HOST'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'localhost'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_XRDEBUG_HTTPS'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'0'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_XRDEBUG_KEY'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("''")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'CHEVERETO_XRDEBUG_PORT'")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=>")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'27420'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])])])])]),s._v(" "),n("h2",{attrs:{id:"using-env"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#using-env"}},[s._v("#")]),s._v(" Using "),n("code",[s._v("ENV")])]),s._v(" "),n("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(" "),n("div",{staticClass:"language-plain extra-class"},[n("pre",{pre:!0,attrs:{class:"language-plain"}},[n("code",[s._v("CHEVERETO_DB_HOST=localhost\n")])])]),n("h3",{attrs:{id:"apache-http-web-server-php-module"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#apache-http-web-server-php-module"}},[s._v("#")]),s._v(" Apache HTTP Web Server (PHP module)")]),s._v(" "),n("p",[s._v("If PHP is provided using "),n("code",[s._v("mpm_prefork")]),s._v(" you must refer to the documentation on "),n("a",{attrs:{href:"https://httpd.apache.org/docs/current/env.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("Apache HTTP Server environment variables"),n("OutboundLink")],1),s._v(".")]),s._v(" "),n("h3",{attrs:{id:"other-setups"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#other-setups"}},[s._v("#")]),s._v(" Other setups")]),s._v(" "),n("p",[s._v("For these you will be running "),n("a",{attrs:{href:"https://www.php.net/manual/en/install.fpm.configuration.php",target:"_blank",rel:"noopener noreferrer"}},[s._v("PHP-FPM"),n("OutboundLink")],1),s._v(" so you can add those settings at your "),n("code",[s._v("php-fpm.conf")]),s._v(" file.")]),s._v(" "),n("h3",{attrs:{id:"application-servers"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#application-servers"}},[s._v("#")]),s._v(" Application servers")]),s._v(" "),n("p",[s._v("For these you will be running PHP CLI so you should be able to pass those at "),n("code",[s._v("php.ini")]),s._v(" for your CLI. You can also "),n("code",[s._v("export")]),s._v(" those in your shell.")]),s._v(" "),n("p",[s._v("Refer to the documentation of each application server for the best way to pass environment variables to Chevereto.")]),s._v(" "),n("h3",{attrs:{id:"container"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#container"}},[s._v("#")]),s._v(" Container")]),s._v(" "),n("p",[s._v("Pass the environment variables to the "),n("code",[s._v("docker run")]),s._v(" command or at "),n("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/22.32378879.js b/assets/js/22.32378879.js new file mode 100644 index 00000000..62517717 --- /dev/null +++ b/assets/js/22.32378879.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{468:function(_,t,v){"use strict";v.r(t);var E=v(68),e=Object(E.a)({},(function(){var _=this,t=_.$createElement,v=_._self._c||t;return v("ContentSlotsDistributor",{attrs:{"slot-key":_.$parent.slotKey}},[v("h1",{attrs:{id:"environment"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#environment"}},[_._v("#")]),_._v(" Environment")]),_._v(" "),v("h2",{attrs:{id:"system-variables"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#system-variables"}},[_._v("#")]),_._v(" System variables")]),_._v(" "),v("p",[_._v("Environment variables for the system context.")]),_._v(" "),v("table",[v("thead",[v("tr",[v("th",[_._v("Variable")]),_._v(" "),v("th",[_._v("Example")])])]),_._v(" "),v("tbody",[v("tr",[v("td",[_._v("CHEVERETO_SERVICING")]),_._v(" "),v("td",[v("code",[_._v("server")]),_._v(", "),v("code",[_._v("docker")])])])])]),_._v(" "),v("h2",{attrs:{id:"database-variables"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#database-variables"}},[_._v("#")]),_._v(" Database variables")]),_._v(" "),v("p",[_._v("Environment variables for the database details.")]),_._v(" "),v("table",[v("thead",[v("tr",[v("th",[_._v("Variable")]),_._v(" "),v("th",[_._v("Example")])])]),_._v(" "),v("tbody",[v("tr",[v("td",[_._v("CHEVERETO_DB_DRIVER")]),_._v(" "),v("td",[_._v("mysql")])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_DB_HOST")]),_._v(" "),v("td",[_._v("mariadb")])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_DB_NAME")]),_._v(" "),v("td",[_._v("chevereto")])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_DB_PASS")]),_._v(" "),v("td",[_._v("user_database_password")])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_DB_PDO_ATTRS")]),_._v(" "),v("td",[v("code",[_._v('{"key":"value"}')]),_._v(" (json)")])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_DB_PORT")]),_._v(" "),v("td",[v("code",[_._v("3306")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_DB_TABLE_PREFIX")]),_._v(" "),v("td",[_._v("chv_")])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_DB_USER")]),_._v(" "),v("td",[_._v("chevereto")])])])]),_._v(" "),v("h2",{attrs:{id:"error-logging-variables"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#error-logging-variables"}},[_._v("#")]),_._v(" Error logging variables")]),_._v(" "),v("p",[_._v("Environment variables for handling "),v("RouterLink",{attrs:{to:"/application/reference/errors.html"}},[_._v("error")]),_._v(" logging.")],1),_._v(" "),v("table",[v("thead",[v("tr",[v("th",[_._v("Variable")]),_._v(" "),v("th",[_._v("Default")])])]),_._v(" "),v("tbody",[v("tr",[v("td",[_._v("CHEVERETO_ERROR_LOG_CLI")]),_._v(" "),v("td",[_._v("``")])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ERROR_LOG_CRON")]),_._v(" "),v("td",[_._v("``")])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ERROR_LOG")]),_._v(" "),v("td",[v("code",[_._v("php://stderr")])])])])]),_._v(" "),v("h2",{attrs:{id:"debug-variables"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#debug-variables"}},[_._v("#")]),_._v(" Debug variables")]),_._v(" "),v("p",[_._v("Environment variables for "),v("RouterLink",{attrs:{to:"/developer/how-to/debug.html"}},[_._v("debug")]),_._v(".")],1),_._v(" "),v("table",[v("thead",[v("tr",[v("th",[_._v("Variable")]),_._v(" "),v("th",[_._v("Example")])])]),_._v(" "),v("tbody",[v("tr",[v("td",[_._v("CHEVERETO_DEBUG_LEVEL")]),_._v(" "),v("td",[v("code",[_._v("1")])])])])]),_._v(" "),v("h2",{attrs:{id:"xrdebug-variables"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#xrdebug-variables"}},[_._v("#")]),_._v(" xrDebug variables")]),_._v(" "),v("p",[_._v("| CHEVERETO_ENABLE_XRDEBUG | "),v("code",[_._v("0")]),_._v(" |\n| CHEVERETO_XRDEBUG_HOST | "),v("code",[_._v("localhost")]),_._v(" |\n| CHEVERETO_XRDEBUG_HTTPS | "),v("code",[_._v("0")]),_._v(" |\n| CHEVERETO_XRDEBUG_KEY | `` |\n| CHEVERETO_XRDEBUG_PORT | 27420 |")]),_._v(" "),v("h2",{attrs:{id:"hostname-variables"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#hostname-variables"}},[_._v("#")]),_._v(" Hostname variables")]),_._v(" "),v("p",[_._v("Environment variables for the hostname configuration.")]),_._v(" "),v("table",[v("thead",[v("tr",[v("th",[_._v("Variable")]),_._v(" "),v("th",[_._v("Example")])])]),_._v(" "),v("tbody",[v("tr",[v("td",[_._v("CHEVERETO_HOSTNAME")]),_._v(" "),v("td",[v("code",[_._v("chevereto.internal")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_HOSTNAME_PATH")]),_._v(" "),v("td",[v("code",[_._v("/")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_HTTPS")]),_._v(" "),v("td",[v("code",[_._v("true")])])])])]),_._v(" "),v("h2",{attrs:{id:"encryption-key"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#encryption-key"}},[_._v("#")]),_._v(" Encryption key")]),_._v(" "),v("p",[_._v("Environment variables for the "),v("RouterLink",{attrs:{to:"/application/reference/encryption.html"}},[_._v("encryption")]),_._v(" functionality.")],1),_._v(" "),v("table",[v("thead",[v("tr",[v("th",[_._v("Variable")]),_._v(" "),v("th",[_._v("Type")])])]),_._v(" "),v("tbody",[v("tr",[v("td",[_._v("CHEVERETO_ENCRYPTION_KEY")]),_._v(" "),v("td",[_._v("base64 encoded (size 32)")])])])]),_._v(" "),v("h2",{attrs:{id:"session-variables"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#session-variables"}},[_._v("#")]),_._v(" Session variables")]),_._v(" "),v("p",[_._v("Environment variables for the session driver.")]),_._v(" "),v("table",[v("thead",[v("tr",[v("th",[_._v("Variable")]),_._v(" "),v("th",[_._v("Example")])])]),_._v(" "),v("tbody",[v("tr",[v("td",[_._v("CHEVERETO_SESSION_SAVE_HANDLER")]),_._v(" "),v("td",[v("code",[_._v("files")]),_._v(", "),v("code",[_._v("redis")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_SESSION_SAVE_PATH")]),_._v(" "),v("td",[v("code",[_._v("/tmp")])])])])]),_._v(" "),v("h2",{attrs:{id:"image-handling-variables"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#image-handling-variables"}},[_._v("#")]),_._v(" Image handling variables")]),_._v(" "),v("p",[_._v("Environment variables for controlling image handling.")]),_._v(" "),v("table",[v("thead",[v("tr",[v("th",[_._v("Variable")]),_._v(" "),v("th",[_._v("Example")])])]),_._v(" "),v("tbody",[v("tr",[v("td",[_._v("CHEVERETO_IMAGE_FORMATS_AVAILABLE")]),_._v(" "),v("td",[v("code",[_._v("'JPG','PNG','BMP','GIF','WEBP'")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_IMAGE_LIBRARY")]),_._v(" "),v("td",[v("code",[_._v("imagick")])])])])]),_._v(" "),v("h2",{attrs:{id:"binary-paths"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#binary-paths"}},[_._v("#")]),_._v(" Binary paths")]),_._v(" "),v("p",[_._v("Environment variables for controlling binary tools used by Chevereto.")]),_._v(" "),v("table",[v("thead",[v("tr",[v("th",[_._v("Variable")]),_._v(" "),v("th",[_._v("Example")])])]),_._v(" "),v("tbody",[v("tr",[v("td",[_._v("CHEVERETO_BINARY_FFMPEG")]),_._v(" "),v("td",[v("code",[_._v("/some/path/ffmpeg")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_BINARY_FFPROBE")]),_._v(" "),v("td",[v("code",[_._v("/some/path/ffprobe")])])])])]),_._v(" "),v("h2",{attrs:{id:"toggles"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#toggles"}},[_._v("#")]),_._v(" Toggles")]),_._v(" "),v("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(" "),v("table",[v("thead",[v("tr",[v("th",[_._v("Variable")]),_._v(" "),v("th",[_._v("Default")])])]),_._v(" "),v("tbody",[v("tr",[v("td",[_._v("CHEVERETO_ENABLE_API_GUEST")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_BANNERS")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_BULK_IMPORTER")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_CAPTCHA")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_CDN")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_CONSENT_SCREEN")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_COOKIE_COMPLIANCE")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_DEBUG")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_EXPOSE_PAID_FEATURES")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_EXTERNAL_SERVICES")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_EXTERNAL_STORAGE_PROVIDERS")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_FAVICON")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_FOLLOWERS")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_FORCE_POWERED_BY_FOOTER")]),_._v(" "),v("td",[v("code",[_._v("0")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_HTACCESS_CHECK")]),_._v(" "),v("td",[v("code",[_._v("0")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_IP_BANS")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_LANGUAGE_CHOOSER")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_LIKES")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_LOCAL_STORAGE")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_LOGIN_PROVIDERS")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_LOGO_CUSTOM")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_MODERATION")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_NEWS_CHECK")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_NOTIFICATIONS")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_PAGES")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_PHP_PAGES")]),_._v(" "),v("td",[v("code",[_._v("0")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_POWERED_BY_SETTING")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_PUP_CUSTOM_URL")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_ROUTING")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_SEO_ALBUM_URL")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_SEO_IMAGE_URL")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_SERVICE_AKISMET")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_SERVICE_MODERATECONTENT")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_SERVICE_PROJECTARACHNID")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_SERVICE_STOPFORUMSPAM")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_STOPWORDS")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_UPDATE_CHECK")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_UPDATE_CLI")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_UPDATE_HTTP")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_UPLOAD_FLOOD_PROTECTION")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_UPLOAD_PLUGIN")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_UPLOAD_URL")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_UPLOAD_WATERMARK")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_USERS")]),_._v(" "),v("td",[v("code",[_._v("1")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_ENABLE_XRDEBUG")]),_._v(" "),v("td",[v("code",[_._v("0")])])])])]),_._v(" "),v("h2",{attrs:{id:"limits"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#limits"}},[_._v("#")]),_._v(" Limits")]),_._v(" "),v("p",[_._v("Environment variables that limits the use for Chevereto")]),_._v(" "),v("p",[_._v("Zero "),v("code",[_._v("0")]),_._v(" means no limit.")]),_._v(" "),v("table",[v("thead",[v("tr",[v("th",[_._v("Variable")]),_._v(" "),v("th",[_._v("Example")])])]),_._v(" "),v("tbody",[v("tr",[v("td",[_._v("CHEVERETO_MAX_ADMINS")]),_._v(" "),v("td",[v("code",[_._v("0")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_ALBUMS")]),_._v(" "),v("td",[v("code",[_._v("0")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_CATEGORIES")]),_._v(" "),v("td",[v("code",[_._v("0")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_EXECUTION_TIME_SECONDS")]),_._v(" "),v("td",[v("code",[_._v("30")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_FILES")]),_._v(" "),v("td",[v("code",[_._v("0")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_LOGIN_PROVIDERS")]),_._v(" "),v("td",[v("code",[_._v("0")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_MANAGERS")]),_._v(" "),v("td",[v("code",[_._v("0")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_MEMORY_SIZE")]),_._v(" "),v("td",[v("code",[_._v("512M")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_PAGES")]),_._v(" "),v("td",[v("code",[_._v("0")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_POST_SIZE")]),_._v(" "),v("td",[v("code",[_._v("100M")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_STORAGES")]),_._v(" "),v("td",[v("code",[_._v("0")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_TAGS_PER_FILE")]),_._v(" "),v("td",[v("code",[_._v("0")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_TAGS_PER_LISTING")]),_._v(" "),v("td",[v("code",[_._v("0")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_TAGS")]),_._v(" "),v("td",[v("code",[_._v("0")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_UPLOAD_SIZE")]),_._v(" "),v("td",[v("code",[_._v("100M")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_USER_ALBUMS_LIST")]),_._v(" "),v("td",[v("code",[_._v("500")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_USERS")]),_._v(" "),v("td",[v("code",[_._v("0")])])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MIN_STORAGES_ACTIVE")]),_._v(" "),v("td",[v("code",[_._v("0")])])])])]),_._v(" "),v("ul",[v("li",[_._v("For "),v("code",[_._v("CHEVERETO_MAX_USER_ALBUMS_LIST")]),_._v(" it affects the number of albums on user's dropdown album menus.")])]),_._v(" "),v("h2",{attrs:{id:"file-upload"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#file-upload"}},[_._v("#")]),_._v(" File upload")]),_._v(" "),v("p",[_._v("Environment variables for the file uploading limits. It applies only for our container provisioning.")]),_._v(" "),v("p",[_._v("For "),v("strong",[_._v("non-container")]),_._v(" based provisioning you need to change these settings at "),v("RouterLink",{attrs:{to:"/application/stack/php.html#configuration"}},[_._v("php.ini configuration")]),_._v(".")],1),_._v(" "),v("table",[v("thead",[v("tr",[v("th",[_._v("Variable")]),_._v(" "),v("th",[_._v("Example")])])]),_._v(" "),v("tbody",[v("tr",[v("td",[_._v("CHEVERETO_MAX_UPLOAD_SIZE")]),_._v(" "),v("td",[_._v("64M")])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_POST_SIZE")]),_._v(" "),v("td",[_._v("64M")])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_EXECUTION_TIME_SECONDS")]),_._v(" "),v("td",[_._v("30")])]),_._v(" "),v("tr",[v("td",[_._v("CHEVERETO_MAX_MEMORY_SIZE")]),_._v(" "),v("td",[_._v("512M")])])])]),_._v(" "),v("h2",{attrs:{id:"proxy"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#proxy"}},[_._v("#")]),_._v(" Proxy")]),_._v(" "),v("p",[_._v("Environment variables for tweaking server handling when the server is under a proxy.")]),_._v(" "),v("table",[v("thead",[v("tr",[v("th",[_._v("Variable")]),_._v(" "),v("th",[_._v("Example")])])]),_._v(" "),v("tbody",[v("tr",[v("td",[_._v("CHEVERETO_HEADER_CLIENT_IP")]),_._v(" "),v("td",[_._v("X-Real-IP")])])])])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/23.fc46a599.js b/assets/js/23.fc46a599.js new file mode 100644 index 00000000..cb298a96 --- /dev/null +++ b/assets/js/23.fc46a599.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{467:function(e,t,r){"use strict";r.r(t);var o=r(68),n=Object(o.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"from-free"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#from-free"}},[e._v("#")]),e._v(" From free")]),e._v(" "),r("p",[e._v("You can upgrade from Chevereto free edition to any paid edition.")]),e._v(" "),r("h2",{attrs:{id:"chevereto-chevereto"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-chevereto"}},[e._v("#")]),e._v(" chevereto/chevereto")]),e._v(" "),r("p",[e._v("Users of "),r("a",{attrs:{href:"https://github.com/chevereto/chevereto",target:"_blank",rel:"noopener noreferrer"}},[e._v("chevereto/chevereto"),r("OutboundLink")],1),e._v(" can one-click upgrade from the dashboard panel.")]),e._v(" "),r("ul",[r("li",[e._v("Go to "),r("code",[e._v("/dashboard")])]),e._v(" "),r("li",[e._v("Click on "),r("strong",[e._v("License key")]),e._v(" button")]),e._v(" "),r("li",[e._v("Enter license key and click on "),r("strong",[e._v("Save changes")])]),e._v(" "),r("li",[e._v("Follow the on-screen upgrade instructions")])]),e._v(" "),r("p",[e._v("To manual upgrade follow the "),r("RouterLink",{attrs:{to:"/application/installing/updating.html"}},[e._v("Updating")]),e._v(" documentation using the paid edition files.")],1),e._v(" "),r("p",[r("strong",[e._v("Note:")]),e._v(" "),r("RouterLink",{attrs:{to:"/guides/docker/"}},[e._v("Docker")]),e._v(" users don't need any of these steps, simply follow the "),r("RouterLink",{attrs:{to:"/guides/docker/#upgrading"}},[e._v("Docker upgrading")]),e._v(" guide.")],1),e._v(" "),r("h2",{attrs:{id:"rodber-chevereto-free"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#rodber-chevereto-free"}},[e._v("#")]),e._v(" rodber/chevereto-free")]),e._v(" "),r("p",[e._v("Users of "),r("a",{attrs:{href:"https://github.com/rodber/chevereto-free",target:"_blank",rel:"noopener noreferrer"}},[e._v("rodber/chevereto-free"),r("OutboundLink")],1),e._v(" need to update to Chevereto-Free "),r("code",[e._v("1.6.2")]),e._v(" and from there follow the "),r("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/24.f25f31f3.js b/assets/js/24.f25f31f3.js new file mode 100644 index 00000000..e9099633 --- /dev/null +++ b/assets/js/24.f25f31f3.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{469:function(e,t,a){"use strict";a.r(t);var r=a(68),s=Object(r.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[e._v("#")]),e._v(" Installation")]),e._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("Installation service available")]),e._v(" "),a("p",[e._v("We offer a "),a("a",{attrs:{href:"https://chevereto.com/support",target:"_blank",rel:"noopener noreferrer"}},[e._v("paid installation service"),a("OutboundLink")],1),e._v(" for Chevereto. We will install Chevereto for you, including all the requirements and configurations.")])]),e._v(" "),a("p",[e._v("Installation refers to the process where the "),a("strong",[e._v("software files")]),e._v(" gets provided in the target machine.")]),e._v(" "),a("h2",{attrs:{id:"stack"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#stack"}},[e._v("#")]),e._v(" Stack")]),e._v(" "),a("p",[e._v("Chevereto requires "),a("RouterLink",{attrs:{to:"/application/stack/php.html"}},[e._v("PHP")]),e._v(", a "),a("RouterLink",{attrs:{to:"/application/stack/web-server.html"}},[e._v("Web Server")]),e._v(", "),a("RouterLink",{attrs:{to:"/application/stack/mysql-server.html"}},[e._v("MySQL database")]),e._v(" and "),a("RouterLink",{attrs:{to:"/application/stack/cron.html"}},[e._v("CRON")]),e._v(".")],1),e._v(" "),a("h2",{attrs:{id:"official-guides"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#official-guides"}},[e._v("#")]),e._v(" Official guides")]),e._v(" "),a("p",[e._v("For fresh installations continue with one of the following guides.")]),e._v(" "),a("ul",[a("li",[e._v("Docker\n"),a("ul",[a("li",[a("RouterLink",{attrs:{to:"/guides/docker/"}},[e._v("Chevereto Docker")])],1),e._v(" "),a("li",[a("RouterLink",{attrs:{to:"/guides/docker/pure-docker.html"}},[e._v("Pure Docker")])],1)])]),e._v(" "),a("li",[a("RouterLink",{attrs:{to:"/guides/server/vps.html"}},[e._v("VPS")])],1),e._v(" "),a("li",[a("RouterLink",{attrs:{to:"/guides/cpanel/"}},[e._v("cPanel")])],1),e._v(" "),a("li",[a("RouterLink",{attrs:{to:"/guides/plesk/"}},[e._v("Plesk")])],1)]),e._v(" "),a("h2",{attrs:{id:"community-guides"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#community-guides"}},[e._v("#")]),e._v(" Community guides")]),e._v(" "),a("p",[e._v("The following guides have been contributed by users of the software.")]),e._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://mariushosting.com/how-to-install-chevereto-on-your-synology-nas/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto Synology NAS"),a("OutboundLink")],1)])]),e._v(" "),a("h2",{attrs:{id:"marketplace"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#marketplace"}},[e._v("#")]),e._v(" Marketplace")]),e._v(" "),a("p",[e._v("Chevereto is available at the following application marketplaces.")]),e._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://chevereto.com/go/digitalocean",target:"_blank",rel:"noopener noreferrer"}},[e._v("DigitalOcean Marketplace"),a("OutboundLink")],1)]),e._v(" "),a("li",[a("a",{attrs:{href:"https://chevereto.com/go/vultr",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vultr Marketplace"),a("OutboundLink")],1)])]),e._v(" "),a("h2",{attrs:{id:"using-installer-software"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-installer-software"}},[e._v("#")]),e._v(" Using installer software")]),e._v(" "),a("p",[e._v("Chevereto is available at the following installers, look for the following software at your hosting control panel.")]),e._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://installatron.com/chevereto",target:"_blank",rel:"noopener noreferrer"}},[e._v("Installatron"),a("OutboundLink")],1)]),e._v(" "),a("li",[a("a",{attrs:{href:"https://www.softaculous.com/apps/galleries/Chevereto",target:"_blank",rel:"noopener noreferrer"}},[e._v("Softaculous"),a("OutboundLink")],1)]),e._v(" "),a("li",[a("a",{attrs:{href:"https://swiftwave.org/docs/dashboard/swiftwave_app_store/",target:"_blank",rel:"noopener noreferrer"}},[e._v("SwiftWave"),a("OutboundLink")],1)])]),e._v(" "),a("h2",{attrs:{id:"using-release-package"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-release-package"}},[e._v("#")]),e._v(" Using release package")]),e._v(" "),a("p",[e._v("The release package is a "),a("code",[e._v("zip")]),e._v(" file containing the software files.")]),e._v(" "),a("ul",[a("li",[e._v("Paid edition package available at your "),a("a",{attrs:{href:"https://chevereto.com/panel/downloads",target:"_blank",rel:"noopener noreferrer"}},[e._v("client panel"),a("OutboundLink")],1),e._v(".")]),e._v(" "),a("li",[e._v("Free edition package available at "),a("a",{attrs:{href:"https://github.com/chevereto/chevereto/releases",target:"_blank",rel:"noopener noreferrer"}},[e._v("chevereto/chevereto"),a("OutboundLink")],1),e._v(".")])]),e._v(" "),a("h3",{attrs:{id:"manual-cli"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#manual-cli"}},[e._v("#")]),e._v(" Manual (CLI)")]),e._v(" "),a("p",[e._v("Run the following "),a("a",{attrs:{href:"https://github.com/chevereto/vps#get",target:"_blank",rel:"noopener noreferrer"}},[e._v("command"),a("OutboundLink")],1),e._v(" to download and extract package:")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -s https://raw.githubusercontent.com/chevereto/vps/4.0/common/get.sh"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n")])])]),a("h3",{attrs:{id:"manual-gui"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#manual-gui"}},[e._v("#")]),e._v(" Manual (GUI)")]),e._v(" "),a("ul",[a("li",[e._v("Upload the latest release to a non-public path in your server")]),e._v(" "),a("li",[e._v("Unzip the package in the target website directory ("),a("code",[e._v("public_html")]),e._v(" folder)")]),e._v(" "),a("li",[e._v("Remove the "),a("code",[e._v(".zip")]),e._v(" file")]),e._v(" "),a("li",[e._v("Open your target website URL and follow the "),a("a",{attrs:{href:"#setup"}},[e._v("Setup")]),e._v(" instructions")])]),e._v(" "),a("h2",{attrs:{id:"setup"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#setup"}},[e._v("#")]),e._v(" Setup")]),e._v(" "),a("p",[e._v("Once the software files are provided the software is ready for "),a("a",{attrs:{href:"#setup"}},[e._v("Setup")]),e._v(". This is required only once per instance.")]),e._v(" "),a("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 "),a("a",{attrs:{href:"#install-gui"}},[e._v("HTTP")]),e._v(" or "),a("a",{attrs:{href:"#install-cli"}},[e._v("CLI")]),e._v(" context.")]),e._v(" "),a("h3",{attrs:{id:"install-gui"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#install-gui"}},[e._v("#")]),e._v(" Install (GUI)")]),e._v(" "),a("ul",[a("li",[e._v("Go to "),a("code",[e._v("/install")])])]),e._v(" "),a("h3",{attrs:{id:"install-cli"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#install-cli"}},[e._v("#")]),e._v(" Install (CLI)")]),e._v(" "),a("ul",[a("li",[e._v("Refer to "),a("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/25.100c7a66.js b/assets/js/25.100c7a66.js new file mode 100644 index 00000000..f58b36fd --- /dev/null +++ b/assets/js/25.100c7a66.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{471:function(e,t,a){"use strict";a.r(t);var r=a(68),o=Object(r.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"updating"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#updating"}},[e._v("#")]),e._v(" Updating")]),e._v(" "),a("p",[e._v("This process is for instances already running "),a("strong",[e._v("Chevereto V4")]),e._v(". The process consist in update software files and then proceed with database migrations.")]),e._v(" "),a("h2",{attrs:{id:"software-filesystem-update"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#software-filesystem-update"}},[e._v("#")]),e._v(" Software filesystem update")]),e._v(" "),a("p",[e._v("To update the software files depends on how you installed Chevereto. Follow the instructions for your installation method.")]),e._v(" "),a("h3",{attrs:{id:"release-package"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#release-package"}},[e._v("#")]),e._v(" Release package")]),e._v(" "),a("p",[e._v("This applies to any "),a("strong",[e._v("non-Docker")]),e._v(" installation.")]),e._v(" "),a("p",[a("strong",[e._v("Note:")]),e._v(" For paid edition and if you haven't entered your license key make to visit "),a("code",[e._v("/dashboard/?license")]),e._v(" first.")]),e._v(" "),a("ul",[a("li",[e._v("Go to "),a("code",[e._v("/dashboard")])]),e._v(" "),a("li",[e._v("Click on "),a("strong",[e._v("Check upgrades")]),e._v(" button")]),e._v(" "),a("li",[e._v("Follow the on-screen upgrade instructions")])]),e._v(" "),a("p",[e._v("For CLI driven update run the following command:")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("php app/upgrading.php\n")])])]),a("p",[e._v("If you need to force upgrade (re-download software files) you can do it by accessing to "),a("code",[e._v("/dashboard/?upgrade")]),e._v(".")]),e._v(" "),a("p",[e._v("For manual upgrade refer to "),a("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(" "),a("h3",{attrs:{id:"docker"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#docker"}},[e._v("#")]),e._v(" Docker")]),e._v(" "),a("p",[e._v("When using Docker it will required to re-build the Chevereto image ("),a("a",{attrs:{href:"https://github.com/chevereto/docker/blob/4.1/docs/BUILDING.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("make image"),a("OutboundLink")],1),e._v(" or "),a("a",{attrs:{href:"https://github.com/chevereto/docker/blob/4.1/docs/PURE-DOCKER.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("docker build"),a("OutboundLink")],1),e._v(") and then re-start the containers.")]),e._v(" "),a("p",[e._v("Refer to "),a("a",{attrs:{href:"https://github.com/chevereto/docker/blob/4.1/docs/UPDATING.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("UPDATING"),a("OutboundLink")],1),e._v(" for instructions.")]),e._v(" "),a("h2",{attrs:{id:"database-update"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#database-update"}},[e._v("#")]),e._v(" Database update")]),e._v(" "),a("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(" "),a("h3",{attrs:{id:"http-database-update"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#http-database-update"}},[e._v("#")]),e._v(" HTTP database update")]),e._v(" "),a("p",[e._v("To update Chevereto database via web:")]),e._v(" "),a("ul",[a("li",[e._v("Login as Admin")]),e._v(" "),a("li",[e._v("Go to "),a("code",[e._v("/update")])])]),e._v(" "),a("h3",{attrs:{id:"cli-database-update"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#cli-database-update"}},[e._v("#")]),e._v(" CLI database update")]),e._v(" "),a("p",[e._v("To update Chevereto database from the command line:")]),e._v(" "),a("ul",[a("li",[e._v("SSH and "),a("code",[e._v("cd")]),e._v(" to your Chevereto instance")]),e._v(" "),a("li",[e._v("Run "),a("RouterLink",{attrs:{to:"/application/reference/cli.html#update"}},[e._v("CLI update")]),e._v(" "),a("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/26.dfbbafe4.js b/assets/js/26.dfbbafe4.js new file mode 100644 index 00000000..7076645b --- /dev/null +++ b/assets/js/26.dfbbafe4.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{470:function(t,s,e){"use strict";e.r(s);var a=e(68),n=Object(a.a)({},(function(){var t=this,s=t.$createElement,e=t._self._c||s;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"upgrading"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#upgrading"}},[t._v("#")]),t._v(" Upgrading")]),t._v(" "),e("p",[t._v("This process is for upgrading to Chevereto V4 from "),e("strong",[t._v("Chevereto V3.20")]),t._v(" (previous major release). Check "),e("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(" "),e("p",[t._v("Review "),e("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(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("ul",[e("li",[t._v("Existing installation running Chevereto V3.20")]),t._v(" "),e("li",[t._v("Backup for the existing previous installation (optional, recommended)")])]),t._v(" "),e("h2",{attrs:{id:"upgrade-to-v4"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#upgrade-to-v4"}},[t._v("#")]),t._v(" Upgrade to V4")]),t._v(" "),e("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(" "),e("p",[t._v("Follow these step:")]),t._v(" "),e("ul",[e("li",[t._v("Remove "),e("code",[t._v("app/vendor")]),t._v(" from your Chevereto V3 installation")]),t._v(" "),e("li",[t._v("Override Chevereto V3 files with Chevereto V4 files")]),t._v(" "),e("li",[t._v("Switch to PHP 8")]),t._v(" "),e("li",[t._v("Create "),e("RouterLink",{attrs:{to:"/application/configuration/configuring.html"}},[t._v("app/env.php")]),t._v(" (see remark below)")],1),t._v(" "),e("li",[t._v("Proceed with "),e("RouterLink",{attrs:{to:"/application/installing/updating.html#database-update"}},[t._v("database update")])],1)]),t._v(" "),e("h3",{attrs:{id:"application-settings"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#application-settings"}},[t._v("#")]),t._v(" Application settings")]),t._v(" "),e("p",[t._v("Chevereto V4 uses a new "),e("RouterLink",{attrs:{to:"/application/configuration/configuring.html"}},[t._v("configuration")]),t._v(" standard.")],1),t._v(" "),e("ul",[e("li",[t._v("Rename "),e("code",[t._v("app/settings.php")]),t._v(" to "),e("code",[t._v("app/env.php")])]),t._v(" "),e("li",[t._v("Update file accordingly the updated "),e("RouterLink",{attrs:{to:"/application/configuration/environment.html"}},[t._v("environment")])],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 php language-php"}},[e("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'localhost'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'CHEVERETO_DB_NAME'")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'chevereto'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'CHEVERETO_DB_USER'")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'user'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'CHEVERETO_DB_PASS'")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'pass'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),e("h3",{attrs:{id:"cron"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cron"}},[t._v("#")]),t._v(" CRON")]),t._v(" "),e("p",[t._v("Chevereto V4 comes with a new console. You must update your "),e("RouterLink",{attrs:{to:"/application/stack/cron.html"}},[t._v("CRON")]),t._v(" command to point to the new location.")],1),t._v(" "),e("p",[t._v("From Chevereto V3 cron:")]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[t._v("cli.php -C "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("cron")]),t._v("\n")])])]),e("p",[t._v("To Chevereto V4 cron:")]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[t._v("app/bin/legacy -C "),e("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/27.b77b076a.js b/assets/js/27.b77b076a.js new file mode 100644 index 00000000..00518bb2 --- /dev/null +++ b/assets/js/27.b77b076a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{473:function(e,t,a){"use strict";a.r(t);var s=a(68),r=Object(s.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"cli"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#cli"}},[e._v("#")]),e._v(" CLI")]),e._v(" "),a("p",[a("code",[e._v("app/bin/legacy")])]),e._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[e._v("Don't run as root")]),e._v(" "),a("p",[e._v("The Chevereto console "),a("strong",[e._v("won't work")]),e._v(" when using "),a("code",[e._v("root")]),e._v(" user. It must be called from a normal user.")])]),e._v(" "),a("p",[e._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:")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("app/bin/legacy -C "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("command"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("options"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])])]),a("ul",[a("li",[a("code",[e._v("app/bin/legacy")]),e._v(" path to the Chevereto console file")]),e._v(" "),a("li",[a("code",[e._v("")]),e._v(" task to run")]),e._v(" "),a("li",[a("code",[e._v("")]),e._v(" options for command")])]),e._v(" "),a("p",[e._v("Command invocation vary depending on the system context, here samples for Debian and Docker:")]),e._v(" "),a("code-group",[a("code-block",{attrs:{title:"Debian"}},[a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" -u www-data app/bin/legacy -C "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("command"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("options"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])])])]),e._v(" "),a("code-block",{attrs:{title:"Docker"}},[a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("docker")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("exec")]),e._v(" -it --user www-data "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n container_name "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n app/bin/legacy -C "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("command"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("options"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])])])])],1),e._v(" "),a("h2",{attrs:{id:"install"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#install"}},[e._v("#")]),e._v(" Install")]),e._v(" "),a("p",[e._v("The "),a("code",[e._v("install")]),e._v(" command installs Chevereto. It requires to pass the admin user details.")]),e._v(" "),a("p",[e._v('To install Chevereto for user "rodolfo" with password "myPassword":')]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("app/bin/legacy -C "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n -u rodolfo "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n -e rodolfo@chevereto.loc "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n -x myPassword\n")])])]),a("table",[a("thead",[a("tr",[a("th",[e._v("Option")]),e._v(" "),a("th",[e._v("Description")])])]),e._v(" "),a("tbody",[a("tr",[a("td",[e._v("u")]),e._v(" "),a("td",[e._v("Admin username")])]),e._v(" "),a("tr",[a("td",[e._v("e")]),e._v(" "),a("td",[e._v("Admin email")])]),e._v(" "),a("tr",[a("td",[e._v("x")]),e._v(" "),a("td",[e._v("Admin password")])])])]),e._v(" "),a("h2",{attrs:{id:"update"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#update"}},[e._v("#")]),e._v(" Update")]),e._v(" "),a("p",[e._v("The "),a("code",[e._v("update")]),e._v(" command updates the Chevereto database schema.")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("app/bin/legacy -C update\n")])])]),a("h2",{attrs:{id:"version"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#version"}},[e._v("#")]),e._v(" Version")]),e._v(" "),a("p",[e._v("The "),a("code",[e._v("version")]),e._v(" command outputs the Chevereto filesystem version.")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("app/bin/legacy -C version\n")])])]),a("h2",{attrs:{id:"cron"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#cron"}},[e._v("#")]),e._v(" Cron")]),e._v(" "),a("p",[e._v("The "),a("code",[e._v("cron")]),e._v(" command runs the background jobs required by Chevereto.")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("app/bin/legacy -C "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("cron")]),e._v("\n")])])]),a("h2",{attrs:{id:"bulk-importer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bulk-importer"}},[e._v("#")]),e._v(" Bulk importer")]),e._v(" "),a("p",[e._v("The "),a("code",[e._v("bulk-importer")]),e._v(" command process files for "),a("a",{attrs:{href:"https://v4-admin.chevereto.com/dashboard/bulk-importer.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bulk importer"),a("OutboundLink")],1),e._v(".")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("app/bin/legacy -C bulk-importer\n")])])]),a("h2",{attrs:{id:"encryption"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#encryption"}},[e._v("#")]),e._v(" Encryption")]),e._v(" "),a("p",[e._v("To use encryption it requires to configure the "),a("RouterLink",{attrs:{to:"/application/configuration/environment.html#encryption-key"}},[e._v("CHEVERETO_ENCRYPTION_KEY")]),e._v(" environment variable.")],1),e._v(" "),a("h3",{attrs:{id:"encrypt-secrets"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#encrypt-secrets"}},[e._v("#")]),e._v(" Encrypt secrets")]),e._v(" "),a("p",[e._v("The "),a("code",[e._v("encrypt-secrets")]),e._v(" command "),a("RouterLink",{attrs:{to:"/application/reference/encryption.html"}},[e._v("encrypts")]),e._v(" the application plain text secrets (not already encrypted) in the database.")],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 -C encrypt-secrets\n")])])]),a("p",[e._v("If the application secrets are "),a("strong",[e._v("already encrypted")]),e._v(" (stored as cipher text) it will require to pass the key for decrypting the existing secrets. Use the "),a("code",[e._v("-k")]),e._v(" argument to indicate the key for the already stored cipher texts:")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("app/bin/legacy -C encrypt-secrets -k key_for_stored_data\n")])])]),a("h3",{attrs:{id:"decrypt-secrets"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#decrypt-secrets"}},[e._v("#")]),e._v(" Decrypt secrets")]),e._v(" "),a("p",[e._v("The "),a("code",[e._v("decrypt-secrets")]),e._v(" command decrypts the application secrets stored as cipher text in the database.")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("app/bin/legacy -C decrypt-secrets\n")])])]),a("p",[e._v("After running the above command set "),a("code",[e._v("CHEVERETO_ENCRYPTION_KEY")]),e._v(" to "),a("strong",[e._v("empty string")]),e._v(" to disable encryption.")]),e._v(" "),a("h2",{attrs:{id:"htaccess"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#htaccess"}},[e._v("#")]),e._v(" Htaccess")]),e._v(" "),a("h3",{attrs:{id:"htaccess-checksum"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#htaccess-checksum"}},[e._v("#")]),e._v(" Htaccess checksum")]),e._v(" "),a("p",[e._v("The "),a("code",[e._v("htaccess-checksum")]),e._v(" command generates safe "),a("code",[e._v(".htaccess")]),e._v(" for Chevereto folders.")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("app/bin/legacy -C htaccess-checksum\n")])])]),a("h3",{attrs:{id:"htaccess-enforce"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#htaccess-enforce"}},[e._v("#")]),e._v(" Htaccess enforce")]),e._v(" "),a("p",[e._v("The "),a("code",[e._v("htaccess-enforce")]),e._v(" command checks for any alteration on the "),a("code",[e._v(".htaccess")]),e._v(" files and reverts them to the defaults included by Chevereto.")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("app/bin/legacy -C htaccess-enforce\n")])])]),a("h2",{attrs:{id:"langs"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#langs"}},[e._v("#")]),e._v(" Langs")]),e._v(" "),a("p",[e._v("The "),a("code",[e._v("langs")]),e._v(" command generates the cache for language translations. The command outputs the list of languages processed.")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("app/bin/legacy -C langs\n")])])]),a("h2",{attrs:{id:"password-reset"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#password-reset"}},[e._v("#")]),e._v(" Password reset")]),e._v(" "),a("p",[e._v("The "),a("code",[e._v("password-reset")]),e._v(" command generates and assign a new password for the target username. The command outputs the new password.")]),e._v(" "),a("p",[e._v('To reset the password for user "rodolfo":')]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("app/bin/legacy -C password-reset -u rodolfo\n")])])]),a("h2",{attrs:{id:"settings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[e._v("#")]),e._v(" Settings")]),e._v(" "),a("h3",{attrs:{id:"setting-get"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#setting-get"}},[e._v("#")]),e._v(" Setting get")]),e._v(" "),a("p",[e._v("The "),a("code",[e._v("setting-get")]),e._v(" command retrieves the target database setting key value.")]),e._v(" "),a("p",[e._v('To get the value for "chevereto_version_installed":')]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("app/bin/legacy -C setting-get -k chevereto_version_installed\n")])])]),a("h3",{attrs:{id:"setting-update"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#setting-update"}},[e._v("#")]),e._v(" Setting update")]),e._v(" "),a("p",[e._v("The "),a("code",[e._v("setting-update")]),e._v(" command updates the target database setting key value. It outputs the value after update.")]),e._v(" "),a("p",[e._v('To update the value for "maintenance":')]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("app/bin/legacy -C setting-update -k maintenance -v "),a("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("true")]),e._v("\n")])])])],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/28.c9793a1e.js b/assets/js/28.c9793a1e.js new file mode 100644 index 00000000..623cd1f4 --- /dev/null +++ b/assets/js/28.c9793a1e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{472:function(e,t,r){"use strict";r.r(t);var a=r(68),n=Object(a.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"encryption"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#encryption"}},[e._v("#")]),e._v(" Encryption")]),e._v(" "),r("p",[e._v("Chevereto uses "),r("a",{attrs:{href:"https://datatracker.ietf.org/doc/html/rfc7539",target:"_blank",rel:"noopener noreferrer"}},[e._v("ChaCha20"),r("OutboundLink")],1),e._v(" algorithm to cipher secrets and sensitive data. When enabled, Chevereto will store these values encrypted in the database.")]),e._v(" "),r("div",{staticClass:"custom-block tip"},[r("p",{staticClass:"custom-block-title"},[e._v("Requires manual update")]),e._v(" "),r("p",[e._v("Encryption in Chevereto was added in "),r("code",[e._v("v4.0.0-beta.10")]),e._v(". If you installed Chevereto prior to this release you will require to "),r("a",{attrs:{href:"#enabling-encryption"}},[e._v("manually enable encryption")]),e._v(".")])]),e._v(" "),r("h2",{attrs:{id:"what-is-encrypted"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#what-is-encrypted"}},[e._v("#")]),e._v(" What is encrypted?")]),e._v(" "),r("h3",{attrs:{id:"settings-secrets"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#settings-secrets"}},[e._v("#")]),e._v(" Settings secrets")]),e._v(" "),r("p",[e._v("The following settings are encrypted in the database:")]),e._v(" "),r("table",[r("thead",[r("tr",[r("th",[e._v("Setting")]),e._v(" "),r("th",[e._v("Key")])])]),e._v(" "),r("tbody",[r("tr",[r("td",[r("RouterLink",{attrs:{to:"/developer/api/api-v1.html#key"}},[e._v("API V1 key (public)")])],1),e._v(" "),r("td",[e._v("api_v1_key")])]),e._v(" "),r("tr",[r("td",[e._v("Album password")]),e._v(" "),r("td",[e._v("album_password")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/email.html#smtp-server-and-port",target:"_blank",rel:"noopener noreferrer"}},[e._v("SMTP server"),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("email_smtp_server")])]),e._v(" "),r("tr",[r("td",[e._v("SMTP port")]),e._v(" "),r("td",[e._v("email_smtp_server_port")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/email.html#smtp-username",target:"_blank",rel:"noopener noreferrer"}},[e._v("SMTP username"),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("email_smtp_server_username")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/email.html#smtp-password",target:"_blank",rel:"noopener noreferrer"}},[e._v("SMTP password"),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("email_smtp_server_password")])]),e._v(" "),r("tr",[r("td",[r("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"),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("recaptcha_private_key")])]),e._v(" "),r("tr",[r("td",[r("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"),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("disqus_secret_key")])]),e._v(" "),r("tr",[r("td",[r("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"),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("akismet_api_key")])]),e._v(" "),r("tr",[r("td",[r("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"),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("moderatecontent_key")])]),e._v(" "),r("tr",[r("td",[r("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"),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("arachnid_api_username")])]),e._v(" "),r("tr",[r("td",[r("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"),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("arachnid_api_password")])])])]),e._v(" "),r("h3",{attrs:{id:"storage-credentials"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#storage-credentials"}},[e._v("#")]),e._v(" Storage credentials")]),e._v(" "),r("p",[e._v("The following storage columns for "),r("code",[e._v("chv_storages")]),e._v(" are encrypted in the database:")]),e._v(" "),r("ul",[r("li",[e._v("server")]),e._v(" "),r("li",[e._v("service")]),e._v(" "),r("li",[e._v("account_id")]),e._v(" "),r("li",[e._v("account_name")]),e._v(" "),r("li",[e._v("key")]),e._v(" "),r("li",[e._v("secret")]),e._v(" "),r("li",[e._v("bucket")])]),e._v(" "),r("h3",{attrs:{id:"two-factor-secrets"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#two-factor-secrets"}},[e._v("#")]),e._v(" Two-factor secrets")]),e._v(" "),r("p",[e._v("Two-factor secret codes used to generate TOTP are encrypted in the database. Table "),r("code",[e._v("chv_two_factors")]),e._v(".")]),e._v(" "),r("h2",{attrs:{id:"key"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#key"}},[e._v("#")]),e._v(" Key")]),e._v(" "),r("p",[e._v("The encryption key is base64 encoded random string of size 32. To generate a key use "),r("code",[e._v("openssl")]),e._v(":")]),e._v(" "),r("div",{staticClass:"language-sh extra-class"},[r("pre",{pre:!0,attrs:{class:"language-sh"}},[r("code",[e._v("openssl rand -base64 "),r("span",{pre:!0,attrs:{class:"token number"}},[e._v("32")]),e._v("\n")])])]),r("h3",{attrs:{id:"key-security"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#key-security"}},[e._v("#")]),e._v(" Key security")]),e._v(" "),r("p",[e._v("Handle the encryption key with the same discretion of a password.")]),e._v(" "),r("ul",[r("li",[e._v("The encryption key should remain "),r("strong",[e._v("private")]),e._v(".")]),e._v(" "),r("li",[e._v("Don't re-use the same key in different installations.")]),e._v(" "),r("li",[e._v("Backup the key in a safe location.")])]),e._v(" "),r("h2",{attrs:{id:"enabling-encryption"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#enabling-encryption"}},[e._v("#")]),e._v(" Enabling encryption")]),e._v(" "),r("p",[e._v("To enable encryption provide the "),r("RouterLink",{attrs:{to:"/application/configuration/environment.html#encryption-key"}},[e._v("CHEVERETO_ENCRYPTION_KEY")]),e._v(" environment variable.")],1),e._v(" "),r("p",[e._v("This key is automatic provided when using "),r("RouterLink",{attrs:{to:"/application/installing/installation.html#setup"}},[e._v("HTTP setup")]),e._v(", stored in the "),r("RouterLink",{attrs:{to:"/application/configuration/env.php.html"}},[e._v("env.php")]),e._v(" file.")],1),e._v(" "),r("h3",{attrs:{id:"from-previous-versions"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#from-previous-versions"}},[e._v("#")]),e._v(" From previous versions")]),e._v(" "),r("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(" "),r("p",[e._v("To manually enable encryption:")]),e._v(" "),r("ul",[r("li",[e._v("Enable "),r("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/system.html#maintenance",target:"_blank",rel:"noopener noreferrer"}},[e._v("maintenance"),r("OutboundLink")],1),e._v(" mode.")]),e._v(" "),r("li",[r("RouterLink",{attrs:{to:"/application/configuration/configuring.html"}},[e._v("Configure")]),e._v(" the "),r("code",[e._v("CHEVERETO_ENCRYPTION_KEY")]),e._v(" variable.")],1),e._v(" "),r("li",[e._v("Run "),r("RouterLink",{attrs:{to:"/application/reference/cli.html#encrypt-secrets"}},[e._v("encrypt-secrets")]),e._v(" command.")],1),e._v(" "),r("li",[e._v("Disable maintenance mode.")])]),e._v(" "),r("h2",{attrs:{id:"disabling-encryption"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#disabling-encryption"}},[e._v("#")]),e._v(" Disabling encryption")]),e._v(" "),r("p",[e._v("When disabling encryption all the cipher texts stored in the database will be reverted to its plain text value.")]),e._v(" "),r("p",[e._v("To disable encryption:")]),e._v(" "),r("ul",[r("li",[e._v("Enable "),r("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/system.html#maintenance",target:"_blank",rel:"noopener noreferrer"}},[e._v("maintenance"),r("OutboundLink")],1),e._v(" mode.")]),e._v(" "),r("li",[e._v("Run "),r("RouterLink",{attrs:{to:"/application/reference/cli.html#decrypt-secrets"}},[e._v("decrypt-secrets")]),e._v(" command.")],1),e._v(" "),r("li",[r("RouterLink",{attrs:{to:"/application/configuration/configuring.html"}},[e._v("Configure")]),e._v(" the "),r("code",[e._v("CHEVERETO_ENCRYPTION_KEY")]),e._v(" variable to empty string.")],1),e._v(" "),r("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/29.48c4546b.js b/assets/js/29.48c4546b.js new file mode 100644 index 00000000..10bb81e0 --- /dev/null +++ b/assets/js/29.48c4546b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{474:function(e,t,r){"use strict";r.r(t);var o=r(68),s=Object(o.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"errors"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#errors"}},[e._v("#")]),e._v(" Errors")]),e._v(" "),r("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 "),r("em",[e._v("something else")]),e._v(".")]),e._v(" "),r("h2",{attrs:{id:"chevereto-related"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-related"}},[e._v("#")]),e._v(" Chevereto related?")]),e._v(" "),r("p",[e._v("Chevereto "),r("strong",[e._v("won't cause")]),e._v(" any of the following issues:")]),e._v(" "),r("ul",[r("li",[e._v("Unable to connect (network issues)")]),e._v(" "),r("li",[e._v("Database server gone")]),e._v(" "),r("li",[e._v("CORS (missing icons, fonts)")]),e._v(" "),r("li",[e._v("Cookies/Sessions not working (login issues)")]),e._v(" "),r("li",[e._v("Restricted functions ("),r("code",[e._v("set_time_limit")]),e._v(")")]),e._v(" "),r("li",[e._v("Server restrictions ("),r("code",[e._v("mod_security")]),e._v(")")]),e._v(" "),r("li",[e._v("Wrong handling the user real connecting IP")])]),e._v(" "),r("p",[e._v("To determine if an issue is Chevereto related may be complicated for most users. We recommend purchasing "),r("a",{attrs:{href:"https://chevereto.com/panel/support",target:"_blank",rel:"noopener noreferrer"}},[e._v("Extra Support"),r("OutboundLink")],1),e._v(" if the issue needs urgent attention in your organization.")]),e._v(" "),r("h2",{attrs:{id:"incident-id"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#incident-id"}},[e._v("#")]),e._v(" Incident id")]),e._v(" "),r("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(" "),r("p",[e._v("The id is randomly generated and is unique per error event.")]),e._v(" "),r("h2",{attrs:{id:"something-went-wrong"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#something-went-wrong"}},[e._v("#")]),e._v(" Something went wrong")]),e._v(" "),r("p",[e._v("This error spawns on "),r("strong",[e._v("production")]),e._v(" context, the actual cause of this error is "),r("strong",[e._v("hidden from visitors by design")]),e._v(" to don't expose any sensitive debug info to end-users.")]),e._v(" "),r("blockquote",[r("p",[e._v("Something went wrong\nPlease try again later. If the problem persist don't hesitate to contact the system administrator.")])]),e._v(" "),r("p",[r("strong",[e._v("Note:")]),e._v(" "),r("em",[e._v("You are the system administrator")]),e._v(".")]),e._v(" "),r("p",[e._v("This "),r("a",{attrs:{href:"https://chevere.github.io/throwable-handler/demo/output/html-silent.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("silent message"),r("OutboundLink")],1),e._v(" indicates an error caught by Chevereto, but without disclosing the actual cause of error.")]),e._v(" "),r("ul",[r("li",[e._v("Go to "),r("strong",[e._v("Dashboard > Settings > System")]),e._v(" and enable "),r("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/system.html#debug-errors",target:"_blank",rel:"noopener noreferrer"}},[e._v("Debug errors"),r("OutboundLink")],1),e._v(" to print the error message to administrators.")]),e._v(" "),r("li",[e._v("Learn more at "),r("RouterLink",{attrs:{to:"/developer/how-to/debug.html"}},[e._v("Debug")]),e._v(" to retrieve these errors from the "),r("RouterLink",{attrs:{to:"/application/configuration/environment.html#error-logging-variables"}},[e._v("configured log device")]),e._v(".")],1)]),e._v(" "),r("h2",{attrs:{id:"exception-thrown"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#exception-thrown"}},[e._v("#")]),e._v(" Exception thrown")]),e._v(" "),r("p",[e._v("This error spawns in development context.")]),e._v(" "),r("p",[e._v("The "),r("a",{attrs:{href:"https://chevere.github.io/throwable-handler/demo/output/html.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("exception message"),r("OutboundLink")],1),e._v(" indicates an error caught by Chevereto fully disclosing the actual cause of error.")]),e._v(" "),r("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(" "),r("h3",{attrs:{id:"dumped-update-query"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#dumped-update-query"}},[e._v("#")]),e._v(" Dumped update query")]),e._v(" "),r("p",[e._v("The update query gets dumped either because "),r("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/system.html#dump-update-query",target:"_blank",rel:"noopener noreferrer"}},[e._v("dump update query"),r("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(" "),r("p",[e._v("If at "),r("code",[e._v("/update")]),e._v(" you see a message which reads "),r("code",[e._v("# Dumped update query (...)")]),e._v(" it means that you "),r("strong",[e._v("must")]),e._v(" run the "),r("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(" "),r("h3",{attrs:{id:"http-500-internal-server-error"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#http-500-internal-server-error"}},[e._v("#")]),e._v(" HTTP 500 - Internal Server Error")]),e._v(" "),r("p",[e._v("A generic error response emitted by the "),r("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(" "),r("p",[e._v("As these may spawn in any layer, check the system "),r("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(" "),r("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/3.a67d0764.js b/assets/js/3.a67d0764.js new file mode 100644 index 00000000..89688f01 --- /dev/null +++ b/assets/js/3.a67d0764.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{438:function(t,e,a){t.exports=a.p+"assets/img/software.77971e2e.png"},439:function(t,e,a){t.exports=a.p+"assets/img/mutliphp-ini-editor.859b4a87.png"},440:function(t,e,a){t.exports=a.p+"assets/img/multiphp-ini-keys.83901b7f.png"},441:function(t,e,a){t.exports=a.p+"assets/img/multiphp-manager.88fa8221.png"},495:function(t,e,a){"use strict";a.r(e);var s=a(68),n=Object(s.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"cpanel-php"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#cpanel-php"}},[t._v("#")]),t._v(" cPanel PHP")]),t._v(" "),s("h2",{attrs:{id:"multiphp-ini-editor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#multiphp-ini-editor"}},[t._v("#")]),t._v(" MultiPHP INI Editor")]),t._v(" "),s("p",[t._v("Go to "),s("strong",[t._v("MultiPHP INI Editor")]),t._v(" under "),s("strong",[t._v("Software")]),t._v(".")]),t._v(" "),s("p",[s("img",{attrs:{src:a(438),alt:"Software"}})]),t._v(" "),s("p",[t._v("Select your website under "),s("strong",[t._v("Configure PHP INI basic settings")]),t._v(".")]),t._v(" "),s("p",[s("img",{attrs:{src:a(439),alt:"MultiPHP INI editor"}})]),t._v(" "),s("p",[t._v("Take note on the following configurable keys:")]),t._v(" "),s("p",[s("img",{attrs:{src:a(440),alt:"MultiPHP INI keys"}})]),t._v(" "),s("ul",[s("li",[s("code",[t._v("max_execution_time")]),t._v(" 30")]),t._v(" "),s("li",[s("code",[t._v("memory_limit")]),t._v(" 256M (min)")]),t._v(" "),s("li",[t._v("Use "),s("code",[t._v("post_max_size")]),t._v(" and "),s("code",[t._v("upload_max_filesize")]),t._v(" to limit the file upload max. size allowed for uploads")])]),t._v(" "),s("h2",{attrs:{id:"multiphp-manager"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#multiphp-manager"}},[t._v("#")]),t._v(" MultiPHP Manager")]),t._v(" "),s("p",[t._v("Go to "),s("strong",[t._v("MultiPHP Manager")]),t._v(" and select "),s("code",[t._v("PHP 8.1")]),t._v(" for your website.")]),t._v(" "),s("p",[s("img",{attrs:{src:a(441),alt:"MultiPHP manager"}})]),t._v(" "),s("ul",[s("li",[t._v("From here you can also enable the "),s("RouterLink",{attrs:{to:"/application/stack/php.html#extensions"}},[t._v("PHP extensions required")]),t._v(" by Chevereto.")],1)]),t._v(" "),s("div",{staticClass:"custom-block danger"},[s("p",{staticClass:"custom-block-title"},[t._v("PHP Extensions")]),t._v(" "),s("p",[t._v("Refer to the cPanel "),s("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"),s("OutboundLink")],1),t._v(" and WHM "),s("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"),s("OutboundLink")],1),t._v(" documentation if your cPanel provisioning lacks the extensions required by Chevereto.")])]),t._v(" "),s("h2",{attrs:{id:"php-versioning"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#php-versioning"}},[t._v("#")]),t._v(" PHP Versioning")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("Did you know?")]),t._v(" "),s("p",[t._v("cPanel uses root "),s("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(" "),s("p",[t._v("If you have PHP versioning issues make sure that the root "),s("code",[t._v(".htaccess")]),t._v(" file contains the following:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"Apache"}},[s("div",{staticClass:"language-apacheconf extra-class"},[s("pre",{pre:!0,attrs:{class:"language-apacheconf"}},[s("code",[s("span",{pre:!0,attrs:{class:"token directive-block tag"}},[s("span",{pre:!0,attrs:{class:"token directive-block tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("IfModule")]),s("span",{pre:!0,attrs:{class:"token directive-block-parameter attr-value"}},[t._v(" mime_module")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive-inline property"}},[t._v("AddHandler")]),t._v(" application/x-httpd-ea-php81 .php\n"),s("span",{pre:!0,attrs:{class:"token directive-block tag"}},[s("span",{pre:!0,attrs:{class:"token directive-block tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])])]),t._v(" "),s("code-block",{attrs:{title:"LiteSpeed"}},[s("div",{staticClass:"language-apacheconf extra-class"},[s("pre",{pre:!0,attrs:{class:"language-apacheconf"}},[s("code",[s("span",{pre:!0,attrs:{class:"token directive-block tag"}},[s("span",{pre:!0,attrs:{class:"token directive-block tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("IfModule")]),s("span",{pre:!0,attrs:{class:"token directive-block-parameter attr-value"}},[t._v(" mime_module")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive-inline property"}},[t._v("AddHandler")]),t._v(" application/x-httpd-ea-php81___lsphp .php\n"),s("span",{pre:!0,attrs:{class:"token directive-block tag"}},[s("span",{pre:!0,attrs:{class:"token directive-block tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])])])],1),t._v(" "),s("p",[t._v("Note that the configuration in your system may vary. Double-check with your service provider.")]),t._v(" "),s("h2",{attrs:{id:"troubleshooting"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#troubleshooting"}},[t._v("#")]),t._v(" Troubleshooting")]),t._v(" "),s("p",[t._v("As cPanel uses "),s("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(" "),s("ol",[s("li",[t._v("Upload Chevereto's "),s("code",[t._v(".htaccess")])]),t._v(" "),s("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/30.0c6811c9.js b/assets/js/30.0c6811c9.js new file mode 100644 index 00000000..47a35501 --- /dev/null +++ b/assets/js/30.0c6811c9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{475:function(e,t,a){"use strict";a.r(t);var s=a(68),r=Object(s.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"security"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#security"}},[e._v("#")]),e._v(" Security")]),e._v(" "),a("h2",{attrs:{id:"security-checklist"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#security-checklist"}},[e._v("#")]),e._v(" Security Checklist")]),e._v(" "),a("p",[e._v("Must "),a("strong",[e._v("constantly double-checking")]),e._v(" the following:")]),e._v(" "),a("ul",[a("li",[a("RouterLink",{attrs:{to:"/application/stack/php.html#filesystem"}},[e._v("PHP Filesystem")])],1),e._v(" "),a("li",[a("RouterLink",{attrs:{to:"/application/stack/web-server.html#real-connecting-ip"}},[e._v("Real connecting IP")])],1),e._v(" "),a("li",[a("RouterLink",{attrs:{to:"/application/stack/web-server.html#restrict-php"}},[e._v("Restrict access to PHP files")])],1),e._v(" "),a("li",[a("RouterLink",{attrs:{to:"/application/stack/cron.html"}},[e._v("CRON setup")])],1),e._v(" "),a("li",[a("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/email.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Email setup"),a("OutboundLink")],1)])]),e._v(" "),a("h2",{attrs:{id:"encryption"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#encryption"}},[e._v("#")]),e._v(" Encryption")]),e._v(" "),a("p",[e._v("Sensitive data such as service credentials is stored "),a("RouterLink",{attrs:{to:"/application/reference/encryption.html"}},[e._v("encrypted")]),e._v(" in the database.")],1),e._v(" "),a("h2",{attrs:{id:"two-factor-authentication"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#two-factor-authentication"}},[e._v("#")]),e._v(" Two-factor authentication")]),e._v(" "),a("p",[e._v("Users and specially administrators should always configure a two-factor device for an additional layer of security.")]),e._v(" "),a("h2",{attrs:{id:"encoded-ids"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#encoded-ids"}},[e._v("#")]),e._v(" Encoded IDs")]),e._v(" "),a("p",[e._v("Public IDs are "),a("strong",[e._v("always encoded")]),e._v(" to avoid content enumeration attacks.")]),e._v(" "),a("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 "),a("code",[e._v("+1")]),e._v(" on the identifier).")]),e._v(" "),a("h3",{attrs:{id:"encoding-and-decoding-ids"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#encoding-and-decoding-ids"}},[e._v("#")]),e._v(" Encoding and decoding IDs")]),e._v(" "),a("p",[e._v("Public IDs "),a("strong",[e._v("are unique")]),e._v(" and vary from each different installation.")]),e._v(" "),a("p",[e._v("On installation Chevereto creates a random generated "),a("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(" "),a("h3",{attrs:{id:"making-encoded-ids-larger"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#making-encoded-ids-larger"}},[e._v("#")]),e._v(" Making encoded IDs larger")]),e._v(" "),a("p",[e._v("The length of encoded IDs can be customized.")]),e._v(" "),a("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(" "),a("h4",{attrs:{id:"altering-id-padding-setting"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#altering-id-padding-setting"}},[e._v("#")]),e._v(" Altering "),a("code",[e._v("id_padding")]),e._v(" setting")]),e._v(" "),a("p",[e._v("💡 This method will affect previous generated links. Use it only if is safe to edit the IDs.")]),e._v(" "),a("p",[e._v("Go to the database, find the "),a("code",[e._v("chv_settings")]),e._v(" table and edit the "),a("code",[e._v("setting_name")]),e._v(" identified as "),a("code",[e._v("id_padding")]),e._v(". (zero by default).")]),e._v(" "),a("p",[e._v("Entering an integer value like "),a("code",[e._v("5000")]),e._v(" will instruct the system to generate IDs using this base padding.")]),e._v(" "),a("h4",{attrs:{id:"altering-chv-images-table"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#altering-chv-images-table"}},[e._v("#")]),e._v(" Altering "),a("code",[e._v("chv_images")]),e._v(" table")]),e._v(" "),a("p",[e._v("This method won't affect any previous generated links.")]),e._v(" "),a("p",[e._v("Go to the database, find the "),a("code",[e._v("chv_images")]),e._v(" table and change the "),a("code",[e._v("AUTOINCREMENT")]),e._v(" to the ID padding you want to use.")]),e._v(" "),a("h2",{attrs:{id:"cross-site-request-forgery"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#cross-site-request-forgery"}},[e._v("#")]),e._v(" Cross-site request forgery")]),e._v(" "),a("p",[e._v("Cross-site request forgery ("),a("a",{attrs:{href:"https://en.wikipedia.org/wiki/Cross-site_request_forgery",target:"_blank",rel:"noopener noreferrer"}},[e._v("CSRF"),a("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(" "),a("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(" "),a("h2",{attrs:{id:"hashing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#hashing"}},[e._v("#")]),e._v(" Hashing")]),e._v(" "),a("p",[e._v("Chevereto uses "),a("a",{attrs:{href:"https://en.wikipedia.org/wiki/Bcrypt",target:"_blank",rel:"noopener noreferrer"}},[e._v("BCrypt"),a("OutboundLink")],1),e._v(" cryptography to store passwords and cookie hashes.")]),e._v(" "),a("h2",{attrs:{id:"recaptcha"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#recaptcha"}},[e._v("#")]),e._v(" reCAPTCHA")]),e._v(" "),a("p",[e._v("Chevereto includes support for "),a("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/external-services.html#recaptcha",target:"_blank",rel:"noopener noreferrer"}},[e._v("reCAPTCHA"),a("OutboundLink")],1),e._v(" which helps to prevent bots from signing up and try to brute-force a user password.")]),e._v(" "),a("h2",{attrs:{id:"daily-invalid-requests"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#daily-invalid-requests"}},[e._v("#")]),e._v(" Daily Invalid Requests")]),e._v(" "),a("p",[e._v("Too many invalid request forbid access to the system.")]),e._v(" "),a("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(" "),a("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(" "),a("h2",{attrs:{id:"flood-protection"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#flood-protection"}},[e._v("#")]),e._v(" Flood Protection")]),e._v(" "),a("p",[e._v("Control how much content/time can be added by users.")]),e._v(" "),a("p",[e._v("Avoid resource hungry users by configuring "),a("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/flood-protection.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flood Protection"),a("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/31.fd952463.js b/assets/js/31.fd952463.js new file mode 100644 index 00000000..c5ee0b08 --- /dev/null +++ b/assets/js/31.fd952463.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{476:function(e,t,r){"use strict";r.r(t);var a=r(68),s=Object(a.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"cron"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#cron"}},[e._v("#")]),e._v(" CRON")]),e._v(" "),r("p",[e._v("Chevereto requires to setup "),r("a",{attrs:{href:"https://en.wikipedia.org/wiki/Cron",target:"_blank",rel:"noopener noreferrer"}},[e._v("cron"),r("OutboundLink")],1),e._v(" to run background jobs.")]),e._v(" "),r("p",[e._v("This cron setup reference applies "),r("em",[e._v("mostly")]),e._v(" for "),r("strong",[e._v("Debian-based")]),e._v(" systems. We "),r("strong",[e._v("recommend")]),e._v(" checking your server documentation on how to setup and run cron.")]),e._v(" "),r("p",[e._v("Consider to contribute to this documentation with alternative cron setup alternatives.")]),e._v(" "),r("h2",{attrs:{id:"what-it-does"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#what-it-does"}},[e._v("#")]),e._v(" What it does?")]),e._v(" "),r("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.")]),e._v(" "),r("h2",{attrs:{id:"troubleshoot"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#troubleshoot"}},[e._v("#")]),e._v(" Troubleshoot")]),e._v(" "),r("div",{staticClass:"custom-block tip"},[r("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),r("p",[e._v("Refer to your system documentation and/or administrator for the best strategy when running Chevereto's cron requirements.")])]),e._v(" "),r("p",[e._v("Having issues? Check the following common pitfalls:")]),e._v(" "),r("ul",[r("li",[e._v("Invalid format for cron schedule")]),e._v(" "),r("li",[e._v("The PHP binary "),r("strong",[e._v("may not")]),e._v(" be available in cron context, use the full PHP path binary")]),e._v(" "),r("li",[e._v("The location of the "),r("code",[e._v("app/bin/legacy")]),e._v(" console may vary, use what reflects the file in your system")]),e._v(" "),r("li",[e._v("Wrong user running the command (requires a "),r("strong",[e._v("normal user")]),e._v(" with access to the project directory)")]),e._v(" "),r("li",[e._v("User "),r("code",[e._v("www-data")]),e._v(" applies only for "),r("strong",[e._v("Debian-based")]),e._v(" system. Refer to your sysadmin for the appropriate user when using other OS")])]),e._v(" "),r("h2",{attrs:{id:"command"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#command"}},[e._v("#")]),e._v(" Command")]),e._v(" "),r("p",[e._v("The command should be run by the web-server user which is "),r("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(" "),r("p",[e._v("Use "),r("code",[e._v("which php")]),e._v(" to locate the PHP binary as its location.")]),e._v(" "),r("p",[e._v("Refer to "),r("RouterLink",{attrs:{to:"/application/reference/cli.html#cron"}},[e._v("CLI Cron")]),e._v(".")],1),e._v(" "),r("h3",{attrs:{id:"docker-command"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#docker-command"}},[e._v("#")]),e._v(" Docker command")]),e._v(" "),r("div",{staticClass:"language-sh extra-class"},[r("pre",{pre:!0,attrs:{class:"language-sh"}},[r("code",[r("span",{pre:!0,attrs:{class:"token function"}},[e._v("docker")]),e._v(" "),r("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("exec")]),e._v(" -it "),r("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n --user www-data "),r("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n chevereto-container app/bin/legacy -C "),r("span",{pre:!0,attrs:{class:"token function"}},[e._v("cron")]),e._v("\n")])])]),r("h2",{attrs:{id:"cron-d-file"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#cron-d-file"}},[e._v("#")]),e._v(" Cron.d file")]),e._v(" "),r("p",[e._v("Recommended setup is to create a "),r("a",{attrs:{href:"https://manpages.debian.org/stretch/cron/cron.8",target:"_blank",rel:"noopener noreferrer"}},[e._v("cron.d file"),r("OutboundLink")],1),e._v(". This is easy as:")]),e._v(" "),r("div",{staticClass:"language-sh extra-class"},[r("pre",{pre:!0,attrs:{class:"language-sh"}},[r("code",[r("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" "),r("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("/etc/cron.d/chevereto "),r("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<<")]),r("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")])])]),r("p",[e._v("In the instruction above "),r("a",{attrs:{href:"https://crontab.guru/#*_*_*_*_*",target:"_blank",rel:"noopener noreferrer"}},[e._v("* * * * *"),r("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/32.2c01d2cf.js b/assets/js/32.2c01d2cf.js new file mode 100644 index 00000000..5d699b2e --- /dev/null +++ b/assets/js/32.2c01d2cf.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{477:function(e,t,a){"use strict";a.r(t);var s=a(68),r=Object(s.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"mysql-server"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#mysql-server"}},[e._v("#")]),e._v(" MySQL Server")]),e._v(" "),a("table",[a("thead",[a("tr",[a("th",[e._v("Version")]),e._v(" "),a("th",[e._v("MySQL")]),e._v(" "),a("th",[e._v("MariaDB")])])]),e._v(" "),a("tbody",[a("tr",[a("td",[e._v("4.0")]),e._v(" "),a("td",[e._v("5.7, 8")]),e._v(" "),a("td",[e._v("10")])])])]),e._v(" "),a("p",[e._v("Chevereto support both MySQL/MariaDB database servers but we refer indistinctly as "),a("strong",[e._v("MySQL")]),e._v(".")]),e._v(" "),a("p",[e._v("Chevereto V4 rely in a "),a("a",{attrs:{href:"https://en.wikipedia.org/wiki/Relational_database",target:"_blank",rel:"noopener noreferrer"}},[e._v("RDBMS"),a("OutboundLink")],1),e._v(" provided by a MySQL server.")]),e._v(" "),a("h2",{attrs:{id:"resources"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#resources"}},[e._v("#")]),e._v(" Resources")]),e._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://www.mysql.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("MySQL Website"),a("OutboundLink")],1)]),e._v(" "),a("li",[a("a",{attrs:{href:"https://mariadb.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("MariaDB Website"),a("OutboundLink")],1)])]),e._v(" "),a("h2",{attrs:{id:"what-it-does"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-it-does"}},[e._v("#")]),e._v(" What it does?")]),e._v(" "),a("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(" "),a("h2",{attrs:{id:"troubleshoot"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#troubleshoot"}},[e._v("#")]),e._v(" Troubleshoot")]),e._v(" "),a("p",[e._v("Having issues? Check the following common pitfalls:")]),e._v(" "),a("ul",[a("li",[e._v("Wrong credentials (user/password)")]),e._v(" "),a("li",[e._v("Invalid or missing privileges (read/write in the database)")]),e._v(" "),a("li",[e._v("Outdated MySQL version")]),e._v(" "),a("li",[e._v("Bad configured MySQL socket")]),e._v(" "),a("li",[e._v("Usage of MyISAM storage engine ("),a("code",[e._v("ALTER")]),e._v(" table to InnoDB storage)")])]),e._v(" "),a("h2",{attrs:{id:"database-permissions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#database-permissions"}},[e._v("#")]),e._v(" Database Permissions")]),e._v(" "),a("p",[e._v("Database user must have "),a("code",[e._v("ALL PRIVILEGES")]),e._v(" over the target database.")]),e._v(" "),a("h2",{attrs:{id:"database-storage-engine"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#database-storage-engine"}},[e._v("#")]),e._v(" Database Storage engine")]),e._v(" "),a("p",[e._v("InnoDB table storage engine.")]),e._v(" "),a("p",[e._v("Old versions using MyISAM table storage engine will require to convert the old tables to InnoDB. Read "),a("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"),a("OutboundLink")],1)]),e._v(" "),a("h2",{attrs:{id:"creating-the-database"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-the-database"}},[e._v("#")]),e._v(" Creating the database")]),e._v(" "),a("h3",{attrs:{id:"using-the-mysql-console"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-the-mysql-console"}},[e._v("#")]),e._v(" Using the MySQL console")]),e._v(" "),a("p",[e._v("Run the following command to create the "),a("code",[e._v("chevereto")]),e._v(" database and its user binding.")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" mysql -uroot -ppassword -e "),a("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")])])]),a("h3",{attrs:{id:"using-web-panels"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#using-web-panels"}},[e._v("#")]),e._v(" Using web panels")]),e._v(" "),a("p",[e._v("Links for the most popular panels:")]),e._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://docs.cpanel.net/cpanel/databases/mysql-databases/",target:"_blank",rel:"noopener noreferrer"}},[e._v("cPanel Database"),a("OutboundLink")],1)]),e._v(" "),a("li",[a("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"),a("OutboundLink")],1)]),e._v(" "),a("li",[a("a",{attrs:{href:"https://www.cloudpanel.io/docs/cloudpanel-ce/frontend-area/databases",target:"_blank",rel:"noopener noreferrer"}},[e._v("CloudPanel Database"),a("OutboundLink")],1)])]),e._v(" "),a("h2",{attrs:{id:"updating"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#updating"}},[e._v("#")]),e._v(" Updating")]),e._v(" "),a("p",[e._v("When manual updating the database keep the following considerations:")]),e._v(" "),a("ul",[a("li",[e._v("Disconnect all peers")]),e._v(" "),a("li",[e._v("Turn off the MySQL server, work in its console (phpMyAdmin, Adminer, CLI)")]),e._v(" "),a("li",[e._v("Run the MySQL statements one-by-one (a semi-colon "),a("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/33.7ab83b5d.js b/assets/js/33.7ab83b5d.js new file mode 100644 index 00000000..c82aa43a --- /dev/null +++ b/assets/js/33.7ab83b5d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{478:function(t,e,a){"use strict";a.r(e);var s=a(68),r=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"php"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#php"}},[t._v("#")]),t._v(" PHP")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Version")]),t._v(" "),a("th",[t._v("PHP")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("4.1")]),t._v(" "),a("td",[t._v("8.0.30")])]),t._v(" "),a("tr",[a("td",[t._v("4.0")]),t._v(" "),a("td",[t._v("~8.0")])])])]),t._v(" "),a("p",[t._v("Chevereto V4 is "),a("a",{attrs:{href:"https://php.net/",target:"_blank",rel:"noopener noreferrer"}},[t._v("PHP"),a("OutboundLink")],1),t._v(" software, it has been designed using:")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://chevere.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Chevere"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://deb.sury.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("PHP packages"),a("OutboundLink")],1),t._v(" from Ondřej Surý.")]),t._v(" "),a("li",[a("a",{attrs:{href:"https://www.php.net/manual/en/extensions.membership.php",target:"_blank",rel:"noopener noreferrer"}},[t._v("PHP extensions"),a("OutboundLink")],1),t._v(" provided by "),a("a",{attrs:{href:"https://pecl.php.net/",target:"_blank",rel:"noopener noreferrer"}},[t._v("PECL"),a("OutboundLink")],1),t._v(".")])]),t._v(" "),a("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(" "),a("p",[t._v("Packages not only contain the software, it could trigger other effects in the system.")]),t._v(" "),a("h2",{attrs:{id:"resources"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#resources"}},[t._v("#")]),t._v(" Resources")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://php.net",target:"_blank",rel:"noopener noreferrer"}},[t._v("PHP Website"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://php.net/langref",target:"_blank",rel:"noopener noreferrer"}},[t._v("PHP Language reference"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://php.net/funcref",target:"_blank",rel:"noopener noreferrer"}},[t._v("PHP Function reference"),a("OutboundLink")],1)])]),t._v(" "),a("h2",{attrs:{id:"what-it-does"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-it-does"}},[t._v("#")]),t._v(" What it does?")]),t._v(" "),a("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(" "),a("h2",{attrs:{id:"troubleshoot"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#troubleshoot"}},[t._v("#")]),t._v(" Troubleshoot")]),t._v(" "),a("p",[t._v("Having issues? Check the following common pitfalls:")]),t._v(" "),a("ul",[a("li",[t._v("Outdated PHP version")]),t._v(" "),a("li",[t._v("Misconfiguration in PHP libraries")]),t._v(" "),a("li",[t._v("Bad php.ini directives")]),t._v(" "),a("li",[t._v("Low execution time")]),t._v(" "),a("li",[t._v("Bad sessions setup")]),t._v(" "),a("li",[t._v("Open basedir restrictions")])]),t._v(" "),a("h2",{attrs:{id:"configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configuration"}},[t._v("#")]),t._v(" Configuration")]),t._v(" "),a("p",[t._v("The following "),a("code",[t._v("ini")]),t._v(" values are recommended for Chevereto installations.")]),t._v(" "),a("p",[a("strong",[t._v("Note:")]),t._v(" Check which "),a("code",[t._v("ini")]),t._v(" files are loaded at your Chevereto "),a("code",[t._v("/dashboard")]),t._v(".")]),t._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("upload_max_filesize "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" 64M"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\npost_max_size "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" 64M"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nmax_execution_time "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nmemory_limit "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" 512M"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("table",[a("thead",[a("tr",[a("th",[t._v("Property")]),t._v(" "),a("th",[t._v("Description")]),t._v(" "),a("th",[t._v("Example")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("upload_max_filesize")]),t._v(" "),a("td",[t._v("Maximum upload size")]),t._v(" "),a("td",[a("code",[t._v("64M")]),t._v(" for 64 MB")])]),t._v(" "),a("tr",[a("td",[t._v("post_max_size")]),t._v(" "),a("td",[t._v("Maximum post size")]),t._v(" "),a("td",[t._v("Same as above")])]),t._v(" "),a("tr",[a("td",[t._v("max_execution_time")]),t._v(" "),a("td",[t._v("Maximum time to execute the software, in seconds")]),t._v(" "),a("td",[a("code",[t._v("30")]),t._v(" for 30 seconds")])]),t._v(" "),a("tr",[a("td",[t._v("memory_limit")]),t._v(" "),a("td",[t._v("Maximum memory to allocate")]),t._v(" "),a("td",[a("code",[t._v("512M")]),t._v(" for 512 MB")])])])]),t._v(" "),a("p",[t._v("You can toggle this limits to reflect your hardware and server load. Check this article for more info: "),a("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"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"extensions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#extensions"}},[t._v("#")]),t._v(" Extensions")]),t._v(" "),a("p",[t._v("The following PHP extensions are required for Chevereto.")]),t._v(" "),a("ul",[a("li",[t._v("curl")]),t._v(" "),a("li",[t._v("exif")]),t._v(" "),a("li",[t._v("fileinfo")]),t._v(" "),a("li",[t._v("gd")]),t._v(" "),a("li",[t._v("hash")]),t._v(" "),a("li",[t._v("imagick")]),t._v(" "),a("li",[t._v("json")]),t._v(" "),a("li",[t._v("pdo")]),t._v(" "),a("li",[t._v("pdo-mysql")]),t._v(" "),a("li",[t._v("session")]),t._v(" "),a("li",[t._v("xml")])]),t._v(" "),a("h2",{attrs:{id:"features"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#features"}},[t._v("#")]),t._v(" Features")]),t._v(" "),a("p",[t._v("Chevereto requires unrestricted access to "),a("strong",[t._v("all PHP functions")]),t._v(". Note that the following functions "),a("strong",[t._v("should not")]),t._v(" be restricted:")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://www.php.net/set-time-limit",target:"_blank",rel:"noopener noreferrer"}},[t._v("set_time_limit"),a("OutboundLink")],1)])]),t._v(" "),a("h2",{attrs:{id:"image-library"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#image-library"}},[t._v("#")]),t._v(" Image library")]),t._v(" "),a("p",[t._v("The image library (GD, Imagick) should be provided with support for "),a("code",[t._v("PNG GIF JPG BMP WEBP")]),t._v(". By default, Chevereto prefers Imagick and fallback to GD.")]),t._v(" "),a("p",[t._v("If you need to explicit use GD you can pass this "),a("RouterLink",{attrs:{to:"/application/configuration/environment.html#image-handling-variables"}},[t._v("ENV")]),t._v(":")],1),t._v(" "),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CHEVERETO_IMAGE_LIBRARY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("gd\n")])])]),a("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(" "),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CHEVERETO_IMAGE_FORMATS_AVAILABLE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v('\'["JPG","PNG","BMP","GIF"]\'')]),t._v("\n")])])]),a("h3",{attrs:{id:"configuring-imagemagick"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configuring-imagemagick"}},[t._v("#")]),t._v(" Configuring ImageMagick")]),t._v(" "),a("p",[t._v("Additional recommended ImageMagick configuration at "),a("code",[t._v("/etc/ImageMagick-6/policy.xml")]),t._v(" file:")]),t._v(" "),a("div",{staticClass:"language-xml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-xml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("policymap")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- policies --\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("policy")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("domain")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("resource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("width"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("16KP"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("policy")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("domain")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("resource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("height"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("16KP"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("h2",{attrs:{id:"filesystem"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#filesystem"}},[t._v("#")]),t._v(" Filesystem")]),t._v(" "),a("p",[t._v("User running "),a("code",[t._v("php")]),t._v(" must be in the "),a("strong",[t._v("owner group")]),t._v(" of the installation directory and Chevereto requires recursive "),a("strong",[t._v("read")]),t._v(" access to that directory. In addition to this, following paths require recursive "),a("strong",[t._v("read/write")]),t._v(" access:")]),t._v(" "),a("ul",[a("li",[t._v("Session path")]),t._v(" "),a("li",[t._v("Temp folder")]),t._v(" "),a("li",[t._v("./content")]),t._v(" "),a("li",[t._v("./images")]),t._v(" "),a("li",[t._v("./importing")])]),t._v(" "),a("p",[t._v("User generated content is stored at:")]),t._v(" "),a("ul",[a("li",[t._v("./images")]),t._v(" "),a("li",[t._v("./content/images/users")]),t._v(" "),a("li",[t._v("./content/pages")])]),t._v(" "),a("p",[t._v("In "),a("strong",[t._v("debian-based")]),t._v(" systems use the following command to set the right permissions in your Chevereto installation (change "),a("code",[t._v("/var/www/html")]),t._v(" to reflect your path).")]),t._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("chown")]),t._v(" -R 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/34.d6b2107d.js b/assets/js/34.d6b2107d.js new file mode 100644 index 00000000..1df2f34b --- /dev/null +++ b/assets/js/34.d6b2107d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{480:function(t,e,s){"use strict";s.r(e);var a=s(68),r=Object(a.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"web-server"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#web-server"}},[t._v("#")]),t._v(" Web Server")]),t._v(" "),s("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(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("Alternative web servers")]),t._v(" "),s("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 "),s("code",[t._v(".htaccess")]),t._v(" rules to your server realm, if you need help don't hesitate to ask us directly.")])]),t._v(" "),s("h2",{attrs:{id:"resources"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#resources"}},[t._v("#")]),t._v(" Resources")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://httpd.apache.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Apache HTTP Server"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://nginx.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Nginx"),s("OutboundLink")],1)])]),t._v(" "),s("h2",{attrs:{id:"what-it-does"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#what-it-does"}},[t._v("#")]),t._v(" What it does?")]),t._v(" "),s("p",[t._v("The web server exposes the Chevereto application using the HTTP(s) protocol.")]),t._v(" "),s("h2",{attrs:{id:"troubleshoot"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#troubleshoot"}},[t._v("#")]),t._v(" Troubleshoot")]),t._v(" "),s("p",[t._v("Having issues? Check the following common pitfalls:")]),t._v(" "),s("ul",[s("li",[t._v("Apache "),s("code",[t._v("mod_rewrite")]),t._v(" disabled or "),s("code",[t._v("Allow Override All")]),t._v(" missing in virtual hosts")]),t._v(" "),s("li",[t._v("Missing writing permissions in Chevereto paths")]),t._v(" "),s("li",[t._v("Bad or invalid setup (timezone, multi-views, timeout, etc.)")]),t._v(" "),s("li",[t._v("Wrong nginx server block / PHP-FPM issues")]),t._v(" "),s("li",[s("code",[t._v("mod_security")]),t._v(" or any other artifact blocking requests from/to")])]),t._v(" "),s("h2",{attrs:{id:"restrict-php"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#restrict-php"}},[t._v("#")]),t._v(" Restrict PHP")]),t._v(" "),s("div",{staticClass:"custom-block danger"},[s("p",{staticClass:"custom-block-title"},[t._v("DANGER")]),t._v(" "),s("p",[t._v("Chevereto restricts access exclusively to "),s("code",[t._v("index.php")]),t._v(" and it forbids access to any other PHP file.")])]),t._v(" "),s("p",[t._v("Built-in "),s("a",{attrs:{href:"#apache-http-server"}},[t._v("Apache HTTP server")]),t._v(" config ("),s("code",[t._v(".htaccess")]),t._v(") and provided "),s("a",{attrs:{href:"#nginx"}},[t._v("Nginx")]),t._v(" config for "),s("strong",[t._v("Chevereto restricts access to PHP files")]),t._v(". Only "),s("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(" "),s("h2",{attrs:{id:"real-connecting-ip"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#real-connecting-ip"}},[t._v("#")]),t._v(" Real connecting IP")]),t._v(" "),s("div",{staticClass:"custom-block danger"},[s("p",{staticClass:"custom-block-title"},[t._v("DANGER")]),t._v(" "),s("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(" "),s("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(" "),s("p",[t._v("Refer to the following resources when requiring to configure real connecting IP:")]),t._v(" "),s("ul",[s("li",[t._v("Apache HTTP Server: "),s("code",[t._v("mod_remoteip")])]),t._v(" "),s("li",[t._v("nginx: "),s("code",[t._v("ngx_http_realip_module")])]),t._v(" "),s("li",[s("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"),s("OutboundLink")],1),t._v(" (make sure to setup the appropriate "),s("a",{attrs:{href:"https://www.cloudflare.com/ips/",target:"_blank",rel:"noopener noreferrer"}},[t._v("IP ranges"),s("OutboundLink")],1),t._v(")")])]),t._v(" "),s("h2",{attrs:{id:"apache-http-server"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#apache-http-server"}},[t._v("#")]),t._v(" Apache HTTP server")]),t._v(" "),s("p",[t._v("Apache configuration "),s("code",[t._v(".htaccess")]),t._v(" files are included in Chevereto files. The only requirement is to enable module "),s("a",{attrs:{href:"https://httpd.apache.org/docs/current/mod/mod_rewrite.html",target:"_blank",rel:"noopener noreferrer"}},[s("code",[t._v("mod_rewrite")]),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[t._v("Virtual host settings must allow URL rewriting.")]),t._v(" "),s("details",{staticClass:"custom-block details"},[s("summary",[t._v("vhost")]),t._v(" "),s("div",{staticClass:"language-apacheconf extra-class"},[s("pre",{pre:!0,attrs:{class:"language-apacheconf"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token directive-block tag"}},[s("span",{pre:!0,attrs:{class:"token directive-block tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("Directory")]),s("span",{pre:!0,attrs:{class:"token directive-block-parameter attr-value"}},[t._v(" /var/www/html")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive-inline property"}},[t._v("Options")]),t._v(" -Indexes +FollowSymLinks +MultiViews\n "),s("span",{pre:!0,attrs:{class:"token directive-inline property"}},[t._v("AllowOverride")]),t._v(" All\n "),s("span",{pre:!0,attrs:{class:"token directive-inline property"}},[t._v("Require")]),t._v(" all granted\n "),s("span",{pre:!0,attrs:{class:"token directive-block tag"}},[s("span",{pre:!0,attrs:{class:"token directive-block tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])])]),t._v(" "),s("h2",{attrs:{id:"nginx"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#nginx"}},[t._v("#")]),t._v(" nginx")]),t._v(" "),s("p",[t._v("This is the "),s("strong",[t._v("recommended")]),t._v(" "),s("code",[t._v("nginx.conf")]),t._v(" for "),s("code",[t._v("server {}")]),t._v(" block.")]),t._v(" "),s("details",{staticClass:"custom-block details"},[s("summary",[t._v("nginx.conf")]),t._v(" "),s("div",{staticClass:"language-nginx extra-class"},[s("pre",{pre:!0,attrs:{class:"language-nginx"}},[s("code",[t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Disable access to sensitive application files")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("location")]),t._v(" ~* (app|content|lib)/.*\\.(po|php|lock|sql)$")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("404")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("location")]),t._v(" ~* composer\\.json|composer\\.lock|.gitignore$")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("404")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("location")]),t._v(" ~* /\\.ht")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("404")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Image not found replacement")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("location")]),t._v(" ~* \\.(jpe?g|png|gif|webp)$")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("log_not_found")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("off")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("error_page")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("404")]),t._v(" /content/images/system/default/404.gif")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# CORS header (avoids font rendering issues)")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("location")]),t._v(" ~* \\.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js)$")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("add_header")]),t._v(" Access-Control-Allow-Origin "),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 punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# PHP front controller")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("location")]),t._v(" /")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("index")]),t._v(" index.php")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try_files")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$uri")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$uri")]),t._v("/ /index.php"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$is_args")]),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$query_string")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Single PHP-entrypoint (disables direct access to .php files)")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("location")]),t._v(" ~* \\.php$")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("internal")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("include")]),t._v(" snippets/fastcgi-php.conf")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token directive"}},[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fastcgi_pass")]),t._v(" unix:/var/run/php/php8.1-fpm.sock")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("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/35.14180773.js b/assets/js/35.14180773.js new file mode 100644 index 00000000..ca6b357f --- /dev/null +++ b/assets/js/35.14180773.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{481:function(t,s,a){"use strict";a.r(s);var e=a(68),r=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"api-version-1-1"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#api-version-1-1"}},[t._v("#")]),t._v(" API Version 1.1")]),t._v(" "),a("p",[t._v("Chevereto API enables programmatic file uploads, allowing you to seamlessly integrate our uploading functionality into your own applications.")]),t._v(" "),a("h2",{attrs:{id:"key"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#key"}},[t._v("#")]),t._v(" Key")]),t._v(" "),a("p",[t._v("API V1.1 works with an user key which is available for each user at "),a("code",[t._v("/settings/api")]),t._v(".")]),t._v(" "),a("p",[t._v("Admin user can set the public API key for guest uploads at the "),a("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/guest-api.html#public-api-key",target:"_blank",rel:"noopener noreferrer"}},[t._v("Dashboard panel"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"request-method"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#request-method"}},[t._v("#")]),t._v(" Request method")]),t._v(" "),a("p",[t._v("API V1 calls can be made using POST or GET request methods.")]),t._v(" "),a("p",[t._v("POST request method is "),a("strong",[t._v("recommended")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"request-url"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#request-url"}},[t._v("#")]),t._v(" Request URL")]),t._v(" "),a("div",{staticClass:"language-plain extra-class"},[a("pre",{pre:!0,attrs:{class:"language-plain"}},[a("code",[t._v("http://mysite.com/api/1/upload\n")])])]),a("h2",{attrs:{id:"authorization"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#authorization"}},[t._v("#")]),t._v(" Authorization")]),t._v(" "),a("p",[t._v("API V1.1 supports header authorization by passing the "),a("code",[t._v("X-API-Key")]),t._v(" header with an API key.")]),t._v(" "),a("div",{staticClass:"language-plain extra-class"},[a("pre",{pre:!0,attrs:{class:"language-plain"}},[a("code",[t._v("X-API-Key: chv_key_here\n")])])]),a("h2",{attrs:{id:"parameters"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#parameters"}},[t._v("#")]),t._v(" Parameters")]),t._v(" "),a("h3",{attrs:{id:"source"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#source"}},[t._v("#")]),t._v(" source")]),t._v(" "),a("p",[t._v("A binary file, base64 data, or a URL for an image.")]),t._v(" "),a("h3",{attrs:{id:"key-optional"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#key-optional"}},[t._v("#")]),t._v(" key (optional)")]),t._v(" "),a("p",[t._v("The API key. You can use this parameter if unable to provide auth via headers.")]),t._v(" "),a("h3",{attrs:{id:"title-optional"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#title-optional"}},[t._v("#")]),t._v(" title (optional)")]),t._v(" "),a("p",[t._v("File title. This is automatically detected from metadata if not provided.")]),t._v(" "),a("h3",{attrs:{id:"description-optional"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#description-optional"}},[t._v("#")]),t._v(" description (optional)")]),t._v(" "),a("p",[t._v("File description. This is automatically detected from metadata if not provided.")]),t._v(" "),a("h3",{attrs:{id:"tags-optional"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tags-optional"}},[t._v("#")]),t._v(" tags (optional)")]),t._v(" "),a("p",[t._v("File tag(s). Comma separated list of tags.")]),t._v(" "),a("h3",{attrs:{id:"album-id-optional"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#album-id-optional"}},[t._v("#")]),t._v(" album_id (optional)")]),t._v(" "),a("p",[t._v("File album id, must be owned by the API key user.")]),t._v(" "),a("h3",{attrs:{id:"category-id-optional"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#category-id-optional"}},[t._v("#")]),t._v(" category_id (optional)")]),t._v(" "),a("p",[t._v("Category id. Determines the file category to assign.")]),t._v(" "),a("h3",{attrs:{id:"width-optional"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#width-optional"}},[t._v("#")]),t._v(" width (optional)")]),t._v(" "),a("p",[t._v("Target resize width, will automatic detect height.")]),t._v(" "),a("h3",{attrs:{id:"expiration-optional"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#expiration-optional"}},[t._v("#")]),t._v(" expiration (optional)")]),t._v(" "),a("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(" "),a("h3",{attrs:{id:"nsfw-optional"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#nsfw-optional"}},[t._v("#")]),t._v(" nsfw (optional)")]),t._v(" "),a("p",[t._v("Not safe for work flag "),a("code",[t._v("[0, 1]")]),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"format-optional"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#format-optional"}},[t._v("#")]),t._v(" format (optional)")]),t._v(" "),a("p",[t._v("Return format "),a("code",[t._v("[json, redirect, txt]")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"example-call"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-call"}},[t._v("#")]),t._v(" Example call")]),t._v(" "),a("div",{staticClass:"language-plain extra-class"},[a("pre",{pre:!0,attrs:{class:"language-plain"}},[a("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')])])]),a("h2",{attrs:{id:"api-response"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#api-response"}},[t._v("#")]),t._v(" API response")]),t._v(" "),a("p",[t._v("API V1 responses will vary depending on the "),a("strong",[t._v("format")]),t._v(" parameter:")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Format")]),t._v(" "),a("th",[t._v("Output")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("json")]),t._v(" "),a("td",[t._v("Image upload info in JSON format (default)")])]),t._v(" "),a("tr",[a("td",[t._v("txt")]),t._v(" "),a("td",[t._v("Image direct URL in text/plain format")])]),t._v(" "),a("tr",[a("td",[t._v("redirect")]),t._v(" "),a("td",[t._v("Redirects to the image viewer URL")])])])]),t._v(" "),a("p",[t._v("When using JSON the response output will contain the "),a("code",[t._v("status_txt")]),t._v(" and "),a("code",[t._v("status_code")]),t._v(" properties.")]),t._v(" "),a("h2",{attrs:{id:"example-response-json"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-response-json"}},[t._v("#")]),t._v(" Example response (JSON)")]),t._v(" "),a("div",{staticClass:"language-json extra-class"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"status_code"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"success"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"message"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"file uploaded"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"code"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"image"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers-animated-music-video"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"extension"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mp4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"size"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3011299")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"width"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("496")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"height"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("360")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"date"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2024-10-10 16:58:00"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"date_gmt"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2024-10-10 19:58:00"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"title"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers animated music video MrWeebl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tags"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"description"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"nsfw"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"storage_mode"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"datefolder"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"md5"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"7a120d5c28de264bdbb934f023a628fd"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"source_md5"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"original_filename"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers _ animated music video _ MrWeebl.mp4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"original_exifdata"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"views"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"category_id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"chain"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("21")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"thumb_size"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("21212")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"medium_size"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"frame_size"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("19804")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"expiration_date_gmt"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2024-10-10 20:28:00"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"likes"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"is_animated"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"is_approved"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"is_360"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"duration"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("73")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"video"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tags_string"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"file"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"resource"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"url"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"id_encoded"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ZfGd"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"filename"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers-animated-music-video.mp4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"mime"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"video/mp4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/images/2024/10/10/Badgers-animated-music-video.mp4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ratio"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.3777777777777778")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"size_formatted"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"3 MB"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"frame"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"filename"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers-animated-music-video.fr.jpeg"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers-animated-music-video.fr"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"mime"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"image/jpeg"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"extension"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"jpeg"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/images/2024/10/10/Badgers-animated-music-video.fr.jpeg"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"size"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("19804")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"image"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"filename"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers-animated-music-video.mp4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers-animated-music-video"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"mime"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"video/mp4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"extension"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mp4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/images/2024/10/10/Badgers-animated-music-video.mp4"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"size"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3011299")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"thumb"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"filename"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers-animated-music-video.th.jpeg"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers-animated-music-video.th"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"mime"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"image/jpeg"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"extension"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"jpeg"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/images/2024/10/10/Badgers-animated-music-video.th.jpeg"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"size"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("21212")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url_frame"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/images/2024/10/10/Badgers-animated-music-video.fr.jpeg"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"medium"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"filename"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"mime"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"extension"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"duration_time"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"01:13"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url_viewer"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/clip/Badgers-animated-music-video-MrWeebl.ZfGd"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"path_viewer"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/clip/Badgers-animated-music-video-MrWeebl.ZfGd"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"url_short"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/clip/ZfGd"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"display_url"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/images/2024/10/10/Badgers-animated-music-video.fr.jpeg"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"display_width"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("496")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"display_height"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("360")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"views_label"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"views"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"likes_label"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"likes"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"how_long_ago"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"moments ago"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"date_fixed_peer"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2024-10-10 19:58:00"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"title_truncated"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers animated music vi..."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"title_truncated_html"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers animated music vi..."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"is_use_loader"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"display_title"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Badgers animated music video MrWeebl"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"delete_url"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost/clip/ZfGd/delete/e8b07479818bc58d3b9849c431e9c2b28827ccce7809ed4f"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"status_txt"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"OK"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h2",{attrs:{id:"example-response-txt"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-response-txt"}},[t._v("#")]),t._v(" Example response (txt)")]),t._v(" "),a("div",{staticClass:"language-plain extra-class"},[a("pre",{pre:!0,attrs:{class:"language-plain"}},[a("code",[t._v("http://localhost/images/2024/10/10/Badgers-animated-music-video.mp4\n")])])]),a("h2",{attrs:{id:"example-response-redirect"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-response-redirect"}},[t._v("#")]),t._v(" Example response (redirect)")]),t._v(" "),a("div",{staticClass:"language-plain extra-class"},[a("pre",{pre:!0,attrs:{class:"language-plain"}},[a("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/36.5c8b0458.js b/assets/js/36.5c8b0458.js new file mode 100644 index 00000000..ef39bed2 --- /dev/null +++ b/assets/js/36.5c8b0458.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{482:function(t,s,e){"use strict";e.r(s);var r=e(68),i=Object(r.a)({},(function(){var t=this.$createElement,s=this._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[s("h1",{attrs:{id:"api-version-4"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#api-version-4"}},[this._v("#")]),this._v(" API Version 4")]),this._v(" "),s("p",[s("code",[this._v("Work in progress")])])])}),[],!1,null,null,null);s.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/37.b19fcf17.js b/assets/js/37.b19fcf17.js new file mode 100644 index 00000000..815017ca --- /dev/null +++ b/assets/js/37.b19fcf17.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{483:function(e,a,t){"use strict";t.r(a);var s=t(68),o=Object(s.a)({},(function(){var e=this,a=e.$createElement,t=e._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"language"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#language"}},[e._v("#")]),e._v(" Language")]),e._v(" "),t("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 "),t("code",[e._v("app/languages")]),e._v(" folder.")]),e._v(" "),t("h2",{attrs:{id:"add-new-languages"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#add-new-languages"}},[e._v("#")]),e._v(" Add new languages")]),e._v(" "),t("h3",{attrs:{id:"onesky"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#onesky"}},[e._v("#")]),e._v(" OneSky")]),e._v(" "),t("p",[e._v("If you want to add a new language we encourage you to apply to "),t("a",{attrs:{href:"http://translate.chevereto.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("translation"),t("OutboundLink")],1),e._v(", where you can easily contribute a new language which will get added to Chevereto "),t("strong",[e._v("distribution")]),e._v(". OneSky features a complete suite for translations with no additional software required.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("Translations contributed will get added to the software.")])]),e._v(" "),t("h3",{attrs:{id:"manually"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#manually"}},[e._v("#")]),e._v(" Manually")]),e._v(" "),t("p",[e._v("Put your "),t("code",[e._v(".po")]),e._v(" files at "),t("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 "),t("code",[e._v("es")]),e._v(" (Spanish) you would copy the "),t("code",[e._v("en.po")]),e._v(" file and rename it to "),t("code",[e._v("es.po")]),e._v(".")]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("Considering using a "),t("a",{attrs:{href:"https://www.google.com/search?q=po%20editor",target:"_blank",rel:"noopener noreferrer"}},[e._v(".po editor software"),t("OutboundLink")],1),e._v(" to create the translation file.")])]),e._v(" "),t("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(" "),t("h2",{attrs:{id:"customizing-language-strings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#customizing-language-strings"}},[e._v("#")]),e._v(" Customizing language strings")]),e._v(" "),t("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(" "),t("p",[e._v("The system works by overriding the target translation. For example, replacing "),t("code",[e._v("Upload and share your media")]),e._v(' to "Upload, do it now!" by following this procedure:')]),e._v(" "),t("h3",{attrs:{id:"_1-get-the-translation-string-msgid-and-msgstr-values"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-get-the-translation-string-msgid-and-msgstr-values"}},[e._v("#")]),e._v(" 1. Get the translation string ("),t("code",[e._v("msgid")]),e._v(" and "),t("code",[e._v("msgstr")]),e._v(" values)")]),e._v(" "),t("ul",[t("li",[e._v("Go to the "),t("code",[e._v("app/languages")]),e._v(" folder")]),e._v(" "),t("li",[e._v("Open the file "),t("code",[e._v("en.po")]),e._v(" (in this example we are overriding English language)")]),e._v(" "),t("li",[e._v("Find this text: "),t("code",[e._v("Upload and share your media")])]),e._v(" "),t("li",[e._v("Copy the "),t("code",[e._v("msgid")]),e._v(" and the "),t("code",[e._v("msgstr")]),e._v(" lines, you should get something like this:")])]),e._v(" "),t("div",{staticClass:"language-po extra-class"},[t("pre",{pre:!0,attrs:{class:"language-po"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("msgid")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Upload and share your media"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("msgstr")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('""')]),e._v("\n")])])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("The property "),t("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(" "),t("h3",{attrs:{id:"_2-override-translation-string"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_2-override-translation-string"}},[e._v("#")]),e._v(" 2. Override translation string")]),e._v(" "),t("ul",[t("li",[e._v("Go to the "),t("code",[e._v("app/languages/overrides")]),e._v(" folder (create it if it doesn't exist)")]),e._v(" "),t("li",[e._v("Create the file "),t("code",[e._v("app/languages/overrides/en.po")]),e._v(" with these contents:")])]),e._v(" "),t("div",{staticClass:"language-po extra-class"},[t("pre",{pre:!0,attrs:{class:"language-po"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("msgid")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Upload and share your media"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("msgstr")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Upload, do it now!"')]),e._v("\n")])])]),t("p",[e._v("You only need to replace "),t("code",[e._v("msgstr")]),e._v(" because that is the translation string.")]),e._v(" "),t("p",[e._v("The result is that the system now will display "),t("code",[e._v("Upload, do it now!")]),e._v(" instead of the default "),t("code",[e._v("Upload and share your media")]),e._v(" and it will only affect "),t("code",[e._v("en")]),e._v(" language.")]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[t("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 "),t("code",[e._v("msgstr")]),e._v(" use "),t("code",[e._v('\\"')]),e._v(" (escaped double-quote).")])]),e._v(" "),t("h3",{attrs:{id:"_3-adding-more-overrides"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_3-adding-more-overrides"}},[e._v("#")]),e._v(" 3. Adding more overrides")]),e._v(" "),t("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 "),t("code",[e._v("Recent")]),e._v(" string your "),t("code",[e._v("app/languages/overrides/en.po")]),e._v(" file should look like this:")]),e._v(" "),t("div",{staticClass:"language-po extra-class"},[t("pre",{pre:!0,attrs:{class:"language-po"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("msgid")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Upload and share your media"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("msgstr")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Upload, do it now!"')]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("msgid")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Recent"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("msgstr")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"New!"')]),e._v("\n")])])]),t("h2",{attrs:{id:"cache-languages"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cache-languages"}},[e._v("#")]),e._v(" Cache languages")]),e._v(" "),t("p",[e._v("In Chevereto the "),t("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(" "),t("p",[e._v("Run the "),t("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(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("app/bin/legacy -C langs\n")])])]),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Default cache")]),e._v(" "),t("p",[t("strong",[e._v("Note:")]),e._v(" You need to re-cache your languages for every system update "),t("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/38.6435510e.js b/assets/js/38.6435510e.js new file mode 100644 index 00000000..c3f57f9e --- /dev/null +++ b/assets/js/38.6435510e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{484:function(e,t,o){"use strict";o.r(t);var r=o(68),a=Object(r.a)({},(function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",{attrs:{id:"routes"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#routes"}},[e._v("#")]),e._v(" Routes")]),e._v(" "),o("p",[o("code",[e._v("😪 Outdated docs - please check later.")])]),e._v(" "),o("p",[e._v("Routes refers to virtual paths like "),o("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 "),o("code",[e._v("/app/routes")]),e._v(" folder.")]),e._v(" "),o("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 "),o("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(" "),o("h2",{attrs:{id:"adding-or-overwriting-routes"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#adding-or-overwriting-routes"}},[e._v("#")]),e._v(" Adding or overwriting routes")]),e._v(" "),o("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 "),o("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(" "),o("p",[e._v("Feel free to do anything you want in the "),o("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(" "),o("p",[e._v("Routes are a feature of G\\ Library so you should check the "),o("a",{attrs:{href:"https://g.chevereto.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("G\\ Library documentation"),o("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/39.b9e9e2a9.js b/assets/js/39.b9e9e2a9.js new file mode 100644 index 00000000..49c0131b --- /dev/null +++ b/assets/js/39.b9e9e2a9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{485:function(e,t,o){"use strict";o.r(t);var a=o(68),s=Object(a.a)({},(function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",{attrs:{id:"theme"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#theme"}},[e._v("#")]),e._v(" Theme")]),e._v(" "),o("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(" "),o("h2",{attrs:{id:"theme-overrides"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#theme-overrides"}},[e._v("#")]),e._v(" Theme overrides")]),e._v(" "),o("p",[o("code",[e._v("content/legacy/themes/Peafowl/overrides/")])]),e._v(" "),o("p",[e._v("Theme overrides can be used to override any file in the theme.")]),e._v(" "),o("p",[e._v("Theme overrides works by detecting a file override which "),o("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 "),o("code",[e._v("content/legacy/themes/Peafowl/overrides/")]),e._v(" directory and follow the same structure as the theme.")]),e._v(" "),o("p",[e._v("For example, let's say you want to replace "),o("code",[e._v("content/legacy/themes/Peafowl/views/image.php")]),e._v(". To do this copy the file to "),o("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(" "),o("h2",{attrs:{id:"custom-hooks"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#custom-hooks"}},[e._v("#")]),e._v(" Custom hooks")]),e._v(" "),o("p",[o("code",[e._v("content/legacy/themes/Peafowl/custom_hooks/")])]),e._v(" "),o("p",[e._v("Custom hooks allows to add or edit code in designated areas or segments of the theme.")]),e._v(" "),o("p",[e._v("List of available custom hooks:")]),e._v(" "),o("ul",[o("li",[e._v("body_open.php")]),e._v(" "),o("li",[e._v("footer.php")]),e._v(" "),o("li",[e._v("head_after.php")]),e._v(" "),o("li",[e._v("head_open.php")]),e._v(" "),o("li",[e._v("head.php")]),e._v(" "),o("li",[e._v("header.php")]),e._v(" "),o("li",[e._v("share_links.php")]),e._v(" "),o("li",[e._v("style.css")])]),e._v(" "),o("p",[e._v("For example, to customize the share buttons using custom hooks:")]),e._v(" "),o("ul",[o("li",[e._v("Go to the theme custom hooks folder at "),o("code",[e._v("content/legacy/themes/Peafowl/custom_hooks/")])]),e._v(" "),o("li",[e._v("Make a copy of "),o("code",[e._v("share_links.sample.php")]),e._v(" (do all your editing needed in this copy)")]),e._v(" "),o("li",[e._v("Rename your working copy to "),o("code",[e._v("share_links.php")])])]),e._v(" "),o("p",[e._v("Chevereto will detect your hooks and it will load these files.")]),e._v(" "),o("h2",{attrs:{id:"clone-default-theme"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#clone-default-theme"}},[e._v("#")]),e._v(" Clone default theme")]),e._v(" "),o("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(" "),o("p",[e._v("To clone the default theme:")]),e._v(" "),o("ul",[o("li",[e._v("Copy "),o("code",[e._v("content/legacy/themes/Peafowl/")]),e._v(" and paste it in the same directory")]),e._v(" "),o("li",[e._v("Name your new theme as anything you want (no white spaces)")])]),e._v(" "),o("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/4.3f7b3292.js b/assets/js/4.3f7b3292.js new file mode 100644 index 00000000..74c7f127 --- /dev/null +++ b/assets/js/4.3f7b3292.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{451:function(e,t,a){e.exports=a.p+"assets/img/files.7fc6b3d4.png"},452:function(e,t,a){e.exports=a.p+"assets/img/file-manager.c016ac19.png"},453:function(e,t,a){e.exports=a.p+"assets/img/file-manager-extract.657c0c2b.png"},454:function(e,t,a){e.exports=a.p+"assets/img/file-manager-remove-file.c5b2f1aa.png"},504:function(e,t,a){"use strict";a.r(t);var i=a(68),s=Object(i.a)({},(function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[i("h1",{attrs:{id:"plesk-app-files"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#plesk-app-files"}},[e._v("#")]),e._v(" Plesk App files")]),e._v(" "),i("h2",{attrs:{id:"installing-chevereto"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#installing-chevereto"}},[e._v("#")]),e._v(" Installing Chevereto")]),e._v(" "),i("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(" "),i("ul",[i("li",[e._v("Go to "),i("strong",[e._v("File Manager")]),e._v(" under "),i("strong",[e._v("Your website")])])]),e._v(" "),i("p",[i("img",{attrs:{src:a(451),alt:"Files"}})]),e._v(" "),i("ul",[i("li",[e._v("Navigate to your home "),i("code",[e._v("/home/httpdocs/")]),e._v(" directory")])]),e._v(" "),i("p",[i("img",{attrs:{src:a(452),alt:"File Manager"}})]),e._v(" "),i("ul",[i("li",[e._v("Click on the "),i("strong",[e._v("Plus button")]),e._v(" and select "),i("strong",[e._v("Upload File")])]),e._v(" "),i("li",[e._v("Upload the release zip file that you downloaded following "),i("RouterLink",{attrs:{to:"/application/installing/installation.html#using-release-package"}},[e._v("using release package")]),e._v(" instructions")],1),e._v(" "),i("li",[i("strong",[e._v("Click")]),e._v(" on the uploaded zip file file and select "),i("strong",[e._v("Extract")])])]),e._v(" "),i("p",[i("img",{attrs:{src:a(453),alt:"File Manager Extract"}})]),e._v(" "),i("ul",[i("li",[e._v("A prompt appears to confirm the zip extraction")]),e._v(" "),i("li",[e._v("Select "),i("strong",[e._v("Replace existing files")]),e._v(" and click on "),i("strong",[e._v("OK")])]),e._v(" "),i("li",[e._v("Once done, remove the zip file")])]),e._v(" "),i("p",[i("img",{attrs:{src:a(454),alt:"File Manager Remove File"}})]),e._v(" "),i("ul",[i("li",[e._v("If you are installing Chevereto for the first time you can continue with "),i("RouterLink",{attrs:{to:"/application/installing/installation.html#setup"}},[e._v("Setup")]),e._v(".")],1)]),e._v(" "),i("h2",{attrs:{id:"updating-chevereto"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#updating-chevereto"}},[e._v("#")]),e._v(" Updating Chevereto")]),e._v(" "),i("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(" "),i("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/40.6171c3df.js b/assets/js/40.6171c3df.js new file mode 100644 index 00000000..9b8c6cf6 --- /dev/null +++ b/assets/js/40.6171c3df.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{487:function(e,t,r){"use strict";r.r(t);var a=r(68),s=Object(a.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"debug"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#debug"}},[e._v("#")]),e._v(" Debug")]),e._v(" "),r("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(" "),r("p",[e._v("Once you enable debug you need to trigger the issue again, this will generate a log that will help you to understand what is going on.")]),e._v(" "),r("h2",{attrs:{id:"debug-with-user-interface"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#debug-with-user-interface"}},[e._v("#")]),e._v(" Debug with user interface")]),e._v(" "),r("p",[e._v("To debug errors go to "),r("a",{attrs:{href:"https://v4-admin.chevereto.com/settings/system.html#debug-errors",target:"_blank",rel:"noopener noreferrer"}},[e._v("Settings > System > Debug errors"),r("OutboundLink")],1),e._v(' and enable "Debug errors". By enabling this Chevereto will debug errors to the screen (only to administrators).')]),e._v(" "),r("h2",{attrs:{id:"debug-with-xrdebug"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#debug-with-xrdebug"}},[e._v("#")]),e._v(" Debug with xrDebug")]),e._v(" "),r("ul",[r("li",[e._v("Run xrDebug built-in server:")])]),e._v(" "),r("div",{staticClass:"language-sh extra-class"},[r("pre",{pre:!0,attrs:{class:"language-sh"}},[r("code",[r("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("cd")]),e._v(" app "),r("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" vendor/bin/xrdebug\n")])])]),r("ul",[r("li",[e._v("Enable xrDebug by configuring the "),r("code",[e._v("CHEVERETO_ENABLE_XRDEBUG")]),e._v(" "),r("RouterLink",{attrs:{to:"/application/configuration/environment.html#debug-variables"}},[e._v("key")]),e._v(".")],1)]),e._v(" "),r("h2",{attrs:{id:"debug-with-docker"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#debug-with-docker"}},[e._v("#")]),e._v(" Debug with Docker")]),e._v(" "),r("p",[e._v("Replace "),r("code",[e._v("CONTAINER")]),e._v(" with the container name.")]),e._v(" "),r("p",[e._v("Chevereto error log:")]),e._v(" "),r("div",{staticClass:"language-sh extra-class"},[r("pre",{pre:!0,attrs:{class:"language-sh"}},[r("code",[r("span",{pre:!0,attrs:{class:"token function"}},[e._v("docker")]),e._v(" logs CONTAINER -f "),r("span",{pre:!0,attrs:{class:"token operator"}},[r("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[e._v("1")]),e._v(">")]),e._v("/dev/null\n")])])]),r("p",[e._v("Chevereto access log:")]),e._v(" "),r("div",{staticClass:"language-sh extra-class"},[r("pre",{pre:!0,attrs:{class:"language-sh"}},[r("code",[r("span",{pre:!0,attrs:{class:"token function"}},[e._v("docker")]),e._v(" logs CONTAINER -f "),r("span",{pre:!0,attrs:{class:"token operator"}},[r("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[e._v("2")]),e._v(">")]),e._v("/dev/null\n")])])]),r("h2",{attrs:{id:"debug-with-logging"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#debug-with-logging"}},[e._v("#")]),e._v(" Debug with logging")]),e._v(" "),r("p",[e._v("Debug can be "),r("RouterLink",{attrs:{to:"/application/configuration/configuring.html"}},[e._v("configured")]),e._v(" using "),r("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(" "),r("h3",{attrs:{id:"debug-level"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#debug-level"}},[e._v("#")]),e._v(" Debug level")]),e._v(" "),r("div",{staticClass:"custom-block warning"},[r("p",{staticClass:"custom-block-title"},[e._v("Note on debug levels")]),e._v(" "),r("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(" "),r("table",[r("thead",[r("tr",[r("th",[e._v("Level (N)")]),e._v(" "),r("th",[e._v("Description")])])]),e._v(" "),r("tbody",[r("tr",[r("td",[e._v("0")]),e._v(" "),r("td",[e._v("No debug")])]),e._v(" "),r("tr",[r("td",[e._v("1")]),e._v(" "),r("td",[e._v("(default) Debug to "),r("code",[e._v("log_device")])])]),e._v(" "),r("tr",[r("td",[e._v("2")]),e._v(" "),r("td",[e._v("Print errors (no logging)")])]),e._v(" "),r("tr",[r("td",[e._v("3")]),e._v(" "),r("td",[e._v("Print errors and log to "),r("code",[e._v("log_device")])])])])]),e._v(" "),r("p",[e._v("Use "),r("code",[e._v("CHEVERETO_DEBUG_LEVEL=N")]),e._v(" to configure the debug level.")]),e._v(" "),r("h2",{attrs:{id:"error-log-device"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#error-log-device"}},[e._v("#")]),e._v(" Error log device")]),e._v(" "),r("p",[e._v("Use "),r("RouterLink",{attrs:{to:"/application/configuration/environment.html#error-logging-variables"}},[r("code",[e._v("CHEVERETO_ERROR_LOG")])]),e._v(" to customize where error log will be written.")],1),e._v(" "),r("div",{staticClass:"custom-block warning"},[r("p",{staticClass:"custom-block-title"},[e._v("Permissions")]),e._v(" "),r("p",[e._v("Double-check that the target log device is writable by the user running PHP.")])]),e._v(" "),r("h2",{attrs:{id:"debug-development"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#debug-development"}},[e._v("#")]),e._v(" Debug (development)")]),e._v(" "),r("p",[e._v("To enable debug in development you can set the environment variable "),r("code",[e._v("CHEVERETO_ENVIRONMENT")]),e._v(" to "),r("code",[e._v("dev")]),e._v(". "),r("strong",[e._v("Note:")]),e._v(" This variable is read from "),r("code",[e._v("$_ENV")]),e._v(" (server context) not from "),r("code",[e._v("app/env.php")]),e._v(" (Chevereto app).")]),e._v(" "),r("div",{staticClass:"language-sh extra-class"},[r("pre",{pre:!0,attrs:{class:"language-sh"}},[r("code",[r("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CHEVERETO_ENVIRONMENT")]),r("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("dev\n")])])]),r("h3",{attrs:{id:"editing-source"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#editing-source"}},[e._v("#")]),e._v(" Editing source")]),e._v(" "),r("p",[e._v("You can force error display by editing the source code. This will allow to debug early in the application bootstrapping process.")]),e._v(" "),r("ul",[r("li",[e._v("Open "),r("code",[e._v("app/legacy/load/register-handlers.php")])]),e._v(" "),r("li",[e._v("Change this:")])]),e._v(" "),r("div",{staticClass:"language-php extra-class"},[r("pre",{pre:!0,attrs:{class:"language-php"}},[r("code",[r("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$isDebug")]),e._v(" "),r("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),r("span",{pre:!0,attrs:{class:"token function"}},[e._v("isDebug")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n")])])]),r("ul",[r("li",[e._v("To this:")])]),e._v(" "),r("div",{staticClass:"language-php extra-class"},[r("pre",{pre:!0,attrs:{class:"language-php"}},[r("code",[r("span",{pre:!0,attrs:{class:"token comment"}},[e._v("//$isDebug = isDebug();")]),e._v("\n"),r("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$isDebug")]),e._v(" "),r("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),r("span",{pre:!0,attrs:{class:"token constant boolean"}},[e._v("true")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n")])])]),r("h2",{attrs:{id:"finding-the-logs"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#finding-the-logs"}},[e._v("#")]),e._v(" Finding the logs")]),e._v(" "),r("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(" "),r("ul",[r("li",[e._v("Chevereto\n"),r("ul",[r("li",[e._v("Logs by default at "),r("code",[e._v("php://stderr")])])])]),e._v(" "),r("li",[e._v("Docker\n"),r("ul",[r("li",[e._v("Logs to "),r("code",[e._v("/dev/stderr")])])])]),e._v(" "),r("li",[e._v("xrDebug\n"),r("ul",[r("li",[e._v("Streams the debug messages to the xrDebug session")])])]),e._v(" "),r("li",[e._v("Apache\n"),r("ul",[r("li",[e._v("Logs by default at "),r("code",[e._v("/var/log/apache2/error.log")])]),e._v(" "),r("li",[e._v("Virtual host directive defines custom error log location")]),e._v(" "),r("li",[e._v("Commonly configured for "),r("code",[e._v("/var/www/domain.com/logs")])])])]),e._v(" "),r("li",[e._v("nginx\n"),r("ul",[r("li",[e._v("Logs by default at "),r("code",[e._v("/var/log/nginx/error.log")])]),e._v(" "),r("li",[e._v("Server block defines custom error log location")]),e._v(" "),r("li",[e._v("Commonly configured for "),r("code",[e._v("/var/www/domain.com/logs")])])])]),e._v(" "),r("li",[e._v("cPanel\n"),r("ul",[r("li",[e._v("Logs by default at "),r("code",[e._v("../domain.com.error.log")]),e._v(" (parent of "),r("code",[e._v("public_html")]),e._v(" folder)")]),e._v(" "),r("li",[e._v("Vary a lot from providers and cPanel version")])])])]),e._v(" "),r("h3",{attrs:{id:"i-can-t-find-the-logs"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#i-can-t-find-the-logs"}},[e._v("#")]),e._v(" I can't find the logs")]),e._v(" "),r("p",[e._v("You can configure "),r("code",[e._v("CHEVERETO_DEBUG_LEVEL")]),e._v(" >= 2 but note that this error reporting level "),r("strong",[e._v("could compromise")]),e._v(" your installation. Restrict any public access to your website and revert to "),r("code",[e._v("CHEVERETO_DEBUG_LEVEL=1")]),e._v(" as soon as possible.")]),e._v(" "),r("p",[e._v("If you can't find the logs or you are having a hard time with this you can request "),r("a",{attrs:{href:"https://chevereto.com/support",target:"_blank",rel:"noopener noreferrer"}},[e._v("Extra Support"),r("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/41.ba826bc0.js b/assets/js/41.ba826bc0.js new file mode 100644 index 00000000..ff328fe8 --- /dev/null +++ b/assets/js/41.ba826bc0.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{489:function(t,e,o){"use strict";o.r(e);var r=o(68),s=Object(r.a)({},(function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h1",{attrs:{id:"troubleshoot"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#troubleshoot"}},[t._v("#")]),t._v(" Troubleshoot")]),t._v(" "),o("p",[t._v("Having issues? Check the troubleshoot for well-known issues.")]),t._v(" "),o("ul",[o("li",[o("RouterLink",{attrs:{to:"/application/stack/web-server.html#troubleshoot"}},[t._v("Web server Troubleshoot")])],1),t._v(" "),o("li",[o("RouterLink",{attrs:{to:"/application/stack/php.html#troubleshoot"}},[t._v("PHP Troubleshoot")])],1),t._v(" "),o("li",[o("RouterLink",{attrs:{to:"/application/stack/mysql-server.html#troubleshoot"}},[t._v("MySQL Server Troubleshoot")])],1)]),t._v(" "),o("p",[t._v("If that didn't help it will be required to "),o("RouterLink",{attrs:{to:"/developer/how-to/debug.html"}},[t._v("debug")]),t._v(" the system.")],1),t._v(" "),o("h2",{attrs:{id:"getting-help"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#getting-help"}},[t._v("#")]),t._v(" Getting help")]),t._v(" "),o("p",[t._v("Get help at "),o("a",{attrs:{href:"https://chevereto.com/support",target:"_blank",rel:"noopener noreferrer"}},[t._v("chevereto.com/support"),o("OutboundLink")],1)])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/42.fca6bed1.js b/assets/js/42.fca6bed1.js new file mode 100644 index 00000000..a79bc96b --- /dev/null +++ b/assets/js/42.fca6bed1.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{488:function(e,t,o){"use strict";o.r(t);var r=o(68),a=Object(r.a)({},(function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",{attrs:{id:"installation-guides"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#installation-guides"}},[e._v("#")]),e._v(" Installation guides")]),e._v(" "),o("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(" "),o("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(" "),o("h2",{attrs:{id:"official-guides"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#official-guides"}},[e._v("#")]),e._v(" Official guides")]),e._v(" "),o("p",[e._v("Install Chevereto following our guides for:")]),e._v(" "),o("ul",[o("li",[e._v("Docker (Multi-arch image compatible with "),o("code",[e._v("x86_64")]),e._v(" and "),o("code",[e._v("arm64")]),e._v(")\n"),o("ul",[o("li",[o("RouterLink",{attrs:{to:"/guides/docker/"}},[e._v("Chevereto Docker")])],1),e._v(" "),o("li",[o("RouterLink",{attrs:{to:"/guides/docker/pure-docker.html"}},[e._v("Pure Docker")])],1)])]),e._v(" "),o("li",[o("RouterLink",{attrs:{to:"/guides/server/vps.html"}},[e._v("VPS")]),e._v(" (DigitalOcean, Linode, Vultr, etc)")],1),e._v(" "),o("li",[o("RouterLink",{attrs:{to:"/guides/cpanel/"}},[e._v("cPanel")])],1),e._v(" "),o("li",[o("RouterLink",{attrs:{to:"/guides/plesk/"}},[e._v("Plesk")])],1)]),e._v(" "),o("h2",{attrs:{id:"community-guides"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#community-guides"}},[e._v("#")]),e._v(" Community guides")]),e._v(" "),o("p",[e._v("The following guides have been contributed by users of the software.")]),e._v(" "),o("ul",[o("li",[o("a",{attrs:{href:"https://mariushosting.com/how-to-install-chevereto-on-your-synology-nas/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto Synology NAS"),o("OutboundLink")],1)])])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/43.80f667bd.js b/assets/js/43.80f667bd.js new file mode 100644 index 00000000..d7319ce8 --- /dev/null +++ b/assets/js/43.80f667bd.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{490:function(e,t,r){"use strict";r.r(t);var a=r(68),s=Object(a.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"chevereto-cpanel"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-cpanel"}},[e._v("#")]),e._v(" Chevereto cPanel")]),e._v(" "),r("div",{staticClass:"custom-block tip"},[r("p",{staticClass:"custom-block-title"},[e._v("Installation service available")]),e._v(" "),r("p",[e._v("We offer a "),r("a",{attrs:{href:"https://chevereto.com/support",target:"_blank",rel:"noopener noreferrer"}},[e._v("paid installation service"),r("OutboundLink")],1),e._v(" for this guide. We will install Chevereto cPanel for you, including all the requirements and configurations.")])]),e._v(" "),r("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(" "),r("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(" "),r("h2",{attrs:{id:"requirements"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),r("ul",[r("li",[e._v("cPanel based hosting service")]),e._v(" "),r("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/44.85179752.js b/assets/js/44.85179752.js new file mode 100644 index 00000000..cde27d93 --- /dev/null +++ b/assets/js/44.85179752.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{496:function(e,t,a){"use strict";a.r(t);var s=a(68),r=Object(s.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"chevereto-docker"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-docker"}},[e._v("#")]),e._v(" Chevereto Docker")]),e._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("Installation service available")]),e._v(" "),a("p",[e._v("We offer a "),a("a",{attrs:{href:"https://chevereto.com/support",target:"_blank",rel:"noopener noreferrer"}},[e._v("paid installation service"),a("OutboundLink")],1),e._v(" for this guide. We will install Chevereto Docker for you, including all the requirements and configurations.")])]),e._v(" "),a("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(" "),a("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(" "),a("h2",{attrs:{id:"advantages"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#advantages"}},[e._v("#")]),e._v(" Advantages")]),e._v(" "),a("p",[e._v("There are several advantages of our Docker system:")]),e._v(" "),a("ul",[a("li",[e._v("Run multiple websites with ease")]),e._v(" "),a("li",[e._v("Portability")]),e._v(" "),a("li",[e._v("Easy to update")]),e._v(" "),a("li",[e._v("Automatic HTTPS setup")]),e._v(" "),a("li",[e._v("CloudFlare integration")])]),e._v(" "),a("h2",{attrs:{id:"repository"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#repository"}},[e._v("#")]),e._v(" Repository")]),e._v(" "),a("p",[e._v("Check the project repository at "),a("a",{attrs:{href:"https://github.com/chevereto/docker",target:"_blank",rel:"noopener noreferrer"}},[e._v("chevereto/docker"),a("OutboundLink")],1),e._v(" for all instructions and source code.")]),e._v(" "),a("h2",{attrs:{id:"requirements"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),a("p",[e._v("To follow this guide, make sure you have:")]),e._v(" "),a("ul",[a("li",[e._v("Ubuntu server with shell access and public IP address.")]),e._v(" "),a("li",[e._v("Domain managed by CloudFlare (if using integration)")]),e._v(" "),a("li",[e._v("Chevereto license (required for the paid edition)\n"),a("ul",[a("li",[a("a",{attrs:{href:"https://chevereto.com/pricing",target:"_blank",rel:"noopener noreferrer"}},[e._v("Purchase"),a("OutboundLink")],1),e._v(" new license")]),e._v(" "),a("li",[a("a",{attrs:{href:"https://chevereto.com/panel/license",target:"_blank",rel:"noopener noreferrer"}},[e._v("Access"),a("OutboundLink")],1),e._v(" existing purchase")])])])]),e._v(" "),a("h2",{attrs:{id:"getting-a-server"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#getting-a-server"}},[e._v("#")]),e._v(" Getting a server")]),e._v(" "),a("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(" "),a("h2",{attrs:{id:"accessing-server-shell"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#accessing-server-shell"}},[e._v("#")]),e._v(" Accessing server shell")]),e._v(" "),a("p",[e._v("To interact with your server use a terminal emulator. Here are some terminal emulator software by operating system:")]),e._v(" "),a("table",[a("thead",[a("tr",[a("th",[e._v("System")]),e._v(" "),a("th",[e._v("Software")])])]),e._v(" "),a("tbody",[a("tr",[a("td",[e._v("macOS")]),e._v(" "),a("td",[e._v("Terminal, iTerm 2")])]),e._v(" "),a("tr",[a("td",[e._v("Windows")]),e._v(" "),a("td",[e._v("Windows Terminal, Putty")])]),e._v(" "),a("tr",[a("td",[e._v("Linux")]),e._v(" "),a("td",[e._v("Gnome Terminal, Tilix, XTerm")])])])]),e._v(" "),a("p",[e._v("Access your server via "),a("a",{attrs:{href:"https://en.wikipedia.org/wiki/Secure_Shell",target:"_blank",rel:"noopener noreferrer"}},[e._v("SSH"),a("OutboundLink")],1),e._v(" using the following command from your computer:")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("ssh")]),e._v(" root@"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("server ip"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])])]),a("p",[e._v("Make sure to check your server provider's documentation for specific instructions on accessing the shell.")]),e._v(" "),a("h2",{attrs:{id:"installing-chevereto-docker"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installing-chevereto-docker"}},[e._v("#")]),e._v(" Installing chevereto/docker")]),e._v(" "),a("p",[e._v("Start by installing Chevereto Docker repository and its dependencies by running the following command.")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -s https://chevereto.com/sh/ubuntu/24.04/docker.sh"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n")])])]),a("h2",{attrs:{id:"setting-up-cloudflare-integration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#setting-up-cloudflare-integration"}},[e._v("#")]),e._v(" Setting up CloudFlare integration")]),e._v(" "),a("p",[e._v("Skip this section if you don't need CloudFlare integration to manage domain DNS.")]),e._v(" "),a("p",[e._v("Integrate Chevereto Docker with CloudFlare to automate sub-domain creation for your websites. If you aren't using CloudFlare go to "),a("a",{attrs:{href:"https://cloudflare.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("cloudflare.com"),a("OutboundLink")],1),e._v(" to get started, it is free. Add your domain to continue with this guide.")]),e._v(" "),a("p",[e._v("To setup CloudFlare with Chevereto Docker:")]),e._v(" "),a("ul",[a("li",[e._v("Navigate to the DNS configuration for your domain on CloudFlare.")]),e._v(" "),a("li",[e._v("Create a new A record, take note as it will be your "),a("code",[e._v("CLOUDFLARE_A_NAME")]),e._v(" environment value. Use the following properties:\n"),a("ul",[a("li",[e._v("Type: A")]),e._v(" "),a("li",[e._v("Name: chevereto-factory")]),e._v(" "),a("li",[e._v("Content: {server ip}")]),e._v(" "),a("li",[e._v("Proxy status: DNS only")]),e._v(" "),a("li",[e._v("TTL: Auto")])])]),e._v(" "),a("li",[e._v("Navigate to SSL/TLS configuration and under "),a("strong",[e._v("Overview")]),e._v(" set mode to "),a("strong",[e._v("Full (strict)")]),e._v(".")])]),e._v(" "),a("p",[e._v("Next create an API token, take note as it will be your "),a("code",[e._v("CLOUDFLARE_TOKEN")]),e._v(" environment value.")]),e._v(" "),a("ul",[a("li",[e._v("Go to "),a("a",{attrs:{href:"https://dash.cloudflare.com/profile/api-tokens",target:"_blank",rel:"noopener noreferrer"}},[e._v("api-tokens"),a("OutboundLink")],1),e._v(" and click on "),a("strong",[e._v("Create Token")])]),e._v(" "),a("li",[e._v("Use template "),a("strong",[e._v("Edit zone DNS")])]),e._v(" "),a("li",[e._v("Permissions: "),a("strong",[e._v("Zone DNS Edit")])]),e._v(" "),a("li",[e._v("Resources: "),a("strong",[e._v("Include Specific zone DOMAIN")])])]),e._v(" "),a("p",[e._v("You will require to take note on "),a("code",[e._v("CLOUDFLARE_ZONE_ID")]),e._v(" and "),a("code",[e._v("CLOUDFLARE_ACCOUNT_ID")]),e._v(" which you can get from the "),a("strong",[e._v("domain overview")]),e._v(".")]),e._v(" "),a("h2",{attrs:{id:"create-configuration-env-file"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-configuration-env-file"}},[e._v("#")]),e._v(" Create configuration (.env file)")]),e._v(" "),a("p",[e._v("To create the configuration file run the following command and follow the on-screen instructions.")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("make")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("env")]),e._v("\n")])])]),a("ul",[a("li",[a("code",[e._v("CHEVERETO_LICENSE_KEY")]),e._v(": Your Chevereto license key (required for the paid edition, leave empty for free edition).")]),e._v(" "),a("li",[a("code",[e._v("DOMAIN")]),e._v(": The domain/hostame you'll use for spawning Chevereto installations.")]),e._v(" "),a("li",[a("code",[e._v("EMAIL_HTTPS")]),e._v(": The email to receive HTTPS certificate notifications from Let’s Encrypt.")]),e._v(" "),a("li",[a("code",[e._v("CLOUDFLARE_*")]),e._v(" options: Integration details for CloudFlare.")])]),e._v(" "),a("h2",{attrs:{id:"setting-up-system"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#setting-up-system"}},[e._v("#")]),e._v(" Setting up system")]),e._v(" "),a("p",[e._v("By setting up the system you will enable background processing and nginx ingress HTTP proxy.")]),e._v(" "),a("p",[e._v("To set up the system run the following command:")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("make")]),e._v(" setup\n")])])]),a("h2",{attrs:{id:"building-the-chevereto-image"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#building-the-chevereto-image"}},[e._v("#")]),e._v(" Building the Chevereto image")]),e._v(" "),a("p",[e._v("If you're using free edition you can skip this step, as the image is freely available on "),a("a",{attrs:{href:"https://github.com/chevereto/chevereto/pkgs/container/chevereto",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub Container Registry"),a("OutboundLink")],1),e._v(".")]),e._v(" "),a("p",[e._v("Build the Chevereto container image for the latest release by running the following command.")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("make")]),e._v(" image\n")])])]),a("h2",{attrs:{id:"deploying"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#deploying"}},[e._v("#")]),e._v(" Deploying")]),e._v(" "),a("p",[e._v("To deploy a new website use the following command format:")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("make")]),e._v(" deploy "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("NAMESPACE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("namespace"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("ADMIN_EMAIL")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),a("p",[e._v("Replace {namespace} with the desired sub-domain and {email} with the admin email for the website.")]),e._v(" "),a("p",[e._v("For example:")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("make")]),e._v(" deploy "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("NAMESPACE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("demo "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("ADMIN_EMAIL")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("email@mywebsite.com\n")])])]),a("p",[e._v("The Chevereto website will be available within seconds as the new sub-domain propagates.")]),e._v(" "),a("h2",{attrs:{id:"upgrading"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading"}},[e._v("#")]),e._v(" Upgrading")]),e._v(" "),a("p",[e._v("To upgrade you need to (1) Sync repository, (2) Re-build the container image, and (3) Update Chevereto instances.")]),e._v(" "),a("h3",{attrs:{id:"step-1-sync-repository"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#step-1-sync-repository"}},[e._v("#")]),e._v(" Step 1: Sync repository")]),e._v(" "),a("p",[e._v("Sync this repository to get the latest changes.")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("make")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sync")]),e._v("\n")])])]),a("p",[a("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(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" switch "),a("span",{pre:!0,attrs:{class:"token number"}},[e._v("4.2")]),e._v("\n")])])]),a("h3",{attrs:{id:"step-2-re-build-the-container-image"}},[a("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(" "),a("p",[e._v("Build a new container image to reflect the newest release.")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("make")]),e._v(" image\n")])])]),a("h3",{attrs:{id:"step-3-update-chevereto-instances"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#step-3-update-chevereto-instances"}},[e._v("#")]),e._v(" Step 3: Update Chevereto instances")]),e._v(" "),a("p",[e._v("This will down and re-up the containers and carry the required database update.")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("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/45.ce7459eb.js b/assets/js/45.ce7459eb.js new file mode 100644 index 00000000..02148cbf --- /dev/null +++ b/assets/js/45.ce7459eb.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{497:function(t,a,e){"use strict";e.r(a);var s=e(68),n=Object(s.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"pure-docker"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#pure-docker"}},[t._v("#")]),t._v(" Pure Docker")]),t._v(" "),e("p",[t._v("This is the most basic way to run Chevereto using Docker.")]),t._v(" "),e("p",[t._v("Pure Docker refers to running Chevereto using Docker without the extra provisions of "),e("RouterLink",{attrs:{to:"/guides/docker/"}},[t._v("Chevereto Docker")]),t._v(" (nginx ingress proxy, CloudFlare integration).")],1),t._v(" "),e("h2",{attrs:{id:"build-image-paid-edition"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#build-image-paid-edition"}},[t._v("#")]),t._v(" Build image (paid edition)")]),t._v(" "),e("p",[t._v("Image building is "),e("strong",[t._v("recommended")]),t._v(" for Chevereto "),e("strong",[t._v("paid edition")]),t._v(". Skip to "),e("a",{attrs:{href:"#run-free-edition"}},[t._v("Run (free edition)")]),t._v(" if you are using Chevereto free edition or if you want to upgrade to paid edition within the application itself.")]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("Workaround image building")]),t._v(" "),e("p",[t._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 "),e("code",[t._v("CHEVERETO_SERVICING=server")]),t._v(" to the container runtime and go to "),e("code",[t._v("/dashboard?license")]),t._v(" to enter the license key and proceed with the upgrading process. You will also need to setup a volume for the application files.")])]),t._v(" "),e("h3",{attrs:{id:"clone-repository"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#clone-repository"}},[t._v("#")]),t._v(" Clone repository")]),t._v(" "),e("p",[t._v("Clone the "),e("a",{attrs:{href:"https://github.com/chevereto/docker",target:"_blank",rel:"noopener noreferrer"}},[t._v("chevereto/docker"),e("OutboundLink")],1),t._v(" repository and create an "),e("code",[t._v(".env")]),t._v(" file with your license key:")]),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 assign-left variable"}},[t._v("CHEVERETO_LICENSE_KEY")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("your_license_key\n")])])]),e("h3",{attrs:{id:"make-image"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#make-image"}},[t._v("#")]),t._v(" Make image")]),t._v(" "),e("p",[t._v("Run the following command to create the Chevereto image:")]),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("make")]),t._v(" image\n")])])]),e("p",[t._v("By running the above command you will generate the following tags:")]),t._v(" "),e("ul",[e("li",[e("code",[t._v("chevereto:latest")])]),t._v(" "),e("li",[e("code",[t._v("chevereto:4")])]),t._v(" "),e("li",[e("code",[t._v("chevereto:4.1")])]),t._v(" "),e("li",[e("code",[t._v("chevereto:4.1.0")])])]),t._v(" "),e("h2",{attrs:{id:"upgrading"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#upgrading"}},[t._v("#")]),t._v(" Upgrading")]),t._v(" "),e("p",[t._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.")]),t._v(" "),e("h3",{attrs:{id:"step-1-sync-repository"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-1-sync-repository"}},[t._v("#")]),t._v(" Step 1: Sync repository")]),t._v(" "),e("p",[t._v("Sync latest changes from "),e("a",{attrs:{href:"https://github.com/chevereto/docker",target:"_blank",rel:"noopener noreferrer"}},[t._v("chevereto/docker"),e("OutboundLink")],1),t._v(" repository:")]),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("make")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sync")]),t._v("\n")])])]),e("p",[e("strong",[t._v("Note:")]),t._v(" If there's a new branch (for example 4.2) switch to that branch running the following command:")]),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("git")]),t._v(" switch "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.2")]),t._v("\n")])])]),e("h3",{attrs:{id:"step-2-re-build-the-container-image"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-2-re-build-the-container-image"}},[t._v("#")]),t._v(" Step 2: Re-build the container image")]),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("make")]),t._v(" image\n")])])]),e("h3",{attrs:{id:"step-3-down-and-re-up-the-container"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-3-down-and-re-up-the-container"}},[t._v("#")]),t._v(" Step 3: Down and re-up the container")]),t._v(" "),e("p",[t._v("Down the container:")]),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("docker")]),t._v(" stop --name chevereto\n"),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("docker")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("rm")]),t._v(" --name chevereto\n")])])]),e("p",[t._v("Then re-up the container using the same command you used to run it the first time.")]),t._v(" "),e("h2",{attrs:{id:"run-paid-edition"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-paid-edition"}},[t._v("#")]),t._v(" Run (paid edition)")]),t._v(" "),e("p",[t._v("To run "),e("a",{attrs:{href:"https://chevereto.com/pricing",target:"_blank",rel:"noopener noreferrer"}},[t._v("chevereto.com"),e("OutboundLink")],1),t._v(" (paid edition) you need to pass the environment targeting your private build image, in this example "),e("code",[t._v("chevereto:latest")]),t._v(".")]),t._v(" "),e("blockquote",[e("p",[t._v("Note: For running this command you need to fill your own database credentials.")])]),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("docker")]),t._v(" run -d "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n --name chevereto "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("80")]),t._v(":80 "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_DB_HOST")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("database "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_DB_USER")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("chevereto "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_DB_PASS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("user_database_password "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_DB_PORT")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3306")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_DB_NAME")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("chevereto "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_ASSET_STORAGE_TYPE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("local "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_ASSET_STORAGE_URL")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("/images/_assets/ "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_ASSET_STORAGE_BUCKET")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("/var/www/html/images/_assets/ "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_MAX_POST_SIZE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("2G "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_MAX_UPLOAD_SIZE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("2G "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -v /var/www/html/images/ "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n chevereto:latest\n")])])]),e("h2",{attrs:{id:"run-free-edition"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-free-edition"}},[t._v("#")]),t._v(" Run (free edition)")]),t._v(" "),e("p",[t._v("To run "),e("a",{attrs:{href:"https://github.com/chevereto/chevereto",target:"_blank",rel:"noopener noreferrer"}},[t._v("chevereto/chevereto"),e("OutboundLink")],1),t._v(" (Chevereto free edition) you need to pass the environment targeting public image "),e("code",[t._v("ghcr.io/chevereto/chevereto:latest")]),t._v(".")]),t._v(" "),e("p",[t._v("Alternatively, you can pass "),e("code",[t._v("chevereto/chevereto:latest")]),t._v(" which is the "),e("a",{attrs:{href:"https://hub.docker.com/r/chevereto/chevereto",target:"_blank",rel:"noopener noreferrer"}},[t._v("Chevereto mirror on DockerHub"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("blockquote",[e("p",[t._v("Note: For running this command you need to fill your own database credentials.")])]),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("docker")]),t._v(" run -d "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n --name chevereto "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("80")]),t._v(":80 "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_DB_HOST")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("database "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_DB_USER")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("chevereto "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_DB_PASS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("user_database_password "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_DB_PORT")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3306")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_DB_NAME")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("chevereto "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_ASSET_STORAGE_TYPE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("local "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_ASSET_STORAGE_URL")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("/images/_assets/ "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_ASSET_STORAGE_BUCKET")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("/var/www/html/images/_assets/ "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_MAX_POST_SIZE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("2G "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_MAX_UPLOAD_SIZE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("2G "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_SERVICING")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("server "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -v /var/www/html/images/ "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n ghcr.io/chevereto/chevereto:latest\n")])])]),e("h2",{attrs:{id:"run-free-edition-with-application-upgrade"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#run-free-edition-with-application-upgrade"}},[t._v("#")]),t._v(" Run free edition with application upgrade")]),t._v(" "),e("p",[t._v("If you want to run the free edition and manage the application upgrade within the application itself you need to pass "),e("code",[t._v("-e CHEVERETO_SERVICING=server")]),t._v(" and setup a volume for the application files:")]),t._v(" "),e("blockquote",[e("p",[t._v("Note: For running this command you need to fill your own database credentials.")])]),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("docker")]),t._v(" run -d "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n --name chevereto "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -p "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("80")]),t._v(":80 "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_DB_HOST")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("database "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_DB_USER")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("chevereto "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_DB_PASS")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("user_database_password "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_DB_PORT")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3306")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_DB_NAME")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("chevereto "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_ASSET_STORAGE_TYPE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("local "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_ASSET_STORAGE_URL")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("/images/_assets/ "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_ASSET_STORAGE_BUCKET")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("/var/www/html/images/_assets/ "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_MAX_POST_SIZE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("2G "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_MAX_UPLOAD_SIZE")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("2G "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -e "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHEVERETO_SERVICING")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("server "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -v /var/www/html/images/ "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n -v /var/www/html/ "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("\n ghcr.io/chevereto/chevereto:latest\n")])])]),e("h2",{attrs:{id:"using-compose"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#using-compose"}},[t._v("#")]),t._v(" Using compose")]),t._v(" "),e("p",[t._v("Create your own "),e("code",[t._v("docker-compose.yml")]),t._v(" at your project folder. See more examples at "),e("a",{attrs:{href:"https://github.com/chevereto/docker",target:"_blank",rel:"noopener noreferrer"}},[t._v("chevereto/docker"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("div",{staticClass:"language-yml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-yml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("services")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("database")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("image")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" mariadb"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("jammy\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("networks")]),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(" chevereto\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("volumes")]),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(" database"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("/var/lib/mysql\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("restart")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" always\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("healthcheck")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("test")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"CMD"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"healthcheck.sh"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"--su-mysql"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"--connect"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("interval")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 10s\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("timeout")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 5s\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("retries")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("environment")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("MYSQL_ROOT_PASSWORD")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" password\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("MYSQL_DATABASE")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" chevereto\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("MYSQL_USER")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" chevereto\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("MYSQL_PASSWORD")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" user_database_password\n\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("php")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("image")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" chevereto/chevereto"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("latest "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# tweak with target image to run")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("networks")]),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(" chevereto\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("volumes")]),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(" storage"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("/var/www/html/images/\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# - app:/var/www/html/ # uncomment when using CHEVERETO_SERVICING=server")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("restart")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" always\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("depends_on")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("database")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("condition")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" service_healthy\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("expose")]),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(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("80")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("environment")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("CHEVERETO_DB_HOST")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" database\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("CHEVERETO_DB_USER")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" chevereto\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("CHEVERETO_DB_PASS")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" user_database_password\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("CHEVERETO_DB_PORT")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3306")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("CHEVERETO_DB_NAME")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" chevereto\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("CHEVERETO_HOSTNAME")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" hostname.com\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("CHEVERETO_HOSTNAME_PATH")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" /\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("CHEVERETO_HTTPS")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("CHEVERETO_ASSET_STORAGE_TYPE")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" local\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("CHEVERETO_ASSET_STORAGE_URL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" http"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("//hostname.com/images/_assets/ "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#hostname-aware URL")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("CHEVERETO_ASSET_STORAGE_BUCKET")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" /var/www/html/images/_assets/\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("CHEVERETO_MAX_POST_SIZE")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2G\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("CHEVERETO_MAX_UPLOAD_SIZE")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" 2G\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# CHEVERETO_SERVICING: server # uncomment to enable application filesystem upgrades")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("volumes")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("database")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("storage")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# app: # uncomment when using CHEVERETO_SERVICING=server")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("networks")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("chevereto")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/46.a8532aaf.js b/assets/js/46.a8532aaf.js new file mode 100644 index 00000000..c61f60da --- /dev/null +++ b/assets/js/46.a8532aaf.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{498:function(e,t,s){"use strict";s.r(t);var r=s(68),a=Object(r.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"chevereto-plesk"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-plesk"}},[e._v("#")]),e._v(" Chevereto Plesk")]),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Installation service available")]),e._v(" "),s("p",[e._v("We offer a "),s("a",{attrs:{href:"https://chevereto.com/support",target:"_blank",rel:"noopener noreferrer"}},[e._v("paid installation service"),s("OutboundLink")],1),e._v(" for this guide. We will install Chevereto Plesk for you, including all the requirements and configurations.")])]),e._v(" "),s("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(" "),s("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(" "),s("h2",{attrs:{id:"requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),s("ul",[s("li",[e._v("Plesk based hosting service")]),e._v(" "),s("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/47.a4e7ac09.js b/assets/js/47.a4e7ac09.js new file mode 100644 index 00000000..e9aa87d6 --- /dev/null +++ b/assets/js/47.a4e7ac09.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[47],{503:function(e,t,a){"use strict";a.r(t);var s=a(68),r=Object(s.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"chevereto-vps"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-vps"}},[e._v("#")]),e._v(" Chevereto VPS")]),e._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("Installation service available")]),e._v(" "),a("p",[e._v("We offer a "),a("a",{attrs:{href:"https://chevereto.com/support",target:"_blank",rel:"noopener noreferrer"}},[e._v("paid installation service"),a("OutboundLink")],1),e._v(" for this guide. We will install Chevereto VPS for you, including all the requirements and configurations.")])]),e._v(" "),a("p",[e._v("Collection of universal bash scripts to install Chevereto in any VPS (Virtual Private Server). We strongly recommend "),a("a",{attrs:{href:"https://chevereto.com/go/digitalocean",target:"_blank",rel:"noopener noreferrer"}},[e._v("DigitalOcean"),a("OutboundLink")],1),e._v(", "),a("a",{attrs:{href:"https://chevereto.com/go/vultr",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vultr"),a("OutboundLink")],1),e._v(" and "),a("a",{attrs:{href:"https://chevereto.com/go/linode",target:"_blank",rel:"noopener noreferrer"}},[e._v("Linode"),a("OutboundLink")],1),e._v(".")]),e._v(" "),a("h2",{attrs:{id:"repository"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#repository"}},[e._v("#")]),e._v(" Repository")]),e._v(" "),a("p",[e._v("We have a GitHub repository with all the commands we will need. Check the repository at "),a("a",{attrs:{href:"https://github.com/chevereto/vps",target:"_blank",rel:"noopener noreferrer"}},[e._v("chevereto/vps"),a("OutboundLink")],1),e._v(" for instructions.")]),e._v(" "),a("h2",{attrs:{id:"instructions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#instructions"}},[e._v("#")]),e._v(" Instructions")]),e._v(" "),a("ul",[a("li",[e._v("Root login to your VPS")]),e._v(" "),a("li",[e._v("Run the following script(s)")])]),e._v(" "),a("h2",{attrs:{id:"ubuntu"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#ubuntu"}},[e._v("#")]),e._v(" Ubuntu")]),e._v(" "),a("blockquote",[a("p",[a("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(" "),a("h3",{attrs:{id:"prepare"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#prepare"}},[e._v("#")]),e._v(" Prepare")]),e._v(" "),a("p",[e._v("The "),a("a",{attrs:{href:"https://github.com/chevereto/vps/blob/4.1/ubuntu/24.04/prepare.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("prepare.sh"),a("OutboundLink")],1),e._v(" script install the system stack (PHP, Apache HTTP Web server, MySQL Server, Composer, FFmpeg and Certbot) on Ubuntu.")]),e._v(" "),a("p",[e._v("Reboot the VPS to make sure to apply any pending kernel updates:")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("systemctl "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("reboot")]),e._v("\n")])])]),a("p",[e._v("Make sure to change "),a("code",[e._v("24.04")]),e._v(" to match your Ubuntu LTS (available 20.04, 22.04 and 24.04).")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -s https://raw.githubusercontent.com/chevereto/vps/4.1/ubuntu/24.04/prepare.sh"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n")])])]),a("p",[e._v("This message will be shown on success:")]),e._v(" "),a("div",{staticClass:"language-plain extra-class"},[a("pre",{pre:!0,attrs:{class:"language-plain"}},[a("code",[e._v("[OK] Stack ready for Chevereto!\n")])])]),a("h2",{attrs:{id:"common"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#common"}},[e._v("#")]),e._v(" Common")]),e._v(" "),a("ul",[a("li",[e._v("The scripts at "),a("code",[e._v("common/")]),e._v(" will work under any unix-like system")]),e._v(" "),a("li",[e._v("Requires "),a("code",[e._v("curl")]),e._v(" and "),a("code",[e._v("unzip")])])]),e._v(" "),a("h3",{attrs:{id:"new"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#new"}},[e._v("#")]),e._v(" New")]),e._v(" "),a("p",[e._v("The "),a("a",{attrs:{href:"https://github.com/chevereto/vps/blob/4.1/common/new.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("new.sh"),a("OutboundLink")],1),e._v(" script downloads Chevereto and configures Apache HTTP Web server, MySQL, CRON and FFmpeg. Its purpose is to prepare for "),a("a",{attrs:{href:"https://v4-docs.chevereto.com/application/installing/installation.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto Installation"),a("OutboundLink")],1),e._v(".")]),e._v(" "),a("p",[e._v("This is intended to brand new installations and it should run after "),a("a",{attrs:{href:"#prepare"}},[e._v("prepare")]),e._v(" as it assumes that the system stack is ready.")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -s https://raw.githubusercontent.com/chevereto/vps/4.1/common/new.sh"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n")])])]),a("h4",{attrs:{id:"notes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#notes"}},[e._v("#")]),e._v(" Notes")]),e._v(" "),a("p",[e._v("On the server:")]),e._v(" "),a("ul",[a("li",[e._v("The web root is located at "),a("code",[e._v("/var/www/html")])]),e._v(" "),a("li",[e._v("The MySQL root password is saved at "),a("code",[e._v("/root/.mysql_password")])]),e._v(" "),a("li",[e._v("Logs are at "),a("code",[e._v("/var/log/apache2")])])]),e._v(" "),a("p",[e._v("IMPORTANT:")]),e._v(" "),a("ul",[a("li",[e._v("Secure your database by running "),a("code",[e._v("mysql_secure_installation")])])]),e._v(" "),a("h3",{attrs:{id:"get"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get"}},[e._v("#")]),e._v(" Get")]),e._v(" "),a("p",[e._v("The "),a("a",{attrs:{href:"https://github.com/chevereto/vps/blob/4.1/common/get.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("get.sh"),a("OutboundLink")],1),e._v(" script download and extracts Chevereto in the "),a("strong",[e._v("current working folder")]),e._v(".")]),e._v(" "),a("ul",[a("li",[a("code",[e._v("cd")]),e._v(" into the website project folder (for example "),a("code",[e._v("/var/www/html")]),e._v(")")]),e._v(" "),a("li",[e._v("Run the following command")])]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -s https://raw.githubusercontent.com/chevereto/vps/4.1/common/get.sh"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n")])])]),a("h3",{attrs:{id:"cloudflare-remote-ip"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#cloudflare-remote-ip"}},[e._v("#")]),e._v(" Cloudflare remote IP")]),e._v(" "),a("p",[e._v("The "),a("a",{attrs:{href:"https://github.com/chevereto/vps/blob/4.1/common/cf-remoteip.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("cf-remoteip.sh"),a("OutboundLink")],1),e._v(" script syncs the known IPs for CloudFlare remote IP. This "),a("strong",[e._v("must")]),e._v(" be used if you are using CloudFlare.")]),e._v(" "),a("blockquote",[a("p",[a("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(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -s https://raw.githubusercontent.com/chevereto/vps/4.1/common/cf-remoteip.sh"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n")])])]),a("ul",[a("li",[e._v("To save the above script in your VPS:")])]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -f -SOJL "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n --output-dir /etc/apache2 "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n https://raw.githubusercontent.com/chevereto/vps/4.1/common/cf-remoteip.sh\n")])])]),a("ul",[a("li",[e._v("To add the above script to CRON (cron.d) to keep these IP ranges auto updated:")])]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("cat")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("/etc/cron.d/cf-remoteip "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<<")]),a("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")])])]),a("h2",{attrs:{id:"https-setup"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#https-setup"}},[e._v("#")]),e._v(" HTTPS setup")]),e._v(" "),a("p",[e._v("Run the following command to get automatic renewable HTTPS thanks to certbot. Mind to change "),a("code",[e._v("example.com")]),e._v(" with the target domain(s).")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("certbot --apache -d example.com\n")])])]),a("p",[e._v("If you are using "),a("code",[e._v("www.")]),e._v(" subdomain you can add it like this:")]),e._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[e._v("certbot --apache -d example.com -d www.example.com\n")])])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/48.4309c0ce.js b/assets/js/48.4309c0ce.js new file mode 100644 index 00000000..b2eee195 --- /dev/null +++ b/assets/js/48.4309c0ce.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[48],{506:function(e,t,r){"use strict";r.r(t);var a=r(68),o=Object(a.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"_4-0-macanudo"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#_4-0-macanudo"}},[e._v("#")]),e._v(" 4.0 Macanudo")]),e._v(" "),r("p",[e._v("Chevereto v4.0 codename "),r("a",{attrs:{href:"https://dle.rae.es/macanudo",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("Macanudo")]),r("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(" "),r("h2",{attrs:{id:"videos"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#videos"}},[e._v("#")]),e._v(" Videos")]),e._v(" "),r("ul",[r("li",[r("a",{attrs:{href:"https://www.youtube.com/watch?v=C-AZVuMEFMg",target:"_blank",rel:"noopener noreferrer"}},[e._v("Features summary"),r("OutboundLink")],1)]),e._v(" "),r("li",[r("a",{attrs:{href:"https://www.youtube.com/watch?v=TirAHdfEOR8",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto v4.0.6"),r("OutboundLink")],1)]),e._v(" "),r("li",[r("a",{attrs:{href:"https://www.youtube.com/watch?v=ClF4uCbYKdA",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto v4.0.7"),r("OutboundLink")],1)])]),e._v(" "),r("h2",{attrs:{id:"custom-semantics"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#custom-semantics"}},[e._v("#")]),e._v(" Custom semantics")]),e._v(" "),r("p",[e._v("Fits your context.")]),e._v(" "),r("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(" "),r("p",[e._v("With Chevereto you define the context.")]),e._v(" "),r("h2",{attrs:{id:"call-to-action-buttons"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#call-to-action-buttons"}},[e._v("#")]),e._v(" Call to action buttons")]),e._v(" "),r("p",[e._v("Get more leads.")]),e._v(" "),r("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(" "),r("p",[e._v("Offer anything with Chevereto and easy plug it to the world.")]),e._v(" "),r("h2",{attrs:{id:"user-based-api"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#user-based-api"}},[e._v("#")]),e._v(" User-based API")]),e._v(" "),r("p",[e._v("API available to all users.")]),e._v(" "),r("p",[e._v("With the "),r("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 "),r("a",{attrs:{href:"https://v4-user.chevereto.com/integrations/sharex.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("ShareX"),r("OutboundLink")],1),e._v(" directly to the user's account.")],1),e._v(" "),r("p",[e._v("Enable uploading to Chevereto from anywhere.")]),e._v(" "),r("h2",{attrs:{id:"theme-palettes"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#theme-palettes"}},[e._v("#")]),e._v(" Theme palettes")]),e._v(" "),r("p",[e._v("Give color.")]),e._v(" "),r("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(" "),r("p",[e._v("Brings a new visual comfort layer to Chevereto.")]),e._v(" "),r("h2",{attrs:{id:"mobile-gorgeous"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#mobile-gorgeous"}},[e._v("#")]),e._v(" Mobile gorgeous")]),e._v(" "),r("p",[e._v("Better on mobile devices.")]),e._v(" "),r("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(" "),r("p",[e._v("Best mobile experience for Chevereto.")]),e._v(" "),r("h2",{attrs:{id:"faster-rendering"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#faster-rendering"}},[e._v("#")]),e._v(" Faster rendering")]),e._v(" "),r("p",[e._v("The fast and the "),r("em",[e._v("htmlorious")]),e._v(".")]),e._v(" "),r("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(" "),r("p",[e._v("Delivers your Chevereto website, faster and more SEO friendly.")]),e._v(" "),r("h2",{attrs:{id:"keyboard-shortcuts"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#keyboard-shortcuts"}},[e._v("#")]),e._v(" Keyboard shortcuts")]),e._v(" "),r("p",[e._v("⌨️ Do more in less time.")]),e._v(" "),r("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(" "),r("p",[e._v("Chevereto gets delightful productive.")]),e._v(" "),r("h2",{attrs:{id:"csam-protection"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#csam-protection"}},[e._v("#")]),e._v(" CSAM protection")]),e._v(" "),r("p",[e._v("Project Arachnid integration.")]),e._v(" "),r("p",[e._v("Operated by the Canadian Centre for Child Protection, "),r("a",{attrs:{href:"https://projectarachnid.ca/en/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Project Arachnid"),r("OutboundLink")],1),e._v(" is an innovative tool to combat the growing proliferation of child sexual abuse material (CSAM) on the internet.")]),e._v(" "),r("p",[e._v("Adds CSAM protection to Chevereto.")]),e._v(" "),r("h2",{attrs:{id:"folder-upload"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#folder-upload"}},[e._v("#")]),e._v(" Folder upload")]),e._v(" "),r("p",[e._v("Drag-and-drop without hassle.")]),e._v(" "),r("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(" "),r("p",[e._v("Easier to upload tons of content to Chevereto.")]),e._v(" "),r("h2",{attrs:{id:"two-factor-auth"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#two-factor-auth"}},[e._v("#")]),e._v(" Two-factor auth")]),e._v(" "),r("p",[e._v("Time-based one-time password.")]),e._v(" "),r("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(" "),r("p",[e._v("Enables safer account security for Chevereto.")]),e._v(" "),r("h2",{attrs:{id:"xrdebug"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#xrdebug"}},[e._v("#")]),e._v(" xrDebug")]),e._v(" "),r("p",[e._v("The friendly debug tool.")]),e._v(" "),r("p",[e._v("The debug process doesn't need to be for hackers neither a pain requiring to install server libraries for it. With "),r("a",{attrs:{href:"https://xrdebug.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("xrDebug"),r("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(" "),r("p",[e._v("Comes built-in with a debug application made by us, for us.")]),e._v(" "),r("h2",{attrs:{id:"improved-console"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#improved-console"}},[e._v("#")]),e._v(" Improved console")]),e._v(" "),r("p",[e._v("Boosted CLI tools.")]),e._v(" "),r("p",[e._v("The "),r("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(" "),r("p",[e._v("Provides extra console commands for Chevereto.")]),e._v(" "),r("h2",{attrs:{id:"repl"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#repl"}},[e._v("#")]),e._v(" REPL")]),e._v(" "),r("p",[e._v("Stop dying all the time.")]),e._v(" "),r("p",[e._v("Built-in "),r("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(" "),r("p",[e._v("Easy exploratory programming for the Chevereto application.")]),e._v(" "),r("h2",{attrs:{id:"web-share-api"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#web-share-api"}},[e._v("#")]),e._v(" Web Share API")]),e._v(" "),r("p",[e._v("Enhanced sharing experience.")]),e._v(" "),r("p",[e._v("With "),r("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"),r("OutboundLink")],1),e._v(" users can enjoy seamless sharing natively integrated with their target device.")]),e._v(" "),r("p",[e._v("Powers device context aware sharing options for Chevereto.")]),e._v(" "),r("h2",{attrs:{id:"root-routing-settings"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#root-routing-settings"}},[e._v("#")]),e._v(" Root routing settings")]),e._v(" "),r("p",[e._v("Own the "),r("code",[e._v("/root")]),e._v(" behavior.")]),e._v(" "),r("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(" "),r("p",[e._v("Sparks freedom of choice for the most important routes for your website.")]),e._v(" "),r("h2",{attrs:{id:"uses-chevere-software"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#uses-chevere-software"}},[e._v("#")]),e._v(" Uses Chevere software")]),e._v(" "),r("p",[e._v("¡Que "),r("em",[e._v("chévere")]),e._v("!")]),e._v(" "),r("p",[e._v("Includes superb software packages like "),r("a",{attrs:{href:"https://chevere.org/packages/throwable-handler",target:"_blank",rel:"noopener noreferrer"}},[e._v("ThrowableHandler"),r("OutboundLink")],1),e._v(", "),r("a",{attrs:{href:"https://chevere.org/packages/xrdebug",target:"_blank",rel:"noopener noreferrer"}},[e._v("xrDebug"),r("OutboundLink")],1),e._v(" and "),r("a",{attrs:{href:"https://chevere.org/packages/var-dump",target:"_blank",rel:"noopener noreferrer"}},[e._v("VarDump"),r("OutboundLink")],1),e._v(". The application is made on top of an entire software foundation made for us.")]),e._v(" "),r("p",[e._v("Introduces "),r("a",{attrs:{href:"https://chevere.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevere"),r("OutboundLink")],1),e._v(" software for Chevereto.")]),e._v(" "),r("h2",{attrs:{id:"encrypted-secrets"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#encrypted-secrets"}},[e._v("#")]),e._v(" Encrypted secrets")]),e._v(" "),r("p",[e._v("Safe application secrets.")]),e._v(" "),r("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(" "),r("p",[e._v("Adds another layer of security for Chevereto systems.")]),e._v(" "),r("h2",{attrs:{id:"image-delete-link"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#image-delete-link"}},[e._v("#")]),e._v(" Image delete link")]),e._v(" "),r("p",[e._v("And it's gone!")]),e._v(" "),r("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(" "),r("p",[e._v("Adds another layer for image disposal.")]),e._v(" "),r("h2",{attrs:{id:"one-click-system-update"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#one-click-system-update"}},[e._v("#")]),e._v(" One-click system update")]),e._v(" "),r("p",[e._v("Easy as pie.")]),e._v(" "),r("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(" "),r("h2",{attrs:{id:"tons-of-small-bits"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#tons-of-small-bits"}},[e._v("#")]),e._v(" Tons of small bits")]),e._v(" "),r("p",[e._v("Little details everywhere.")]),e._v(" "),r("p",[e._v("Review the complete changelog starting at "),r("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"),r("OutboundLink")],1),e._v(" and carried over a year. There are tons of exciting new "),r("em",[e._v("Macanudas")]),e._v(" features in this Chevereto version.")]),e._v(" "),r("ul",[r("li",[e._v("Text-based logo")]),e._v(" "),r("li",[e._v("Zoomable listing viewer")]),e._v(" "),r("li",[e._v("Extended configurable system settings")]),e._v(" "),r("li",[e._v("Re-classified error codes")]),e._v(" "),r("li",[e._v("FontAwesome 6 on all icons")]),e._v(" "),r("li",[e._v("Better screen usage on mobile")]),e._v(" "),r("li",[e._v("More configurable restrictions for guest")]),e._v(" "),r("li",[e._v("Root-level maximum limits")]),e._v(" "),r("li",[e._v("Improved SEO")])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/49.ee2a8657.js b/assets/js/49.ee2a8657.js new file mode 100644 index 00000000..a48bbc0e --- /dev/null +++ b/assets/js/49.ee2a8657.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{507:function(e,t,o){"use strict";o.r(t);var r=o(68),s=Object(r.a)({},(function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",{attrs:{id:"_4-1-pulento"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#_4-1-pulento"}},[e._v("#")]),e._v(" 4.1 Pulento")]),e._v(" "),o("p",[e._v("Chevereto v4.1 codename "),o("a",{attrs:{href:"https://dle.rae.es/pulento",target:"_blank",rel:"noopener noreferrer"}},[o("strong",[e._v("Pulento")]),o("OutboundLink")],1),e._v(" carries the development started with "),o("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(" "),o("p",[e._v("With "),o("em",[e._v("Pulento")]),e._v(" Chevereto has now become an Image and Video hosting software.")]),e._v(" "),o("h2",{attrs:{id:"blog-posts"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#blog-posts"}},[e._v("#")]),e._v(" Blog posts")]),e._v(" "),o("ul",[o("li",[o("a",{attrs:{href:"https://rodolfoberrios.com/2024/04/20/chevereto-4-1/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto 4.1"),o("OutboundLink")],1)]),e._v(" "),o("li",[o("a",{attrs:{href:"https://blog.chevereto.com/upcoming/video-support/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Video support"),o("OutboundLink")],1)]),e._v(" "),o("li",[o("a",{attrs:{href:"https://blog.chevereto.com/upcoming/user-based-api/",target:"_blank",rel:"noopener noreferrer"}},[e._v("User-based API"),o("OutboundLink")],1)])]),e._v(" "),o("h2",{attrs:{id:"video-support"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#video-support"}},[e._v("#")]),e._v(" Video support")]),e._v(" "),o("p",[e._v("Now with support for video content.")]),e._v(" "),o("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(" "),o("h2",{attrs:{id:"configurable-view-for-user-profiles"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#configurable-view-for-user-profiles"}},[e._v("#")]),e._v(" Configurable view for user profiles")]),e._v(" "),o("p",[e._v("Customize display of files or images for user profile homepage.")]),e._v(" "),o("h2",{attrs:{id:"customizable-theme-font"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#customizable-theme-font"}},[e._v("#")]),e._v(" Customizable theme font")]),e._v(" "),o("p",[e._v("Easy select Chevereto system font to fit your style.")]),e._v(" "),o("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/5.0ba51305.js b/assets/js/5.0ba51305.js new file mode 100644 index 00000000..4fe67bad --- /dev/null +++ b/assets/js/5.0ba51305.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{442:function(s,t,e){s.exports=e.p+"assets/img/sheduled-tasks.e4524d2a.png"},443:function(s,t,e){s.exports=e.p+"assets/img/sheduled-tasks-add.79d9d81c.png"},444:function(s,t,e){s.exports=e.p+"assets/img/sheduled-tasks-demo.c5d5a25c.png"},445:function(s,t,e){s.exports=e.p+"assets/img/sheduled-tasks-ok.8173ab49.png"},499:function(s,t,e){"use strict";e.r(t);var n=e(68),r=Object(n.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("h1",{attrs:{id:"plesk-cron"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#plesk-cron"}},[s._v("#")]),s._v(" Plesk CRON")]),s._v(" "),n("h2",{attrs:{id:"add-new-cron-job"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#add-new-cron-job"}},[s._v("#")]),s._v(" Add new CRON job")]),s._v(" "),n("ul",[n("li",[s._v("Go to "),n("strong",[s._v("Scheduled Tasks")]),s._v(" under "),n("strong",[s._v("Dev Tools")])])]),s._v(" "),n("p",[n("img",{attrs:{src:e(442),alt:"Scheduled Tasks"}})]),s._v(" "),n("ul",[n("li",[s._v("Click on "),n("strong",[s._v("Add Task")])])]),s._v(" "),n("p",[n("img",{attrs:{src:e(443),alt:"Scheduled Tasks"}})]),s._v(" "),n("ul",[n("li",[s._v("Select "),n("strong",[s._v("Run a PHP script")]),s._v(" under "),n("strong",[s._v("Task type")])]),s._v(" "),n("li",[s._v("Use "),n("code",[s._v("httpdocs/app/bin/legacy")]),s._v(" under "),n("strong",[s._v("Script path")])]),s._v(" "),n("li",[s._v("Set "),n("code",[s._v("-C cron")]),s._v(" under "),n("strong",[s._v("With arguments")])]),s._v(" "),n("li",[s._v("Select PHP "),n("code",[s._v("8")]),s._v(" under "),n("strong",[s._v("Use PHP version")])]),s._v(" "),n("li",[s._v("Select "),n("strong",[s._v("Cron style")]),s._v(" under "),n("strong",[s._v("Run")]),s._v(" and enter "),n("code",[s._v("* * * * *")])]),s._v(" "),n("li",[s._v("Select "),n("strong",[s._v("Do not notify")]),s._v(" under "),n("strong",[s._v("Notify")])])]),s._v(" "),n("p",[n("img",{attrs:{src:e(444),alt:"Scheduled Tasks"}})]),s._v(" "),n("ul",[n("li",[s._v("Click on "),n("strong",[s._v("Run Now")]),s._v(" and make sure that the command works")])]),s._v(" "),n("p",[n("img",{attrs:{src:e(445),alt:"Scheduled Tasks"}})]),s._v(" "),n("ul",[n("li",[s._v("Click "),n("strong",[s._v("OK")]),s._v(" to finish adding the CRON")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/50.d5f2bf3a.js b/assets/js/50.d5f2bf3a.js new file mode 100644 index 00000000..656bc505 --- /dev/null +++ b/assets/js/50.d5f2bf3a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{505:function(e,t,a){"use strict";a.r(t);var n=a(68),r=Object(n.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"_4-2-regio"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_4-2-regio"}},[e._v("#")]),e._v(" 4.2 Regio")]),e._v(" "),a("p",[e._v("Chevereto v4.2, codenamed "),a("a",{attrs:{href:"https://dle.rae.es/regio",target:"_blank",rel:"noopener noreferrer"}},[a("strong",[e._v("Regio")]),a("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(" "),a("h2",{attrs:{id:"blog-posts"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#blog-posts"}},[e._v("#")]),e._v(" Blog posts")]),e._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://blog.chevereto.com/2024/10/24/chevereto-4-2/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto 4.2 (Regio)"),a("OutboundLink")],1)]),e._v(" "),a("li",[a("a",{attrs:{href:"https://blog.chevereto.com/upcoming/tags-support/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Tags support"),a("OutboundLink")],1)])]),e._v(" "),a("h2",{attrs:{id:"tagging-system-enhancements"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tagging-system-enhancements"}},[e._v("#")]),e._v(" Tagging System Enhancements")]),e._v(" "),a("p",[e._v("Bring context everywhere.")]),e._v(" "),a("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(" "),a("h2",{attrs:{id:"improved-storage-management"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#improved-storage-management"}},[e._v("#")]),e._v(" Improved Storage Management")]),e._v(" "),a("p",[e._v("Consolidated storage management.")]),e._v(" "),a("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(" "),a("h2",{attrs:{id:"avif-image-format-support"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#avif-image-format-support"}},[e._v("#")]),e._v(" AVIF Image Format Support")]),e._v(" "),a("p",[e._v("High-efficiency image compression.")]),e._v(" "),a("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(" "),a("h2",{attrs:{id:"system-and-performance-improvements"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#system-and-performance-improvements"}},[e._v("#")]),e._v(" System and Performance Improvements")]),e._v(" "),a("p",[e._v("Enhanced backend performance.")]),e._v(" "),a("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(" "),a("h2",{attrs:{id:"user-interface-and-mobile-experience"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#user-interface-and-mobile-experience"}},[e._v("#")]),e._v(" User Interface and Mobile Experience")]),e._v(" "),a("p",[e._v("A refined user experience.")]),e._v(" "),a("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(" "),a("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(" "),a("h2",{attrs:{id:"expanded-content-listings-in-explore"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#expanded-content-listings-in-explore"}},[e._v("#")]),e._v(" Expanded Content Listings in Explore")]),e._v(" "),a("p",[e._v("Discover more content.")]),e._v(" "),a("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(" "),a("h2",{attrs:{id:"bug-fixes-and-stability-improvements"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bug-fixes-and-stability-improvements"}},[e._v("#")]),e._v(" Bug Fixes and Stability Improvements")]),e._v(" "),a("p",[e._v("Quality and reliability enhancements.")]),e._v(" "),a("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/51.02236bf9.js b/assets/js/51.02236bf9.js new file mode 100644 index 00000000..c28e710d --- /dev/null +++ b/assets/js/51.02236bf9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{509:function(e,t,r){"use strict";r.r(t);var o=r(68),a=Object(o.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"welcome-back"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#welcome-back"}},[e._v("#")]),e._v(" Welcome Back")]),e._v(" "),r("p",[e._v("Have used Chevereto before? That's awesome!")]),e._v(" "),r("p",[e._v("We have prepared a short summary in what you can expect coming from older versions of the software.")]),e._v(" "),r("h2",{attrs:{id:"from-chevereto-v3"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#from-chevereto-v3"}},[e._v("#")]),e._v(" From Chevereto V3")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://releases.chevereto.com/3.X/",target:"_blank",rel:"noopener noreferrer"}},[e._v("V3.X releases"),r("OutboundLink")],1)]),e._v(" "),r("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 "),r("a",{attrs:{href:"https://chevere.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevere"),r("OutboundLink")],1),e._v(".")]),e._v(" "),r("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(" "),r("h3",{attrs:{id:"chevereto-v4-vs-v3"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-v4-vs-v3"}},[e._v("#")]),e._v(" Chevereto V4 vs V3")]),e._v(" "),r("div",{staticClass:"embed-responsive embed-responsive-16by9"},[r("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(" "),r("p",[e._v("The following tables summarizes the significative differences between Chevereto V3 and Chevereto V4.")]),e._v(" "),r("table",[r("thead",[r("tr",[r("th",[e._v("System")]),e._v(" "),r("th",[e._v("V4")]),e._v(" "),r("th",[e._v("V3")])])]),e._v(" "),r("tbody",[r("tr",[r("td",[e._v("PHP")]),e._v(" "),r("td",[e._v("8")]),e._v(" "),r("td",[e._v("7.4")])])])]),e._v(" "),r("table",[r("thead",[r("tr",[r("th"),e._v(" "),r("th",[e._v("V4 Path")]),e._v(" "),r("th",[e._v("V3 Path")])])]),e._v(" "),r("tbody",[r("tr",[r("td",[e._v("Settings")]),e._v(" "),r("td",[e._v("/app/env.php")]),e._v(" "),r("td",[e._v("/app/settings.php")])]),e._v(" "),r("tr",[r("td",[e._v("Composer")]),e._v(" "),r("td",[e._v("/app/composer.json")]),e._v(" "),r("td",[e._v("/composer.json")])]),e._v(" "),r("tr",[r("td",[r("RouterLink",{attrs:{to:"/application/reference/cli.html"}},[e._v("CLI")])],1),e._v(" "),r("td",[e._v("/app/bin/legacy")]),e._v(" "),r("td",[e._v("/cli.php")])]),e._v(" "),r("tr",[r("td",[e._v("Themes")]),e._v(" "),r("td",[e._v("/content/legacy/themes")]),e._v(" "),r("td",[e._v("/app/themes")])]),e._v(" "),r("tr",[r("td",[e._v("Peafowl")]),e._v(" "),r("td",[e._v("/content/legacy/themes/Peafowl/lib")]),e._v(" "),r("td",[e._v("/lib")])])])]),e._v(" "),r("h3",{attrs:{id:"settings-setup"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#settings-setup"}},[e._v("#")]),e._v(" Settings setup")]),e._v(" "),r("p",[e._v("Chevereto V4 deprecates "),r("code",[e._v("app/settings.php")]),e._v(" in favor of "),r("RouterLink",{attrs:{to:"/application/configuration/environment.html"}},[e._v("environment variables")]),e._v(" for "),r("RouterLink",{attrs:{to:"/application/configuration/configuring.html"}},[e._v("configuring")]),e._v(" the application.")],1),e._v(" "),r("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(" "),r("h2",{attrs:{id:"from-chevereto-free"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#from-chevereto-free"}},[e._v("#")]),e._v(" From Chevereto-Free")]),e._v(" "),r("p",[e._v("As "),r("a",{attrs:{href:"https://github.com/rodber/chevereto-free",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto-Free"),r("OutboundLink")],1),e._v(" is a fork of "),r("a",{attrs:{href:"https://releases.chevereto.com/3.X/3.16/3.16.0",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto V3.16"),r("OutboundLink")],1),e._v(", it adds on top of that branch.")]),e._v(" "),r("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(" "),r("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(" "),r("h2",{attrs:{id:"from-chevereto-v2"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#from-chevereto-v2"}},[e._v("#")]),e._v(" From Chevereto V2")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://releases.chevereto.com/2.X/",target:"_blank",rel:"noopener noreferrer"}},[e._v("V2.X releases"),r("OutboundLink")],1)]),e._v(" "),r("p",[e._v("Adding on "),r("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(" "),r("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(" "),r("h2",{attrs:{id:"from-chevereto-v1"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#from-chevereto-v1"}},[e._v("#")]),e._v(" From Chevereto V1")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://releases.chevereto.com/1.X/",target:"_blank",rel:"noopener noreferrer"}},[e._v("V1.X releases"),r("OutboundLink")],1)]),e._v(" "),r("p",[e._v("Adding on "),r("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(" "),r("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/52.2595ed1a.js b/assets/js/52.2595ed1a.js new file mode 100644 index 00000000..3b19751e --- /dev/null +++ b/assets/js/52.2595ed1a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{508:function(e,t,o){"use strict";o.r(t);var r=o(68),s=Object(r.a)({},(function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",{attrs:{id:"contributing"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#contributing"}},[e._v("#")]),e._v(" Contributing")]),e._v(" "),o("p",[e._v("Contribute to Chevereto to show your support and care for the software. Anyone can contribute, don't hesitate to "),o("a",{attrs:{href:"https://chevereto.com/contact",target:"_blank",rel:"noopener noreferrer"}},[e._v("contact us"),o("OutboundLink")],1),e._v(" if you have something in your mind not covered here.")]),e._v(" "),o("h2",{attrs:{id:"show-and-tell"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#show-and-tell"}},[e._v("#")]),e._v(" Show and Tell")]),e._v(" "),o("p",[e._v("The best way you can support us is by spreading the word about the software we do.")]),e._v(" "),o("p",[e._v("Tell others what Chevereto does and how you use it.")]),e._v(" "),o("h2",{attrs:{id:"documentation"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#documentation"}},[e._v("#")]),e._v(" Documentation")]),e._v(" "),o("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(" "),o("p",[e._v("Feel free to contribute to the "),o("a",{attrs:{href:"https://github.com/chevereto/v4-docs",target:"_blank",rel:"noopener noreferrer"}},[e._v("docs repo"),o("OutboundLink")],1),e._v(".")]),e._v(" "),o("h2",{attrs:{id:"servers"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#servers"}},[e._v("#")]),e._v(" Servers")]),e._v(" "),o("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(" "),o("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/53.dd4d403b.js b/assets/js/53.dd4d403b.js new file mode 100644 index 00000000..72c2d3be --- /dev/null +++ b/assets/js/53.dd4d403b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{510:function(e,t,r){"use strict";r.r(t);var o=r(68),n=Object(o.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"copyright"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#copyright"}},[e._v("#")]),e._v(" Copyright")]),e._v(" "),r("p",[e._v("Copyright 2024 "),r("a",{attrs:{href:"https://rodolfoberrios.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rodolfo Berrios A."),r("OutboundLink")],1)]),e._v(" "),r("h2",{attrs:{id:"software"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#software"}},[e._v("#")]),e._v(" Software")]),e._v(" "),r("p",[e._v("Chevereto V4 is released under the "),r("strong",[e._v("Chevereto License")]),e._v(", Version 4.0. See "),r("a",{attrs:{href:"https://chevereto.com/license",target:"_blank",rel:"noopener noreferrer"}},[e._v("License"),r("OutboundLink")],1),e._v(" for the complete license text.")]),e._v(" "),r("p",[e._v("You can use Chevereto V4 software according to the grants in the license document.")]),e._v(" "),r("h2",{attrs:{id:"documentation"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#documentation"}},[e._v("#")]),e._v(" Documentation")]),e._v(" "),r("p",[e._v("Chevereto V4 documentation is licensed under the "),r("strong",[e._v("Apache License")]),e._v(", Version 2.0. See "),r("a",{attrs:{href:"https://github.com/chevereto/v4-docs/blob/main/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[e._v("LICENSE"),r("OutboundLink")],1),e._v(" for the full license text.")]),e._v(" "),r("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/54.5c0aa06e.js b/assets/js/54.5c0aa06e.js new file mode 100644 index 00000000..d07fbb93 --- /dev/null +++ b/assets/js/54.5c0aa06e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{511:function(e,r,t){"use strict";t.r(r);var o=t(68),n=Object(o.a)({},(function(){var e=this,r=e.$createElement,t=e._self._c||r;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"links"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#links"}},[e._v("#")]),e._v(" Links")]),e._v(" "),t("h2",{attrs:{id:"chevereto-v4-resources"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#chevereto-v4-resources"}},[e._v("#")]),e._v(" Chevereto V4 Resources")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://v4-user.chevereto.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto V4 User manual"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://v4-user.chevereto.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto V4 Admin manual"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://releases.chevereto.com/4.X/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto V4 Releases"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"general-resources"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#general-resources"}},[e._v("#")]),e._v(" General Resources")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://chevereto.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Website"),t("OutboundLink")],1),e._v(" Everything goes at "),t("code",[e._v("chevereto.com")])]),e._v(" "),t("li",[t("a",{attrs:{href:"https://chevereto.com/go/newsletter",target:"_blank",rel:"noopener noreferrer"}},[e._v("Newsletter"),t("OutboundLink")],1),e._v(" Updates on your inbox")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.chevereto.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Blog"),t("OutboundLink")],1),e._v(" Stay on loop")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://chevereto.com/community/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Community"),t("OutboundLink")],1),e._v(" Join the discussion with other users")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://chevereto.com/go/discord",target:"_blank",rel:"noopener noreferrer"}},[e._v("Discord"),t("OutboundLink")],1),e._v(" Chat with us and other users")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/chevereto",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub"),t("OutboundLink")],1),e._v(" Star our Open Source work")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://releases.chevereto.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Releases"),t("OutboundLink")],1),e._v(" All Chevereto software release notes")])]),e._v(" "),t("h2",{attrs:{id:"author-s-resources"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#author-s-resources"}},[e._v("#")]),e._v(" Author's Resources")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://rodolfoberrios.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rodolfo Berrios"),t("OutboundLink")],1),e._v(" The author behind Chevereto")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/rodber",target:"_blank",rel:"noopener noreferrer"}},[e._v("rodber (GitHub)"),t("OutboundLink")],1),e._v(" Star Rodolfo's Open Source work")])])])}),[],!1,null,null,null);r.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/55.40cfc439.js b/assets/js/55.40cfc439.js new file mode 100644 index 00000000..9642f3f3 --- /dev/null +++ b/assets/js/55.40cfc439.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[55],{512:function(e,t,r){"use strict";r.r(t);var a=r(68),o=Object(a.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"welcome-to-chevereto"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#welcome-to-chevereto"}},[e._v("#")]),e._v(" Welcome to Chevereto!")]),e._v(" "),r("div",{staticClass:"embed-responsive embed-responsive-16by9"},[r("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(" "),r("h2",{attrs:{id:"what-is-chevereto"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#what-is-chevereto"}},[e._v("#")]),e._v(" What is Chevereto?")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://chevereto.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("Chevereto"),r("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(" "),r("h2",{attrs:{id:"use-cases"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#use-cases"}},[e._v("#")]),e._v(" Use cases")]),e._v(" "),r("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 "),r("a",{attrs:{href:"https://chevereto.com/features",target:"_blank",rel:"noopener noreferrer"}},[e._v("features"),r("OutboundLink")],1),e._v(", including:")]),e._v(" "),r("ul",[r("li",[e._v("Image and video "),r("a",{attrs:{href:"https://chevereto.com/service-providers",target:"_blank",rel:"noopener noreferrer"}},[e._v("host/sharing service"),r("OutboundLink")],1)]),e._v(" "),r("li",[e._v("Media-based "),r("a",{attrs:{href:"https://chevereto.com/communities",target:"_blank",rel:"noopener noreferrer"}},[e._v("sharing communities"),r("OutboundLink")],1)]),e._v(" "),r("li",[e._v("Media-driven portfolios for "),r("a",{attrs:{href:"https://chevereto.com/content-creators",target:"_blank",rel:"noopener noreferrer"}},[e._v("content-creators"),r("OutboundLink")],1)]),e._v(" "),r("li",[e._v("Photography showcase for "),r("a",{attrs:{href:"https://chevereto.com/photographers",target:"_blank",rel:"noopener noreferrer"}},[e._v("photographers"),r("OutboundLink")],1)]),e._v(" "),r("li",[e._v("Image and video media asset storage")])]),e._v(" "),r("p",[e._v("Chevereto could be used to build your "),r("a",{attrs:{href:"https://chevereto.com/stores",target:"_blank",rel:"noopener noreferrer"}},[e._v("store's gallery"),r("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(" "),r("p",[e._v("The point of Chevereto is that it handles "),r("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(" "),r("h2",{attrs:{id:"origin"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#origin"}},[e._v("#")]),e._v(" Origin")]),e._v(" "),r("p",[e._v("Chevereto project began in "),r("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(" "),r("p",[e._v("You can learn the complete release history at "),r("a",{attrs:{href:"https://releases.chevereto.com",target:"_blank",rel:"noopener noreferrer"}},[e._v("releases.chevereto.com"),r("OutboundLink")],1)])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/56.4509d09b.js b/assets/js/56.4509d09b.js new file mode 100644 index 00000000..6eef9034 --- /dev/null +++ b/assets/js/56.4509d09b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{514:function(t,a,e){"use strict";e.r(a);var n=e(68),r=Object(n.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"admin-manual"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#admin-manual"}},[t._v("#")]),t._v(" Admin manual")]),t._v(" "),e("p",[t._v("The Chevereto's admin manual provides instructions on how to use the software for system administrators.")]),t._v(" "),e("h2",{attrs:{id:"link"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#link"}},[t._v("#")]),t._v(" Link")]),t._v(" "),e("p",[t._v("👉 Admin's manual can be found at "),e("a",{attrs:{href:"https://v4-admin.chevereto.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("v4-admin.chevereto.com"),e("OutboundLink")],1)])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/57.2211c258.js b/assets/js/57.2211c258.js new file mode 100644 index 00000000..532d7f44 --- /dev/null +++ b/assets/js/57.2211c258.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{513:function(e,t,r){"use strict";r.r(t);var s=r(68),a=Object(s.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"user-manual"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#user-manual"}},[e._v("#")]),e._v(" User manual")]),e._v(" "),r("p",[e._v("The Chevereto's user manual provides instructions on how to use the software for end-users.")]),e._v(" "),r("h2",{attrs:{id:"link"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#link"}},[e._v("#")]),e._v(" Link")]),e._v(" "),r("p",[e._v("User's manual can be found at "),r("a",{attrs:{href:"https://v4-user.chevereto.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("v4-user.chevereto.com"),r("OutboundLink")],1)])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/58.aac804c0.js b/assets/js/58.aac804c0.js new file mode 100644 index 00000000..4d37cf64 --- /dev/null +++ b/assets/js/58.aac804c0.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[58],{459: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/6.f09342d1.js b/assets/js/6.f09342d1.js new file mode 100644 index 00000000..1ae222b3 --- /dev/null +++ b/assets/js/6.f09342d1.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{431:function(e,t,a){e.exports=a.p+"assets/img/files.4aa4878b.png"},432:function(e,t,a){e.exports=a.p+"assets/img/file-manager-extract.72bea043.png"},433:function(e,t,a){e.exports=a.p+"assets/img/file-manager-extract-files.0ef60e09.png"},491:function(e,t,a){"use strict";a.r(t);var i=a(68),o=Object(i.a)({},(function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[i("h1",{attrs:{id:"cpanel-app-files"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#cpanel-app-files"}},[e._v("#")]),e._v(" cPanel App files")]),e._v(" "),i("h2",{attrs:{id:"installing-chevereto"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#installing-chevereto"}},[e._v("#")]),e._v(" Installing Chevereto")]),e._v(" "),i("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(" "),i("ul",[i("li",[e._v("Go to "),i("strong",[e._v("File Manager")]),e._v(" under "),i("strong",[e._v("Files")])])]),e._v(" "),i("p",[i("img",{attrs:{src:a(431),alt:"Files"}})]),e._v(" "),i("ul",[i("li",[e._v("Navigate to your home "),i("code",[e._v("/home/user/")]),e._v(" home directory")]),e._v(" "),i("li",[e._v("Click on "),i("strong",[e._v("Upload")]),e._v(" and on "),i("strong",[e._v("Select File")])]),e._v(" "),i("li",[e._v("Upload the release zip file that you downloaded following "),i("RouterLink",{attrs:{to:"/application/installing/installation.html#using-release-package"}},[e._v("using release package")]),e._v(" instructions")],1),e._v(" "),i("li",[e._v("Once uploaded, go back to the file manager at "),i("code",[e._v("/home/user/")]),e._v(" directory")]),e._v(" "),i("li",[e._v("Right-click on the zip file file and select "),i("strong",[e._v("Extract")])])]),e._v(" "),i("p",[i("img",{attrs:{src:a(432),alt:"File Manager Extract"}})]),e._v(" "),i("ul",[i("li",[e._v("A prompt appears, enter path "),i("code",[e._v("/public_html")]),e._v(" and click on "),i("strong",[e._v("Extract Files")])])]),e._v(" "),i("p",[e._v("You can customize "),i("code",[e._v("/public_html")]),e._v(" to reflect the path for your configured website.")]),e._v(" "),i("p",[i("img",{attrs:{src:a(433),alt:"File Manager Extract Files"}})]),e._v(" "),i("ul",[i("li",[e._v("If you are installing Chevereto for the first time you can continue with "),i("RouterLink",{attrs:{to:"/application/installing/installation.html#setup"}},[e._v("Setup")]),e._v(".")],1)]),e._v(" "),i("h2",{attrs:{id:"updating-chevereto"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#updating-chevereto"}},[e._v("#")]),e._v(" Updating Chevereto")]),e._v(" "),i("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(" "),i("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/7.d845ccec.js b/assets/js/7.d845ccec.js new file mode 100644 index 00000000..4b735d55 --- /dev/null +++ b/assets/js/7.d845ccec.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{434:function(a,t,e){a.exports=e.p+"assets/img/databases.f4d298e3.png"},435:function(a,t,e){a.exports=e.p+"assets/img/mysql-wizard-create-database.e64fa0ed.png"},436:function(a,t,e){a.exports=e.p+"assets/img/mysql-wizard-privileges.0eee95f6.png"},492:function(a,t,e){"use strict";e.r(t);var s=e(68),r=Object(s.a)({},(function(){var a=this,t=a.$createElement,s=a._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h1",{attrs:{id:"cpanel-database"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#cpanel-database"}},[a._v("#")]),a._v(" cPanel Database")]),a._v(" "),s("h2",{attrs:{id:"creating-a-database"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-database"}},[a._v("#")]),a._v(" Creating a database")]),a._v(" "),s("ul",[s("li",[a._v("Go to the "),s("strong",[a._v("MySQL Database Wizard")]),a._v(" under "),s("strong",[a._v("Databases")]),a._v(". Follow the process to create a database and its user.")])]),a._v(" "),s("p",[s("img",{attrs:{src:e(434),alt:"databases"}})]),a._v(" "),s("ul",[s("li",[a._v("Take note on the MySQL "),s("strong",[a._v("database name")]),a._v(", "),s("strong",[a._v("username")]),a._v(" and "),s("strong",[a._v("password")]),a._v(".")])]),a._v(" "),s("p",[s("img",{attrs:{src:e(435),alt:"MySQL wizard create"}})]),a._v(" "),s("ul",[s("li",[a._v("Grant "),s("code",[a._v("ALL PRIVILEGES")]),a._v(" on the newly created database and user.")])]),a._v(" "),s("p",[s("img",{attrs:{src:e(436),alt:"MySQL wizard privileges"}})])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/8.c093f6f5.js b/assets/js/8.c093f6f5.js new file mode 100644 index 00000000..b15aa6e1 --- /dev/null +++ b/assets/js/8.c093f6f5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{446:function(a,t,s){a.exports=s.p+"assets/img/databases.5d9cf5ab.png"},447:function(a,t,s){a.exports=s.p+"assets/img/databases-add.48f8f471.png"},448:function(a,t,s){a.exports=s.p+"assets/img/databases-done.a0441970.png"},501:function(a,t,s){"use strict";s.r(t);var e=s(68),r=Object(e.a)({},(function(){var a=this,t=a.$createElement,e=a._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"plesk-database"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#plesk-database"}},[a._v("#")]),a._v(" Plesk Database")]),a._v(" "),e("h2",{attrs:{id:"creating-a-database"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-database"}},[a._v("#")]),a._v(" Creating a database")]),a._v(" "),e("ul",[e("li",[a._v("Go to "),e("strong",[a._v("Databases")])])]),a._v(" "),e("p",[e("img",{attrs:{src:s(446),alt:"Databases"}})]),a._v(" "),e("ul",[e("li",[a._v("Click on "),e("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(" "),e("p",[e("img",{attrs:{src:s(447),alt:"Databases Add"}})]),a._v(" "),e("ul",[e("li",[a._v("Take note on the MySQL "),e("strong",[a._v("database name")]),a._v(", "),e("strong",[a._v("username")]),a._v(" and "),e("strong",[a._v("password")]),a._v(".")])]),a._v(" "),e("p",[e("img",{attrs:{src:s(448),alt:"Databases done"}})])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/9.090ea5c0.js b/assets/js/9.090ea5c0.js new file mode 100644 index 00000000..f17d9eeb --- /dev/null +++ b/assets/js/9.090ea5c0.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{403:function(t,e,n){},458:function(t,e,n){"use strict";n(403)},461:function(t,e,n){"use strict";n.r(e);var o=n(45),u=n(0),a={"/":{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"}},s={name:"SWUpdatePopup",data:function(){return{rawPopupConfig:!0,updateEvent:null}},computed:{popupConfig:function(){return Object(u.g)(this,this.rawPopupConfig)},enabled:function(){return Boolean(this.popupConfig&&this.updateEvent)},message:function(){var t=this.popupConfig;return t&&t.message||a["/"].message},buttonText:function(){var t=this.popupConfig;return t&&t.buttonText||a["/"].buttonText}},created:function(){o.a.$on("sw-updated",this.onSWUpdated),this.rawPopupConfig=a},methods:{onSWUpdated:function(t){this.updateEvent=t},reload:function(){this.updateEvent&&(this.updateEvent.skipWaiting().then((function(){location.reload(!0)})),this.updateEvent=null)}}},i=(n(458),n(68)),p=Object(i.a)(s,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("transition",{attrs:{name:"sw-update-popup"}},[t._t("default",(function(){return[t.enabled?n("div",{staticClass:"sw-update-popup"},[t._v("\n "+t._s(t.message)+"\n\n "),n("br"),t._v(" "),n("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=p.exports}}]); \ No newline at end of file diff --git a/assets/js/app.f660ad3d.js b/assets/js/app.f660ad3d.js new file mode 100644 index 00000000..822eff41 --- /dev/null +++ b/assets/js/app.f660ad3d.js @@ -0,0 +1,15 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,u=e[0],c=e[1],s=e[2],f=0,p=[];f=0&&Math.floor(e)===e&&isFinite(t)}function d(t){return i(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function h(t){return null==t?"":Array.isArray(t)||l(t)&&t.toString===s?JSON.stringify(t,null,2):String(t)}function v(t){var e=parseFloat(t);return isNaN(e)?t:e}function g(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(n,1)}}var b=Object.prototype.hasOwnProperty;function w(t,e){return b.call(t,e)}function x(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var _=/-(\w)/g,k=x((function(t){return t.replace(_,(function(t,e){return e?e.toUpperCase():""}))})),O=x((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),E=/\B([A-Z])/g,j=x((function(t){return t.replace(E,"-$1").toLowerCase()}));var S=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function C(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function P(t,e){for(var n in e)t[n]=e[n];return t}function A(t){for(var e={},n=0;n0,J=K&&K.indexOf("edge/")>0,Z=(K&&K.indexOf("android"),K&&/iphone|ipad|ipod|ios/.test(K)||"ios"===G),Q=(K&&/chrome\/\d+/.test(K),K&&/phantomjs/.test(K),K&&K.match(/firefox\/(\d+)/)),tt={}.watch,et=!1;if(q)try{var nt={};Object.defineProperty(nt,"passive",{get:function(){et=!0}}),window.addEventListener("test-passive",null,nt)}catch(t){}var rt=function(){return void 0===B&&(B=!q&&!W&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),B},ot=q&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function it(t){return"function"==typeof t&&/native code/.test(t.toString())}var at,ut="undefined"!=typeof Symbol&&it(Symbol)&&"undefined"!=typeof Reflect&&it(Reflect.ownKeys);at="undefined"!=typeof Set&&it(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ct=$,st=0,lt=function(){this.id=st++,this.subs=[]};lt.prototype.addSub=function(t){this.subs.push(t)},lt.prototype.removeSub=function(t){y(this.subs,t)},lt.prototype.depend=function(){lt.target&<.target.addDep(this)},lt.prototype.notify=function(){var t=this.subs.slice();for(var e=0,n=t.length;e-1)if(i&&!w(o,"default"))a=!1;else if(""===a||a===j(t)){var c=Ht(String,o.type);(c<0||u0&&(fe((c=t(c,(n||"")+"_"+r))[0])&&fe(l)&&(f[s]=mt(l.text+c[0].text),c.shift()),f.push.apply(f,c)):u(c)?fe(l)?f[s]=mt(l.text+c):""!==c&&f.push(mt(c)):fe(c)&&fe(l)?f[s]=mt(l.text+c.text):(a(e._isVList)&&i(c.tag)&&o(c.key)&&i(n)&&(c.key="__vlist"+n+"_"+r+"__"),f.push(c)));return f}(t):void 0}function fe(t){return i(t)&&i(t.text)&&!1===t.isComment}function pe(t,e){if(t){for(var n=Object.create(null),r=ut?Reflect.ownKeys(t):Object.keys(t),o=0;o0,a=t?!!t.$stable:!i,u=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&n&&n!==r&&u===n.$key&&!i&&!n.$hasNormal)return n;for(var c in o={},t)t[c]&&"$"!==c[0]&&(o[c]=me(e,c,t[c]))}else o={};for(var s in e)s in o||(o[s]=ye(e,s));return t&&Object.isExtensible(t)&&(t._normalized=o),U(o,"$stable",a),U(o,"$key",u),U(o,"$hasNormal",i),o}function me(t,e,n){var r=function(){var t=arguments.length?n.apply(null,arguments):n({}),e=(t=t&&"object"==typeof t&&!Array.isArray(t)?[t]:le(t))&&t[0];return t&&(!e||1===t.length&&e.isComment&&!ve(e))?void 0:t};return n.proxy&&Object.defineProperty(t,e,{get:r,enumerable:!0,configurable:!0}),r}function ye(t,e){return function(){return t[e]}}function be(t,e){var n,r,o,a,u;if(Array.isArray(t)||"string"==typeof t)for(n=new Array(t.length),r=0,o=t.length;rdocument.createEvent("Event").timeStamp&&(sn=function(){return ln.now()})}function fn(){var t,e;for(cn=sn(),an=!0,en.sort((function(t,e){return t.id-e.id})),un=0;unun&&en[n].id>t.id;)n--;en.splice(n+1,0,t)}else en.push(t);on||(on=!0,ne(fn))}}(this)},dn.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||c(t)||this.deep){var e=this.value;if(this.value=t,this.user){var n='callback for watcher "'+this.expression+'"';Vt(this.cb,this.vm,[t,e],this.vm,n)}else this.cb.call(this.vm,t,e)}}},dn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},dn.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},dn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||y(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var hn={enumerable:!0,configurable:!0,get:$,set:$};function vn(t,e,n){hn.get=function(){return this[e][n]},hn.set=function(t){this[e][n]=t},Object.defineProperty(t,n,hn)}function gn(t){t._watchers=[];var e=t.$options;e.props&&function(t,e){var n=t.$options.propsData||{},r=t._props={},o=t.$options._propKeys=[];t.$parent&&kt(!1);var i=function(i){o.push(i);var a=Dt(i,e,n,t);jt(r,i,a),i in t||vn(t,"_props",i)};for(var a in e)i(a);kt(!0)}(t,e.props),e.methods&&function(t,e){t.$options.props;for(var n in e)t[n]="function"!=typeof e[n]?$:S(e[n],t)}(t,e.methods),e.data?function(t){var e=t.$options.data;l(e=t._data="function"==typeof e?function(t,e){pt();try{return t.call(e,e)}catch(t){return Bt(t,e,"data()"),{}}finally{dt()}}(e,t):e||{})||(e={});var n=Object.keys(e),r=t.$options.props,o=(t.$options.methods,n.length);for(;o--;){var i=n[o];0,r&&w(r,i)||(a=void 0,36!==(a=(i+"").charCodeAt(0))&&95!==a&&vn(t,"_data",i))}var a;Et(e,!0)}(t):Et(t._data={},!0),e.computed&&function(t,e){var n=t._computedWatchers=Object.create(null),r=rt();for(var o in e){var i=e[o],a="function"==typeof i?i:i.get;0,r||(n[o]=new dn(t,a||$,$,mn)),o in t||yn(t,o,i)}}(t,e.computed),e.watch&&e.watch!==tt&&function(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var o=0;o-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!f(t)&&t.test(e)}function Cn(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var u=a.name;u&&!e(u)&&Pn(n,i,r,o)}}}function Pn(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,y(n,e)}!function(t){t.prototype._init=function(t){var e=this;e._uid=_n++,e._isVue=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=zt(kn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Xe(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,o=n&&n.context;t.$slots=de(e._renderChildren,o),t.$scopedSlots=r,t._c=function(e,n,r,o){return Ue(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return Ue(t,e,n,r,o,!0)};var i=n&&n.data;jt(t,"$attrs",i&&i.attrs||r,null,!0),jt(t,"$listeners",e._parentListeners||r,null,!0)}(e),tn(e,"beforeCreate"),function(t){var e=pe(t.$options.inject,t);e&&(kt(!1),Object.keys(e).forEach((function(n){jt(t,n,e[n])})),kt(!0))}(e),gn(e),function(t){var e=t.$options.provide;e&&(t._provided="function"==typeof e?e.call(t):e)}(e),tn(e,"created"),e.$options.el&&e.$mount(e.$options.el)}}(On),function(t){var e={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=St,t.prototype.$delete=Ct,t.prototype.$watch=function(t,e,n){if(l(e))return xn(this,t,e,n);(n=n||{}).user=!0;var r=new dn(this,t,e,n);if(n.immediate){var o='callback for immediate watcher "'+r.expression+'"';pt(),Vt(e,this,[r.value],this,o),dt()}return function(){r.teardown()}}}(On),function(t){var e=/^hook:/;t.prototype.$on=function(t,n){var r=this;if(Array.isArray(t))for(var o=0,i=t.length;o1?C(n):n;for(var r=C(arguments,1),o='event handler for "'+t+'"',i=0,a=n.length;iparseInt(this.max)&&Pn(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Pn(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Cn(t,(function(t){return Sn(e,t)}))})),this.$watch("exclude",(function(e){Cn(t,(function(t){return!Sn(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=qe(t),n=e&&e.componentOptions;if(n){var r=jn(n),o=this.include,i=this.exclude;if(o&&(!r||!Sn(o,r))||i&&r&&Sn(i,r))return e;var a=this.cache,u=this.keys,c=null==e.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):e.key;a[c]?(e.componentInstance=a[c].componentInstance,y(u,c),u.push(c)):(this.vnodeToCache=e,this.keyToCache=c),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return N}};Object.defineProperty(t,"config",e),t.util={warn:ct,extend:P,mergeOptions:zt,defineReactive:jt},t.set=St,t.delete=Ct,t.nextTick=ne,t.observable=function(t){return Et(t),t},t.options=Object.create(null),M.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,P(t.options.components,$n),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=C(arguments,1);return n.unshift(this),"function"==typeof t.install?t.install.apply(t,n):"function"==typeof t&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=zt(this.options,t),this}}(t),En(t),function(t){M.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&l(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"==typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(On),Object.defineProperty(On.prototype,"$isServer",{get:rt}),Object.defineProperty(On.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(On,"FunctionalRenderContext",{value:Re}),On.version="2.6.14";var Tn=g("style,class"),Ln=g("input,textarea,option,select,progress"),Rn=g("contenteditable,draggable,spellcheck"),In=g("events,caret,typing,plaintext-only"),zn=g("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"),Mn="http://www.w3.org/1999/xlink",Dn=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},Nn=function(t){return Dn(t)?t.slice(6,t.length):""},Fn=function(t){return null==t||!1===t};function Un(t){for(var e=t.data,n=t,r=t;i(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=Hn(r.data,e));for(;i(n=n.parent);)n&&n.data&&(e=Hn(e,n.data));return function(t,e){if(i(t)||i(e))return Bn(t,Vn(e));return""}(e.staticClass,e.class)}function Hn(t,e){return{staticClass:Bn(t.staticClass,e.staticClass),class:i(t.class)?[t.class,e.class]:e.class}}function Bn(t,e){return t?e?t+" "+e:t:e||""}function Vn(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r-1?dr(t,e,n):zn(e)?Fn(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):Rn(e)?t.setAttribute(e,function(t,e){return Fn(e)||"false"===e?"false":"contenteditable"===t&&In(e)?e:"true"}(e,n)):Dn(e)?Fn(n)?t.removeAttributeNS(Mn,Nn(e)):t.setAttributeNS(Mn,e,n):dr(t,e,n)}function dr(t,e,n){if(Fn(n))t.removeAttribute(e);else{if(X&&!Y&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var hr={create:fr,update:fr};function vr(t,e){var n=e.elm,r=e.data,a=t.data;if(!(o(r.staticClass)&&o(r.class)&&(o(a)||o(a.staticClass)&&o(a.class)))){var u=Un(e),c=n._transitionClasses;i(c)&&(u=Bn(u,Vn(c))),u!==n._prevClass&&(n.setAttribute("class",u),n._prevClass=u)}}var gr,mr={create:vr,update:vr};function yr(t,e,n){var r=gr;return function o(){var i=e.apply(null,arguments);null!==i&&xr(t,o,n,r)}}var br=Kt&&!(Q&&Number(Q[1])<=53);function wr(t,e,n,r){if(br){var o=cn,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}gr.addEventListener(t,e,et?{capture:n,passive:r}:n)}function xr(t,e,n,r){(r||gr).removeEventListener(t,e._wrapper||e,n)}function _r(t,e){if(!o(t.data.on)||!o(e.data.on)){var n=e.data.on||{},r=t.data.on||{};gr=e.elm,function(t){if(i(t.__r)){var e=X?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}i(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),ue(n,r,wr,xr,yr,e.context),gr=void 0}}var kr,Or={create:_r,update:_r};function Er(t,e){if(!o(t.data.domProps)||!o(e.data.domProps)){var n,r,a=e.elm,u=t.data.domProps||{},c=e.data.domProps||{};for(n in i(c.__ob__)&&(c=e.data.domProps=P({},c)),u)n in c||(a[n]="");for(n in c){if(r=c[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===u[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n&&"PROGRESS"!==a.tagName){a._value=r;var s=o(r)?"":String(r);jr(a,s)&&(a.value=s)}else if("innerHTML"===n&&Gn(a.tagName)&&o(a.innerHTML)){(kr=kr||document.createElement("div")).innerHTML=""+r+"";for(var l=kr.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(r!==u[n])try{a[n]=r}catch(t){}}}}function jr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(i(r)){if(r.number)return v(n)!==v(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Sr={create:Er,update:Er},Cr=x((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Pr(t){var e=Ar(t.style);return t.staticStyle?P(t.staticStyle,e):e}function Ar(t){return Array.isArray(t)?A(t):"string"==typeof t?Cr(t):t}var $r,Tr=/^--/,Lr=/\s*!important$/,Rr=function(t,e,n){if(Tr.test(e))t.style.setProperty(e,n);else if(Lr.test(n))t.style.setProperty(j(e),n.replace(Lr,""),"important");else{var r=zr(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(Nr).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function Ur(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Nr).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" "+(t.getAttribute("class")||"")+" ",r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function Hr(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&P(e,Br(t.name||"v")),P(e,t),e}return"string"==typeof t?Br(t):void 0}}var Br=x((function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}})),Vr=q&&!Y,qr="transition",Wr="transitionend",Gr="animation",Kr="animationend";Vr&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(qr="WebkitTransition",Wr="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Gr="WebkitAnimation",Kr="webkitAnimationEnd"));var Xr=q?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Yr(t){Xr((function(){Xr(t)}))}function Jr(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),Fr(t,e))}function Zr(t,e){t._transitionClasses&&y(t._transitionClasses,e),Ur(t,e)}function Qr(t,e,n){var r=eo(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var u="transition"===o?Wr:Kr,c=0,s=function(){t.removeEventListener(u,l),n()},l=function(e){e.target===t&&++c>=a&&s()};setTimeout((function(){c0&&(n="transition",l=a,f=i.length):"animation"===e?s>0&&(n="animation",l=s,f=c.length):f=(n=(l=Math.max(a,s))>0?a>s?"transition":"animation":null)?"transition"===n?i.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:"transition"===n&&to.test(r[qr+"Property"])}}function no(t,e){for(;t.length1}function co(t,e){!0!==e.data.show&&oo(e)}var so=function(t){var e,n,r={},c=t.modules,s=t.nodeOps;for(e=0;eh?b(t,o(n[m+1])?null:n[m+1].elm,n,d,m,r):d>m&&x(e,p,h)}(p,g,m,n,l):i(m)?(i(t.text)&&s.setTextContent(p,""),b(p,null,m,0,m.length-1,n)):i(g)?x(g,0,g.length-1):i(t.text)&&s.setTextContent(p,""):t.text!==e.text&&s.setTextContent(p,e.text),i(h)&&i(d=h.hook)&&i(d=d.postpatch)&&d(t,e)}}}function E(t,e,n){if(a(n)&&i(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(R(vo(a),r))return void(t.selectedIndex!==u&&(t.selectedIndex=u));o||(t.selectedIndex=-1)}}function ho(t,e){return e.every((function(e){return!R(e,t)}))}function vo(t){return"_value"in t?t._value:t.value}function go(t){t.target.composing=!0}function mo(t){t.target.composing&&(t.target.composing=!1,yo(t.target,"input"))}function yo(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function bo(t){return!t.componentInstance||t.data&&t.data.transition?t:bo(t.componentInstance._vnode)}var wo={model:lo,show:{bind:function(t,e,n){var r=e.value,o=(n=bo(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,oo(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=bo(n)).data&&n.data.transition?(n.data.show=!0,r?oo(n,(function(){t.style.display=t.__vOriginalDisplay})):io(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}}},xo={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 _o(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?_o(qe(e.children)):t}function ko(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var i in o)e[k(i)]=o[i];return e}function Oo(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Eo=function(t){return t.tag||ve(t)},jo=function(t){return"show"===t.name},So={name:"transition",props:xo,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Eo)).length){0;var r=this.mode;0;var o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var i=_o(o);if(!i)return o;if(this._leaving)return Oo(t,o);var a="__transition-"+this._uid+"-";i.key=null==i.key?i.isComment?a+"comment":a+i.tag:u(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var c=(i.data||(i.data={})).transition=ko(this),s=this._vnode,l=_o(s);if(i.data.directives&&i.data.directives.some(jo)&&(i.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(i,l)&&!ve(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=P({},c);if("out-in"===r)return this._leaving=!0,ce(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Oo(t,o);if("in-out"===r){if(ve(i))return s;var p,d=function(){p()};ce(c,"afterEnter",d),ce(c,"enterCancelled",d),ce(f,"delayLeave",(function(t){p=t}))}}return o}}},Co=P({tag:String,moveClass:String},xo);function Po(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Ao(t){t.data.newPos=t.elm.getBoundingClientRect()}function $o(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate("+r+"px,"+o+"px)",i.transitionDuration="0s"}}delete Co.mode;var To={Transition:So,TransitionGroup:{props:Co,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Je(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=ko(this),u=0;u-1?Xn[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Xn[t]=/HTMLUnknownElement/.test(e.toString())},P(On.options.directives,wo),P(On.options.components,To),On.prototype.__patch__=q?so:$,On.prototype.$mount=function(t,e){return function(t,e,n){var r;return t.$el=e,t.$options.render||(t.$options.render=gt),tn(t,"beforeMount"),r=function(){t._update(t._render(),n)},new dn(t,r,$,{before:function(){t._isMounted&&!t._isDestroyed&&tn(t,"beforeUpdate")}},!0),n=!1,null==t.$vnode&&(t._isMounted=!0,tn(t,"mounted")),t}(this,t=t&&q?function(t){if("string"==typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}(t):void 0,e)},q&&setTimeout((function(){N.devtools&&ot&&ot.emit("init",On)}),0),e.a=On},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var r=n(50),o=Function.prototype,i=o.bind,a=o.call,u=r&&i.bind(a,a);t.exports=r?function(t){return t&&u(t)}:function(t){return t&&function(){return a.apply(t,arguments)}}},function(t,e){t.exports=function(t){return"function"==typeof t}},function(t,e,n){var r=n(1),o=n(40),i=n(12),a=n(71),u=n(41),c=n(136),s=o("wks"),l=r.Symbol,f=l&&l.for,p=c?l:l&&l.withoutSetter||a;t.exports=function(t){if(!i(s,t)||!u&&"string"!=typeof s[t]){var e="Symbol."+t;u&&i(l,t)?s[t]=l[t]:s[t]=c&&f?f(e):p(e)}return s[t]}},function(t,e,n){var r=n(50),o=Function.prototype.call;t.exports=r?o.bind(o):function(){return o.apply(o,arguments)}},function(t,e,n){var r=n(6);t.exports=function(t){return"object"==typeof t?null!==t:r(t)}},function(t,e,n){var r=n(108),o=n(17),i=n(245);r||o(Object.prototype,"toString",i,{unsafe:!0})},function(t,e,n){var r=n(4);t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,e,n){var r=n(5),o=n(18),i=r({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return i(o(t),e)}},function(t,e,n){var r=n(1),o=n(9),i=r.String,a=r.TypeError;t.exports=function(t){if(o(t))return t;throw a(i(t)+" is not an object")}},function(t,e,n){var r=n(1),o=n(11),i=n(139),a=n(138),u=n(13),c=n(73),s=r.TypeError,l=Object.defineProperty,f=Object.getOwnPropertyDescriptor;e.f=o?a?function(t,e,n){if(u(t),e=c(e),u(n),"function"==typeof t&&"prototype"===e&&"value"in n&&"writable"in n&&!n.writable){var r=f(t,e);r&&r.writable&&(t[e]=n.value,n={configurable:"configurable"in n?n.configurable:r.configurable,enumerable:"enumerable"in n?n.enumerable:r.enumerable,writable:!1})}return l(t,e,n)}:l:function(t,e,n){if(u(t),e=c(e),u(n),i)try{return l(t,e,n)}catch(t){}if("get"in n||"set"in n)throw s("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(1),o=n(6),i=function(t){return o(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?i(r[t]):r[t]&&r[t][e]}},function(t,e){t.exports=!1},function(t,e,n){var r=n(1),o=n(6),i=n(22),a=n(210),u=n(101);t.exports=function(t,e,n,c){var s=!!c&&!!c.unsafe,l=!!c&&!!c.enumerable,f=!!c&&!!c.noTargetGet,p=c&&void 0!==c.name?c.name:e;return o(n)&&a(n,p,c),t===r?(l?t[e]=n:u(e,n),t):(s?!f&&t[e]&&(l=!0):delete t[e],l?t[e]=n:i(t,e,n),t)}},function(t,e,n){var r=n(1),o=n(34),i=r.Object;t.exports=function(t){return i(o(t))}},function(t,e,n){var r=n(1),o=n(82),i=r.String;t.exports=function(t){if("Symbol"===o(t))throw TypeError("Cannot convert a Symbol value to a string");return i(t)}},function(t,e,n){var r=n(49),o=n(34);t.exports=function(t){return r(o(t))}},function(t,e,n){"use strict";var r=n(157).charAt,o=n(19),i=n(35),a=n(142),u=i.set,c=i.getterFor("String Iterator");a(String,"String",(function(t){u(this,{type:"String Iterator",string:o(t),index:0})}),(function(){var t,e=c(this),n=e.string,o=e.index;return o>=n.length?{value:void 0,done:!0}:(t=r(n,o),e.index+=t.length,{value:t,done:!1})}))},function(t,e,n){var r=n(11),o=n(14),i=n(42);t.exports=r?function(t,e,n){return o.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){var r=n(1),o=n(6),i=n(53),a=r.TypeError;t.exports=function(t){if(o(t))return t;throw a(i(t)+" is not a function")}},function(t,e,n){var r=n(1),o=n(158),i=n(159),a=n(135),u=n(22),c=n(7),s=c("iterator"),l=c("toStringTag"),f=a.values,p=function(t,e){if(t){if(t[s]!==f)try{u(t,s,f)}catch(e){t[s]=f}if(t[l]||u(t,l,e),o[e])for(var n in a)if(t[n]!==a[n])try{u(t,n,a[n])}catch(e){t[n]=a[n]}}};for(var d in o)p(r[d]&&r[d].prototype,d);p(i,"DOMTokenList")},function(t,e,n){var r=n(173),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();t.exports=i},function(t,e,n){var r=n(5),o=r({}.toString),i=r("".slice);t.exports=function(t){return i(o(t),8,-1)}},function(t,e,n){var r,o=n(13),i=n(137),a=n(104),u=n(54),c=n(141),s=n(72),l=n(77),f=l("IE_PROTO"),p=function(){},d=function(t){return" + + + + + + + + + + + + +

# API Version 1.1

Chevereto API enables programmatic file uploads, allowing you to seamlessly integrate our uploading functionality into your own applications.

# Key

API V1.1 works with an user key which is available for each user at /settings/api.

Admin user can set the public API key for guest uploads at the Dashboard panel (opens new window).

# Request method

API V1 calls can be made using POST or GET request methods.

POST request method is recommended.

# Request URL

http://mysite.com/api/1/upload
+

# Authorization

API V1.1 supports header authorization by passing the X-API-Key header with an API key.

X-API-Key: chv_key_here
+

# Parameters

# source

A binary file, base64 data, or a URL for an image.

# key (optional)

The API key. You can use this parameter if unable to provide auth via headers.

# title (optional)

File title. This is automatically detected from metadata if not provided.

# description (optional)

File description. This is automatically detected from metadata if not provided.

# tags (optional)

File tag(s). Comma separated list of tags.

# album_id (optional)

File album id, must be owned by the API key user.

# category_id (optional)

Category id. Determines the file category to assign.

# width (optional)

Target resize width, will automatic detect height.

# expiration (optional)

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.

# nsfw (optional)

Not safe for work flag [0, 1].

# format (optional)

Return format [json, redirect, txt].

# Example call

curl --fail-with-body -X POST \
+  -H "X-API-Key: $key" \
+  -H "Content-Type: multipart/form-data" \
+  -F "source=@image.jpeg" \
+  http://mysite.com/api/1/upload
+

# API response

API V1 responses will vary depending on the format parameter:

Format Output
json Image upload info in JSON format (default)
txt Image direct URL in text/plain format
redirect Redirects to the image viewer URL

When using JSON the response output will contain the status_txt and status_code properties.

# Example response (JSON)

{
+  "status_code": 200,
+  "success": {
+    "message": "file uploaded",
+    "code": 200
+  },
+  "image": {
+    "name": "Badgers-animated-music-video",
+    "extension": "mp4",
+    "size": 3011299,
+    "width": 496,
+    "height": 360,
+    "date": "2024-10-10 16:58:00",
+    "date_gmt": "2024-10-10 19:58:00",
+    "title": "Badgers animated music video MrWeebl",
+    "tags": [],
+    "description": null,
+    "nsfw": 0,
+    "storage_mode": "datefolder",
+    "md5": "7a120d5c28de264bdbb934f023a628fd",
+    "source_md5": null,
+    "original_filename": "Badgers _ animated music video _ MrWeebl.mp4",
+    "original_exifdata": null,
+    "views": 0,
+    "category_id": null,
+    "chain": 21,
+    "thumb_size": 21212,
+    "medium_size": 0,
+    "frame_size": 19804,
+    "expiration_date_gmt": "2024-10-10 20:28:00",
+    "likes": 0,
+    "is_animated": 0,
+    "is_approved": 1,
+    "is_360": 0,
+    "duration": 73,
+    "type": "video",
+    "tags_string": "",
+    "file": {
+      "resource": {
+        "type": "url"
+      }
+    },
+    "id_encoded": "ZfGd",
+    "filename": "Badgers-animated-music-video.mp4",
+    "mime": "video/mp4",
+    "url": "http://localhost/images/2024/10/10/Badgers-animated-music-video.mp4",
+    "ratio": 1.3777777777777778,
+    "size_formatted": "3 MB",
+    "frame": {
+      "filename": "Badgers-animated-music-video.fr.jpeg",
+      "name": "Badgers-animated-music-video.fr",
+      "mime": "image/jpeg",
+      "extension": "jpeg",
+      "url": "http://localhost/images/2024/10/10/Badgers-animated-music-video.fr.jpeg",
+      "size": 19804
+    },
+    "image": {
+      "filename": "Badgers-animated-music-video.mp4",
+      "name": "Badgers-animated-music-video",
+      "mime": "video/mp4",
+      "extension": "mp4",
+      "url": "http://localhost/images/2024/10/10/Badgers-animated-music-video.mp4",
+      "size": 3011299
+    },
+    "thumb": {
+      "filename": "Badgers-animated-music-video.th.jpeg",
+      "name": "Badgers-animated-music-video.th",
+      "mime": "image/jpeg",
+      "extension": "jpeg",
+      "url": "http://localhost/images/2024/10/10/Badgers-animated-music-video.th.jpeg",
+      "size": 21212
+    },
+    "url_frame": "http://localhost/images/2024/10/10/Badgers-animated-music-video.fr.jpeg",
+    "medium": {
+      "filename": null,
+      "name": null,
+      "mime": null,
+      "extension": null,
+      "url": null
+    },
+    "duration_time": "01:13",
+    "url_viewer": "http://localhost/clip/Badgers-animated-music-video-MrWeebl.ZfGd",
+    "path_viewer": "/clip/Badgers-animated-music-video-MrWeebl.ZfGd",
+    "url_short": "http://localhost/clip/ZfGd",
+    "display_url": "http://localhost/images/2024/10/10/Badgers-animated-music-video.fr.jpeg",
+    "display_width": 496,
+    "display_height": 360,
+    "views_label": "views",
+    "likes_label": "likes",
+    "how_long_ago": "moments ago",
+    "date_fixed_peer": "2024-10-10 19:58:00",
+    "title_truncated": "Badgers animated music vi...",
+    "title_truncated_html": "Badgers animated music vi...",
+    "is_use_loader": false,
+    "display_title": "Badgers animated music video MrWeebl",
+    "delete_url": "http://localhost/clip/ZfGd/delete/e8b07479818bc58d3b9849c431e9c2b28827ccce7809ed4f"
+  },
+  "status_txt": "OK"
+}
+

# Example response (txt)

http://localhost/images/2024/10/10/Badgers-animated-music-video.mp4
+

# Example response (redirect)

Location: /clip/Badgers-animated-music-video-MrWeebl.ZfGd
+
+ + + diff --git a/developer/api/api-v4.html b/developer/api/api-v4.html new file mode 100644 index 00000000..e3af6e3a --- /dev/null +++ b/developer/api/api-v4.html @@ -0,0 +1,205 @@ + + + + + + API Version 4 | Chevereto V4 Docs + + + + + + + + + + + + + + + + + + + + diff --git a/developer/customization/language.html b/developer/customization/language.html new file mode 100644 index 00000000..5991f9bd --- /dev/null +++ b/developer/customization/language.html @@ -0,0 +1,219 @@ + + + + + + Language | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Language

Chevereto uses gettext for its translations and the system comes with a lot of languages built-in which you can find in the app/languages folder.

# Add new languages

# OneSky

If you want to add a new language we encourage you to apply to translation (opens new window), where you can easily contribute a new language which will get added to Chevereto distribution. OneSky features a complete suite for translations with no additional software required.

TIP

Translations contributed will get added to the software.

# Manually

Put your .po files at app/languages folder. Try copying an existing language and rename it to your language code. For example, to add a new language called es (Spanish) you would copy the en.po file and rename it to es.po.

WARNING

Considering using a .po editor software (opens new window) to create the translation file.

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.

# Customizing language strings

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.

The system works by overriding the target translation. For example, replacing Upload and share your media to "Upload, do it now!" by following this procedure:

# 1. Get the translation string (msgid and msgstr values)

  • Go to the app/languages folder
  • Open the file en.po (in this example we are overriding English language)
  • Find this text: Upload and share your media
  • Copy the msgid and the msgstr lines, you should get something like this:
msgid "Upload and share your media"
+msgstr ""
+

TIP

The property msgstr is empty because English is the base language. If you open any other language you will see that value actually translated.

# 2. Override translation string

  • Go to the app/languages/overrides folder (create it if it doesn't exist)
  • Create the file app/languages/overrides/en.po with these contents:
msgid "Upload and share your media"
+msgstr "Upload, do it now!"
+

You only need to replace msgstr because that is the translation string.

The result is that the system now will display Upload, do it now! instead of the default Upload and share your media and it will only affect en language.

WARNING

Note: 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 msgstr use \" (escaped double-quote).

# 3. Adding more overrides

You can add as many string overrides as you want, just make sure to follow the same structure. For example, to also override the Recent string your app/languages/overrides/en.po file should look like this:

msgid "Upload and share your media"
+msgstr "Upload, do it now!"
+
+msgid "Recent"
+msgstr "New!"
+

# Cache languages

In Chevereto the .po 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.

Run the langs command to cache language strings, including any override you have made.

app/bin/legacy -C langs
+

Default cache

Note: You need to re-cache your languages for every system update only if you have added new languages or overrides.

+ + + diff --git a/developer/customization/routes.html b/developer/customization/routes.html new file mode 100644 index 00000000..707e42eb --- /dev/null +++ b/developer/customization/routes.html @@ -0,0 +1,209 @@ + + + + + + Routes | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Routes

😪 Outdated docs - please check later.

Routes refers to virtual paths like /dashboard 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 /app/routes folder.

Custom routes are useful if you want to add things like your own API or you want to change how the default /image 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.

# Adding or overwriting routes

You can totally overwrite the default routes or add your own new routes safely. To do this simply do your work in the app/routes/overrides folder. You will need to look around the default routes to get used to it.

Feel free to do anything you want in the app/routes/overrides folder, your changes won't mess the default routes at all and you will keep your changes when you update the script.

Routes are a feature of G\ Library so you should check the G\ Library documentation (opens new window) for extended information about system routes.

+ + + diff --git a/developer/customization/theme.html b/developer/customization/theme.html new file mode 100644 index 00000000..784438bd --- /dev/null +++ b/developer/customization/theme.html @@ -0,0 +1,205 @@ + + + + + + Theme | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Theme

Chevereto's built-in theme is designed to offer a turn-key experience for users and you may customize it using several methods.

# Theme overrides

content/legacy/themes/Peafowl/overrides/

Theme overrides can be used to override any file in the theme.

Theme overrides works by detecting a file override which replaces a given theme file, so the system will use the override instead of the default file. Overrides are placed at content/legacy/themes/Peafowl/overrides/ directory and follow the same structure as the theme.

For example, let's say you want to replace content/legacy/themes/Peafowl/views/image.php. To do this copy the file to content/legacy/themes/Peafowl/overrides/views/image.php, make some changes and you will notice that the system now use the override instead of the default file.

# Custom hooks

content/legacy/themes/Peafowl/custom_hooks/

Custom hooks allows to add or edit code in designated areas or segments of the theme.

List of available custom hooks:

  • body_open.php
  • footer.php
  • head_after.php
  • head_open.php
  • head.php
  • header.php
  • share_links.php
  • style.css

For example, to customize the share buttons using custom hooks:

  • Go to the theme custom hooks folder at content/legacy/themes/Peafowl/custom_hooks/
  • Make a copy of share_links.sample.php (do all your editing needed in this copy)
  • Rename your working copy to share_links.php

Chevereto will detect your hooks and it will load these files.

# Clone default theme

If you need more customization you should clone the default "Peafowl" theme and do your work in this new theme.

To clone the default theme:

  • Copy content/legacy/themes/Peafowl/ and paste it in the same directory
  • Name your new theme as anything you want (no white spaces)

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.

+ + + diff --git a/developer/how-to/debug.html b/developer/how-to/debug.html new file mode 100644 index 00000000..440b0aaf --- /dev/null +++ b/developer/how-to/debug.html @@ -0,0 +1,222 @@ + + + + + + Debug | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Debug

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.

Once you enable debug you need to trigger the issue again, this will generate a log that will help you to understand what is going on.

# Debug with user interface

To debug errors go to Settings > System > Debug errors (opens new window) and enable "Debug errors". By enabling this Chevereto will debug errors to the screen (only to administrators).

# Debug with xrDebug

  • Run xrDebug built-in server:
cd app && vendor/bin/xrdebug
+
  • Enable xrDebug by configuring the CHEVERETO_ENABLE_XRDEBUG key.

# Debug with Docker

Replace CONTAINER with the container name.

Chevereto error log:

docker logs CONTAINER -f 1>/dev/null
+

Chevereto access log:

docker logs CONTAINER -f 2>/dev/null
+

# Debug with logging

Debug can be configured using environment variables to log to a file or device.

# Debug level

Note on debug levels

Error level >= 2 is not recommended for production environments. Is not safe to print the errors to the screen, handle it with care.

Level (N) Description
0 No debug
1 (default) Debug to log_device
2 Print errors (no logging)
3 Print errors and log to log_device

Use CHEVERETO_DEBUG_LEVEL=N to configure the debug level.

# Error log device

Use CHEVERETO_ERROR_LOG to customize where error log will be written.

Permissions

Double-check that the target log device is writable by the user running PHP.

# Debug (development)

To enable debug in development you can set the environment variable CHEVERETO_ENVIRONMENT to dev. Note: This variable is read from $_ENV (server context) not from app/env.php (Chevereto app).

CHEVERETO_ENVIRONMENT=dev
+

# Editing source

You can force error display by editing the source code. This will allow to debug early in the application bootstrapping process.

  • Open app/legacy/load/register-handlers.php
  • Change this:
$isDebug = isDebug();
+
  • To this:
//$isDebug = isDebug();
+$isDebug = true;
+

# Finding the logs

This vary depending the server provider and how PHP runs in the server. In doubt, always ask first to your system administrator.

  • Chevereto +
    • Logs by default at php://stderr
  • Docker +
    • Logs to /dev/stderr
  • xrDebug +
    • Streams the debug messages to the xrDebug session
  • Apache +
    • Logs by default at /var/log/apache2/error.log
    • Virtual host directive defines custom error log location
    • Commonly configured for /var/www/domain.com/logs
  • nginx +
    • Logs by default at /var/log/nginx/error.log
    • Server block defines custom error log location
    • Commonly configured for /var/www/domain.com/logs
  • cPanel +
    • Logs by default at ../domain.com.error.log (parent of public_html folder)
    • Vary a lot from providers and cPanel version

# I can't find the logs

You can configure CHEVERETO_DEBUG_LEVEL >= 2 but note that this error reporting level could compromise your installation. Restrict any public access to your website and revert to CHEVERETO_DEBUG_LEVEL=1 as soon as possible.

If you can't find the logs or you are having a hard time with this you can request Extra Support (opens new window) so we can safely debug your installation.

+ + + diff --git a/developer/how-to/repl.html b/developer/how-to/repl.html new file mode 100644 index 00000000..a4832137 --- /dev/null +++ b/developer/how-to/repl.html @@ -0,0 +1,221 @@ + + + + + + REPL | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# REPL

Chevereto supports Tinkewell (opens new window) and PsySH (opens new window), enabling to execute any set of instructions under the environment of a read–eval–print loop (opens new window) (REPL).

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 exploratory programming (opens new window).

Tinkerwell Chevereto

Sample code
use Chevereto\Legacy\Classes\DB;
+use Chevereto\Legacy\Classes\Login;
+
+$row = DB::get(table: 'users', values: 'all', limit: 1);
+$row = DB::formatRows($row);
+$row['name']; //?
+$row['website']; //?
+$row['bio']; //?
+
+$googleSecret = Login::getProviders('all')['google']['secret']; //?
+$enabledProviders = Login::getProviders('enabled');
+

# Using PsySH

PsySH comes included with Chevereto V4, run the following command to start the REPL environment.

app/bin/repl
+

# Using Tinkerwell

To use Tinkerwell with Chevereto configure the PHP binary and open/connect your Chevereto installation.

+ + + diff --git a/developer/how-to/troubleshoot.html b/developer/how-to/troubleshoot.html new file mode 100644 index 00000000..6f118ea0 --- /dev/null +++ b/developer/how-to/troubleshoot.html @@ -0,0 +1,209 @@ + + + + + + Troubleshoot | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Troubleshoot

Having issues? Check the troubleshoot for well-known issues.

If that didn't help it will be required to debug the system.

# Getting help

Get help at chevereto.com/support (opens new window)

+ + + diff --git a/guides/cpanel/app-files.html b/guides/cpanel/app-files.html new file mode 100644 index 00000000..3bf0f236 --- /dev/null +++ b/guides/cpanel/app-files.html @@ -0,0 +1,209 @@ + + + + + + cPanel App files | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# cPanel App files

# Installing Chevereto

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.

  • Go to File Manager under Files

Files

  • Navigate to your home /home/user/ home directory
  • Click on Upload and on Select File
  • Upload the release zip file that you downloaded following using release package instructions
  • Once uploaded, go back to the file manager at /home/user/ directory
  • Right-click on the zip file file and select Extract

File Manager Extract

  • A prompt appears, enter path /public_html and click on Extract Files

You can customize /public_html to reflect the path for your configured website.

File Manager Extract Files

  • If you are installing Chevereto for the first time you can continue with Setup.

# Updating Chevereto

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.

If you made modifications to the software you may want to review these changes before.

+ + + diff --git a/guides/cpanel/cron.html b/guides/cpanel/cron.html new file mode 100644 index 00000000..8324fcee --- /dev/null +++ b/guides/cpanel/cron.html @@ -0,0 +1,210 @@ + + + + + + cPanel CRON | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# cPanel CRON

# Add new CRON job

  • Go to Cron Jobs under Advanced
  • Scroll to Add New Cron Job

Cronjob

  • Under Common Settings pick Once Per Minute (* * * * *)

The command invocation vary depending on use context, you need to create your own command based on the following general form:

php-binary cli-path -C cron >/dev/null 2>&1
+
  • php-binary Check the PHP command examples section under Add New Cron Job where you can learn about the PHP path for your system.
  • cli-path Chevereto CLI path can be found on your Dashboard panel under Installation details.
  • -C cron C-option to pass the "cron" app-command

# Command examples

+ + + diff --git a/guides/cpanel/database.html b/guides/cpanel/database.html new file mode 100644 index 00000000..3cc8c34d --- /dev/null +++ b/guides/cpanel/database.html @@ -0,0 +1,209 @@ + + + + + + cPanel Database | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# cPanel Database

# Creating a database

  • Go to the MySQL Database Wizard under Databases. Follow the process to create a database and its user.

databases

  • Take note on the MySQL database name, username and password.

MySQL wizard create

  • Grant ALL PRIVILEGES on the newly created database and user.

MySQL wizard privileges

+ + + diff --git a/guides/cpanel/ffmpeg.html b/guides/cpanel/ffmpeg.html new file mode 100644 index 00000000..aa3b9e75 --- /dev/null +++ b/guides/cpanel/ffmpeg.html @@ -0,0 +1,217 @@ + + + + + + cPanel FFmpeg | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# cPanel FFmpeg

To get video uploads to work on cPanel you need to install FFmpeg and configure Chevereto to use it.

# Download FFmpeg

Download FFmpeg static build from the official website at ffmpeg.org/download.html (opens new window). Double check that you are downloading the static build, and that it is compatible with your server's architecture.

You can check your cPanel server architecture under the "Server Information" section.

# Upload FFmpeg

The FFmpeg distribution comes in a compressed file, you need to extract it and upload the folder containing the binaries to your server.

FFmpeg folder

You can upload these to any directory long as it is visible for your cPanel user. For example, you can use /home/user/bin/ and ending up with:

/home/user/bin/ffmpeg-7.0.2-amd64-static
+

# Configure Chevereto

After installing Chevereto you can configure it to use custom FFmpeg binaries. You need to configure to use the following environment variables matching to the paths where you uploaded the binaries:

<?php
+
+return [
+  // ...
+  'CHEVERETO_BINARY_FFMPEG' => '/home/user/bin/ffmpeg-7.0.2-amd64-static/ffmpeg',
+  'CHEVERETO_BINARY_FFPROBE' => '/home/user/bin/ffmpeg-7.0.2-amd64-static/ffprobe',
+];
+

You can check if this worked by going to /dashboard where you will see the report on detected FFmpeg and FFPROBE.

+ + + diff --git a/guides/cpanel/index.html b/guides/cpanel/index.html new file mode 100644 index 00000000..5b7bf066 --- /dev/null +++ b/guides/cpanel/index.html @@ -0,0 +1,209 @@ + + + + + + Chevereto cPanel | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Chevereto cPanel

Installation service available

We offer a paid installation service (opens new window) for this guide. We will install Chevereto cPanel for you, including all the requirements and configurations.

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.

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.

# Requirements

  • cPanel based hosting service
  • Chevereto license (for paid edition)
+ + + diff --git a/guides/cpanel/php.html b/guides/cpanel/php.html new file mode 100644 index 00000000..dc5be33c --- /dev/null +++ b/guides/cpanel/php.html @@ -0,0 +1,209 @@ + + + + + + cPanel PHP | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# cPanel PHP

# MultiPHP INI Editor

Go to MultiPHP INI Editor under Software.

Software

Select your website under Configure PHP INI basic settings.

MultiPHP INI editor

Take note on the following configurable keys:

MultiPHP INI keys

  • max_execution_time 30
  • memory_limit 256M (min)
  • Use post_max_size and upload_max_filesize to limit the file upload max. size allowed for uploads

# MultiPHP Manager

Go to MultiPHP Manager and select PHP 8.1 for your website.

MultiPHP manager

PHP Extensions

Refer to the cPanel PHP Extensions and Applications Package (opens new window) and WHM How to install a PHP extension in WHM (opens new window) documentation if your cPanel provisioning lacks the extensions required by Chevereto.

# PHP Versioning

Did you know?

cPanel uses root .htaccess file to add rules that enable to override the default cPanel PHP versioning. This may cause issues in your Chevereto installation.

If you have PHP versioning issues make sure that the root .htaccess file contains the following:

Note that the configuration in your system may vary. Double-check with your service provider.

# Troubleshooting

As cPanel uses .htaccess to configure PHP version, it needs a special handling when you want to change the PHP version of your website.

  1. Upload Chevereto's .htaccess
  2. Go to Multi-PHP and select the new PHP version
+ + + diff --git a/guides/docker/index.html b/guides/docker/index.html new file mode 100644 index 00000000..1b4b2a0d --- /dev/null +++ b/guides/docker/index.html @@ -0,0 +1,222 @@ + + + + + + Chevereto Docker | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Chevereto Docker

Installation service available

We offer a paid installation service (opens new window) for this guide. We will install Chevereto Docker for you, including all the requirements and configurations.

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.

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.

# Advantages

There are several advantages of our Docker system:

  • Run multiple websites with ease
  • Portability
  • Easy to update
  • Automatic HTTPS setup
  • CloudFlare integration

# Repository

Check the project repository at chevereto/docker (opens new window) for all instructions and source code.

# Requirements

To follow this guide, make sure you have:

# Getting a server

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.

# Accessing server shell

To interact with your server use a terminal emulator. Here are some terminal emulator software by operating system:

System Software
macOS Terminal, iTerm 2
Windows Windows Terminal, Putty
Linux Gnome Terminal, Tilix, XTerm

Access your server via SSH (opens new window) using the following command from your computer:

ssh root@<server ip>
+

Make sure to check your server provider's documentation for specific instructions on accessing the shell.

# Installing chevereto/docker

Start by installing Chevereto Docker repository and its dependencies by running the following command.

bash <(curl -s https://chevereto.com/sh/ubuntu/24.04/docker.sh)
+

# Setting up CloudFlare integration

Skip this section if you don't need CloudFlare integration to manage domain DNS.

Integrate Chevereto Docker with CloudFlare to automate sub-domain creation for your websites. If you aren't using CloudFlare go to cloudflare.com (opens new window) to get started, it is free. Add your domain to continue with this guide.

To setup CloudFlare with Chevereto Docker:

  • Navigate to the DNS configuration for your domain on CloudFlare.
  • Create a new A record, take note as it will be your CLOUDFLARE_A_NAME environment value. Use the following properties: +
    • Type: A
    • Name: chevereto-factory
    • Content: {server ip}
    • Proxy status: DNS only
    • TTL: Auto
  • Navigate to SSL/TLS configuration and under Overview set mode to Full (strict).

Next create an API token, take note as it will be your CLOUDFLARE_TOKEN environment value.

  • Go to api-tokens (opens new window) and click on Create Token
  • Use template Edit zone DNS
  • Permissions: Zone DNS Edit
  • Resources: Include Specific zone DOMAIN

You will require to take note on CLOUDFLARE_ZONE_ID and CLOUDFLARE_ACCOUNT_ID which you can get from the domain overview.

# Create configuration (.env file)

To create the configuration file run the following command and follow the on-screen instructions.

make env
+
  • CHEVERETO_LICENSE_KEY: Your Chevereto license key (required for the paid edition, leave empty for free edition).
  • DOMAIN: The domain/hostame you'll use for spawning Chevereto installations.
  • EMAIL_HTTPS: The email to receive HTTPS certificate notifications from Let’s Encrypt.
  • CLOUDFLARE_* options: Integration details for CloudFlare.

# Setting up system

By setting up the system you will enable background processing and nginx ingress HTTP proxy.

To set up the system run the following command:

make setup
+

# Building the Chevereto image

If you're using free edition you can skip this step, as the image is freely available on GitHub Container Registry (opens new window).

Build the Chevereto container image for the latest release by running the following command.

make image
+

# Deploying

To deploy a new website use the following command format:

make deploy NAMESPACE={namespace} ADMIN_EMAIL={email}
+

Replace {namespace} with the desired sub-domain and {email} with the admin email for the website.

For example:

make deploy NAMESPACE=demo ADMIN_EMAIL=email@mywebsite.com
+

The Chevereto website will be available within seconds as the new sub-domain propagates.

# Upgrading

To upgrade you need to (1) Sync repository, (2) Re-build the container image, and (3) Update Chevereto instances.

# Step 1: Sync repository

Sync this repository to get the latest changes.

make sync
+

Note: If there's a new branch (for example 4.2) switch to that branch running the following command:

git switch 4.2
+

# Step 2: Re-build the container image

Build a new container image to reflect the newest release.

make image
+

# Step 3: Update Chevereto instances

This will down and re-up the containers and carry the required database update.

make update
+
+ + + diff --git a/guides/docker/pure-docker.html b/guides/docker/pure-docker.html new file mode 100644 index 00000000..e301176a --- /dev/null +++ b/guides/docker/pure-docker.html @@ -0,0 +1,319 @@ + + + + + + Pure Docker | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Pure Docker

This is the most basic way to run Chevereto using Docker.

Pure Docker refers to running Chevereto using Docker without the extra provisions of Chevereto Docker (nginx ingress proxy, CloudFlare integration).

# Build image (paid edition)

Image building is recommended for Chevereto paid edition. Skip to Run (free edition) if you are using Chevereto free edition or if you want to upgrade to paid edition within the application itself.

Workaround image building

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 CHEVERETO_SERVICING=server to the container runtime and go to /dashboard?license to enter the license key and proceed with the upgrading process. You will also need to setup a volume for the application files.

# Clone repository

Clone the chevereto/docker (opens new window) repository and create an .env file with your license key:

CHEVERETO_LICENSE_KEY=your_license_key
+

# Make image

Run the following command to create the Chevereto image:

make image
+

By running the above command you will generate the following tags:

  • chevereto:latest
  • chevereto:4
  • chevereto:4.1
  • chevereto:4.1.0

# Upgrading

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.

# Step 1: Sync repository

Sync latest changes from chevereto/docker (opens new window) repository:

make sync
+

Note: If there's a new branch (for example 4.2) switch to that branch running the following command:

git switch 4.2
+

# Step 2: Re-build the container image

make image
+

# Step 3: Down and re-up the container

Down the container:

docker stop --name chevereto
+docker rm --name chevereto
+

Then re-up the container using the same command you used to run it the first time.

# Run (paid edition)

To run chevereto.com (opens new window) (paid edition) you need to pass the environment targeting your private build image, in this example chevereto:latest.

Note: For running this command you need to fill your own database credentials.

docker run -d \
+  --name chevereto \
+  -p 80:80 \
+  -e CHEVERETO_DB_HOST=database \
+  -e CHEVERETO_DB_USER=chevereto \
+  -e CHEVERETO_DB_PASS=user_database_password \
+  -e CHEVERETO_DB_PORT=3306 \
+  -e CHEVERETO_DB_NAME=chevereto \
+  -e CHEVERETO_ASSET_STORAGE_TYPE=local \
+  -e CHEVERETO_ASSET_STORAGE_URL=/images/_assets/ \
+  -e CHEVERETO_ASSET_STORAGE_BUCKET=/var/www/html/images/_assets/ \
+  -e CHEVERETO_MAX_POST_SIZE=2G \
+  -e CHEVERETO_MAX_UPLOAD_SIZE=2G \
+  -v /var/www/html/images/ \
+  chevereto:latest
+

# Run (free edition)

To run chevereto/chevereto (opens new window) (Chevereto free edition) you need to pass the environment targeting public image ghcr.io/chevereto/chevereto:latest.

Alternatively, you can pass chevereto/chevereto:latest which is the Chevereto mirror on DockerHub (opens new window).

Note: For running this command you need to fill your own database credentials.

docker run -d \
+  --name chevereto \
+  -p 80:80 \
+  -e CHEVERETO_DB_HOST=database \
+  -e CHEVERETO_DB_USER=chevereto \
+  -e CHEVERETO_DB_PASS=user_database_password \
+  -e CHEVERETO_DB_PORT=3306 \
+  -e CHEVERETO_DB_NAME=chevereto \
+  -e CHEVERETO_ASSET_STORAGE_TYPE=local \
+  -e CHEVERETO_ASSET_STORAGE_URL=/images/_assets/ \
+  -e CHEVERETO_ASSET_STORAGE_BUCKET=/var/www/html/images/_assets/ \
+  -e CHEVERETO_MAX_POST_SIZE=2G \
+  -e CHEVERETO_MAX_UPLOAD_SIZE=2G \
+  -e CHEVERETO_SERVICING=server \
+  -v /var/www/html/images/ \
+  ghcr.io/chevereto/chevereto:latest
+

# Run free edition with application upgrade

If you want to run the free edition and manage the application upgrade within the application itself you need to pass -e CHEVERETO_SERVICING=server and setup a volume for the application files:

Note: For running this command you need to fill your own database credentials.

docker run -d \
+  --name chevereto \
+  -p 80:80 \
+  -e CHEVERETO_DB_HOST=database \
+  -e CHEVERETO_DB_USER=chevereto \
+  -e CHEVERETO_DB_PASS=user_database_password \
+  -e CHEVERETO_DB_PORT=3306 \
+  -e CHEVERETO_DB_NAME=chevereto \
+  -e CHEVERETO_ASSET_STORAGE_TYPE=local \
+  -e CHEVERETO_ASSET_STORAGE_URL=/images/_assets/ \
+  -e CHEVERETO_ASSET_STORAGE_BUCKET=/var/www/html/images/_assets/ \
+  -e CHEVERETO_MAX_POST_SIZE=2G \
+  -e CHEVERETO_MAX_UPLOAD_SIZE=2G \
+  -e CHEVERETO_SERVICING=server \
+  -v /var/www/html/images/ \
+  -v /var/www/html/ \
+  ghcr.io/chevereto/chevereto:latest
+

# Using compose

Create your own docker-compose.yml at your project folder. See more examples at chevereto/docker (opens new window).

services:
+  database:
+    image: mariadb:jammy
+    networks:
+      - chevereto
+    volumes:
+      - database:/var/lib/mysql
+    restart: always
+    healthcheck:
+      test: ["CMD", "healthcheck.sh", "--su-mysql", "--connect"]
+      interval: 10s
+      timeout: 5s
+      retries: 3
+    environment:
+      MYSQL_ROOT_PASSWORD: password
+      MYSQL_DATABASE: chevereto
+      MYSQL_USER: chevereto
+      MYSQL_PASSWORD: user_database_password
+
+  php:
+    image: chevereto/chevereto:latest # tweak with target image to run
+    networks:
+      - chevereto
+    volumes:
+      - storage:/var/www/html/images/
+      # - app:/var/www/html/ # uncomment when using CHEVERETO_SERVICING=server
+    restart: always
+    depends_on:
+      database:
+        condition: service_healthy
+    expose:
+      - 80
+    environment:
+      CHEVERETO_DB_HOST: database
+      CHEVERETO_DB_USER: chevereto
+      CHEVERETO_DB_PASS: user_database_password
+      CHEVERETO_DB_PORT: 3306
+      CHEVERETO_DB_NAME: chevereto
+      CHEVERETO_HOSTNAME: hostname.com
+      CHEVERETO_HOSTNAME_PATH: /
+      CHEVERETO_HTTPS: 0
+      CHEVERETO_ASSET_STORAGE_TYPE: local
+      CHEVERETO_ASSET_STORAGE_URL: http://hostname.com/images/_assets/ #hostname-aware URL
+      CHEVERETO_ASSET_STORAGE_BUCKET: /var/www/html/images/_assets/
+      CHEVERETO_MAX_POST_SIZE: 2G
+      CHEVERETO_MAX_UPLOAD_SIZE: 2G
+      # CHEVERETO_SERVICING: server # uncomment to enable application filesystem upgrades
+
+volumes:
+  database:
+  storage:
+  # app: # uncomment when using CHEVERETO_SERVICING=server
+
+networks:
+  chevereto:
+
+ + + diff --git a/guides/index.html b/guides/index.html new file mode 100644 index 00000000..422515ba --- /dev/null +++ b/guides/index.html @@ -0,0 +1,206 @@ + + + + + + Installation guides | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Installation guides

We have prepared several guides on how you can install Chevereto. If you are new to self-hosting this is a good starting point.

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.

# Official guides

Install Chevereto following our guides for:

# Community guides

The following guides have been contributed by users of the software.

+ + + diff --git a/guides/plesk/app-files.html b/guides/plesk/app-files.html new file mode 100644 index 00000000..b63add66 --- /dev/null +++ b/guides/plesk/app-files.html @@ -0,0 +1,209 @@ + + + + + + Plesk App files | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Plesk App files

# Installing Chevereto

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.

  • Go to File Manager under Your website

Files

  • Navigate to your home /home/httpdocs/ directory

File Manager

  • Click on the Plus button and select Upload File
  • Upload the release zip file that you downloaded following using release package instructions
  • Click on the uploaded zip file file and select Extract

File Manager Extract

  • A prompt appears to confirm the zip extraction
  • Select Replace existing files and click on OK
  • Once done, remove the zip file

File Manager Remove File

  • If you are installing Chevereto for the first time you can continue with Setup.

# Updating Chevereto

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.

If you made modifications to the software you may want to review these changes before.

+ + + diff --git a/guides/plesk/cron.html b/guides/plesk/cron.html new file mode 100644 index 00000000..c45374a8 --- /dev/null +++ b/guides/plesk/cron.html @@ -0,0 +1,209 @@ + + + + + + Plesk CRON | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Plesk CRON

# Add new CRON job

  • Go to Scheduled Tasks under Dev Tools

Scheduled Tasks

  • Click on Add Task

Scheduled Tasks

  • Select Run a PHP script under Task type
  • Use httpdocs/app/bin/legacy under Script path
  • Set -C cron under With arguments
  • Select PHP 8 under Use PHP version
  • Select Cron style under Run and enter * * * * *
  • Select Do not notify under Notify

Scheduled Tasks

  • Click on Run Now and make sure that the command works

Scheduled Tasks

  • Click OK to finish adding the CRON
+ + + diff --git a/guides/plesk/database.html b/guides/plesk/database.html new file mode 100644 index 00000000..33433599 --- /dev/null +++ b/guides/plesk/database.html @@ -0,0 +1,209 @@ + + + + + + Plesk Database | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Plesk Database

# Creating a database

  • Go to Databases

Databases

  • Click on Add Database and follow the process to create a database and its user. Make sure to relate this database to your website.

Databases Add

  • Take note on the MySQL database name, username and password.

Databases done

+ + + diff --git a/guides/plesk/ffmpeg.html b/guides/plesk/ffmpeg.html new file mode 100644 index 00000000..0e7fd17e --- /dev/null +++ b/guides/plesk/ffmpeg.html @@ -0,0 +1,213 @@ + + + + + + Plesk FFmpeg | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Plesk FFmpeg

To get video uploads to work on Plesk you need to install FFmpeg and configure Chevereto to use it.

# Download FFmpeg

Download FFmpeg static build from the official website at ffmpeg.org/download.html (opens new window). Double check that you are downloading the static build, and that it is compatible with your server's architecture.

You can check your Plesk server architecture under the "Server Information" section.

# Upload FFmpeg

The FFmpeg distribution comes in a compressed file, you need to extract it and upload the folder containing the binaries to your server.

FFmpeg folder

You can upload these to any directory long as it is visible for your Plesk user. For example, you can use /home/user/bin/ and ending up with:

/home/user/bin/ffmpeg-7.0.2-amd64-static
+

# Configure Chevereto

After installing Chevereto you can configure it to use custom FFmpeg binaries. You need to configure to use the following environment variables matching to the paths where you uploaded the binaries:

<?php
+
+return [
+  // ...
+  'CHEVERETO_BINARY_FFMPEG' => '/home/user/bin/ffmpeg-7.0.2-amd64-static/ffmpeg',
+  'CHEVERETO_BINARY_FFPROBE' => '/home/user/bin/ffmpeg-7.0.2-amd64-static/ffprobe',
+];
+

You can check if this worked by going to /dashboard where you will see the report on detected FFmpeg and FFPROBE.

+ + + diff --git a/guides/plesk/index.html b/guides/plesk/index.html new file mode 100644 index 00000000..1d3d8cfe --- /dev/null +++ b/guides/plesk/index.html @@ -0,0 +1,209 @@ + + + + + + Chevereto Plesk | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Chevereto Plesk

Installation service available

We offer a paid installation service (opens new window) for this guide. We will install Chevereto Plesk for you, including all the requirements and configurations.

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.

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.

# Requirements

  • Plesk based hosting service
  • Chevereto license (for paid edition)
+ + + diff --git a/guides/plesk/php.html b/guides/plesk/php.html new file mode 100644 index 00000000..9c097787 --- /dev/null +++ b/guides/plesk/php.html @@ -0,0 +1,209 @@ + + + + + + Plesk PHP | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Plesk PHP

# PHP Setup

  • Go to Hosting Settings under Hosting & DNS.

Hosting Settings

  • Under Web scripting and statistics select PHP 8 and FPM application server by Apache.

PHP Support

+ + + diff --git a/guides/server/vps.html b/guides/server/vps.html new file mode 100644 index 00000000..c1601e3c --- /dev/null +++ b/guides/server/vps.html @@ -0,0 +1,223 @@ + + + + + + Chevereto VPS | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Chevereto VPS

Installation service available

We offer a paid installation service (opens new window) for this guide. We will install Chevereto VPS for you, including all the requirements and configurations.

Collection of universal bash scripts to install Chevereto in any VPS (Virtual Private Server). We strongly recommend DigitalOcean (opens new window), Vultr (opens new window) and Linode (opens new window).

# Repository

We have a GitHub repository with all the commands we will need. Check the repository at chevereto/vps (opens new window) for instructions.

# Instructions

  • Root login to your VPS
  • Run the following script(s)

# Ubuntu

Note: Ubuntu LTS 24.04 is recommended. If you run other system you may need to alter the scripts. Feel free to contribute.

# Prepare

The prepare.sh (opens new window) script install the system stack (PHP, Apache HTTP Web server, MySQL Server, Composer, FFmpeg and Certbot) on Ubuntu.

Reboot the VPS to make sure to apply any pending kernel updates:

systemctl reboot
+

Make sure to change 24.04 to match your Ubuntu LTS (available 20.04, 22.04 and 24.04).

bash <(curl -s https://raw.githubusercontent.com/chevereto/vps/4.1/ubuntu/24.04/prepare.sh)
+

This message will be shown on success:

[OK] Stack ready for Chevereto!
+

# Common

  • The scripts at common/ will work under any unix-like system
  • Requires curl and unzip

# New

The new.sh (opens new window) script downloads Chevereto and configures Apache HTTP Web server, MySQL, CRON and FFmpeg. Its purpose is to prepare for Chevereto Installation (opens new window).

This is intended to brand new installations and it should run after prepare as it assumes that the system stack is ready.

bash <(curl -s https://raw.githubusercontent.com/chevereto/vps/4.1/common/new.sh)
+

# Notes

On the server:

  • The web root is located at /var/www/html
  • The MySQL root password is saved at /root/.mysql_password
  • Logs are at /var/log/apache2

IMPORTANT:

  • Secure your database by running mysql_secure_installation

# Get

The get.sh (opens new window) script download and extracts Chevereto in the current working folder.

  • cd into the website project folder (for example /var/www/html)
  • Run the following command
bash <(curl -s https://raw.githubusercontent.com/chevereto/vps/4.1/common/get.sh)
+

# Cloudflare remote IP

The cf-remoteip.sh (opens new window) script syncs the known IPs for CloudFlare remote IP. This must be used if you are using CloudFlare.

Warning: If you use CloudFlare and not complete this setup your Chevereto installation won't be able to retrieve real visitors IP.

bash <(curl -s https://raw.githubusercontent.com/chevereto/vps/4.1/common/cf-remoteip.sh)
+
  • To save the above script in your VPS:
curl -f -SOJL \
+    --output-dir /etc/apache2 \
+    https://raw.githubusercontent.com/chevereto/vps/4.1/common/cf-remoteip.sh
+
  • To add the above script to CRON (cron.d) to keep these IP ranges auto updated:
cat >/etc/cron.d/cf-remoteip <<EOM
+30 3 * * * /etc/apache2/cf-remoteip.sh >/dev/null 2>&1
+EOM
+

# HTTPS setup

Run the following command to get automatic renewable HTTPS thanks to certbot. Mind to change example.com with the target domain(s).

certbot --apache -d example.com
+

If you are using www. subdomain you can add it like this:

certbot --apache -d example.com -d www.example.com
+
+ + + diff --git a/icons/android-chrome-192x192.png b/icons/android-chrome-192x192.png new file mode 100644 index 00000000..75b5d952 Binary files /dev/null and b/icons/android-chrome-192x192.png differ diff --git a/icons/android-chrome-512x512.png b/icons/android-chrome-512x512.png new file mode 100644 index 00000000..9070498c Binary files /dev/null and b/icons/android-chrome-512x512.png differ diff --git a/index.html b/index.html new file mode 100644 index 00000000..798e85f3 --- /dev/null +++ b/index.html @@ -0,0 +1,202 @@ + + + + + + Chevereto V4 Docs | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Chevereto V4 Docs

Chevereto

Chevereto (opens new window) is a powerful image and video hosting script that allows you to create a beautiful media hosting website with all the features you need.

# Install

Chevereto runs anywhere, system requirements are minimal and it can run on any server.

Install Chevereto following our guides for:

Chevereto is also available at DigitalOcean Marketplace (opens new window), Vultr Marketplace (opens new window), Installatron (opens new window), Softaculous (opens new window) and SwiftWave (opens new window).

Review our Installation docs for all alternatives.

# Updating

For Chevereto V4 users:

# Upgrading

For Chevereto V3 users:

# Troubleshooting

Got a Something went wrong message? Don't panic and check our Troubleshooting guide.

# Support

Go to chevereto.com/support (opens new window).

+ + + diff --git a/introduction/changelog/4.0.html b/introduction/changelog/4.0.html new file mode 100644 index 00000000..e04ed5ea --- /dev/null +++ b/introduction/changelog/4.0.html @@ -0,0 +1,205 @@ + + + + + + 4.0 Macanudo | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# 4.0 Macanudo

Chevereto v4.0 codename Macanudo (opens new window) 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.

# Videos

# Custom semantics

Fits your context.

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.

With Chevereto you define the context.

# Call to action buttons

Get more leads.

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.

Offer anything with Chevereto and easy plug it to the world.

# User-based API

API available to all users.

With the API V1.1 users can interact with Chevereto from another system, i.e. to upload screenshots using ShareX (opens new window) directly to the user's account.

Enable uploading to Chevereto from anywhere.

# Theme palettes

Give color.

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.

Brings a new visual comfort layer to Chevereto.

# Mobile gorgeous

Better on mobile devices.

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.

Best mobile experience for Chevereto.

# Faster rendering

The fast and the htmlorious.

Listings, TFFB and HTML rendering have been massively improved with lazy load listings and a myriad of enhancements to make your websites load faster.

Delivers your Chevereto website, faster and more SEO friendly.

# Keyboard shortcuts

⌨️ Do more in less time.

All buttons include a keyboard shortcut binding to provide a richer user experience enabling to chop these roundtrips of the trackpad.

Chevereto gets delightful productive.

# CSAM protection

Project Arachnid integration.

Operated by the Canadian Centre for Child Protection, Project Arachnid (opens new window) is an innovative tool to combat the growing proliferation of child sexual abuse material (CSAM) on the internet.

Adds CSAM protection to Chevereto.

# Folder upload

Drag-and-drop without hassle.

Drop folder upload support. Easy as drag the folder to the uploader screen and it will queue compatible files for uploading.

Easier to upload tons of content to Chevereto.

# Two-factor auth

Time-based one-time password.

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.

Enables safer account security for Chevereto.

# xrDebug

The friendly debug tool.

The debug process doesn't need to be for hackers neither a pain requiring to install server libraries for it. With xrDebug (opens new window) you can easy debug on the web browser. Enjoy a beautiful modern debugger with a focus in minimalism and message export tools.

Comes built-in with a debug application made by us, for us.

# Improved console

Boosted CLI tools.

The application console has been improved with commands for encrypt, decrypt, password reset, settings handling and more.

Provides extra console commands for Chevereto.

# REPL

Stop dying all the time.

Built-in REPL support for both console and desktop. The joy for developers, spawn an interactive context where any code can be evaluated and studied.

Easy exploratory programming for the Chevereto application.

# Web Share API

Enhanced sharing experience.

With Web Share API (opens new window) users can enjoy seamless sharing natively integrated with their target device.

Powers device context aware sharing options for Chevereto.

# Root routing settings

Own the /root behavior.

Routing configuration enables to select what resolves at root level. Either images, users or albums, the root can be configured to suit any need.

Sparks freedom of choice for the most important routes for your website.

# Uses Chevere software

¡Que chévere!

Includes superb software packages like ThrowableHandler (opens new window), xrDebug (opens new window) and VarDump (opens new window). The application is made on top of an entire software foundation made for us.

Introduces Chevere (opens new window) software for Chevereto.

# Encrypted secrets

Safe application secrets.

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.

Adds another layer of security for Chevereto systems.

And it's gone!

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.

Adds another layer for image disposal.

# One-click system update

Easy as pie.

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.

# Tons of small bits

Little details everywhere.

Review the complete changelog starting at V4.0.0.beta.1 (opens new window) and carried over a year. There are tons of exciting new Macanudas features in this Chevereto version.

  • Text-based logo
  • Zoomable listing viewer
  • Extended configurable system settings
  • Re-classified error codes
  • FontAwesome 6 on all icons
  • Better screen usage on mobile
  • More configurable restrictions for guest
  • Root-level maximum limits
  • Improved SEO
+ + + diff --git a/introduction/changelog/4.1.html b/introduction/changelog/4.1.html new file mode 100644 index 00000000..186a84b0 --- /dev/null +++ b/introduction/changelog/4.1.html @@ -0,0 +1,209 @@ + + + + + + 4.1 Pulento | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# 4.1 Pulento

Chevereto v4.1 codename Pulento (opens new window) carries the development started with Macanudo. It adds Video support, customizable theme font and it starts to deliver the user-based API.

With Pulento Chevereto has now become an Image and Video hosting software.

# Blog posts

# Video support

Now with support for video content.

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.

# Configurable view for user profiles

Customize display of files or images for user profile homepage.

# Customizable theme font

Easy select Chevereto system font to fit your style.

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.

+ + + diff --git a/introduction/changelog/4.2.html b/introduction/changelog/4.2.html new file mode 100644 index 00000000..7aedf2db --- /dev/null +++ b/introduction/changelog/4.2.html @@ -0,0 +1,209 @@ + + + + + + 4.2 Regio | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# 4.2 Regio

Chevereto v4.2, codenamed Regio (opens new window), 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.

# Blog posts

# Tagging System Enhancements

Bring context everywhere.

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.

# Improved Storage Management

Consolidated storage management.

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.

# AVIF Image Format Support

High-efficiency image compression.

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.

# System and Performance Improvements

Enhanced backend performance.

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.

# User Interface and Mobile Experience

A refined user experience.

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.

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.

# Expanded Content Listings in Explore

Discover more content.

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.

# Bug Fixes and Stability Improvements

Quality and reliability enhancements.

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.

+ + + diff --git a/introduction/changelog/welcome-back.html b/introduction/changelog/welcome-back.html new file mode 100644 index 00000000..4e6ea37b --- /dev/null +++ b/introduction/changelog/welcome-back.html @@ -0,0 +1,209 @@ + + + + + + Welcome Back | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Welcome Back

Have used Chevereto before? That's awesome!

We have prepared a short summary in what you can expect coming from older versions of the software.

# From Chevereto V3

V3.X releases (opens new window)

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 Chevere (opens new window).

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.

# Chevereto V4 vs V3

The following tables summarizes the significative differences between Chevereto V3 and Chevereto V4.

System V4 V3
PHP 8 7.4
V4 Path V3 Path
Settings /app/env.php /app/settings.php
Composer /app/composer.json /composer.json
CLI /app/bin/legacy /cli.php
Themes /content/legacy/themes /app/themes
Peafowl /content/legacy/themes/Peafowl/lib /lib

# Settings setup

Chevereto V4 deprecates app/settings.php in favor of environment variables for configuring the application.

Your existing application settings must be migrated to enable Chevereto V4 to connect to the database and configure the system.

# From Chevereto-Free

As Chevereto-Free (opens new window) is a fork of Chevereto V3.16 (opens new window), it adds on top of that branch.

The code at V4 is notorious newer as V4 was released on 2022. Chevereto-Free contains code old as 2020.

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.

# From Chevereto V2

V2.X releases (opens new window)

Adding on From Chevereto V3, 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.

Coming from V2, users will experience that Chevereto is more than a simple one-click image host but a full-featured media hosting solution.

# From Chevereto V1

V1.X releases (opens new window)

Adding on From Chevereto V2, the software went from an mvp to a real project.

Coming from V1, users will experience that the software is not longer is a robust media hosting solution.

+ + + diff --git a/introduction/get-started/contributing.html b/introduction/get-started/contributing.html new file mode 100644 index 00000000..da14f867 --- /dev/null +++ b/introduction/get-started/contributing.html @@ -0,0 +1,209 @@ + + + + + + Contributing | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Contributing

Contribute to Chevereto to show your support and care for the software. Anyone can contribute, don't hesitate to contact us (opens new window) if you have something in your mind not covered here.

# Show and Tell

The best way you can support us is by spreading the word about the software we do.

Tell others what Chevereto does and how you use it.

# Documentation

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!

Feel free to contribute to the docs repo (opens new window).

# Servers

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.

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.

+ + + diff --git a/introduction/get-started/copyright.html b/introduction/get-started/copyright.html new file mode 100644 index 00000000..3bbc8999 --- /dev/null +++ b/introduction/get-started/copyright.html @@ -0,0 +1,209 @@ + + + + + + Copyright | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Copyright

Copyright 2024 Rodolfo Berrios A. (opens new window)

# Software

Chevereto V4 is released under the Chevereto License, Version 4.0. See License (opens new window) for the complete license text.

You can use Chevereto V4 software according to the grants in the license document.

# Documentation

Chevereto V4 documentation is licensed under the Apache License, Version 2.0. See LICENSE (opens new window) for the full license text.

This documentation is Open Source. You can help to improve it, or modify for any purpose.

+ + + diff --git a/introduction/get-started/links.html b/introduction/get-started/links.html new file mode 100644 index 00000000..0fe7983f --- /dev/null +++ b/introduction/get-started/links.html @@ -0,0 +1,209 @@ + + + + + + Links | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Links

# Chevereto V4 Resources

# General Resources

# Author's Resources

+ + + diff --git a/introduction/get-started/welcome.html b/introduction/get-started/welcome.html new file mode 100644 index 00000000..fb2e592f --- /dev/null +++ b/introduction/get-started/welcome.html @@ -0,0 +1,205 @@ + + + + + + Welcome to Chevereto! | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Welcome to Chevereto!

# What is Chevereto?

Chevereto (opens new window) 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.

# Use cases

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 features (opens new window), including:

Chevereto could be used to build your store's gallery (opens new window), 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.

The point of Chevereto is that it handles very 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.

# Origin

Chevereto project began in 2007 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.

You can learn the complete release history at releases.chevereto.com (opens new window)

+ + + diff --git a/logo.png b/logo.png new file mode 100644 index 00000000..886e2b32 Binary files /dev/null and b/logo.png differ diff --git a/logo.svg b/logo.svg new file mode 100644 index 00000000..b34d5a7f --- /dev/null +++ b/logo.svg @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 00000000..69869f59 --- /dev/null +++ b/manifest.json @@ -0,0 +1,20 @@ +{ + "name": "Chevereto V4", + "short_name": "Chevereto V4", + "icons": [ + { + "src": "/icons/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/icons/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "start_url": "/index.html", + "display": "standalone", + "background_color": "#fff", + "theme_color": "#23a8e0" +} \ No newline at end of file diff --git a/manual/admin.html b/manual/admin.html new file mode 100644 index 00000000..c1731d3e --- /dev/null +++ b/manual/admin.html @@ -0,0 +1,201 @@ + + + + + + Admin manual | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# Admin manual

The Chevereto's admin manual provides instructions on how to use the software for system administrators.

👉 Admin's manual can be found at v4-admin.chevereto.com (opens new window)

+ + + diff --git a/manual/user.html b/manual/user.html new file mode 100644 index 00000000..4a379754 --- /dev/null +++ b/manual/user.html @@ -0,0 +1,201 @@ + + + + + + User manual | Chevereto V4 Docs + + + + + + + + + + + + + + + + +

# User manual

The Chevereto's user manual provides instructions on how to use the software for end-users.

User's manual can be found at v4-user.chevereto.com (opens new window)

+ + + diff --git a/service-worker.js b/service-worker.js new file mode 100644 index 00000000..597ab85b --- /dev/null +++ b/service-worker.js @@ -0,0 +1,609 @@ +/** + * Welcome to your Workbox-powered service worker! + * + * You'll need to register this file in your web app and you should + * disable HTTP caching for this file too. + * See https://goo.gl/nhQhGp + * + * The rest of the code is auto-generated. Please don't update this file + * directly; instead, make changes to your Workbox build configuration + * and re-run your build process. + * See https://goo.gl/2aRDsh + */ + +importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); + +self.addEventListener('message', (event) => { + if (event.data && event.data.type === 'SKIP_WAITING') { + self.skipWaiting(); + } +}); + +/** + * The workboxSW.precacheAndRoute() method efficiently caches and responds to + * requests for URLs in the manifest. + * See https://goo.gl/S9QRab + */ +self.__precacheManifest = [ + { + "url": "404.html", + "revision": "3224d53bf1e6f24f1c4ec03fdf2bcc97" + }, + { + "url": "application/configuration/configuring.html", + "revision": "a02da9cfce6cec1237da3e2592765ab4" + }, + { + "url": "application/configuration/environment.html", + "revision": "da71c4ea423d63d338b1d1fc7b028719" + }, + { + "url": "application/installing/from-free.html", + "revision": "732fdbe63ba632ff70fa9b5dd94fd299" + }, + { + "url": "application/installing/installation.html", + "revision": "b54d7e396e2fdacd1e073dd409f68060" + }, + { + "url": "application/installing/updating.html", + "revision": "893ebc23278378210f7bdcc44ec5b1f2" + }, + { + "url": "application/installing/upgrading.html", + "revision": "ac7f610c4cc9f111dc88a20ca6a0f874" + }, + { + "url": "application/reference/cli.html", + "revision": "4e91f4d10052396dd31efe7fd2db9cf3" + }, + { + "url": "application/reference/encryption.html", + "revision": "b681d69a169b12359bacdac0e6af0781" + }, + { + "url": "application/reference/errors.html", + "revision": "52315ebe1bf00d9670b64fe8bb388dfa" + }, + { + "url": "application/reference/security.html", + "revision": "980e862e3213a91e3374f93caf1ff105" + }, + { + "url": "application/stack/cron.html", + "revision": "7ae8d0c8a578d7d4c8e3d4b2bca0ff4a" + }, + { + "url": "application/stack/mysql-server.html", + "revision": "1043b587ac488e589f96afa85167e73b" + }, + { + "url": "application/stack/operating-system.html", + "revision": "ec4e9ec8c682be0c8d88b39c9fe4c950" + }, + { + "url": "application/stack/php.html", + "revision": "5f616bbc6d2b0dfcb3235c0dc67a2fa9" + }, + { + "url": "application/stack/web-server.html", + "revision": "972bfc4648002f3be545ae1205f14b33" + }, + { + "url": "assets/css/0.styles.9554c03f.css", + "revision": "934fe56b90ff23b411b230fd290cbf80" + }, + { + "url": "assets/img/cronjob.13a2a082.png", + "revision": "13a2a0821adca81231d050bd313b1693" + }, + { + "url": "assets/img/databases-add.48f8f471.png", + "revision": "48f8f471df09b5057a8133be9df137f4" + }, + { + "url": "assets/img/databases-done.a0441970.png", + "revision": "a04419707ceea790d83be6993d5dffad" + }, + { + "url": "assets/img/databases.5d9cf5ab.png", + "revision": "5d9cf5ab33a10691ffbb58034f6e7240" + }, + { + "url": "assets/img/databases.f4d298e3.png", + "revision": "f4d298e33deaac8de2a17bc87ea1d3e1" + }, + { + "url": "assets/img/ffmpeg-folder.1ef2e021.png", + "revision": "1ef2e0216c8b7bd896a772eb569d5c4c" + }, + { + "url": "assets/img/file-manager-extract-files.0ef60e09.png", + "revision": "0ef60e09e33aad8888c02477daae8f7b" + }, + { + "url": "assets/img/file-manager-extract.657c0c2b.png", + "revision": "657c0c2b59762ded13822b073a6db8c7" + }, + { + "url": "assets/img/file-manager-extract.72bea043.png", + "revision": "72bea043996303786ef14ff8921554d3" + }, + { + "url": "assets/img/file-manager-remove-file.c5b2f1aa.png", + "revision": "c5b2f1aa7c9555044575a3540ad45701" + }, + { + "url": "assets/img/file-manager.c016ac19.png", + "revision": "c016ac195dbf32f776d29cd8b4299226" + }, + { + "url": "assets/img/files.4aa4878b.png", + "revision": "4aa4878b1596ab287dae4417621c2807" + }, + { + "url": "assets/img/files.7fc6b3d4.png", + "revision": "7fc6b3d48f2d7f3cc365fc18ea0ca731" + }, + { + "url": "assets/img/hosting-settings.cd381b89.png", + "revision": "cd381b89f943f5c58d8830d8df552fad" + }, + { + "url": "assets/img/multiphp-ini-keys.83901b7f.png", + "revision": "83901b7f141fdb6b99f86b244ee0ad2a" + }, + { + "url": "assets/img/multiphp-manager.88fa8221.png", + "revision": "88fa822191bbb6b068796b609a0c9186" + }, + { + "url": "assets/img/mutliphp-ini-editor.859b4a87.png", + "revision": "859b4a87c13eb1beec0520bbf4f09f90" + }, + { + "url": "assets/img/mysql-wizard-create-database.e64fa0ed.png", + "revision": "e64fa0ed54dff2371928c3e64f6b66c6" + }, + { + "url": "assets/img/mysql-wizard-privileges.0eee95f6.png", + "revision": "0eee95f6fd59926640564c5ef93fe372" + }, + { + "url": "assets/img/php-support.997fe037.png", + "revision": "997fe0370acb29bfd64b836a95fffe90" + }, + { + "url": "assets/img/search.83621669.svg", + "revision": "83621669651b9a3d4bf64d1a670ad856" + }, + { + "url": "assets/img/sheduled-tasks-add.79d9d81c.png", + "revision": "79d9d81c4a85989f1f3d581b4ac27e2d" + }, + { + "url": "assets/img/sheduled-tasks-demo.c5d5a25c.png", + "revision": "c5d5a25c1292dba61352b831e8339909" + }, + { + "url": "assets/img/sheduled-tasks-ok.8173ab49.png", + "revision": "8173ab49c53cae3fb60ce4db816a74ac" + }, + { + "url": "assets/img/sheduled-tasks.e4524d2a.png", + "revision": "e4524d2a74f352f62ffc138062ea3950" + }, + { + "url": "assets/img/software.77971e2e.png", + "revision": "77971e2e619a23472449bdd911a762c7" + }, + { + "url": "assets/img/tinkerwell-chevereto.387ddd77.png", + "revision": "387ddd7726f9e0e47643f90a199bd8c8" + }, + { + "url": "assets/js/10.99d3a08d.js", + "revision": "82e2023e24de7e5cffff4f96ec2506e0" + }, + { + "url": "assets/js/11.49fd923d.js", + "revision": "23501ebbae52c22fda401b04da67d88b" + }, + { + "url": "assets/js/12.aa8a9090.js", + "revision": "7be554a20ad3396334e92acad076a7cb" + }, + { + "url": "assets/js/13.8bc1897a.js", + "revision": "092327851479695998af3efd24e4e354" + }, + { + "url": "assets/js/14.f4ff5d07.js", + "revision": "740279162daaf06868e276b6e40bc45c" + }, + { + "url": "assets/js/15.0208a74d.js", + "revision": "47e5753efbcf85c46bd8dc5a135e9109" + }, + { + "url": "assets/js/16.0856fd9c.js", + "revision": "6df34cd128a84279edfe0ecd0002d300" + }, + { + "url": "assets/js/17.7d3e4633.js", + "revision": "b2d42fed2290e1f1a80492ca3d7aad0d" + }, + { + "url": "assets/js/18.289d8056.js", + "revision": "ef1c56f7bb5929820c73ee7443224844" + }, + { + "url": "assets/js/19.85c294bb.js", + "revision": "a0a469b6b405ba4d04d1ffc228e784a1" + }, + { + "url": "assets/js/2.b975addd.js", + "revision": "4bf3ae1371434f16cacff2d81fa8cc7a" + }, + { + "url": "assets/js/20.8c084ff8.js", + "revision": "3b292a8185839af7b2e9e684e59810af" + }, + { + "url": "assets/js/21.35b21e8e.js", + "revision": "6fdb14bdc5acafe10843cd39bf9a4d1e" + }, + { + "url": "assets/js/22.32378879.js", + "revision": "6190a67e642b36cd15a5271804330e1b" + }, + { + "url": "assets/js/23.fc46a599.js", + "revision": "76da0a9788c0b71cdc71e000e9299886" + }, + { + "url": "assets/js/24.f25f31f3.js", + "revision": "073c3e7eef115af4ecce6d46a12941ec" + }, + { + "url": "assets/js/25.100c7a66.js", + "revision": "95d5b8496c95343f05a78af5e46ad722" + }, + { + "url": "assets/js/26.dfbbafe4.js", + "revision": "4814f7b5b8df0838f417dd027d2df269" + }, + { + "url": "assets/js/27.b77b076a.js", + "revision": "abf3c45cd85420f5bc42e143a903442c" + }, + { + "url": "assets/js/28.c9793a1e.js", + "revision": "7f0f5b1e39c46c73f5b4f62133077a94" + }, + { + "url": "assets/js/29.48c4546b.js", + "revision": "151883c729731fc3951444e7134b36fb" + }, + { + "url": "assets/js/3.a67d0764.js", + "revision": "1c27c52c62a86688125c39f721b1851f" + }, + { + "url": "assets/js/30.0c6811c9.js", + "revision": "0513b8c248cdbc35d0c67da514eb839c" + }, + { + "url": "assets/js/31.fd952463.js", + "revision": "87aa87c5ad7c5c256a6c59530fa9d2e7" + }, + { + "url": "assets/js/32.2c01d2cf.js", + "revision": "17cf1acaee80c71270f808123b9ac59b" + }, + { + "url": "assets/js/33.7ab83b5d.js", + "revision": "acb342f6fc05fcb70949af3697e324f9" + }, + { + "url": "assets/js/34.d6b2107d.js", + "revision": "03dad59bb7465a7e6b825765d6b93864" + }, + { + "url": "assets/js/35.14180773.js", + "revision": "167801fc645d1508744f41ce68205213" + }, + { + "url": "assets/js/36.5c8b0458.js", + "revision": "21bb5cdd7319cf1978ef09dd7fefcea7" + }, + { + "url": "assets/js/37.b19fcf17.js", + "revision": "878c6271df276086433eb5bc0f51980c" + }, + { + "url": "assets/js/38.6435510e.js", + "revision": "e9975c4adce680fd9427257d6ecc27d3" + }, + { + "url": "assets/js/39.b9e9e2a9.js", + "revision": "b1378bf5fc8215044077a8f0ab80bffb" + }, + { + "url": "assets/js/4.3f7b3292.js", + "revision": "313a750da9cfaafa73e9781615f0cf05" + }, + { + "url": "assets/js/40.6171c3df.js", + "revision": "80b1f2790036e3f74ec93358506f4bba" + }, + { + "url": "assets/js/41.ba826bc0.js", + "revision": "cb8409991c9b7388ca6e83a6045bdf1c" + }, + { + "url": "assets/js/42.fca6bed1.js", + "revision": "f7288bcf3096f790cf05b5322d17cbfb" + }, + { + "url": "assets/js/43.80f667bd.js", + "revision": "2a9f2ed576c22c17648b65f7ade11d4e" + }, + { + "url": "assets/js/44.85179752.js", + "revision": "119c12959264c80c5be0eedf447e6b39" + }, + { + "url": "assets/js/45.ce7459eb.js", + "revision": "66cb293abf5659a8df6c2800ebe87412" + }, + { + "url": "assets/js/46.a8532aaf.js", + "revision": "df740f00649c6aad2851e06c7d0dfa15" + }, + { + "url": "assets/js/47.a4e7ac09.js", + "revision": "e0957136868d47c9aed4e0c37faaba1e" + }, + { + "url": "assets/js/48.4309c0ce.js", + "revision": "d4febbafeab03817b2c4413037da2e73" + }, + { + "url": "assets/js/49.ee2a8657.js", + "revision": "04dd5c2052f1122f1a5688e923100fc7" + }, + { + "url": "assets/js/5.0ba51305.js", + "revision": "590babcbc8315376953f07ca820e3d2a" + }, + { + "url": "assets/js/50.d5f2bf3a.js", + "revision": "20e1452063cd24331675cff026e11cf0" + }, + { + "url": "assets/js/51.02236bf9.js", + "revision": "1600a1777f1bddd7f8993248ac542a05" + }, + { + "url": "assets/js/52.2595ed1a.js", + "revision": "9f4ef3e8ae98c75713157a1805d3d51c" + }, + { + "url": "assets/js/53.dd4d403b.js", + "revision": "cab53d6065f89b6435b66a7ee4c65987" + }, + { + "url": "assets/js/54.5c0aa06e.js", + "revision": "06456548fcf5891cee008c07ba0837d9" + }, + { + "url": "assets/js/55.40cfc439.js", + "revision": "4ea869bf7aa48012c46900daa0eb74c8" + }, + { + "url": "assets/js/56.4509d09b.js", + "revision": "e3d3cd53be3fb6105848c5343168a9f3" + }, + { + "url": "assets/js/57.2211c258.js", + "revision": "5fcf25fe2165c89c719f8bb10e833256" + }, + { + "url": "assets/js/58.aac804c0.js", + "revision": "860bad13dbe1f0eecced76a04ca625d7" + }, + { + "url": "assets/js/6.f09342d1.js", + "revision": "34ebf111acfa098de6bbb5975358adc0" + }, + { + "url": "assets/js/7.d845ccec.js", + "revision": "d9928123b46d1cc314c3b2fd3958b3ac" + }, + { + "url": "assets/js/8.c093f6f5.js", + "revision": "6ceb4be9913fb2bd5e35a5b02ac05fdf" + }, + { + "url": "assets/js/9.090ea5c0.js", + "revision": "15e3edb11213356882d45e294b95b033" + }, + { + "url": "assets/js/app.f660ad3d.js", + "revision": "08ea9f7eef346f058bb6199f911ba6fe" + }, + { + "url": "chevereto.svg", + "revision": "06eba18f49672a53b977251cdc8e83e6" + }, + { + "url": "developer/api/api-v1.html", + "revision": "3c354b64d950173448c77f89c8032de7" + }, + { + "url": "developer/api/api-v4.html", + "revision": "4ec012709065568ccef7096cc4339e8f" + }, + { + "url": "developer/customization/language.html", + "revision": "13e8a08f7cac81c5e339a2d7b14b2cd2" + }, + { + "url": "developer/customization/routes.html", + "revision": "fc93690f121f05463cf0223c3ae55106" + }, + { + "url": "developer/customization/theme.html", + "revision": "ac2480f50a2469ef37bde2fd84ea6b46" + }, + { + "url": "developer/how-to/debug.html", + "revision": "bb75a95ac08efbba15119ecedecf9b3a" + }, + { + "url": "developer/how-to/repl.html", + "revision": "06041c104ff0b9f6bf11f2066e8394ba" + }, + { + "url": "developer/how-to/troubleshoot.html", + "revision": "d620215672960ae9c71ac913f7cee92e" + }, + { + "url": "guides/cpanel/app-files.html", + "revision": "0ebf613fa340121be01f214a972e4e03" + }, + { + "url": "guides/cpanel/cron.html", + "revision": "fc1e9b83427cab635c0de0deb276f993" + }, + { + "url": "guides/cpanel/database.html", + "revision": "ac343738b42368bfd17ebda3b9506cd2" + }, + { + "url": "guides/cpanel/ffmpeg.html", + "revision": "df7193e98bcf5220e53701c144810496" + }, + { + "url": "guides/cpanel/index.html", + "revision": "0cb8c8e3611f2eafe78745732fc2f75c" + }, + { + "url": "guides/cpanel/php.html", + "revision": "70d79c4179e188d9640f37a686e629ab" + }, + { + "url": "guides/docker/index.html", + "revision": "2a8039d9add8b274143500e532048418" + }, + { + "url": "guides/docker/pure-docker.html", + "revision": "88762d3f82d988a5cb8977c62bab5d51" + }, + { + "url": "guides/index.html", + "revision": "a676e8c02cc341c908d4c844cbd51ee2" + }, + { + "url": "guides/plesk/app-files.html", + "revision": "7c621bc6ef9cfe3e5599ddc94526437b" + }, + { + "url": "guides/plesk/cron.html", + "revision": "db23a30d0c17ba9c699d9d992a090792" + }, + { + "url": "guides/plesk/database.html", + "revision": "190117943596104d6b38f7677e117c16" + }, + { + "url": "guides/plesk/ffmpeg.html", + "revision": "6172410f43879e450c841cb8ebb74b3f" + }, + { + "url": "guides/plesk/index.html", + "revision": "c23951912e54b8471e3c6d21cf491783" + }, + { + "url": "guides/plesk/php.html", + "revision": "f53efa6f849441476ea1a1c8fd9278ae" + }, + { + "url": "guides/server/vps.html", + "revision": "41323567446f5ba7e84ca2d92c7b60c2" + }, + { + "url": "icons/android-chrome-192x192.png", + "revision": "e8b5fa3160306f249145821b4cfeae43" + }, + { + "url": "icons/android-chrome-512x512.png", + "revision": "8ac630b2b40dca3cd21aadc83f4a26b0" + }, + { + "url": "index.html", + "revision": "ede6eb0c948f20968e588227af04b841" + }, + { + "url": "introduction/changelog/4.0.html", + "revision": "426458f3aeea4ff4edd2a9805bbd32a7" + }, + { + "url": "introduction/changelog/4.1.html", + "revision": "e0b5b13374cafdcc3edd40473972f5a5" + }, + { + "url": "introduction/changelog/4.2.html", + "revision": "12b63362844679d57132653d3f0c4ee4" + }, + { + "url": "introduction/changelog/welcome-back.html", + "revision": "496a1b654faf1b7e8a4080af9fbc36c6" + }, + { + "url": "introduction/get-started/contributing.html", + "revision": "696ffefc467539a62c2eed4c3a65be87" + }, + { + "url": "introduction/get-started/copyright.html", + "revision": "a5fa70ae00233ebe76f41584c2184149" + }, + { + "url": "introduction/get-started/links.html", + "revision": "1cbf21870ab750e15a4c54f3e7346590" + }, + { + "url": "introduction/get-started/welcome.html", + "revision": "8c52696f223fd3cb85ec831e757e4f3e" + }, + { + "url": "logo.png", + "revision": "17ccf330d6168c2a694bc5dd3edb0c5d" + }, + { + "url": "logo.svg", + "revision": "fbf1f71e002568a8b5a8ec28c3caa73a" + }, + { + "url": "manual/admin.html", + "revision": "161687246cf8357042174fcd4f30a352" + }, + { + "url": "manual/user.html", + "revision": "df75c85603353e50eae0acbed17ed6d7" + } +].concat(self.__precacheManifest || []); +workbox.precaching.precacheAndRoute(self.__precacheManifest, {}); +addEventListener('message', event => { + const replyPort = event.ports[0] + const message = event.data + if (replyPort && message && message.type === 'skip-waiting') { + event.waitUntil( + self.skipWaiting().then( + () => replyPort.postMessage({ error: null }), + error => replyPort.postMessage({ error }) + ) + ) + } +})