To τέλειο περιβάλλον για ένα αποδοτικό και ευέλικτο Workflow

Υπάρχουν πολλές επιλογές, διάφορα λειτουργικά συστήματα και δεκάδες τρόποι για να δουλεύει ένας Web Developer τελικά. Είναι τόσες οι επιλογές που συχνά πυκνά μας μπερδεύουν. Έχοντας δοκιμάσει τις περισσότερες από αυτές, ήρθε η ώρα να μοιραστώ τα συμπεράσματα μου και να σας παρουσιάσω την τελική μου επιλογή.

Το λειτουργικό σύστημα

Εδώ πρακτικά έχουμε τρεις επιλογές. Windows, MacOs και Linux. Η μεγάλη διαφορά είναι ότι τα Windows δεν έχουν πυρήνα Unix και αυτό μπορεί να δημιουργήσει μια σειρά από προβλήματα. Το MacOs από την άλλη έχει πυρήνα Unix. Είναι, όπως γράφει η Wikipedia, "Unix-based graphical interface operating system". Το Linux είναι δωρεάν, έχει ένα σκασμό εκδόσεις και είναι ότι πιο κοντινό θα βρείτε στο τελικό περιβάλλον που θα φιλοξενηθεί η ιστοσελίδα σας, που κατά συντριπτική πλειοψηφία θα είναι κάτι ανάλογο ( πιθανότατα κάποια έκδοση CentOs ). Έχω δουλέψει 3 χρόνια επαγγελματικά σε Mac, οι αρχικές σπουδές μου ήταν σε Mac και όμως μια ζωή είχα PC με Windows για να κάνω την δουλειά μου. Το κόστος ενός PC είναι πολύ χαμηλότερο, οι επιλογές σε προγράμματα και παιχνίδια άπειρες. Δεν σκέφτηκα να αλλάξω λειτουργικό σύστημα παρά μόνο αφού πέρασαν 18 χρόνια. Και τελικά άλλαξα... ή μάλλον στο περίπου!

Αν δεν σας ενδιαφέρουν τα παιχνίδια και τα οικονομικά σας αντέχουν ένα Apple, τότε με την ευχή μου. Αν θέλετε να παραμείνετε σε Windows υπάρχει τρόπος να δουλεύετε απροβλημάτιστα. Και εξηγούμαι ευθύς αμέσως.

Wamp και XAMPP

Δεν σας κρύβω ότι για πολλά χρόνια χρησιμοποιούσα Wamp. Ακόμα και σήμερα χρησιμοποιώ σε κάποιες περιπτώσεις. Για όποιον δεν γνωρίζει τι είναι, είναι ένας πολύ εύκολος τρόπος να στήσει κάποιος τοπικά στον υπολογιστή του ότι χρειάζεται για να μπορέσει να «εκτελέσει» τις τυπικές PHP εφαρμογές. (Wordpress, Joomla, κ.α.). Την PHP δηλαδή, τον Apache Server και την Mysql. Eξ'ου και τα ονόματα Windows-Apache-Mysql-Php (WAMP) ή MAMP(Μαc) ή LAMP(Linux).

Τι πρόβλημα μπορεί να έχει αυτό; Στην περίπτωση του Wamp για παράδειγμα το πιο σύνηθες ήταν το case sensitivity στα ονόματα των αρχείων. Στα Windows δεν υπάρχει πρόβλημα, στο Linux υπάρχει με αποτέλεσμα να τρέχεις μια χαρά τα site τοπικά και online να μην φορτώνει καν! Όμως μην γελιόμαστε, αν απλά θέλει κάποιος να στήσει ένα Wordpress site, δεν χρειάζεται να γίνει πυρηνικός φυσικός για να το καταφέρει. Θα τον υπηρετήσει μια χαρά κάποιο από αυτά τα Combo προγραμμάτων.

Virtual Machines με Virtual Box

O πιο εύκολος τρόπος να γνωρίσετε τον μαγικό κόσμο των VM(virtual machines) είναι να εγκαταστήσετε το Virtual Box στον υπολογιστή σας. Ένα «virtual machine», είναι αυτό που λέει και η λέξη. Ένα εικονικό μηχάνημα δηλαδή. Ένα μηχάνημα που τρέχει μέσα στο μηχάνημα σας αλλά είναι "ανεξάρτητο" λειτουργικά, τρέχει άλλο λειτουργικό σύστημα και απλά μοιράζεται τα ίδια "resources" με το βασικό σας μηχάνημα. Απαιτεί να έχετε κάποιες προδιαγραφές για να τρέχει σε αποδεκτά επίπεδα, δηλαδή να έχετε μπόλικη μνήμη ( 8GB είναι υπέρ αρκετά) και έναν επεξεργαστή από Intel I5 και πάνω. Ένας SSD δίσκος ποτέ δεν ενόχλησε κανέναν, το συστήνω ανεπιφύλακτα.

