Reputation: 1
I have an API written in FastAPI python and a React frontend that interacts with the API. I need to run an ngrok tunnel using pyngrok for my frontend inside the app container and add the generated url to allow_origins in CORSMiddleware, but when the script to generate the link is run, ngrok starts installing and at 99% the installation hangs and nothing happens. Locally, the script works perfectly, but only in the container such a problem occurs, there are no errors, just the installation does not finish.
Downloading ngrok: 82%
Downloading ngrok: 83%
Downloading ngrok: 84%
Downloading ngrok: 85%
Downloading ngrok: 86%
Downloading ngrok: 87%
Downloading ngrok: 88%
Downloading ngrok: 89%
Downloading ngrok: 90%
Downloading ngrok: 91%
Downloading ngrok: 92%
Downloading ngrok: 93%
Downloading ngrok: 94%
Downloading ngrok: 95%
Downloading ngrok: 96%
Downloading ngrok: 97%
Downloading ngrok: 98%
Downloading ngrok: 99%
Installing ngrok ...
I wait for installation 20 min and nothing happens
This my docker-compose.yml
version: '3.7'
services:
re:
image: redis
container_name: re
command: redis-server --requirepass redistest
ports:
- "6379:6379"
db:
image: postgres
restart: always
container_name: db
command: -p 5435
expose:
- 5435
ports:
- "5435:5432"
environment:
- POSTGRES_PASSWORD=test
- POSTGRES_USER=test
- POSTGRES_DB=test
api:
container_name: qrmenu
image: dchnkoo/qr-sys
env_file:
- qr-sys/.env
ports:
- "8000:8080"
- "5555:5555"
depends_on:
- db
- re
Dockerfile:
FROM python:3.10.12
RUN apt-get update && apt-get install -y \
supervisor \
&& rm -rf /vat/lib/apt/lists/*
RUN mkdir -p /etc/supervisor/conf.d
COPY supervisord.conf /etc/supervisor/supervisord.conf
WORKDIR /qrsystem
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
RUN chmod +x ./*.sh
CMD [ "./app.sh" ]
app.sh:
#! /bin/bash
sleep 5
python3 -m app.SECRET_KEY.generate --set-secret
sleep 5
alembic revision --autogenerate
alembic upgrade head
/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
supervisor.conf
[supervisord]
nodaemon=true
[program:ngrok]
command=python3 -m ngrok.ngrok
directory=/qrsystem
autostart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
stderr_logfile=/dev/fd/2
stderr_logfile_maxbytes=0
[program:API]
command=gunicorn app.API.api:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind=0.0.0.0:8080
directory=/qrsystem
autostart=true
autorestart=true
stdout_logfile=/var/log/gunicorn.log
stderr_logfile=/var/log/gunicorn_err.log
[program:celery]
command=celery --app=app.framework.celery.object:celery worker -l INFO
directory=/qrsystem
autostart=true
autorestart=true
stdout_logfile=/var/log/celery.log
stderr_logfile=/var/log/celery_err.log
[program:flower]
command=celery --app=app.framework.celery.object:celery flower
directory=/qrsystem
autostart=true
autorestart=true
stdout_logfile=/var/log/flower.log
stderr_logfile=/var/log/flower_err.log
pyngrok script:
from pyngrok import ngrok
from app.settings import origins
import os
env = os.environ
AUTH_TOKEN = env.get("NGROK_AUTHTOKEN", None)
if AUTH_TOKEN is not None:
PORT = env.get("NGROK_PORT", "5173")
HOST = env.get("NGROK_HOST", "127.0.0.1")
ngrok.set_auth_token(AUTH_TOKEN)
tunnel = ngrok.connect(f"{HOST}:{PORT}", "http")
url = tunnel.public_url
print(f"""\n\n\n\n\n
## ## ## ## ## ## ## ## ## ## ## ##
#### ## ## ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ## ## ## ##
## #### ## ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ## ## ##
URL {url} -> http://{HOST}:{PORT}
\n\n\n\n\n
""")
try:
origins.remove("*")
except:
pass
origins.append(url)
while True:
...
i tried setting the network_mode for the container api to “host” but that didn't fix the ngrok install problem
Upvotes: 0
Views: 79