租服务器及配置环境

这章用不到 没买linux课不能用acteminal

但经过之前的建站折腾 租服务器配环境以及docker其实都已经会了

这里把y总笔记抄过来一下 看看以后用得着吗

概述

云平台的作用:

存放我们的docker容器,让计算跑在云端。

获得公网IP地址,让每个人可以访问到我们的服务。

任选一个云平台即可,推荐配置:

1核 2GB(后期可以动态扩容,前期配置低一些没关系)

网络带宽采用按量付费,最大带宽拉满即可(费用取决于用量,与最大带宽无关)

系统版本:ubuntu 20.04 LTS(推荐用统一版本,避免后期出现配置不兼容的问题)

(已有的是centos 等下看看要不要重置吧)

云服务器

阿里云地址:https://www.aliyun.com/

腾讯云地址:https://cloud.tencent.com/

华为云地址:https://www.huaweicloud.com/ 服务器选择.mp4

选择服务器

服务器选择.mp4

创建工作用户acs并赋予sudo权限

登录到新服务器。打开AC Terminal,然后:

ssh root@xxx.xxx.xxx.xxx  # xxx.xxx.xxx.xxx替换成新服务器的公网IP

创建acs用户:

adduser acs  # 创建用户acs
usermod -aG sudo acs  # 给用户acs分配sudo权限

配置免密登录方式

退回AC Terminal,然后配置acs用户的别名和免密登录,可以参考4. ssh——ssh登录。

配置新服务器的工作环境

将AC Terminal的配置传到新服务器上:

scp .bashrc .vimrc .tmux.conf server_name:  # server_name需要换成自己配置的别名

安装tmux和docker

登录自己的服务器,然后安装tmux:

sudo apt-get update
sudo apt-get install tmux

打开tmux。(养成好习惯,所有工作都在tmux里进行,防止意外关闭终端后,工作进度丢失)

然后在tmux中根据docker安装教程安装docker即可。

关于多用户

我尝试在自己的云服务器创建了一个acs用户 用于使用acs进行连接(使用root可能不安全 因为毕竟在别人号上) 发现一个很奇怪的东西 明明很多东西在下面的文件夹可以看到 但ls却什么都显示不出来 是因为权限问题吗 但是我给acs赋予了管理员权限 理应和root同级 那么这种多用户到底是什么呢

chatgpt:

在 Linux 系统中,用户权限和多用户环境的概念是非常重要的。不同用户具有不同的权限,可以访问、修改或运行不同的文件和命令。即使一个用户被授予了管理员权限(通过 sudo 命令),仍然有权限上的区别。接下来我将解释几个核心概念,以及 root 用户和普通用户(如 acs)之间的差异。

1. Root 用户

root 用户是系统中的超级用户,拥有完全的控制权。root 可以:

  • 访问和修改系统中的所有文件(无论权限如何)。
  • 安装、删除软件包,修改系统配置文件。
  • 添加、删除用户,修改权限。
  • 直接操作所有设备和资源。

在 Linux 中,root 用户可以执行任何操作,无需经过任何权限验证。这也是为什么我们常常建议谨慎使用 root 用户,因为错误操作可能会破坏整个系统。

2. 普通用户

普通用户(如 acs)是系统中有有限权限的用户:

  • 普通用户只能访问和操作自己拥有的文件和目录(例如 /home/acs)。
  • 没有权限访问其他用户的文件(包括系统级别的文件)——除非通过 sudo 来提升权限。
  • 普通用户在进行需要管理员权限的操作时需要使用 sudo 来临时获得 root 权限。

3. sudo 提升权限

当你为 acs 用户添加了 sudo 权限时,这并不意味着 acs 用户变成了 root。而是表示 acs 用户可以通过 sudo 命令在需要的时候临时获得管理员权限。例如,执行 sudo ls /root 来查看 root 目录的内容,或者使用 sudo 来安装软件包。

因此,acs 用户在正常情况下只能访问自己的文件和目录,而要访问系统文件或执行系统管理任务时,需要通过 sudo 命令来提升权限。

4. 权限体系

