手动部署开发集群
本文介绍手工部署用于开发测试用途的服务集群的步骤。
适用人群
- 想要断点调试
- 虚拟机配置低
- 不想使用docker打包镜像
- 想要在macOS/Linux上直接开发
已知问题
- macOS上调试不了host服务
- 配置复杂
环境准备
这里以Debain 11环境为例,仅配置nginx, apigateway, keystone, region等服务组成的最小集群,其他服务可以根据需要自行添加。
- Linux 或 macOS
- 4核8G
基础软件安装
- nginx
- MariaDB 5.5 或 MySQL 5.7
- git, make, npm, yarn, curl
- go >=1.18
源码克隆
这里假设克隆源码的目录分别为 /root/cloudpods /root/dashboard
# 克隆后端源代码
$ git clone https://github.com/yunionio/cloudpods.git
# 这里需要将代码切到自己想要的分支,这里设为 release/3.9
$ cd cloudpods && git checkout release/3.10 && cd /root
# 克隆前端源代码
$ git clone https://github.com/yunionio/dashboard.git
# 前端代码分支需要和后端保持一致
$ cd dashboard && git checkout release/3.10 && cd /root
# 创建配置文件放置目录
$ mkdir -p /etc/yunion
启动nginx及数据库服务
$ systemctl enable --now nginx mariadb
认证服务(keystone)初始化
第 一个要起的服务是keystone,因为其他服务都依赖于认证服务
- 首先配置keystone的数据库
# 为keystone服务创建数据库及数据库账号
$ mysql -uroot -e 'create database keystone;'
# 这里设置一个密码为cloudpods-keystone的keystone用户,后面配置文件会用到
$ mysql -uroot -e 'grant all privileges on keystone.* to "keystone"@"%" identified by "cloudpods-keystone"; flush privileges;'
- 下面配置keystone服务
# 编译keysonte
$ cd /root/cloudpods && make cmd/keystone
# 编写keystone服务的配置文件
$ mkdir -p /etc/yunion/keystone
# 这里要注意使用刚创建的数据库及数据库账号密码
$ cat<<EOF >/etc/yunion/keystone/keystone.conf
address = '127.0.0.1'
port = 5000
admin_port = 35357
sql_connection = 'mysql+pymysql://keystone:cloudpods-keystone@localhost:3306/keystone?charset=utf8'
log_level = 'debug'
auto_sync_table = true
EOF
$ 初始化配置
# 这里会先根据配置初始化keystone的数据库表,并设置sysadmin用户密码,这里设置为123@admin 后面会用到
$ /root/cloudpods/_output/bin/keystone --conf /etc/yunion/keystone/keystone.conf --bootstrap-admin-user-password 123@admin --exit-after-db-init
# 启动keystone服务
$ /root/cloudpods/_output/bin/keystone --conf /etc/yunion/keystone/keystone.conf
- 配置keystone服务
climc 初始化
认证服务完成后,需要用climc进行部分操作
# 编译climc命令, 并放置到可执行环境目录里面
$ cd /root/cloudpods && make cmd/climc && cp /root/cloudpods/_output/bin/climc /usr/local/bin/
# 编写rc_admin文件
$ cat<<EOF >/etc/yunion/rc_admin
export OS_REGION_NAME=Yunion
export OS_PROJECT_NAME=system
export OS_PASSWORD=123@admin
export OS_AUTH_URL=http://127.0.0.1:35357/v3
export OS_USERNAME=sysadmin
export OS_ENDPOINT_TYPE=publicURL
EOF
# 设置环境变量
$ source /etc/yunion/rc_admin
# 保存sysadmin的policy
$ cat<<EOF >/root/sysadmin
policy:
'*':
'*':
'*': allow
EOF
# 创建sysadmin的权限
$ climc policy-create --enabled --scope system --is-system sysadmin /root/sysadmin
# 将sysadmin权限绑定到admin角色上
$ climc policy-bind-role --project-id system --role-id admin sysadmin
# 将sysadmin以admin的角色加入system项目, 此后sysadmin用户才拥有整个平台的操作权限, 若报ForbiddenError错误,可以重启keystone服务后,再次尝试此操作
$ climc user-join-project --role admin --project system sysadmin
# 创建 Yunion 区域
$ climc region-create Yunion
初始化服务及端点
# 创建 keystone 服务
$ climc service-create --enabled identity keystone
# 创建 keystone 端点
$ climc endpoint-create --enabled keystone Yunion public http://127.0.0.1:35357/v3
$ climc endpoint-create --enabled keystone Yunion admin http://127.0.0.1:35357/v3
$ climc endpoint-create --enabled keystone Yunion internal http://127.0.0.1:5000/v3
初始化离线套餐服务
套餐存储在阿里云对象存储,是由region服务查找对应的endpoint去拉取套餐
# 创建 offlinecloudmeta 服务
$ climc service-create --enabled offlinecloudmeta offlinecloudmeta
# 创建 offlinecloudmeta 端点
$ climc endpoint-create --enabled offlinecloudmeta Yunion public https://yunionmeta.oss-cn-beijing.aliyuncs.com
$ climc endpoint-create --enabled offlinecloudmeta Yunion admin https://yunionmeta.oss-cn-beijing.aliyuncs.com
$ climc endpoint-create --enabled offlinecloudmeta Yunion internal https://yunionmeta.oss-cn-beijing.aliyuncs.com
配置服务(yunionconf)初始化
yuninconf服务保存了前端页面的配置选项
- 首先在keystone配置yunionconf服务的服务账号,并且注册yunionconf服务的服务端点(service endpoint)。
# 创建 yunionconf 服务
$ climc service-create --enabled yunionconf yunionconf
# 确定 yunionconf 服务监听端口,这里假定是8010,后面yunionconf服务配置时指定端口得是8010
# 创建 yunionconf 端点
$ climc endpoint-create --enabled yunionconf Yunion internal http://127.0.0.1:8010
$ climc endpoint-create --enabled yunionconf Yunion public http://127.0.0.1:8010
# 创建 yunionconf 服务的服务账号
$ climc user-create --enabled --system-account --no-web-console --password yunionconf@admin yunionconfadmin
# 赋予 yunionconfadmin 用户 admin 角色
$ climc user-join-project --role admin --project system yunionconfadmin
- 其次配置yunionconf的数据库
# 为yunionconf服务创建数据库及数据库账号
$ mysql -uroot -e 'create database yunionconf;'
# 这里设置一个密码为cloudpods-yunionconf的yunionconf用户
$ mysql -uroot -e 'grant all privileges on yunionconf.* to "yunionconf"@"%" identified by "cloudpods-yunionconf"; flush privileges;'
- 下面配置并启动yunionconf服务
# 编译 yunionconf
$ cd /root/cloudpods/ && make cmd/yunionconf
# 编写yunionconf服务的配置文件
# 这里要注意使用刚创建的数据库及数据库账号密码, 及yunionconf服务认证的用户名密码
$ cat<<EOF >/etc/yunion/yunionconf.conf
region = 'Yunion'
address = '127.0.0.1'
port = 8010
auth_uri = 'http://127.0.0.1:35357/v3'
admin_user = 'yunionconfadmin'
admin_password = 'yunionconf@admin'
admin_tenant_name = 'system'
sql_connection = 'mysql+pymysql://yunionconf:cloudpods-yunionconf@localhost:3306/yunionconf?charset=utf8'
log_level = 'debug'
auto_sync_table = true
EOF
# 启动 yunionconf 服务
$ /root/cloudpods/_output/bin/yunionconf --conf /etc/yunion/yunionconf.conf
计算服务(region)初始化
region服务是基础服务,也是控制节点。
- 首先在keystone配置region服务的服务账号,并且注册region服务的服务端点(service endpoint)。
# 创建 region 服务
$ climc service-create --enabled compute_v2 region2
# 确定 region 服务监听端口,这里假定是8090,后面region服务配置时指定端口得是8090
# 创建 region 端点
$ climc endpoint-create --enabled region2 Yunion internal http://127.0.0.1:8090
$ climc endpoint-create --enabled region2 Yunion public http://127.0.0.1:8090
# 创建 region 服务的服务账号
$ climc user-create --enabled --system-account --no-web-console --password region@admin regionadmin
# 赋予 regionadmin 用户 admin 角色
$ climc user-join-project --role admin --project system regionadmin
- 其次配置region的数据库
# 为region服务创建数据库及数据库账号
$ mysql -uroot -e 'create database yunioncloud;'
# 这里设置一个密码为cloudpods-yunioncloud的yunioncloud用户
$ mysql -uroot -e 'grant all privileges on yunioncloud.* to "yunioncloud"@"%" identified by "cloudpods-yunioncloud"; flush privileges;'
- 下面配置并启动region服务
# 编译 region
$ cd /root/cloudpods/ && make cmd/region
# 编写region服务的配置文件
# 这里要注意使用刚创建的数据库及数据库账号密码, 及region服务认证的用户名密码
$ cat<<EOF >/etc/yunion/region.conf
region = 'Yunion'
address = '127.0.0.1'
port = 8090
auth_uri = 'http://127.0.0.1:35357/v3'
admin_user = 'regionadmin'
admin_password = 'region@admin'
admin_tenant_name = 'system'
sql_connection = 'mysql+pymysql://yunioncloud:cloudpods-yunioncloud@localhost:3306/yunioncloud?charset=utf8'
log_level = 'debug'
auto_sync_table = true
EOF
# 启动 region 服务
$ /root/cloudpods/_output/bin/region --conf /etc/yunion/region.conf
- 测试region服务是否正常
# 测试 region 服务接口
$ climc server-list
*** Total: 0 ***
其他使用数据库的服务的配置步骤和region类似, 这里注意调度器(scheduler)的配置文件同样是使用region服务的配置文件。