Macchina Apache Web Server: differenze tra le versioni
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| Riga 1: | Riga 1: | ||
Installazione Web Server Apache | == Installazione Web Server Apache == | ||
Durante la creazione esplicitare IP privato come <code>172.31.100.10</code><br/> | Durante la creazione esplicitare IP privato come <code>172.31.100.10</code><br/> | ||
Versione delle 13:59, 9 apr 2024
Installazione Web Server Apache
Durante la creazione esplicitare IP privato come 172.31.100.10
(configurazione di rete avanzata => IP Primario)
sudo apt update
sudo apt upgrade
sudo dpkg-reconfigure tzdata
# Cron
sudo apt install cron
#FTP
sudo apt install vsftpd
sudo nano /etc/vsftpd.conf # configurare come da guida
sudo systemctl reload vsftpd.service
# LAMP
sudo apt install apache2
# Repo per tenere aggiornato PHP e accedere alle versioni precedenti
sudo apt -y install lsb-release apt-transport-https ca-certificates
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt update
sudo apt install php-fpm php-mysql
sudo apt install php7.4-fpm php7.4-mysql
# Abilitare moduli Apache per PHP FPM
sudo a2enmod proxy_fcgi setenvif rewrite http2 brotli
sudo a2enconf php8.3-fpm
sudo systemctl restart apache2.service
sudo chown www-data:www-data /var/www -R
sudo chmod 775 /var/www -R
sudo chmod g+s /var/www -R
# Aggiungere l'utente corrente al gruppo www-data
sudo adduser admin www-data
sudo systemctl restart apache2.service
Certificati SSL
sudo apt install snapd
sudo snap install core
sudo snap refresh
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Configurazione PHP per Wordpress
PHP Configuration
A causa della presenza di più istanze Wordpress abbiamo convenuto di modificare i valori di /etc/php/7.4/fpm/php.ini nel seguente modo
upload_max_filesize = 128M
post_max_size = 256M
max_execution_time = 900
max_input_vars = 5000
memory_limit = 2048M
max_input_time = 400
E riavviare il service
sudo systemctl restart php7.4-fpm.service
Designbest Script
- Piazzare lo script createvirtualhost.sh in
/opt/script-bash - Piazzare il template virtualhost-template in
/etc/apache2/sites-available
Scaricare le dipendenze
sudo apt install unzip
- createvirtualhost.sh
#!/bin/bash
function buildVirtualhost {
return_value=$(</etc/apache2/sites-available/virtualhost-template)
return_value=$(echo -e "${return_value//'{vhostname}'/$1}")
echo "$return_value"
}
echo -e "Scrivi il dominio, per piacere: \c"
read dominio
#check lowercase
dominio=$(echo $dominio | tr '[:upper:]' '[:lower:]')
echo "Verrà creata un'istanza Wordpress per il dominio $dominio e www.$dominio"
#echo "---> Inizio creazione database MySql..."
dominio_escaped=$(echo ${dominio//./_})
# Eseguo la creazione del database sull'altra macchina
ssh ubuntu@172.31.200.10 -i /opt/script-bash/webmobili-key-pem.pem 'mysql -u designbest --password=W3bm0b1l! -e "CREATE DATABASE wp_'${dominio_escaped}';"'
#mysql -u root --password=W3bm0b1l! -e "CREATE DATABASE wp_${dominio_escaped};"
#echo "---> Database MySql creato <---"
echo "---> WORDPRESS, download ed estrazione..."
cd /var/www/
wget -O wp-temp.zip -v https://wordpress.org/latest.zip
unzip wp-temp.zip
mv wordpress $dominio
chown www-data:www-data $dominio -R
chmod 775 $dominio -R
rm wp-temp.zip
echo "---> Fine WORDPRESS <---"
echo "---> VIRTUALHOST, creazione + enable site..."
cd /etc/apache2/sites-available/
virtualhost_str=$(buildVirtualhost $dominio)
echo "$virtualhost_str" > $dominio.conf
mkdir /var/log/apache2/$dominio
chown www-data:www-data /var/log/apache2/$dominio/ -R
chmod 775 /var/log/apache2/$dominio/ -R
a2ensite $dominio.conf
echo "---> Fine VIRTUALHOST <---"
echo "---> CERTIFICATO SSL, creazione..."
#certbot --apache -d $dominio -d www.$dominio
certbot --apache -d $dominio
systemctl reload apache2.service
echo "---> Fine grazie <---"
- virtualhost-template
#
# {vhostname}
#
<VirtualHost *:80>
ServerName {vhostname}
Redirect / https://%{SERVER_NAME}%{REQUEST_URI}
</VirtualHost>
<VirtualHost *:443>
ServerAdmin info@designbest.com
ServerName {vhostname}
ServerAlias {vhostname} www.{vhostname}
DirectoryIndex index.html index.htm index.php
DocumentRoot /var/www/{vhostname}
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/{vhostname}/>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
</FilesMatch>
#Logfiles
ErrorLog /var/log/apache2/{vhostname}/error.log
</VirtualHost>
Dipendenze raccomandate
Per eliminare tutti i warning dati dalla sezione "Salute del Sito"
procedere con
sudo apt install php7.4-curl php7.4-xml php7.4-imagick php7.4-gd php7.4-mbstring php7.4-zip php7.4-intl
sudo apt install memcached php7.4-memcached
Configurare la memoria di memcached
sudo nano /etc/memcached.conf
e impostare un valore a -m
-m 512
- Installare il plugin W3 Total Cache
PHPMyAdmin
Questa guida è da seguire una volta terminata la Macchina Database
Il database sta su una macchina diversa da localhost, perciò l'installazione standard di phpmyadmin non è appropriata.
sudo apt install phpmyadmin
E scegliere NO quando chiede di installare CommonDatabase in automatico.
sudo dpkg-reconfigure phpmyadmin
- Specificare che l'istanza del database si trova su un altro host
- Immettere l'host es.
172.31.200.11e proseguire
Installare Amazon SSM Agent
Le istanze Debian non hanno questo servizio pre-installato.
Permette all'istanza di comunicare tramite AWS CLI.
mkdir /tmp/ssm
cd /tmp/ssm
wget https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.deb
sudo dpkg -i amazon-ssm-agent.deb
Fonte: https://docs.aws.amazon.com/it_it/systems-manager/latest/userguide/agent-install-deb.html
Python3 per Backup
Abbiamo uno script in Python che backuppa i siti di produzione e li copia sullo spazio di Drive automaticamente.
sudo apt install python3 python3-pip
Python PIP
Appena installato python3 soffre di un bug quando si cerca di usare PIP.
Fonte: https://www.makeuseof.com/fix-pip-error-externally-managed-environment-linux/
La soluzione è quella di cancellare un file di testo presente nella cartella di installazione:
cd /usr/lib/python3.11
sudo rm EXTERNALLY-MANAGED
Ricordiamo che PIP agisce localmente, perciò i moduli installati sono solo per l'utente che li sta installando.
Copiare il programmino in /opt/script-python/GoogleDriveUpload.
cd /opt/script-python/GoogleDriveUpload
# Importante che il gruppo di culoz.json abbia i permessi 7
sudo chmod 775 culoz.json
pip3 install -r requirements.txt
# Installare le dipendenze anche per l'utente root
sudo pip3 install -r requirements.txt
Per installare i pacchetti richiesti.
Port Forwarding NAT (Non usato)
Utilizziamo iptables per permettere la connessione di Workbench all'istanza privata database.
# Necessario essere superuser
sudo su
# Abilitare l'inoltro dei pacchetti a livello di sistema
sudo nano /etc/sysctl.conf
# net.ipv4.ip_forward = 1
# Attivare la modifica
sudo sysctl -p
# Redirigo il traffico della porta 3306 verso la macchina 172.31.100.75
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to-destination 172.31.100.75:3306
# Verifico la regola con
iptables -t nat -L
# Non so se sia necessaria
iptables -A FORWARD -p tcp -d 172.31.100.75 --dport 3306 -j ACCEPT
# Questa gestisce l'eventuale traffico che ritorna dal forwarding
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Uscire da superuser
exit
Uno strumento per verificare il forward è lanciare
sudo tcpdump -i enX0 port 3306
che si mette in ascolto della porta 3306,
provare una connessione per verificare gli inoltri da terminale.
Con mysql-client si può provare in questo modo
mysql --host=<ippubblico> --user=designbest --password=W3bm0b1l! sys