Configurar servidor para wordpress

En primer paso, hay que asegurarse de que el servidor está actualizado, para ello escribimos (en el caso de que sea centos):

yum update -y

Una vez actualizado, instalamos los paquetes necesarios para wordpress

yum install -y httpd mariadb-server mariadb php php-mysql php-fpm php-pecl-memcache mod_ssl openssl

(previo a esto instalar Mariadb10)

# vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

yum -y install MariaDB-server MariaDB-client

Ahora es el momento de configurar los diferentes servicios (apache, mysql, iptables).

Apache

En la configuración de apache, debemos de crear las carpetas sites-enabled sites-available dentro de /etc/httpd/. Una vez creadas las carpetas añadimos el archivo subdomain.si2.info.conf (Cambiandolo por el subdominio que queremos configurar) dentro de sites-available con el siguiente contenido:

<VirtualHost *:80>
 ServerName subdomain.si2.info
 DocumentRoot /var/www/subdomain.si2.info

<Directory /var/www/subdomain.si2.info>
 Options Indexes FollowSymLinks
 AllowOverride All
 Deny from 191.96.249.80 <-- En caso de que quieras bloquear una dirección IP.
 Require all granted
 </Directory>

</VirtualHost>
<VirtualHost *:443>
 ServerName subdomain.si2.info
 DocumentRoot /var/www/subdomain.si2.info

SSLEngine on
 SSLCertificateFile /var/www/subdomain.si2.info/certificate/subdomain_si2_info.crt
 SSLCertificateKeyFile /var/www/subdomain.si2.info/certificate/subdomain_si2_info.key
 SSLCertificateChainFile /var/www/subdomain.si2.info/certificate/DigiCertCA.crt
 SSLProtocol all -SSLv2 -SSLv3
 <Directory /var/www/subdomain.si2.info>
 Options FollowSymLinks MultiViews
 AllowOverride All
 Deny from 191.96.249.80
 </Directory>

</VirtualHost>
Nota: comentar las líneas de virtualhost de  /etc/httpd/conf.d/ssl.conf para evitar que se cojan los valores por defecto y prevalezcan los de sites-vailable

El siguiente paso es crear un enlace simbólico en la otra carpeta (sites-enabled) de éste archivo, para ello…

ln -s ../sites-available/subdomain.si2.info.conf subdomain.si2.info.conf

Por último tenemos que decirle al servidor apache que tenga en cuenta estos archivos de configuración, y para ello debemo de añadir al final del archivo httpd.conf la siguiente línea.

IncludeOptional sites-enabled/*.conf

Una vez configurado apache, nos toca crear y preparar el directorio para que pueda escribir y tener acceso un usuario en concreto. Creamos en /var/www la carpeta definida en el VirtualHost subdomain.si2.info, le asignamos la carpeta al usuario y grupo apache, le damos permisos de escritura al grupo. Los pasos 2, 3 y 4 son necesarios solo si vamos a configurar un certificado SSL en el servidor, para ello debemos de descargarnos y copiar en dicha carpeta los tres archivos necesarios (__.crt, DigiCertCA.crt y ___.key).

1. mkdir /var/www/subdomain.si2.info
2. mkdir /var/www/subdomain.si2.info/certificates/
3. cp certificates/* /var/www/subdomain.si2.info/certificates/
4. chmod 644 -R /var/www/subdomain.si2.info/certificates/
5. chown -R apache.apache /var/www/subdomain.si2.info
6. chmod g+w /var/www/subdomain.si2.info
7. usermod -a -G apache usuario <-- Añadimos el grupo apache a nuestro usuario (así podrá subir / modificar archivos)
8. umask 002 <-- Permisos por defecto que se asignan a los nuevos ficheros.

Para que se inicie por defecto el servicio al reiniciar el servidor

// Si hay problemas escribiendo en FTP con ese user:  setfacl -R -m u:usuario:rwx /var/www/subdomain.si2.info

systemctl enable httpd.service

Comprueba la configuración de tu servidor apache ejecutando apachectl configtest y si todo va bien reinicia el apache para que actualice su configuración, si apache no inicia con el SSL habilitado, pruebe ejecutando apachectl startssl

MySQL

Es el turno del servidor de base de datos, en este caso mariadb (mysql), en primer lugar, es importante lanzar el comando mysql_secure_installation para borrar base de datos de prueba, y crearle una contraseña al usuario root. El siguiente paso es crear la base de datos y un usuario para poder conectarse a ella, para ello:

mysql -u root -p  <-- Insertamos la contraseña que le hemos asignado con el comando anterior.
CREATE DATABASE _name_;
CREATE USER '_user_'@'%' IDENTIFIED BY '_password_';
GRANT ALL PRIVILEGES ON _name_.* TO '_user_'@'%' WITH GRANT OPTION;

Con UTF8 mejor:
CREATE DATABASE _database_  CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;

Para que se inicie automáticamente el servicio al reiniciarse el servidor hay que ejecutar la siguiente línea.

systemctl enable mariadb.service

iptables

(hoy día, firewalld)
sudo firewall-cmd –zone=public –add-service=http
sudo firewall-cmd –zone=public –add-service=http –permanent

sudo firewall-cmd –zone=public –add-service=https
sudo firewall-cmd –zone=public –add-service=https –permanent

con iptables sería así:

Es posible que el servidor tenga el firewall activado, en el caso de que sea iptables, debemos de abrir los puertos 80 y 443 para que todo funcione. Para ello hay que editar el archivo /etc/sysconfig/iptables y añadimos las dos siguientes líneas ANTES de las líneas de REJECT, quedando de la siguiente manera.

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

Y reiniciar iptables: service iptables restart

Saludos ?

Updates

(por Ángel :) Posibles problemitas en vivo…

Problemas de permisos PHP escribiendo ficheros

Puede haber problemillas con PHP escribiendo ficheros (por ejemplo, en un despliegue inicial.  SElinux es un sospechoso habitual en CentOS (Ref: https://www.tecmint.com/disable-selinux-temporarily-permanently-in-centos-rhel-fedora/)
# setenforce 0

Versión de PHP

Suele pasar que ya usamos php7, y hay que actualizar. Ejemplo para CentOS (ref: https://www.digitalocean.com/community/tutorials/how-to-upgrade-to-php-7-on-centos-7)

//descargamos desde el IUS Communitt repo
# cd ~
# curl 'https://setup.ius.io/' -o setup-ius.sh
# bash setup-ius.sh

# yum remove php-cli mod_php php-common
# yum install mod_php70u php70u-cli php70u-mysqlnd

Mejor aquí: https://linuxize.com/post/install-php-7-on-centos-7/

Versión de MariaDB

Es probable que necesites actualizar MariaDB a la v10 para tener soporte utf8mb4_unicode_520_ci;

https://www.liquidweb.com/kb/how-to-upgrade-mariadb-5-5-to-mariadb-10-0-on-centos-7/

y crear la BD así: CREATE DATABASE _database_  CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;

¿Problemas para que PHP escriba ficheros?

https://www.tecmint.com/disable-selinux-temporarily-permanently-in-centos-rhel-fedora/

¿Problemas con scripts de instalacion (Duplicator…)?

Aparece un error «json_decode» en /var/log/httpd/error_log

# yum install php70u-json

¿Problemas usando Loco Translate?

yum install php-mbstring  (php70u-mbstring) 
sudo yum install php70u-json

(si hay conflictos, antes sudo yum remove php-common y después ya se instalará como dependencia de mbstring)

Un poco de info sobre añadir más swap

https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-centos-7

3 comentarios

Dejar un comentario

Tu dirección de correo electrónico no será publicada.