více aplikací na jednom serveru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
vichpetr
Člen | 11
+
0
-

Ahoj,

na jednom webovém serveru mi dvě aplikace a stává se mi, že se mi obsah jednoho webu zobrazuje na druhém (co jsem tak pochopil z dokumentace a diskuze, tak je to způsobuje cache pro latte soubory). Našel jsem na foru diskuze, které jsou dost staré a nijak mi nepomohli

  1. https://forum.nette.org/…he-to-nechci
  2. https://forum.nette.org/…vaci-cookies
  3. https://forum.nette.org/…he-to-nechci

Zkoušel jsem i dočasně cache úplně vypnout jak je psané v dokumentaci. Sice se mi už potom nevytvořil adresář cache v tempu aplikace, ale efekt byl stále stejný.

services:
        cacheStorage:
                class: Nette\Caching\Storages\DevNullStorage

a jak je psané v první odkazu na forum, zkoušel jsem nastavit i vlastní memcache. Nette hlásí chybu, že PHP extension ‚memcache‘ is not loaded. i když bych měl mít memcache rozšíření zapnuté.

Můžete mi, prosím, poradit jak správně opravit nastavení?
Díky.

Jan Mikeš
Člen | 771
+
0
-

Ahoj, jak vypadá tvoje adresářová struktura, mají obě aplikace vlastní root a temp složky, nebo něco sdílejí?

vichpetr
Člen | 11
+
0
-

Ahoj,

Aplikace mají vlastní root a nic mezi sebou (alespoň vědomě) nesdílejí.

S struktura je
app
temp
log
vendor
www

Webroot mám nastavený do www. Každou aplikaci „vlastní“ jiný linuxový uživatel.

GEpic
Člen | 566
+
0
-

Mám na serveru cca 15 Nette projektů, a nikdy se mi toto nikde nestalo :-O . Vše pod stejným loginem, jen pokaždé jiný open_basedir a document_root

Editoval GEpic (26. 7. 2016 16:13)

vichpetr
Člen | 11
+
0
-

document root, myslíš z apache? a open_basedir se nastavuje kde?

Já jsem udělal dvě na sobě nezávislé Nette applikace (na localhostu – wamp, jsem neměl problém) a když jsem je nasadil na ostrý web, tak jsem zjistil, že problém je …

Už mě nenapadá čím to může být. Mohli by na to mít práva v systému?

Díky za jakýkoli nápad.

GEpic
Člen | 566
+
0
-

vichpetr napsal(a):

document root, myslíš z apache? a open_basedir se nastavuje kde?

Já jsem udělal dvě na sobě nezávislé Nette applikace (na localhostu – wamp, jsem neměl problém) a když jsem je nasadil na ostrý web, tak jsem zjistil, že problém je …

Už mě nenapadá čím to může být. Mohli by na to mít práva v systému?

Díky za jakýkoli nápad.

Ano, myslím apache, každý projekt má vlastní nastavení.

vichpetr
Člen | 11
+
0
-

A můžeš mu prosím poslat nějakou ukázkovou konfiguraci?

Díky

vichpetr
Člen | 11
+
0
-

Já mám pro každou aplikaci taky svoji konfiguraci … tady je ukázka mojí konfigurace.

<VirtualHost *:80>
        ServerAdmin webmaster@petrvich.eu
        ServerName moje.domena
        ServerAlias www.moje.domena
        DocumentRoot /home/../www
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
newPOPE
Člen | 648
+
0
-

@vichpetr neviem teda co presne myslis. Pises, ze maju spolocny root. Tym myslis, ze bezia na jednom stroji predpokladam. Cize su v roznych adresaroch ⇒ nic nezdielaju (okrem nejakych sharovanych sluzieb ako memcache, redis, … co defaultne nemaju preco ak si nic neprestavoval).

Ja sice bezim projekty cez Docker ale tie tvoje app nemaju preco tak blbnut. Skor by som to videl na nejake blbe nastavenie Apache a virtualhostov. Hodi ti to nieco ked do browsera napises IP toho serveru? Ktory z projektov alebo sa neukaze nie? Apache ma nejaky default.

vichpetr
Člen | 11
+
0
-

