Skip to content

Commit 79a1853

Browse files
Update README.md
1 parent 45d5f43 commit 79a1853

File tree

1 file changed

+316
-2
lines changed

1 file changed

+316
-2
lines changed

README.md

Lines changed: 316 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,316 @@
1-
# caddy-flask
2-
jak najprościej zdeployować aplikacje Flask na własnym VPS z Caddy
1+
# Deployment aplikacji Flask na VPS z Caddy - Kompletny tutorial
2+
3+
## 1. Kupno i konfiguracja VPS
4+
5+
### Wybór providera
6+
- **IONOS**: ~2 EUR/miesiąc za podstawowy VPS
7+
- **Hetzner**: ~3 EUR/miesiąc
8+
- **DigitalOcean**: ~4 USD/miesiąc
9+
10+
### Specyfikacja VPS (wystarczająca dla 4 projektów Flask):
11+
- 1 vCPU
12+
- 1GB RAM
13+
- 20GB SSD
14+
- Ubuntu 22.04 LTS
15+
16+
## 2. Pierwsza konfiguracja serwera
17+
18+
### Połączenie z serwerem
19+
```bash
20+
ssh root@TWÓJ_IP_SERWERA
21+
```
22+
23+
### Aktualizacja systemu
24+
```bash
25+
apt update && apt upgrade -y
26+
```
27+
28+
### Utworzenie użytkownika (bezpieczeństwo)
29+
```bash
30+
adduser flask_user
31+
usermod -aG sudo flask_user
32+
```
33+
34+
### Przejście na nowego użytkownika
35+
```bash
36+
su - flask_user
37+
```
38+
39+
## 3. Instalacja niezbędnych pakietów
40+
41+
### Python i pip
42+
```bash
43+
sudo apt install python3 python3-pip python3-venv git -y
44+
```
45+
46+
### Instalacja Caddy
47+
```bash
48+
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
49+
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
50+
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
51+
sudo apt update
52+
sudo apt install caddy
53+
```
54+
55+
## 4. Przygotowanie struktury katalogów
56+
57+
```bash
58+
mkdir -p ~/apps/{projekt1,projekt2,projekt3,projekt4}
59+
mkdir ~/logs
60+
```
61+
62+
## 5. Deployment pierwszej aplikacji Flask
63+
64+
### Przykład dla projekt1
65+
```bash
66+
cd ~/apps/projekt1
67+
```
68+
69+
### Klonowanie repozytorium (lub upload plików)
70+
```bash
71+
git clone https://github.com/twoj-username/projekt1.git .
72+
# lub scp -r ./projekt1 flask_user@TWÓJ_IP:~/apps/projekt1/
73+
```
74+
75+
### Tworzenie środowiska wirtualnego
76+
```bash
77+
python3 -m venv venv
78+
source venv/bin/activate
79+
pip install -r requirements.txt
80+
```
81+
82+
### Instalacja Gunicorn
83+
```bash
84+
pip install gunicorn
85+
```
86+
87+
### Test aplikacji
88+
```bash
89+
gunicorn --bind 0.0.0.0:5001 app:app
90+
```
91+
92+
## 6. Konfiguracja systemd dla każdej aplikacji
93+
94+
### Tworzenie pliku serwisu dla projekt1
95+
```bash
96+
sudo nano /etc/systemd/system/projekt1.service
97+
```
98+
99+
### Zawartość pliku serwisu:
100+
```ini
101+
[Unit]
102+
Description=Projekt1 Flask Application
103+
After=network.target
104+
105+
[Service]
106+
Type=simple
107+
User=flask_user
108+
WorkingDirectory=/home/flask_user/apps/projekt1
109+
ExecStart=/home/flask_user/apps/projekt1/venv/bin/gunicorn --bind 127.0.0.1:5001 app:app
110+
Restart=always
111+
RestartSec=3
112+
Environment=FLASK_ENV=production
113+
114+
[Install]
115+
WantedBy=multi-user.target
116+
```
117+
118+
### Uruchomienie serwisu
119+
```bash
120+
sudo systemctl daemon-reload
121+
sudo systemctl enable projekt1
122+
sudo systemctl start projekt1
123+
sudo systemctl status projekt1
124+
```
125+
126+
### Powtórz dla pozostałych projektów (porty 5002, 5003, 5004)
127+
128+
## 7. Konfiguracja Caddy
129+
130+
### Edycja Caddyfile
131+
```bash
132+
sudo nano /etc/caddy/Caddyfile
133+
```
134+
135+
### Zawartość Caddyfile:
136+
```
137+
# Projekt 1
138+
projekt1.twoja-domena.pl {
139+
reverse_proxy localhost:5001
140+
log {
141+
output file /var/log/caddy/projekt1.log
142+
}
143+
}
144+
145+
# Projekt 2
146+
projekt2.twoja-domena.pl {
147+
reverse_proxy localhost:5002
148+
log {
149+
output file /var/log/caddy/projekt2.log
150+
}
151+
}
152+
153+
# Projekt 3
154+
projekt3.twoja-domena.pl {
155+
reverse_proxy localhost:5003
156+
log {
157+
output file /var/log/caddy/projekt3.log
158+
}
159+
}
160+
161+
# Projekt 4
162+
projekt4.twoja-domena.pl {
163+
reverse_proxy localhost:5004
164+
log {
165+
output file /var/log/caddy/projekt4.log
166+
}
167+
}
168+
169+
# Alternatywnie - wszystko na jednej domenie z ścieżkami:
170+
# twoja-domena.pl {
171+
# handle /projekt1/* {
172+
# reverse_proxy localhost:5001
173+
# }
174+
# handle /projekt2/* {
175+
# reverse_proxy localhost:5002
176+
# }
177+
# handle /projekt3/* {
178+
# reverse_proxy localhost:5003
179+
# }
180+
# handle /projekt4/* {
181+
# reverse_proxy localhost:5004
182+
# }
183+
# }
184+
```
185+
186+
### Restart Caddy
187+
```bash
188+
sudo systemctl reload caddy
189+
```
190+
191+
## 8. Konfiguracja domeny
192+
193+
### Opcja 1: Własna domena
194+
1. Kup domenę (np. na nazwa.pl, OVH)
195+
2. Ustaw rekordy DNS:
196+
- A record: projekt1.twoja-domena.pl → IP_SERWERA
197+
- A record: projekt2.twoja-domena.pl → IP_SERWERA
198+
- itd.
199+
200+
### Opcja 2: Darmowa subdomena
201+
- Użyj serwisów jak FreeDNS, No-IP
202+
- Lub skonfiguruj Cloudflare Tunnel
203+
204+
### Opcja 3: Dostęp przez IP (do testów)
205+
```
206+
# W Caddyfile użyj IP zamiast domeny:
207+
IP_SERWERA:80 {
208+
handle /projekt1/* {
209+
reverse_proxy localhost:5001
210+
}
211+
# itd...
212+
}
213+
```
214+
215+
## 9. Automatyzacja deploymentu
216+
217+
### Skrypt update.sh
218+
```bash
219+
nano ~/update_app.sh
220+
```
221+
222+
```bash
223+
#!/bin/bash
224+
APP_NAME=$1
225+
cd ~/apps/$APP_NAME
226+
git pull origin main
227+
source venv/bin/activate
228+
pip install -r requirements.txt
229+
sudo systemctl restart $APP_NAME
230+
echo "Aplikacja $APP_NAME została zaktualizowana!"
231+
```
232+
233+
```bash
234+
chmod +x ~/update_app.sh
235+
```
236+
237+
### Użycie:
238+
```bash
239+
./update_app.sh projekt1
240+
```
241+
242+
## 10. Monitorowanie i logi
243+
244+
### Sprawdzanie statusu aplikacji
245+
```bash
246+
sudo systemctl status projekt1
247+
sudo systemctl status projekt2
248+
# itd...
249+
```
250+
251+
### Oglądanie logów
252+
```bash
253+
sudo journalctl -u projekt1 -f
254+
sudo tail -f /var/log/caddy/projekt1.log
255+
```
256+
257+
### Sprawdzanie zasobów
258+
```bash
259+
htop
260+
df -h
261+
free -h
262+
```
263+
264+
## 11. Bezpieczeństwo
265+
266+
### Konfiguracja firewall
267+
```bash
268+
sudo ufw allow ssh
269+
sudo ufw allow 80
270+
sudo ufw allow 443
271+
sudo ufw enable
272+
```
273+
274+
### Automatyczne aktualizacje bezpieczeństwa
275+
```bash
276+
sudo apt install unattended-upgrades
277+
sudo dpkg-reconfigure unattended-upgrades
278+
```
279+
280+
## 12. Backup
281+
282+
### Prosty skrypt backup
283+
```bash
284+
nano ~/backup.sh
285+
```
286+
287+
```bash
288+
#!/bin/bash
289+
DATE=$(date +%Y%m%d_%H%M%S)
290+
tar -czf ~/backup_$DATE.tar.gz ~/apps/
291+
echo "Backup utworzony: backup_$DATE.tar.gz"
292+
```
293+
294+
## Podsumowanie kosztów
295+
296+
- **VPS IONOS**: ~2 EUR/miesiąc
297+
- **Domena**: ~10-15 EUR/rok (opcjonalnie)
298+
- **Łącznie**: ~2-3 EUR/miesiąc
299+
300+
## Zalety tego rozwiązania
301+
302+
✅ Bardzo niski koszt
303+
✅ Pełna kontrola nad serwerem
304+
✅ Automatyczne SSL (Caddy)
305+
✅ Łatwe zarządzanie wieloma aplikacjami
306+
✅ Dobra wydajność
307+
✅ Możliwość skalowania
308+
309+
## Wsparcie
310+
311+
Jeśli masz problemy z którymś krokiem, sprawdź:
312+
- Logi systemd: `sudo journalctl -u nazwa_serwisu`
313+
- Logi Caddy: `sudo journalctl -u caddy`
314+
- Status serwisów: `sudo systemctl status nazwa_serwisu`
315+
316+
Powodzenia z deploymentem! 🚀

0 commit comments

Comments
 (0)