Σελίδα 1 από 4

Στήσιμο LAMP Stack και Vhosts σε Ubuntu.

ΔημοσίευσηΔημοσιεύτηκε: 11 Δεκ 2013, 15:37
από pc_magas
Ένα από τα βασικά και εύκολα που μπορεί να κάνει κάποιος εφόσον έμαθε μερικά Commands είναι να στήσει τον δικό του webserver με υποστήριξη php, mysql σε apache. To Lamp Stack αντιστοιχεί στα Αρχικά των Λέξεων Linux Apache Mysql Php (ή Perl) και είναι κλασικό combo για webserver.

Προσοχή: Όπου βλέπεται sudo αν είστε root τότε μπορείτε να το παραλέιψεται. Δε πάλι δεν σας το συνιστώ και αν είστε σε debian ακολουθήστε τον παρακάτω οδηγό για να το βάλετε: http://www.debianhelp.co.uk/sudo.htm

Και επειδή τα πολλά λόγια είναι φτώχεια στο ζουμί:

Στήσιμο Mysql:
Ανοίγουμε το τερματικό ή συνδεόμαστε στον server μας με ssh και δίνουμε:

Κώδικας: Επιλογή όλων
sudo apt-get install mysql-server


Σε αυτό το βήμα υπάρχει μαι εναλλακτική που λέγεται mariadb που είναι το fork της mysql. Έτσι ότι παίζει με mysql παίζει και σε MariaDb με μικροδιαφορές που στην πληθώρα των εφαρμογών δεν θα τις παρατηρήσετε, δε πολλές διανομές όπως το OpenSuse έχουν αυτή για default. Tο πως μπορείτε να το εγκαταστήσετε μέσω αποθετηρίου δείτε στο https://downloads.mariadb.org/mariadb/r ... rror=crete για την τελευταία stable έκδοση. Εφόσον βάλετε το αποθετήριο μπορείτε να τρέξετε την παραπάνω εντολή. (Δεν την δοκίμασα σε debian την παραπάνω για να εγκαταστήσω mariaDb)

Ακόμη για 16.04 όσο αφορά την εγκατάσταση της mariadb δείτε και αυτόν τον οδηγό: viewtopic.php?f=9&t=32121

Αν έχετε ήδη εγκατεστημένη την mysql και θέλετε να μεταβείτε σε mariadb απλά εκτελέστε ή εντοπίσατε κάποιο πρόβλημα κατά την εγκατάσταση (πρόβλημά εξαρτήσεων):
sudo apt-get remove mysql*
ή
sudo apt-get purge mysql*



Τέλος σε αυτό το βήμα να σημειώσω ότι αν έχετε απομακρυσμένο server (πχ. στο okeanos) καλό είναι να ορίσετε το password κατά την διάρκεια της εγκατάστασης για λόγους ασφαλείας.

Στήσιμο apache και php5
Δίνουμε την εντολή (για εκδόσεις < = 14.04):
Κώδικας: Επιλογή όλων
sudo apt-get install apache2 php5 libapache2-mod-php5


Για ubuntu 16.04 LTS δίνουμε:
Κώδικας: Επιλογή όλων
sudo apt-get install apache2 php7 libapache2-mod-php7

Και ενεργοποιούμε την php ως:
Κώδικας: Επιλογή όλων
sudo a2enmod php7.0
sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
sudo service apache2 restart



Για να δοκιμάσουμε αν τρέχει σωστά εκτελούμε:
Κώδικας: Επιλογή όλων
sudo nano /var/www/html/phptest.php

και στον editor δίνουμε:
Κώδικας: Επιλογή όλων
<?php phpinfo();?>

Και με Ctrl+O το αποθηκεύουμε και με Ctrl+X το κλείνουμε.

Έτσι μπορούμε να δοκιμάσουμε αν τρέχει στον browser δίνοντας:
Κώδικας: Επιλογή όλων
localhost/phptest.php