já jsem se asi trochu zamotal v pojmech …

  • každá aplikace má vlastní document root (myslím documentRoot v konfiguraci virtualhostu na apache).
  • každá aplikace je ve svém adresáři, kde je struktura jak jsem psal výše …
    • appName
      • app
      • temp
      • log
      • www
      • vendor
    • app2Name
      • app
      • temp
      • log
      • www
      • vendor

A documentRoot je nasměrovaný do adresáře www. Není mi jasné z jakého důvodu by to mělo mít něco společného s Nette, ale serveru i další php aplikace (převážně wordpress) a s tím žádné problémy nejsou.

U apache mám default, takže po zadání IP adresy se ukáže default.

Zkoušel jsem ještě natavit open_base_dir jak psal @GEpic, ale výsledek žádný.

Když jsem pročítal error.log, tak jsem si v všiml, že se mi tam objevují cesty ke knihovnám (adresář vendor) z druhé aplikace …

CZechBoY
Člen | 3608
+
0
-

No a co máš v index.php potažmo app/bootstrap.php?

vichpetr
Člen | 11
+
0
-

index.php

<?php

$container = require __DIR__ . '/../app/bootstrap.php';
$container->getByType('Nette\Application\Application')->run();

boostrap.php

<?php

require __DIR__ . '/../vendor/autoload.php';

$configurator = new Nette\Configurator;

//$configurator->setDebugMode(false); // enable for your remote IP
$configurator->enableDebugger(__DIR__ . '/../log');

$configurator->setTempDirectory(__DIR__ . '/../temp');

$configurator->createRobotLoader()
	->addDirectory(__DIR__)
	->register();

$configurator->addConfig(__DIR__ . '/config/config.neon');

$container = $configurator->createContainer();

return $container;

Ale asi to bude opravdu nastavení apache. Jak jsem včera popsal chybu – s tím, že mi jeden web čte knihovny z druhého. Stalo se mi to u wordpresu, že se mi propsalo nastavení pluginu do více webu …

Možná to je blbost, ale příšlo mi to jako by v kontantě __DIR__ byla hodnota do knihoven druhého webu…

jannek19
Člen | 47
+
0
-

Třeba máš špatně nastavené PHP-FPM (pokud používáš). Třeba při requestu bere soubory z jiné složky, než kam ukazuje DocumentRoot v Apache.

Editoval jannek19 (28. 7. 2016 10:24)

vichpetr
Člen | 11
+
0
-

Můžeš to, prosím trochu více popsat? Moc jsem nepochopil co myslíš.

Zkusil jsem jednoduchý testík. Do render metody v presenteru jsem si dal

dump(__DIR__)

a na v prohlížečí mi to vypsalo cestu k souborům druhé aplikace.

jannek19
Člen | 47
+
0
-

No máš víceméně 2 možnosti, jak ti může běžet PHP na serveru:

  1. jako modul do Apache – většinou stačí jen nainstalovat a jedeš
  2. případně jako PHP-FPM – musíš to správně nastavit, protože jinak o sobě Apache a PHP vlastně neví, každý funguje jako samostatný „server“

Pokud používáš PHP-FPM je několik možnosti, jak donutit Apache, aby přeposílal požadavky na PHP:

  1. buď použiješ proxy (viz https://wiki.apache.org/httpd/PHP-FPM), podle těch příkladů tam pak předáváš ručně cestu do nějakého rootu
  2. nebo přes direktivu FastCgiExternalServer (viz https://www.howtoforge.com/…tu-12.04-lts, případně tady https://www.linode.com/…-with-apache)

Může se tak stát, že máš nesprávně nastavený Apache a díky tomu sice přijde požadavek na aplikaci A, ale Apache to přepošle do PHP s cestou, která míří do aplikace B.

Víc ti k tomu asi neřeknu, už je to fakt dlouho, co jsem PHP-FPM instaloval, ale na Google je návodů dost.

bohumir
Backer | 3
+
+2
-

Ahoj,
vyzkoušej si nastavit session name v config.neon

session:
name: TESTXYZ
expiration: 14 days

a pro každý projekt zvol jiné jméno session. Pak by se ti to mělo v rámci 1 domény přestat mezi sebou mlátit :-)