Running chibisafe without Docker in a manual way
This document will guide you in setting up chibisafe manually in a server. Keep in mind we strongly recommend you use the Docker guide instead as it's simpler and tested thoroughly.
In order to install chibisafe and run it without containers there are a few things you need to set up on your system beforehand. This guide assumes you are using Ubuntu/Debian so feel free to adjust commands as you see fit based on your distro.
Pre-requisites
Before running chibisafe make sure you install the following dependencies:
- To install ffmpeg you can run
sudo apt install ffmpeg
- To get node v20 we recommend you install it via volta.sh
- For the reverse proxy we recommend using Caddy
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list sudo apt update sudo apt install caddy
- But if you rather use NGINX instead of Caddy then:
sudo apt update sudo apt install nginx
Choose either Caddy or NGINX, don't install both!
Installing
The first things you should do is clone the repository to get everything necessary, so run the following commands:
git clone https://github.com/chibisafe/chibisafe.git cd chibisafe yarn install yarn workspace @chibisafe/backend generate yarn workspace @chibisafe/backend migrate yarn build
With chibisafe now built you need to run both the backend and the frontend process to get the whole system working. Before starting the chibisafe stack you need to set up 2 environment variables in order for chibisafe to understand where it needs to connect. In order to do so first run the following command:
echo "BASE_API_URL=http://127.0.0.1:8000" >> ./packages/next/.env
You can start both processes by running the following 2 commands in either separate terminals or tmux sessions.
yarn start:backend yarn start:frontend
Now the backend should be running in port 8000 and the frontend in port 8001.
With PM2
If you rather use PM2 what you can do is create a file called chibisafe.json in the root directory of the project with the following content:
{ "apps": [ { "name": "chibisafe-frontend", "cwd": "/path/to/your/chibisafe", "script": "yarn", "args": ["workspace", "@chibisafe/next", "start"], "env": { "BASE_API_URL": "http://127.0.0.1:8000", "NODE_ENV": "production" } }, { "name": "chibisafe-backend", "cwd": "/path/to/your/chibisafe", "script": "yarn", "args": ["workspace", "@chibisafe/backend", "start"], "env": { "NODE_ENV": "production" } } ] }
Make sure to change chibi.domain for your own domain name.
Now you can run the following command and chibisafe will run in the background
pm2 start chibisafe.json
Reverse proxy
In order to make chibisafe's 2 processes usable and attach a domain name, you need a reverse proxy. This guide assumes you are using Caddy since we like Caddy. Once you have Caddy installed locally you can add this to your Caddyfile in order reverse proxy the exposed ports from chibisafe:
chibi.domain { route { file_server * { root /app/uploads pass_thru } @api path /api/* reverse_proxy @api http://127.0.0.1:8000 { header_up Host {http.reverse_proxy.upstream.hostport} header_up X-Real-IP {http.request.header.X-Real-IP} } @docs path /docs* reverse_proxy @docs http://127.0.0.1:8000 { header_up Host {http.reverse_proxy.upstream.hostport} header_up X-Real-IP {http.request.header.X-Real-IP} } reverse_proxy http://127.0.0.1:8001 { header_up Host {http.reverse_proxy.upstream.hostport} header_up X-Real-IP {http.request.header.X-Real-IP} } } }
Make sure to change chibi.domain for your own domain name, and root /app/uploads for the actual path where your upload folder is.
After correctly setting your Caddyfile and restarting the caddy process in your system, you should be able to visit your instance with the domain name and start using it.