# DPL - Instalación LAMP
<div style="text-align: center;">
<img src="https://i.imgur.com/1V6hVIa.jpg" alt="LAMP"/>
<h4 style="text-align: right;">Jerobel Rodriguez</h4>
</div>
<hr>
## Índice
[TOC]
<hr>
## Actualizar sistema
1. Actualizar lista de paquetes y versiones:
```bash=
apt update
```
2. Instalación de las nuevas versiones:
```bash=
apt upgrade
```
## Instalación Apache2
1. Instalación de paquetes:
```bash=
apt install apache2
```
2. Comprobar estado del servidor:
```bash=
service apache2 status
systemctl status apache2
```
3. El servidor está alojado en la dirección **127.0.0.1** o **localhost**, si no aparece, comprobar que tiene **autorización en el firewall**.
4. Una vez que todo es correcto, vamos a modificar la configuración de **Apache2** para que se prioricen los archivos ***.php**.
```bash=
# Accedemos a la carpeta
cd /etc/apache2/mods-enable
# Cambiamos la configuración para que cargue primero *.php
vim dir.conf # Cambiar orden y poner index.php primero.
```
5. Creamos el index.php
```bash=
cd /var/www/html
vim index.php
```
6. Reiniciamos el servicio para que se efectuen los cambios.
```bash=
systemctl reload apache2
```
## Instalación MySQL
1. Instalación de paquetes:
```bash=
apt install mysql-server
```
2. Para comprobar que funciona correctamente lo ejecutamos con `mysql`.
## Instalación PHP
1. Instalación de paquetes:
```bash=
apt install php libapache2-mod-php php-mysql
```
## Instalación PHPMyAdmin
1. Instalación y paquetes asociados:
```bash=
apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl
```
2. Habilitamos que apache trate las cadenas de php (desactivado por default).
```bash=
cd /ect/apache2/conf-enabled
phpenmod mbstring
```
3. Reiniciamos el servicio de apache2.
4. Comprobamos si funciona entrando a http://localhost/phpmyadmin, aunque lo probable es que no funcione (nos debería salir un error como phpmyadmin not found), para solucionarlo habría que editar el /etc/apache2/apache.conf y añadir lo siguiente al final del archivo:
```bash=
Include /etc/phpmyadmin/apache.conf
```
*Crear usuario daw en mysql para acceder a PHPMyAdmin*
## Instalación FTP
```bash=
sudo apt-get install proftdp
# Comprobar que está correctamente instalado
systemctl status proftdp
service proftpd status
```
*El fichero de configuración se encuentra en /etc/proftpd/proftdp.conf*
*Los usuarios creados se pueden comprobar en el fichero /etc/passwd*
*Para limitar el acceso a una carpeta se especifica en el DocumentRoot*
***Conectar a ftp***
```bash=
ftp [ipServer]
```
## Extra
### Firewall
Como es posible que el firewall esté desactivado, lo activamos usando:
```bash=
ufw enable
```
Comprobar que opciones tenemos:
```bash=
uwf h
```
Comprobar estado del firewall:
```bash=
ufw status
```
Listar aplicaciones disponibles:
```bash=
ufw app list
```
Autizar aplicacion en el firewall:
```bash=
ufw allow in "[app-name]"
```
### Comprobar IP pública
```bash=
curl http://icanhazip.com
```
### Crear un usuario en MySQL
```sql=
CREATE USER '[username]'@'localhost' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY '[password]';
```
Otorgarle permisos:
* Para todas las BD disponibles:
```sql=
GRANT ALL PRIVILEGES ON *.* TO '[username]'@'localhost';
```
* Para una tablas seleccionadas:
```sql=
GRANT ALL PRIVILEGES ON [database].* TO '[username]'@'localhost';
```
Eliminar un usuario:
```sql=
DROP USER '[username]'@'localhosrt';
```
### Cambiar permisos
```bash=
sudo chmod -R 777 [path] # Para dar todos los permisos
```
### Abrir puertos en Apache
```bash=
nvim /etc/apache2/ports.conf
# Añadir
Listen [port]
```
### Instalar SSL autofirmado
***Activar SSL**
```bash
a2enmod ssl
systemctl reload apache2
```
***Instalarlo como público***
```bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
```
```bash
a2ensite [project].conf
apache2ctl configtest # Comprobar si la configuración está bien
systemctl reload apache2
apache2ctl -S # Ver status
```
***Cambiar el puerto a 443 y activar SSL***
```bash=
# /ect/apache2/sites-available
nvim [project].conf
a2ensite [project].conf
systemctl reload apache2
```
```bash=
# Añadir en VirtualHost *:443
SSLEngide on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
```
**Nota:** Debería abrirse el puerto cuando ponemos `https://[ServerAlias]`
Para redirigir el http al https se vuelve a ir al .conf y se añade una nueva etiqueta al VirtualHost con puerto 80.
```bash
ServerName [project].son
Redirect / https://[ServerAlias]
```
Reiniciar con a2ensite y systemctl.
### Crear usuarios y grupos
```bash
# Crear usuario
useradd [username]
# Crear contraseña
passwd [username]
```
```bash
# Crear grupo
sudo groupadd [name]
# Eliminar grupo
sudo groupdel [name]
# Agregar usuario al grupo
sudo usermod -aG [group] [user]
# Mostar los grupos que pertenece un usuario
groups [name]
```
### Comandos FTP
| Comando | Descripción |
| - | - |
| ? | Muestra todos los comandos disponibles |
| ? [command] | Muestra que hace un comando |
| dir | Lista los directorios |
| ls | Lista los ficheros |
| pwd | Muestra donde nos encontramos |
| mkdir | Crea un nuevo directorio |
| rmdir | Elimina un directorio |
| get [path] | Descarga el fichero del servidor |
| put [path] | Sube un fichero al servidor |
| delete | Elimina el fichero |
| exit | Cierra la sesión ftp |
###### tags: `dpl`