Με ένα Virtual Machine λοιπόν τι πετυχαίνουμε; Μπορούμε να τρέχουμε Windows, να έχουμε όλες τις ανέσεις τους και τα προγράμματα μας ενώ παράλληλα τρέχουμε σε ένα κουτί (Box) ένα Ubuntu/Linux περιβάλλον για να αναπτύσσουμε τις εφαρμογές μας. Και αυτό είναι κάτι που θέλουμε, γιατί πλέον το περιβάλλον που αναπτύσσουμε είναι συναφές με το τελικό περιβάλλον και αυτό είναι μόνο καλό. Αν μάλιστα θέλουμε μπορούμε να φτιάξουμε σε ένα κουτί, ακριβώς το περιβάλλον που έχουμε στον server μας και έτσι να είμαστε σίγουροι τι θα πάει ή δεν θα πάει καλά στο πρόγραμμα μας, όταν αποφασίσουμε να το ανεβάσουμε. Το να μπορείς να έχεις το λειτουργικό σύστημα ανεξάρτητο από το hardware είναι πάρα πολύ δυναμικό από μόνο του. Με ένα παράδειγμα θα καταλάβετε αμέσως το γιατί. Θέλετε να φύγετε για δέκα η μέρες μακριά από το γραφείο σας . Αν δεν δουλεύετε μόνιμα σε Laptop, έχετε ένα προβληματάκι. Πως μεταφέρετε την δουλειά σας από το Desktop στο Laptop για να την συνεχίσετε εφόσον χρειαστεί; Η λύση «Remote access», χμ... ναι λειτουργεί αλλά είστε σίγουροι ότι στο βουνό θα έχετε Internet; H και αν έχετε αν δεν θα σέρνεται; Η λύση με VM είναι απλή. Όσο απλό είναι να κάνεις copy/paste ένα αρχείο! Το ανοίγεις από το Laptop και έχεις τα πάντα, τα αρχεία, το σύστημα, όλο σου το setup, τα προγράμματα, ανέπαφα τα πάντα και παραμετροποιημένα όπως είναι στο Desktop σου! Την πρώτη φορά που το έκανα αυτό, δάκρυσα. Όμως αυτό δεν είναι η μόνη διαφορά του. Ένα ακόμα πράγμα που μου έχει διευκολύνει την ζωή κυριολεκτικά, είναι τα snapshots. Ας πω και πάλι ένα παράδειγμα. Κάνετε αναβάθμιση από την έκδοση joomla 2.5 σε 3. Το πιθανότερο είναι να διαλυθούν όλα, να μην παίζουν τα template, να γίνει ζημιά στην βάση. Πρέπει λοιπόν να κάνετε μια σειρά από Test για να δείτε τι θα πάει καλά τελικά. Τι κάνετε λοιπόν συνήθως; BACKUP! Και μετά δοκιμή και μετά Restore από το backup αν δεν πάει καλά, και φτου και πάλι από την αρχή όλο αυτό μέχρι να πετύχει. Αυτό, όταν πρόκειται για εφαρμογές τύπου Joomla,Drupal κλπ. με χιλιάδες αρχεία που ζυγίζουν πολλά Mb, είναι ιδιαίτερα χρονοβόρο. Με το VM είναι παιχνιδάκι όμως. Πατάς το κουμπί "Snapshot" και αποθηκεύει την κατάσταση του μηχανήματος τάχιστα και μετά παρακολουθεί τις αλλαγές σου. Κάτι δεν πάει καλά σε οποιοδήποτε επίπεδο; Restore σε δευτερόλεπτα. Όλο το λειτουργικό, όχι μόνο ο φάκελος του Site. H βάση, το setup, και το λειτουργικό, όλα όπως ήταν. Μόνο που το γράφω χαλαρώνω.

Vagrant