ή
Κώδικας: Επιλογή όλων
<ip_server>/phptest.php

Αν το τρέχετε σε απομακρυσμένο server (βλ. okeanos)

Μετά δίνουμε την υποστήριξη για σύνδεση php με mysql (για εκδόσεις < 14.04):
Κώδικας: Επιλογή όλων
sudo apt-get install php5-mysql

ή
Κώδικας: Επιλογή όλων
sudo apt-get install php5-mysqlnd
αν έχετε εγκαταστήσει την MariaDb.

Για ubuntu 16.04 δίνουμε:
Κώδικας: Επιλογή όλων
sudo apt-get install php7.0-mysql


Ακόμη δίνουμε για να εγκαταστήσουμε κάποιες χρήσιμες βιβλιοθήκες που πολλά "ετοιματζίδικα" (joomla, phpBB3, drupal) μπορεί να χρειαστούν.

Για ubuntu <= 14.04 δίνουμε:
Κώδικας: Επιλογή όλων
sudo apt-get install php5-imagick php5-gd php5-curl php5-mcrypt


Για ubuntu 16.04LTS δίνουμε: (το php mcrypt είναι νέα προσθήκη στο tutorial)
Κώδικας: Επιλογή όλων
sudo apt-get install php-imagick php-gd php-curl php-mcrypt


Συγχαρητήρια μόλις εγκαταστήσατε το δικό σας Lamp (Linux Apache Mysql Php) stack.

Αλλά δεν τελειώσαμε εδώ έχουμε ακόμη Μερικά Θεματάκια:

Δικαιώματα αρχείων
Το βασικότερο είναι τα θέματα σχετικά με τα αρχεία σας. Θα πρέπει να είναι εκτελέσιμα τα αρχεία σας ειδικά αν είναι php.
Ενδύκνειτε για δικαιώματα να έχετε 755 ή 775 αν είστε σε server που το χρησιμοποιείτε για development.

Η εντολή που αλλάζει τα δικαιώματα στα αρχεία είναι:
Κώδικας: Επιλογή όλων
chmod <δικαίωμα> -R <φάκελος_με_τα_αρχεία_του_site>


Tip:
Ακόμα αν θέλετε για development καλό είναι να είστε στην ομάδα www-data και το group των αρχείων σας να ανήκει στο www-data. Μπορεί να γίνει με τις εντολές
Κώδικας: Επιλογή όλων
sudo usermod -aG www-data <username_σας>
chgrp www-data -R <φάκελος_με_τα_αρχεία_του_site>


Εγκατάσταση περιβάλλοντος ρύθμισης Mysql
Εφόσον εγκαταστήσατε τον mysql server σας πρέπει κάπως να διαχειριστείτε την βάση σας γι αυτό σας προτείνουμε 3 εναλλακτικές:
  • phpMyadmin
  • Webmin
  • mysql Workbench

Για το πρώτο δίνουμε πρώτα:
Κώδικας: Επιλογή όλων
sudo apt-get install phpmyadmin


Πρόταση σερβιρίσματος από τον apache:
  1. Είτε δίνοντας <hostname>/phpmyadmin
  2. Δίνοντας την ip ή συγκερκιμένο hostname

Για το πρώτο δίνετε:
Κώδικας: Επιλογή όλων
sudo nano /etc/apache2/apache2.conf

και προσθέτουμε στο τέλος:
Κώδικας: Επιλογή όλων
Include /etc/phpmyadmin/apache.conf

Και πατάμε Ctrl+Ο για save και Ctrl+X για αποθήκευση.

Για το δεύτερο δίνετε:
Κώδικας: Επιλογή όλων
cd /etc/apache2/sistes-available
sudo nano <όνομα_vhost>

Όπου όνομα_vhost ένα χαρακτηριστικό όνομα (χωρίς τα < >).