Linux 使用三种权限类型来管理文件和目录的访问:

  • 读权限 (r):允许查看文件内容或列出目录内容。
  • 写权限 (w):允许修改文件或在目录中创建/删除文件。
  • 执行权限 (x):允许执行文件(比如脚本)或进入目录。

每个文件或目录都有三个权限集,分别适用于三类用户:

  • 文件拥有者(用户):文件或目录的创建者。
  • 文件所属组:与文件拥有者相关的用户组成员。
  • 其他用户:系统中所有其他用户。

你可以使用 ls -l 命令查看文件的权限。例如:

-rw-r--r-- 1 acs acs 4096 Oct 21 10:00 example.txt

这表示 example.txt 文件:

  • 文件所有者(acs)具有读写权限。
  • 文件所属组成员具有读权限。
  • 其他用户也只有读权限。

5. 为什么 acs 看不到某些文件

即使你给 acs 用户授予了 sudo 权限,acs 依然是普通用户。当 acs 直接登录系统时,它只具有普通用户权限,因此它无法访问属于 root 或其他用户的某些文件。

要访问这些文件,可以使用 sudo 提升权限。例如:

sudo ls /root

这样 acs 用户将临时以 root 权限查看 root 用户的文件。你也可以通过 sudo 执行其他需要管理员权限的命令,如编辑系统文件、安装软件等。

6. 多用户环境

Linux 设计为多用户操作系统,允许多个用户同时使用系统,并确保他们之间的资源隔离。这种隔离包括:

  • 用户只能访问自己的文件和数据,不能随意查看或修改其他用户的数据。
  • 管理员(通过 sudo)可以控制用户权限,确保安全性。

多用户环境的好处:

  • 安全性:不同用户的权限受到严格控制,防止无关用户篡改重要文件。
  • 灵活性:系统管理员可以为不同的用户分配不同的权限。
  • 隔离性:用户之间不会相互干扰,确保数据的隐私和独立性。

总结:

  • root 用户拥有无限制权限,可以做任何事。
  • **普通用户(如 acs)**有有限权限,通常只能操作自己的文件。
  • 通过 sudo,普通用户可以临时获得管理员权限,执行更高权限的操作。
  • 权限体系确保了文件的安全性,避免未授权的访问和修改。

你可以通过 sudo 命令来完成需要管理员权限的操作,而 acs 用户在不使用 sudo 时依然是一个普通用户,权限有限。

6413e891054cd946e1689c4e52558933-44b9c333

可以发现 root登入 直接会进到/目录下的 root文件夹

而acs登入 进入的是 /home/acs文件夹 也对应了前面讲的 用户登入在home文件夹下

当我尝试用acs用户进入root文件夹时 出现了权限拒绝

78d12435c721a4e9594ef143793a8a85-240ac7ff

而用root进入acs文件夹 却畅通无阻

783572cab3f0f3841d00125458a4d628-cfd42703

acs 用户默认登录进入的是 /home/acs 目录,而 root 用户进入的是 /root 目录。这是因为每个用户都有自己的主目录,普通用户的主目录位于 /home 目录下,而 root 用户的主目录位于 /root

正如你所看到的,acs 用户尝试访问 /root 目录时,出现了权限拒绝 (Permission denied)。这是因为 /root 目录通常只允许 root 用户访问,即使 acs 用户有 sudo 权限,直接访问该目录也是不被允许的,除非使用 sudo 提升权限。

创建用户命令整理

懂得了这些 那么当然 像acs这样的用户就可以创建很多

所用到的命令在这里做个整理

1. 创建 acs 用户

首先,你在服务器上创建了一个新用户 acs,并为其设置了密码:

# 创建新用户 acs
adduser acs

# 为 acs 用户设置密码
passwd acs

2. 为 acs 用户添加 sudo 权限

接着,为了让 acs 用户具备管理员权限,你将其添加到 wheel 组:

# 将 acs 用户添加到 wheel 组(具有 sudo 权限)
usermod -aG wheel acs

3. 测试 acs 用户的 sudo 权限

切换到 acs 用户,并测试其是否能够使用 sudo 命令:

# 切换到 acs 用户
su - acs

# 测试 sudo 权限
sudo whoami

