租服务器及配置环境
这章用不到 没买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 时依然是一个普通用户,权限有限。
可以发现 root登入 直接会进到/目录下的 root文件夹
而acs登入 进入的是 /home/acs文件夹 也对应了前面讲的 用户登入在home文件夹下
当我尝试用acs用户进入root文件夹时 出现了权限拒绝
而用root进入acs文件夹 却畅通无阻
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 密钥登录,你需要将你的私钥公钥对正确配置:
-
生成或检查现有的私钥(假设你使用的是
wei_01.pem私钥) 在本地提取公钥:ssh-keygen -y -f ~/.ssh/wei_01.pem -
将生成的公钥添加到远程服务器的
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 -
配置 SSH 客户端连接 在本地机器的
~/.ssh/config文件中,添加如下配置,以确保 SSH 使用正确的私钥连接远程服务器:Host alserver HostName 8.130.142.189 # 远程服务器的IP地址 User acs # 使用 acs 用户 IdentityFile ~/.ssh/wei_01.pem # 私钥文件路径 -
测试 SSH 连接 完成配置后,可以通过以下命令测试连接:
ssh alserver
docker
概念
方便不同云的数据迁移 方便 安全
之后的任务都在docker中进行 即使服务器版本、云服务平台不同 也能保证所有人环境相同 这就是docker的跨平台
直接从本地连接到docker里面 无关中间层
由相同镜像生成的容器是完全一样的
然后我们的项目在容器中 由镜像生成
同时反过来 项目升级 也可以变成新的镜像
这个升级的过程 可能有多个版本 而必然有相同的部分 这也同git似的 docker会为我们进行管理 把相同部分进行压缩
整理
- Docker 架构:
- Docker 通过镜像(Image)生成容器(Container)。镜像是静态的,可以理解为一个预配置的操作系统或应用程序模板。容器是运行时的实例,基于镜像启动,提供隔离的运行环境。
- 每个镜像可以生成多个容器,这些容器之间是相互独立的,但基于同样的镜像。
- 容器的跨平台优势:
- Docker 的一个关键优势是能够在不同的平台上保持一致的运行环境。无论是在本地、不同的云服务平台,还是不同版本的服务器操作系统,Docker 都能通过镜像保证相同的环境。
- 这种隔离性和跨平台兼容性确保了开发和生产环境的一致性,大大简化了开发、部署和运维流程。
- 方便数据迁移:
- Docker 提供了高度的灵活性,可以很方便地将应用程序从一个环境迁移到另一个环境。这对于云服务平台上的项目迁移尤为方便,同时确保了安全性。
- 项目升级与镜像管理:
- 项目可以通过升级容器中的内容并生成新的镜像来实现更新。与 Git 的版本管理类似,Docker 也能够通过镜像层进行管理,将相同部分压缩,避免重复存储。
- 连接到容器:
- 在开发和测试过程中,用户可以直接从本地连接到容器中进行操作,容器与宿主系统的环境是隔离的,因此无需担心平台或版本的差异。
总结来说,Docker 提供了一种高效的应用程序部署、管理和迁移方式,特别适用于多云平台和跨环境的应用开发。
迁移就直接 容器生成镜像 镜像打包到新服务器 再重新生成容器 就能保证和之前一模一样(打包带走 再拎包入住 )(致命魔术瞬间移动例子) 唉可惜没早些知道还能这样 不然之前做的那些东西也不至于都没了
将当前用户添加到docker用户组
为了避免每次使用docker命令都需要加上sudo权限,可以将当前用户加入安装中自动创建的docker用户组(可以参考官方文档):
sudo usermod -aG docker acs
执行完此操作后,需要退出服务器,再重新登录回来,才可以省去sudo权限。
镜像(images)
所有的镜像由两个部分构成 xxxx:xx (名称:版本号)
docker pull ubuntu:20.04:拉取一个镜像docker images:列出本地所有镜像docker image rm ubuntu:20.04或docker rmi ubuntu:20.04:删除镜像ubuntu:20.04docker [container] commit CONTAINER IMAGE_NAME:TAG:创建某个container的镜像docker save -o ubuntu_20_04.tar ubuntu:20.04:将镜像ubuntu:20.04导出到本地文件ubuntu_20_04.tar中docker load -i ubuntu_20_04.tar:将镜像ubuntu:20.04从本地文件ubuntu_20_04.tar中加载出来
容器(container)
把容器当成一个新的虚拟机或服务器
-
docker [container] create -it ubuntu:20.04:利用镜像ubuntu:20.04创建一个容器。 -
docker ps -a:查看本地的所有容器 -
docker [container] start CONTAINER:启动容器 -
docker [container] stop CONTAINER:停止容器 -
docker [container] restart CONTAINER:重启容器 -
docker [contaienr] run -itd ubuntu:20.04:创建并启动一个容器 -
docker [container] attach CONTAINER:进入容器先按Ctrl-p,再按Ctrl-q可以挂起容器 -
docker [container] exec CONTAINER COMMAND:在容器中执行命令 -
docker [container] rm CONTAINER:删除容器 -
docker container prune:删除所有已停止的容器 -
docker export -o xxx.tar CONTAINER:将容器CONTAINER导出到本地文件xxx.tar中 -
docker import xxx.tar image_name:tag:将本地文件xxx.tar导入成镜像,并将镜像命名为image_name:tag -
docker export/import与docker save/load的区别:export/import会丢弃历史记录和元数据信息,仅保存容器当时的快照状态 save/load会保存完整记录,体积更大 -
docker top CONTAINER:查看某个容器内的所有进程 -
docker stats:查看所有容器的统计信息,包括CPU、内存、存储、网络等信息 -
docker cp xxx CONTAINER:xxx或docker cp CONTAINER:xxx xxx:在本地和容器间复制文件 -
docker rename CONTAINER1 CONTAINER2:重命名容器 -
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
提取镜像文件 并查看
docker load -i docker_lesson_1_0.tar
docker images
创建并运行容器 安全组开放20000端口
docker run -p 20000:22 --name my_docker_server -itd docker_lesson:1.0
docker ps
(容器内的22端口映射到本地的20000端口)
成功 宝塔上也看得到
进入创建的容器 生成密码 为后续本地直接连接容器内部而不是阿里云服务器再进去做铺垫
docker attach my_docker_server
passwd
ctrl+p ctrl+q 挂起
本地(服务器上)登入
ssh root@localhost -p 20000
远程登入
记得开放安全组
acterminal:
ssh root@8.130.142.189 -p 20000
本地win:
成功
所以可以在任意设备进入容器中操作了
这意味着什么 可以想象成 自己在阿里云服务器里又创建了一个服务器 我们又可以做创建用户、做项目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:
这样一来 就找到了熟悉的感觉
这里我把三个文件提取到本地 以后都可以方便的导入配置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:
云(local)
这里改成localhost应该也是没问题的
现在密钥登入已经用过很多遍了 原理就是 把公钥传到被连接端~/.ssh 然后在主动连接端设置好别名 私钥路径 以及端口 就可以很方便的连接上
另外一个类似的玩机小技巧
我们知道win+r cmd可以启动终端 那么win+r输入自定义命令打开想要打开的程序该怎么做?
只需要将程序的exe文件创建快捷方式 移动到C:\Windows目录下 然后改名为指定命令即可
小Tips
如果apt-get下载软件速度较慢,可以参考清华大学开源软件镜像站中的内容,修改软件源。
项目分区导航:管道、环境变量、常用命令 ⬅️ | 26-租服务器及配置环境 | ➡️ 拓展
💬 评论