# cotrip-deployment **Repository Path**: leansd/cotrip-deployment ## Basic Information - **Project Name**: cotrip-deployment - **Description**: 精益软件设计/DDD演示项目:部署 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 3 - **Created**: 2023-09-09 - **Last Updated**: 2024-11-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 共享出行部署 ## 总体信息 本文介绍了如何启动服务器环境、微信小程序环境,预览效果。 关于项目的总体情况、许可证和贡献信息等,请参阅[Overall项目的Readme文件说明](https://gitee.com/leansd/overall/blob/main/README.md) ## 如何安装 你有3个选择: 选项1: 直接在本地运行环境运行,这意味着你需要在自己的服务器上安装Java SDK, Node.js, Keycloak等。 选项2: 使用Docker或PodMan作为运行环境。 你需要有Docker环境,总体来说要求不高 选项3: 使用Kubernetes作为运行环境。这个是默认的部署方法,不过依赖于你有可用的Kubernetes或自行搭建好的Kuberntes。 下面介绍选项2和选项3的部署方法 ### 选项2 需求: 1. 有docker环境,Docker Desktop或者PodMan 2. 有微信小程序开发工具 启动顺序: - keycloak - cotrip - auth - 微信小程序 #### 启动keycloak 在这个目录中执行。 ```bash docker run -d --name keycloak \ -e KC_STRICT_HOSTNAME=false \ -e KC_PROXY=edge \ -e KEYCLOAK_ADMIN=admin \ -e KEYCLOAK_ADMIN_PASSWORD=admin \ -e KEYCLOAK_NEW_USER_DEFAULT_PASSWORD=123456 \ -p 8089:8080 \ -v $PWD/base/config/leansd-realm.json:/opt/keycloak/data/import/keycloak-realm.json \ quay.io/keycloak/keycloak:22.0.1 start-dev --import-realm ``` 预期效果: 1. 你应该能在container log中看到:Realm 'leansd' imported 2. 浏览器打开 localhost:8089;点击"Administration Console ";能够使用admin/admin登录keycloak 3. 登录以后能够在左侧上方的下拉框中切换到leansd(默认选择的是admin) #### 启动cotrip 请先clone cotrip工程,进入到工程根目录执行 ```bash #先编译,如果你已经编译过了,可以跳过这一步 #请cd到ctrip工程中执行 docker run -it --rm --name cotrip-build \ --user $(id -u):$(id -g) \ -v ~/.m2:/var/maven/.m2:rw \ -v "$(pwd)":/usr/src/mymaven -w /usr/src/mymaven \ -e MAVEN_CONFIG=/var/maven/.m2 \ maven:3.8.6-eclipse-temurin-17-alpine \ mvn -Duser.home=/var/maven clean package -DskipTests ``` ```bash #启动 docker run -it -d --rm --name cotrip \ --user $(id -u):$(id -g) \ -v "$(pwd)/target":/var/run -w /var/run \ -p 8081:8080 \ maven:3.8.6-eclipse-temurin-17-alpine \ java -jar cotrip-0.0.1-SNAPSHOT.jar \ --spring.profiles.active=dev --server.port=8080 ``` 预期效果: 1. 能在log中看到:"Started CotripApplication in ***" 2. `curl localhost:8081/live-check` 能够看到json数组 #### 启动Auth 请先clone auth工程,进入到工程根目录执行 ```bash #先编译,如果你已经编译过了,可以跳过这一步 docker run -it --rm --name auth \ --user $(id -u):$(id -g) \ -v "$(pwd)":/var/run/ -w /var/run/ \ -v "$(pwd)/.npm/":/.npm/ \ -e HOME=$pwd \ node:18.17.1-bullseye \ npm install && npm start ``` ```bash #run docker run -it --rm --name auth \ --user $(id -u):$(id -g) \ -v "$(pwd)":/var/run/ -w /var/run/ \ -v "$(pwd)/.npm/":/.npm/ \ -p 8848:8848 \ -e KEYCLOAK_BASE_URL=http://host.docker.internal:8089 \ -e KEYCLOAK_REALM_NAME=leansd \ -e KEYCLOAK_ADMIN_CLIENT_ID=admin-cli \ -e KEYCLOAK_ADMIN_USERNAME=admin \ -e KEYCLOAK_ADMIN_PASSWORD=admin \ -e KEYCLOAK_NEW_USER_DEFAULT_PASSWORD=123456 \ -e KEYCLOAK_AUTH_CLIENT_ID=cotrip \ -e APP_ID=TODO \ -e APP_SECRET=TODO \ node:18.17.1-bullseye \ npm start ``` 预期效果: 1. 能在log中看到:"Server started on http://localhost:8848" 2. `curl -v localhost:8848/auth/v1/public-info` 能看到 {"status":"success"} #### 启动微信小程序 在启动微信小程序之前,需要先在微信开发者工具中导入项目。请参考微信小程序的文档。 1. 下载微信小程序开发工具(可能还需要一个开发者账号) 2. 打开小程序开发工具 3. 用导入模式导入项目,小程序id可以选择使用“测试号”,不用申请 4. 👉“信任开发者” 5. 自动编译后,能够看到首屏预览图 alt text 注意:在执行其他操作之前,要将auth中的环境变量APP_SECRET与APP_ID填成小程序提供的实际值。 预期效果: 1. 首页加载完毕,在小程序开发工具的网络监控面板中,login接口返回200 2. 点击"开始",能进入到等待其他拼友界面 alt text ### 在Kubernetes环境中安装(选项3) #### 前提条件 1. 有一个kubernetes 环境 (Docker Desktop、MiniKube、MicroK8s均能帮助搭建K8s学习环境) 2. 开启DNS(Docker Desktop里开启kubernetes后就有) 3. 有ingress-nginx (Docker Desktop不带,要装) 安装ingress:https://kubernetes.github.io/ingress-nginx/deploy/#docker-desktop #### 启动服务器端 提示1: 我们使用leansd做为kubernetes的namespace kubectl create ns leansd 提示2: yaml文件使用Kustomize做模板,节省重复的部分。[此为kubectl内置的能力,详情参网站手册](https://kustomize.io/) 提示3:再次强调,不能用于生产或公网访问环境(以防恶意攻击)。 将deplyemnet应用到leansd空间中 kubectl apply -k base 等待启动完全。 key #### 检查启动正常 ##### Keycloak能够登录,并看到leansd的realm 1. 将pod端口转出来 kubectl port-forward -n leansd services/keycloak 8089 2. 浏览器打开 localhost:8089. 能够使用admin/admin登录keycloak 3. 登录以后能够在左侧上方的下拉框中切换到leansd(默认选择的是admin) 4. 关闭窗口; ctrl-c 关闭端口转发 ##### Cotrip能curl到live-api接口 1. Pod端口转出来 kubectl port-forward -n leansd services/cotrip 8080 2. 有一个api可以get curl -v localhost:8080/live-check #[{"id":"Alice",...},{"id":"Bob",...}] ##### Auth能curl到public-info接口 1. Pod端口转出来 kubectl port-forward -n leansd services/auth 8848 2. curl api curl -v localhost:8848/auth/v1/public-info #{"status":"success"}% #### 启动用户界面 1. 下载微信小程序开发工具(可能还需要一个开发者账号) 2. 打开小程序开发工具 3. 用导入模式导入项目,小程序id可以选择使用“测试号”,不用申请 4. 👉“信任开发者” 5. 自动编译后,能够看到首屏预览图 alt text #### 启动后稍等一会儿 注意:后面的效果需要将小程序源代码中开发环境的地址改成api.leansd.cn - 安装ingress-controller - 创建IngressClass=nginx - apply ingress - js里面把 host改成 develop: "http://api.leansd.cn" - 在电脑host里面把这个地址解析到127.0.0.1 ``` 127.0.0.1 api.leansd.cn 127.0.0.1 kubernetes.docker.internal ``` - auth 依赖 keycloak,keycloak启动完auth才能正常工作。 - ingress配置妥当,可以使用curl看效果: ``` $ curl --resolve "api.leansd.cn:80:127.0.0.1" -i http://api.leansd.cn/live-check [{"id":"Alice","createdBy":null,"createdAt":0,"name":null},{"id":"Bob","createdBy":null,"createdAt":0,"name":null}] ``` #### 补充说明 Keycloak文档:https://www.keycloak.org/server/containers#_trying_keycloak_in_development_mode 给Docker Desktop安装ingress https://www.michaelrose.dev/posts/k8s-ingress-docker-desktop/ K8s建议的 参数表:https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/common-labels/