diff --git a/docs/apps/lamp.md b/docs/apps/lamp.md new file mode 100644 index 0000000..716d8f5 --- /dev/null +++ b/docs/apps/lamp.md @@ -0,0 +1,411 @@ +# LAMP Aplikace + +## O aplikaci + +Provozování LAMP aplikací na OSCloud není odlišné od toho, co je dostupné na mnoha hostingových poskytovatelích. Svůj PHP kód můžete nahrát pomocí SFTP nebo pomocí [Správce souborů](/apps#file-manager) a následně upravit soubory `.htaccess` a `php.ini` dle potřeby. Většina běžně používaných [PHP rozšíření](#php-rozšíření) je předinstalována a nemusíte se starat o jejich aktualizaci. + +Hlavní výhody používání OSCloud k hostování LAMP aplikací jsou: + +* Automatická konfigurace DNS, instalace a obnova SSL certifikátů Let's Encrypt. +* Možnost využívat MySQL, Redis a odesílat e-maily. +* Nemusíte se starat o zálohy aplikací a serveru, obnovení a aktualizace, protože o to se stará OSCloud. +* Provoz více LAMP aplikací, izolovaných od sebe, na stejném serveru. + +## Podporované verze PHP + +Aplikace LAMP podporuje následující verze PHP: + +* 7.4 +* 8.0 +* 8.1 +* 8.2 +* 8.3 (výchozí) + +Chcete-li změnit verzi PHP, upravte soubor `/app/data/PHP_VERSION` pomocí [Správce souborů](/apps/#file-manager) a restartujte aplikaci. + +!!! warning "PHP CLI" + Binární soubor `php` je pevně nastaven na používání PHP 8.3. V případě skriptů použijte explicitně `php8.0`, `phar8.0` a podobně. + +## Nahrávání souborů + +Soubory LAMP aplikace lze nahrát pomocí [Správce souborů](/apps/#file-manager) nebo SFTP. + +### SFTP + +Aplikace může být nahrána pomocí SFTP klienta, například [FileZilla](https://filezilla-project.org/). + +Přihlašovací údaje pro SFTP naleznete v nabídce "Dokumentace". + +
+ +
+ +
+ +
+ + +!!! poznámka "SFTP přístup" + SFTP přístup pro neadministrátorské uživatele může být povolen pomocí role [operátor](/apps/#operators). + +## Nastavení PHP + +Vlastní [nastavení PHP](http://php.net/manual/en/ini.core.php) lze přidat dvěma způsoby: + +* Konfigurace Apache aplikace - `/app/data/apache/app.conf` +* Pomocí htaccess - `/app/data/public/.htaccess` + +Tyto soubory lze upravit pomocí [Správce souborů](/apps#file-manager). Nastavení s [módem](http://php.net/manual/en/configuration.changes.modes.php) `PHP_INI_SYSTEM` nelze nastavit v htaccess souborech. + +Příklad konfigurace htaccess: + +```php +php_value post_max_size 600M +php_value upload_max_filesize 600M +php_value memory_limit 128M +php_value max_execution_time 300 +php_value max_input_time 300 +php_value session.gc_maxlifetime 1200 +``` +## Nastavení Apache + +Vlastní nastavení [Apache](https://httpd.apache.org/docs/current/howto/htaccess.html) lze přidat dvěma způsoby: + +* Konfigurace Apache aplikace - /app/data/apache/app.conf +* Pomocí htaccess - /app/data/public/.htaccess + +Soubory výše lze upravit pomocí Správce souborů. Po provedení změn nezapomeňte aplikaci restartovat. + +Příklad konfigurace htaccess: + +```bash +ServerSignature Off +``` + +## Vlastní HTTP hlavičky + +Vlastní HTTP hlavičky lze nastavit v souboru `/app/data/public/.htaccess`. Modul apache mod_headers je již povolen. Podívejte se na tento článek pro více informací. + +## PHP rozšíření + +Aplikace LAMP již obsahuje většinu populárních PHP rozšíření, včetně následujících: + +- php-apcu +- php-cli +- php-curl +- php-fpm +- php-gd +- php-gmp +- php-imap +- php-intl +- php-json +- php-mbstring +- php-mcrypt +- php-mysql +- php-mysqlnd +- php-pgsql +- php-redis +- php-sqlite +- php-xml +- php-xmlrpc +- php-zip + +Kompletní seznam předinstalovaných rozšíření naleznete v defaultním souboru index.php aplikace, který vypíše `phpInfo()`. + +## Instalace vlastních PHP rozšíření + +Aplikace LAMP podporuje instalaci vlastních PHP rozšíření. Jako příklad si nainstalujeme [ionCube Loader](https://www.ioncube.com/), který je často vyžadován pro instalaci komerčních PHP aplikací. + +!!! poznámka "ionCube je již nainstalován" Aplikace LAMP má vestavěnou podporu pro ionCube. Níže uvedené kroky jsou pouze příkladem. + +### Krok 1: Stažení rozšíření + +Stáhněte a rozbalte balíčky ionCube pro Linux 64-bit (tar.gz nebo zip) z webu ionCube nebo použijte přímý odkaz. + +### Krok 2: Nahrání pomocí SFTP + +Nahrajte rozbalený adresář do kořenového adresáře SFTP (/app/data) aplikace OSCloud (tj. jednu úroveň nad public/). + +
+ +
+ + +### Krok 3: Povolení rozšíření + +V kořenovém adresáři aplikace OSCloud (v /app/data) najdete soubor php.ini. + +Přidejte následující řádek pro povolení rozšíření (přidejte jej před mnoho ;extension řádků): + +```bash +zend_extension=/app/data/ioncube/ioncube_loader_lin_7.2.so +``` + +Aplikace LAMP má deaktivovanou podporu pro thread safety, proto zvolte rozšíření bez přípony `ts`. + +### Krok 4: Restart aplikace + +Nakonec restartujte aplikaci, aby se povolilo rozšíření. + +### Krok 5: Ověření instalace + +Navštivte výchozí stránku aplikace LAMP a ověřte, zda je rozšíření povoleno. + +
+ +
+ + +## Konfigurace MySQL + +Přihlašovací údaje k databázi naleznete v souboru `/app/data/credentials.txt` pomocí [správce souborů](https://). + +Technicky vzato jsou přihlašovací údaje MySQL zpřístupněny aplikaci jako proměnné prostředí. Tyto proměnné se mohou časem měnit. Tento přístup umožňuje OSCloud pravidelně měnit heslo k databázi jako bezpečnostní opatření a také umožňuje snadnou migraci aplikací mezi různými instalacemi OSCloud. + +Zveřejněné proměnné prostředí jsou: + +```bash +CLOUDRON_MYSQL_URL= # MySQL URL (pouze pokud používáte jednu databázi) +CLOUDRON_MYSQL_USERNAME= # Uživatelské jméno +CLOUDRON_MYSQL_PASSWORD= # Heslo +CLOUDRON_MYSQL_HOST= # IP adresa nebo hostname serveru +CLOUDRON_MYSQL_PORT= # Port serveru +CLOUDRON_MYSQL_DATABASE= # Název databáze (pouze pokud používáte jednu databázi) +``` +Pokud má PHP aplikace konfigurační soubor `config.php`, který vyžaduje přihlašovací údaje k MySQL, mohou být nastaveny takto: + +```php-template +'db' => array ( + 'hostname' => getenv("CLOUDRON_MYSQL_HOST"), + 'username' => getenv("CLOUDRON_MYSQL_USERNAME"), + 'password' => getenv("CLOUDRON_MYSQL_PASSWORD"), + 'database' => getenv("CLOUDRON_MYSQL_DATABASE") +), // Konfigurace databáze +``` + +Některé aplikace zobrazují instalační obrazovku a budou vyžadovat surové přihlašovací údaje MySQL. Tyto přihlašovací údaje lze získat pomocí Správce souborů v souboru `/app/data/credentials.txt`. + +
+ +
+ +**Důležité** Jakmile je instalace dokončena, ujistěte se, že jste v konfiguračním souboru aplikace přešli na použití proměnných prostředí pomocí `getenv()` namísto surových přihlašovacích údajů. Jinak by budoucí aktualizace mohly aplikaci narušit. + +### Přizpůsobení MySQL + +Na OSCloud je server MySQL sdílen mezi všemi aplikacemi. Každá aplikace získá přihlašovací údaje bez oprávnění roota, což zajišťuje jejich vzájemnou izolaci. To znamená, že nelze nastavit MySQL specificky pro jednu aplikaci. + +Nicméně mnoho [proměnných MySQL](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html), jako například `sql_mode`, může být nastaveno na relaci úpravou vašeho kódu takto: + +```php +// připojte se k MySQL a spusťte první dotaz +mysql_query("SET SESSION SQL_MODE = 'TRADITIONAL'"); +mysql_query("SET SESSION UNIQUE_CHECKS = false"); +mysql_query("SET SESSION FOREIGN_KEY_CHECKS=0"); +``` +## phpMyAdmin + +phpMyAdmin je přístupný na adrese `/phpmyadmin` aplikace. Používá základní ověřování přes soubor htpasswd a je přednastaven s administrátorským účtem a vygenerovaným heslem. Heslo naleznete v souboru `phpmyadmin_login.txt`, spolu s detaily o správě dalších uživatelů. + +
+
+ +
+
+ + +Pokud přístup přestane fungovat, jednoduše odstraňte soubor `.phpmyadminauth` a restartujte aplikaci. Tím se vygenerují nové přihlašovací údaje pro phpMyAdmin. + +## Deaktivace phpMyAdmin + +Je dobrým bezpečnostním postupem phpMyAdmin po jeho použití deaktivovat. Pro deaktivaci upravte soubor /app/data/apache/app.conf pomocí Správce souborů a komentujte následující řádek: + +```bash +# Tento řádek můžete zakomentovat, pokud nepotřebujete přístup k PHPMyAdmin +# Include "/app/code/apache/phpmyadmin.conf" +``` + +Nezapomeňte aplikaci restartovat po provedení výše uvedené změny. + +## Email + +Na OSCloud jsou přihlašovací údaje k e-mailu zpřístupněny aplikaci jako proměnné prostředí. + +Zveřejněné proměnné prostředí jsou: + +```bash +CLOUDRON_MAIL_SMTP_SERVER # SMTP server +CLOUDRON_MAIL_SMTP_PORT # Port SMTP serveru +CLOUDRON_MAIL_SMTPS_PORT # Port SMTPS serveru (pro legacy aplikace) +CLOUDRON_MAIL_SMTP_USERNAME # Uživatelské jméno +CLOUDRON_MAIL_SMTP_PASSWORD # Heslo +CLOUDRON_MAIL_FROM # MAIL FROM adresa. Pro změnu viz [tento odkaz](/apps/#mail-from-address) +CLOUDRON_MAIL_DOMAIN # Doména e-mailu +``` + +Můžete použít `getenv()` pro získání hodnot výše uvedených proměnných prostředí v kódu. Surové hodnoty lze získat pomocí Správce souborů v souboru `/app/data/credentials.txt`. + +**Upozornění: Vestavěná funkce PHP mail() nefunguje** Používá lokální binární soubor sendmail, který není nakonfigurován na OSCloud. + +Můžete použít [PHPMailer](https://packagist.org/packages/phpmailer/phpmailer) k odesílání e-mailů (nainstalováno pomocí composer require phpmailer/phpmailer): + +```php +SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output + $mail->isSMTP(); //Send using SMTP + $mail->Host = getenv('CLOUDRON_MAIL_SMTP_SERVER'); //Set the SMTP server to send through + $mail->SMTPAuth = true; //Enable SMTP authentication + $mail->Username = getenv('CLOUDRON_MAIL_SMTP_USERNAME'); //SMTP username + $mail->Password = getenv('CLOUDRON_MAIL_SMTP_PASSWORD'); //SMTP password + $mail->SMTPSecure = ''; + $mail->Port = getenv('CLOUDRON_MAIL_SMTP_PORT'); + + //Recipients + $mail->setFrom(getenv('CLOUDRON_MAIL_FROM'), 'Mailer'); + $mail->addAddress('test@cloudron.io', 'Cloudron Test'); //Add a recipient + + //Content + $mail->isHTML(true); //Set email format to HTML + $mail->Subject = 'Here is the subject'; + $mail->Body = 'This is the HTML message body in bold!'; + $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; + + $mail->send(); + echo 'Message has been sent'; +} catch (Exception $e) { + echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; +} +``` +## Redis + +Na OSCloud jsou přihlašovací údaje k Redis zpřístupněny aplikaci jako proměnné prostředí. + +Zveřejněné proměnné prostředí jsou: + +```bash +CLOUDRON_REDIS_URL # Redis URL ve formátu redis://username:password@host:port +CLOUDRON_REDIS_HOST # Hostname serveru Redis +CLOUDRON_REDIS_PORT # Port serveru Redis +CLOUDRON_REDIS_PASSWORD # Heslo Redis +``` + +Můžete použít `getenv()` pro získání hodnot výše uvedených proměnných prostředí v kódu. Surové hodnoty lze získat pomocí Správce souborů v souboru `/app/data/credentials.txt`. + + +## LDAP + +Na OSCloud jsou přihlašovací údaje k LDAP zpřístupněny aplikaci jako proměnné prostředí. + +Zveřejněné proměnné prostředí jsou: + +```bash +CLOUDRON_LDAP_SERVER= # IP adresa LDAP serveru +CLOUDRON_LDAP_HOST= # IP adresa LDAP serveru (stejná jako výše) +CLOUDRON_LDAP_PORT= # Port LDAP serveru +CLOUDRON_LDAP_URL= # URL LDAP serveru ve formátu ldap://ip:port +CLOUDRON_LDAP_USERS_BASE_DN= # Základní DN uživatelů LDAP ve formátu ou=users,dc=oscloud +CLOUDRON_LDAP_GROUPS_BASE_DN= # Základní DN skupin LDAP ve formátu ou=groups,dc=oscloud +CLOUDRON_LDAP_BIND_DN= # DN pro provádění požadavků LDAP +CLOUDRON_LDAP_BIND_PASSWORD= # Heslo pro provádění požadavků LDAP +``` + +Chcete-li chránit web pomocí základního ověřování LDAP, použijte následující konfiguraci Apache: + +```apache + + Options +FollowSymLinks + AllowOverride None + Require valid-user + AuthName "OSCloud LDAP Authentication" + AuthBasicProvider ldap + AuthType Basic + AuthLDAPURL ${CLOUDRON_LDAP_URL}/${CLOUDRON_LDAP_USERS_BASE_DN}?username?sub?(username=*) + AuthLDAPBindDN ${CLOUDRON_LDAP_BIND_DN} + AuthLDAPBindPassword ${CLOUDRON_LDAP_BIND_PASSWORD} + +``` + +## Vlastní startovací skript + +Vlastní startovací skript lze umístit do `/app/data/run.sh`. Například: + +```bash +#!/bin/bash + +echo "Tento skript je volán před spuštěním aplikace." + +# Vytvoření symlinků +rm -rf /app/data/var/cache +mkdir -p /run/cache +ln -sf /run/cache /app/data/var/cache +``` + +## Composer + +composer, npm a další běžné nástroje jsou nainstalovány z obrazového souboru OSCloud. Pro spuštění těchto nástrojů přepněte nejprve na uživatele www-data (většina by neměla být spuštěna jako root). + +```bash +su - www-data +cd /app/data/public # zde je umístěn PHP kód +composer require drush/drush +npm install +``` +!!! note "Memory limit" +Aplikace LAMP běží s 256 MB RAM jako výchozí nastavení, což nemusí být dostatečné pro Composer a další nástroje. Pokud vidíte chybovou zprávu Killed, zvyšte limit paměti aplikace na 1 GB. + +## Laravel + +Chcete-li spustit aplikace Laravel, viz tento článek. +Nastavení reverzní proxy + +Pokud chcete například provozovat vlastní WordPress v rámci této aplikace, kód bude běžet za nginx proxy. Aplikace jako WordPress vyžadují určitý kód ve `wp-config.php`, aby tuto konfiguraci zpracovaly: + +```bash +/* + http://cmanios.wordpress.com/2014/04/12/nginx-https-reverse-proxy-to-wordpress-with-apache-http-and-different-port/ + http://wordpress.org/support/topic/compatibility-with-wordpress-behind-a-reverse-proxy + https://wordpress.org/support/topic/wp_home-and-wp_siteurl + */ +// If WordPress is behind reverse proxy which proxies https to http +if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { + $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST']; + + if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') + $_SERVER['HTTPS']='on'; +} +``` + +## Kontrola stavu + +Aplikace LAMP očekává odpověď 2xx z cesty '/'. Pokud je vaše aplikace zcela chráněna, kontrola stavu může označit vaši aplikaci jako neodpovídající namísto běžící. + +Můžete to obejít přidáním následujícího kódu do `/app/data/public/.htaccess`: + +```apache +RewriteEngine On +RewriteCond %{HTTP_USER_AGENT} OSCloudHealth +RewriteRule ^ - [R=200] +``` + +Případně přidejte něco takového do config.php nebo index.php aplikace: + +```php +if ($_SERVER["REMOTE_ADDR"] == '172.18.0.1') { + echo "OSCloud kontrola stavu odpověď"; + exit; +} +``` \ No newline at end of file diff --git a/docs/img/lamp-filezilla-crontab.png b/docs/img/lamp-filezilla-crontab.png new file mode 100644 index 0000000..c5448d7 Binary files /dev/null and b/docs/img/lamp-filezilla-crontab.png differ diff --git a/docs/img/lamp-filezilla.png b/docs/img/lamp-filezilla.png new file mode 100644 index 0000000..35cadbf Binary files /dev/null and b/docs/img/lamp-filezilla.png differ diff --git a/docs/img/lamp-ioncube-installed.png b/docs/img/lamp-ioncube-installed.png new file mode 100644 index 0000000..fbde39f Binary files /dev/null and b/docs/img/lamp-ioncube-installed.png differ diff --git a/docs/img/lamp-logo.png b/docs/img/lamp-logo.png new file mode 100644 index 0000000..38e5ed5 Binary files /dev/null and b/docs/img/lamp-logo.png differ diff --git a/docs/img/lamp-phpmyadmin.png b/docs/img/lamp-phpmyadmin.png new file mode 100644 index 0000000..2256b4d Binary files /dev/null and b/docs/img/lamp-phpmyadmin.png differ diff --git a/docs/img/lamp-sftp-info.png b/docs/img/lamp-sftp-info.png new file mode 100644 index 0000000..e62bc89 Binary files /dev/null and b/docs/img/lamp-sftp-info.png differ diff --git a/docs/img/lamp-upload-ioncube.png b/docs/img/lamp-upload-ioncube.png new file mode 100644 index 0000000..56dab01 Binary files /dev/null and b/docs/img/lamp-upload-ioncube.png differ diff --git a/docs/img/lamp-webterminal-mysql.png b/docs/img/lamp-webterminal-mysql.png new file mode 100644 index 0000000..117cb24 Binary files /dev/null and b/docs/img/lamp-webterminal-mysql.png differ