Stop juggling spreadsheets and guessing which service uses which port — PortNote gives you a clear, organized view of your entire port landscape. Add your servers and VMs via a sleek web interface, assign and document port usage across all systems, and avoid conflicts before they happen. Built by the developer of CoreControl, PortNote brings structure, clarity, and control to one of the most overlooked parts of your infrastructure.
PortNote uses docker compose for deployment. It is crucial
to set up some secrets for the environment to make your
deployment work. One could do that by creating a .env
file with following content:
JWT_SECRET=# Replace with a secure random string
USER_SECRET=# Replace with a secure random string
LOGIN_USERNAME=# Replace with a username
LOGIN_PASSWORD=# Replace with a custom passwordTo quickly generate such file, one can execute a following command:
Note: it will overwrite the .env file if it already exists
echo """
JWT_SECRET=$(openssl rand -base64 32)
USER_SECRET=$(openssl rand -base64 32)
LOGIN_USERNAME=some_user
LOGIN_PASSWORD=some_password
""" > .enAdjust the values to your needs and then run the following compose.yaml:
services:
web:
image: haedlessdev/portnote:latest
ports:
- "3000:3000"
env_file: .env
environment:
DATABASE_URL: "postgresql://postgres:postgres@172.20.0.2:5432/postgres"
depends_on:
db:
condition: service_started
agent:
image: haedlessdev/portnote-agent:latest
environment:
DATABASE_URL: "postgresql://postgres:postgres@172.20.0.2:5432/postgres"
depends_on:
db:
condition: service_started
db:
image: postgres:17
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:Deploy with a command:
docker compose -f compose.yml -dThe application is build with:
- Next.js & Typescript
- Tailwindcss with daisyui
- PostgreSQL with Prisma ORM
- Icons by Lucide
- and a lot of love ❤️
Licensed under the MIT License.





