修改部署脚本
This commit is contained in:
parent
807bf0b0d0
commit
e7b8895a60
@ -56,7 +56,7 @@ cd CollisionAvoidance
|
||||
|
||||
脚本会自动完成:
|
||||
|
||||
- 下载所需的系统依赖包
|
||||
- 下载所需的系统依赖
|
||||
- 下载 Python 依赖包
|
||||
- 创建完整的项目归档文件
|
||||
|
||||
@ -76,7 +76,18 @@ tar xzf CollisionAvoidance.tar.gz
|
||||
cd CollisionAvoidance
|
||||
```
|
||||
|
||||
3. 执行部署脚本
|
||||
3. 删除 32 位依赖包
|
||||
|
||||
> 注意:由于系统是 64 位架构,我们需要删除所有 32 位(i686)的依赖包,以避免安装冲突。这些包是在准备离线包时自动下载的,但在 64 位系统上不需要。
|
||||
|
||||
```bash
|
||||
# 删除所有 i686 架构的包
|
||||
cd packages
|
||||
rm -f *i686.rpm
|
||||
cd ..
|
||||
```
|
||||
|
||||
4. 执行部署脚本
|
||||
|
||||
```bash
|
||||
sudo ./scripts/deploy.sh
|
||||
@ -127,7 +138,7 @@ firewall-cmd --reload
|
||||
### 3. 防火墙配置
|
||||
|
||||
- 如果使用其他防火墙,需要手动开放 8010 和 8081 端口
|
||||
- 确认防火墙规则是否生效:`firewall-cmd --list-all`
|
||||
- 确认防火墙规<EFBFBD><EFBFBD><EFBFBD>是否生效:`firewall-cmd --list-all`
|
||||
|
||||
## 卸载
|
||||
|
||||
|
||||
172
docs/deployment_guide_new.md
Normal file
172
docs/deployment_guide_new.md
Normal file
@ -0,0 +1,172 @@
|
||||
# 部署指南
|
||||
|
||||
本文档详细说明了如何在 CentOS 系统上部署碰撞避免系统。支持在线和离线两种部署方式。
|
||||
|
||||
## 目录
|
||||
|
||||
- [系统要求](#系统要求)
|
||||
- [在线部署](#在线部署)
|
||||
- [离线部署](#离线部署)
|
||||
- [部署后配置](#部署后配置)
|
||||
- [常见问题](#常见问题)
|
||||
|
||||
## 系统要求
|
||||
|
||||
- CentOS 7 或更高版本
|
||||
- 至少 2GB 可用内存
|
||||
- 至少 10GB 可用磁盘空间
|
||||
- root 权限
|
||||
- Python 3.6 或更高版本
|
||||
|
||||
## 在线部署
|
||||
|
||||
如果服务器可以访问互联网,可以直接使用在线部署方式。
|
||||
|
||||
1. 获取项目代码
|
||||
|
||||
```bash
|
||||
git clone [项目仓库地址]
|
||||
cd CollisionAvoidance
|
||||
```
|
||||
|
||||
2. 执行部署脚本
|
||||
|
||||
```bash
|
||||
sudo ./scripts/deploy.sh
|
||||
```
|
||||
|
||||
## 离线部署
|
||||
|
||||
如果服务器无法访问互联网,需要使用离线部署方式。
|
||||
|
||||
### 准备阶段(在有网络的环境中进行)
|
||||
|
||||
1. 在有网络的 CentOS 环境中,获取项目代码
|
||||
|
||||
```bash
|
||||
git clone [项目仓库地址]
|
||||
cd CollisionAvoidance
|
||||
```
|
||||
|
||||
2. 执行离线包准备脚本
|
||||
|
||||
```bash
|
||||
./scripts/prepare_offline_packages.sh
|
||||
```
|
||||
|
||||
脚本会自动完成:
|
||||
|
||||
- 下载所需的系统依赖包
|
||||
- 下载 Python 依赖包
|
||||
- 创建完整的项目归档文件
|
||||
|
||||
### 部署步骤
|
||||
|
||||
1. 将生成的归档文件传输到目标服务器
|
||||
|
||||
```bash
|
||||
scp ../CollisionAvoidance.tar.gz root@target-server:/tmp/
|
||||
```
|
||||
|
||||
2. 在目标服务器上解压
|
||||
|
||||
```bash
|
||||
cd /tmp
|
||||
tar xzf CollisionAvoidance.tar.gz
|
||||
cd CollisionAvoidance
|
||||
```
|
||||
|
||||
3. 删除 32 位依赖包
|
||||
|
||||
> 注意:由于系统是 64 位架构,我们需要删除所有 32 位(i686)的依赖包,以避免安装冲突。这些包是在准备离线包时自动下载的,但在 64 位系统上不需要。
|
||||
|
||||
```bash
|
||||
# 删除所有 i686 架构的包
|
||||
cd packages
|
||||
rm -f *i686.rpm
|
||||
cd ..
|
||||
```
|
||||
|
||||
4. 执行部署脚本
|
||||
|
||||
```bash
|
||||
sudo ./scripts/deploy.sh
|
||||
```
|
||||
|
||||
## 部署后配置
|
||||
|
||||
### 服务管理
|
||||
|
||||
- 启动服务:`systemctl start collision-avoidance`
|
||||
- 停止服务:`systemctl stop collision-avoidance`
|
||||
- 重启服务:`systemctl restart collision-avoidance`
|
||||
- 查看状态:`systemctl status collision-avoidance`
|
||||
- 查看日志:`journalctl -u collision-avoidance -f`
|
||||
|
||||
### 配置文件
|
||||
|
||||
- 配置文件位置:`/etc/collision_avoidance/`
|
||||
- WebSocket 服务端口:8010
|
||||
- Mock Server 端口:8081
|
||||
|
||||
### 防火墙配置
|
||||
|
||||
如果使用 firewalld:
|
||||
|
||||
```bash
|
||||
# 开放 WebSocket 端口
|
||||
firewall-cmd --permanent --add-port=8010/tcp
|
||||
# 开放 Mock Server 端口
|
||||
firewall-cmd --permanent --add-port=8081/tcp
|
||||
firewall-cmd --reload
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
|
||||
### 1. 服务启动失败
|
||||
|
||||
- 检查服务日志:`journalctl -u collision-avoidance -n 50`
|
||||
- 确认配置文件权限正确
|
||||
- 验证端口 8010 和 8081 是否被占用
|
||||
|
||||
### 2. Mock Server 启动失<E58AA8><E5A4B1>
|
||||
|
||||
- 检查 Python 和依赖包是否正确安装
|
||||
- 确认端口 8081 未被占用
|
||||
- 检查 Mock Server 日志输出
|
||||
|
||||
### 3. 防火墙配置
|
||||
|
||||
- 如果使用其他防火墙,需要手动开放 8010 和 8081 端口
|
||||
- 确认防火墙规则是否生效:`firewall-cmd --list-all`
|
||||
|
||||
### 4. 依赖包安装问题
|
||||
|
||||
- 如果遇到依赖包冲突,检查是否有 i686 架构的包未被删除
|
||||
- 使用 `rpm -qa | grep i686` 命令检查系统中的 32 位包
|
||||
- 如果发现 i686 包,使用 `rpm -e` 命令删除它们
|
||||
|
||||
## 卸载
|
||||
|
||||
如需卸载系统:
|
||||
|
||||
```bash
|
||||
sudo ./scripts/uninstall.sh
|
||||
```
|
||||
|
||||
卸载脚本会:
|
||||
|
||||
- 停止并禁用服务
|
||||
- 删除系统服务配置
|
||||
- 删除程序文件
|
||||
- 删除配置文件
|
||||
- 关闭防火墙端口
|
||||
|
||||
## 技术支持
|
||||
|
||||
如遇到问题,请:
|
||||
|
||||
1. 查看服务日志
|
||||
2. 检查系统日志
|
||||
3. 检查 Mock Server 日志
|
||||
4. 联系技术支持团队
|
||||
@ -35,54 +35,48 @@ fi
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(dirname "${SCRIPT_DIR}")"
|
||||
|
||||
# Detect system architecture
|
||||
CURRENT_ARCH=$(uname -m)
|
||||
case ${CURRENT_ARCH} in
|
||||
x86_64|i686|i386)
|
||||
log_info "System architecture: ${CURRENT_ARCH}"
|
||||
;;
|
||||
*)
|
||||
log_error "Unsupported architecture: ${CURRENT_ARCH}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Find the correct packages directory
|
||||
PACKAGES_DIR="${PROJECT_ROOT}/packages_${CURRENT_ARCH}"
|
||||
if [ ! -d "${PACKAGES_DIR}" ]; then
|
||||
log_error "Packages directory not found for architecture ${CURRENT_ARCH}: ${PACKAGES_DIR}"
|
||||
log_error "Please run prepare_offline_packages.sh with the correct architecture first"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if offline packages exist
|
||||
if [ -d "${PACKAGES_DIR}" ]; then
|
||||
if [ -d "${PROJECT_ROOT}/packages" ]; then
|
||||
log_info "检测到离线安装包目录,使用离线安装模式..."
|
||||
|
||||
# Install offline packages
|
||||
log_info "安装离线依赖包..."
|
||||
if [ -f "${PACKAGES_DIR}/offline-deps.txt" ]; then
|
||||
while IFS= read -r pkg; do
|
||||
if [ -f "${PACKAGES_DIR}/$pkg" ]; then
|
||||
log_info "正在安装: $pkg"
|
||||
rpm -ivh "${PACKAGES_DIR}/$pkg" || {
|
||||
log_error "安装包失败: $pkg"
|
||||
exit 1
|
||||
}
|
||||
else
|
||||
log_error "找不到安装包: $pkg"
|
||||
exit 1
|
||||
fi
|
||||
done < "${PACKAGES_DIR}/offline-deps.txt"
|
||||
# Configure local repository
|
||||
log_info "配置本地仓库..."
|
||||
if [ -f "${PROJECT_ROOT}/packages/local.repo" ]; then
|
||||
cp "${PROJECT_ROOT}/packages/local.repo" /etc/yum.repos.d/
|
||||
yum clean all
|
||||
yum makecache
|
||||
else
|
||||
log_error "找不到离线依赖包列表文件: offline-deps.txt"
|
||||
log_error "找不到本地仓库配置文件: local.repo"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Install packages from local repository
|
||||
log_info "从本地仓库安装依赖包..."
|
||||
yum install -y --disablerepo=* --enablerepo=local \
|
||||
cmake3 \
|
||||
json-devel \
|
||||
boost-devel \
|
||||
openssl-devel \
|
||||
python3 \
|
||||
python3-pip \
|
||||
python3-devel \
|
||||
python3-libs \
|
||||
python3-setuptools \
|
||||
gcc \
|
||||
gcc-c++ \
|
||||
make \
|
||||
autoconf \
|
||||
automake \
|
||||
libtool || {
|
||||
log_error "安装依赖包失败"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Install Python packages
|
||||
if [ -f "${PACKAGES_DIR}/requirements.txt" ]; then
|
||||
if [ -f "${PROJECT_ROOT}/packages/requirements.txt" ]; then
|
||||
log_info "安装 Python 依赖包..."
|
||||
pip3 install --no-index --find-links="${PACKAGES_DIR}/python_packages" -r "${PACKAGES_DIR}/requirements.txt" || {
|
||||
pip3 install --no-index --find-links="${PROJECT_ROOT}/packages/python_packages" \
|
||||
-r "${PROJECT_ROOT}/packages/requirements.txt" || {
|
||||
log_error "安装 Python 包失败"
|
||||
exit 1
|
||||
}
|
||||
@ -92,7 +86,7 @@ else
|
||||
log_info "使用在线安装模式..."
|
||||
log_info "正在安装依赖包..."
|
||||
yum groupinstall -y "Development Tools"
|
||||
yum install -y cmake3 nlohmann-json-devel boost-devel openssl-devel python3 python3-pip
|
||||
yum install -y cmake3 json-devel boost-devel openssl-devel python3 python3-pip
|
||||
|
||||
# Install Python packages
|
||||
log_info "安装 Python 依赖..."
|
||||
|
||||
@ -58,24 +58,13 @@ PACKAGES_DIR="${PROJECT_ROOT}/packages"
|
||||
log_info "Creating packages directory: ${PACKAGES_DIR}"
|
||||
mkdir -p "${PACKAGES_DIR}"
|
||||
|
||||
# Install yum-plugin-downloadonly if not already installed
|
||||
if ! rpm -q yum-plugin-downloadonly &>/dev/null; then
|
||||
log_info "Installing yum-plugin-downloadonly..."
|
||||
yum install -y yum-plugin-downloadonly || {
|
||||
log_error "Failed to install yum-plugin-downloadonly"
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
|
||||
# Function to get package dependencies
|
||||
get_dependencies() {
|
||||
local pkg=$1
|
||||
yum deplist "$pkg" | grep provider: | awk '{print $2}' | sort -u
|
||||
# Install necessary tools
|
||||
log_info "Installing required tools..."
|
||||
yum install -y yum-utils createrepo || {
|
||||
log_error "Failed to install required tools"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Download system dependencies
|
||||
log_info "Downloading system packages and their dependencies..."
|
||||
|
||||
# Define base packages
|
||||
PACKAGES=(
|
||||
"cmake3"
|
||||
@ -84,6 +73,9 @@ PACKAGES=(
|
||||
"openssl-devel"
|
||||
"python3"
|
||||
"python3-pip"
|
||||
"python3-devel"
|
||||
"python3-libs"
|
||||
"python3-setuptools"
|
||||
"gcc"
|
||||
"gcc-c++"
|
||||
"make"
|
||||
@ -92,46 +84,36 @@ PACKAGES=(
|
||||
"libtool"
|
||||
)
|
||||
|
||||
# Create a temporary file for all packages including dependencies
|
||||
TEMP_PKGS=$(mktemp)
|
||||
|
||||
# Get all dependencies
|
||||
for pkg in "${PACKAGES[@]}"; do
|
||||
log_info "Checking dependencies for $pkg..."
|
||||
echo "$pkg" >> "$TEMP_PKGS"
|
||||
get_dependencies "$pkg" >> "$TEMP_PKGS"
|
||||
done
|
||||
|
||||
# Remove duplicates and sort
|
||||
sort -u "$TEMP_PKGS" -o "$TEMP_PKGS"
|
||||
|
||||
# Download all packages
|
||||
log_info "Downloading packages..."
|
||||
DOWNLOAD_FAILED=0
|
||||
while read -r pkg; do
|
||||
log_info "Downloading $pkg..."
|
||||
if ! yum install --downloadonly --downloaddir="${PACKAGES_DIR}" "$pkg"; then
|
||||
log_error "Failed to download $pkg"
|
||||
DOWNLOAD_FAILED=1
|
||||
fi
|
||||
done < "$TEMP_PKGS"
|
||||
|
||||
rm "$TEMP_PKGS"
|
||||
|
||||
# Check if any RPM files were downloaded
|
||||
# Download packages
|
||||
log_info "Downloading packages and their dependencies..."
|
||||
cd "${PACKAGES_DIR}" || {
|
||||
log_error "Failed to enter packages directory"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ ! "$(ls -A *.rpm 2>/dev/null)" ]; then
|
||||
if [ $DOWNLOAD_FAILED -eq 1 ]; then
|
||||
log_error "Failed to download some packages. Please check your network connection and yum repository configuration."
|
||||
else
|
||||
log_error "No RPM packages were downloaded. Please check your yum configuration."
|
||||
fi
|
||||
for pkg in "${PACKAGES[@]}"; do
|
||||
log_info "Downloading $pkg and its dependencies..."
|
||||
yumdownloader --resolve --destdir="${PACKAGES_DIR}" --arch=x86_64 "$pkg" || {
|
||||
log_error "Failed to download $pkg"
|
||||
exit 1
|
||||
}
|
||||
done
|
||||
|
||||
# Create local repository
|
||||
log_info "Creating local repository..."
|
||||
createrepo "${PACKAGES_DIR}" || {
|
||||
log_error "Failed to create local repository"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Create repository configuration file
|
||||
cat > "${PACKAGES_DIR}/local.repo" << EOL
|
||||
[local]
|
||||
name=Local Repository
|
||||
baseurl=file://${PACKAGES_DIR}
|
||||
enabled=1
|
||||
gpgcheck=0
|
||||
EOL
|
||||
|
||||
# Create Python requirements file
|
||||
log_info "Creating Python requirements file..."
|
||||
@ -200,10 +182,13 @@ echo -e "\n${GREEN}Offline package preparation completed!${NC}"
|
||||
echo "Created files:"
|
||||
echo " - ${PACKAGES_DIR}/offline-deps.txt (System package list)"
|
||||
echo " - ${PACKAGES_DIR}/requirements.txt (Python package list)"
|
||||
echo " - ${PACKAGES_DIR}/local.repo (Local repository configuration)"
|
||||
echo " - ${PACKAGES_DIR}/*.rpm (System packages)"
|
||||
echo " - ${PACKAGES_DIR}/repodata/* (Repository metadata)"
|
||||
echo " - ${PACKAGES_DIR}/${PYTHON_PACKAGES_DIR}/* (Python packages)"
|
||||
echo " - ${ARCHIVE_PATH} (Complete project archive)"
|
||||
echo -e "\nNext steps:"
|
||||
echo "1. Transfer ${ARCHIVE_NAME} to the target server"
|
||||
echo "2. Extract the archive on the target server"
|
||||
echo "3. Run the deployment script"
|
||||
echo "3. Copy local.repo to /etc/yum.repos.d/ on the target server"
|
||||
echo "4. Run the deployment script"
|
||||
Loading…
Reference in New Issue
Block a user