258 lines
6.0 KiB
Markdown
258 lines
6.0 KiB
Markdown
|
|
# 🚀 Deployment Guide - Hosting Platform
|
||
|
|
|
||
|
|
## 📊 Server Information
|
||
|
|
|
||
|
|
**Server IP**: `176.96.129.77`
|
||
|
|
**OS**: Ubuntu 24.04 LTS
|
||
|
|
**RAM**: 4GB
|
||
|
|
**CPU**: 4 cores
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🌐 Production URLs
|
||
|
|
|
||
|
|
| Service | URL | Status |
|
||
|
|
|---------|-----|--------|
|
||
|
|
| **Frontend** | https://argeict.net | ✅ Running |
|
||
|
|
| **Backend API** | https://api.argeict.net | ✅ Running |
|
||
|
|
| **Gitea** | https://gitea.argeict.net | ✅ Running |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 Deployed Services
|
||
|
|
|
||
|
|
### ✅ Core Services
|
||
|
|
|
||
|
|
| Service | Port | Internal URL | Status |
|
||
|
|
|---------|------|--------------|--------|
|
||
|
|
| **Frontend (React + Vite)** | 3001 | http://127.0.0.1:3001 | ✅ Running |
|
||
|
|
| **Backend API (Flask)** | 5000 | http://127.0.0.1:5000 | ✅ Running |
|
||
|
|
| **Gitea** | 3000 | http://127.0.0.1:3000 | ✅ Running |
|
||
|
|
| **PostgreSQL** | 5432 | localhost:5432 | ✅ Running |
|
||
|
|
| **Redis** | 6379 | localhost:6379 | ✅ Running |
|
||
|
|
| **Nginx (HTTPS)** | 443 | - | ✅ Running |
|
||
|
|
| **Nginx (HTTP → HTTPS)** | 80 | - | ✅ Running |
|
||
|
|
|
||
|
|
### 🔐 Credentials
|
||
|
|
|
||
|
|
**Gitea Admin**:
|
||
|
|
- Username: `hostadmin`
|
||
|
|
- Password: `HostAdmin2024!`
|
||
|
|
- Repository: https://gitea.argeict.net/hostadmin/hosting-platform
|
||
|
|
|
||
|
|
**PostgreSQL**:
|
||
|
|
- User: `hosting_user`
|
||
|
|
- Password: `HostingDB2024!`
|
||
|
|
- Database: `hosting_db`
|
||
|
|
|
||
|
|
**Redis**:
|
||
|
|
- No password (localhost only)
|
||
|
|
|
||
|
|
**SSL Certificates (Let's Encrypt)**:
|
||
|
|
- Certificate: `/etc/letsencrypt/live/argeict.net/fullchain.pem`
|
||
|
|
- Private Key: `/etc/letsencrypt/live/argeict.net/privkey.pem`
|
||
|
|
- Domains: `argeict.net`, `api.argeict.net`, `gitea.argeict.net`
|
||
|
|
- Expires: `2026-04-10` (Auto-renewal enabled via certbot timer)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🏗️ Architecture
|
||
|
|
|
||
|
|
```
|
||
|
|
Internet
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────────────────────────┐
|
||
|
|
│ Nginx Reverse Proxy (Port 80) │
|
||
|
|
│ - Frontend: / │
|
||
|
|
│ - Backend API: /api │
|
||
|
|
│ - Webhook: /webhook │
|
||
|
|
└─────────────────────────────────────┘
|
||
|
|
│
|
||
|
|
├──────────────┬──────────────┐
|
||
|
|
▼ ▼ ▼
|
||
|
|
┌─────────┐ ┌──────────┐ ┌──────────┐
|
||
|
|
│Frontend │ │ Backend │ │ Gitea │
|
||
|
|
│ :3001 │ │ :5000 │ │ :3000 │
|
||
|
|
└─────────┘ └──────────┘ └──────────┘
|
||
|
|
│
|
||
|
|
┌─────────┴─────────┐
|
||
|
|
▼ ▼
|
||
|
|
┌──────────┐ ┌─────────┐
|
||
|
|
│PostgreSQL│ │ Redis │
|
||
|
|
│ :5432 │ │ :6379 │
|
||
|
|
└──────────┘ └─────────┘
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📁 Directory Structure
|
||
|
|
|
||
|
|
```
|
||
|
|
/opt/hosting-platform/
|
||
|
|
├── backend/
|
||
|
|
│ ├── app/
|
||
|
|
│ │ ├── __init__.py
|
||
|
|
│ │ ├── main.py
|
||
|
|
│ │ ├── config.py
|
||
|
|
│ │ ├── models/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ └── domain.py
|
||
|
|
│ │ ├── services/
|
||
|
|
│ │ │ ├── __init__.py
|
||
|
|
│ │ │ └── cloudflare_service.py
|
||
|
|
│ │ └── api/
|
||
|
|
│ ├── venv/
|
||
|
|
│ └── requirements.txt
|
||
|
|
├── frontend/
|
||
|
|
│ ├── src/
|
||
|
|
│ │ ├── App.jsx
|
||
|
|
│ │ ├── main.jsx
|
||
|
|
│ │ ├── pages/
|
||
|
|
│ │ │ ├── DomainSetup.jsx
|
||
|
|
│ │ │ └── DomainList.jsx
|
||
|
|
│ │ └── services/
|
||
|
|
│ │ └── api.js
|
||
|
|
│ ├── package.json
|
||
|
|
│ └── vite.config.js
|
||
|
|
└── deploy.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔄 Auto-Deploy Workflow
|
||
|
|
|
||
|
|
1. **Developer pushes code** to `main` branch
|
||
|
|
2. **Gitea webhook** triggers → `POST http://176.96.129.77:5000/webhook/deploy`
|
||
|
|
3. **Backend receives webhook** → Executes `/opt/hosting-platform/deploy.sh`
|
||
|
|
4. **Deploy script**:
|
||
|
|
- Pulls latest code from Git
|
||
|
|
- Installs dependencies
|
||
|
|
- Restarts services via Supervisor
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🛠️ Management Commands
|
||
|
|
|
||
|
|
### Supervisor (Process Management)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Check status
|
||
|
|
supervisorctl status
|
||
|
|
|
||
|
|
# Restart services
|
||
|
|
supervisorctl restart hosting-backend
|
||
|
|
supervisorctl restart hosting-frontend
|
||
|
|
|
||
|
|
# View logs
|
||
|
|
tail -f /var/log/hosting-backend.log
|
||
|
|
tail -f /var/log/hosting-frontend.log
|
||
|
|
|
||
|
|
# Stop/Start
|
||
|
|
supervisorctl stop hosting-backend
|
||
|
|
supervisorctl start hosting-backend
|
||
|
|
```
|
||
|
|
|
||
|
|
### Nginx
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Test configuration
|
||
|
|
nginx -t
|
||
|
|
|
||
|
|
# Reload
|
||
|
|
systemctl reload nginx
|
||
|
|
|
||
|
|
# Restart
|
||
|
|
systemctl restart nginx
|
||
|
|
|
||
|
|
# View logs
|
||
|
|
tail -f /var/log/nginx/access.log
|
||
|
|
tail -f /var/log/nginx/error.log
|
||
|
|
```
|
||
|
|
|
||
|
|
### Database
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Connect to PostgreSQL
|
||
|
|
psql -U hosting_user -d hosting_db
|
||
|
|
|
||
|
|
# Connect to Redis
|
||
|
|
redis-cli
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🧪 Testing
|
||
|
|
|
||
|
|
### Health Check
|
||
|
|
```bash
|
||
|
|
curl https://api.argeict.net/health
|
||
|
|
```
|
||
|
|
|
||
|
|
### API Test
|
||
|
|
```bash
|
||
|
|
curl https://api.argeict.net/api/domains
|
||
|
|
```
|
||
|
|
|
||
|
|
### Frontend
|
||
|
|
Open browser: https://argeict.net
|
||
|
|
|
||
|
|
### Gitea
|
||
|
|
Open browser: https://gitea.argeict.net
|
||
|
|
|
||
|
|
### SSL Certificate Check
|
||
|
|
```bash
|
||
|
|
openssl s_client -connect argeict.net:443 -servername argeict.net < /dev/null 2>/dev/null | openssl x509 -noout -dates
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📝 Next Steps
|
||
|
|
|
||
|
|
1. ✅ **Add SSL Certificate** (Let's Encrypt)
|
||
|
|
2. ✅ **Configure Domain Name**
|
||
|
|
3. ✅ **Set up Monitoring** (Prometheus/Grafana)
|
||
|
|
4. ✅ **Add Backup System**
|
||
|
|
5. ✅ **Implement Authentication**
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🆘 Troubleshooting
|
||
|
|
|
||
|
|
### Backend not starting
|
||
|
|
```bash
|
||
|
|
# Check logs
|
||
|
|
tail -f /var/log/hosting-backend.log
|
||
|
|
|
||
|
|
# Check if port is in use
|
||
|
|
lsof -i :5000
|
||
|
|
|
||
|
|
# Restart
|
||
|
|
supervisorctl restart hosting-backend
|
||
|
|
```
|
||
|
|
|
||
|
|
### Frontend not loading
|
||
|
|
```bash
|
||
|
|
# Check logs
|
||
|
|
tail -f /var/log/hosting-frontend.log
|
||
|
|
|
||
|
|
# Restart
|
||
|
|
supervisorctl restart hosting-frontend
|
||
|
|
```
|
||
|
|
|
||
|
|
### Database connection issues
|
||
|
|
```bash
|
||
|
|
# Check PostgreSQL status
|
||
|
|
systemctl status postgresql
|
||
|
|
|
||
|
|
# Check connections
|
||
|
|
psql -U hosting_user -d hosting_db -c "SELECT * FROM pg_stat_activity;"
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Deployment Date**: 2026-01-10
|
||
|
|
**Version**: 1.0.0
|
||
|
|
**Deployed By**: Hosting Platform Team
|
||
|
|
|