Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SF2][Symfony2] Umieszczenie projektu na hostingu
Forum PHP.pl > Forum > Przedszkole
kosmos
Witam,
dodaję temat w tym dziale, ponieważ w dziale z frameworkami, komunikat o tagach nie pozwolił mi na zamieszczenie tematu pomimo iż je dodałem.
Jestem początkujący w temacie frameworków i chciałbym spytać jak należy umieścić projekt na serwerze np. hekko
Obecnie stronę główną odpalam z adresu na lokalnym serwerze http://localhost/symfony/web/app_dev.php/homepage/ i wszystko działa.
Znalazłem kilka podobnych tematów ale niestety wiele nie zrozumiałem ... chodzi mi o to jakie katalogi projektu powinienem wrzucić na serwer, jakich konfiguracji dokonać, oraz jaką ścieżkę podpiąć do domeny.

Pozdrawiam
Mariner
Nie wiem jak jest na hekko.
Zamiast ręcznie przenosić pliki za kazdym razem gdy zmieniasz coś w kodzie na komputrze lokalnym, wykorzystaj rsync do synchronizacji plikow z komuterem zdalnym. Na produkcję przenosisz wszystkie pliki, ew. poza plikami jakichś uploadowanych zdjęć w katalogu web. Na komputerze zdalnym domena powinna wskazywać oczywiście na katalog web projektu.
TajnyCzek
Ja jako początkujący zrobiłem tak, zę postawiłem virual hosta, zaisntalowałem ubuntu 14.
Do tego pełna konfiguracja serwera LAMP, vsftpd i openssh.
Następnie zainstalowałem tam projekt symfony.

Używam IDE NetBeans i skonfigurowałem go tak, aby móc się łączyć z serwerem virutalnym.
Męczyłem się z tym z 2-3dni, ale dużo się nauczyłem smile.gif
(Nie zniechęcaj się, bo dopiero za 4 razem dobrze virtualna maszynę skonfigurowałem)

@UPDATE
Te umiejętności pozwolą Ci na skonfigurowanie płatnego VPS'a smile.gif
kosmos
Mariner
Czyli odnosząc się do poniższego adresu który przytoczyłem, podpinam po prostu domenę do katalogu web i tyle?


Dodatkow chciałbym spytać ... teraz peojekt jest robiony w środowisku deweloperskim. Co muszę zrobić oraz jak aby odpalić go w środowisku produkcyjnym? Jak rozumiem docelowym na hekko.
Forti
Powiem Ci co zrób.

Odpal projekt lokalnie na produkcjyjnym środowisku (przez app.php, lub ustaw odpowiednio .htaccess).

w konsoli:

php app/console cache:clear --env=prod
php app/console assets:install --env=prod
php app/console assetic:dump --env=prod

jak działa tobie lokalnie to teraz najważniejsze: usuń folder app/cache/prod (dev tez, nie jest potrzebny) i NIE ODPALAC APLIKACJI. Przenieś pliki na hosting przez ftp. Folder public_http to twój folder web z symfony (zmień nazwe web na public_http lub przenieś pliki odpowiednio) i gra wink.gif apka działa. Czasami trzeba jedynie nadać prawa dla folderu app/cache na hostingu. NA hekko nie musiałem.


edit: app_dev.php to środowisko developerskie, app.php to produkcyjne. Developerskie na serwerze hekko itp. domyślnie działać nie powinno.
Mariner
Cytat(kosmos @ 14.03.2015, 16:09:34 ) *
Mariner
Czyli odnosząc się do poniższego adresu który przytoczyłem, podpinam po prostu domenę do katalogu web i tyle?


Zgadza się. Domena powinna wskazywac na katalog web. Dodatkowo sprawdź czy plik .htacess znajdujący się w katalogu web wskazuje jako plik główny na app.php ( wpis: DirectoryIndex app.php). Poprzednio zapomniałem Ci napisać, że na produkcję nie przenosisz pliku app_dev.php znajdującego się w katalogu web ponieważ plik app_dev.php odpowiada za uruchamianie projektu w środowisu developerskim.

