黑群晖docker安装人人影视_在云主机上手动安装腾讯PAI面板

2023-11-15

本文关键字:云主机上装管理面板

在前面,我们介绍过lnmp,sandstorm paas,还有黑群晖,docker管理面板,这些都是云OS上的面板扩展和APPSTACK扩展,分散在不同级别被实现,(像群晖这种是OS和面板一体的),包括这里要介绍的pai和未来可能要介绍的openfaas云函数面板,基本可以分为二类,一带无devops无隔离,没有明显的虚拟化APP打包特征,像宝塔,lnmp,pai,APP直接在baremetal上运行,一带devops,基于容器。像docker管理面板,openfaas。都可以做所有通用服务应用不限web,里面基于容器的技术也都类同,不过vs sandstorm paas,openfaas是用标准容器方法达成的(vs真正的用统一语言和统一微内核做的那套,容器是我们当代伪applvl的virtualappliance做得最完善的了。),更开放更devops。

所以谁说openfaas,sandstorm,lamp,dsm这样的规模的东西不是个os?openfaas cloud还有整合存储Minio,类似自建云函数+云存储的方案只不过个人难于负担存储部分只能寻求OD这样的替代。

好了不废话。

上次我们搞好了云主机装机的pebuilder.sh。这次来介绍云主机装机常用的服务器套件,一般这类产品有宝塔,wdcp,lnmp等,但是鉴于我们近期在研究云函数和serverless,这次我们找到了PAI,https://cloud.tencent.com/solution/pai,它在一台云主机上自动绑定一个cloudbase域名,并做了对小程序的自动鉴权(大约小程序对xxx.pai.cloudbase.com的域名自动鉴权,否则需要去小程序后台填自定义域名),集成了git拉取pai项目,自动certbot作ssl验证,当然,tx的servless产品主要有cloudbase(里面有云函数云存储云数据库)和wx ide。这个PAI并不能达到官方cloudbase提供的服务那么完整(自建云函数机制,支持云函数的event,context写法),也不能做到让wx ide完全无缝对接(比如管理PAI上的云函数),这货吧有点像nodejs做的容器和devops,目前它只是自动鉴权方面有点强而已。其它只是一个通用服务器和不使用云函等的小程序后端,没发现什么亮点。

这个PAI它不是一个镜像也不是一个软件,而是需要购买时绑定的。下面我们把它安装在任意云主机上,甚至不是tx cvm也可以。这样我们就失去了那个免费http://xxx.pai.cloudbase.com三级域名和自动鉴权的好处,但是实际上用自己的域名和自动鉴权也不费事。关键是我们想看看pai有哪些程序可用。直接给脚本:

基础

注意使用说明:云主机事先开5523,并域名绑好到这个云主机上。以便程序内自动申请证书等工作。

一些变量:

MIRROR_PATH="http://default-8g95m46n2bd18f80.service.tcloudbase.com/d/demos"
# the pai backend
SERVER_PATH=${MIRROR_PATH}/pai/agent/stable/pai_agent_framework
PAI_MATE_SERVER_ROOT_PATH=${MIRROR_PATH}/pai/mate
PAI_MATE_SERVER_PATH=${MIRROR_PATH}/pai/mate/stable/install
TOOLS_PATH=${MIRROR_PATH}/pai/tools

安装依赖

apt-get install git nginx gcc python3.6 python3-pip python3-virtualenv python-certbot-nginx golang -y

单独安装node语言件:

# install node.js
installNodejs() {

    echo "=====================node.js progress======================="
    msg=$(wget -q ${TOOLS_PATH}/node-v10.16.2-linux-x64.tar.xz
    tar -Jxvf node-v10.16.2-linux-x64.tar.xz -C /usr/local/
    ln -sf /usr/local/node-v10.16.2-linux-x64 /usr/local/node
    rm node-v10.16.2-linux-x64.tar.xz -f
    # for manual launch node in shell maybe in the later
    echo "export PATH=/usr/local/node/bin:$PATH" >> ${HOME}/.bashrc

    wget -q ${TOOLS_PATH}/pm2-3.5.1.tgz
    PATH=/usr/local/node/bin:$PATH npm install -g pm2-3.5.1.tgz
    PATH=/usr/local/node/bin:$PATH npm install -g serve-handler
    rm pm2-3.5.1.tgz -f

    wget -q ${TOOLS_PATH}/sqlite3-4.1.1.tgz
    PATH=/usr/local/node/bin:$PATH npm config set user 0
    PATH=/usr/local/node/bin:$PATH npm config set unsafe-perm true
    PATH=/usr/local/node/bin:$PATH npm install -g sqlite3-4.1.1.tgz
    rm sqlite3-4.1.1.tgz -f 2>&1)
    status=$?
    updateProgress 10 "$msg" "$status" "node.js"
}

