Crear VPS

CONFIGURACIÓN DE UN VPS (servidor virtual privado)

 

Hace poco empece con una actividad que debería saber pero que nunca puse en práctica. Hablo de crear una aplicación web y luego publicarla en un sitio de alojamiento.

Por lo general cuando nos especializamos en alguna tecnología, ejemplo Java o PHP, lo primero que pensamos es,  ¿dónde obtener un servicio de alojamiento que soporte las necesidades para nuestro sitio web?.

Suelo programar en java o en php. ¿qué pasaría si por alguna razón necesitara desarrollar un sitio web empresarial  que demandara de las dos tecnologías?

De lo poco que he consultado no hay ninguna posibilidad de albergar ambas tecnologías en un mismo sitio de hosting. Pues bien, me encontré con una muy buena solución. No es por hacer publicidad, y menos gratis, pero por accidente en un proveedor de hosting gratuito «hostinger», descubrí la posibilidad de contratar un vps.

¿Qué es un VPS?

un vps es un servidor virtual privado. Es decir, pensemos que estamos programando sobre nuestra computadora personal con sistema operativo windows, allí podríamos instalar lo que se nos viniera en gana de forma simultanea. Pues bien, un vps es eso, un sistema operativo que nos permite instalar lo que se nos antoje. y para accederlo nos es proporcionada una dirección ip publica.

Entonces procedí a contratarlo, decidí solicitar una distribución de ubuntu 14.04 de 64 bits y en el panel de administración de hostinger, me fue proporcionado la clave del usuario root para ssh.

 

Selección_001

 

En mis propias palabras, ssh es una herramienta que permite controlar una computadora de forma remota mediante comandos, y si conocemos algo de linux,  sabremos que casi todo se puede hacer de una forma más fácil mediante comandos.

¿Pero cual es la idea de la actividad?

La idea es lograr instalar mediante ssh las siguientes herramientas:

  • una maquina virtual de java
  • un editor de texto
  • un servidor ftp
  • un motor de bases de datos mysql
  • un servidor de aplicacion apache
  • un interprete php
  • un servidor de aplicaciones tomcat

En mi caso tuve que desarrollar de forma obligatoria la secuencia de los pasos para lograr que funcionara, esto no quiere decir que al emplear otra secuencia no se den los resultados deseados.

Podemos  acceder al vps mediante ssh utilizando una aplicación como putty, sin embargo yo lo hice a traves de miconsola de comandos de ubuntu. Para que funcione es necesario instalar previamente el ssh utilizando el comando:

sudo apt-get install openssh-server

luego el siguiente comando:

ssh root@direccionippublica

Selección_002

y listo!

empecemos a configurar nuestro vps:

 

 

Instalar Maquina Virtual de java

 

apt-get update
apt-get install default-jdk
java -version

Fuente:  https://www.digitalocean.com/community/tutorials/instalar-java-en-ubuntu-con-apt-get-es

La ubicación de la maquina virtual se obtiene de la siguiente manera:

whereis java

devolverá
java: /usr/bin/java /etc/java /usr/lib/java /usr/bin/X11/java /usr/share/java /usr/share/man/man1/java.1.gz

se selecciona la primera opción

ls -l /usr/bin/java

retornará
lrwxrwxrwx 1 root root 22 ene 18 2014 /usr/bin/java -> /etc/alternatives/java

una vez más

ls -l /etc/alternatives/java

retornará
lrwxrwxrwx 1 root root 39 ene 18 2014 /etc/alternatives/java -> /usr/lib/jvm/java-7-oracle/jre/bin/java

el valor que realmente vale es:
/usr/lib/jvm/java-7-oracle/jre/bin/java

Definir temporalmente la variable de entorno

export JAVA_HOME=/usr/lib/jvm/java-7-oracle/jre/bin/java
cho $JAVA_HOME

Fuente:  https://www.alvarolara.com/2015/08/24/como-saber-donde-esta-instalado-java-en-ubuntu/

Otra opción de instalación de java 7 (probado en ubuntu 18.04)

Descargar el JDK for Linux 32-bit or 64-bit (for example: jdk-7u80-linux-x64.tar.gz)

cd /home/"nombre_usuario"/Downloads

sudo mkdir -p /usr/local/java
sudo cp -r jdk-7u80-linux-x64.tar.gz /usr/local/java/

cd /usr/local/java

sudo tar xvzf jdk-7u80-linux-x64.tar.gz
ls –a #you should see jdk1.7.0_80