如果输出 root,则表示 acs 用户的 sudo 权限已经生效。

4. 为 acs 用户配置 SSH 连接

为了让 acs 用户能够通过 SSH 密钥登录,你需要将你的私钥公钥对正确配置:

  1. 生成或检查现有的私钥(假设你使用的是 wei_01.pem 私钥) 在本地提取公钥:

    ssh-keygen -y -f ~/.ssh/wei_01.pem
    
  2. 将生成的公钥添加到远程服务器的 acs 用户授权文件中 登录到远程服务器,切换到 acs 用户,并创建 .ssh 目录和 authorized_keys 文件:

    # 切换到 acs 用户
    su - acs
    
    # 创建 .ssh 目录并设置权限
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    
    # 添加公钥到 authorized_keys 文件中,并设置权限
    echo "你的公钥内容" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    
  3. 配置 SSH 客户端连接 在本地机器的 ~/.ssh/config 文件中,添加如下配置,以确保 SSH 使用正确的私钥连接远程服务器:

    Host alserver
        HostName 8.130.142.189  # 远程服务器的IP地址
        User acs                # 使用 acs 用户
        IdentityFile ~/.ssh/wei_01.pem  # 私钥文件路径
    
  4. 测试 SSH 连接 完成配置后,可以通过以下命令测试连接:

    ssh alserver
    

docker

概念

ebede1738c378c9483d84748dde26f3b-0220ed84

方便不同云的数据迁移 方便 安全

之后的任务都在docker中进行 即使服务器版本、云服务平台不同 也能保证所有人环境相同 这就是docker的跨平台

直接从本地连接到docker里面 无关中间层

0bd3f8d648ece588251f9e0948f08abd-dacbc321

由相同镜像生成的容器是完全一样的

然后我们的项目在容器中 由镜像生成

同时反过来 项目升级 也可以变成新的镜像

这个升级的过程 可能有多个版本 而必然有相同的部分 这也同git似的 docker会为我们进行管理 把相同部分进行压缩

整理

  1. Docker 架构
    • Docker 通过镜像(Image)生成容器(Container)。镜像是静态的,可以理解为一个预配置的操作系统或应用程序模板。容器是运行时的实例,基于镜像启动,提供隔离的运行环境。
    • 每个镜像可以生成多个容器,这些容器之间是相互独立的,但基于同样的镜像。
  2. 容器的跨平台优势
    • Docker 的一个关键优势是能够在不同的平台上保持一致的运行环境。无论是在本地、不同的云服务平台,还是不同版本的服务器操作系统,Docker 都能通过镜像保证相同的环境。
    • 这种隔离性和跨平台兼容性确保了开发和生产环境的一致性,大大简化了开发、部署和运维流程。
  3. 方便数据迁移
    • Docker 提供了高度的灵活性,可以很方便地将应用程序从一个环境迁移到另一个环境。这对于云服务平台上的项目迁移尤为方便,同时确保了安全性。
  4. 项目升级与镜像管理
    • 项目可以通过升级容器中的内容并生成新的镜像来实现更新。与 Git 的版本管理类似,Docker 也能够通过镜像层进行管理,将相同部分压缩,避免重复存储。
  5. 连接到容器
    • 在开发和测试过程中,用户可以直接从本地连接到容器中进行操作,容器与宿主系统的环境是隔离的,因此无需担心平台或版本的差异。

总结来说,Docker 提供了一种高效的应用程序部署、管理和迁移方式,特别适用于多云平台和跨环境的应用开发。

迁移就直接 容器生成镜像 镜像打包到新服务器 再重新生成容器 就能保证和之前一模一样(打包带走 再拎包入住 )(致命魔术瞬间移动例子) 唉可惜没早些知道还能这样 不然之前做的那些东西也不至于都没了

将当前用户添加到docker用户组

为了避免每次使用docker命令都需要加上sudo权限,可以将当前用户加入安装中自动创建的docker用户组(可以参考官方文档):

sudo usermod -aG docker acs

执行完此操作后,需要退出服务器,再重新登录回来,才可以省去sudo权限。

镜像(images)

