feat: add CI/CD pipeline with Docker + Nginx
Deploy / deploy (push) Failing after 1m30s

- Add Gitea Actions workflow for auto-deploy on push to main
- Add Dockerfile (nginx:alpine based, with layer caching)
- Add nginx.conf (gzip, autoindex, static caching)
- Add .dockerignore
- Migrate cache.html → cache/index.html for directory-based routing
This commit is contained in:
枫
2026-08-23 14:24:47 +00:00
parent d66ee84f79
commit c96c23a7c5
5 changed files with 84 additions and 0 deletions
+4
View File
@@ -0,0 +1,4 @@
.git
.gitea
LICENSE
README.md
+33
View File
@@ -0,0 +1,33 @@
name: Deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: aliyun
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build Docker Image
run: |
docker build \
--cache-from illustrated-algorithm:latest \
-t illustrated-algorithm:latest \
.
- name: Deploy Container
run: |
docker stop illustrated-algorithm 2>/dev/null || true
docker rm illustrated-algorithm 2>/dev/null || true
docker run -d \
--name illustrated-algorithm \
--restart unless-stopped \
-p 10000:80 \
illustrated-algorithm:latest
- name: Cleanup Dangling Images
run: docker image prune -f
+18
View File
@@ -0,0 +1,18 @@
FROM nginx:alpine
# Copy nginx config first (changes less often → cached layer)
COPY nginx.conf /etc/nginx/conf.d/default.conf
# Copy site content
COPY . /usr/share/nginx/html/
# Remove non-web files from the image
RUN rm -rf /usr/share/nginx/html/.git \
/usr/share/nginx/html/.gitea \
/usr/share/nginx/html/.dockerignore \
/usr/share/nginx/html/Dockerfile \
/usr/share/nginx/html/LICENSE \
/usr/share/nginx/html/README.md
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
View File
+29
View File
@@ -0,0 +1,29 @@
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
# Gzip compression
gzip on;
gzip_types text/plain text/css application/javascript application/json image/svg+xml;
gzip_min_length 256;
# Static assets caching
location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff2|ttf)$ {
expires 7d;
add_header Cache-Control "public, no-transform";
}
# Auto-index at root for listing available pages
location / {
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
# Each subdirectory serves its page
location ~ ^/([^/]+)/ {
try_files $uri $uri/ /$1/index.html;
}
}