Installation¶
Welcome to the comprehensive installation guide for osuNoLimits. This guide will walk you through setting up Shiina-Web and bancho.py-ex from scratch.
Prerequisites
Before starting, ensure you have:
- A Linux server (Ubuntu 24.04+ recommended)
- A domain name with DNS access
- Basic command-line knowledge
- Approximately 30-60 minutes
Domain Configuration¶
Configure the following subdomains to point to your server. We strongly recommend using Cloudflare for DNS management and DDoS protection.
Required Subdomains
Create these DNS records pointing to your server's IP:
| Subdomain | Purpose | Example |
|---|---|---|
@ |
Main domain | osunolimits.dev |
osu |
Game client connection | osu.osunolimits.dev |
c |
Game server | c.osunolimits.dev |
c4 |
Game server | c4.osunolimits.dev |
a |
Avatar endpoint | a.osunolimits.dev |
assets |
Static assets | assets.osunolimits.dev |
api |
Bancho API | api.osunolimits.dev |
- Add your domain to Cloudflare
- Update nameservers at your registrar
- Create the A records listed above
- Enable proxy (orange cloud) for web traffic protection

SSL Configuration
You can choose between flexible or strict SSL encryption. For production environments, we recommend Full (Strict) SSL mode with valid certificates.
Version Control Recommendation
Create a GitHub fork of the repositories before proceeding. This allows you to:
- Easily pull updates
- Make custom modifications
- Maintain your configuration
Installing bancho.py-ex¶
Docker Installation¶
Docker is required to run bancho.py-ex. Choose your operating system below:
Cleanup First
Remove any conflicting Docker packages:
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
sudo apt-get remove $pkg
done
Step 1: Add Docker's official GPG key and repository
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
Step 2: Add Docker repository to APT sources
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
Step 3: Install Docker
Cleanup First
Remove any conflicting Docker packages:
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do
sudo apt-get remove $pkg
done
Step 1: Add Docker's official GPG key and repository
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
Step 2: Add Docker repository to APT sources
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
Step 3: Install Docker
Cleanup First
Remove any conflicting Docker packages:
sudo dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
Step 2: Add Docker repository
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
Step 3: Install Docker
Step 4: Enable Docker service
Nginx Installation¶
Nginx serves as our web server and reverse proxy. Follow the instructions for your operating system:
Remove Apache2 (Ubuntu only)
If Apache2 is installed, remove it first to avoid conflicts:
sudo systemctl stop apache2
sudo apt remove apache2 apache2-utils apache2-bin apache2.2-common
sudo apt autoremove
Step 1: Update package list and install Nginx
Step 2: Verify installation
Expected Output
You should see Active: active (running) in green text.
Git Installation¶
Git is required for cloning the repository and managing updates.
Step 1: Update package list and install Git
Step 2: Verify installation
Expected Output
You should see something like git version 2.34.1
Step 3: Configure Git (replace with your information)
Step 1: Update packages and install Git
Step 2: Verify installation
Expected Output
You should see something like git version 2.34.1
Step 3: Configure Git (replace with your information)
Repository Setup¶
Clone the bancho.py-ex repository to your server:
Use Your Fork
If you created a fork, replace the URL with your fork's URL for easier updates.
Environment Setup¶
First, create your configuration files from the provided examples:
Edit Configuration¶
Open the environment file for editing:
Required Configuration
You must configure these essential settings before proceeding:
| Setting | Description | Required |
|---|---|---|
OSU_API_KEY |
Get your osu! API key here | ✅ |
DB_PASS |
Strong database password | ✅ |
DOMAIN |
Your domain (e.g., osunolimits.dev) |
✅ |
Only required for Full/Strict SSL mode
| Setting | Description | Example |
|---|---|---|
SERVER_NAME |
Your server's display name | osuNoLimits |
DISCORD_URL |
Your Discord invite link | https://discord.gg/yourinvite |
MENU_ICON_URL |
In-game menu icon | URL to your icon |
MENU_ONCLICK_URL |
Click destination | Your website URL |
SEASONAL_BGS |
Background images | Comma-separated URLs |
Nginx Configuration¶
Install the pre-configured nginx setup:
Configuration Complete
Your nginx configuration has been automatically set up with the correct proxy settings for all bancho.py-ex endpoints.
Build and Start¶
With everything configured, build and start the project:
Development vs Production
- For development: Use
make runfor easier debugging - For production: Consider using
make run-bgorscreen -S bancho make runto run in background
Autoban Configuration¶
Configure performance point limits to prevent cheating:
PP Caps Configuration
Important Notes
- Set
"enabled": trueto activate automatic banning - Adjust PP values based on your server's skill level
- Monitor logs for any false positives
Installing Shiina-Web¶
bancho.py-ex should be installed at this step
Installing Java¶
Repository Setup¶
Clone the Shiina-Web repository to your server:
Use Your Fork
If you created a fork, replace the URL with your fork's URL for easier updates.
Configuration¶
# Navigate to the config directory
cd .config
cp .env.example .env && cp customization.yml.example customization.yml && cp logger.env.example logger.env
# Editing customization.yml is pretty obvious (no tutorial here)
nano .env
Required Configuration
You must configure these essential settings before proceeding:
| Setting | Description | Required |
|---|---|---|
TURNSTILE_KEY |
Get Cloudflare Captcha key here | ✅ |
TURNSTILE_SECRET |
Get Cloudflare Captcha key here | ✅ |
DBPASS |
Your bancho.py-ex DB_PASS | ✅ |
DOMAIN |
Your domain (def. https://osunolimits.dev) |
✅ |
APIURLPUBLIC |
Your pub api domain (def. https://api.osunolimits.dev) |
✅ |
ASSETSURL |
Your pub assets domain (def. https://assets.osunolimits.dev) |
✅ |
AVATARSRV |
Your pub avatars domain (def. https://a.osunolimits.dev) |
✅ |
| Setting | Description | Required |
|---|---|---|
DOWNLOAD_MARKETPLACE_PLUGIN |
Offers a plugin marketplace (def. true) |
❌ |
APIURL |
Local API Host (Should stay default) | ❌ |
AVATARFOLDER |
Avatar folder only needs change when installed not like wiki | ❌ |
Build and Start¶
With everything configured, build and start the project:
Development vs Production
- For development: Use
make run-devfor easier debugging and hot reloading - For production: Consider using
screen -S shiina make runto run in background
Frequently Asked Questions¶
Here you'll find answers to the most common questions.
Installation¶
How can I use local machine MySQL and Redis?
To use local MySQL and Redis you can create a docker-compose.override.yml
File Content:
services:
bancho:
depends_on: []
network_mode: host
volumes:
- /home/bancho.py-ex/.data:/srv/root
- .:/srv/root
- data:/srv/root/.data
environment:
- DB_HOST=127.0.0.1
- REDIS_HOST=127.0.0.1
mysql:
deploy:
replicas: 0
redis:
deploy:
replicas: 0
No worries the docker-compose.override.yml is in .gitignore
Why are my assets/avatars not showing up?
Fix for Avatar Server (a.your.domain) Returning 404
If /var/log/nginx/error.log reports permission denied, run:
chown -R www-data:www-data /var/lib/docker/volumes/banchopy-ex_data/_data
chown -R www-data:www-data /home/bancho.py-ex/.data
chmod +x /var/lib/docker/volumes/banchopy-ex_data
chmod +x /var/lib/docker/volumes
chmod +x /var/lib/docker
What this does:
- Gives www-data (the Nginx user) ownership of the _data folder, which is stored inside a Docker volume.
- Allows all users on your machine to browse the bancho.py Docker volume.
- Allows all users on your machine to browse the Docker volumes folder.
- Allows all users on your machine to browse the Docker folder.
- (does not include sub-folders)
Note:
If you use Caddy instead of Nginx, replace all occurrences of www-data with caddy.
How to setup default avatar?
Nginx is looking in /home/bancho.py-ex/.data/avatars for a default.jpg
Note: It can be possible that you need to reset permissions, help is in the section above
How can I recieve Donations on shiina?
The only provider supported is kofi
nano /home/Shiina-Web/data/monetization.json
# Set enabled to `true`
# Restart shiina
nano /home/Shiina-Web/data/monetization/kofi.json
https://ko-fi.com/manage/webhooks?src=sidemenu
Enter https://yourdomain.dev/handlekofi
On Advanced you can get your verification token
File Content
donationAmount is the amount of your currency to pay
If someones buys for 10$ it would equal to 10 months
Usage¶
Why is my rank graph not showing?
It needs at least a week of data to show
Can I change code?
Yes but it isn't recommended, it can cause issues updating. Use plugins/themes if possible
Troubleshooting¶
How can I recalc PP?
For recalc you need to open a shell in the docker container