所有的镜像由两个部分构成 xxxx:xx (名称:版本号)

  1. docker pull ubuntu:20.04:拉取一个镜像
  2. docker images:列出本地所有镜像
  3. docker image rm ubuntu:20.04docker rmi ubuntu:20.04:删除镜像ubuntu:20.04
  4. docker [container] commit CONTAINER IMAGE_NAME:TAG:创建某个container的镜像
  5. docker save -o ubuntu_20_04.tar ubuntu:20.04:将镜像ubuntu:20.04导出到本地文件ubuntu_20_04.tar
  6. docker load -i ubuntu_20_04.tar:将镜像ubuntu:20.04从本地文件ubuntu_20_04.tar中加载出来

容器(container)

把容器当成一个新的虚拟机或服务器

  1. docker [container] create -it ubuntu:20.04:利用镜像ubuntu:20.04创建一个容器。

  2. docker ps -a:查看本地的所有容器

  3. docker [container] start CONTAINER:启动容器

  4. docker [container] stop CONTAINER:停止容器

  5. docker [container] restart CONTAINER:重启容器

  6. docker [contaienr] run -itd ubuntu:20.04:创建并启动一个容器

  7. docker [container] attach CONTAINER:进入容器

              先按Ctrl-p,再按Ctrl-q可以挂起容器
    
  8. docker [container] exec CONTAINER COMMAND:在容器中执行命令

  9. docker [container] rm CONTAINER:删除容器

  10. docker container prune:删除所有已停止的容器

  11. docker export -o xxx.tar CONTAINER:将容器CONTAINER导出到本地文件xxx.tar中

  12. docker import xxx.tar image_name:tag:将本地文件xxx.tar导入成镜像,并将镜像命名为image_name:tag

  13. docker export/importdocker save/load的区别:

             export/import会丢弃历史记录和元数据信息,仅保存容器当时的快照状态
    
             save/load会保存完整记录,体积更大
    
  14. docker top CONTAINER:查看某个容器内的所有进程

  15. docker stats:查看所有容器的统计信息,包括CPU、内存、存储、网络等信息

  16. docker cp xxx CONTAINER:xxxdocker cp CONTAINER:xxx xxx:在本地和容器间复制文件

  17. docker rename CONTAINER1 CONTAINER2:重命名容器

  18. docker update CONTAINER --memory 500MB:修改容器限制

实战

进入AC Terminal,然后:

scp /var/lib/acwing/docker/images/docker_lesson_1_0.tar server_name:  # 将镜像上传到自己租的云端服务器
ssh server_name  # 登录自己的云端服务器

docker load -i docker_lesson_1_0.tar  # 将镜像加载到本地
docker run -p 20000:22 --name my_docker_server -itd docker_lesson:1.0  # 创建并运行docker_lesson:1.0镜像

docker attach my_docker_server  # 进入创建的docker容器
passwd  # 设置root密码

去云平台控制台中修改安全组配置,放行端口20000。

返回AC Terminal,即可通过ssh登录自己的docker容器:

ssh root@xxx.xxx.xxx.xxx -p 20000  # 将xxx.xxx.xxx.xxx替换成自己租的服务器的IP地址

然后,可以仿照上节课内容,创建工作账户acs。

最后,可以参考4. ssh——ssh登录配置docker容器的别名和免密登录。

操作

将acterminal中的docker镜像上传到阿里云

scp /var/lib/acwing/docker/images/docker_lesson_1_0.tar alserver:

ssh alserver
ls
b64d20c7d530d5213bb207563b54394f-aa6df86f

提取镜像文件 并查看

docker load -i docker_lesson_1_0.tar
docker images
17fceb2412770c7e6fd0bad8235267f2-10f9a1fb

创建并运行容器 安全组开放20000端口

image-6069fea3
docker run -p 20000:22 --name my_docker_server -itd docker_lesson:1.0
docker ps

(容器内的22端口映射到本地的20000端口)

成功 宝塔上也看得到

a5ba771e9a6bdac0ba4dac038d452700-f3ebc94d

进入创建的容器 生成密码 为后续本地直接连接容器内部而不是阿里云服务器再进去做铺垫

docker attach my_docker_server
passwd
8f8f2ffe672b2c354c2191b782a92f93-02f44c32

