Red Hat Enterprise Linux (RHEL)系统部署

Red Hat Enterprise Linux (RHEL)系统部署

一、准备工作

首先来详细说明一下在RHEL 9上部署系统的准备工作:

(一)、环境准备

1. 检查系统版本和内核信息
  • 确保服务器的操作系统和内核版本满足应用需求:

    bash 复制代码
    cat /etc/redhat-release
    uname -r
2. 更新系统软件包
  • 定期更新系统以修复安全漏洞并安装最新的补丁:

    bash 复制代码
    sudo subscription-manager register --username <RHN用户> --password <密码>
    sudo subscription-manager attach --auto
    sudo yum update -y
    sudo reboot  # 如需内核更新
3. 安装必要的工具
  • 根据应用需求安装开发工具、编译器或其他依赖项:

    bash 复制代码
    sudo yum groupinstall "Development Tools" -y
    sudo yum install -y epel-release  # EPEL仓库
    
    #确保服务器上已安装 .NET 运行时或 SDK。可以通过以下步骤安装:
    sudo rpm -Uvh https://packages.microsoft.com/config/rhel/8/packages-microsoft-prod.rpm
    sudo yum install -y dotnet-sdk-6.0  # 如果需要开发环境
    sudo yum install -y aspnetcore-runtime-6.0  # 如果只需要运行时
    
    验证安装:
    dotnet --version
4. 配置时间同步
  • 确保服务器时间与实际时间一致,避免因时间不同步导致的问题:

    bash 复制代码
    sudo yum install chrony -y
    sudo systemctl start chronyd
    sudo systemctl enable chronyd

(二)、应用依赖安装

1. 安装运行时环境
  • 根据应用类型安装所需的运行时环境(如 Java、Python、Node.js 等)。

  • 示例:安装 OpenJDK 11:

    bash 复制代码
    sudo yum install java-11-openjdk-devel -y
  • 示例:安装 Node.js:

    bash 复制代码
    curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash -
    sudo yum install nodejs -y
2. 安装数据库(如果需要)
  • 如果应用依赖数据库(如 MySQL、PostgreSQL),需要安装并配置数据库服务。

    示例:安装 MariaDB:

    bash 复制代码
    sudo yum install mariadb-server -y
    sudo systemctl start mariadb
    sudo systemctl enable mariadb

    初始化数据库并设置密码:

    bash 复制代码
    sudo mysql_secure_installation
3. 安装 Web 服务器(如果需要)
  • 如果应用需要通过 Web 服务器(如 Nginx 或 Apache)提供服务,则需安装和配置。

  • 示例:安装 Nginx:

    bash 复制代码
    sudo yum install nginx -y
    sudo systemctl start nginx
    sudo systemctl enable nginx
4. 安装 Podman
  • 在 Red Hat 系统上安装 Podman 非常简单,因为它是 RHEL 8 及以上版本的默认容器工具。

  • 步骤:

    bash 复制代码
    sudo yum install -y podman
  • 验证安装:

    bash 复制代码
    podman --version
  • 输出示例:

    bash 复制代码
    podman version 3.4.2

(三)、配置防火墙和 SELinux

1. 开放防火墙端口
  • 允许应用使用的端口通过防火墙:

    bash 复制代码
    sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
    sudo firewall-cmd --reload
2. 调整 SELinux 配置
  • 如果 SELinux 导致权限问题,可以临时将其设置为宽容模式(permissive):

    bash 复制代码
    sudo setenforce 0
  • 永久修改 SELinux 配置:

    bash 复制代码
    sudo vi /etc/selinux/config

    将SELINUX=enforcing修改为SELINUX=permissive。

3. 配置 SELinux 规则(推荐)
  • 如果需要更精细的控制,可以使用semanage和audit2allow工具生成规则:

    bash 复制代码
    sudo yum install policycoreutils-python-utils -y
    sudo semanage port -a -t http_port_t -p tcp 8080
