Installation
Deploying with Docker Compose
Before you begin, check the requirements page.
Install Docker
Install Docker if it is not already installed.
sudo curl -fsSL https://get.docker.com | shInstallation Options
Choose the installation method based on your configuration:
Use this method if the bot will run on the same server as the Remnawave panel. The bot connects to Remnawave through the internal Docker network.
Step 1: Create the project directory
mkdir /opt/remnashop && cd /opt/remnashopStep 2: Download required files
Download the docker-compose.yml and .env files by running the following commands:
curl -o .env https://raw.githubusercontent.com/snoups/remnashop/refs/heads/main/.env.example curl -o docker-compose.yml https://raw.githubusercontent.com/snoups/remnashop/refs/heads/main/docker-compose.prod.internal.ymlStep 3: Generate secrets
Generate secret keys by running the following commands:
sed -i "s|^APP_CRYPT_KEY=.*|APP_CRYPT_KEY=$(openssl rand -base64 32 | tr -d '\n')|" .env && sed -i "s|^BOT_SECRET_TOKEN=.*|BOT_SECRET_TOKEN=$(openssl rand -hex 64 | tr -d '\n')|" .env sed -i "s|^DATABASE_PASSWORD=.*|DATABASE_PASSWORD=$(openssl rand -hex 24 | tr -d '\n')|" .env && sed -i "s|^REDIS_PASSWORD=.*|REDIS_PASSWORD=$(openssl rand -hex 24 | tr -d '\n')|" .envStep 4: Configure the .env file
For more information about environment variables, see the Environment Variables page.
Open the .env file:
cd /opt/remnashop && nano .env # Domain through which your bot is publicly accessible.
# Used for receiving webhooks from services (e.g., Telegram, payment systems).
# !!! WARNING: Specify domain WITHOUT HTTP/HTTPS and WITHOUT trailing slash.
APP_DOMAIN=change_me
# Encryption key for securing sensitive data (e.g., payment tokens) in the database.
# !!! CRITICALLY IMPORTANT: Never share this token publicly.
APP_CRYPT_KEY=change_me # SHOULD ALREADY BE SET IN STEP 3
# Telegram Bot API token. Obtain it from https://t.me/BotFather/
# !!! CRITICALLY IMPORTANT: Never share this token publicly. It grants full control over your bot.
BOT_TOKEN=change_me
# Secret token for webhook verification. Ensures webhook requests originate from Telegram.
BOT_SECRET_TOKEN=change_me # SHOULD ALREADY BE SET IN STEP 3
# Owner Telegram user ID. Grants elevated permissions.
BOT_OWNER_ID=change_me
# Telegram username of the support account used for deep-linking (without @).
BOT_SUPPORT_USERNAME=change_me
# Controls the behavior of the "connect" button:
# - empty or false -> opens the subscription page in the browser
# - true -> opens the subscription page in WebApp
# - URL (e.g., https://example.com/) -> opens the specified URL in WebApp
BOT_MINI_APP=false
# Hostname or Docker service name for connecting to the Remnawave API.
REMNAWAVE_HOST=remnawave
# API token for authenticating with the Remnawave service.
REMNAWAVE_TOKEN=change_me
# Secret token for verifying incoming webhooks from Remnawave.
# In the Remnawave Panel, this corresponds to WEBHOOK_SECRET_HEADER (env).
REMNAWAVE_WEBHOOK_SECRET=change_me
# Password for the database.
DATABASE_PASSWORD=change_me # SHOULD ALREADY BE SET IN STEP 3REMNAWAVE_HOST=remnawave uses the container name from the Remnawave Docker network.
Set the REMNAWAVE_TOKEN variable to your panel API token. You can create a token in Remnawave Settings → API Tokens.
REMNAWAVE_WEBHOOK_SECRET must match the value of WEBHOOK_SECRET_HEADER in the panel's .env file.
If you are using Remnawave Reverse-Proxy by eGames, add a cookie for authorization. Example: REMNAWAVE_COOKIE=rEmnaprx=aBCDefgh1. How to get the cookie: instructions.
Step 5: Configure the webhook from the panel to the bot
This step is critically important for the bot to work correctly.
Open the Remnawave panel .env file:
cd /opt/remnawave && nano .envSet WEBHOOK_ENABLED=true and set WEBHOOK_URL to your actual bot domain:
WEBHOOK_ENABLED=true
WEBHOOK_URL=https://bot.domain.com/api/v1/remnawaveReplace bot.domain.com with your actual domain.
Find the WEBHOOK_SECRET_HEADER variable in the same file and copy its value:
WEBHOOK_SECRET_HEADER=ey1234567890qwertyuiopasdfghjklzxcvbnmThe value ey1234567890qwertyuiopasdfghjklzxcvbnm is shown as an example.
Restart the Remnawave panel container to apply the changes:
cd /opt/remnawave && docker compose up -dReturn to the bot's .env file and paste the copied value into REMNAWAVE_WEBHOOK_SECRET:
cd /opt/remnashop && nano .env REMNAWAVE_WEBHOOK_SECRET=ey1234567890qwertyuiopasdfghjklzxcvbnmREMNAWAVE_WEBHOOK_SECRET must match the value of WEBHOOK_SECRET_HEADER in the panel's .env file.
Step 6: Start the bot
docker compose up -d && docker compose logs -f -tIf everything is configured correctly, the bot will send a welcome message.
WARNING!
A reverse proxy is required for Remnashop to work correctly.
Do not expose services directly to the public internet. Use only 127.0.0.1 for Remnashop services.
You can now proceed to set up the reverse proxy.
Install Reverse Proxy
Installation and configuration of the reverse proxy