Skip to main content

Azure VM Configuration

This document contains all the steps to setup the Azure VM from scratch.

Installing postgres

While installing postgres, make sure you are installing the version of your choice (Use Version 14 for ORSANCO Flows, as of 2/2/2024).

info

The installation instructions are derived from the timescaledb website here.

# 1. At the command prompt, as root, add the PostgreSQL third party repository to get the latest PostgreSQL packages:
sudo apt install gnupg postgresql-common apt-transport-https lsb-release wget

# 2. Run the PostgreSQL repository setup script (might require sudo?):
/usr/share/postgresql-common/pgdg/apt.postgresql.org.sh

# 3. Add the TimescaleDB third party repository (might require sudo?):
curl -s https://packagecloud.io/install/repositories/timescale/timescaledb/script.deb.sh | sudo bash

# 4. Update and install packages:
sudo apt update
sudo apt install timescaledb-2-postgresql-14
sudo apt install postgresql-client-14

# 5. Run the timescaledb tuner, accepting all defaults:
sudo timescaledb-tune -y

Configure NGINX

  1. nano /etc/nginx/sites-available/riverflows

  2. File contents:

    server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    ssl_certificate /home/gqc/ssl_cert_01222024/ohioriver_org_chain.crt;
    ssl_certificate_key /home/gqc/ssl_old/ssl_cert_2024/ohioriver_2024.key;

    add_header Access-Control-Allow-Origin * always;
    server_name www.ohioriver.org;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
    root /home/gqc/riverflows_django/riverflows/;
    }

    location / {
    if ($scheme = http) {
    return 301 https://$server_name$request_uri;
    }
    include proxy_params;
    proxy_pass http://unix:/run/gunicorn.sock;
    }
    }
  3. sudo service nginx restart

  4. sudo service nginx status

Attach disk to the VM

Link to official Microsoft Documentation Link

Detach disk from the VM

Link to official Microsoft Documentation Link

Delete disk from the VM

Link to official Microsoft Documentation Link

Update data-directory in postgres

Link to Digital Ocean Tutorial Link

Restore dump on the VM

Link to the doc created by Jake Link

Configure postgres

listen addresses

listen_addresses controls which IPs the server will answer on, not which IPs the server will permit connections to authenticate from. It's entirely reasonable and normal to use listen_addresses '*' so the server will accept incoming connections on any ip assigned to an interface on the postgresql server host, while using pg_hba.conf to control access at a finer grained level for which IPs the server will accept logins from for specific databases and users

Reference link: StackOverFlow

add IP addresses

Add Sudhir, Jake and Deven's ip addresses in the pg_hba.conf file.

Errors

Creating a new user in postgres

 sudo su postgres
psql
create user gqc with password 'password';
create database DBNAME;
alter database DBNAME owner to "gqc"; 
\q
exit

Peer authentication failed

pg_restore: error: connection to database "orsanco" failed: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  Peer authentication failed for user "postgres"

To fix this, you need to update the pg_hba.conf

From

local   all             postgres                                peer

To

local   all             postgres                                trust

Then restart the server. sudo service postgresql restart

Missing timescaledb extension

Either add the timescaledb extension in the postgresql.conf in the following fashion.

shared_preload_libraries = 'timescaledb'

Or add the extension manually in the database.

CREATE EXTENSION IF NOT EXISTS timescaledb WITH SCHEMA public;

Stacktrace of the entire error

gqc@orsanco-flows:~$ pg_restore -d orsanco -1 orsanco-flows-10-plus-2-history-and-daily-02152023.sql
pg_restore: while PROCESSING TOC:
pg_restore: from TOC entry 2; 3079 156663 EXTENSION timescaledb (no owner)
pg_restore: error: could not execute query: FATAL: extension "timescaledb" must be preloaded
HINT: Please preload the timescaledb library via shared_preload_libraries.

This can be done by editing the config file at: /etc/postgresql/13/main/postgresql.conf
and adding 'timescaledb' to the list in the shared_preload_libraries config.
# Modify postgresql.conf:
shared_preload_libraries = 'timescaledb'

Another way to do this, if not preloading other libraries, is with the command:
echo "shared_preload_libraries = 'timescaledb'" >> /etc/postgresql/13/main/postgresql.conf

(Will require a database restart.)

If you REALLY know what you are doing and would like to load the library without preloading, you can disable this check with:
SET timescaledb.allow_install_without_preload = 'on';
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Command was: CREATE EXTENSION IF NOT EXISTS timescaledb WITH SCHEMA public;