4. 用户权限(如果需要)
  • 创建专用用户:

    bash 复制代码
    sudo adduser deployuser
    sudo passwd deployuser
    sudo usermod -aG wheel deployuser  # 允许sudo
  • 检查目录权限

    bash 复制代码
    ls -ld /app/wwwroot/Temp
  • 查看当前用户

    bash 复制代码
    whoami
  • 查看该用户的 UID 和 GID

    bash 复制代码
    id
    uid=0(root) gid=0(root) groups=0(root)
  • 为所有用户赋予完全的读/写/执行权限

    bash 复制代码
    sudo chmod -R 777 /opt/myapp/
  • 更改目录的所有权:

    bash 复制代码
    sudo chown -R root:root /opt/myapp/
  • 清理残留锁文件:

    bash 复制代码
    rm -f /run/user/$(id -u)/containers/lock

二、项目部署步骤

(一)、代码获取

1. Git克隆或上传代码
bash 复制代码
sudo yum install -y git
git clone https://github.com/your/project.git /opt/project
chown -R deployuser:deployuser /opt/project
2. 使用scp命令上传文件:
bash 复制代码
scp /path/to/your/file user@server_ip:/remote/path/

​ 示例:

bash 复制代码
scp myapp.jar root@192.168.1.10:/opt/myapp/
3. 使用rsync(支持增量同步):
bash 复制代码
rsync -avz /path/to/your/file user@server_ip:/remote/path/
4. 通过 FTP/SFTP 工具上传
  • 使用工具如 FileZilla 或 WinSCP 连接到服务器并上传文件。

  • 以 FileZilla 为例:

    • 打开 FileZilla 客户端

    • 配置连接信息:

      • 在顶部栏输入以下信息:
        • 主机:sftp://161.189.123.121(注意添加 sftp:// 前缀)
        • 用户名:user01
        • 密码:如果使用密码认证,则输入密码;如果使用密钥认证,则留空。
        • 端口:默认为 22(SFTP 使用 SSH 协议)。
    • 加载私钥文件

      (如果使用密钥认证):

      • 打开 FileZilla 的设置(Edit > Settings > Connection > SFTP)。
      • 添加你的 .ppk 文件路径。
    • 连接到服务器:

      • 点击"快速连接"按钮,等待连接成功。
    • 上传文件:

      • 在左侧窗口选择本地文件夹,在右侧窗口选择远程文件夹。
      • 拖拽文件或右键选择"上传"。
5. 使用 pscp 上传文件
bash 复制代码
pscp -i D:\path\to\private_key.ppk -r D:\local\path user01@161.189.123.121:/remote/path
  • 参数说明:
    • -i:指定私钥文件(如 .ppk 文件)。
    • -r:递归上传整个目录。
    • D:\local\path:本地文件或目录路径。
    • xjx_yitian01@161.189.123.121:/remote/path:目标服务器的用户名、IP 地址和远程路径。

(二)、服务器远程连接方式

  • Linux/Mac 用户可以直接使用终端:

    bash 复制代码
    ssh user@server_ip
  • Windows 用户可以使用 PuTTY 或 Windows 自带的 SSH 客户端(Windows 10 及以上版本支持)。

1. 使用 SSH 连接
  • 验证连接

    • 成功连接后,会进入服务器的命令行界面。

    • 检查服务器的基本信息:

      bash 复制代码
      uname -a
      cat /etc/redhat-release
  • 配置 SSH 密钥登录(推荐)

    • 在本地生成密钥对:

      bash 复制代码
      ssh-keygen -t rsa -b 4096
    • 将公钥上传到服务器:

      bash 复制代码
      ssh-copy-id user@server_ip
    • 测试免密登录:

      bash 复制代码
      ssh user@server_ip
2. 使用 PuTTY 连接

(1) 下载和安装 PuTTY

  • 下载 PuTTY

  • 安装 PuTTY

    • 下载完成后,双击安装文件并按照提示完成安装。

    • 安装过程中可以选择额外的组件(如 pscpplink 等工具),根据需要勾选即可。

(2) 配置 PuTTY 并连接服务器

  • 打开 PuTTY

  • 安装完成后,启动 PuTTY 应用程序。

  • 配置会话

    在 PuTTY 主界面中,按照以下步骤配置连接参数:

    • 输入服务器地址
      • 在 "Host Name (or IP address)" 字段中输入服务器的 IP 地址或域名。 示例:192.168.1.100example.com
      • 在 "Port" 字段中输入 SSH 默认端口号(通常是 22)。
      • 确保 "Connection type" 设置为 SSH
      • 在左侧"Data"栏目中配置"username"为当前用户名,默认选择"prompt"(如果需要)。
    • 保存会话(可选)
      • 在 "Saved Sessions" 输入框中为当前配置命名(例如 MyServer)。
      • 点击右侧的 "Save" 按钮保存会话配置。

