Lazy loaded image
云服务器安装docker和1panel
00 分钟
2024-12-24
2025-1-30
type
status
date
slug
summary
tags
category
icon
password
 
 

介绍

 
Docker 是一个开源的应用容器化平台,允许开发者将应用程序及其依赖项打包到一个可移植的容器中,然后在任何支持 Docker 的环境中运行这些容器。容器在操作系统内核上运行,相比虚拟机,它们更加轻量且启动速度更快。
 
1Panel 是一个 Web 控制面板,旨在简化服务器和应用程序的管理。它提供了一种直观的方式来管理服务器资源、虚拟主机、数据库、电子邮件和其他常见的托管功能。1Panel 的主要特点包括:
 
有了这两个就可以方便的管理自己的服务器,尽可能的发挥出服务器的价值;
 
任何一个云服务器方法都差不多,以ubuntu22.04为例
(此教程假设你已经有了一台云服务器,并且本地可以通过ssh连接,推荐ssh工具tabby,或者干脆是本地的powershell或者terminal)
 

docker安装

Docker 是一个开源的容器化平台,允许开发人员和运维人员将应用程序及其依赖项打包成一个标准化的单元,称为“容器”。这些容器可以在任何支持 Docker 的系统上运行,提供了跨平台的兼容性。Docker 使得软件部署更加简便、快速且可重复,同时也提高了可移植性和可扩展性
步骤 1:更新系统软件包
确保系统软件包是最新的。

步骤 2:安装必要的依赖包
安装用于添加 HTTPS 传输和管理仓库的工具。

步骤 3:添加 Docker 官方 GPG 密钥
通过以下命令下载并添加 Docker 的官方 GPG 密钥。

步骤 4:添加 Docker 的 APT 软件源
添加 Docker 官方仓库到系统的 APT 源列表中。

