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.
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
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.
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
Seleccionar en mysql 8.0
Selecccione mysql 5.7 y ok
Seleccione mysql5.7 y ok
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![]()
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
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
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.
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