(3) 配置身份验证(如果使用密钥认证)

​ 如果服务器要求使用 SSH 密钥认证,请按照以下步骤操作:

  • 生成密钥对(如果尚未生成)
    • 使用 PuTTYgen 工具生成密钥对:
      • 打开 PuTTYgen(通常随 PuTTY 安装包一起提供)。
      • 点击 "Generate" 按钮生成公钥和私钥。
      • 将公钥上传到服务器的 ~/.ssh/authorized_keys 文件中。
      • 保存私钥(.ppk 文件)到本地计算机。
  • 加载私钥
    • 在 PuTTY 中,导航到左侧菜单栏中的 Connection > SSH > Auth
    • 点击 "Browse" 按钮,选择之前保存的私钥文件(.ppk)。

(4) 启动连接

  • 点击主界面底部的 "Open" 按钮,启动连接。
  • 如果是第一次连接到该服务器,可能会弹出安全警告,提示主机密钥未被识别。点击 "Yes" 继续。

(5) 登录到服务器

  • 输入用户名和密码

    • 连接成功后,PuTTY 会显示一个终端窗口,提示你输入用户名:

      bash 复制代码
      login as:

      输入服务器的用户名(例如root或普通用户)。

    • 接着输入密码(密码输入时不会显示字符,这是正常现象)。

  • 成功登录

    • 登录成功后,你会看到服务器的命令行界面,可以开始执行命令。

(三)、 基础的服务启动方式

1. 手动启动

直接运行应用程序:

bash 复制代码
cd /opt/myapp/
dotnet MyAspNetCoreApp.dll

此时,应用程序会以默认端口(通常是 5000)运行,并且可以在前台查看日志输出。

注意事项
  • 手动启动的方式适用于调试或临时运行。
  • 如果关闭终端,应用程序会随之停止。
2. 使用 nohup 后台运行

如果希望将应用程序作为后台任务运行,可以使用 nohup 命令:

bash 复制代码
nohup dotnet MyAspNetCoreApp.dll > app.log 2>&1 &

解释

  • nohup:即使关闭终端,进程仍然继续运行。
  • > app.log:将标准输出写入 app.log 文件。
  • 2>&1:将错误输出重定向到标准输出。
  • &:将命令放入后台运行。

检查后台进程:

bash 复制代码
ps aux | grep MyAspNetCoreApp
3. 使用 screentmux

如果你希望在一个会话中管理多个任务,可以使用 screentmux 工具。

示例:使用 screen

  • 启动一个新的screen会话:

    bash 复制代码
    screen -S myapp
  • 在会话中运行应用程序:

    bash 复制代码
    dotnet MyAspNetCoreApp.dll
  • 分离会话(按 Ctrl+A,然后按 D)。

  • 重新连接会话:

    bash 复制代码
    screen -r myapp
4. 使用 Systemd 配置后台服务

为了实现更可靠的后台运行和服务管理,推荐使用 Systemd 配置服务。

步骤:
  • 创建服务文件 创建一个新的服务文件,例如 /etc/systemd/system/myapp.service

    bash 复制代码
    sudo vi /etc/systemd/system/myapp.service
    #按 i 键进入"插入模式"。然后开始编辑文件。
    #添加或修改内容: 编辑完你需要的内容(例如添加环境变量)之后,按 Esc 键退出插入模式,返回命令模式。
    # 保存并退出: 在命令模式下,输入以下命令保存并退出文件:
    :wq
    # 重新加载配置文件: 修改完 /etc/profile 后,你可以使用以下命令让改动生效:
    source /etc/profile
    # 仅保存不退出
    :w
    #仅退出不保存
    :q!
    #然后按 Enter。
    #检查环境变量是否设置
  • 编辑服务文件内容 添加以下内容:

    ini 复制代码
    [Unit]
    Description=My ASP.NET Core Application
    After=network.target
    
    [Service]
    WorkingDirectory=/opt/myapp
    ExecStart=/usr/bin/dotnet /opt/myapp/MyAspNetCoreApp.dll
    Restart=always
    RestartSec=10
    SyslogIdentifier=myapp
    User=root
    Environment=ASPNETCORE_ENVIRONMENT=Production
    Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
    
    [Install]
    WantedBy=multi-user.target
  • 重新加载 Systemd 配置

    bash 复制代码
    sudo systemctl daemon-reload
  • 启动服务

    bash 复制代码
    sudo systemctl start myapp
  • 设置开机自启

    bash 复制代码
    sudo systemctl enable myapp
  • 查看服务状态

    bash 复制代码
    sudo systemctl status myapp
  • 查看日志 使用 journalctl 查看服务日志:

    bash 复制代码
    journalctl -u myapp -f
