Enterprise Linux - LAMP
Student name: Kimberly De Clercq
Github repo: https://github.com/HoGentTIN/elnx-1920-sme-KimberlyDC/
Opdrachtomschrijving
LAMP = Linux, Apache, MySQL en PHP
We zullen Apache, MariaDB en Wordpress gebruiken als bouwstenen voor de website.
De installatie wordt volledig geautomatiseerd aan de hand van Vagrant en Ansible.
Test plan
1. Ga op uw hostsysteem naar de working directory van je github repository
C:\Users\Eigenaar\Desktop\HoGent\3TIN\Enterprise Linux\elnx-1920-sme-KimberlyDC>
2. Execute vagrant status
Er is één VM beschikbaar genaamd pu001 met de status not created. Indien de VM bestaat, verwijder deze eerst met vagrant destroy -f pu001
3. Execute vagrant up pu001
Het commando zou uitgevoerd moeten worden zonder errors (exit status 0)
4. Na vagrant up (wanneer de VM nog niet is gemaakt), zou de installatiepagina van Wordpress zichtbaar moeten zijn als u op uw hostsysteem surft naar https://192.0.2.10/wordpress/.
5. Log in on the server with vagrant ssh pu001 and run the acceptance tests. They should succeed: 15 tests, 0 failures
$ [kimberly@pu001 ~]$ sudo /vagrant/test/runbats.sh Running test /vagrant/test/lamp.bats
✓ The necessary packages should be installed ✓ The Apache service should be running
✓ The Apache service should be started at boot ✓ The MariaDB service should be running
✓ The MariaDB service should be started at boot ✓ The SELinux status should be ‘enforcing’
✓ Web traffic should pass through the firewall ✓ Mariadb should have a database for Wordpress ✓ The MariaDB user should have write
✓ The website should be accessible through HTTP ✓ The website should be accessible through HTTPS ✓ The certificate should not be the default one ✓ The Wordpress install page should be visible under http://192.0.2.10/wordpress/
✓ MariaDB should not have a test database ✓ MariaDB should not have anonymous users
6. Surf vanop je hostsysteem naar http://192.0.2.10. Dit zou moeten werken.
Je mag geen certificaat error krijgen, het certificaat is self-signed.
Procedure/Documentatie
Allereerst voegen we de rollen ansible-role-httpd-master, ansible-role-mariadb-master en ansible-role-wordpress-master van bertvv toe aan site.yml.
Wijzig in de folder /vagrant/ansible/roles/ansible-role-wordpress-master/meta/main.yml de dependency naar ansible-role-httpd-master.
In all.yml voegen we de role variabele rhbase_firewall_allow_services met http en https toe. Verder voegen we de role variabele rhbase_firewall_allow_ports toe, hierbij moet 8080/tcp en 53/udp
aanwezig zijn.
Tot slot voegen we de role variabele rhbase_firewall_interfaces toe, hieraan mogen de interfaces enp0s3 en enp0s8 meegegeven worden.
Onder host_vars maken we een nieuwe file genaamd pu001.yml. Alleereerst maken we met MariaDB een database genaamd wpdb1, met mariadb_root_password geven we het MariaDB root password weer.
Vervolgens voegen we een user toe met mariadb_users. Deze moet telkens de velden name, password en priv bevatten. Optionele velden zijn host en append_privs.
Vervolgens maken we een wordpress database genaamd wpdb1 met dezelfde user en hetzelfde password aangemaakt bij mariadb. Verder kunnen we een aantal plugins en themes installeren voor Wordpress.
Verander in het test script test/pu001/lamp.bats de variabelen naar de waarden vanuit jouw configuratiescript.
mariadb_root_password=root wordpress_database=wpdb1 wordpress_user=kimberly wordpress_password=letmein
Vervolgens genereren we een SSL (Secure Sockets Layer) certificaat. SSL certificaten maken gebruik van het https-protocol van de browser (via poort 443) wat de beveiligde verbinding tot stand brengt. We loggen in met ssh ssh kimberly@192.0.2.10 Eerst moeten we de vereiste software verkrijgen met het volgende commando sudo yum install mod_ssl openssl.
Nu kunnen we een self-signed certificaat genereren. Om de key te maken hebben we tevens rootrechten nodig. Dit kan je eenvoudig doen door sudo voor de commando's te plaatsen.
# Generate private key
[kimberly@pu001 ~]$ sudo openssl genrsa -out ca.key 2048
# Generate CSR
[kimberly@pu001 ~]$ sudo openssl req -new -key ca.key -out ca.csr
# Country Name: BE
# Organization Name: HoGent
# Organization Unit Name: .
# Common Name: Kimberly
# Email Address: .
# Challenge password: Admin2019
# Optional company name: .
# Generate self-signed key
[kimberly@pu001 ~]$ sudo openssl x509 -req -days 365 -in ca.csr -signkey ca.key - out ca.crt
Signature ok
subject=/C=BE/ST=West-Vlaanderen/O=HoGent/CN=Kimberly Getting Private key
# Copy the files to the correct locations
[kimberly@pu001 ~]$ sudo cp ca.crt /etc/pki/tls/certs
[kimberly@pu001 ~]$ sudo cp ca.key /etc/pki/tls/private/ca.key [kimberly@pu001 ~]$ sudo cp ca.csr /etc/pki/tls/private/ca.csr
Als u de bestanden hebt verplaatst en niet hebt gekopieerd, kunt u sudo restorecon -RvF /etc/pki gebruiken om de SELinux-context te corrigeren.
We maken een folder files aan onder ansible/roles/ansible-role-httpd-master/. Vervolgens
kopiëren we de benodigde bestanden naar de juiste locatie. Uw Vagrant / Ansible-project file is in uw virtuele machine onder /vagrant/ gemonteerd. We kopiëren alle certificaat files naar de directory ansible/. Hierin kopiëren we het httpd_ssl_certificate_file en het httpd_ssl_certificate_key_file als volgt:
[kimberly@pu001 ~]$ sudo cp ca.crt /vagrant/ansible/roles/ansible-role-httpd- master/files
[kimberly@pu001 ~]$ sudo cp ca.key /vagrant/ansible/roles/ansible-role-httpd- master/files
Daarna moeten we het Apache SSL configuratie bestand updaten. Gebruik sudo vi /etc/httpd/conf.d/ssl.conf om de certificate files te wijzigen.
Wijzig de paden om overeen te komen waar het key bestand is opgeslagen. Wijzig de certificate files naar het onderstaande:
SSLCertificateFile: /vagrant/ansible/roles/ansible-role-httpd-master/files/ca.crt SSLCertificateKeyFile:/vagrant/ansible/roles/ansible-role-httpd-
master/files/ca.key
# Quit en save het bestand (esc + :wq!)
[kimberly@pu001 ~]$ sudo service httpd restart
Gebruik cat /etc/httpd/conf.d/ssl.conf om uw wijzigingen te bekijken.
Het ca.csr bevindt zich in de volgende folder:
[kimberly@pu001 ~]$ cd /vagrant/ansible
[kimberly@pu001 ansible]$ cat /etc/pki/tls/private/ca.csr
We passen de file site.yml om de variabele httpd_scripting voor httpd in te stellen. Deze stellen we in onder vars met 'php' meegegeven.
In pu001.yml U kunt de poortnummers 443 en 80 meegeven aan httpd_listen_ssl en aan httpd_listen.
Dit hoeft u niet toe te voegen, want dit zijn de default poortnummers.
Verder geven we aan httpd_ssl_certificate_file de naam van het certificate bestand mee, dit is default localhost.crt. Hieraan geven we dus ca.crt mee. httpd_ssl_certificate_key_file is de naam van het certificaat key bestand, dit is default localhost.key. Dit veranderen we naar ca.key.
Test rapport
1. Ga op uw hostsysteem naar de working directory van je github repository
C:\Users\Eigenaar\Desktop\HoGent\3TIN\Enterprise Linux\elnx-1920-sme-KimberlyDC>
2. Execute vagrant status
Er is één VM beschikbaar genaamd pu001 met de status not created. Indien de VM bestaat, verwijder deze eerst met vagrant destroy -f pu001
3. Execute vagrant up pu001
Het commando wordt uitgevoerd worden zonder errors (exit status 0)
4. Na vagrant up (wanneer de VM nog niet is gemaakt), zou de installatiepagina van Wordpress zichtbaar moeten zijn.
Surf vanop het hostsysteem naar https://192.0.2.10/wordpress/.
5. Log in on the server with vagrant ssh pu001 and run the acceptance tests.
$ [kimberly@pu001 ~]$ sudo /vagrant/test/runbats.sh Running test /vagrant/test/pu001/lamp.bats
✓ The necessary packages should be installed
✓ The Apache service should be running
✓ The Apache service should be started at boot
✓ The MariaDB service should be running
✓ The MariaDB service should be started at boot
✓ The SELinux status should be ‘enforcing’
✓ Web traffic should pass through the firewall
✓ Mariadb should have a database for Wordpress
✓ The MariaDB user should have write
✓ The website should be accessible through HTTP
✓ The website should be accessible through HTTPS
✓ The certificate should not be the default one
✓ The Wordpress install page should be visible under http://192.0.2.10/wordpress/
✓ MariaDB should not have a test database
✓ MariaDB should not have anonymous users 15 tests, 0 failures
6. Surf vanop je hostsysteem naar http://192.0.2.10. Je mag hierbij geen certificaaterror krijgen, het certificaat is self-signed.
We zien de test pagina van Apache HTTP-server.
Resources
MariaDB role: https://github.com/bertvv/ansible-role-mariadb
Test playbook MariaDB: https://github.com/bertvv/ansible-role-mariadb/blob/docker-tests/test.yml httpd role: https://github.com/bertvv/ansible-role-httpd
Test playbook httpd: https://github.com/bertvv/ansible-role-httpd/blob/vagrant-tests/test.yml Wordpress role: https://github.com/bertvv/ansible-role-wordpress
Test playbook wordpress: https://github.com/bertvv/ansible-role-wordpress/blob/vagrant- tests/test.yml
IBM-Cloud roles: https://github.com/IBM-Cloud/terraform-provider-ibm/tree/master/examples/ibm- ansible-samples/ibm_ansible_wordpress/roles
Self-signed certificaat: https://wiki.centos.org/HowTos/Https
Ansible Roles: https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html Copy files to remote locations: https://docs.ansible.com/ansible/latest/modules/copy_module.html Restart httpd service: https://www.cyberciti.biz/faq/restart-httpd/
Working with playbooks: https://docs.ansible.com/ansible/latest/user_guide/playbooks.html Ansible Playbook: https://docs.ansible.com/ansible/latest/cli/ansible-playbook.html