Cytat(kosmos @ 14.03.2015, 16:09:34 ) *
Dodatkow chciałbym spytać ... teraz peojekt jest robiony w środowisku deweloperskim. Co muszę zrobić oraz jak aby odpalić go w środowisku produkcyjnym? Jak rozumiem docelowym na hekko.


Środowisko developerskie wybierasz uruchamiając projekt poprzed plik app_dev.php, środowisko produkcyjne wybierasz uruchamiając projekt poprzez app.php lub wpisując w pasek adresu przeglądarki samą domenę. Plik app.php uruchamiany jest wtedy domyślnie. Dlatego min. tylko to app.php powinien się znaleźć na środowisku produkcyjnym.

Zwracam Ci uwagę abyś - o ile to możliwe - dał sobie spokój z ftp i korzystał z rsync, phing, ssh do synchronizacji plików między komputerami. Na dłuższy dystans korzystając tylko z ftp daleko nie zajedziesz a każda synchronizacja to będzie wyzwanie zawsze obarczone ryzykiem błędów.

Dodatkowo. Piszesz że lokalnie projekt odpalasz wpisując adres "http://localhost/symfony/web/app_dev.php/homepage/". Zdaje się że powinieneś skonfigurować sobie wirtualne hosty do odpalania swoich lokalnych projektów tak aby Twój projekt odpalało się lokalnie wpisując w przeglądarkę np. myprojekt.my. Inaczej czekają cię min. problemy ze ścieżkami do zasobów, obrazów, css itp. Napisz na jakim systemie działasz to postaram Ci sie pomóc.
kosmos
Pod windą 7 na serwerze xampp.
Mariner
Odplamy notepad ( jeżeli edytowanych plików nie można zapisać, notepad należy odpalić z uprawnienami admina). W notepad otwieramy nowy plik "hosts" a szukamy go pod ścieżką C:\Winsows\System32\Drivers\etc\hosts. Do tego pliku dodajmy wpis o treści: 127.0.0.2 myproject.my , zapisujemy plik i zamykamy. Następnie edytujemy plik konfiguracyjny apache httpd.conf (nie wiem gdzie on będzie u Ciebie, zazwyczaj znajduje się w katalogu config w głownym katalogu gdzie zainstalowany jest apache), plik ten powien mieć odkomentowny taki wiersz Include conf/extra/httpd-vhosts.conf a więc odkomentować ten wiersz i zapisać plik. Następnie edytujemy tan plik httpd-vhosts.conf znajuje sie on w GŁOWNYKATLOGAPACHE/conf/extra/httpd-vhosts.conf. Dodajemy na początek wpis:

CODE
<Directory C:\wamp\www\>
Order Deny,Allow
Allow from all
</Directory>


Gdzie moje "C:\wamp\www\" ma wskazywać na Twój katalog w którym przechowywane są u Ciebie projekty.

Następnie na koniec tego pliku dodajemy
CODE
<VirtualHost 127.0.0.2:80>
ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "C:\wamp\www\myproject\web"
ServerName myproject.my

Action application/x-httpd-php "C:\wamp\bin\php\php5.5.12\php-cgi.exe"

</VirtualHost>


Gdzie:
127.0.0.2:80 to adres ip naszego projektu, każdy kolejny dodany host będzie odpowiednio miał 127.0.0.3:80, 127.0.0.4:80 , 127.0.0.5:80. Tylko przy dodawaniu nowych hostów należy pamiętać aby dodać stosowny zapis w pliku hosts.

DocumentRoot "C:\wamp\www\myproject\web" to ścieżka do katalogu web projektu

ServerName myproject.my nazwa serwera korespondująca z nazwą z pliku hosts

Action application/x-httpd-php "C:\wamp\bin\php\php5.5.12\php-cgi.exe" ten zapis wskazuje na użycie w tym hoście takiego php. Jeżeli pod danym wirualnym hostem nie będzie dostępny interpreter php to trzeba dodać ten zapis. Ścieżka wkazuje oczywiście na plik wykonawczy php, u Ciebie odpowiednio inny.

Restartujesz xampp, wchodzi w przeglądarkę wpisujesz myproject.my lub inny jaki sobie wybrałeś, i jeżeil wszystko dobrze skonfigurowaliśmy projekt odpala się na virtalnym hoście. Taka uwaga, przeglądarka za pierwszym razem moze nie wiedziec że chodzi o żądanie lokalne dlatego wyświetli odpowiedni monit ze lokalnie taki adres istnieje i czy do niego przejść.