abrir permisos:

sudo nano /etc/profile

adicionar al final del archivo:

JAVA_HOME=/usr/local/java/jdk1.7.0_80
JRE_HOME=/usr/local/java/jdk1.7.0_80 
PATH=$PATH:$JRE_HOME/bin:$JAVA_HOME/bin

export JAVA_HOME
export JRE_HOME
export PATH

Guardar y salir.

Actualizar alternativas:

sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.7.0_80/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.7.0_80/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.7.0_80/bin/javaws" 1
sudo update-alternatives --set java /usr/local/java/jdk1.7.0_80/bin/java
sudo update-alternatives --set javac /usr/local/java/jdk1.7.0_80/bin/javac
sudo update-alternatives --set javaws /usr/local/java/jdk1.7.0_80/bin/javaws

Recargar el perfil:

source /etc/profile

Verificar la instalación:

java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

 

Configurar la memoria virtual ubuntu 22

free --human
sudo swapoff -a
free --human
cd /home/ubuntu/
mkdir swap
cd swap
fallocate -l 2G /swapfile
chmod 600 /swapfile
ls -lh /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
free -h
sudo cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -h

 

Instalar editor de texto Nano

apt-get install nano

 

 

Instalar servior ftp

apt-get install vsftpd
nano /etc/vsftpd.conf

Dentro del editor modificar la siguiente linea:

write_enable=YES <!–Quitar ; del inicio de la linea–>

ctrl+o para gurdar

y ctrl + x para salir

se reinicia el servicio

service vsftpd restart

y se evalua que el puerto de ftp haya quedado abierto

netstat-plut

 Fuentes:

http://www.redeszone.net/gnu-linux/servidor-ftp-ubuntu/

https://www.youtube.com/watch?v=h1Qz8Ci9EJ8

 

En ubuntu 018 .

sudo apt update

sudo apt install vsftpd

sudo nano /etc/vsftpd.conf

local_enable=YES

write_enable=YES

write_enable=YES <!–Quitar ; del inicio de la linea–>

sudo service vsftpd restart

Pilas! para que conecte sin problema el filezilla debe estar creada la carpeta /home/numbre_usuario con el que se conecta.

 

 

Cuando se esta conectando a con aws ec2 solo puede conectarme con filezilla y el protocolo sftp. Cómo hacerlo?

lo importante es tener el archivo .pem

desde filezilla en el menu /edicion/opciones

se añade la llave .pem genarada por aws. Preguntará si quiere optimizar la clave para filezilla. Se le dice que si. Finalmente se da click en aceptar.

En el gestor de sitios se crea una nueva conexión con los siguientes parámetros.

 

fuente: https://stackoverflow.com/questions/16744863/connect-to-amazon-ec2-file-directory-using-filezilla-and-sftp

 

Instalar Gestor de Bases de datos mySQL

apt-get install mysql-server

será solicitada una clave de root que debemos asignar y memorizar con mucho cuidado. ¡No la podemos olvidar!

reiniciamos el servicio

service mysql restart

Fuente https://help.ubuntu.com/12.04/serverguide/mysql.html

para poder acceder de una forma facil, recomiendo instalar la aplicacion mysqlworkbrench la cual es multiplataforma y permite la conexión empleando un puente ssh.

Existe una forma para acceder otra forma de acceder de forma remota, el problema es que hay que habilitar permisos para usuario root, y esto no se puede hacer de forma remota.

Se edita el archivo

nano /etc/mysql/my.cnf

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf (en caso de ubuntu 18)

se buscan las lineas y se borran los comentarios. se usa 0.0.0.0 para poder acceder desde cualquier host.

skip-external-locking
bind-address = 0.0.0.0

se reinicia el servicio de mysql.

service mysql restart

fuente: https://geekytheory.com/como-permitir-el-acceso-remoto-a-una-base-de-datos-mysql/

Por defecto no será posible acceder a la base de datos de forma remota como usuario root, por lo tanto es necesario crear desde consola un usuario con dichos provilegios.
Pasos para crear un usuario con acceso remoto

mysql -u root -p mysql (ingresar password de usuario root)

CREATE USER 'invited'@'localhost' IDENTIFIED BY 'user_password';
CREATE USER 'invited'@'%' IDENTIFIED BY 'user_password';
GRANT ALL PRIVILEGES ON *.* toinvited@localhost IDENTIFIED BY 'user_password' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* toinvited@'%' IDENTIFIED BY 'user_paswword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

