Manual Deployment
The process is basically the following:
Install OS required libraries
Install python3 (3.11+)
Install nodejs (20) and yarn
Install postgresql
Install redis (6.2.0+)
Clone and run all parts of Bitcart
(Optional) Open Firewall Ports and Access the Sites
Warning: Not recommended to use in production
Manual installation is NOT recommended in production. It should be only used for learning purpose.
Instead you should use the docker deployment.
The docker deployment will provide you easy update system and make sure that all moving parts are wired correctly without any technical knowledge. It will also setup HTTPS for you.
Typical manual installation
This steps have been done on ubuntu 22.04, adapt for your own install.
1) Install OS required libraries
sudo apt install libsecp256k1-devOr the equivalent for your os package manager
More info on libsecp256k1 in electrum docs or bitcoin core docs
2) Install Python 3
Usually it might have already been installed, but we also need pip3 and dev packages, so:
sudo apt install python3 python3-pip python3-dev3) Install uv
uv is a fast Python package manager used to manage dependencies in Bitcart. Install it by following the official uv installation guide.
curl -LsSf https://astral.sh/uv/install.sh | sh4) Install Node.JS and Yarn
sudo apt install nodejs
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update && sudo apt install yarnUsing a nodejs version higher than specified way work, but we officially support only 1 release series (usually current LTS)
5) Install PostgresSQL
Note, replace REPLACEME with your new postgres password.
sudo apt install postgresql postgresql-contrib
sudo -u postgres createdb bitcart
sudo -u postgres psql -U postgres -d postgres -c "alter user postgres with password 'REPLACEME';"6) Install Redis
sudo apt install redis-server7) Clone and prepare Bitcart components
Bitcart core(daemons) & Merchants API:
git clone https://github.com/bitcart/bitcart
cd bitcart
# uv creates a virtual environment in .venv for us automatically
uv sync --no-dev --group web --group production --group btc
source .venv/bin/activateFor any other daemon(coin) you want to use, run:
uv sync --no-dev --group coin_nameWhere coin_name is coin code(btc, ltc, eth, etc.).
If you are met with the following error during launch of the app/alembic: ModuleNotFoundError: No module named 'sqlalchemy.cutils'
It means that your system is missing python development packages or a compiler. On ubuntu python3-dev does exactly that.
Create a file conf/.env It contains all the settings. For now, we just need to set database password and enabled cryptos.
# Replace REPLACEME with your database password
# specify used cryptocurrencies with BITCART_CRYPTOS
cat > conf/.env << EOF
DB_PASSWORD=REPLACEME
BITCART_CRYPTOS=btc,ltc
EOFApply database migrations:
alembic upgrade headBitcart admin panel
git clone https://github.com/bitcart/bitcart-admin
cd bitcart-admin
yarn
yarn buildBitcart store
git clone https://github.com/bitcart/bitcart-store
cd bitcart-store
yarn
yarn buildRun everything
Bitcart core(daemons) & Merchants API:
Start daemons from the bitcart repo directory:
python3 daemons/btc.pyFor any other coin, do the similar procedure:
python3 daemons/coin_name.pyStart api:
gunicorn -c gunicorn.conf.py main:appStart background worker:
python3 worker.pyIf you want to run a specific coin on a test network or change other environment settings you can update the
.envfile in the bitcartconf/directory
Bitcart admin panel
cd bitcart-admin
yarn startBitcart store
cd bitcart-store
NUXT_PORT=4000 yarn startDefault ports
The Bitcart API runs on port
8000.Daemons on ports
5000-500XThe Bitcart Admin panel runs on port
3000The Bitcart Store runs on port
4000.
(Optional) Open Firewall Ports and Access the Sites
If you are running Bitcart on your local machine - you will not need to do these steps. You can go ahead and access the system with:
Bitcart Admin Panel:
http://127.0.0.1:3000/Bitcart Store:
http://127.0.0.1:4000/Bitcart Merchants API:
http://127.0.0.1:8000/
If you are running Bitcart on a remote machine, you will need to do additional things to access them.
Option 1: Nginx proxy (Recommended)
This option is recommended to proxy secure incoming requests to the correct bitcart process.
Install Nginx
sudo apt install nginxAdd configuration for each component: bitcart-store, bitcart and bitcart-admin
vim /etc/nginx/sites-available/bitcart-admin.conf
server {
server_name bitcart-admin.<mysite>.com;
access_log /var/log/nginx/bitcart-admin.access.log;
error_log /var/log/nginx/bitcart-admin.error.log;
location / {
proxy_pass http://localhost:3000;
}
}Enable the config
sudo ln -s /etc/nginx/sites-available/bitcart-admin.conf /etc/nginx/sites-enabledAdd DNS records for your server names to point to your VM's ip
Check the config and reload nginx
sudo nginx -t
sudo systemctl reload nginxAdd TLS certificates with the letsencrypt CA for the sites
sudo apt install certbot
sudo certbot --nginxNow you should be able to access the components over TLS. You can then also enable http2 in your nginx configuration if you want.
You might want to look at the FAQ for more detailed info on the Nginx configuration options
Option 2: No proxy
If you have a firewall, you will want to open ports 3000, 4000 and 8000. Using ufw as an example:
sudo ufw allow 3000
sudo ufw allow 4000
sudo ufw allow 8000
yarnis listening on localhost127.0.0.1by default and you won't be able to access it over the internet unless you reverse proxy it withnginx. If you want to expose it without reverse proxy, use the environment variable:NUXT_HOST=0.0.0.0to listen on all interfaces.
The store and admin site need public access to the bitcart api (URL should be resolvable both client and server side).
Using the manual method you need to set that with environment variables. The complete setup of the Bitcart Admin Panel and Store may look like this:
# bitcart-admin
NUXT_HOST="0.0.0.0" BITCART_ADMIN_API_URL="http://bitcart-api-ip:8000" yarn start
# bitcart-store
NUXT_PORT=4000 NUXT_HOST="0.0.0.0" BITCART_STORE_API_URL="http://bitcart-api-ip:8000" yarn startNote: The above is the minimum to make it work and not a production grade solution. We still recommend to use docker deployment unless you really know what you're doing.
Access the site remotely
Bitcart Admin Panel:
http://my-bitcart-admin-ip:3000/Bitcart Store:
http://my-bitcart-store-ip:4000/Bitcart Merchants API:
http://my-bitcart-store-ip:8000/
Continue with: Your first invoice
(Optional) Managing Processes
If you want the procaesses: bitcart api, daemons, worker and frontend (bitcart admin and bitcart store) to be managed with automatic startup, error reporting etc then consider using supervisord or systemd to manage the processes.
Upgrading manual deployment
Note: it is recommended to use docker deployment for easy upgrades.
To upgrade manually, follow the following steps:
1) Stop everything already running
Merchants API, workers, daemons, Admin panel and Store should be stopped
2) Pull latest changes
Run :
git pullFor every Bitcart component directory (Merchants API, Admin Panel, Store).
3) Upgrade dependencies
Bitcart core(daemons) & Merchants API:
uv sync --group web --group production --group btcFor any other daemon(coin) you want to use, run:
uv sync --group coin_nameWhere coin_name is coin code(btc, ltc, eth, etc.).
Bitcart admin
yarnBitcart store
yarn4) Apply new database migrations
In Bitcart core(daemons) & Merchants API directory, run:
alembic upgrade head5) Rebuild store and admin
For Bitcart Admin Panel and Store, run:
yarn build6) Start everything again
Follow instructions here
Last updated
Was this helpful?