installNodejs

pai前后端基础支持

后端5523会透出管理页面,/data/pai-mate-workspace中的应用代理到nginx 3000,first time renew也是为了生成一个/etc/letsencrypt/renewal/下的模板文件供certbot-renew.service服务使用。 安装中,请保证certbot renew务必成功。否则后面的二个pai服务绝对启动不了。但如果成功,基本安装就能很好完成。

confignginx() {

    echo "=====================certbot renew progress======================="
    systemctl enable nginx.service
    systemctl start nginx

    cp -f /lib/systemd/system/certbot.service /etc/systemd/system/certbot-renew.service
    cp -f /lib/systemd/system/certbot.timer /etc/systemd/system/certbot-renew.timer

    # sed -i "s/renew/renew --nginx/g" /etc/systemd/system/certbot-renew.service

    msg=$(
    #first time renew
    certbot certonly --standalone --agree-tos --non-interactive -m ${EMAIL_NAME} -d ${DOMAIN_NAME} --pre-hook "systemctl stop nginx"

    systemctl daemon-reload 
    systemctl enable certbot-renew.service
    systemctl start certbot-renew.service
    systemctl start certbot-renrew.timer 2>&1)
    status=$?
    updateProgress 40 "$msg" "$status" "certbot renew"


    echo "=====================nginx reconfig progress======================="
    # add nginx conf
    rm -rf /etc/nginx/conf.d/default.conf
    cat << 'EOF' > /etc/nginx/conf.d/default.conf

server {
    listen 443 http2 ssl;
    listen [::]:443 http2 ssl;

    server_name DOMAIN_NAME;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/DOMAIN_NAME/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/DOMAIN_NAME/privkey.pem;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://localhost:3000;
    }
}

server {
    listen 80;
    server_name DOMAIN_NAME;

    if ($host = DOMAIN_NAME) {
        return 301 https://$host$request_uri;
    }

    return 404;
}
EOF

    sed -i "s#DOMAIN_NAME#${DOMAIN_NAME}#g" /etc/nginx/conf.d/default.conf

    # restart nginx
    msg=$(systemctl reload nginx.service 
    systemctl restart nginx 2>&1)
    status=$?
    updateProgress 50 "$msg" "$status" "nginx reconfig"

}

confignginx

安装pai,paimate

