This is an old revision of the document!
Table of Contents
Conexión Externa
Si alguien quiere conectarse al servidor desde afuera (por ejemplo, para probar una aplicación desde un notebook), aquí van los detalles.
Los Puertos
Para empezar, el puerto de Postgres por defecto es 5432, pero dado que tenemos un hostname (cc3201.dcc.uchile.cl) y más de 30 servidores virtuales, está claro que no podemos usar solo el puerto 5432, así que hay que usar 55XX donde XX es el número del grupo. Por ejemplo, si uno estuviera en el grupo 6, el puerto sería 5506; si estuviera en el grupo 21, sería 5521.
hostname: cc3201.dcc.uchile.cl puerto: 55XX (donde XX es el número del grupo)
Una Prueba
Para ver si funciona o no, aquí hay un proyecto de Java (vm-test-jdbc.zip) con una clase que usa JDBC para conectar a la base de datos del grupo 18 (como un ejemplo). Hay que cambiar el puerto y la consulta (o crear una tabla test.hello
en su base de datos). También, habrá que configurar Postgres y agregar una contraseña para el usuario cc3201
en Postgres …
Configurar Postgres
Ahora tenemos que configurar Postgres para permitir conexiones externas. Tenemos que cambiar la configuración en dos archivos:
sudo vim /etc/postgresql/11/main/pg_hba.conf
En este archivo, la configuración, por defecto, permite solo conexiones desde localhost. Específicamente, dice:
# IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5
Tenemos que cambiar esta configuración a la siguiente:
# IPv4 local connections: host all all 0.0.0.0/0 md5 # host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::0/0 md5 # host all all ::1/128 md5
… y guardar el archivo. (#
indica un comentario, 0.0.0.0/0
indica permitir todo, ::0/0
igualmente).
El segundo archivo que tenemos que cambiar es:
sudo vim /etc/postgresql/11/main/postgresql.conf
En ese archivo, hay que cambiar localhost
por *
para escuchar a cada IP (no solo localhost):
listen_addresses = '*' # what IP address(es) to listen on;
… y guardar el archivo.
Finalmente, hay que recargar la configuración de Postgres. Entonces, en psql
, se debería ejecutar:
SELECT pg_reload_conf();
A veces no funciona (no sé porque) pero para tener seguridad, se puede quitar psql
y ejecutar:
sudo service postgresql stop sudo service postgresql start
(Hemos reiniciado Postgres.)
La Contraseña
En el código de la prueba de arriba (vm-test-jdbc.zip
), pide la contraseña del usuario cc3201
. (En general, no es una buena idea guardar una contraseña así en texto plano en el código fuente, pero para hacer una prueba, está bien … si trabajaran para una empresa, sería imprescindible poner y leer la contraseña desde un archivo de configuración seguro.)
De todos modos, tenemos que configurar la contraseña. No es la misma contraseña que la contraseña de SSH para ingresar al servidor. De hecho, por defecto, no hay una contraseña (en el servidor, Postgres usa los credenciales de SSH por defecto, pero JDBC (por ejemplo) va a conectarse directamente con Postres, no por SSH).
Bueno, en psql
, hay que poner:
\password cc3201
… e ingresar una contraseña. Después, hay que poner la contraseña en el código de la prueba:
private static final String PASSWORD = "**ingresa**password**de**cc3201**aquí**";
Ejecutar La Prueba
Después de haber cambiado el puerto, la contraseña y haber configurado todo lo anterior, se puede usar la siguiente prueba para verificar que todo esté bien. La prueba asume que existe una tabla test.hello
en la base de datos; ejecuta la siguiente consulta:
SELECT * FROM test.hello
Se puede crear esa tabla y agregar una tupla, o se puede cambiar la consulta en el código para hacer otra prueba.