oracle实例维护手册

起因

  • oracle实例的应用突然无法访问,发现opc和ghost用户丢失,/www目录丢失,应该是被偷偷重置了,邮件没有任何信息
  • 一定要定期备份,trilium最好的是本机客户端还有一份数据!

重建VPS实例

  • 创建实例
    • 系统  Oracle-Linux-9.6-2025.11.20-0 很卡很卡,换Centos 7吧
    • 有初始化脚本 cloud-init 最小化
    • #cloud-config
      runcmd:
        - echo "opc:********" | chpasswd
        - sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
        - systemctl restart sshd
    • 按操作步骤,opc不加ssh密钥
    • 引导卷50G(实例终止后,引导卷会残留,需要终止掉)
    • 提交创建成功
  • 管理实例
    • 修改网络VNIC的IP管理为预留的公网IP
    • 开放ping:实例-网络-点开一个vcn-安全-Security List-安全规则列表-添加ICMP 8类型 0.0.0.0/0的规则即可
  • 从附加卷操作,创建块卷150G,附加到实例CID,单对单挂载即可

用cloud shell连接维护

  • 打开右上角的cloud shell
    • 这是一个独立的小型机终端,不是你的实例
    • 查看你的实例:oci compute instance list --compartment-id 你的租户OCID --query "data [*].{Name:\"display-name\", State:\"lifecycle-state\", IP:\"public-ip\"}" --output table
  • 实例详情页-操作系统管理-启动cloud shell连接
    • 这是直接连接你的实例终端
    • 默认到trilium-20251227 login: 提示符,输入用户名密码即可,密码输入时光标不动,实际有效
    • 进行用户一些管理操作

用本地ssh连接维护

  • 实例安装完成,第一次物理连接(cloud shell),完成ssh权限初始化

    # 使用实例详情页-操作系统管理-启动cloud shell连接登录opc
    trilium-20251227 login: opc
    Password: 
    
    
    
    # 查看之前init脚本的结果
    [opc@trilium-20251227 ~]$ tail -n 20 /var/log/cloud-init-output.log
    
    # 生成ssh证书(一路回车即可,不要输密码)
    ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
    
    # 授权:把刚生成的公钥加入允许列表
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    
    # 私钥保存到本地,复制内容: 选中屏幕上从 -----BEGIN RSA PRIVATE KEY----- 开始,到 -----END RSA PRIVATE KEY----- 结束的所有文字。保存本地文件名为 opc_rsa.key
    cat ~/.ssh/id_rsa
    
    # 重启ssh服务,生效
    sudo systemctl restart sshd
  • 用这个私钥在本地开ssh连接
    • xshell使用无密码的key,有时候反复提示输入密码
    • 用moba则很顺利登录

