---
# System prepended metadata

title: Ambiente de desarrollo en Ubuntu Server 22.04

---

# Wordpress en Ubuntu Server 22.04
[TOC]
## General
Primero actualizamos los repositorios y el sistema
```shell
sudo apt update && sudo apt upgrade -y
```

Instalación de LAMP
```shell
sudo apt install apache2 \
                 ghostscript \
                 libapache2-mod-php \
                 libapache2-mod-fcgid \
                 mariadb-server \
                 mariadb-client \
                 php \
                 php-bcmath \
                 php-fpm \
                 php-curl \
                 php-imagick \
                 php-intl \
                 php-json \
                 php-mbstring \
                 php-mysql \
                 php-xml \
                 php-zip
```

## Kernel
Para ver la versión de nuestro sistema utilizamos uname 
```shell
uname -r
```

Actualizamos manualmente el kernel
```shell
wget https://raw.githubusercontent.com/pimlie/ubuntu-mainline-kernel.sh/master/ubuntu-mainline-kernel.sh
sudo install ubuntu-mainline-kernel.sh /usr/local/bin/
```
Corremos el script
```shell
sudo ubuntu-mainline-kernel.sh -c
```

Instalamos el último kernel
```shell
sudo ubuntu-mainline-kernel.sh -i
```

Limpiamos dependencias
```shell
sudo apt --fix-broken install
```

## Mariadb
Finalizamos la instalación de mariadb
```shell
mysql_secure_installation
```

Entramos en mysql
```shell
mysql -u root -p
```

Dentro de MYSQL creamos una base de datos
```shell
CREATE DATABASE wordpress;
```

Creamos el usuario
```shell
CREATE USER 'wp-user'@'%' IDENTIFIED BY 'password';
```

Damos privilegios
```shell
GRANT ALL ON carbray.* TO 'wp-user'@'localhost' IDENTIFIED BY 'password';
```

Y finalizamos
```shell
FLUSH PRIVILEGES;
```
### Si tenemos problemas con los usuarios
```shell
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
```
## Wordpress
Descargamos Wordpress
```shell
cd /tmp && wget https://wordpress.org/latest.tar.gz
```

Descomprimimos el archivo
```shell
tar -xvf latest.tar.gz
```

Movemos de ruta
```shell
cp -R wordpress /var/www/
```
> [name=eliasibpl]
> Aquí hemos de cambiar el nombre del directorio por el dominio, ej: dev.iticbcn.cat

Cambiamos de propietario
```shell
chown -R www-data:www-data /var/www/wordpress/
```

Cambiamos permisos
```shell
chmod -R 755 /var/www/wordpress/
```

Creamos una carpeta uploads
```shell
mkdir /var/www/wordpress/wp-content/uploads
```

Cambiamos permisos
```shell
chown -R www-data:www-data /var/www/wordpress/wp-content/uploads/
```

Copiamos el archivo de configuración
```shell
sudo -u www-data cp /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php
```

Introducimos nuestras credenciales
```shell
sudo -u www-data sed -i 's/database_name_here/wordpress/' /var/www/wordpress/wp-config.php
sudo -u www-data sed -i 's/username_here/admincarbray/' /var/www/wordpress/wp-config.php
sudo -u www-data sed -i 's/password_here/password/' /var/www/wordpress/wp-config.php
```

Cambiamos el archivo de configuración
```shell
sudo -u www-data nano /var/www/wordpress/wp-config.php
```

Generamos una nueva salt con el siguiente enlace:
https://api.wordpress.org/secret-key/1.1/salt/

Y cambiamos 
```shell
define( 'AUTH_KEY',         'put your unique phrase here' );
define( 'SECURE_AUTH_KEY',  'put your unique phrase here' );
define( 'LOGGED_IN_KEY',    'put your unique phrase here' );
define( 'NONCE_KEY',        'put your unique phrase here' );
define( 'AUTH_SALT',        'put your unique phrase here' );
define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
define( 'LOGGED_IN_SALT',   'put your unique phrase here' );
define( 'NONCE_SALT',       'put your unique phrase here' );
```
:warning: Recuerda modificar el archivo de configuración php para habilitar plugins de mayor tamaño:warning: 

## Apache
Modificamos el archivo de sites-availables
```shell
sudo nano /etc/apache2/sites-available/dev.iticbcn.cat.conf
```

Ejemplo de `.conf`
```shell
<VirtualHost *:80>
    ServerAdmin admin@dev.iticbcn.cat
    ServerName dev.iticbcn.cat
    ServerAlias www.dev.iticbcn.cat.es
    DocumentRoot /var/www/dev.iticbcn.cat.es/
    <Directory /var/www/dev.iticbcn.cat.es/>
        Options FollowSymLinks
        AllowOverride All
        DirectoryIndex index.php
        Require all granted
    </Directory>
    <Directory /var/www/dev.iticbcn.cat.es/wp-content>
        Options FollowSymLinks
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/dev.iticbcn.cat_error.log
</VirtualHost>
```

Habilitamos el site y deshabilitamos default
```shell
sudo a2ensite dev.iticbcn.cat
sudo a2enmod rewrite
sudo a2dissite 000-default
```

Siempre podemos probar nuestra configuración con configtest
```shell
sudo apache2ctl configtest
```

Recargamos apache2
```shell
sudo systemctl reload apache2
```

Y comprobamos el estado de nuestro apache2
```shell
sudo systemctl status apache2
```

Comprobar logs
```shell
journalctl -xeu apache2
```
## DNS 
Ahora hemos de apuntar con un registro tipo A el nombre de dominio, ej. dev.iticbcn.cat a la dirección pública de nuestro servidor.
## Certificado SSL
Una vez lo tengamos los DNS's apuntando a nuestro servidor procederemos con el certificado:

Instalamos certbot
```shell
sudo apt install certbot python3-certbot-apache
```

Instalamos el certificado
```shell
sudo certbot --apache
```

Comprobamos que el estado del timer esté habilitado
```shell
sudo systemctl status certbot.timer
```

Hacemos una prueba de renovación
```shell
sudo certbot renew --dry-run
```

## Modificar tamaño de medios/plugins
Modificamos el archivo `.htaccess`
```shell
nano /var/www/dev.iticbcn.cat/.htaccess
```

Añadimos las siguientes líneas
```shell
php_value upload_max_filesize 5G
php_value post_max_size 1G
php_value memory_limit 512M
php_value max_execution_time 300
php_value max_input_time 300
```

Recargamos apache2
```shell
systemctl reload apache2
```
## Instalación de versiones específicas
### Opcional - PHP 7.4
Añadimos el repositorio
```shell
sudo add-apt-repository ppa:ondrej/php
sudo apt update
```

Se instalará 
```shell
sudo apt install php7.4
```

### Opcional - Kernel específico
Para ver la versión de nuestro sistema utilizamos uname 
```shell
uname -r
```

Actualizamos manualmente el kernel
```shell
wget https://raw.githubusercontent.com/pimlie/ubuntu-mainline-kernel.sh/master/ubuntu-mainline-kernel.sh
sudo install ubuntu-mainline-kernel.sh /usr/local/bin/
```
Corremos el script
```shell
sudo ubuntu-mainline-kernel.sh -c
```

Instalamos el kernel que nos indican
```shell
sudo ubuntu-mainline-kernel.sh -i v6.2.0
```

Limpiamos dependencias
```shell
sudo apt --fix-broken install
```