initial commit
This commit is contained in:
111
README.md
Normal file
111
README.md
Normal file
@@ -0,0 +1,111 @@
|
||||
# 🚀 Showcase Website – CI/CD Docker Template
|
||||
|
||||
This repository is a **production-ready template** for deploying a static website using:
|
||||
- Plain **HTML / CSS / JavaScript**
|
||||
- **Docker + Nginx**
|
||||
- **Gitea Actions** for CI/CD
|
||||
- Automated **build numbering**
|
||||
- Safe **deployment with healthchecks & rollback**
|
||||
|
||||
It is designed to be **forked and reused** as a starting point for real-world deployments.
|
||||
|
||||
## 📦 What’s included
|
||||
- ✅ Simple showcase website
|
||||
- ✅ Configurable Nginx container
|
||||
- ✅ Dockerfile ready for production
|
||||
- ✅ CI pipeline (build + tag + push)
|
||||
- ✅ CD pipeline (deploy + healthcheck)
|
||||
- ✅ Automatic rollback on failed deployment
|
||||
|
||||
## 📁 Repository structure
|
||||
```
|
||||
.
|
||||
├── .gitea/
|
||||
│ └── workflows/
|
||||
│ └── ci.yml
|
||||
├── assets/
|
||||
├── docker/
|
||||
│ ├── default.conf.template
|
||||
│ └── nginx.conf
|
||||
├── src/
|
||||
│ ├── css/
|
||||
│ └── js/
|
||||
├── Dockerfile
|
||||
├── index.html
|
||||
└── README.md
|
||||
```
|
||||
|
||||
## 🐳 Docker image
|
||||
### Image tags
|
||||
Each build produces multiple tags:
|
||||
| Tag | Description |
|
||||
| ----------- | ----------- |
|
||||
| `build-N` | Incremental build number with N as the build number (recommended for deployments) |
|
||||
| `latest` | Pointer to most recent build |
|
||||
|
||||
## 🔁 CI/CD Pipeline Overview
|
||||
|
||||
### CI (Build)
|
||||
Triggered on push to `main`:
|
||||
1. Logs into the Docker registry
|
||||
2. Build Docker image
|
||||
3. Tag with: `build-N` & `latest`
|
||||
4. Push image to registry
|
||||
|
||||
### CD (Deploy)
|
||||
The deploy job:
|
||||
1. Connects to the server via SSH
|
||||
2. Logs into the Docker registry
|
||||
3. Pulls the new `build-N` image
|
||||
4. Starts the new `build-N` container on a test port `81`
|
||||
5. Runs healthchecks
|
||||
6. **If unhealthy**
|
||||
1. Stops the new `build-N` container
|
||||
2. Exits the CD process (keeping the old container running)
|
||||
7. **If healthy → stop the new `build-N` container and stop here**
|
||||
1. Stops the new `build-N` container
|
||||
2. Stops the new old container
|
||||
3. Starts the new `build-N` container on the correct port `80`
|
||||
4. Remove the docker image of the old container
|
||||
|
||||
This guarantees:
|
||||
- No broken deployments
|
||||
- Clear CI failure signal
|
||||
- Easy rollback
|
||||
|
||||
## ❤️ Healthcheck
|
||||
|
||||
The container exposes:
|
||||
```
|
||||
GET /health
|
||||
```
|
||||
|
||||
Expected response:
|
||||
```
|
||||
200 OK
|
||||
ok
|
||||
```
|
||||
|
||||
Used by:
|
||||
- Docker healthchecks
|
||||
- Deployment validation
|
||||
|
||||
## 🔐 Required Gitea Secrets & Variables
|
||||
The following secrets and variables **must be setup** inside the destination repository.
|
||||
|
||||
### Variables
|
||||
| Variable | Description |
|
||||
| ------------------- | --------------------------------------------------- |
|
||||
| `IMAGE_NAME` | Name of the docker image (built and deployed) |
|
||||
| `REGISTRY_LOCATION` | Location of the image registery |
|
||||
| `PORT` | Port on which the site will be exposed on |
|
||||
| `TEST_PORT` | Port on which the test container will be exposed on |
|
||||
|
||||
### Secrets
|
||||
| Secrets | Description |
|
||||
| ------------------ | --------------------------------------------------------------------- |
|
||||
| `REGISTRY_USER` | User used in order to log into the image registery |
|
||||
| `REGISTRY_TOKEN` | Token (or password) used in order to log into the image registery |
|
||||
| `PROD_SERVER_HOST` | Location of the production server host (must be reachable from GITEA) |
|
||||
| `DEPLOY_USER` | User used in order to ssh into the production server |
|
||||
| `DEPLOY_SSH_KEY` | SSH private key used in order to ssh into the production server |
|
||||
Reference in New Issue
Block a user