ssh root@TWÓJ_IP_SERWERA apt update && apt upgrade -y adduser flask_user usermod -aG sudo flask_user su - flask_user sudo apt install python3 python3-pip python3-venv git -y sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list sudo apt update sudo apt install caddy mkdir -p ~/apps/{projekt1,projekt2,projekt3,projekt4} mkdir ~/logs cd ~/apps/projekt1 git clone https://github.com/twoj-username/projekt1.git . # lub scp -r ./projekt1 flask_user@TWÓJ_IP:~/apps/projekt1/ python3 -m venv venv source venv/bin/activate pip install -r requirements.txt pip install gunicorn gunicorn --bind 0.0.0.0:5001 app:app sudo nano /etc/systemd/system/projekt1.service [Unit] Description=Projekt1 Flask Application After=network.target [Service] Type=simple User=flask_user WorkingDirectory=/home/flask_user/apps/projekt1 ExecStart=/home/flask_user/apps/projekt1/venv/bin/gunicorn --bind 127.0.0.1:5001 app:app Restart=always RestartSec=3 Environment=FLASK_ENV=production [Install] WantedBy=multi-user.target sudo systemctl daemon-reload sudo systemctl enable projekt1 sudo systemctl start projekt1 sudo systemctl status projekt1 sudo nano /etc/caddy/Caddyfile # Projekt 1 projekt1.twoja-domena.pl { reverse_proxy localhost:5001 log { output file /var/log/caddy/projekt1.log } } # Projekt 2 projekt2.twoja-domena.pl { reverse_proxy localhost:5002 log { output file /var/log/caddy/projekt2.log } } # Projekt 3 projekt3.twoja-domena.pl { reverse_proxy localhost:5003 log { output file /var/log/caddy/projekt3.log } } # Projekt 4 projekt4.twoja-domena.pl { reverse_proxy localhost:5004 log { output file /var/log/caddy/projekt4.log } } # Alternatywnie - wszystko na jednej domenie z ścieżkami: # twoja-domena.pl { # handle /projekt1/* { # reverse_proxy localhost:5001 # } # handle /projekt2/* { # reverse_proxy localhost:5002 # } # handle /projekt3/* { # reverse_proxy localhost:5003 # } # handle /projekt4/* { # reverse_proxy localhost:5004 # } # } sudo systemctl reload caddy # W Caddyfile użyj IP zamiast domeny: IP_SERWERA:80 { handle /projekt1/* { reverse_proxy localhost:5001 } # itd... } nano ~/update_app.sh #!/bin/bash APP_NAME=$1 cd ~/apps/$APP_NAME git pull origin main source venv/bin/activate pip install -r requirements.txt sudo systemctl restart $APP_NAME echo "Aplikacja $APP_NAME została zaktualizowana!" chmod +x ~/update_app.sh ./update_app.sh projekt1 sudo systemctl status projekt1 sudo systemctl status projekt2 # itd... sudo journalctl -u projekt1 -f sudo tail -f /var/log/caddy/projekt1.log htop df -h free -h sudo ufw allow ssh sudo ufw allow 80 sudo ufw allow 443 sudo ufw enable sudo apt install unattended-upgrades sudo dpkg-reconfigure unattended-upgrades nano ~/backup.sh #!/bin/bash DATE=$(date +%Y%m%d_%H%M%S) tar -czf ~/backup_$DATE.tar.gz ~/apps/ echo "Backup utworzony: backup_$DATE.tar.gz" ✅ Bardzo niski koszt
✅ Pełna kontrola nad serwerem
✅ Automatyczne SSL (Caddy)
✅ Łatwe zarządzanie wieloma aplikacjami
✅ Dobra wydajność
✅ Możliwość skalowania
Jeśli masz problemy z którymś krokiem, sprawdź:
sudo journalctl -u nazwa_serwisusudo journalctl -u caddysudo systemctl status nazwa_serwisuPowodzenia z deploymentem! 🚀