204 lines
5.3 KiB
YAML
204 lines
5.3 KiB
YAML
---
|
|
- 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 |