Σε αυτό το αρχείο δίνετε
Κώδικας: Επιλογή όλων
<VirtualHost *:80>
ServerName <ip_ή_domain>
ServerAlias  <ip_ή_domain>
DocumentRoot /usr/share/phpmyadmin
</VirtualHost>

και πατάμε Ctrl+O για αποθήκευση και Ctrl+X για έξοδο από το nano.

Όπου βλέπεται <ip_ή_domain> βάζεται την ip ή το subdomain που θέλεται ο apache να σας "σερβίρει" το phpmyadmin

Μετά για να το ενεργοποιήσετε δίνεται:
Κώδικας: Επιλογή όλων
sudo a2ensite <όνομα_vhost>

που <όνομα_vhost> το όνομα του αρχείου που δώσατε.
και μετά:
Κώδικας: Επιλογή όλων
sudo service apache2 reload


Για το Webmin είναι ποιο απλά τα πράγματα:
Πηγαίνουμε με τον Browser μας στο http://www.webmin.com/download.html
Αντιγράφουμε το url που ειναι κάτω από εκεί που λέει Debian package ....
Κώδικας: Επιλογή όλων
cd
wget <το url που κάνατε copy>
sudo dkpg -i <ότι κατέβασε το wget >

Αν δεν ξέρετε ποιο είναι δώστε στο τερματικό:

Κώδικας: Επιλογή όλων
ls -l | grep webmin


Για την έκδοση όπου ήταν τρέχουσα όταν γραφόταν ο οδηγός δίνεται:
Κώδικας: Επιλογή όλων
linuxteam
wget http://prdownloads.sourceforge.net/webadmin/webmin_1.660_all.deb
sudo dpkg -i webmin_1.660_all.deb


Για την τελευταία επιλογή σας την συνιστώ ανεπιφύλακτα και είναι η επιλογή της αρεσκείας του γράφοντα αυτόν τον οδηγό ;) . Αποτελεί μια desktop εφαρμογή που τρέχει στον υπολογιστή σας και όχι στον απομακρυσμένο server. Είναι διαθέσιμη στο Software Center του Ubuntu αν δεν το έχετε δίνεται:
Κώδικας: Επιλογή όλων
sudo apt-get install mysql-workbench
(τουλάχιστον έτσι το έχει ονομάσει το πακέτο το Ubuntu)


Τελευταίες σημειώσεις:
H Mariadb/Mysql σταματάει δίνοντας στο τερματικό:
Κώδικας: Επιλογή όλων
sudo service mysql stop

Ομοίως και ο Apache2
Κώδικας: Επιλογή όλων
sudo service apache2 stop


Ακόμη για να μην ξεκινά αυτόματα μετά το boot (πχ. λόγο ότι το θέλεται μόνο για development) η mysql και ο Apache
Κώδικας: Επιλογή όλων
sudo update-rc.d -f apache2 remove
echo "manual" | sudo tee /etc/init/mysql.override


Προς το παρόν δίνοντας την ip του υπολογιστή μας μας σερβίρει ότι έχει στο /var/www.

Αλλά εμείς δεν αρκούμαστε σε ότι έχει το /var/www και να μερικοί λόγοι :P :
  • Θέλουμε/τε να κάνουμε/τε host πολλά από ένα site στον υπολογιστή μας. Που το καθένα έχει διαφορετικό hostname
  • Δεν μου/μας/σας είναι βολικό να κάνω development σε αρχεία που είναι στο /var/www λόγο ότι by default ο χρήστης δεν έχει πρόσβαση εκεί.

Στον Apache Υπάρχει ο μηχανισμός που λέγεται Virtual Host (vhost για ευκολία λόγου). Γενικά τo Virtual Host γίνεται με τα εξής βήματα:
  1. Δημιουργούμε ένα αρχείο με κατάλληλo περιεχόμενo στο /etc/apache2/sites-available με κάποιος text editor
  2. Ενεργοποιούμε το vhost με την εντολή:
    Κώδικας: Επιλογή όλων
    sudo a2ensite <όνομα_αρχείου>
  3. Κάνουμε reload τον apache με:
    Κώδικας: Επιλογή όλων
    sudo service apache2 reload