ctrl+p ctrl+q 挂起

f8b48f79d1c46aae182b6e96ee8ec8c7-d53af326

本地(服务器上)登入

ssh root@localhost -p 20000
1cbfc5032b66f519e9918f06135a71d7-509ea738

远程登入

记得开放安全组

acterminal:

ssh root@8.130.142.189 -p 20000
8e292507cd2f900e31ddeeebb1bb9fcd-4b192253

本地win:

0aeed3be8efd47a25d885263936cf5b0-c408fcc7

成功

所以可以在任意设备进入容器中操作了

这意味着什么 可以想象成 自己在阿里云服务器里又创建了一个服务器 我们又可以做创建用户、做项目git上传等等一系列操作 没有所谓的其他项目环境的干扰 专心可以完成自己的某一个项目 这想必就是docker的隔离性 而且对于之后的迁移 也无需再考虑什么下载相关依赖 不同的liunx系统啊 不同的服务提供商啊 直接跳过了他们这一环节 在一个封闭的“容器”里实现自己的项目 这就是可移植性

之前的晦涩的概念在这一下全具象化了 这就是y总

把一个容器就想象成一个服务器 你甚至可以继续套娃 再在容器里下一个docker 再配置镜像、容器……当然 也可以配置ssh 密钥对 实现免密登入 但没必要

容器的隔离性

通过这种方式,实际上是在阿里云服务器上创建了一个独立的 "小服务器"(即容器)。在这个容器中,你可以创建新的用户、部署项目、上传代码等,所有操作都不会影响宿主机或其他容器。这就是 Docker 的隔离性:每个容器都有自己的文件系统、网络环境和进程空间,确保容器之间的互不干扰。

这种隔离性带来了以下好处:

  • 环境独立性:不同的项目可以在各自的容器中运行,避免环境依赖冲突。
  • 可移植性:可以将容器迁移到不同的服务器或平台,保证环境的一致性。
  • 安全性:容器之间隔离,某个容器的故障不会影响其他容器或宿主机。

在容器里下一些工具:

apt-get install sudo
sudo apt-get update
sudo apt-get install tmux

将本地的一些配置传到容器中

scp -P 20000 .bashrc .vimrc .tmux.conf root@8.130.142.189:
742ae8ae8af61e94f29912ddc17c7206-4d28b636

这样一来 就找到了熟悉的感觉

这里我把三个文件提取到本地 以后都可以方便的导入配置linux配置.zip

为容器配置免密登入

安装ssh服务

apt-get update
apt-get install openssh-server

设置允许密码登入

vim /etc/ssh/sshd_config

保证以下内容未被注释
# 允许密码认证
PasswordAuthentication yes

# 允许 root 用户登录
PermitRootLogin yes

重启ssh服务
service ssh restart

传输公钥 配置文件至容器 用户目录下的.ssh目录

scp -P 20000 authorized_keys config known_hosts root@localhost:~/.ssh

修改主动连接机的.ssh/config

win:

5efdbcf9c420c4e8ab7d6a98157dc97a-5ad7bcda

云(local)

c5d750617e38693c1f7e51b243d79374-f66304da

这里改成localhost应该也是没问题的

dd8d16ef3f8588b2fe0e4a2d05afbc7f-49dcb25d

现在密钥登入已经用过很多遍了 原理就是 把公钥传到被连接端~/.ssh 然后在主动连接端设置好别名 私钥路径 以及端口 就可以很方便的连接上

另外一个类似的玩机小技巧

我们知道win+r cmd可以启动终端 那么win+r输入自定义命令打开想要打开的程序该怎么做?

只需要将程序的exe文件创建快捷方式 移动到C:\Windows目录下 然后改名为指定命令即可

cc1cd869fcf1e29716c3634b9b9cab58-a9aebd44 d8d5fc9f56875360f3b770cc13641ab3-d8d5fc9f

小Tips

如果apt-get下载软件速度较慢,可以参考清华大学开源软件镜像站中的内容,修改软件源。


项目分区导航管道、环境变量、常用命令 ⬅️ | 26-租服务器及配置环境 | ➡️ 拓展