# Set up a fully-containerized development environment

## Prerequisites

- Container runtime installation
  - [Docker](https://docs.docker.com/get-docker/)
  - [Podman](https://podman.io/docs/installation) and [Podman Compose](https://github.com/containers/podman-compose)
  - [containerd](https://github.com/containerd/containerd) and [nerdctl](https://github.com/containerd/nerdctl)
  - or whatever you want to use
- The following ports are not in use
    - 3030
    - 25432
    - 26379

## Start up the environment

1. Download the [`dev/container` directory](./dev/container) and execute `chmod +x docker-entrypoint.sh`
    - Alternatively, you can use `git clone https://firefish.dev/firefish/firefish.git && cd firefish/dev/container`, although this will clone the entire repository.
1. Copy the example config file
    ```sh
    cp config.example.env config.env
    ```
1. Edit `docker-compose.yml` and set `URL` to the URL you want to use (or leave it as `http://localhost:3030`)
1. Run `docker compose up`
    - This will build the environment, install dependencies and prepare the needed config files.
    - If you use Podman, you should run `podman-compose up` instead.
1. Wait until the following message shows up
    ```log
    DONE *  [core boot]     All workers started
    DONE *  [core boot]     Now listening on port 3030 on https://your_firefish_url.example.com
    ```
1. A fresh Firefish environment is created on the URL you have set!

When you want to restart the dev server, you just need to terminate the process (a.k.a. press `Ctrl+C`) and run `docker compose up` again.