initial commit

This commit is contained in:
2025-08-28 22:54:52 -07:00
commit ab3009d329
9 changed files with 368 additions and 0 deletions

15
ansible/inventory.yml Normal file
View File

@@ -0,0 +1,15 @@
# inventory.yml
# Replace YOUR_SERVER_IP with the actual IP address of your Hetzner server
all:
children:
supabase_servers:
hosts:
supabase-1:
ansible_host: 91.99.108.216
ansible_user: root # or ubuntu/debian depending on your image
ansible_ssh_private_key_file: ~/.ssh/your_private_key # path to your SSH key
# Alternative format if you prefer:
# [supabase_servers]
# supabase-1 ansible_host=YOUR_SERVER_IP ansible_user=root

204
ansible/playbook.yml Normal file
View File

@@ -0,0 +1,204 @@
---
- name: Setup Supabase, PowerSync, and Docker on Hetzner Server
hosts: supabase_servers
become: true
gather_facts: true
vars:
supabase_dir: /opt/supabase
powersync_dir: /opt/powersync
docker_compose_version: "2.21.0"
tasks:
- name: Update apt cache
apt:
update_cache: yes
cache_valid_time: 3600
- name: Install required system packages
apt:
name:
- apt-transport-https
- ca-certificates
- curl
- gnupg
- lsb-release
- software-properties-common
- git
- wget
- unzip
- htop
- vim
- ufw
state: present
- name: Add Docker's official GPG key
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
- name: Add Docker repository
apt_repository:
repo: "deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable"
state: present
- name: Install Docker CE
apt:
name:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-buildx-plugin
- docker-compose-plugin
state: present
update_cache: yes
- name: Start and enable Docker service
systemd:
name: docker
state: started
enabled: yes
- name: Add current user to docker group
user:
name: "{{ ansible_user }}"
groups: docker
append: yes
- name: Create /opt directory if it doesn't exist
file:
path: /opt
state: directory
mode: '0755'
- name: Clone Supabase repository
git:
repo: https://github.com/supabase/supabase
dest: "{{ supabase_dir }}"
depth: 1
force: yes
- name: Set proper ownership for Supabase directory
file:
path: "{{ supabase_dir }}"
owner: "{{ ansible_user }}"
group: "{{ ansible_user }}"
recurse: yes
- name: Install Node.js 18.x repository
shell: curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
args:
creates: /etc/apt/sources.list.d/nodesource.list
- name: Install Node.js
apt:
name: nodejs
state: present
update_cache: yes
- name: Install Supabase CLI
npm:
name: supabase
global: yes
state: present
- name: Create PowerSync directory
file:
path: "{{ powersync_dir }}"
state: directory
owner: "{{ ansible_user }}"
group: "{{ ansible_user }}"
mode: '0755'
- name: Download PowerSync Server
get_url:
url: https://github.com/powersync-ja/powersync-service/releases/latest/download/powersync-server-linux-amd64.tar.gz
dest: /tmp/powersync-server.tar.gz
mode: '0644'
- name: Extract PowerSync Server
unarchive:
src: /tmp/powersync-server.tar.gz
dest: "{{ powersync_dir }}"
remote_src: yes
owner: "{{ ansible_user }}"
group: "{{ ansible_user }}"
- name: Copy Supabase docker-compose.yml to working directory
copy:
src: "{{ supabase_dir }}/docker/docker-compose.yml"
dest: "{{ supabase_dir }}/docker-compose.yml"
remote_src: yes
owner: "{{ ansible_user }}"
group: "{{ ansible_user }}"
- name: Copy Supabase .env.example to .env
copy:
src: "{{ supabase_dir }}/docker/.env.example"
dest: "{{ supabase_dir }}/.env"
remote_src: yes
owner: "{{ ansible_user }}"
group: "{{ ansible_user }}"
force: no
- name: Configure UFW firewall
ufw:
rule: allow
port: "{{ item }}"
proto: tcp
loop:
- '22' # SSH
- '80' # HTTP
- '443' # HTTPS
- '3000' # Supabase Studio
- '8000' # Supabase API
- '5432' # PostgreSQL
- '8080' # PowerSync
- name: Enable UFW
ufw:
state: enabled
- name: Create systemd service for Supabase
template:
src: supabase.service.j2
dest: /etc/systemd/system/supabase.service
mode: '0644'
notify: restart supabase
- name: Create systemd service for PowerSync
template:
src: powersync.service.j2
dest: /etc/systemd/system/powersync.service
mode: '0644'
notify: restart powersync
- name: Reload systemd daemon
systemd:
daemon_reload: yes
- name: Start and enable Supabase service
systemd:
name: supabase
state: started
enabled: yes
- name: Display setup information
debug:
msg:
- "Supabase has been installed in {{ supabase_dir }}"
- "PowerSync has been installed in {{ powersync_dir }}"
- "Supabase Studio will be available at http://{{ ansible_default_ipv4.address }}:3000"
- "Supabase API will be available at http://{{ ansible_default_ipv4.address }}:8000"
- "To start Supabase: cd {{ supabase_dir }} && docker compose up -d"
- "Configuration file: {{ supabase_dir }}/.env"
handlers:
- name: restart supabase
systemd:
name: supabase
state: restarted
- name: restart powersync
systemd:
name: powersync
state: restarted