1+ #! /bin/bash
2+
3+ # Set up logging
4+ LOG_FILE=" /var/log/postgresus-install.log"
5+ INSTALL_DIR=" /opt/postgresus"
6+
7+ log () {
8+ echo " [$( date ' +%Y-%m-%d %H:%M:%S' ) ] $1 " | tee -a " $LOG_FILE "
9+ }
10+
11+ # Create log file if doesn't exist
12+ touch " $LOG_FILE "
13+ log " Starting PostgresUS installation..."
14+
15+ # Create installation directory
16+ log " Creating installation directory..."
17+ if [ ! -d " $INSTALL_DIR " ]; then
18+ mkdir -p " $INSTALL_DIR "
19+ log " Created directory: $INSTALL_DIR "
20+ else
21+ log " Directory already exists: $INSTALL_DIR "
22+ fi
23+
24+ # Check if Docker is installed
25+ if ! command -v docker & > /dev/null; then
26+ log " Docker not found. Installing Docker..."
27+
28+ # Install Docker
29+ apt-get update
30+ apt-get remove -y docker docker-engine docker.io containerd runc
31+ apt-get install -y ca-certificates curl gnupg lsb-release
32+ mkdir -p /etc/apt/keyrings
33+ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
34+ echo " deb [arch=$( dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $( lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
35+ apt-get update
36+ apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
37+ log " Docker installed successfully"
38+ else
39+ log " Docker already installed"
40+ fi
41+
42+ # Check if docker-compose is installed
43+ if ! command -v docker-compose & > /dev/null && ! command -v docker compose & > /dev/null; then
44+ log " Docker Compose not found. Installing Docker Compose..."
45+ apt-get update
46+ apt-get install -y docker-compose-plugin
47+ log " Docker Compose installed successfully"
48+ else
49+ log " Docker Compose already installed"
50+ fi
51+
52+ # Write docker-compose.yml
53+ log " Writing docker-compose.yml to $INSTALL_DIR "
54+ cat > " $INSTALL_DIR /docker-compose.yml" << 'EOF '
55+ version: "3"
56+
57+ services:
58+ postgresus:
59+ image: rostislavdugin/postgresus:latest
60+ ports:
61+ - "4005:4005"
62+
63+ postgresus-db:
64+ image: postgres:17
65+ # we use default values, but do not expose
66+ # PostgreSQL ports so it is safe
67+ environment:
68+ - POSTGRES_DB=postgresus
69+ - POSTGRES_USER=postgresus
70+ - POSTGRES_PASSWORD=postgresus
71+ volumes:
72+ - ./pgdata:/var/lib/postgresql/data
73+ container_name: postgresus-db
74+ command: -p 5437
75+ shm_size: 10gb
76+ EOF
77+ log " docker-compose.yml created successfully"
78+
79+ # Install cron if not installed
80+ if ! command -v cron & > /dev/null; then
81+ log " Cron not found. Installing cron..."
82+ apt-get update
83+ apt-get install -y cron
84+ systemctl enable cron
85+ log " Cron installed successfully"
86+ else
87+ log " Cron already installed"
88+ fi
89+
90+ # Add cron job for system reboot
91+ log " Setting up cron job to start PostgresUS on system reboot..."
92+ CRON_JOB=" @reboot cd $INSTALL_DIR && docker-compose up -d >> $INSTALL_DIR /postgresus-startup.log 2>&1"
93+ (crontab -l 2> /dev/null | grep -v " $INSTALL_DIR .*docker-compose" ; echo " $CRON_JOB " ) | crontab -
94+ log " Cron job configured successfully"
95+
96+ log " PostgresUS installation completed successfully!"
97+ log " -------------------------------------------"
98+ log " To launch immediately:"
99+ log " > cd $INSTALL_DIR && docker-compose up -d"
100+ log " Or reboot system to auto-start via cron"
101+ log " Access PostgresUS at: http://localhost:4005"
0 commit comments