W razie problemów pisz.
kosmos
Dziękuję bardzo - wyprubuję smile.gif

Witam,
skończyłem projekt i biorę się za instrukcje, które zawarły się w tym temacie.
Chciałbym dodatkowo spytać o polecenie freeze. Gdzies w sieci napotkałem informację że należy zamrozić projekt przed wrzuceniem go na serwer produkcyjny. Tak jest?
Jak użyć tego polecenia?
Forti
http://symfony.com/legacy/doc/book/1_0/en/...or_ftp_transfer

Nie korzystałem nigdy, ale wygląda to na ciekawą opcje. Po prostu wpisujesz

Kod
$ symfony freeze


i wrzucasz przez ftp.
kosmos
@Forti
Napisałeś wczesniej że powinienem odpalić projekt poprzez app.php
Odpal projekt lokalnie na produkcjyjnym środowisku (przez app.php, lub ustaw odpowiednio .htaccess).

Nie mogę sobie z tym poradzić

Póki co odpalam poprzez http://localhost/symfony/web/app_dev.php/homepage/

Robię to po raz pierwszy stąd moje jak mniemam ułomne pytania smile.gif

w app.php mam

  1. <?php
  2.  
  3. use Symfony\Component\ClassLoader\ApcClassLoader;
  4. use Symfony\Component\HttpFoundation\Request;
  5.  
  6. $loader = require_once __DIR__.'/../app/bootstrap.php.cache';
  7.  
  8. // Use APC for autoloading to improve performance.
  9. // Change 'sf2' to a unique prefix in order to prevent cache key conflicts
  10. // with other applications also using APC.
  11. /*
  12. $apcLoader = new ApcClassLoader('sf2', $loader);
  13. $loader->unregister();
  14. $apcLoader->register(true);
  15. */
  16.  
  17. require_once __DIR__.'/../app/AppKernel.php';
  18. //require_once __DIR__.'/../app/AppCache.php';
  19.  
  20. $kernel = new AppKernel('prod', false);
  21. $kernel->loadClassCache();
  22. //$kernel = new AppCache($kernel);
  23.  
  24. // When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter
  25. //Request::enableHttpMethodParameterOverride();
  26. $request = Request::createFromGlobals();
  27. $response = $kernel->handle($request);
  28. $response->send();
  29. $kernel->terminate($request, $response);
  30.  


w htaccess

  1. # Use the front controller as index file. It serves as a fallback solution when
  2. # every other rewrite/redirect fails (e.g. in an aliased environment without
  3. # mod_rewrite). Additionally, this reduces the matching process for the
  4. # start page (path "/") because otherwise Apache will apply the rewriting rules
  5. # to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl).
  6. DirectoryIndex app.php
  7.  
  8. <IfModule mod_rewrite.c>
  9. RewriteEngine On
  10.  
  11. # Determine the RewriteBase automatically and set it as environment variable.
  12. # If you are using Apache aliases to do mass virtual hosting or installed the
  13. # project in a subdirectory, the base path will be prepended to allow proper
  14. # resolution of the app.php file and to redirect to the correct URI. It will
  15. # work in environments without path prefix as well, providing a safe, one-size
  16. # fits all solution. But as you do not need it in this case, you can comment
  17. # the following 2 lines to eliminate the overhead.
  18. RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
  19. RewriteRule ^(.*) - [E=BASE:%1]
  20.  
  21. # Redirect to URI without front controller to prevent duplicate content
  22. # (with and without `/app.php`). Only do this redirect on the initial
  23. # rewrite by Apache and not on subsequent cycles. Otherwise we would get an
  24. # endless redirect loop (request -> rewrite to front controller ->
  25. # redirect -> request -> ...).
  26. # So in case you get a "too many redirects" error or you always get redirected
  27. # to the start page because your Apache does not expose the REDIRECT_STATUS
  28. # environment variable, you have 2 choices:
  29. # - disable this feature by commenting the following 2 lines or
  30. # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the
  31. # following RewriteCond (best solution)
  32. RewriteCond %{ENV:REDIRECT_STATUS} ^$
  33. RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
  34.  
  35. # If the requested filename exists, simply serve it.
  36. # We only want to let Apache serve files and not directories.
  37. RewriteCond %{REQUEST_FILENAME} -f
  38. RewriteRule .? - [L]
  39.  
  40. # Rewrite all other queries to the front controller.
  41. RewriteRule .? %{ENV:BASE}/app.php [L]
  42. </IfModule>
  43.  
  44. <IfModule !mod_rewrite.c>
  45. <IfModule mod_alias.c>
  46. # When mod_rewrite is not available, we instruct a temporary redirect of
  47. # the start page to the front controller explicitly so that the website
  48. # and the generated links can still be used.
  49. RedirectMatch 302 ^/$ /app.php/
  50. # RedirectTemp cannot be used instead
  51. </IfModule>
  52. </IfModule>
  53.  
