This is probably just me, but I found INSTALL.md to be a bit confusing.

So, for a fresh install of Ubuntu in a Windows Hyper-V VM, this is the list of steps I took to get something that at least looks like it might be the right thing:

remove unattended-upgrades, and clean up after OS install

sudo systemctl stop unattended-upgrades
sudo apt-get purge unattended-upgrades
sudo apt autoremove

install postgresql 16

sudo apt install ca-certificates pkg-config
wget --quiet -O - [https://www.postgresql.org/media/keys/ACCC4CF8.asc](https://www.postgresql.org/media/keys/ACCC4CF8.asc) | sudo apt-key add -
sudo sh -c 'echo "deb [http://apt.postgresql.org/pub/repos/apt/](http://apt.postgresql.org/pub/repos/apt/) $(lsb_release -cs)-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
sudo apt update
sudo apt install libpq-dev postgresql

install python libs

sudo apt install python3-pip python3-venv python3-dev python3-psycopg2

install redis server

sudo apt install redis-server

install git

sudo apt install git

set up database

sudo -iu postgres psql -c "CREATE USER pyfedi WITH PASSWORD 'pyfedi';"
sudo -iu postgres psql -c "CREATE DATABASE pyfedi WITH OWNER pyfedi;"

clone PieFed

git clone [https://codeberg.org/rimu/pyfedi.git](https://codeberg.org/rimu/pyfedi.git)

cd into pyfedi, set up and enter virtual environment

cd pyfedi
python3 -m venv ./venv
source venv/bin/activate

use pip to install requirements

pip install wheel
pip install -r requirements.txt

edit .env file

cp env.sample .env
nano .env
(change SECRET_KEY to some random sequence of numbers and letters)

initialise database, and set up admin account

flask init-db

run the app

flask run
(open web browser at http://127.0.0.1:5000))
(log in with username and password from admin account)

Maybe this will help someone else (or maybe someone has spotted something that I missed - like I say: it looks right when loaded in a browser, but I’m not 100% sure)