(para ubuntu 18)
GRANT ALL PRIVILEGES ON *.* toinvited@localhost WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* toinvited@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* to invitado@localhost WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'invitado'@'%' WITH GRANT OPTION;

Fuente: https://stackoverflow.com/questions/9766014/connect-to-mysql-on-amazon-ec2-from-a-remote-server

Puede que el puerto de mysql este cerrado para escuchar peticiones desde direcciones externas.

apt install net-tools (en caso de ubuntu 18)
netstat -tuple nano /etc/mysql/my.cnf

dar comentario a la linea

# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1

reiniciar el servidor

sudo service mysql restart

nuevamente

netstat -tuple
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 *:smtp *:* LISTEN root 2330811630 670/master 
tcp 0 0 *:mysql *:* LISTEN mysql 3362506608 15914/mysqld 

 

Si la conexion es atraves del tunel ssh de aws ec2 se debe diligenciar con los siguientes parametros

Fuente: https://vannstudios.com/connecting-mysql-database-engine-on-amazon-ec2-from-mysql-workbench

Para instalar mysql 5.7 en ubuntu 18:

Se configura el repositorio

wget http://repo.mysql.com/mysql-apt-config_0.8.9-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.9-1_all.deb

sudo apt-get update

si por alguna razón queda mal la configuración, se puede ejecutar el comando

sudo dpkg-reconfigure mysql-apt-config

 

para desinstalar:

sudo apt-get --purge remove mysql-client mysql-server mysql-common
sudo apt-get autoremove
sudo rm -rf /etc/mysql/

 

Instalar Mysql 5.7 en ubuntu 22

# sudo apt update


# wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb


# sudo dpkg -i mysql-apt-config_0.8.12-1_all.deb



seleccionar los siguientes pasos para que seleccionemos la versión 5.7:   Seleccione ubuntu bionic

How to Install MySQL 5.7 on Ubuntu 22.04 LTS 1

 

Seleccionar en mysql 8.0How to Install MySQL 5.7 on Ubuntu 22.04 LTS 2

Selecccione mysql 5.7 y ok

How to Install MySQL 5.7 on Ubuntu 22.04 LTS 3

Seleccione mysql5.7 y ok

How to Install MySQL 5.7 on Ubuntu 22.04 LTS 4

ok para finalizar

sudo apt-get update
sudo apt-cache policy mysql-server
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29
sudo apt update
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B7B3B788A8D3785C
sudo apt install -f mysql-client=5.7* mysql-community-server=5.7* mysql-server=5.7*

Se ingresa la contraseña de root
How to Install MySQL 5.7 on Ubuntu 22.04 LTS 5

mysql -u root -p 
SELECT VERSION();
fuente:  https://www.fosstechnix.com/how-to-install-mysql-5-7-on-ubuntu-22-04-lts/

Instalar servidor de aplicaciones apache e interprete de php

apt-get update
apt-get install apache2
apt-get install php5
php -v

se cambian los permisos para poder publicar las paginas

chmod 777 /var/www
chmod 777 /var/www/html
chmod 777 /var/www/html/index.html
chmod 777 /etc/php5/apache2/php.ini

se instalan las librerias de php para mysql

apt-get install libapache2-mod-auth-mysql php5-mysql

editamos

nano /etc/php5/apache2/php.ini

buscamos con ctr+w default_charset y le quitamos el ; que esta al comienzo de la linea
ctr+w y guardamos con ctr+o
salimos con ctr+x

podemos reiniciar el servidor de apache con:

service apache2 restart

y podemos consultar si quedo bien instalado el apache si ingresamos la dirección ip pública en nuestro navegador.

 

En caso de necesitar instalar php en ubuntu 18:

sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php

sudo apt install php7.3 php7.3-common php7.3-opcache php7.3-cli php7.3-gd php7.3-curl php7.3-mysql

php -v

Fuente: https://linuxize.com/post/how-to-install-php-on-ubuntu-18-04/

 

En caso de migración de una app se recomienda el siguiente articulo

Reemplazar enlaces después de un cambio de dominio

Sólo hace falta la modificación de los contenidos en la tabla wp_options.

 

Instalar servidor de aplicaciones tomcat

apt-get install tomcat7
service tomcat7 restart

Fuente: https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-7-on-ubuntu-14-04-via-apt-get