5. 使用反向代理(Nginx 或 Apache)

如果需要通过标准 HTTP 端口(如 80 或 443)访问 ASP.NET Core 应用程序,可以配置反向代理。

配置 Nginx 示例

  • 安装 Nginx:

    bash 复制代码
    sudo yum install nginx -y
    sudo systemctl start nginx
    sudo systemctl enable nginx
  • 配置 Nginx 反向代理: 编辑 Nginx 配置文件(例如 /etc/nginx/nginx.conf/etc/nginx/conf.d/myapp.conf):

    nginx 复制代码
    server {
        listen 80;
        server_name your-domain.com;
    
        location / {
            proxy_pass         http://localhost:5000;
            proxy_http_version 1.1;
            proxy_set_header   Upgrade $http_upgrade;
            proxy_set_header   Connection keep-alive;
            proxy_set_header   Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;
        }
    }
  • 测试并重启 Nginx:

    bash 复制代码
    sudo nginx -t
    sudo systemctl restart nginx
6. 使用容器化技术(Podman/Docker)

如果希望使用容器化技术,可以将 ASP.NET Core 应用程序打包为容器镜像。

步骤:

  • 创建 Dockerfile

    dockerfile 复制代码
    FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
    WORKDIR /app
    EXPOSE 80
    
    FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
    WORKDIR /src
    COPY ["MyAspNetCoreApp.csproj", "./"]
    RUN dotnet restore "./MyAspNetCoreApp.csproj"
    COPY . .
    WORKDIR "/src/."
    RUN dotnet build "MyAspNetCoreApp.csproj" -c Release -o /app/build
    
    FROM build AS publish
    RUN dotnet publish "MyAspNetCoreApp.csproj" -c Release -o /app/publish
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "MyAspNetCoreApp.dll"]
  • 构建镜像:

    bash 复制代码
    podman build -t myapp .
  • 运行容器:

    bash 复制代码
    podman run -d -p 8080:80 --name myapp-container myapp
    
    #复杂需求
    podman run -d --name myapp-container \
       --restart unless-stopped \ #后台运行
       -v /home/service/project:/root/.aspnet/DataProtection-Keys \ #增加挂载的主机目录(为了数据持久化、共享数据等需求)
       -v /home/service/project/wwwroot:/app/wwwroot \ #挂载文件夹
       -p 8080:80 \ #端口
       myapp 
       
    #其他后台运行配置方式
    --restart no(默认)	不自动重启	临时测试,手动控制
    --restart on-failure[:max-retries]	仅在失败时重启(可设置最大重试次数)	需要容错但避免无限重启
    --restart unless-stopped	总是重启,除非手动停止	生产环境长期运行的服务
    --restart always	无条件重启(即使手动停止)	需要强制保持运行的场景(少用)
  • 查看日志

    bash 复制代码
    podman logs myapp-container
  • 重启容器

    bash 复制代码
    podman restart myapp-container
  • 关闭容器

    bash 复制代码
    podman stop myapp-container
  • 删除容器

    bash 复制代码
    podman rm myapp-container
相关推荐
HLC++13 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室15 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
groundhappy17 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
通信小小昕18 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫19 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
栩栩云生19 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
imc.1121 小时前
linux基础IO
linux·运维·服务器
BelongPanda1 天前
Linux Nginx 纯手动 Let‘s Encrypt 泛域名证书配置教程
linux·nginx
酷可达拉斯1 天前
Linux操作系统-shell编程(0)
linux·运维·服务器·python·云计算
2301_777998341 天前
Linux中断机制:操作系统如何高效运行
linux·运维·服务器