Hyperf项目Docker Swarm集群部署实战指南
前言
在现代微服务架构中,容器化部署已成为主流方案。本文将详细介绍如何基于Hyperf框架和Docker Swarm构建高可用的微服务集群环境。通过本教程,您将掌握从基础环境搭建到服务部署的全流程实践。
基础环境准备
Docker安装与配置
在所有集群节点上执行以下步骤:
# 安装Docker
curl -sSL https://get.docker.com/ | sh
# 配置Docker远程访问
vim /lib/systemd/system/docker.service
# 修改ExecStart行,添加 -H tcp://0.0.0.0:2375
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
# 非root用户免sudo执行docker
usermod -aG docker $USER
# 配置镜像源(以阿里云为例)
echo '{"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]}' > /etc/docker/daemon.json
systemctl restart docker
SSH端口调整(可选)
如果计划使用Gitlab服务,建议修改默认SSH端口:
vim /etc/ssh/sshd_config
# 将Port改为2222
Port 2222
systemctl restart sshd.service
Gitlab服务部署
Gitlab容器化部署
docker run -d --hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab --restart always --volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
初始密码获取:
docker exec gitlab cat /etc/gitlab/initial_root_password
Gitlab Runner安装与配置
# 安装
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
yum install gitlab-runner
# 注册Runner
gitlab-runner register \
--non-interactive \
--url "http://gitlab.example.com/" \
--registration-token "YOUR_TOKEN" \
--executor "shell" \
--description "builder-runner" \
--tag-list "builder" \
--run-untagged="true" \
--locked="false"
Docker Swarm集群搭建
初始化Swarm集群
在管理节点执行:
docker swarm init
创建Overlay网络
docker network create \
--driver overlay \
--subnet 10.0.0.1/8 \
--opt encrypted \
--attachable \
default-network
节点加入集群
# 管理节点加入
docker swarm join --token <manager-token> <ip>:2377
# 工作节点加入
docker swarm join --token <worker-token> <ip>:2377
Hyperf项目部署实践
项目配置示例
.gitlab-ci.yml
关键配置:
variables:
PROJECT_NAME: demo
REGISTRY_URL: registry.cn-shanghai.aliyuncs.com/test_namespace
deploy.test.yml
服务定义:
version: '3.7'
services:
demo:
image: $REGISTRY_URL/$PROJECT_NAME:test
environment:
- "APP_PROJECT=demo"
- "APP_ENV=test"
ports:
- 9501:9501
deploy:
replicas: 1
restart_policy:
condition: on-failure
update_config:
parallelism: 2
networks:
- default-network
configs:
- source: demo_v1.0
target: /opt/www/.env
环境变量配置
在Portainer中创建Config demo_v1.0
,内容示例:
APP_NAME=demo
DB_DRIVER=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=hyperf
DB_USERNAME=root
DB_PASSWORD=your_password
服务部署与更新
# 首次部署
docker stack deploy -c deploy.yml --with-registry-auth hyperf_demo
# 更新服务
docker service update --with-registry-auth hyperf_demo_demo
集群增强组件
Portainer管理界面
docker service create \
--name portainer \
--publish 9000:9000 \
--constraint 'node.role == manager' \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
portainer/portainer
Kong API网关
# 数据库
docker run -d --name kong-database \
--network=default-network \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
postgres:9.6
# 网关服务
docker run -d --name kong \
--network=default-network \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-p 8000:8000 \
-p 8443:8443 \
kong:latest
性能优化建议
内核参数调优
# 网络连接复用优化
sysctls:
- net.ipv4.vs.conn_reuse_mode=0
- net.ipv4.vs.expire_nodest_conn=1
容器调度策略
deploy:
placement:
constraints:
- node.role == worker
- engine.labels.arch == x86_64
resources:
limits:
cpus: '0.50'
memory: 512M
常见问题解决
-
IP不足导致服务异常:
- 解决方案:扩展网络IP范围或创建新的Overlay网络
-
Git版本兼容性问题:
curl https://setup.ius.io | sh yum -y install git2u
-
服务更新失败:
docker service update --with-registry-auth service_name
结语
通过本文的实践指南,您已经掌握了基于Hyperf框架和Docker Swarm构建生产级微服务集群的核心技术。在实际应用中,建议根据业务需求调整副本数量、资源限制等参数,并建立完善的监控告警系统,确保服务稳定运行。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考