ikssde
Odpalasz w konsoli te komendy które podał Forti. Potem w przeglądarce wchodzisz pod adres http://localhost/symfony/web/app.php/homepage i sprawdzasz czy wszystko działa. Jeśli tak to przenosisz projekt na serwer i to wszystko. Oczywiście folderu cache, tak jak wyżej wspomnieli nie przenoś, wystarczy, że stworzysz nowy, pusty.

@edit

Jak widzisz w htaccess masz regułkę DirectoryIndex app.php, która mówi, że po wywołaniu http://localhost/symfony/web ma wykonać app.php, więc nie musisz tego dodawać tak jak jest wyżej.
kosmos
Coś jest nie tak:

1. Uruchamiam stronę z adresu http://localhost/symfony/web/app_dev.php/homepage/ <--- działa
2. Wywołuję polecenie: php app/console cache:clear --env=prod
Wywołuję polecenie: php app/console assets:install --env=prod
Otrzymuję: Installing assets as hard copies
Installing assets for Symfony\Bundle\FrameworkBundle into web/bundles/framework
Installing assets for Acme\PageBundle into web/bundles/acmepage
Wywołuję polecenie: php app/console assetic:dump --env=prod
Otrzymuję: The "C:\xampp\htdocs\my\symfony\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle/Resources/views" directory does not exist.

Nie wiem skąd wzięła się taka ścieżśka. Być może kiedyś coś namieszałem z podkatalogami? Jak mogę to naprawić?

kpt_lucek
composer update?
kosmos
dało radępoprzez całkowite wyczyszczenie katalogu cache projektu.

Teraz strona odpala się z adresu http://localhost/symfony/web/homepage/

Moje kolejne pytanie.
Powyżej padło wiele informacji na temat wrzucenia projektu na sewere ale dla mnie sąone niespójne.
Na serwerze posiadam taką strukturę (hekko.pl)

domains/nazwadomeny.pl/public_html

Gdzie i co powinienem teraz wrzucić?

UPDATE

Tak jak wspomniałem wyżej na hekko.pl otrzymuje taką oto strukturę katalogów
domains/nazwadomeny.pl/public_html

Jeśli do katalogu public_html wrzucę index.html i odpalę z przeglądarki www.nazwadomeny.pl, odpali mi sie strona z zawartością tego indeksu - zrozumiałe.

Wgrałem całą zawartość projektu symfony2 (pomjając katalog web) do lokalizacji: domains/nazwadomeny.pl
Następnie zmieniłem nazwę pliku z public_html na web czyli --> domains/nazwadomeny.pl/web i do tego katalogu wrzuciłem zawartość folderu web.
W wyniku tek akcji, po wpisaniu do przeglądarki www.nazwadomeny.pl, otrzymuję komunikat:

Oops! An Error Occurred
The server returned a "404 Not Found".


Zapewne nie powinienem zmieniać nazwy katalogu public_html na web .... to oznacza że w projekcie wszędzie powinienem pozamieniać ścieżki z web na public_html questionmark.gif

Update:
Pomożecie? smile.gif Jakieś wskazówki?
Turson
Jak masz dostęp do ssh i apache to zmień DocumentRoot na inną ściezkę (do web/)

