π³ Π Π°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· Docker - prog-time/tg-support-bot GitHub Wiki
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π½Π° Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ:
- Docker
- Docker Compose
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅:
docker -v
docker-compose -v
ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ Π΄ΠΎΠΌΠ΅Π½Π°
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Π±ΠΎΡΠ° Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎΠΌΠ΅Π½, Π°ΡΠ΅Π½Π΄ΠΎΠ²Π°ΡΡ VPS (ΠΈΠ»ΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ) ΠΈ Π½Π°ΡΡΡΠΎΠΈΡΡ DNS Π΄Π»Ρ Π΄ΠΎΠΌΠ΅Π½Π°, ΡΠΊΠ°Π·Π°Π² Π² "A" Π·Π°ΠΏΠΈΡΠΈ Π°Π΄ΡΠ΅Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΠ»ΠΎΠ½ΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ
git clone https://github.com/prog-time/tg-support-bot.git
ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» .env Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
cp .env.example .env
ΠΠ°ΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅:
APP_URL=https://your-domain.com
TELEGRAM_BOT_TOKEN=your_bot_token
TELEGRAM_GROUP_ID=-1001234567890
TELEGRAM_SECRET_KEY=your_custom_key
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Telegram Group ID ΠΈ Bot Token ΡΠΌ. ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Telegram-Π±ΠΎΡΠ°.
Π‘ΠΎΠ±Π΅ΡΠΈΡΠ΅ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ
docker-compose up -d --build
ΠΡΠ΄ΡΡ Π·Π°ΠΏΡΡΠ΅Π½Ρ ΡΠ΅ΡΠ²ΠΈΡΡ:
- nginx β Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ
- app β Laravel-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
- postgres β Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ
- pgadmin β Π°Π΄ΠΌΠΈΠ½ΠΊΠ° Π΄Π»Ρ PostgreSQL
- grafana ΠΈ loki β Π΄Π»Ρ Π»ΠΎΠ³ΠΎΠ² ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ
ΠΠ°ΠΉΠ΄ΠΈΡΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Laravel:
docker-compose exec app bash
ΠΠ½ΡΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°:
composer install
php artisan migrate
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° SSL Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ (Nginx + Let's Encrypt)
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ nginx ΠΈ certbot
sudo apt update
sudo apt install nginx certbot python3-certbot-nginx
ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ ΠΏΡΠΎΠΊΡΠΈ-ΠΊΠΎΠ½ΡΠΈΠ³ Π΄Π»Ρ Nginx
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» /etc/nginx/sites-available/{Π΄ΠΎΠΌΠ΅Π½}:
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
ΠΠΊΡΠΈΠ²ΠΈΡΡΠΉΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ:
sudo ln -s /etc/nginx/sites-available/support-bot /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
ΠΡΠΏΡΡΡΠΈΡΠ΅ SSL-ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ
sudo certbot --nginx -d your-domain.com
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π² .env Laravel ΡΠΊΠ°Π·Π°Π½ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π²Π½Π΅ΡΠ½ΠΈΠΉ URL
APP_URL=https://your-domain.com
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π²Π΅Π±Ρ ΡΠΊΠ° (Telegram)
curl https://your-domain.com/api/telegram/set_webhook
ΠΠΎΠ»Π΅Π·Π½ΡΠ΅ Π°Π΄ΡΠ΅ΡΠ°
- ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: https://your-domain.com
- Grafana: http://localhost:3000
- pgAdmin: http://localhost:5050