Προσοχή: Στο δεύτερο Βήμα ΔEN βάζουμε το πλήρες path του αρχείου. Δηλαδή αν το vhost μας είναι στο /etc/apache2/sites-available/sample δίνουμε:
Κώδικας: Επιλογή όλων
sudo a2ensite sample


Ακόμη η παραπάνω εντολή θα δημιουργήσει ένα Symlink (symbolik link) στο /etc/apache2/sites-enabled .

Όμως στο πρώτο βήμα ανέφερα "κατάλληλο περιεχόμενο" ποιο είναι αυτό όμως;
Σε γενικές γραμμές το περιεχόμενο θα έχει την εξής μορφή:
Κώδικας: Επιλογή όλων
<VirtualHost <ip>: <port> >
ServerAdmin <email>
ServerName <ip ή domain>
ServerAlias <ip ή domain>
DocumentRoot <path>

ErrorLog <path για logs σφαλμάτων>
CustomLog <path_για_logs> combined
</Virtualhost>

Όπου
<ip>: H ip του interface που το site θα σερβίρεται προς τα έξω το site σε γενικές περιπτώσεις είναι το * που συμαίνει όλες η IP
<port>: Η θύρα που ακούει ο Apache συνήθως είναι η 80 ή αν έχει SSL(https) ή 449.
<path>: H διαδρομή που θα είναι τα αρχεία που θα σερβίρει ο Apache
<path για logs σφαλμάτων>: Το path του αρχείου που θα καταγράφονται τα σφάλματα του κώδικα της php. Ιδιαίτερα χρήσιμο για development.
<path_για_logs>: Το path του αρχείου που θα καταγράφεται ποια ip επισκέπτεται το site σας και με ποιον Browser. Ιδιαίτερα χρήσιμο όταν σας κάνουν επιθέσεις στο site σας.

Μια άλλη μορφή που μπορείτε να το βρείτε είναι:
Κώδικας: Επιλογή όλων
<VirtualHost <ip>: <port> >
ServerAdmin <email>
ServerName <ip ή domain>
ServerAlias <ip ή domain>
DocumentRoot <path>
DirectoryIndex index.html, index.php, index.htm

ErrorLog <path για logs σφαλμάτων>
CustomLog <path_για_logs> combined
</Virtualhost>


Η μόνη διαφορά με το πάνω είναι ότι DirectoryIndex μπορείτε να ορίσετε ποια σελίδα θα σερβίρει by default ο apache όταν δίνεται το url τις σελίδας σας.

Για Ubuntu 14.04 και αργότερα το Vhost παίρνει αυτήν την μορφή:
Κώδικας: Επιλογή όλων
<VirtualHost <ip>: <port> >
ServerAdmin <email>
ServerName <ip ή domain>
ServerAlias <ip ή domain>
DocumentRoot <path>

ErrorLog <path για logs σφαλμάτων>
CustomLog <path_για_logs> combined

<Directory />
   Order allow,deny
   Allow from all
   Require all granted
</Directory>
</Virtualhost>


Αν δεν μπορείτε να δείτε αλλαγή δοκιμάστε να αδείασεται την πρωσορινή μνήμη cache του browser σας. Αν θέλεται να κάνεται ένα vhost στο localhost καλό είναι να απενεργοποιήσεται το 000-default virtual host


Αν κατά την επίσκεψή σας σε ένα οποιοδήποτε υποφάκελο σας πετάει error 300
Δοκιμάστε:
<Directory /[subdirectory]>
Order allow,deny
Allow from all
Require all granted
</Directory>
Πρίν από το "</Virtualhost>"



