# 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 ```