Webcie-vm
Zie ook: Webcie-vms (!)
Contents
Nieuwe vm-webcie-debug aanmaken
Maak een nieuwe vm vm-webcie-debug aan. Kickstart de vm en highstate de vm met salt. Installeer mariadb met het volgende commando:
/usr/bin/mysql_secure_installation
Zet het rootwachtwoord en disalow root login remotely. Let op: de rootwachtwoorden van de databases van de vm-webcie/www en vm-webcie/www-debug moeten hetzelfde zijn!
Maak in de home van de root het bestandje .my.cnf aan (zet de rechten op 0600!) met de volgende content:
[client] user = root pass = root-database-wachtwoord
Maak ook de juiste databases aan (bv test_whoswho4, test_benamite of boeken. Denk eraan dat op een vm-webcie/www-machine er zowel de normal db als test_db moeten zijn). Kopieër nu de databases. Vergeet ook niet de mysql-database te kopieëren, daar staan de rechten van de verschillende gebruikers in. Maak eerst een dump op de oude vm:
mysqldump 'dbnaam' > 'dbnaam'.db
Kopieër het dumpbestand naar de nieuwe vm en laad de dump in op de nieuwe vm:
mysql 'dbnaam' < 'dbnaam'.db
Opzetten vm-www2
Deze instructies zijn bedoeld voor de WebCie. We gaan ervan uit dat je het WebCie-wachtwoord uit je hoofd kent.
Vraag de Sysop om een nieuwe vm (ik bedoel uiteraard container ;)) met subdomein (in dit geval: vm-www2.a-eskwadraat.nl) en dezelfde mounts als de originele vm. Zorg ervoor dat sendmail vanaf de nieuwe vm werkt. Verkrijg roottoegang op de vm-www2.
In het begin heeft yum nog een update voor repositorygegevens nodig: doe yum clean all
voordat je een ander yum-commando draait.
Mariadb en replicatie
Installeer mariadb als op de vm-www-debug: yum install mariadb mariadb-server
(let op: ivm backwards incompatibility willen we versie 5.5 voorlopig), systemctl enable mariadb
, systemctl start mariadb
en dan /usr/bin/mysql_secure_installation
. Check even of inloggen nog werkt: mysql -u root -p
. Check ook dat je verbinding kan maken met mysql op de originele host vanaf de nieuwe host: mysql -h vm-www -u root -p
.
LET OP! Replicatie gaat niet helemaal goed samen met de backup van de binaire logs, zorg er eerst voor dat dat gefixt is, voordat je deze handleiding verder leest.
Nu gaan we replicatie opzetten (master-master). We moeten hiervoor een random wachtwoord genereren, bewaar die goed! Open in een nieuwe terminal op de originele host, en pas de my.cnf
aan:
[mysqld] server-id=1 log-bin
Herstart mysqld/mariadb om de wijzigingen toe te passen. Log in als root op mysql en geef permissies: grant replication slave on *.* to repli@'vm-www2.a-eskwadraat.nl' identified by 'replipassword'; flush privileges;
. Zet de tabellen op slot terwijl we de rest doen: flush tables with read lock;
. Ten slotte moeten we wat gegevens bekomen: show master status\G
. Log niet uit tot we klaar zijn, dan gaan de tabellen weer van het slot af.
In de andere terminal op vm-www2
gaan we ook de my.cnf
aanpassen (ik heb de wijzigingen in /etc/my.cnf.d/webcie.cnf
gezet):
[mysqld] server-id=2
Herstart mariadb om de wijzigingen toe te passen. We moeten ook de volledige(!!!) databaasinhoud overzetten. (Dit is een van de redenen dat je een read lock hebt.) Doe een mysqldump van de gehele database inclusief tabellen, permissies en inhoud en pas die toe op de nieuwe db.
Log in op de nieuwe db met mysql -u root -p
en stel replicatie in:
CHANGE MASTER TO MASTER_HOST='master.domain.com', MASTER_USER='replication_user', MASTER_PASSWORD='bigs3cret', MASTER_PORT=3306, MASTER_LOG_FILE='mariadb-bin.000096', MASTER_LOG_POS=568, MASTER_CONNECT_RETRY=10;
(De juiste waarden haal je uit de uitvoer van show master status\G
op de originele host.) Vervolgens START SLAVE; SHOW SLAVE STATUS \G
.
Als de uitvoer een beetje sense maakt, dan heb je succesvol een master-slave replicatie van de oude naar de nieuwe host opgezet. Doe UNLOCK TABLES;
op de originele host en probeer wat aan te passen. Dit zou op de nieuwe host terecht moeten komen.
Als een error bij de slave gebeurd is die niet op master voorkwam, gaat die blokkeren tot je het fixt. Wat je kan doen als het echt helemaal in de soep loopt, is opnieuw alles op slot gooien, een dbdump overnemen van master naar slave. Doe weer show master status\G
en unlock de master. Vervolgens doe je op de slave change master to MASTER_LOG_POS=37071; START SLAVE;
en dan zou die automatisch alles wat sinds de backup is gebeurd, weer naar binnen gaan slurpen.
Nu gaan we de replicatie de andere kant op sturen. Dit is in principe het precies omgekeerde van wat we hiervoor deden. Pas op vm-www2 de my.cnf
aan:
[mysqld] server-id=2 log-bin
en herstart mariadb. Voeg de repli-user toe op de vm-www2: grant replication slave on *.* to repli@'vm-www.a-eskwadraat.nl' identified by 'replipassword'; flush privileges;
. Doe op allebei de hosts een table lock, doe op de nieuwe host show master status\G
en op de originele host de replicatie-instellingen:
CHANGE MASTER TO MASTER_HOST='master.domain.com', MASTER_USER='replication_user', MASTER_PASSWORD='bigs3cret', MASTER_PORT=3306, MASTER_LOG_FILE='mariadb-bin.000096', MASTER_LOG_POS=568, MASTER_CONNECT_RETRY=10;
En nu kun je op de originele host start slave;
runnen, en je hebt een master-masterreplicatie :D
Installeer Apache, PHP en PHP-FPM
Doe yum install httpd
voor Apache.
Voor een niet verschrikkelijk antieke PHP moet je extra dingen installeren (zie ook [1]:
yum install epel-release yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm yum install yum-utils yum-config-manager --enable remi-php56 # of php72 of andere versie yum install php php-fpm
Installeer ook alle PHP-extensies die nodig zijn. (Zie die pagina voor de lijst.)
Overige dependencies:
yum install gettext java npm python36 python36-virtualenv npm install -g bower
Nu moeten we PHP-instellingen regelen. Maak een checkout van de website, en doe daarin:
mkdir config/vm-www2 ln -s /etc/php.ini config/vm-www2/ vim config/vm-www2/php.ini # Pas hier alle relevante config van de vm-www toe.
Installeer WhosWhoPy
Volg hiervoor de stappen in WhosWhoPy op een webcie-vm.
Cron instellen
Maak een map /website-output
aan en chown die naar apache:apache
(en zorg ervoor dat apache ernaar kan schrijven :P). Hierin komt alle output van cronjobs enzo.
Je kan in principe de crontab van de oude vm overnemen, dus ga naar de checkout, en doe:
cp scripts/cron/crontab-$VMOUD-apache scripts/cron/crontab-$VMNIEUW-apache crontab -u apache scripts/cron/crontab-$VMNIEUW-apache
om de cronjobs te activeren.
Zorg er wel voor dat de apache
-user toegang heeft tot de databases! Kopieer de .my.cnf
van de webcie-user naar de homedir van apache (/usr/share/httpd/.my.cnf
). (En check misschien ook dat daar een user en password ingesteld staan.)
Mail werkend krijgen
De website gebruikt sendmail-commando's om te mailen. Normaal stuurt sendmail de mails direct het web op, maar we willen dat deze door de vm-mailpp heen gestuurd wordt zodat de berichten juist zijn ondertekend en door spamfilters heen komen. Hiervoor gebruiken we het sendmail-commando dat uit postfix komt. Installeer postfix met:
yum install postfix
De configuratie van postfix ongeveer dezelfde als op alle CentOS7 machines en is te vinden op de vm-salt-master in /srv/salt/centos7/global/main.cf
. Je moet de volgende parameters aanpassen zodat mail naar buiten mag:
mydomain = a-eskwadraat.nl
Om mailings te configureren, voeg de volgende parameters toe aan main.cf
:
inet_interfaces = all relay_domains = a-eskwadraat.nl smtpd_recipient_restrictions = check_recipient_access regexp:/etc/postfix/access, reject_unauth_destination
En voeg de volgende regels toe aan /etc/postfix/master.cf
:
bughook unix - n n - - pipe flags=F user=webcie argv=/website/scripts/mail_process_bug_vm-www ${sender} ${size} ${recipient} lidhook unix - n n - - pipe flags=F user=webcie argv=/website/scripts/mail_process_lid ${sender} ${size} ${recipient} bouncehook unix - n n - - pipe flags=F user=webcie argv=/website/scripts/mail_process_bounce ${sender} ${size} ${recipient} mailinghook unix - n n - - pipe flags=F user=webcie argv=/website/scripts/mail_process_incoming_mailing.php ${sender} ${size} $$
En plaats de volgende regels in /etc/postfix/access
:
/^lid-[0-9]+@a-es((kwadraat)|(2))\.nl$/ FILTER lidhook: /^bug(([0-9]+)|(s))@a-es((kwadraat)|(2))\.nl$/ FILTER bughook: /^bounce-[0-9]+@a-es((kwadraat)|(2))\.nl$/ FILTER bouncehook: /^((.*-)|)mailing((s)|)@a-es((kwadraat)|(2))\.nl$/ FILTER mailinghook:
Stel nu in dat het sendmail-commando uit postfix gebruikt wordt in plaats van de standaard sendmail:
update-alternatives --config mta
En start dan de postfix service met service postfix start
.
Zo worden de mails doorgestuurd naar de juiste scriptjes van de WebCie. Zie Mail sturen naar de site
IPA
yum install ipa-client
Voor autologin:
yum install mod_auth_kerb mod_authnz_pam mod_lookup_ident sssd-dbus
Het volgende moet de sysop regelen:
ipa-client-install ipa host-add dummyhost.example.com --desc="Dummy Host" --location="<fqdn-of-webserver>" ipa host-add-managedby dummyhost.example.com --hosts="<fqdn-of-webserver>" ipa service-add HTTP/dummyhost.example.com ipa service-add-host HTTP/dummyhost.example.com --hosts="<fqdn-of-webserver>" Ga naar de ipa webinterface Ga naar de tab hosts Ga naar de juiste host klik op actions -> add New certificate Voer nu de volgende commands uit in de commandline: mkdir /etc/nssdb cd /etc/nssdb certutil -N -d . mkdir /etc/httpd/certs ipa-getcert request -r -f /etc/httpd/certs/dummyhost.crt -k /etc/httpd/certs/dummyhost.key -N CN=dummyhost.example.com -D \ dummyhost.example.com -K HTTP/dummyhost.example.com
Voor autologin op de site:
ipa-getkeytab -s ipa05.a-eskwadraat.nl -p HTTP/www-auth.a-eskwadraat.nl -k /etc/httpd/conf/httpd.keytab
Stel de volgende gegevens in in /etc/sssd/sssd.conf
voor zover deze nog niet bestaat.
Onder [domain/a-eskwadraat.nl]
:
ldap_user_extra_attrs = mail,memberId,email:mail
Onder [sssd]
:
services = nss, sudo, pam, ssh, ifp
Onder [ifp]
:
allowed_uids = apache, root user_attributes = +memberId
Overige tsjak ter installatie
yum install ffmpeg git sudo vim wget
De website opzetten
Heb je alles geïnstalleerd, dan ben je klaar voor de laatste fase.
Vertel de scripts dat dit een host is: vim /etc/function
en stop daarin server
.
Ga naar de checkout van de website, kopieer handmatig de secret.php en doe daarin manage build. (Dit moet na de php-instellingen gebeuren want manage voert php uit.)
Pas de httpd-configuratie aan om de juiste paden in te stellen:
cp config/vm-www/httpd/conf.d/website.conf /etc/httpd/conf.d/ ln -s /etc/httpd config/vm-www2/httpd vim config/vm-www2/httpd/conf.d/website.conf
Nu kun je de webserver aanzwengelen :D systemctl restart httpd<code> <code>systemctl restart php-fpm
Je moet waarschijnlijk nog wat chmod'en en paden aanmaken, zie daarvoor de logs in /var/log/httpd/error_log
en /var/log/php-fpm/error.log
en /var/log/www/php-warnings.log
(in volgorde van dingen werkend krijgen).