恢复docker应用

  • 系统初始化设置
    • centos7官方源已经停止支持了,换源

      # ============ 阿里云源 ================
      
      # 1. 备份现有的 repo 文件(防止操作失误)
      sudo mkdir -p /etc/yum.repos.d/bak
      sudo mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
      
      # 2. 下载阿里云的 CentOS 7 存档源(它是目前最稳定的)
      sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
      
      # 3. 关键修正:由于官方已停服,需要把 baseurl 指向 vault 存档
      # 这一步会将配置文件中失效的地址全部替换为可用的 vault 地址
      sudo sed -i -e 's/http:\/\/mirrors.cloud.aliyuncs.com/http:\/\/mirrors.aliyun.com/g' /etc/yum.repos.d/CentOS-Base.repo
      sudo sed -i -e 's/http:\/\/mirrors.aliyuncs.com/http:\/\/mirrors.aliyun.com/g' /etc/yum.repos.d/CentOS-Base.repo
      
      # ============ 全球通用源 ================
      # 1. 备份并清理旧源
      sudo mkdir -p /etc/yum.repos.d/bak
      sudo mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
      
      # 2. 创建新的官方 Vault 源配置文件
      sudo tee /etc/yum.repos.d/CentOS-Base.repo <<-'EOF'
      [base]
      name=CentOS-7 - Base
      baseurl=https://archive.kernel.org/centos-vault/7.9.2009/os/x86_64/
      gpgcheck=1
      gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
      
      [updates]
      name=CentOS-7 - Updates
      baseurl=https://archive.kernel.org/centos-vault/7.9.2009/updates/x86_64/
      gpgcheck=1
      gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
      
      [extras]
      name=CentOS-7 - Extras
      baseurl=https://archive.kernel.org/centos-vault/7.9.2009/extras/x86_64/
      gpgcheck=1
      gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
      EOF
      
      # 3. 刷新缓存
      sudo yum clean all
      # 强制删除所有缓存目录
      sudo rm -rf /var/cache/yum/*
      # 重新生成
      sudo yum makecache
      # 更新安装工具
      sudo yum update -y
    • 解除系统内部限制,打通网络

      # 1. 彻底关闭并禁用内部防火墙,既然云端已经有了更强大的外层防护,关闭内层可以极大简化运维逻辑。另外在 Docker 社区中,许多资深运维倾向于关闭 firewalld,让 Docker 直接掌管它需要的 iptables 链。
      sudo systemctl stop firewalld
      sudo systemctl disable firewalld
      
      # 2. 临时并永久关闭 SELinux,SELinux 会严格限制 Docker 容器对宿主机目录(如你的 /www)的挂载权限。如果不关闭或不配置极其复杂的 Label,你会频繁遇到 Permission Denied 错误
      sudo setenforce 0
      sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
      
      # 3. 安装基础工具
      sudo yum install -y curl wget vim git htop epel-release
      
      # 4. 修改时区
      sudo timedatectl set-timezone Asia/Shanghai
    • 创建生产环境用户并配置权限

      # 创建 ghost 用户
      sudo useradd -m -s /bin/bash ghost
      echo "ghost:xxxxxxxxx1111" | sudo chpasswd
      
      # 加入 sudo 组 (CentOS 7 默认为 wheel)
      sudo usermod -aG wheel ghost
      
      # 创建目录并赋权
      sudo mkdir -p /www
      sudo chown -R ghost:ghost /www
      sudo chmod 755 /www
      
      # iSCSI - 注册
      sudo iscsiadm -m node -o new -T iqn.2015-12.com.oracleiaas:06448145-768e-4b6e-86fc-959b5d566b55 -p 169.254.2.2:3260、
      # iSCSI - 自启动
      sudo iscsiadm -m node -o update -T iqn.2015-12.com.oracleiaas:06448145-768e-4b6e-86fc-959b5d566b55 -n node.startup -v automatic
      # iSCSI - 登录拉取
      sudo iscsiadm -m node -T iqn.2015-12.com.oracleiaas:06448145-768e-4b6e-86fc-959b5d566b55 -p 169.254.2.2:3260 -l
      # iSCSI - 断开
      # sudo iscsiadm -m node -T iqn.2015-12.com.oracleiaas:06448145-768e-4b6e-86fc-959b5d566b55 -p 169.254.2.2:3260 -u
      # iSCSI - 删除
      # sudo iscsiadm -m node -o delete -T iqn.2015-12.com.oracleiaas:06448145-768e-4b6e-86fc-959b5d566b55 -p 169.254.2.2:3260
      
      # 挂载附加卷 - 查看挂载设备号
      lsblk
      
      # 挂载附加卷 - 新卷需要格式化
      # sudo mkfs.xfs /dev/sdb
      
      # 挂载附加卷 - 挂载
      sudo mount /dev/sdb /www
      sudo chown -R ghost:ghost /www
      sudo chmod 755 /www
      
      # 挂载附加卷 - 挂载后的效果
      df -h | grep /www
      
      [opc@trilium20251227 ~]$ df -h
      Filesystem      Size  Used Avail Use% Mounted on
      devtmpfs        456M     0  456M   0% /dev
      tmpfs           493M     0  493M   0% /dev/shm
      tmpfs           493M  6.9M  486M   2% /run
      tmpfs           493M     0  493M   0% /sys/fs/cgroup
      /dev/sda3        39G  3.1G   35G   9% /
      /dev/sda1       512M   12M  501M   3% /boot/efi
      tmpfs            99M     0   99M   0% /run/user/994
      tmpfs            99M     0   99M   0% /run/user/0
      tmpfs            99M     0   99M   0% /run/user/1000
      /dev/sdb        150G   33M  150G   1% /www
      
      [opc@trilium20251227 ~]$ ll / |grep www
      drwxr-xr-x.   2 ghost ghost    6 Dec 27 15:09 www
      
      
    • 安装最新的 Docker 引擎及其插件

      # 卸载旧版本(如果有)
      sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
      
      # 使用官方一键脚本 - 已不支持centos7
      # curl -fsSL https://get.docker.com | bash -s docker
      # 直接用 Docker 官方源(推荐)
      sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
      
      # docekr安装
      sudo yum install -y yum-utils device-mapper-persistent-data lvm2
      sudo yum install -y docker-ce docker-ce-cli containerd.io
      
      # docker-compose安装
      sudo mkdir -p /usr/local/lib/docker/cli-plugins
      sudo curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose
      sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
      sudo ln -s /usr/local/lib/docker/cli-plugins/docker-compose /usr/bin/docker-compose
      
      # 启动并开机自启
      sudo systemctl enable --now docker
      
      # 用户加入 docker 组
      sudo usermod -aG docker opc
      sudo usermod -aG docker ghost
      
      # docker 验证,可以重启centos+切换到ghost来验证
      docker ps
      docker compose version     # 测试插件形式
      docker-compose --version   # 测试独立命令形式
      ls -ld /www
      
      # 创建docker-net
      docker network create ghost_net
  • 给新用户增加ssh - cmd终端命令

    type "D:\fileJob\1606atibm\2105oracle\instance-20210526-1342\ssh.key.20250215.oracle.ghost\oracle-rsa-ghost-nopsw.pub" | ssh ghost@ssh.atibm.com "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
    # 验证
    ssh -i "D:\fileJob\1606atibm\2105oracle\instance-20210526-1342\ssh.key.20250215.oracle.ghost\oracle-rsa-ghost-nopsw" ghost@ssh.atibm.com
  • 服务恢复
    • 恢复备份文件
      • tar -zxvf ghost20250701090751备份脚本增加解压命令.tar.gz -C /www
    • 恢复trilium笔记数据
      • sudo cp -f backup-now.db /www/trilium/data/document.db
      • sudo rm /www/trilium/data/document.db-wal:存放尚未写入主文件的临时事务数据。需要删除
      • sudo rm /www/trilium/data/document.db-shm:共享内存文件,用于协调多个进程访问。需要删除
      • 风险点:SQLite 数据库的 WAL (Write-Ahead Logging) 模式, 如果你只覆盖了 document.db,但保留了旧的 db-wal 文件,Trilium 启动时会尝试将旧的日志合并到新的数据库中。由于两者的数据结构(快照 ID)不匹配,会导致 数据库损坏(Database Corrupt) 或数据回滚失败。
      • 确认拉起来的trilium是server还是client:docker exec -it trilium curl http://localhost:8080/api/setup/status
      • 如果客户端和服务端之间同步完成,再docker restart trilium重启一下应用
    • 恢复docker应用

      docker compose -f /www/trilium/docker-compose.yml up -d
      docker compose -f /www/ghost/docker-compose.yml up -d
      docker compose -f /www/nginx/docker-compose.yml up -d
      docker compose -f /www/certbot/docker-compose.yml up -d
    • renew证书 Certbot https证书维护
    • 验证 https://ghost.atibm.com 访问正常
  • 客户端笔记
    • windows客户端trilium,点击同步,测试同步握手成功,但是同步处理一会儿提示失败