Σενάριο:
Έστω ότι έχουμε ένα site το example.com . Θέλουμε όταν δίνουμε την ip του server έστω η 192.168.1.5 να εμφανίζει μια html με το περιεχόμενο "Γεια σου Μαρία" και όταν δίνουμε example.com να σερβίρει το site μας. Άρα θα χρειαστούμε 2 Vhost.

Κάνουμε έναν φάκελο που θα φιλοξενήσει τα Vhost μας έστω ότι το κάνουμε στο /home.
Κώδικας: Επιλογή όλων
sudo mkdir /home/www

Σε αυτόν τον φάκελο κάνουμε 2 φακέλους έναν για κάθε site έστω τον example για το example.com και το maria για την html "Γεια σου Μαρία".
Κώδικας: Επιλογή όλων
sudo mkdir /home/www/maria
sudo mkdir /home/www/example


Στον εκάστοτε φάκελο (maria,example) θα κάνουμε 2 υποφακέλους έναν για να κρατά τα αρχεία .html και .php και έναν άλλον για να κρατά τα logs έτσι δίνουμε:
Κώδικας: Επιλογή όλων
#Φάκελοι για  τα .html .php
sudo mkdir /home/www/maria/htdocs
sudo mkdir /home/www/example/htdocs

#Φάκελοι για τα logs
sudo mkdir /home/www/maria/logs
sudo mkdir /home/www/example/logs


Μετά Δίνουμε:
Κώδικας: Επιλογή όλων
sudo chown nobody /home/www/maria/htdocs #H άλλον χρήστη πέρα από τον root
sudo chown nobody /home/www/example/htdocs #H άλλον χρήστη πέρα από τον root

sudo chmod 775 /home/www/maria/htdocs
sudo chmod 775 /home/www/example/htdocs



Στο /home/www/maria/htdocs δίνουμε το εξής απλό index.html
Κώδικας: Επιλογή όλων
<DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>
Γειά σου Μαρία
</title>
<body>
<h1>Γειά σου Μαρία</h1>
</body>
</head>
</html>


και μετά δημιουργούμε τα vhosts:
Το πρώτο για το maria θα περειέχει:
Κώδικας: Επιλογή όλων
<VirtualHost *:80 >
ServerAdmin webmaster@192.168.1.5 #τυχαία το έβαλα
ServerName 192.168.1.5
ServerAlias 192.168.1.5
DocumentRoot /home/www/maria/htdocs

ErrorLog /home/www/maria/logs/error.log
CustomLog /home/www/maria/logs/access.log combined
</Virtualhost>

και το αποθηκεύουμε σαν maria στο /etc/apache2/sites-available/

Ομοίως για το example.com:
Κώδικας: Επιλογή όλων
<VirtualHost *:80 >
ServerAdmin webmaster@example.com #τυχαία το έβαλα
ServerName example.com
ServerAlias example.com
DocumentRoot /home/www/example/htdocs

ErrorLog /home/www/example/logs/error.log
CustomLog /home/www/example/logs/access.log combined
</Virtualhost>

και το αποθηκεύουμε σαν example στο /etc/apache2/sites-available/

Έτσι δίνουμε:
Κώδικας: Επιλογή όλων
sudo a2ensite maria
sudo a2ensite example


Και μετά:
Κώδικας: Επιλογή όλων
sudo service apache2 reload


Και voila έχουμε 2 vhosts που σερβίρουν διαφορετικά περιεχόμενα για διαφορετικά domain.

Τέλος κατεβάζουμε ένα site με:
Κώδικας: Επιλογή όλων
sudo a2dissite <όνομα_vhost>

Όπου <όνομα_vhost> ισχύει ότι και στο a2ensite.

Αποτελούν αρχικά οδηγοί από το site της Linuxteam του Τει Στερεάς Ελλάδας:
http://linuxteam.teilam.gr/forum/viewto ... ?f=6&t=223
http://linuxteam.teilam.gr/forum/viewto ... ?f=6&t=224