Το Vagrant στηρίζεται στις πλάτες του Virtual Box και πρακτικά αυτό που κάνει είναι να τρέχει ένα Virtual Machine χωρίς User Interface (UI) και με την χρήση "provisioning Scripts". Αυτά τα scripts είναι στην ουσία ένα σετ εντολών με πράγματα που θες να έχει το VM σου την ώρα που δημιουργείται. Μπορείς για παράδειγμα να τρέξεις την εντολή "vagrant up" και αυτό να πάει και να δημιουργήσει ένα Ubuntu Server ενώ παράλληλα θα εγκαταστήσει Apache, Mysql, PHP, Python, NODE (κ.ο.κ) ή ότι ειδικό setting σε επίπεδο συστήματος θέλετε (π.χ. πείραγμα του setup της Mysql για InnoDB, αλλαγή setup της php κ.α.). Είναι Vagrant Box είναι πολύ πιο ελαφρύ από ένα Virtual Box μηχάνημα με UI, χρειάζεται πολύ λιγότερη μνήμη για να τρέξει και είναι αρκετά πιο portable, αφού με ένα αρχείο μπορείτε να δωσετε σε έναν συναδελφό σας ακριβώς το setup που τρέχετε και εσείς τοπικά και έτσι να μοιράζεστε ένα κοινό περιβάλλον υλοποίησης! Είναι όμορφο και χρήσιμο πραγματικά αλλά αν αντέχει το μηχάνημα σας ένα Full UI Ubuntu machine και δουλεύετε μόνο σας θα πρότεινα να μην πάτε προς τα εδώ γιατί χάνετε σε απόλυτη ευελιξία (απόλυτα ξεχωριστό περιβάλλον από hardware). Σε κάθε περίπτωση όμως έχει όλα τα υπόλοιπα οφέλη. Αν για παράδειγμα θέλετε ξαφνικά να δοκιμάσετε NODE development δεν χρειάζεται να εγκαταστήσετε NODE ή ότι άλλο χρειάζεται στο βασικό σας μηχάνημα. Βρίσκετε ένα έτοιμο BOX (υπάρχει τεράστια λίστα με έτοιμα μηχανήματα) που περιλαμβάνει όλα τα προγράμματα που χρειάζονται και το περιβάλλον γι' αυτό που θέλετε και τέλος. Με ένα κουμπί, στήνετε ακριβώς αυτό που χρειάζεται! Το Vagrant σκότωσε κυριολεκτικά τα περιστατικά τύπου "Μα.. στο δικό μου μηχάνημα δούλευε!" Αν θέλετε να μάθετε περισσότερα γι' αυτό, δείτε εδώ.

Τελικά σε τι κατέληξα;

Τρέχω Windows 7 σε Intel I7 – 8GBRAM- SSD HD. Το Windows περιβάλλον το έχω κυρίως για το Adobe Photoshop και τα Email μου. Όλα τα άλλα τρέχουν σε VM και είμαι απόλυτα ικανοποιημένος με αυτό. Σε συνεργασία με το «Remote Desktop» των Windows και το “auto backup” τους, εδώ και ένα χρόνο έχω ξενοιάσει κυριολεκτικά. Ακόμα και αν αφήσω τα windows, μέσα από VM θα δουλεύω για πάντα. Γιατί δεν σας το είπα αλλά το VirtualBox υπάρχει και σε Mac και σε Linux, οπότε it’s a win win thing! Θα μπορούσε κάποιος εύλογα να ρωτήσει. Γιατί δεν χρησιμοποιώ Vagrant; Η απάντηση ειναι ότι επειδή τα αρχεία που φτιάχνω, ο Editor, τα αρχεία βάσης και το setup της δεν ανήκουν στο Vagrant Box δεν έχω την δυνατότητα να μεταφέρω ολόκληρο το περιβάλλον όπου αλλού θέλω για να συνεχίσω να δουλεύω. Είμαι ιδιαίτερα portable σαν τύπος και δουλεύω μόνος, οπότε αυτό το πράγμα με βολεύει πάρα πολύ. Σε έναν ιδανικό κόσμο θα μπορούσες ενδεχομένος να τρέχεις Vagrant με τα αρχεία να διαβάζονται απο DropBox. Αυτό λύνει πολλά αλλά και πάλι, επειδή πειράζω συνέχεια τον Εditor μου, θέλω ότι setup έχω βολευτεί να τρέχει παντού, να μη ψάχνομαι. Αυτό βόλεψε εμένα, αν κάποιος δουλεύει σε ομάδες σίγουρα θα πρέπει να παίζει με Vagrant. Εσείς; πως δουλεύετε; Υ.Γ 1.: Στο workflow ανήκει σίγουρα και o editor και μια σειρά απο άλλα πράγματα. Σκόπιμα δεν τα αναφέρω γιατί έχω σκοπό να γίνουν άλλο άρθρο σαν Development Toolbox, που νομίζω ότι ταιριάζει και καλύτερα. Υ.Γ 2.: Αν κάτι από αυτά που λέω, κρίνετε ότι ειναι λάθος ή ότι γίνονται και με άλλο τρόπο, θα χαρώ να αφήσετε κάποιο σχόλιο. Ότι περιγράφω έχει προκύψει απο προσωπική έρευνα και δεν ειμαι σε καμία περίπτωση Sys Admin.