Files

PostgreSQL

Overview

PostgreSQL is the primary open-source database platform for SilverLinux and coexists with Microsoft SQL Server 2022 Express.

Multiple applications use the same PostgreSQL instance while maintaining separate databases and database users.

This approach simplifies:

  • Backup management
  • Monitoring
  • Security
  • Resource utilization

Service Information

Container Name:

postgres

Network:

internal

Purpose:

  • Application databases
  • Centralized data storage
  • Shared database platform

Current Databases

gitea

Owner:

gitea

Purpose:

Source control and repository management.

Used by:

gitea

openproject

Owner:

openproject

Purpose:

Project management and collaboration.

Used by:

openproject

postgres

Owner:

postgres

Purpose:

Administrative database.

Used for PostgreSQL administration and maintenance.


Database Ownership

Database Owner
gitea gitea
openproject openproject
postgres postgres

Each application should use its own dedicated database user whenever possible.


Credentials

Credentials are stored in:

Infisical

Current variables:

POSTGRES_ROOT_PASSWORD
POSTGRES_OPENPROJECT_PASSWORD

Future variables:

POSTGRES_GITEA_PASSWORD
POSTGRES_BAGET_PASSWORD

Passwords must never be committed to Git repositories.


Administration

Open PostgreSQL shell:

docker exec -it postgres psql -U postgres

List Databases

\l

List Roles

\du

List Connections

SELECT * FROM pg_stat_activity;

Create Database

Example:

CREATE DATABASE myapp;

Create User

Example:

CREATE USER myapp WITH PASSWORD 'StrongPassword';

Grant permissions:

GRANT ALL PRIVILEGES ON DATABASE myapp TO myapp;

Backup

Create database backup:

docker exec postgres pg_dump -U postgres openproject > openproject.sql

Create full cluster backup:

docker exec postgres pg_dumpall -U postgres > postgres-full-backup.sql

Restore

Restore database:

docker exec -i postgres psql -U postgres openproject < openproject.sql

Restore complete cluster:

docker exec -i postgres psql -U postgres < postgres-full-backup.sql

Security

  • PostgreSQL is not exposed publicly.
  • Database traffic is restricted to Docker internal networks.
  • Credentials are stored in Infisical and injected at runtime by slcompose.
  • Administrative access should use the postgres role only when necessary.
  • Applications should use dedicated database users.

Monitoring

Useful commands:

Database size:

SELECT pg_database.datname,
       pg_size_pretty(pg_database_size(pg_database.datname))
FROM pg_database;

Current connections:

SELECT count(*) FROM pg_stat_activity;

PostgreSQL version:

SELECT version();

Disaster Recovery

Minimum requirements for recovery:

  • PostgreSQL container configuration
  • Database backups
  • Infisical access and PostgreSQL service secrets
  • Docker network configuration

Without Infisical recovery, applications may not be able to reconnect to their databases after restoration.


  • Gitea
  • OpenProject
  • DbGate
  • Microsoft SQL Server Express
  • docs/server.md
  • docs/security.md
  • docs/secrets.md
  • docs/backups.md