para ver si esta funcionando basta con ingresar la direccion ip publica en nuestro navegador añadiendo al final :8080 Ejemplo: http://direccionip:8080

En ubuntu 18:

sudo apt update
sudo apt install -y tomcat9 tomcat9-admin
sudo systemctl status tomcat9
sudo systemctl start tomcat9
sudo systemctl stop tomcat9



Cuando hay escases de memoria se configura el archivo
sudo nano /etc/default/tomcat9   y se modifica la siguiente linea:
JAVA_OPTS="-Xms128m -Xmx256m -XX:+UseG1GC -XX:MaxHeapFreeRatio=40 -XX:MinHeapFreeRatio=20"




Para que funcione con netbeans se debe configurar un usuario en el archivo tomcat-users.xml, adicionando al final:

<user password="admin" roles="manager-script,admin,manager-gui" username="admin"/>

Si lo que se busca es añadir el servidor en netbeans, puede que salga que no es un directorio válido de Catalina. En este caso, descargue el tomcat .tar.gz, descomprimalo, y direccionelo desde netbeans. Puede que necesite modificar los permisos del directorio. También no sobra crear el usuario según la línea de código anterior. También para mejor control, es mejor cambiar el puerto del servidor.

Recomendaciones adicionales

A esta altura ya todo debe estar funcionando, sólo resta publicar las aplicaciones. Para esto, mediante la aplicación filezilla accedemos al ftp de nuestro vps y en la carpeta /var/www  copiamos nuestra aplicación php.

La aplicación java la podemos copiar en el directorio /var/lib/tomcat7/webapps. podemos utilizar los archivos .war.

Finalmente se deben reiniciar los servidores tomcat y apache como se explico anteriormente.

Si se quiere instalar tomee:

*se descarga el tomee y se decomprime

*cambiar los permisos de la carpeta a 777

*para cambiar el puerto hay que modificar el archivo /conf/server.xml

*habilitar los usuarios de tomee modificando el archivo tomcat-users.xml

*modificar el archivo catalina.policy de la carpeta /conf
se agrega al final del archivo

grant {
permission java.security.AllPermission;
};

*para iniciarlo desde la capeta bin/ sh startup.sh

*para detenerlo desde la capeta bin/ sh shutdown.sh

 

Instalación de tomcat 9 de forma manual. Probado en Ubuntu 16

# apt-get update
# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.53/bin/apache-tomcat-9.0.53.tar.gz
# mkdir /var/lib/tomcat9
# tar xzvf apache-tomcat-9.0.53.tar.gz -C /var/lib/tomcat9 --strip-components=1
# cd /var/lib/tomcat9
# nano /etc/systemd/system/tomcat.service

 

se copia la siguiente información:

