# wordpress a 2 ec2 amb efs amb 1 ec2 com a lb i ec2 per mysql
[TOC]
## infraestructura
- vpc: 1
- az: 2
- subnets: 2 pub + 4 priv (2 frontal i 2 backend)
- ec2: 1 pub (haproxy) + 2 priv (http) + 1 priv (mysql)
- efs: 1
- igw: 1
- ngw: 1
- sg:
- 1 > haproxy - 80 i 22 des de 0.0.0.0/0
- 2 > frontals - 80 i 22 des de haproxy
- 3 > efs - 2049 des de frontals
- 4 > backend - 22 des de haproxy i 3306 des de frontals
## subdomini duckdns/dnsexit
- se guarden noms i no ips (que canvien) a la bbdd
## links
[wordpress tutorial](https://ubuntu.com/tutorials/install-and-configure-wordpress#1-overview)
## ec2 pública - LB
Atenció a les ips:
- la interna de la ec2 pública
- les 2 ips privades dels 2 frontals de wordpress
```
sudo apt update
sudo apt install -y haproxy
sudo tee /etc/haproxy/haproxy.cfg << EOF
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 10000
timeout client 10000
timeout server 10000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
frontend www
# la privada de la ec2 publica!!!!
bind 10.53.9.121:80
default_backend servfinals
backend servfinals
balance roundrobin
default-server check
# posem aquí les ips privades de les ec2 dels frontals
server serv1 10.53.141.251:80
server serv2 10.53.159.121:80
EOF
```
## ec2 privada - mysql setup
## back-end setup (des de la pròpia ec2 privada)
- instal·lació del programari
```
sudo apt update
sudo apt install -y mysql-server
```
- creació de la base de dades
```
tee crea-wordpress-db.sql <<EOF
CREATE DATABASE wordpressdb01;
CREATE USER 'asix01'@'%' IDENTIFIED BY 'Sup3rins3gura!';
GRANT ALL PRIVILEGES ON wordpressdb01.* TO 'asix01'@'%';
FLUSH PRIVILEGES;
exit
EOF
cat crea-wordpress-db.sql | sudo mysql -u root -pPassw0rdRootAcc0unt
# evitem deixar (més) rastre
rm crea-wordpress-db.sql
sudo sed -i '/addre/s|127.0.0.1|0.0.0.0|' /etc/mysql/mysql.conf.d/mysqld.cnf
sudo systemctl restart mysql.service
```
## front-end setup (en cadascuna de les 2 ec2 frontals-http)
- instal·lació de programari
```bash
sudo apt update
sudo apt install -y apache2 \
ghostscript \
libapache2-mod-php \
mysql-client \
php \
php-bcmath \
php-curl \
php-imagick \
php-intl \
php-json \
php-mbstring \
php-mysql \
php-xml \
php-zip
```
- instal·lació de nfs-common per muntar efs
```
sudo apt install -y nfs-common
```
- descàrrega del CMS (wordpress) - **ATENCIÓ a la UNITAT_COMPARTIDA**
```
sudo mkdir -p /srv/www
# cal informar el mount point generat prèviament
unitat_compartida=fs-0ef957e04ecedaeda.efs.us-east-1.amazonaws.com:/
punt_de_muntatge=/srv/www
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport $unitat_compartida $punt_de_muntatge
# si no existeix el directori és que és el 1er cop i caldrà descarregar-lo
if [ ! -d /srv/www/wordpress ]; then curl https://wordpress.org/latest.tar.gz | sudo tar zx -C /srv/www ; sudo chown www-data: /srv/www/wordpress; fi
# com que acabem de crear la instància caldrà afegir a /etc/fstab el recurs compartit pq el munte de nou quan reiniciem
grep $unitat_compartida /etc/fstab || sudo tee -a /etc/fstab << EOF
$unitat_compartida $punt_de_muntatge nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0
EOF
# ip interna # per validar que hi ha diferents instàncies
sudo tee /srv/www/wordpress/ip-interna.php << EOF
ip interna: <?php echo shell_exec("hostname -I"); ?>
EOF
sudo chown -R www-data:www-data /srv/www
```
- creació web (virtual host a apache)
```
# AllowOverride Limit Options FileInfo
sudo tee /etc/apache2/sites-available/wordpress.conf << EOF
<VirtualHost *:80>
DocumentRoot /srv/www/wordpress
<Directory /srv/www/wordpress>
Options FollowSymLinks
AllowOverride All
DirectoryIndex index.php
Require all granted
</Directory>
<Directory /srv/www/wordpress/wp-content>
Options FollowSymLinks
Require all granted
</Directory>
</VirtualHost>
EOF
```
- activació mòduls apache
```
sudo a2ensite wordpress
sudo a2enmod rewrite
sudo a2dissite 000-default
sudo service apache2 reload
```
- creació del fitxer de configuració de wordpress (el 1er cop)
```
creat_en_aquest=false
if [ ! -f /srv/www/wordpress/wp-config.php ]; then sudo -u www-data cp /srv/www/wordpress/wp-config-sample.php /srv/www/wordpress/wp-config.php; creat_en_aquest=true; fi
```
...AMB LES DADES DE LA EC2 privada (mysql)
- configuració de wordpress
```
if $creat_en_aquest; then
sudo -u www-data sed -i 's/database_name_here/wordpressdb01/' /srv/www/wordpress/wp-config.php;
sudo -u www-data sed -i 's/username_here/asix01/' /srv/www/wordpress/wp-config.php;
sudo -u www-data sed -i 's/password_here/Sup3rins3gura!/' /srv/www/wordpress/wp-config.php;
sudo -u www-data sed -i 's/localhost/10\.54\.153\.64/' /srv/www/wordpress/wp-config.php;
echo "define('FS_METHOD', 'direct');" | sudo -u www-data tee -a /srv/www/wordpress/wp-config.php;
fi
```