#ANONIEM | donderdag 2 juli 2020 @ 13:33 |
Beste mensen, Voor mijzelf heb ik een handleiding geschreven hoe ik een (ontzettend simpel) Laravel project kan opzetten en op een Linux (Ubuntu) VPS kan plaatsen. Het gaat hierbij alleen om 2 pagina’s en een werkende databaseconnectie. De rest is goed bij te leren met de bestaande Laravel documentatie. Ik ervaarde dat er weinig volledige (en up-to-date) tutorials zijn m.b.t. het plaatsen/deployen van een Laravel project op een VPS vandaar o.a. ook dat ik deze zelf heb gemaakt. Het grootste deel m.b.t. het plaatsen van de Laravel applicatie op een VPS heb ik in deze 4 delige serie geleerd: Voor de rest veel in Google zoeken naar informatie en antwoorden natuurlijk. Deze bovenstaande tutorial is wat verouderd (3 jaar oud), soms niet volledig, ik maak o.a. daarom voor mijzelf een tutorial die ik graag met de rest wil delen (ook mensen buiten FOK!) ook om wat terug te geven. Ik gebruik geen spoilers, als mensen spoilers willen lezen moeten ze zich registreren, dat gun ik FOK! best wel maar alle informatie die ik heb gekregen was ook zonder te registreren dus op die manier geef ik graag ook wat terug. Deze tutorial is logischerwijs niet compleet. In het rood onderaan heb ik vragen neergezet die ik zelf nog heb en waarbij ik jullie hulp vraag om deze aan te vullen zodat de handleiding beter wordt. Als er verder aanvullingen/verbeteringen zijn dan hoor ik ze graag. Dit gedeelte gaat over het deployen van een Laravel project naar een VPS. Als je graag wil weten hoe je een Laravel project opzet dan kan je hier kijken: DIG / Een laravel project maken (de basis) Dit topic gaat over het overzetten van een Laravel (7+) applicatie naar een Ubuntu VPS. 2. de VPS server Ik heb bij Strato een Ubuntu (18.04) VPS gehuurd. Als je server gereed is krijg je een e-mail met je hostnaam (iets als h123456.stratoserver.net) en een wachtwoord via sms waarmee je in kan loggen op: https://config.stratoserver.net Bij mij stond het menu in het Duits in eerste instantie, ik heb de URL aangepast naar https://config.stratoserver.net/?locale=nl en dat lost dat op. Bij ‘Mijn server’ -> ‘Servergegevens’ zie je je initiele rootwachtwoord. Deze heb je nodig om in te kunnen loggen op je VPS. Het IP adres van je server is daar ook zichtbaar en heb je ook vaker nodig. Inloggen op de server en een gebruiker aanmaken We gaan nu voor het eerst inloggen op onze server via Putty. Je vult je hostnaam in en klikt op open. De eerste keer krijg je een pop-up, daar gewoon ‘yes’ selecteren. Je vult na ‘Login as:’ gewoon ‘root’ in. Het initiele rootwachtwoord moet je nu daar invullen. Terwijl je typt zie je niks, een beetje vertrouwen in je eigen typvaardigheid en je drukt op enter. (kopieren werkt niet trouwens dus je moet het echt zelf typen). Nu gaan we eerst een user aanmaken met alle benodigde rechten. Voor de duidelijkheid het volgende typen we in Putty, niet meer lokaal maar rechtstreeks op onze server. (geen hoofdletters, cijfers, speciale tekens etc. gebruiken) Geef een sterk wachtwoord op en bevestig die daarna. De rest daarna (Full name etc.) kan je leeg laten, gewoon enter klikken een paar keer. Hiermee hebben we de nieuwe user sudo (superuser) rechten gegeven. Nu gaan we testen of dat gelukt is: Nu zie je dat je typt onder je gekozen username (jouwusernaam@h123456 bijvoorbeeld). De eerste keer moet je je wachtwoord invoeren Vanaf nu gaan we niet meer als root inloggen (uit veiligheidsoverwegingen is dat verstandig). De installaties uitvoeren en config aanpassingen maken We gaan nu packages updaten. Vanaf nu moeten we bij veel commando’s sudo ervoor zetten zodat we de rechten hebben om deze uit te voeren. Nu gaan we nginx installeren, een webserver net zoals Apache maar geprefereerd binnen de Laravel gemeenschap. Je moet daarna altijd ‘J’ kiezen, de server vraagt voor de zekerheid of je het wil installeren en geeft aan hoeveel ruimte het programma in beslag gaat nemen. Als je nu naar je IP adres gaat zie je ook dat nginx succesvol is geïnstalleerd. Nu gaan we mysql installeren. We gaan mysql veiliger maken (mysql is veilig maar sommige standaard gekozen instellingen zijn dat niet, dat gaan we nu rechtzetten). Bij ‘Validate password plugin’ kiezen voor ‘no’. Nu moet je een wachtwoord geven en bevestigen waarmee je verbinding wil gaan maken met de database (dus niet zoals lokaal op je computer een rootuser zonder wachtwoord, hier moet echt een veilig wachtwoord op). Op de rest daarna kan je alles ‘y’ typen. Nu gaan we PHP installeren (van de LEMP stack hebben we nu de Linux, Enginx en Mysql geinstalleerd dus wat dat betreft alleen nog de P van PHP). Ik moet nano (een simpel tekstbewerkingsprogramma) nog installeren dus dat doe ik nu: Nu moeten we de php.ini aanpassen. Ik had hier wat problemen mee in eerste instantie omdat ik de eerste / vergat. Ik kon daardoor niet bij de etc map komen. Dit is vrij logisch en los je op door de ‘/’ zoals hierboven voor ‘etc’ of door ‘cd /’ te typen zoals aangegeven in onderstaande afbeelding als leiddraad. Ook moet je denken om de PHP versie (in dit geval 7.2.24 maar de map heet 7.2), die kan je achterhalen door ‘dir’ in te typen als je in de juiste directory zit. Het is een groot bestand en we hoeven maar 1 regel aan te passen dus we gaan zoeken naar deze regel. Gebruik: Control w (om te zoeken) Zoek naar: ‘cgi.fix_pathinfo=1’ Verander de 1 in een 0 en vergeet niet om de ; weg te halen aan het begin van de zin (anders wordt het gezien als een comment en wordt er niks mee gedaan). Control x (om af te sluiten) – ‘j’ kiezen om op te slaan - niks aanpassen daarna (gewoon enter) Hierna moeten we PHP herstarten, denk hierbij ook om de juiste PHP versie in het commando te gebruiken. Nginx configureren zodat deze naar de juiste map verwijst Nginx, Mysql en PHP zijn geinstalleerd en de laatste 2 deels geconfigureerd. We gaan nu Nginx configureren. Hier vervolgens index.php toevoegen onder root /var/www/html; (vlak na index maar voor index.html) Dan in server_name _; Je IP adres invullen (gebruik niet de numpad van je toetsenbord, dat werkt niet). Dan moet je nog wat punten aanpassen, zorg ervoor dat het eruit komt te zien zoals het volgende (denk om de PHP versie ook hier weer) Control x (om af te sluiten) – ‘j’ kiezen om op te slaan - niks aanpassen daarna (gewoon enter) Om te testen of het bestand nog correct werkt. Nu gaan we nginx herstarten. Nu staat op je IP adres 403 Forbidden, dat is prima. De Laravel map aanmaken We gaan nu de Laravel map aanmaken waar we ons project willen hebben:
Nu gaan we weer een aanpassing maken aan de config file van nginx (dat kon natuurlijk ook direct maar zo is de workflow duidelijker hoop ik). We hebben nu een Laravel map aangemaakt en we weten dat Laravel in de public folder zoekt naar het index bestand dus we passen var/www/html aan naar het volgende: Daarna moet je dit nog aanpassen:
Control x (om af te sluiten) – ‘j’ kiezen om op te slaan - niks aanpassen daarna (gewoon enter) Nu zie je op je IP adres 404 Not Found (we hebben nog geen index.php immers, dus dit is ook prima). Composer en Git
Hiervoor moet je echt vanuit root om te installeren vandaar cd ~ voor de zekerheid. Om te testen:
Om het te verplaatsen zodat je composer kan gebruiken als command en niet composer.phar. Composer als commando zou nu moeten werken: Nu willen we weer uit de rootdirectory gaan We gaan een map genaamd ‘repo’ aanmaken om onze repository in te plaatsen (dus niet direct vanuit github naar onze laravel map maar eerst als tussenstation in een andere map, in dit geval een map genaamd ‘repo’ waar we ook Git gaan installeren. Nu gaan we een hook aanmaken. Deze plaatst in de Laravel map wat we ontvangen in de net aangemaakte repository. Even ter informatie, de flow is: lokaal -> commit/push naar git(hub) -> naar site.git op onze server -> automatisch daarna naar onze Laravel map. We moeten daarvoor in de ‘hooks’ map zitten Dus als je nog in de site.git directory zit kan je gewoon het volgende doen: We gaan nu een (leeg) bestand aanmaken: Vul dit bestand met het volgende (dit vertelt waar hij de bestanden moet plaatsen als hij deze heeft ontvangen): Control x (om af te sluiten) – ‘j’ kiezen om op te slaan - niks aanpassen daarna (gewoon enter) We gaan op een later tijdstip vanuit github de bestanden doorsturen naar de /var/repo, deze heeft nu een ‘hook’ die aangeeft dat als hij bestanden ontvangt in deze repo hij deze moet verplaatsen naar de Laravel map. Op deze manier heb je bijna geen downtime. We moeten nu nog de juiste rechten geven zodat deze repo de bestanden kan kopieren naar de Laravel map. We zijn nu eerst klaar met Putty en de server, je kan sluiten met Github account en master repository aanmaken Nu is het tijd om een github account aan te maken. Als je dat nog niet hebt gedaan, ga naar https://github.com/ registreer je, maak een master repository aan en je kan aan de slag. In VSC gaan we naar View -> Command palette... We typen: Git clone (enter) Dan gaan we de repository URL kopieren (https://github.com/jouwnaam/master bijvoorbeeld) Kies daarna voor ‘Open’ en je ziet je (lege) lokale repository. Nu kopieren we alles naar die map vanuit onze www/jouwprojectnaam map en dan zien we dat we een git repository hebben met alle gemaakte code (binnen de master map). Deze moet je commiten en pushen naar Github. Zelf doe ik dat op de volgende manier: 1. ‘Stage all changes’ 2. ‘Commit staged’ (en dan een naam geven voor de commit) 3. ‘Publish branch..’ Nu gaan we in VSC in GitBash het volgende commando uitvoeren (zorg ervoor dat je in de net aangemaakte depository map zit, dus niet in www/jouwproject maar zoals bij mij bijvoorbeeld /c/wamp64/repo/master). Met onderstaande commando kan je controleren of je in de git map zit.
Om te controleren of het verwerkt is (je hoort er 4 te zien) Nu gaan we de bestanden vanuit github (master) naar production (onze server) brengen, waar de hook de code automatisch naar de Laravel map gaat verplaatsen. Ik kreeg hierbij het volgende bericht: Dit is op te lossen met het volgende: Hierna kan je het push commando weer uitvoeren, ‘yes’ typen en het rootwachtwoord invullen. Nu is de code als het goed is geplaatst in je Laravel map op je server. Op je IP adres krijg je nu de melding te zien ‘Deze pagina werkt niet’. Dat is ook prima, we moeten nog wat punten bijlangs gaan. De laatste handelingen We gaan weer naar Putty: Daarna binnen de Laravel map (2 streepjes) Zoals ook lokaal op de computer bevat het .env bestand belangrijke gegevens zoals bijvoorbeeld het databasewachtwoord. Deze wil je niet in Github hebben staan (daarom worden ze uitgesloten in het .gitignore bestand). Je moet daarom op je server zelf deze aanmaken en .env.example heeft daarvoor alvast een handige opzet dus die gebruik je als .env bestand. Het .env bestand moeten we nu aanpassen zodat Laravel connectie kan maken met de database o.a. We passen de volgende waardes aan: APP_ENV=production APP_DEBUG=false DB_DATABASE=jedatabasenaam DB_USERNAME=root DB_PASSWORD=Jegekozenwachtwoord Control x (om af te sluiten) – ‘j’ kiezen om op te slaan - niks aanpassen daarna (gewoon enter) Nu moeten we nog een key genereren met het volgende commando: Als je nu teruggaat naar je .env bestand zie je dat de APP_KEY nu gevuld is. Nu gaan we nog de database aanmaken. Eerst inloggen op mysql. Als je even wil controleren of de standaard databases bestaan: Nu gaan we de database maken: Nu moeten we eerst nog een andere config aanpassen: En pas de volgende 2 regels aan zodat ze overeenkomen met je IP adres en je tijdzone (in het algemeen zal je alleen je IP adres hier aan hoeven te passen). Control x (om af te sluiten) – ‘j’ kiezen om op te slaan - niks aanpassen daarna (gewoon enter) We zitten nu nog steeds in de Laravel map en moeten het volgende nog uitvoeren: Nu gaan we de tabellen aanmaken met de migratie: Hierbij kreeg ik nog onderstaande melding: Dit heb ik opgelost door de volgende stappen uit te voeren: Bij het gedeelte ‘jenieuwewachtwoord’ moet je dan het wachtwoord invullen dat je in het .env bestand hebt ingevuld. Nu kan je de migratie weer uitvoeren en als het goed is worden ze nu wel uitgevoerd. Je ziet nu de Laravel applicatie op je IP adres, bij de about pagina staat alleen dat iets nog niet helemaal goed gaat. Dit is prima, we hebben immers de database nog niet gevuld. Dit gaan we op dezelfde manier doen als dat we dat lokaal eerder deden bij het maken van onze Laravel Applicatie op de computer: Als je nu naar je IP adres gaat hoor je de website correct te zien, inclusief de tekst die uit de database gehaald moet worden. Vragen die ik nog heb 1. Bij Git moet ik nu de map kopieren van mijn www/mijnproject map naar mijn repo map voordat ik deze kan committen. Dit kan vast wel beter. Iemand die mij kan vertellen wat ik daar verkeerd doe? 2. Is het verstandig om een gebruiker aan te maken voor de database login in plaats van de rootuser te gebruiken (ook al heeft die wel een wachtwoord nu)? Lijkt mij wel maar kwam hier niet zozeer iets over tegen (wel m.b.t. het inloggen als root op de server zelf). 3. Wat zijn nog beveiligingspunten die ik mis? Een firewall is bijvoorbeeld sowieso ook echt nodig? Is de server zelf en de database zo goed beveiligd of zijn er nog standaard commando’s/instellingen die ik niet uitgevoerd heb? 4. Hoe kan ik de database gemakkelijk inzichtelijk maken? Welke programma’s zijn daar geschikt voor, hoe stel ik dat in? 5. Ik kan ook ‘Plesk online’ installeren bij het besturingssysteem. Helpt dit veel om belangrijke instellingen goed te zetten? Iemand die daar wat vanaf weet en over wil vertellen? 6. SSH keys moet ik nog opzetten. Ik weet niet of dat moeilijk is of niet, iemand die daar iets over weet? 7. Alle andere opmerkingen zijn welkom. Vooral m.b.t. het opzetten van de server zelf. [ Bericht 2% gewijzigd door #ANONIEM op 02-07-2020 18:19:19 ] | |
FlippingCoin | donderdag 2 juli 2020 @ 13:42 |
Cool @phoenyx Als ik je een tip mag geven is om het op te splitsen, zelf kijk ik vooral specifieke video's over een techniek die ik nog niet ken en ik erger mij dan altijd groen en geel als ze je ook hele andere dingen uit gaan leggen die ik al lang weet. | |
#ANONIEM | donderdag 2 juli 2020 @ 16:07 |
Tjah, ik geef duidelijk aan dat ik ook een Laravel project op ga zetten en je dat kan skippen als je die al gemaakt hebt. Dit is gericht aan mensen die wellicht ook nog een Laravel applicatie op moeten zetten. Dat is gewoon een extraatje. Als je je daar aan ergert, tjah. Is een handleiding van begin tot eind voor het maken van een Laravel project en die op op een VPS te krijgen (TT kon niet langer). [ Bericht 1% gewijzigd door #ANONIEM op 02-07-2020 16:14:18 ] | |
FlippingCoin | donderdag 2 juli 2020 @ 16:09 |
Ja en als je het opknipt heb je meer mensen die er wat aan hebben. | |
#ANONIEM | donderdag 2 juli 2020 @ 16:10 |
Oke. Zal na werktijd nog wel even kijken of ik de intro nog wat aan moet passen etc. Wel bedankt voor je feedback, is wel beter zo denk ik inderdaad. [ Bericht 6% gewijzigd door #ANONIEM op 02-07-2020 16:22:37 ] | |
FlippingCoin | donderdag 2 juli 2020 @ 16:56 |
Cool np. | |
Chinless | donderdag 2 juli 2020 @ 19:05 |
Denk je echt dat iemand hier iets mee gaat doen? Die aantal personen is op 1 hand te tellen. | |
#ANONIEM | donderdag 2 juli 2020 @ 19:38 |
Lijkt me wel, als ik zie dat youtube clips die uitleg geven over het deployen van een Laravel project naar een Ubuntu VPS duizenden views heeft zullen er vast wel aardig wat mensen blij zijn met een geupdate handleiding. En als het er slechts 3 zijn dan ook prima, dan heb ik 3 mensen geholpen. [ Bericht 1% gewijzigd door #ANONIEM op 02-07-2020 19:38:35 ] | |
#ANONIEM | zondag 12 juli 2020 @ 14:32 |
Ik had 7 vragen, daarvan nu bij een paar het antwoord gevonden. Vraag 1 over Git. Nou ja dit is wel simpel en dat leek me ook al. Je verwijst apache gewoon naar je repo (in httpd-vhosts.conf) die je plaatst in je www map. Je kopieert je laravelproject daarheen en gaat dan vervolgens vanuit daar werken. Vraag 4. Mysql-workbench is hiervoor de oplossing. https://dev.mysql.com/downloads/file/?id=495322 Inloggen of registreren hoeft niet, gewoon het linkje 'no thanks, just start my download'. En hier https://wavemotiondigital(...)ith-mysql-workbench/ nog een linkje naar de instellingen. Vraag 5. Heb zelf plesk wat bekeken (zat toch erbij inbegrepen), kan nuttig zijn maar heb het er weer afgehaald. Vraag 6. SSH keys opgezet, is wel handig en veiliger. Handleiding die ik gebruikte: | |
Fleischmeister | maandag 13 juli 2020 @ 01:41 |
Hoe ga je dit allemaal automatiseren als je een nieuwe versie van de site online wil hebben? Hiervoor zijn al CI systemen zoals GitHub Actions, TravisCI, CircleCI, etc, uitgevonden, hiermee kan je: • een nieuwe versie van je website bouwen op een aparte plek • tests draaien om te zien of alles goed is • het eindproduct naar de server uploaden die het moet gaan hosten • daar nog de benodigde commando's draaien (bedenk dat je bijvoorbeeld diverse "php artisan" commando's zoals cache clearing en database migraties iedere keer moet draaien na een deployment van nieuwe code!) .. etc., allemaal n.a.v. een push naar GitHub. Dat is een veelgebruikte workflow omdat je anders helemaal gestoord wordt als je vaak iets moet releasen. Je hoeft dan ook geen ontwikkeltools als git, composer, npm, etc. op productie te hebben, alleen op de buildlocatie. Over problemen zoals meerdere omgevingen waarbij je overal net een andere .env file moet installeren is ook nagedacht bij dat soort systemen. 2. De MySQL root user gebruiken (die SUPER rechten heeft op de database server) is natuurlijk nooit een goed idee voor gebruikers die de database server niet horen te beheren. Altijd het 'least privilege' principe aanhouden. 7. De installatie van de server zelf (users, softwarepakketten, configuratiefiles, etc.) kan je grotendeels automatiseren met tools als Ansible, dat is mijn favoriet, simpel concept zonder steile leercurve, werkt gewoon via SSH, je VPS heeft verder alleen Python nodig. [ Bericht 4% gewijzigd door Fleischmeister op 13-07-2020 01:49:55 ] | |
Feola | vrijdag 31 juli 2020 @ 18:58 |
Gooi alles in docker containers en maak een install script. Kan je deployen in 5 min. |