Ewentualnie, wrzucasz wszystko do public_html czyli masz domains/nazwadomeny.pl/public_html/web/ i adres do strony xyz.pl/web, ale w .htaccess wczytujesz web/ jako domyslne i będzie xyz.pl
Forti
Jak masz strukturę:

twojastrona.pl/public_http

to w twojastrona.pl wrzucasz CAŁY PROJEKT po komendzie freeze. Do katalogu twojastrona.pl/public_http wrzucasz zawartość folderu /web z symfony. Czy to na prawdę jest tak trudne że musisz mieć kilka dni problemów z tym? Bez urazy.. ale troche myślenia i zapoznania się chociaż jak funkcjonują podstawowy apache. -,-
kosmos
kpt_lucek wspomniał mi że nie mogę zmienić katalogu web na public_html a ty to sugerujesz .... ?
PS: nie obrażam się, kazdy łapie różne rzeczy raz szybciej raz wolniej. Nie siedze tez nad tym 24h/d bo w pracy przez 9h zajmuje się czymś innym.
Forti
Możesz zmienić. W niczym to nie przeszkadza.
kosmos
Nie dziala mi to polecenie symfony freeze mad.gif
otrzymuję
'symfony' is not recognized as an internal or external command, operable program or batch file.
Forti
teraz sprawdziłem, że to było w wersji 1.x wink.gif

komendy w symfony rozpoczynasz od:

php app/console

Zrób tak jak pisałem wyżej z komendami, wywal folder app/cache/prod oraz dev (app/cache zostaw!) i wrzucić na serwer. Skasuj folder public_http a folder web nazwij public_http. W htaccess zostaw tak jak masz (app.php zamiast app_dev.php)

ciesz się działają stroną.
kosmos
Zrobiłem tak jak mi napisałeś: Otrzymuję komunikat:


  1. 404
  2. Not Found
  3.  
  4. The resource requested could not be found on this server!



UPDATE:

Zmieniłem public_html na web - nadal było to samo.
Zmieniłem web na public_html - otrzymałem:
  1. Parse error: syntax error, unexpected '[', expecting ')' in /home/kosmos/domains/nazwadomeny.hekko24.pl/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php on line 80


Po kolejnym odświeżeniu (wywołaniu adresu w przeglądarce), otrzymałem:
  1. Oops! An Error Occurred
  2. The server returned a "404 Not Found".
  3. Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.


Znalazłem w sieci (po powyższym komunikacie) cos takiego:
http://stackoverflow.com/questions/1783214...a-404-not-found

Napisano tam jak przejść z trybu produkcyjnego na deweloperski i przytoczono kawałek .htaccess:
  1. <IfModule mod_rewrite.c>
  2. RewriteEngine On
  3.  
  4. RewriteCond %{REQUEST_FILENAME} !-f
  5. RewriteRule ^(.*)$ app_dev.php [QSA,L]
  6. </IfModule>

Sugerując się tym postem, ja w swoim powinienem mieć taki zapis?
  1. <IfModule mod_rewrite.c>
  2. RewriteEngine On
  3.  
  4. RewriteCond %{REQUEST_FILENAME} !-f
  5. RewriteRule ^(.*)$ [color="#FF0000"]app.php[/color] [QSA,L]
  6. </IfModule>


Póki co na serwerze mam taki zapis:
  1. <IfModule mod_rewrite.c>
  2. RewriteEngine On
  3. RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
  4. RewriteRule ^(.*) - [E=BASE:%1]
  5.  
  6. RewriteCond %{ENV:REDIRECT_STATUS} ^$
  7. RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
  8. RewriteCond %{REQUEST_FILENAME} -f
  9. RewriteRule .? - [L]
  10. RewriteRule .? %{ENV:BASE}/app.php [L]
  11. </IfModule>
  12.  
  13. <IfModule !mod_rewrite.c>
  14. <IfModule mod_alias.c>
  15. RedirectMatch 302 ^/$ /app.php/
  16. </IfModule>
  17. </IfModule>
Turson
Syntax error podejrzewam spowodowany tym, że masz za starą wersję PHP na hostingu
kosmos
Już jest ok
stronka odpaliła się z lokalizacji www.nazwadomeny.pl\homepage więc musiałem dodac nowe przekierowanie w routing.yml smile.gif

Dzięki wielkie wszystkim za pomoc smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.