步骤 5:安装 Docker Engine
  1. 更新 APT 软件包索引。
    1. 安装 Docker Engine、CLI 和 containerd。
       

      步骤 6:启用 Docker 开机自启
      确保 Docker 服务在系统启动时自动运行。

      1panel安装

      1panel是一个linux服务器的可视化控制面板,里面有很多功能,能一键快捷安装服务等
      一路跟着提示走即可;安装完后会显示配置信息,账号,密码等;重要的是1panel打开的端口号(假设是8765),以及你服务器的ip(22.22.22.22);
      在你买的服务器的控制台界面设置安全组(不管是阿里云,腾讯云,aws都差不多)
      设置一个方向为入的端口,协议是tcp,端口号设置为1panel面板给你的端口号(比如8765),授权ip设置为0.0.0.0/0,表示所有的ip地址都可以通过8765这个端口号访问你的服务器
      notion image
      打开这个端口号后就可以通过 ip:端口号 比如22.22.22.22:8765 来登陆1panel面板了
      notion image

      1panel设置

      一些常用设置
      1. 工具箱—fail2ban可以设置监听22端口最大重试次数低一点防止有人暴力ssh连接你的服务器;随着时间推移会得到ip黑名单,复制黑名单的内容,粘贴到防火墙—ip规则—创建ip规则中,设置为屏蔽
      1. 面板设置—面板里可以设置服务器地址,面板设置—安全里可以设置面板端口,域名绑定
      1. 不小心设置错了导致面板无法登陆可以在服务器输入1pctl reset --help 来重置某些配置,更多见1panel官方文档

      卸载

      刚开始摸索的适合容易把服务器搞得乱七八糟,一些配置信息也忘了,不妨全部推倒重来,下面是卸载方法
      1panel卸载
      docker卸载
      1. 停止并删除所有容器
      首先停止所有正在运行的 Docker 容器,并删除它们:
       
      2. 删除所有镜像
      接着删除所有 Docker 镜像:
      3. 卸载 Docker
      然后卸载 Docker 软件包:
      4. 删除所有 Docker 数据文件
      为了彻底删除 Docker 及其相关数据,可以清理 Docker 的所有存储文件(镜像、容器、卷、网络等):
      5. 清理不再需要的依赖包
      卸载 Docker 后,可以运行以下命令来清理系统中不再需要的依赖包:
       

      nginx配置

      需要注意的是,如果在1panel中设置了域名登陆,并且域名使用了nginx反代,那有可能会导致1panel无法连接上服务器,原因和解决办法如下
      因为在 1Panel 的终端功能中,客户端通过 WebSocket 与服务器进行实时通信,而 WebSocket 的建立依赖于 HTTP 协议升级。默认情况下,Nginx 并不会转发 UpgradeConnection 等头信息,也不会自动使用 HTTP/1.1,因此 WebSocket 请求会被阻断。
      问题解决的核心原因在于 WebSocket 的协议升级,而添加以下三行配置后,Nginx 能够正确处理 WebSocket 的连接请求:
      解释

      经过 Nginx 转发后的请求头:
      • 作用:通知后端服务器保持连接并完成协议升级,确保 WebSocket 会话得以建立。
      proxy_set_header 是 Nginx 的反向代理配置指令,用于控制发往服务器后端的 HTTP 请求头。 proxy_set_header <字段名> <值>;
      以下是具体原因和每一行配置的作用:
      1. proxy_http_version 1.1;
      • 原因:WebSocket 的协议升级(HTTP Upgrade)是基于 HTTP/1.1 的功能,而 HTTP/1.0 不支持协议升级。
      • 作用:确保 Nginx 与后端的代理通信使用 HTTP/1.1,从而允许 WebSocket 升级请求的处理。
      2. proxy_set_header Upgrade $http_upgrade;
      • 原因:WebSocket 协议升级请求需要在 HTTP 请求头中包含 Upgrade 字段,值通常为 websocket,以告知服务器这是一个 WebSocket 升级请求。
      • 作用:将客户端的 Upgrade 头信息正确传递到后端服务器,让后端知道这是一个 WebSocket 请求,并正确处理协议升级。

      3. proxy_set_header Connection "upgrade";
      • 原因Connection 头的值需要为 upgrade,以配合 Upgrade 字段指示当前连接希望升级协议。
      • Connection "upgrade" 这条配置会将 所有 到 Nginx 的请求中 Connection 字段的值强制设置为 upgrade不管客户端原始请求中的 Connection 字段是什么
      • 在 Nginx 的配置中,proxy_set_header 指令会覆盖请求头字段的原始值。所以,即使客户端请求头中原本存在其他的 Connection 字段(例如 keep-aliveclose),Nginx 会将它替换为 upgrade。 这对于 WebSocket 协议至关重要,因为 WebSocket 握手需要 Connection: upgrade 字段来告知服务器,客户端希望进行协议升级。
      客户端如果发送的请求头:
      WebSocket 和 HTTP 的关系
      WebSocket 和 HTTP 确实有很紧密的关系,尤其是在建立连接的过程中。WebSocket 实际上是建立在 HTTP 协议之上的,并且通过 HTTP 进行初始化。可以简单理解为 WebSocket 是 HTTP 的一种“协议升级”方式,WebSocket 在初始阶段使用 HTTP 进行通信,然后通过握手过程从 HTTP 协议“升级”到 WebSocket 协议。
      WebSocket 和 HTTP 的关系:
      1. HTTP 和 WebSocket 都是网络协议
          • HTTP:一种无状态、基于请求-响应的协议,常用于浏览器与服务器之间的通信。客户端发起请求,服务器响应。
          • WebSocket:是一种全双工、持久的通信协议,允许客户端和服务器之间进行长时间的、双向的实时通信。
      1. WebSocket 是基于 HTTP 协议的
          • WebSocket 建立时,客户端通过 HTTP 请求与服务器进行握手。这个握手过程看起来像是一个普通的 HTTP 请求,但在成功建立连接后,协议会“升级”到 WebSocket。此时,HTTP 请求的连接变成一个双向的 WebSocket 连接,不再使用传统的请求-响应模式。
      1. 协议升级
          • WebSocket 连接的建立是通过 HTTP 协议进行的。客户端发出一个特殊的 HTTP 请求(WebSocket 握手),请求头中包含了 Upgrade 字段,表示希望将 HTTP 协议“升级”到 WebSocket 协议。
          • 如果服务器同意协议升级,它会返回一个 HTTP 101 状态码(101 Switching Protocols),表示协议已成功升级。
      1. WebSocket 握手的请求和响应
          • 客户端发送一个 HTTP 请求,发起 WebSocket 握手:
            • 服务器回应:
          • WebSocket 握手是基于 HTTP 的:客户端通过一个普通的 HTTP 请求发起 WebSocket 握手,服务器检查请求头中的 Upgrade 字段,如果符合 WebSocket 协议要求,就响应一个 101 状态码,表示连接协议升级为 WebSocket。
          • 不需要更新代码:因为 WebSocket 本身就是基于 HTTP 协议的,客户端和服务器之间的协议升级是透明的。在服务器端,通常无需修改应用代码,只需要配置好 WebSocket 握手过程(例如,Nginx 反向代理 WebSocket 连接时需要正确配置 UpgradeConnection 头字段)。在 WebSocket 协议升级后,连接会变成持久的双向通信,后续的数据传输不再使用 HTTP 请求/响应模型,而是使用 WebSocket 协议的帧传输。
          如何进行“协议升级”?
          WebSocket 握手的过程
          1. 客户端发起一个 HTTP 请求,请求头中包含 Upgrade: websocketConnection: Upgrade
          1. 服务器解析请求后,如果支持 WebSocket 协议并同意升级,就返回一个 101 Switching Protocols 响应。
          1. 一旦握手成功,连接会切换到 WebSocket 协议,客户端和服务器就可以开始双向、持久的数据交换。
           
          上一篇
          购买自己的域名并托管到cloudfare绑定自己的服务器
          下一篇
          建立自己的wordpress网站并nginx反向代理绑定域名签发证书

          评论
          Loading...