FastAPI backend for Blockpass. Includes MySQL connectivity and optional ngrok tunneling.
- Ubuntu 24.04 (tested)
- Python 3.12
- MySQL 8.0
main.py: FastAPI server with DB health checkngrok_main.py: Same server with ngrok tunnel.venv/: Python virtual environment
python3 -m venv /home/gunhee/blockpass-back/.venv
source /home/gunhee/blockpass-back/.venv/bin/activate
pip install fastapi uvicorn sqlalchemy pymysql pyngrokCreate DB and user on the server:
CREATE DATABASE blockpass;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY '2week';
GRANT ALL PRIVILEGES ON blockpass.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;If you need remote access (Workbench), also create:
CREATE USER 'appuser'@'YOUR_PC_PUBLIC_IP' IDENTIFIED BY '2week';
GRANT ALL PRIVILEGES ON blockpass.* TO 'appuser'@'YOUR_PC_PUBLIC_IP';
FLUSH PRIVILEGES;export DATABASE_URL="mysql+pymysql://appuser:2week@127.0.0.1:3306/blockpass"If using ngrok:
export NGROK_AUTHTOKEN="YOUR_TOKEN"Local server:
source /home/gunhee/blockpass-back/.venv/bin/activate
export DATABASE_URL="mysql+pymysql://appuser:2week@127.0.0.1:3306/blockpass"
python /home/gunhee/blockpass-back/main.pyngrok server (if outbound 443 is allowed):
source /home/gunhee/blockpass-back/.venv/bin/activate
export DATABASE_URL="mysql+pymysql://appuser:2week@127.0.0.1:3306/blockpass"
export NGROK_AUTHTOKEN="YOUR_TOKEN"
python /home/gunhee/blockpass-back/ngrok_main.pyGET /->{ "status": "ok" }GET /db/health->{ "db_ok": true }
If security groups cannot be edited, use SSH tunnel from your local PC.
Local PC:
ssh -L 8000:localhost:8000 root@172.10.5.40Then open:
http://localhost:8000
For MySQL Workbench over SSH:
- Connection Method: Standard TCP/IP over SSH
- SSH Hostname:
172.10.5.40 - SSH Username:
root - MySQL Hostname:
127.0.0.1 - MySQL Port:
3306 - Username:
appuser - Password:
2week - Default Schema:
blockpass
- If ngrok fails with timeout, outbound 443 is blocked by network policy.
- If SSH reverse tunneling fails,
AllowTcpForwardingmust be enabled in/etc/ssh/sshd_config.