告别手动部署:Piku + GitLab CI打造极致轻量级自动化流水线
还在为每次代码更新后繁琐的部署流程头疼吗?手动SSH连接、执行命令、检查日志的时代该结束了!本文将带你使用Piku这个微型PaaS平台,结合GitLab CI/CD,打造一套零成本的自动化部署流水线。
什么是Piku?极简PaaS的革命
Piku是一个受Dokku启发的极简PaaS平台,让你能够通过简单的git push命令将代码部署到自己的服务器。它最大的特点是轻量级和简单易用,核心代码仅约1500行,支持Python、Node.js、Go、Java等多种语言运行时。
与传统的重型PaaS不同,Piku设计初衷就是在低端设备上运行,甚至可以在256MB内存的树莓派上稳定工作。它使用标准的Linux工具链:git、ssh、uwsgi和nginx,无需复杂的容器技术。
GitLab CI + Piku:天作之合
GitLab CI/CD提供了强大的持续集成能力,而Piku提供了简单的部署接口,两者结合可以构建完整的自动化流水线:
实战配置:三步搭建自动化部署
1. Piku服务器准备
首先在目标服务器安装Piku:
# 使用官方安装脚本
curl https://piku.github.io/get | sh
2. GitLab CI配置文件
在项目根目录创建.gitlab-ci.yml:
stages:
- test
- deploy
test:
stage: test
image: python:3.9
script:
- pip install -r requirements.txt
- python -m pytest
deploy_to_piku:
stage: deploy
image: alpine:latest
script:
- apk add --no-cache openssh-client git
- mkdir -p ~/.ssh
- echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -H $PIKU_SERVER >> ~/.ssh/known_hosts
- git remote add piku piku@$PIKU_SERVER:$CI_PROJECT_NAME
- git push piku $CI_COMMIT_REF_NAME
only:
- main
environment:
name: production
url: https://$CI_PROJECT_NAME.yourdomain.com
3. 环境变量配置
在GitLab项目的Settings → CI/CD → Variables中设置:
SSH_PRIVATE_KEY: Piku服务器的SSH私钥PIKU_SERVER: Piku服务器IP或域名
高级配置技巧
ENV文件配置
在项目根目录创建ENV文件进行应用配置:
# 运行时设置
PYTHON_VERSION=3.9
PIKU_AUTO_RESTART=true
# Nginx配置
NGINX_SERVER_NAME=your-app.yourdomain.com
NGINX_HTTPS_ONLY=1
# uWSGI优化
UWSGI_PROCESSES=4
UWSGI_MAX_REQUESTS=1000
Procfile定义进程
创建Procfile定义应用进程:
web: python manage.py runserver
worker: python manage.py rqworker
release: python manage.py migrate && python manage.py collectstatic --noinput
完整部署流程解析
- 代码提交 → 触发GitLab CI流水线
- 测试阶段 → 运行单元测试和代码检查
- 部署阶段 → SSH连接到Piku服务器执行git push
- Piku自动处理 → 识别语言、安装依赖、启动应用
- Nginx配置 → 自动配置虚拟主机和SSL证书
优势总结
- 零成本: 无需额外付费服务,利用现有基础设施
- 极简配置: 配置文件简单明了,学习成本低
- 多语言支持: Python、Node.js、Go、Java等全面支持
- 自动SSL: 集成Let's Encrypt自动SSL证书
- 资源友好: 低资源消耗,适合小型项目和边缘设备
适用场景
- 个人项目和小型团队
- 开发测试环境快速部署
- 资源受限的边缘计算场景
- 需要简单自动化部署的传统应用
通过Piku + GitLab CI的组合,你可以用最少的配置实现企业级的自动化部署体验。告别手动操作,拥抱高效的开发运维流程!
提示:更多配置示例可参考项目中的examples目录和文档
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