[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

Environment=CATALINA_PID=/var/lib/tomcat9/temp/tomcat.pid
Environment=CATALINA_HOME=/var/lib/tomcat9/
Environment=CATALINA_BASE=/var/lib/tomcat9/
Environment='CATALINA_OPTS=-Xms256M -Xmx400M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/var/lib/tomcat9/bin/startup.sh
ExecStop=/var/lib/tomcat9/bin/shutdown.sh

User=root
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target


se ejecutan finalmente los siguientes comandos:


#sudo systemctl daemon-reload
#sudo systemctl enable tomcat
#sudo systemctl start tomcat
#sudo systemctl status tomcat


para habilitar la aplicación remota de manager

# sudo nano /var/lib/tomcat9/webapps/manager/META-INF/context.xml
# sudo nano /opt/tomcat/webapps/host-manager/META-INF/context.xml

se comentan:

<!--<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />-->

se reinicia el servicio

fuente: https://www.prado.lt/how-to-install-apache-tomcat-9-on-ubuntu-16-04

Pilas, recomendación: una vez desplegada la aplicación, mover las librerías del directorio WEB-INF al directorio /tomcat9/lib

mv * /var/lib/tomcat9/lib

Modificar la zona horaria del servidor

Modificar la zona horaria del servidor es realmente fácil.

apt-get install systemd-services

Primero se identifica la zona horaria actual.

root@agendaboyaca:~# timedatectl
 Local time: Sat 2016-07-16 18:20:45 EDT
 Universal time: Sat 2016-07-16 22:20:45 UTC
 Timezone: America/New_York (EDT, -0400)
 NTP enabled: n/a
NTP synchronized: yes
 RTC in local TZ: no
 DST active: yes
 Last DST change: DST began at
 Sun 2016-03-13 01:59:59 EST
 Sun 2016-03-13 03:00:00 EDT
 Next DST change: DST ends (the clock jumps one hour backwards) at
 Sun 2016-11-06 01:59:59 EDT
 Sun 2016-11-06 01:00:00 EST

Se busca la zona horaria que necesitamos.

root@agendaboyaca:~# timedatectl list-timezones | grep Bogota 
America/Bogota

Se cambia la zona horaria.

root@agendaboyaca:~# timedatectl set-timezone America/Bogota

Se consulta nuevamente la zona horaria.  Listo!

root@agendaboyaca:~# timedatectl
 Local time: Sat 2016-07-16 17:22:20 COT
 Universal time: Sat 2016-07-16 22:22:20 UTC
 Timezone: America/Bogota (COT, -0500)
 NTP enabled: n/a
NTP synchronized: yes
 RTC in local TZ: no
 DST active: n/a

Fuente: https://www.cristiantala.cl/ubuntu-14-04-lts-cambiar-la-zona-horaria/

 

Modificar el idioma a español

Instalar los siguientes paquetes:

$ sudo apt-get install language-pack-es
$ sudo apt-get install language-pack-es-base
$ sudo apt-get install language-support-es
$ sudo dpkg-reconfigure locales

reiniciar el servidor.

fuente: https://www.windowslinuxymac.com/linux/20-instalar-y-configurar-el-idioma-espa%C3%B1ol-en-linux-ubuntu.html

 

otra forma

/usr/bin/locale

sudo aptitude install language-pack-es language-support-es

sudo dpkg-reconfigure locales

more /var/lib/locales/supported.d/local

sudo nano -w  /var/lib/locales/supported.d/local

se añade en la primera linea es_ES.UTF-8 UTF-8

sudo dpkg-reconfigure locales

sudo dpkg-reconfigure locales

 sudo /usr/sbin/locale-gen es_ES.UTF-8

 sudo /usr/sbin/update-locale LANG=es_ES.UTF-8

  export  LANG=»es_ES.UTF-8″

  /usr/bin/locale


fuente http://www.tonisoto.com/2011/04/cambiar-el-idioma-desde-la-consola-de-ubuntu/

 

Ampliacion de volumen del disco

Este es un caso particular para la capa elastica de amazon aws.  Cuando se llena el disco duro y no se pueden borrar contenidos, es necesario ampliar el volumen del disco.

Primero se evalua el uso de las particiones:

df -h

luego desde la consola de administración de amazon se selecciona la opción de volúmenes/modificar Volumen

Se modifica el volumen. listo!… para el caso de ubuntu es necesario reiniciar el sistema operativo para que adopte el nuevo volumen. Por precaución es bueno tomar una instantánea del volumen.

 

Para crear tareas programadas en ubuntu 20

Se emplea el comando crontab. Se debe emplear con permisos de administrador

sudo crontab -e

una vez se seleccione el editor de preferencia se edita el archivo

00 06 * * 1-5 /sbin/reboot
30 12 * * 1-5 /sbin/reboot
00 19 * * 1-5 /sbin/reboot

En el ejemplo anterior se crearon 3 reinicios. a las 6:30 a las 12:30 y a las 19:30, todos los días, todos los meses.

Si se desea ver el listado de tareas programadas:

sudo crontab -l

fuente: http://somebooks.es/programar-una-tarea-repetitiva-en-ubuntu-server-20-04-lts/

 

Para configurar apache como proxy inverso de ubuntu 20

instalar apache

sudo apt install apache2

A tomcat no hace falta hacerle nada, solo que permanezca escuchando por el puerto 8080

Se Habilita el módulo proxy y proxy_http de Apache, que son necesarios para configurar el proxy inverso:

sudo a2enmod proxy
sudo a2enmod proxy_http

Se crea un archivo de configuración para tu sitio web en Apache en el directorio /etc/apache2/sites-available/.

sudo nano /etc/apache2/sites-available/tomcat-proxy.conf

Se agrega la siguiente configuración al archivo tomcat-proxy.conf. Reemplazar example.com con el nombre de dominio o la dirección IP de tu servidor y 8080 con el puerto en el que está ejecutando Tomcat:

<VirtualHost *:80>
ServerName 18.230.194.36

ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/

</VirtualHost>

Se habilita el sitio configurado y reinicia Apache:

sudo a2ensite tomcat-proxy.conf
sudo systemctl restart apache2