installPai() {

    echo "=====================paimate install progress======================="
    mkdir -p ${HOME}/pai
    echo "export PATH=/usr/local/node/bin:$PATH" > ${HOME}/pai/pai-mate-env

    rm -rf /data/logs
    sudo mkdir /data/logs

    echo "Start installing PAI Mate!"
    echo ${PAI_MATE_SERVER_PATH}
    echo ${DOMAIN_NAME}

    INSTALL_DIR="${HOME}/pai-mate"

    # prepare directory
    mkdir -p ${INSTALL_DIR}

    msg=$(# download package
    wget -qO- ${PAI_MATE_SERVER_PATH}/pai-mate-latest.tar.xz > ${INSTALL_DIR}/pai-mate-latest.tar.xz

    # unzip
    tar -Jxvf ${INSTALL_DIR}/pai-mate-latest.tar.xz  -C ${INSTALL_DIR}
    mv ${INSTALL_DIR}/pai-mate-latest.tar.xz ${INSTALL_DIR}/pai-mate-latest.tar.xz.old

    cd ${INSTALL_DIR}

    # config
    echo "UPDATE_PATH: ${PAI_MATE_SERVER_PATH}" > config.yml
    echo "DOMAIN_NAME: ${DOMAIN_NAME}" >> config.yml
    echo "CERT_PATH: /etc/letsencrypt/live/${DOMAIN_NAME}/fullchain.pem" >> config.yml
    echo "KEY_PATH: /etc/letsencrypt/live/${DOMAIN_NAME}/privkey.pem" >> config.yml

    # prepare
    source ${HOME}/pai/pai-mate-env # get node/npm binary path
    #npm install --production --unsafe-perm=true --allow-root
    # download from cos
    wget -qO- ${PAI_MATE_SERVER_ROOT_PATH}/libs/node_modules.tar.xz | tar -Jxf -
    npm run migrate:latest

    # prepare workspace
    mkdir -p /data/pai_mate_workspaces

    # systemd service start
    rm -rf /etc/systemd/system/tencentcloud-pai-mate.service
    cat << 'EOF' > /etc/systemd/system/tencentcloud-pai-mate.service

[Unit]
Description=Tencent Cloud Pai Mate
After=network.target

[Service]
Type=simple
Restart=always
RestartSec=1
User=root
Environment=PATH=/usr/local/node/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
WorkingDirectory=/root/pai-mate
ExecStart=/root/pai-mate/bin/start.sh

[Install]
WantedBy=multi-user.target
EOF

    rm -rf /etc/systemd/system/tencentcloud-pai-mate-update.service
    cat << 'EOF' > /etc/systemd/system/tencentcloud-pai-mate-update.service

[Unit]
Description=Tencent Cloud Pai Mate Update
After=network.target

[Service]
Type=oneshot
User=root
Environment=PATH=/usr/local/node/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
WorkingDirectory=/root/pai-mate
ExecStart=/root/pai-mate/bin/update.sh
EOF

    rm -rf /etc/systemd/system/tencentcloud-pai-mate-update.timer
    cat << 'EOF' > /etc/systemd/system/tencentcloud-pai-mate-update.timer

[Unit]
Description=Tencent Cloud Pai Mate Update

[Timer]
OnCalendar=daily
RandomizedDelaySec=5minutes
Persistent=true

[Install]
WantedBy=timers.target
EOF

    chmod +x ${INSTALL_DIR}/bin/*
    systemctl daemon-reload
    systemctl enable tencentcloud-pai-mate.service
    systemctl start tencentcloud-pai-mate.service
    systemctl start tencentcloud-pai-mate-update.timer 2>&1)

    status=$?
    updateProgress 90 "$msg" "$status" "paimate install"


    echo "=====================pai install progress======================="
    CONFIG_INSTALL_DIR=${HOME}/pai/etc
    BINARY_INSTALL_DIR=${HOME}/pai/bin

    mkdir -p ${CONFIG_INSTALL_DIR}
    mkdir -p ${BINARY_INSTALL_DIR}

    echo "server_path: ${SERVER_PATH}" > ${CONFIG_INSTALL_DIR}/pai.yml
    echo "domain_name: ${DOMAIN_NAME}" >> ${CONFIG_INSTALL_DIR}/pai.yml

    msg=$(# Note: `agent` binary will update and run this time. `baker` binay will be run next time.
    # cannot overwrite binay, error: text busy
    # mv -f "${BINARY_INSTALL_DIR}/pai_agent" "${BINARY_INSTALL_DIR}/pai_agent.old"
    # mv -f "${BINARY_INSTALL_DIR}/pai_baker" "${BINARY_INSTALL_DIR}/pai_baker.old"
    wget -q "${SERVER_PATH}/bin/pai_agent" > "${BINARY_INSTALL_DIR}/pai_agent"
    # curl "${SERVER_PATH}/bin/pai_baker" -sSf > "${BINARY_INSTALL_DIR}/pai_baker"
    chmod +x "${BINARY_INSTALL_DIR}/pai_agent"
    # chmod +x "${BINARY_INSTALL_DIR}/pai_baker"

    rm -rf /etc/systemd/system/tencentcloud-pai-agent.service
    cat << 'EOF' > /etc/systemd/system/tencentcloud-pai-agent.service

[Unit]
Description=Tencent Cloud Pai Agent
After=network.target

[Service]
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/root/pai/bin/pai_agent

[Install]
WantedBy=multi-user.target
EOF

    rm -rf /etc/systemd/system/tencentcloud-pai-baker.timer
    cat << 'EOF' > /etc/systemd/system/tencentcloud-pai-baker.timer

[Unit]
Description=Tencent Cloud Pai Baker

[Timer]
OnCalendar=daily
RandomizedDelaySec=5minutes
#OnCalendar=*-*-* *:*:00
Persistent=true

[Install]
WantedBy=timers.target
EOF

    systemctl daemon-reload
    systemctl enable tencentcloud-pai-agent.service
    systemctl start tencentcloud-pai-agent.service 2>&1)
    # systemctl restart tencentcloud-pai-baker.timer 
    status=$?
    updateProgress 100 "$msg" "$status" "pai install"


}

installPai

安装完成后,打开域名:5523,用你的云主机帐号,最好root登录。其它就没有什么了,/root/pai,/root/pai-mate是程序目录 /data是数据,,测试了下,只有一个当前应用能起作用(鸡肋?)。,,并没有太深入去了解这个工程的细节。只是追求能做到可用即可。恩恩


我们的下一文,打造yet another cloudbase:在云主机上安装cloudide(jupyter)为pai面板所用

(此处不设回复和更新,点击GIF扫码到微信参与留言或获取资源)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

黑群晖docker安装人人影视_在云主机上手动安装腾讯PAI面板 的相关文章

  • 数据结构之实现无向图的广度优先搜索算法

    include
  • Spring揭秘 学习笔记一 (Spring的IoC容器 一)

    Spring框架为POJO提供的各种服务共同组成了Spring的生命之树 如图1 1所示 第2章 IoC的基本概念 2 1 IoC全称为Inversion of Control 中文通常翻译为 控制反转 它还有一个别名叫做依赖注入 Depe
  • Docker部署Prometheus

    组件介绍 Prometheus Server 普罗米修斯的主服务器 node exporter 用于机器系统数据收集 mysqld exporter 用于MySQL数据库数据收集 Cadvisor 用于收集宿主机上的docker容器数据 G
  • mysql group by cube_group by、grouping sets、with rollup、with cube方法

    场景 在编写报表的 sql 脚本的时候 可能会遇到多维度组合的情况 例如下面的情况 常规的做法是编写不同维度组合的 sql 然后再使用 union all 进行全集 当分组维度数量比较多的时候 union的sql代码会非常长 但你若熟悉下面
  • SSLv3 存在严重设计缺陷漏洞,整改方法

    发现此问题后 进入WINDOWS注册表 然后修改 注册表进入 HKey Local Machine System CurrentControlSet Control SecurityProviders SCHANNEL Protocols
  • scel转txt抽取词库

    最近需要词库来优化分词效果 找到了有大神写好的能将搜狗词库scel转成txt的python脚本 http blog csdn net zhangzhenhu article details 7014271 实际运行时因为python版本不同
  • Linux常用指令总结

    一 基础指令 1 ls 列出当前路径下的所有文件和目录的名称 ls l 以列表的形式展现所有 ls a 显示隐藏文件 ls h 将列出的文件大小以可读性较好的方式显示 默认单位为字节 文件大小过大 会以合适的单位来进行转化 但必须和 l 一
  • C++之对封装、继承、多态的理解

    目录 一 对封装 继承和多态的简单理解 二 举例 1 封装的例子 2 继承的例子 3 多态的例子 三 代码实现 1 封装 C 或Java实现 2 继承 C 或Java实现 3 多态 C 或Java实现 四 以一个简单的实例 剖析 封装 的实
  • C++ 按日期时间生成文件

    C 按日期时间生成文件 在日常开发环境中 需要按照时间去命名文件名 因此需要创建如年 月 日此类的字符串 这里给出例子 定义时间命名字符串的格式 enum FileNameStyle example 2022 07 11 14 54 27
  • 解决MSBUILD : error MSB3428错误

    问题 MSBUILD error MSB3428 未能加载 Visual C 组件 VCBuild exe 要解决此问题 1 安装 NET Framework 2 0 SDK 2 安装 Microsoft Visual Studio 200
  • java大津法确定阈值,大津法(最大类间阈值法)

    大津法又叫最大类间方差法 最大类间阈值法 OTSU 它的基本思想是 用一个阈值将图像中的数据分为两类 一类中图像的像素点的灰度均小于这个阈值 另一类中的图像的像素点的灰度均大于或者等于该阈值 如果这两个类中像素点的灰度的方差越大 说明获取到
  • tkinter批量循环创建按钮

    CourseList res courseList button list sy 20 for i in range len CourseList CourseList i CourseList i courseName CourseLis
  • 实现不同局域网间的文件共享和端口映射,使用Python自带的HTTP服务

    文章目录 1 前言 2 本地文件服务器搭建 2 1 python的安装和设置 2 2 cpolar的安装和注册 3 本地文件服务器的发布 3 1 Cpolar云端设置 3 2 Cpolar本地设置 4 公网访问测试 5 结语 1 前言 数据
  • Linux系统常用命令解读

    测试常用Linux进行得一些操作 查看日志 定位问题原因 修改配置文件中的一些配置进行测试 例如开关 文件存放路径 修改定时任务时间 查看服务器性能 远程登录工具 xshell winSCPC ll ls l 会列出该文件下的所有文件 文件
  • Linux生成UUID的算法方式(序列号C/C++代码实现)

    Linux中想获取机器的唯一标识 UUID 只需要在命令行中输入uuid就可以看到类似格式为 xxxxxxxx xxxx xxxx xxxxxxxxxxxxxxxx 8 4 4 16 机器标识 通过该唯一标识生成注册码 序列号 有了设备的唯
  • MySQL - 全文索引

    全文索引 英文查找 全文索引主要对字符串类型建立基于分词的索引 主要是基于CHAR VARCHAR和TEXT的字段上 以便能够更加快速地查询数据量较大的字符串类型的字段 全文索引以词为基础的 MySQL默认的分词是所有非字母和数字的特殊符号
  • 2022-04-20 Sass学习笔记(四) Sass的混入(mixin),继承(extend)和导入(import)

    1 Sass混入 mixin 与 include mixin 指令允许我们定义一个可以在整个样式表中重复使用的样式 include 指令可以将混入 mixin 引入到文档中 语法 定义 mixin mixin name 使用 selecto
  • 【华为OD机试真题 JAVA】连续出牌数量

    JS版 华为OD机试真题 JS 连续出牌数量 标题 连续出牌数量 时间限制 1秒 内存限制 262144K 语言限制 不限 有这么一款单人卡牌游戏 牌面由颜色和数字组成 颜色为红 黄 蓝 绿中的一种 数字为0 9中的一个 游戏开始时玩家从手
  • 【H5】 canvas图像各种合成详解

    本素材来源 https www cnblogs com hzj680539 p 5068487 html 尊重第一作者 把知识奉献给大家 简易直观图 黄色圆为原图 蓝色正方形为新图 红色圆为新图 蓝色为原图 globalCompositeO

随机推荐

  • 《SQLi-Labs》03. Less 11~15

    sqli 索引 Less 11 题解 原理 Less 12 题解 Less 13 题解 Less 14 题解 Less 15 题解 原理 sqli 开启新坑 索引 Less 11 POST 回显注入 字符型 Less 12 POST 回显注
  • 面试总结(六):搜索索引

    问题导读 1 如何理解用户输入查询语句 2 如何根据得到的文档和查询语句的相关性 对结果进行排序 3 如何计算权重 Term weight 过程 4 如何判断Term之间的关系从而得到文档相关性 搜索索引到这里似乎我们可以宣布 我们找到想要
  • 为什需要采用增广拉格朗日函数

    为什需要采用增广拉格朗日函数 目标函数的可以转化为Lagrangian函数的最小 称之为对偶函数 dual function d
  • moveit是如何控制机械臂运动的

    确定机械臂的状态 MoveIt会读取机械臂的当前状态 包括关节角度 位置和速度等信息 获取规划请求 MoveIt会接收到一个规划请求 其中包含了机械臂需要执行的任务和目标 进行运动规划 MoveIt会对机械臂的当前状态和任务目标进行运动规划
  • Jsvc

    Jsvc How to detach the Java daemon from the shell script Toolbox for IT Groups How to detach the Java daemon from the sh
  • 学习多线程,创建多线程的三种方式

    多线程 并发与并行 并发 两个或多个事件在同一个时间段内发生 交替执行 并行 两个或多个事件在同一个时刻发生 同时执行 进程与线程 进程 进入到内存中的程序 线程 进程中的一个执行单元 负责当前进程中程序的执行 一个进程中至少有一个线程 一
  • 教你如何在VSCode中使用markdown标记语言并转为word

    目录 准备工作 正文开始 准备工作 插件 1 安装 pandoc https pandoc org installing html Windows用户进入官网后 直接点最大的那个按钮就行了 其他操作系统找到相应的下载点 这里我就不多讲了 实
  • 【解决】IDEA默认的代码格式化快捷键是失效

    Ctrl Alt L 网易云的快捷键 关掉网易云后 IDEA格式化快捷键就可以使用了
  • markdown表格合并单元格,嵌入HTML语法

    markdown的语法并不支持表格单元格合并 但可以通过嵌入HTML来解决 例如想实现这样的单元格合并效果 网络状态指示引脚的工作状态 引脚名 引脚工作状态 所指示的网络状态 NET STATUS 慢闪 200 ms 高 1800 ms 低
  • Java Scheduled定时任务

    开启定时任务步骤流程 1 在启动类添加注解 注意 千万不要忘记 EnableScheduling 2 在具体的方法上添加定时任务注解 Scheduled cron 0 0 3 每3个小时触发一次 3 定时任务开启时间 常用的 Schedul
  • SpringBoot集成Redis来实现缓存技术方案

    为什么80 的码农都做不了架构师 gt gt gt 概述 在我们的日常项目开发过程中缓存是无处不在的 因为它可以极大的提高系统的访问速度 关于缓存的框架也种类繁多 今天主要介绍的是使用现在非常流行的NoSQL数据库 Redis 来实现我们的
  • 【VS2010学习笔记】【异常处理】general error c1010070: Failed to load and parse the manifest.

    在VS2010编程中 有时编译会遇到这样的错误 general error c1010070 Failed to load and parse the manifest 解决方法就是在解决方案中将后缀名为manifest的文件删除 再编译即
  • css 第二行的元素设置margin-top间隔

    css 第二行的元素设置margin top间隔
  • Extjs的Form表单提交方式

    Extjs的Form表单提交方式 一 直接提交 url写在表单中 var addForm new Ext FormPanel frame true url insertProject eva doType insertProject lab
  • PCIe5.0的Add-in-Card(AIC)金手指layout建议(三)

    PCIe5 0的Add in Card AIC 金手指layout建议 一 PCIe5 0的Add in Card AIC 金手指layout建议 二 前面两篇文章介绍了第一种金手指的layout建议 适用速率在32 0 GT s 以下介绍
  • 关于爬虫技术

    1 什么是爬虫 爬虫是一种自动化程序 它能够模拟人类用户访问网站的行为 从网站上抓取数据并保存到本地或者进行进一步处理 爬虫是一种非常常用的网络数据采集工具 可以用于搜索引擎 电商数据采集 舆情监测等多个领域 通过使用爬虫 可以自动化地获取
  • springboot获取nacos的服务列表、实例列表及修改实例、发布配置等

    1 通过java sdk的方式发布配置 官方文档说明 https nacos io zh cn docs sdk html https nacos io zh cn docs open api html 1 1构造ConfigService
  • Linux系统中环境变量的设置

    目录 业务描述 设置环境变量的方法 系统环境变量 指定用户环境变量 临时有效的环境变量 系统常用环境变量应用分析 PATH 环境变量 HOME 环境变量 HISTSIZE 环境变量 LOGNAME环境变量 SHELL环境变量 业务描述 Li
  • 【JAVA进阶】File类、字节流

    个人主页 个人主页 系列专栏 JAVASE基础 前言 目前的编程中 数据存储方式有很多种 包括但不限于 文件存储 将数据以文件的形式存储在磁盘上 可以使用文件读写操作进行数据的存取 数据库存储 将数据以表格的形式存储在数据库中 可以使用SQ
  • 黑群晖docker安装人人影视_在云主机上手动安装腾讯PAI面板

    本文关键字 云主机上装管理面板 在前面 我们介绍过lnmp sandstorm paas 还有黑群晖 docker管理面板 这些都是云OS上的面板扩展和APPSTACK扩展 分散在不同级别被实现 像群晖这种是OS和面板一体的 包括这里要介绍