Τέλος να σημειώσω ότι έχουν δοκιμαστεί σε Ubuntu 12.04 αλλά και σε νεότερες εκδόσεις θα παίζουν. Αν δεν παίζουν "σφυρίξτε" το εδώ πέρα.

Re: Στήσιμο LAMP Stack και Vhosts σε Ubuntu.

ΔημοσίευσηΔημοσιεύτηκε: 11 Δεκ 2013, 16:04
από eliasps
Μπράβο για τον οδηγό! :thumbup:

Προστέθηκε στους οδηγούς.


Re: Στήσιμο LAMP Stack και Vhosts σε Ubuntu.

ΔημοσίευσηΔημοσιεύτηκε: 06 Απρ 2014, 12:35
από giwrgosatma
και ποια η διαφορα του με αυτο εδω ?
https://forum.ubuntu-gr.org/viewtopic.php?f=9&t=25560&p=270962

Re: Στήσιμο LAMP Stack και Vhosts σε Ubuntu.

ΔημοσίευσηΔημοσιεύτηκε: 06 Απρ 2014, 13:13
από lepidas
ναι,εδω μας λεει και πως θα ρυθμισουμε το vhosts,να εχουμε πολλαπλα "domains"κατω απο τον ιδιο server

Re: Στήσιμο LAMP Stack και Vhosts σε Ubuntu.

ΔημοσίευσηΔημοσιεύτηκε: 06 Απρ 2014, 16:13
από the_eye
@pc_mangas
Έχω μια ερώτηση για ένα θέμα ασφαλείας. Έχεις κάπου μια τέτοια εγκατάσταση για να δοκιμάσουμε κάτι ;
Κώδικας: Επιλογή όλων
/home/www/maria/htdocs
/home/www/example/htdocs

Re: Στήσιμο LAMP Stack και Vhosts σε Ubuntu.

ΔημοσίευσηΔημοσιεύτηκε: 06 Απρ 2014, 19:37
από pc_magas
the_eye έγραψε:@pc_mangas
Έχω μια ερώτηση για ένα θέμα ασφαλείας. Έχεις κάπου μια τέτοια εγκατάσταση για να δοκιμάσουμε κάτι ;
Κώδικας: Επιλογή όλων
/home/www/maria/htdocs
/home/www/example/htdocs

Έχω έναν webservewr με ubuntu στον okeanos.

Re: Στήσιμο LAMP Stack και Vhosts σε Ubuntu.

ΔημοσίευσηΔημοσιεύτηκε: 06 Απρ 2014, 20:13
από the_eye
Δεν αν μπορείς με ένα php αρχείο στο /home/www/maria/htdocs να κάνεις include ένα άλλο στο /home/www/example/htdocs

Re: Στήσιμο LAMP Stack και Vhosts σε Ubuntu.

ΔημοσίευσηΔημοσιεύτηκε: 06 Απρ 2014, 20:31
από giwrgosatma
δεν καταλαβα πως το κανουν αυτο...και καποιες εντολες δεν μου της διαβαζει

Re: Στήσιμο LAMP Stack και Vhosts σε Ubuntu.

ΔημοσίευσηΔημοσιεύτηκε: 06 Απρ 2014, 20:39
από giwrgosatma
προβλημα με βγαζει στα πακετα το ειχα κανει και εχθες μαλλον θα εκανα λαθος σε καποια σημεια..τωρα πως το ξανακανω απο την αρχη..θελω να διαγραψω ολα τα πακετα και να το παρω παλι απο την αρχη

Re: Στήσιμο LAMP Stack και Vhosts σε Ubuntu.

ΔημοσίευσηΔημοσιεύτηκε: 06 Απρ 2014, 20:53
από lepidas
Κώδικας: Επιλογή όλων
sudo apt-get remove apache2*
sudo apt-get remove php*