基于 Hyperf 的微服务 demo
通过本 demo 可以学习以下内容:
- 如果基于 Hyperf 构建微服务
- 如何把 traefik 用于微服务网关
- 如何使用 docker swarm 部署微服务
PS: {project} 表示项目根目录
以 account 服务为例
FROM microservice-demo-base
LABEL maintainer="Wilson.Li <[email protected]>" version="1.0" license="MIT" app.name="Account"
WORKDIR /opt/www
# Composer Cache
# COPY ./composer.* /opt/www/
# RUN composer install --no-dev --no-scripts
# 注释这两行
# COPY . /opt/www
# RUN composer install --no-dev -o && php bin/hyperf.php
EXPOSE 9501
# 注释这行
# ENTRYPOINT ["php", "/opt/www/bin/hyperf.php", "start"]
构建基础 docker 镜像
cd {project}/others/base
./build-base.sh
构建项目镜像
cd {project}
docker-compose build
cd {project}
docker-compose up -d
之后进入容器可以执行以下命令,以进入 order 服务为例
docker-compose exec order sh
构建项目镜像
cd {project}
docker-compose build
docker network create -d=overlay gateway
cd {project}
docker stack deploy -c api-gateway/docker-stack.yml api-gateway
cd {project}
docker secret create account-env others/envs/account-env
docker secret create inventory-env others/envs/inventory-env
docker secret create order-env others/envs/order-env
cd {project}
docker stack deploy -c docker-stack.yml demo
PS: container id 可以通过 docker ps 命令查看
创建每个服务的数据库
# 连接 mysql
docker exec -it {mysql-container-id} mysql -uroot -proot
# 创建每个服务的数据库
CREATE DATABASE `inventory` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE `account` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE `order` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
创建数据库表、生成测试数据
# 进入 inventory 服务容器
docker exec -it {inventory-container-id} sh
# 容器内执行
php bin/hyperf.php migrate
php bin/hyperf.php db:seed
# 进入 account 服务容器
docker exec -it {account-container-id} sh
# 容器内执行
php bin/hyperf.php migrate
php bin/hyperf.php db:seed
# 进入 order 服务容器
docker exec -it {order-container-id} sh
# 容器内执行
php bin/hyperf.php migrate
查看 inventory 和 account 数据库的测试数据
用 postman 测试
- K8S
- 分布式事务