diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/20240703_Deain\345\256\211\350\243\205MYSQL\345\217\212MySQL\347\224\250\346\263\225.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/20240703_Deain\345\256\211\350\243\205MYSQL\345\217\212MySQL\347\224\250\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..1fa356799e4fdf12145e3b438a158bfbb6437f40 --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/20240703_Deain\345\256\211\350\243\205MYSQL\345\217\212MySQL\347\224\250\346\263\225.md" @@ -0,0 +1,353 @@ +### 程序安装 + +1. apt包管理工具,自由在线安装需要的一些依赖包 +2. 手动下载的安装包、压缩包等(要自己安装依赖包) + - 直接下载到服务器 wget + - 下载到本地再上传到服务器(用scp、sftp) + - tar.gz 二进制的安装包 dpkg +3. 下载源码再编译安装 + + + +#### Debain安装MYSQL步骤: + +1. 更新系统软件包并安装必要的依赖包。在终端中执行以下命令: + + ```bash + sudo apt update -y + sudo apt install -y wget gnupg + ``` + +2. 下载 MySQL 的官方仓库配置文件,并将其保存到 `/tmp` 目录中。在终端中执行以下命令: + + ```bash + wget https://repo.mysql.com/mysql-apt-config_0.8.30-1_all.deb -P /tmp + ``` + +3. 安装 MySQL 的官方仓库配置文件,并选择 MySQL 8 的仓库。在终端中执行以下命令 + + ```bash + sudo dpkg -i /tmp/mysql-apt-config_0.8.30-1_all.deb + ``` + + 将打开一个交互式对话框,让选择 MySQL 的版本和其他组件。按照以下步骤操作: + + - 选择 `MySQL Server & Cluster`,按回车键。 + - 选择 `mysql-8.0`,按回车键。 + - 选择 `Ok`,按回车键。 + - 选择 `Apply`,按回车键。 + +4. 安装 MySQL 8 的软件包。在终端中执行以下命令: + + ```bash + sudo apt update -y + sudo apt install -y mysql-server + ``` + + 这时会出现一个设置密码的界面 + + - 输入密码 + - 再次输入密码(确认密码) + +5. 启动 MySQL 服务,并设置开机自启动。在终端中执行以下命令: + + ```bash + sudo systemctl start mysql + sudo systemctl enable mysql + ``` + +6. 查看 MySQL 服务的状态,确保它正在运行。在终端中执行以下命令: + + ```bash + sudo systemctl status mysql + ``` + +7. 登录 MySQL 并修改密码。在终端中执行以下命令: + + ```bash + mysql -u root -p + ``` + + 会出现一个输入密码的界面 + + - 输入刚刚自己设置的密码 + +8. 在 MySQL 提示符下,执行以下命令,修改密码: + + ```bash + ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; + ``` + + 如果修改成功,您会看到类似以下的输出: + + ```bash + Query OK, 0 rows affected (0.01 sec) + ``` + + 退出 MySQL 提示符,返回终端: + + ```bash + exit + ``` + +9. 重新登录 MySQL,使用新的密码。在终端中执行以下命令: + + ```bash + mysql -u root -p + # 输入刚刚更改的新密码进行登录 + ``` + + +#### MYSQL8 配置远程访问 + +1. 使用root登录MySQL + + ```bash + mysql -u root -p + # 输入刚刚更改的新密码进行登录 + ``` + +2. 使用mysql数据库 + + ```sql + use mysql; + ``` + +3. 查看root账号权限 + + ```sql + select user,host from user; + ``` + + ![20240703_mysql权限](./img/20240703_mysql权限.png) + + - 如果root不是%,使用语句更新 + + ```sql + update user set host='%' where user='root'; + ``` + +4. 开启3306端口访问权限 + + - 开启防火墙(开机自启动) + + ```sql + ufw enable + ``` + + - 开启3306端口 + + ```sql + ufw allow 3306 + ``` + + - 查看防火墙状态 + + ```sql + ufw status + ``` + + - 开启ssh远程连接 + + ```bash + cd /etc/ssh + vim sshd_config + #圈出来那行取消注释 + ``` + + ![20240703_ssh远程连接](./img/20240703_ssh远程连接.png) + + - 进入MySQL编辑配置文件 + + ```bash + cd /etc/mysql/mysql.conf.d/ + vim mysqld.cnf + #进入配置文件添加圈出来的那行 + ``` + + ![20240703_mysql配置文件](./img/20240703_mysql配置文件.png) + +5. 重启MySQL + + ```bash + systemctl restart mysql + ``` + +6. 远程登陆连接mysql + + ```bash + #mysql -u root -p -h ip地址 + mysql -u root -p -h 47.120.33.3 + ``` + + + +#### 数据库操作MYSQL + +##### 库管理: + +1. 登录数据库 + + ```bash + mysql -u root -p + # 输入密码 + ``` + +2. 创建数据库 + + ```sql + creat database 库名; + ``` + +3. 使用数据库 + + ```sql + use 库名; + ``` + +4. 查看当前使用的数据库 + + ```sql + select database (); + ``` + +5. 删除数据库 + + ```sql + drop database 库名; + ``` + +##### 表管理: + +1. 创建数据表 + + ```sql + creat table 表名( + id int auto_increment primary key, + name varchar(10) not null, + sex char(1), + ); + #auto_increment 自增 + #primary key 主键 + ``` + +2. 查看表结构 + + ```sql + desc 表名; + ``` + +3. 修改表结构 + + ```sql + alter table 表名 add column 列名 VARCHAR(100); + ``` + +4. 删除数据表 + + ```sql + drop table 表名; + ``` + + + +##### 数据操作 + +1. 插入数据 + + ```sql + insert into 表名(列1,列2) values ('值1','值2'); + ``` + +2. 更新数据 + + ```sql + update 表名 set 列='' where 列=''; + #更新指定列的值 where 条件 + ``` + +3. 删除数据 + + ```sql + delete from 表名 where 列=''; + ``` + + + +##### 查询语句 + +1. 查询所有记录 + + ```sql + select * from 表名; + ``` + +2. 查询特定列表 + + ```sql + selecct 列1,列2 from 表名; + ``` + +3. 查询特定条件 + + ```sql + select * from 表名 where 指定列='值'; + ``` + +4. 查询去重 + + ```sql + select distinct 列名 from 表名 + #查询该表指定列去除重复项 + ``` + +5. 排序 + + ```sql + select * from 表名 order by 列名 asc + #asc:升序 将该表指定列按升序排序 + #desc:降序 + ``` + + + +#### 作业: + +1. 生成sql脚本文件(作业),如何在linux导入sql文件,执行它, + + ```sql + #cmd 终端上传文件到服务器 + scp mysql_test.sql root@47.120.33.3:/home + #打开服务器远程登陆mysql + mysql -u root -p -h 47.120.33.3 + #导入刚刚上传的数据库 + source /home/mysql_test.sql + #查看数据库是否存在 + show databases; + #查看数据表是否存在 + show tables; + ``` + + ![20240703_导入的库和表](./img/20240703_导入的库和表.png) + +2. 如何备份和恢复数据库 < > + + - 备份 + + ```bash + mysqldump -u root -p mysql_test > /home/mysql_testbak.sql + ``` + + - 恢复 + + ```bash + mysql -u root -p mysql_test < /home/mysql_testbak.sql + ``` + + + +3. 数据库分 + + 1. 服务端:提供数据库服务那一端。mysql-server + 2. 客户端: 连接服务器并使用数据库的那一端。cmd + diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/8.DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/8.DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..b7d10dc8efb27d358da8188adac53261c5151c7e --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/8.DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260.md" @@ -0,0 +1,50 @@ +## 阶段一,部署以下不同的语言开发的各种系统,以安装相应的语言运行环境(如C#的SDK或运行时,Java的JDK或运行时)、相应数据等mysql、Postgresql等,来支撑以下应用,不得使用集成环境或工具(如宝塔等,docker容器等) + + +1. C#Web应用: + + +地址:https://gitee.com/zuohuaijun/Admin.NET + + +2. Java Web应用 + +地址:https://gitee.com/wuxw7/MicroCommunity + + +3. Python Web应用 + +地址:https://gitee.com/insistence2022/dash-fastapi-admin + + +4. PHP Web应用 + +地址:https://gitee.com/meystack/swiftadmin + +5. Go Web应用 + +地址:https://gitee.com/tiger1103/gfast + +6. NodeJs Web应用 + +地址:https://strapi.io/ + + +## 阶段二,将以上第1、第4、第6个项目,使用容器技术的方式部署到Debian服务器,要求前端正常nginx部署,后端使用Docker,而且必须是自己手写配置文件的形式部署 + +> 建议,先了解清楚Docker的相关概念和理论,再实践动手,效率更高噢^_^ + +## 阶段三,在本地虚拟机上,部署一个高可用,并具有横向扩容能力的k8s集群,部署的应用为nginx + +要求如下: + +1. 先搞明白k8s的一些概念和整体架构,再做一些简单的小部署,比如单台部署,再着手 +2. 虚拟机部署 +- 数量:共部署10台虚拟机。 +- 分配:其中2台作为master节点,8台作为node工作节点。 +3. IP分配 +- Master节点IP: + - 虚拟机1:192.168.18.10 + - 虚拟机2:192.168.18.11 +- Node节点IP(假设使用192.168.18.0/24网络的后续IP地址): + - 虚拟机3-10的IP地址可以根据需要分配,例如从192.168.18.20开始连续分配。 \ No newline at end of file diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/8.DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/8.DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..4e5eaa4194667c2c1c531bc7d3cd058108e31dfd --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/8.DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260.md" @@ -0,0 +1,30 @@ +## 阶段一,部署以下不同的语言开发的各种系统,以安装相应的语言运行环境(如C#的SDK或运行时,Java的JDK或运行时)、相应数据等mysql、Postgresql等,来支撑以下应用,不得使用集成环境或工具(如宝塔等,docker容器等) + + +1. C#Web应用: + + +地址:https://gitee.com/zuohuaijun/Admin.NET + + +2. Java Web应用 + +地址:https://gitee.com/wuxw7/MicroCommunity + + +3. Python Web应用 + +地址:https://gitee.com/insistence2022/dash-fastapi-admin + + +4. PHP Web应用 + +地址:https://gitee.com/meystack/swiftadmin + +5. Go Web应用 + +地址:https://gitee.com/tiger1103/gfast + +6. NodeJs Web应用 + +地址:https://strapi.io/ \ No newline at end of file diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/C# web 1.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/C# web 1.md" new file mode 100644 index 0000000000000000000000000000000000000000..d6766487d6048300401927c8cda5417fc7a4f25c --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/C# web 1.md" @@ -0,0 +1,116 @@ +# C# web + +1. 由于Debian原生并不支持.NET应用程序的直接运行,需要先安装.NET的运行环境 + + ```bash + # 在微软官网下载.net安装包到服务器 + wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb + + dpkg -i packages-microsoft-prod.deb + + # 安装.net + apt-get update + apt-get install -y dotnet-sdk-8.0 + ``` + +2. 下载mysql + + ```bash + apt updat + wget https://dev.mysql.com/get/mysql-apt-config_0.8.30-1_all.deb + dpkg -i mysql-apt-config_0.8.30-1_all.deb + ``` + +3. 下载nginx + + ```bash + apt update + apt install nginx + ``` + +4. 从Gitee下载项目到本地(D盘) + + ```bash + git clone https://gitee.com/zuohuaijun/Admin.NET + ``` + +5. shift+右键 打开 powershell 运行 Admin.NET\Web 文件夹 + +6. ```bash + npm config set registry=https://registry.npmmirror.com #设置淘宝镜像源-新 + npm install   #下载依赖 + npm run dev   #运行程序,出现以下代码可直接 Ctrl+C 终止进程 + + > admin.net@2.4.33 dev + > vite + + Port 8888 is in use, trying another one... + + VITE v5.3.4 ready in 1221 ms + + ➜ Local: http://localhost:8889/ + ➜ Network: http://192.168.1.101:8889/ + ➜ Network: http://192.168.72.1:8889/ + ➜ Network: http://192.168.100.1:8889/ + ➜ press h + enter to show help + + ``` + +8. ```bash + npm run build #打包 + #打包完会在 Admin.NET\Web 文件夹里得到一个dist文件夹,将dist上传到虚拟机的/opt/dist下 + ``` + +9. ```bash + #对 /etc/nginx/site-enable/default 文件中 server 块做以下配置 + vim /etc/nginx/sites-available/default + + server { + # 监听 8888 端口 + listen 8888; + location / { + root /opt/dist; + index index.html index.htm; + } + location /api/ { + proxy_pass http://192.168.1.30:8888;#ip:端口号 + proxy_http_version 1.1; + } + location /hubs/ { + proxy_pass http://192.168.1.30:8888;#ip:端口号 + proxy_http_version 1.1; + } + location /upload/ { + alias /opt/adminnet/wwwroot/Upload/; + } + } + + nginx -t #检查配置文件 + systemctl restart nginx #重启 Web 服务器 + #使用 访问前端页面 + ``` + +10. vscode 打开项目进入 `/Admin.NET/Admin.NET/Admin.NET.Web.Entry` 文件夹下,使用 `dotnet watch --framework net8.0` 拉取依赖和启动服务。 + + 后端服务启动完成后,显示如图所示: + + ![202407222218423](https://oss.isiou.cn/images/202407222218423.png) + +11. 返回前端页面,如图所示: + + ![202407222219659](https://oss.isiou.cn/images/202407222219659.png) + + 登陆后页面: + + ![202407222219751](https://oss.isiou.cn/images/202407222219751.png) + + + +12. 把整个项目上传到虚拟机 /opt目录下 + +```bash +#拉取依赖和启动服务 +root@debian1:~# cd /opt/Admin.NET/Admin.NET.Web.Entry +root@debian1:/opt/Admin.NET/Admin.NET.Web.Entry# dotnet watch --framework net8.0 +``` + diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/debian\345\256\211\350\243\205go\351\201\207\350\247\201\347\232\204\351\227\256\351\242\230.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/debian\345\256\211\350\243\205go\351\201\207\350\247\201\347\232\204\351\227\256\351\242\230.md" new file mode 100644 index 0000000000000000000000000000000000000000..38c41a062fe970fc77b2c718676e77f58c0d1c6d --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/debian\345\256\211\350\243\205go\351\201\207\350\247\201\347\232\204\351\227\256\351\242\230.md" @@ -0,0 +1,24 @@ +1.用wget下载安装包的时候 + +```bash +##用wget https://go.dev/dl/go1.20.1.linux-amd64.tar.gz的时候出现下面这个情况 +Resolving go.dev (go.dev)... 216.239.34.21, 216.239.36.21, 216.239.38.21, ... +Connecting to go.dev (go.dev)|216.239.34.21|:443... connected. +GnuTLS: The TLS connection was non-properly terminated. +Unable to establish SSL connection. +##解决办法 目前没有找到解决办法,但是重启以下服务器之后就可以正常下载了 +``` + +2.debian12出现dpkg: 警告: 在 PATH 环境变量中找不到 ldconfig 或没有可执行权限 dpkg: 警告: 在 PATH 环境变量中找不到 start-stop-daemon 或没有可执行权限 dpkg: 错误: 2 在环境变量 PATH 中找不到该程序,或不可执行 提示:root 的 PATH 环境变量通常应当包含 /usr/local/sbin、/usr/sbin 和 /sbin + +```bash +##在 Debian 12 中,出现这样的警告和错误消息,通常是因为 PATH 环境变量配置不正确,导致系统无法找到和执行 dpkg 在安装或卸载软件包时所需的程序,例如 ldconfig 和 start-stop-daemon + +##1.检查当前 PATH:首先,您可以检查当前的 PATH 环境变量,使用以下命令: +echo $PATH +##2.修复 PATH 环境变量:如果输出的 PATH 环境变量中没有 /usr/local/sbin、/usr/sbin 和 /sbin,您需手动将它们添加到 PATH 中。可以通过以下命令临时修改 +export PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin +##3.立即生效:如果您将修改添加到了 ~/.bashrc 或 ~/.profile 中,请运行以下命令使其立即生效: +source ~/.bashrc 或者 source ~/.profile +``` + diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/go web\345\272\224\347\224\250.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/go web\345\272\224\347\224\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..b4a72f539cdb1c471a98d8ec86b648467ad52a11 --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/go web\345\272\224\347\224\250.md" @@ -0,0 +1,137 @@ +Go Web应用 + +前题条件:安装git,nodejs,nginx,Go,mysql + +```sh +#安装Go +apt update +apt install golang +go version #验证Go安装 + +#安装git +apt install git + +#安装nodejs + curl -sL https://deb.nodesource.com/setup_18.x | bash - + apt install nodejs + node --version #验证node安装 + npm --version #验证npm安装 + + #安装nginx + apt install nginx + +#安装mysql +wget https://repo.mysql.com/mysql-apt-config_0.8.29-1_all.deb +dpkg -i mysql-apt-config_0.8.29-1_all.deb +apt update +apt install mysql-server +``` + +1.运行前端 + +```sh +# 克隆项目 +git clone -b v3.2 https://gitee.com/tiger1103/gfast-ui.git #前端 +# 进入项目 +cd gfast-ui +# 安装依赖 +npm install --registry=https://registry.npmmirror.com + +#修改gfast-ui中的.env.development和.env.production 文件 +vim .env.developme +# 本地环境接口地址 +VITE_API_URL = 'http://192.168.1.134:8808/' 修改ip为虚拟机的ip + +vim .env.production +# public path 配置线上环境路径(打包)、本地通过 http-server 访问时,请置空即可 +VITE_PUBLIC_PATH = ' ' # 删除引号内的内容 +# 运行项目 +npm run dev +# 打包发布 +npm run build #打包后,会在~/gfast-ui下生成一个dist文件 +``` + +2、运行后端 + +1. 克隆后端项目 + + ```sh + git clone https://gitee.com/tiger1103/gfast.git + ``` + +2. 将后端项目的SQL文件导入数据库 + + ```sql + root@debian3:~# mysql -u root -p #登录数据库 + Enter password: + + mysql> create database gfast ; #创建数据库 + Query OK, 1 row affected (0.01 sec) + + mysql> use gfast; #选择库 + Database changed + mysql> source /root/gfast/resource/data/gfast-v32.sql #导入SQL文件 + ``` + +3. 修改配置 manifest/config/config.yaml.bak 复制改为manifest/config/config.yaml + + ```bash + root@debian3:~/gfast/manifest/config# cp config.yaml.bak config.yaml + #并修改config.yaml中的default下的link + root@debian3:~/gfast/manifest/config# ls + config.yaml config.yaml.bak + vim config.yaml #修改link下的mysql登录的用户名、密码、ip + ``` + + ![image-20240725223339099](C:\Users\xxp12\AppData\Roaming\Typora\typora-user-images\image-20240725223339099.png) + +4. 打包可执行文件 + + ```sh + root@debian3:~/gfast# go build -o gfast_app ./main.go #gfast_app打包后的包名 + ``` + + + +5. 配置nginx + + ```sh + cd /etc/nginx/sites-enabled + #添加新的内容 如图 + upstream localhost { + server 127.0.0.1:8808; # 指定前端能运行的端口 + } + server { + # 监听 8889 端口 + listen 8889; + + location /{ + root /root/gfast-ui/dist; #上文生成的dist文件夹对应位置 + index index.html index.htm; + } + } + + #检查nginx是否有错 + nginx -t + #重启nginx + systemctl restart nginx + ``` + + + +6. 运行后端项目 + + ```sh + root@debian3:~/gfast# ./gfast_app + ``` + +7. 访问 192.168.1.134:8888 + + + + + + + + + diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/goggg.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/goggg.md" new file mode 100644 index 0000000000000000000000000000000000000000..d14bfcd5739bad6f6b5796d20d2926a7bb6f3894 --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/goggg.md" @@ -0,0 +1,153 @@ +#### 配置环境 + +开两个窗口,分别部署前端后端 + +#### 前端 + +1. 配置环境 + + ```sh + apt update + apt install git + apt install gnupg + apt install npm + apt install redis + + wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz#下载 + tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz#解压 + + ``` + + + +2. 添加变量 + + ```sh + echo "export PATH=/usr/local/go/bin:${PATH}" | tee -a $HOME/.profile + source $HOME/.profile + ``` + + + +3. 克隆到/etc/目录内 + + ```sh + git clone -b os-v3.2 https://gitee.com/tiger1103/gfast-ui.git + cd /etc/gfast-ui + npm install --registry=https://registry.npmmirror.com#下载依赖 + ``` + + + +4. 修改配置 + + ```sh + vim /etc/gfast-ui/.env.development + VITE_API_URL = 'http://192.168.1.134:8808/'#改成本地ip + vim /etc/gfast-ui/.env.production + VITE_PUBLIC_PATH= ''#删除/sys/ + ``` + + + +5. 运行项目并生成dist文件夹 + + ```sh + npm run dev + npm run build#成功会在gfast目录下生成dist文件夹 + ``` + +6. 配置nginx + + ```sh + vim /etc/nginx/sites-enabled/default + #添加 + upstream localhost { + server 127.0.0.1:8808;#指定有效的上游服务器地址和端口 + } + #修改 + server { + listen 8889; + + location / { + # First attempt to serve request as file, then + # as directory, then fall back to displaying a 404. + root /etc/gfast-ui/dist; + index index.html index.htm; + } + + } + #重启nginx + systemctl restart nginx + ``` + + #### 后端 + + 修改redis配置 + + ```sh + vim /etc/redis/redis.conf + #bind修改为自己ip + bind 192.168.1.134 -::1 + #添加redis密码 + requirepass 123456 + + vim /etc/gfast/manifest/config/config.yaml + #redis模块下 + address: 192.168.1.134:6379#本地ip + pass: "123456"#maxActive下添加密码 + + #最后重启服务 + ``` + + 克隆到/etc/文件夹中 + + ```sh + git clone https://gitee.com/tiger1103/gfast.git + ``` + + 更改go国内镜像源 + + ```sh + go env -w GO111MODULE=on + go env -w GOPROXY=https://goproxy.cn + ``` + + 安装依赖 + + ```sh + go mod tidy + ``` + + MYSQL + + ```sh + #下载完要完成远程连接 + #登录到mysql,创建数据库执行脚本 + CREATE DATABASE gfast; + USE gfast; + source /etc/gfast/resource/data/gfast-v32.sql; + ``` + + 修改配置 + + ```sh + vim /opt/gfast/manifest/config/config.yaml + #修改database的default的link + link: "mysql:root:12333@tcp(192.168.1.134:3306)/gfast?charset=utf8mb4&parseTime=true&loc=Local"#root为用户,后为密码,gfast是数据库名,修改自己ip + #到/etc/gfast/执行 + go build -o gfast-app ./main.go + ``` + +​ 两个窗口同时开启前端后端 + +```sh +cd /etc/gfast-ui/ +npm run dev +#运行后可以使用本地ip访问登陆页面 + +cd /etc/gfast/ +./gfast-app +#成功后就能登陆了 +``` + diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/php\345\256\214\346\225\264\347\211\210.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/php\345\256\214\346\225\264\347\211\210.md" new file mode 100644 index 0000000000000000000000000000000000000000..5dc86ab36afa823d37519378544ea7347c819d00 --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/php\345\256\214\346\225\264\347\211\210.md" @@ -0,0 +1,85 @@ +## PHP(不能用教室网络,只能用自己的热点) + +需要下载 mysql + +```php +wget https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb +apt install gnupg + dpkg -i mysql-apt-config_0.8.32-1_all.deb + apt update + apt install mysql-server +mysql -u root -p; +``` + +### 安装 PHP + +PHP 以及 PHP的扩展 + +```bash +apt-get install php php-fpm php-curl php-cli php-zip php-mysql php-xml php-redis +``` + +```bash +apt install imagemagick exif +``` + +查看 PHP 当前版本(确认有没有下载好) + +```bash +php -v +``` + +#### 克隆 gitee 项目 + +如果没有下载 git 就下载一下 + +```bash +apt install git +``` + +``` +git clone https://gitee.com/meystack/swiftadmin.git +``` + +进入 git 下来的 swiftadmin下重启服务 + +```bash +cd swiftadmin +systemctl restart php8.2-fpm.service +``` + +#### 安装 redis + +```bash +apt install redis +``` + +#### 启动进程 + +```bash +# 开发进程 +php start.php start +# 守护进程 +php start.php start -d +``` + +#### 进入网页 + +打开浏览器输入[http://192.168.1.130:8787/index](https://gitee.com/link?target=http%3A%2F%2F192.168.1.130%3A8787%2Findex) + +192.168.1.130是自己虚拟机上的ip + +检查安装环境直接下一步 + +#### 创建数据库页面 + +```bash +# 数据库密码是虚拟机上数据库的密码 +# 数据库主机好像也可以是默认的但是改成数据库主机ip吧 +# 其他的如果没有更改就不用改 +# 下一步安装 +``` + +安装成功后访问后台输入用户名 admin 密码 admin888 进入页面就成功了 + +当成功打开一次网页后 /root/swiftadmin/app下会缺失一个install文件夹 使用工具传进去就可以了 \ No newline at end of file diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/python\351\241\271\347\233\256.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/python\351\241\271\347\233\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..981eac6f22b5252c49204d0e9b3ae399e0c66b99 --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/python\351\241\271\347\233\256.md" @@ -0,0 +1,180 @@ +基于dash fastAP + +1. 先安装mysql(具体参考自己之前的笔记) + + 1. ```bash + `加载更新列表` + root@lst:~# apt update + root@lst:~# wget https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb + root@lst:~# dpkg -i mysql-apt-config_0.8.32-1_all.deb + [在这里可能会遇到的问题: + dpkg: regarding mysql-apt-config_0.8.32-1_all.deb containing mysql-apt-config, pre-dependency problem: + mysql-apt-config pre-depends on gnupg + gnupg is not installed. # 会显示这个没安装,安装一下就可以往后走了 apt install gnupg + + dpkg: error processing archive mysql-apt-config_0.8.32-1_all.deb (--install): + pre-dependency problem - not installing mysql-apt-config + Errors were encountered while processing: + mysql-apt-config_0.8.32-1_all.deb + ] + $ 选项 + 1. MySQL Server & Cluster (Currently selected: ... + 2. mysql-8.4-lts + 3. Ok + `加载更新列表` + root@lst:~# apt update + + `安装MySQL` + root@lst:~# apt-get install mysql-server + `输入两次密码即可安装成功 + [如果是克隆过来的虚拟机,没有这一步,那就思考一下你的MySQL的root用户的密码了] + + `查看mysql的状态` + root@lst:~# systemctl status mysql + ``` + + 2. 创建新用户为后面做准备 + + ```bash + 先进入mysql:mysql -u root -p 输入密码登录 + # 建议新建用户,如果用root,在实际生产环境中给root权限很危险 + 创建新用户 + mysql> create user ''@'%' identified by '密码'; + Query OK, 0 rows affected (0.10 sec) + mysql> flush privileges; # 刷新 + ``` + + 3. 给新用户授权(在root用户下执行) + + ```bash + GRANT all ON *.* TO 'lusi'@'%'; # GRANT all ON *.* TO '用户名'@'%'; + #重启mysql + systemctl restart mysql + ``` + +2. 查看python3版本号,3.11.2符合要求 + + ![](https://pic.imgdb.cn/item/669f7e09d9c307b7e9e87329.png) + +3. 安装git + + ```bash + sudo apt install git + git --version + git version 2.39.2 说明安装好了 + ``` + +4. 新建一个项目文件夹 + + [建议:cd /opt下新建文件夹] + + 1. cd进到新建的文件夹里,就开始看教程了 + + ![](https://pic.imgdb.cn/item/669f7e30d9c307b7e9e8934f.png) + + 2. /op/python 路径下执行以上代码,把项目克隆到本地 + + 3. 执行第三步之前先安装 + + ```bash + apt install python3-pip + pip3 install -r requirements.txt + # 安装后继续执行会出现以下错误,我知道你急,但先别着急,解决方案来了 + ``` + + ![](https://pic.imgdb.cn/item/669f7f0cd9c307b7e9e95690.png) + + 4. 方案一 + + ```bash + apt install pipx + pipx install -r requirements.txt + # 还是报错了 再试试下面这个 + ``` + + ![](https://pic.imgdb.cn/item/669f80f1d9c307b7e9ec08f5.png) + + ```bash + #如果这个还不行的话只能一个一个的手动安装依赖了 + pip3 install -r requirements.txt --break-system-packages + # 这时就会出现以下错误,实际上就是下载依赖的时候网络连接超时了,别急,我们还有解决方案 + + ` 这也可能是我当时的网络环境不太好,没有安装好,可以换一个网络环境再试试,由于我的条件不允许,我直接使用普兰B了 + ``` + + ![](https://pic.imgdb.cn/item/669f8125d9c307b7e9ec3476.png) + + 5. 方案二 + + ![](https://pic.imgdb.cn/item/669f8509d9c307b7e9ef9844.png) + + ```bash + # 创建虚拟环境来下载依赖包 + `成功如下 + ``` + + ![](https://pic.imgdb.cn/item/669f870ad9c307b7e9f159ff.png) + + 6. 这时候就按照教程可以往下走了,在 `/opt/python/dash-fastapi-admin` 下执行开发的前端命令 + + ![](https://pic.imgdb.cn/item/669f8858d9c307b7e9f276c5.png) + + ```bash + # 插播一条通知:这里第二步可以蛮跳过 + 直接第三步,就是'运行前端',运行之后就会出现一下情形 + ``` + + ![](https://pic.imgdb.cn/item/669f8badd9c307b7e9f53350.png) + + 7. 这时候相同IP下再开一个新的终端(称之为"第二窗口"),切换到 /opt/python/dash…… 目录下,执行开发的后端命令 + + ![](https://pic.imgdb.cn/item/669fa286d9c307b7e90cafd9.png) + + ```bash + # 看这里看这里!!!执行命令之前,先进入虚拟环境:source myenv/bin/activate + ``` + + - 配置环境 + + 数据库环境 + + ```bash + 1. 这时候再打开一个相同IP的新终端(称之为"第三窗口"),登录一开始我们新创建的用户 + 创建一个数据库:create database 数据库名; #数据库名可以和它的一样,也可以自己命名 + 使用新建的数据库:use 数据库名; + 执行:source /opt/python/dash-fastapi-admin/dash-fastapi-backend/sql/dash-fastapi.sql + '[要注意:这里的路径是我自己路径,根据自己情况进行修改] + 出现一堆 ok! 即可 + + 2. 然后回到第二个终端窗口,vim .env.dev + 把[.env.dev]文件里面的数据库配置改一下,改成自己的 + + `配置数据库常见问题 + 1. '数据库端口'要一致,默认是3306,mysql改了,下面数据库配置的数据库端口也要改 + 2. '数据库用户名和密码',可以用root,也可以用新建的,但是两边要一致 + 3. '数据库名称',要确认在这个用户下有这个数据库,数据库名要一致 + ``` + + ![](https://pic.imgdb.cn/item/66a1b4b2d9c307b7e9ef05f1.png) + + ![](https://pic.imgdb.cn/item/66a1b4c3d9c307b7e9ef117d.png) + + ![](https://pic.imgdb.cn/item/66a1abb8d9c307b7e9e68d0b.png) + + redis环境 + + ```bash + '可不做,就把[.env.dev]文件里面的redis配置注释掉就行 + ``` + + - 运行后端 + + ```bash + python3 app.py --env=dev + ``` + +5. 测试 + + ```bash + 打开浏览器 输入IP地址+:8088——>'192.168.45.141:8088 + ``` diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/\345\246\202\344\275\225\345\234\250debian\344\270\212\351\235\242\351\203\250\347\275\262PHP.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/\345\246\202\344\275\225\345\234\250debian\344\270\212\351\235\242\351\203\250\347\275\262PHP.md" new file mode 100644 index 0000000000000000000000000000000000000000..0e7e4d5f741b08410660e09c07c2fbb4b938879d --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/DevOps\346\214\201\347\273\255\350\277\220\347\273\264\345\271\263\345\217\260/\345\246\202\344\275\225\345\234\250debian\344\270\212\351\235\242\351\203\250\347\275\262PHP.md" @@ -0,0 +1,121 @@ +1.默认 Debian 存储库可能不包含最新的 PHP 版本,添加了一个 PPA 存储库,安装操作存储库所需的一些依赖项。 + +```bash +sudo apt update +sudo apt install software-properties-common lsb-release apt-transport-https ca-certificates -y +``` + +2.在安装软件包后导入存储库 GPG 密钥。 + +```bash +sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg +``` + +3.启用 ***sury*** PPA 存储库。 + +```bash +sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' +``` + +4.再次更新数据库 + +```bash +sudo apt update +``` + +5.列出可用的 PHP 版本。 没有添加最新版的时候之后7.4的版本,添加了之后可以直接安装8.3的版本 + +```bash +sudo apt install php8.3 +``` + +6.安装完成后,通过检查版本来验证是否安装正确。 + +```bash +php -v +``` + +7.安装PHP的扩展 + +```bash +sudo apt install php8.3-{cli,zip,bz2,mysql,curl,mbstring,intl,common} +``` + +8.将 PHP 8.3 与 Apache 结合使用 + +```bash +##1.HP 代码将使用 Apache 中内置的 mod_php 模块执行。只需安装 Apache Web 服务器及其 php 模块即可。 +sudo apt install apache2 libapache2-mod-php8.3 + +##2.请记住启用将处理 PHP 代码的 mod_php 模块: +sudo a2enmod php8.3 + +##3.必须要重启apache2 +systemctl restart apache2 +``` + +9.将 PHP 8.3 与 Nginx 结合使用 + +```bash +##安装 PHP-FPM(FastCGI 进程管理器) +sudo apt install nginx php8.3-fpm + +##更新 Nginx 配置,以便它使用 FastCGI 协议将传入请求转发到 PHP-FPM。 +server { + listen 80; + server_name mysite.example.com;##mysite.example.com表示域名 + root /var/www/mysite;##根目录文件,显示页面 + index index.php index.html; + + location ~ \.php$ { + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; + } +} +``` + +10.检查配置文件是否出错 + +```bash +nginx -t +``` + +11.重启nginx + +```bash + + +sudo systemctl restart nginx +``` + + + +​ **遇见的问题** + +1.无法提取安装包 + +```bash +Failed to fetch https://packages.sury.org/php/pool/main/p/pcre2/libpcre2-8-0_10.40-1%2b0%7e20220713.16%2bdebian11%7e1.gbpb6cec5_amd64.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Failed to fetch https://packages.sury.org/php/pool/main/d/debsuryorg-archive-keyring/debsuryorg-archive-keyring_2024.02.05%2b0%7e20240205.1%2bdebian11%7e1.gbp343037_all.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Failed to fetch https://packages.sury.org/php/pool/main/p/php-defaults/php-common_94%2b0%7e20240205.51%2bdebian11%7e1.gbp6faa2e_all.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Failed to fetch https://packages.sury.org/php/pool/main/p/php8.3/php8.3-common_8.3.9-1%2b0%7e20240708.36%2bdebian11%7e1.gbp429c36_amd64.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Failed to fetch https://packages.sury.org/php/pool/main/p/php8.3/php8.3-opcache_8.3.9-1%2b0%7e20240708.36%2bdebian11%7e1.gbp429c36_amd64.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Failed to fetch https://packages.sury.org/php/pool/main/p/php8.3/php8.3-readline_8.3.9-1%2b0%7e20240708.36%2bdebian11%7e1.gbp429c36_amd64.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Failed to fetch https://packages.sury.org/php/pool/main/p/php8.3/php8.3-cli_8.3.9-1%2b0%7e20240708.36%2bdebian11%7e1.gbp429c36_amd64.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Failed to fetch https://packages.sury.org/php/pool/main/p/php8.3/libapache2-mod-php8.3_8.3.9-1%2b0%7e20240708.36%2bdebian11%7e1.gbp429c36_amd64.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Failed to fetch https://packages.sury.org/php/pool/main/p/php8.3/php8.3_8.3.9-1%2b0%7e20240708.36%2bdebian11%7e1.gbp429c36_all.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing? + +##解决方法: +sudo apt update ##重新刷新数据库再进行安装 +``` + + + +2.nginx -t的时候提示/etc/nginx/nginx.conf 文件错误 + +```bash +1.检查nginx.conf文件里面的格式是否有错,server是包含在http里面的 +2.检查代码是否写错 +``` + diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/PHP/debian\351\203\250\347\275\262PHP\351\201\207\350\247\201\347\232\204\351\227\256\351\242\230.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/PHP/debian\351\203\250\347\275\262PHP\351\201\207\350\247\201\347\232\204\351\227\256\351\242\230.md" new file mode 100644 index 0000000000000000000000000000000000000000..cac4ee9889ec86561fc42ce62885beaafee6ba53 --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/PHP/debian\351\203\250\347\275\262PHP\351\201\207\350\247\201\347\232\204\351\227\256\351\242\230.md" @@ -0,0 +1,27 @@ +1.无法提取安装包 + +```bash +Failed to fetch https://packages.sury.org/php/pool/main/p/pcre2/libpcre2-8-0_10.40-1%2b0%7e20220713.16%2bdebian11%7e1.gbpb6cec5_amd64.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Failed to fetch https://packages.sury.org/php/pool/main/d/debsuryorg-archive-keyring/debsuryorg-archive-keyring_2024.02.05%2b0%7e20240205.1%2bdebian11%7e1.gbp343037_all.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Failed to fetch https://packages.sury.org/php/pool/main/p/php-defaults/php-common_94%2b0%7e20240205.51%2bdebian11%7e1.gbp6faa2e_all.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Failed to fetch https://packages.sury.org/php/pool/main/p/php8.3/php8.3-common_8.3.9-1%2b0%7e20240708.36%2bdebian11%7e1.gbp429c36_amd64.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Failed to fetch https://packages.sury.org/php/pool/main/p/php8.3/php8.3-opcache_8.3.9-1%2b0%7e20240708.36%2bdebian11%7e1.gbp429c36_amd64.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Failed to fetch https://packages.sury.org/php/pool/main/p/php8.3/php8.3-readline_8.3.9-1%2b0%7e20240708.36%2bdebian11%7e1.gbp429c36_amd64.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Failed to fetch https://packages.sury.org/php/pool/main/p/php8.3/php8.3-cli_8.3.9-1%2b0%7e20240708.36%2bdebian11%7e1.gbp429c36_amd64.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Failed to fetch https://packages.sury.org/php/pool/main/p/php8.3/libapache2-mod-php8.3_8.3.9-1%2b0%7e20240708.36%2bdebian11%7e1.gbp429c36_amd64.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Failed to fetch https://packages.sury.org/php/pool/main/p/php8.3/php8.3_8.3.9-1%2b0%7e20240708.36%2bdebian11%7e1.gbp429c36_all.deb Cannot initiate the connection to packages.sury.org:443 (2400:52e0:1a01::912:1). - connect (101: Network is unreachable) +E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing? + +##解决方法: +sudo apt update ##重新刷新数据库再进行安装 +``` + + + +2.nginx -t的时候提示/etc/nginx/nginx.conf 文件错误 + +```bash +1.检查nginx.conf文件里面的格式是否有错,server是包含在http里面的 +2.检查代码是否写错 +``` + diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/PHP/php\351\203\250\347\275\262.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/PHP/php\351\203\250\347\275\262.md" new file mode 100644 index 0000000000000000000000000000000000000000..8c48de8e4cb4dd4a79dbf1535b2fbead2a070395 --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/PHP/php\351\203\250\347\275\262.md" @@ -0,0 +1,118 @@ +大部分内容 https://cn.linux-console.net/?p=31557 + +1. 要先下载mysql + +1. 更新 + + ```bash + apt update + ``` + +2. 添加了一个 PPA 存储库 + + ```bash + apt install software-properties-common lsb-release apt-transport-https ca-certificates -y + ``` + + + +3. 在安装软件包后导入存储库 GPG 密钥 + + ```bash + wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg + ``` + + + +4. 在 Debian 系统上启用 ***sury*** PPA 存储库 + + ```bash + sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' + ``` + + + +5. 确认存储库正常运行 + + ```bash + apt update + ``` + + + +7. 可以查看版本 + + ```bash + apt list -a php + ``` + + + +8. 更新操作系统软件包列表后,可以通过执行下面给出的命令来安装 PHP 8.3 + + ```bash + apt install php8.3 + ``` + + + +9. 安装完成后,通过检查版本来验证是否安装正确 + + ```bash + php --version + ``` + + + +10. 安装PHP 8.3扩展 + + ```bash + apt-get install php php-fpm php-curl php-cli php-zip php-mysql php-xml php-redis -y + ``` + + + +11. 下载redis + + ```bash + apt install redis -y + ``` + + + +12. 克隆,如果没有命令的话要下载 git + + ```bash + apt install git -y + git clone https://gitee.com/meystack/swiftadmin.git + ``` + + + +11. 重启服务 + + ```bash + systemctl restart php8.3-fpm + ``` + + + +14. 启动开发服务与 启动守护进程(要在有start.php的上一级执行,比如我的是/root/swiftadmin/执行) + + ```bash + php start.php start + php start.php start -d + ``` + + + +11. 去浏览器,访问项目执行安装 + + ```bash + http://192.168.1.8:8787/index + ``` + + + +16. 进入浏览器并进入安装界面时,同意协议,继续下一步,在创建数据库的时候改一下root下面的密码,就能创建成功了,然后点击访问后台,输入用户名和密码,用户名默认admin ,密码admin888,登录就行了 + diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/nginx\345\217\215\345\220\221\344\273\243\347\220\206/Nginx \345\217\215\345\220\221\344\273\243\347\220\206\346\234\215\345\212\241\345\231\250.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/nginx\345\217\215\345\220\221\344\273\243\347\220\206/Nginx \345\217\215\345\220\221\344\273\243\347\220\206\346\234\215\345\212\241\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..a9851067d8b35886c497d2ec9c4d0ad3d015f8cc --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/nginx\345\217\215\345\220\221\344\273\243\347\220\206/Nginx \345\217\215\345\220\221\344\273\243\347\220\206\346\234\215\345\212\241\345\231\250.md" @@ -0,0 +1,81 @@ +# Nginx 反向代理服务器 + +## 1. 安装 Nginx + +1. 更新系统软件包索引: + + ``` + sudo apt-get update + ``` + +2. 安装 Nginx: + + ``` + sudo apt-get install nginx + ``` + +3. 启动 Nginx 服务: + + ``` + sudo systemctl start nginx + ``` + +4. 检查 Nginx 是否成功启动: + + ``` + sudo systemctl status nginx + ``` + + 输出应该显示 Nginx 正在运行。 + +## 2. 配置 Nginx 反向代理 + +1. 编辑 Nginx 主配置文件: + + ``` + sudo vim /etc/nginx/nginx.conf + ``` + +2. 在 `http` 块中添加以下配置: + + ```nginx + upstream backend { + server 192.168.1.100:8080;(后端服务器IP及端口) + server 192.168.1.101:8080; + } + + server { + listen 80; + server_name example.com;(域名) + + location / { + proxy_pass http://backend; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + } + ``` + + - `upstream` 定义了一组后端服务器 + - `server` 块中的 `proxy_pass` 指令将请求转发到后端服务器 + - `proxy_set_header` 设置一些头部信息,以便后端服务器获取正确的客户端信息 + - `proxy_set_header X-Real-IP $remote_addr;` 设置 `X-Real-IP` 请求头为客户端的实际 IP 地址。 + - `proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;` 设置 `X-Forwarded-For` 请求头为客户端 IP 和经过的代理服务器 IP 地址列表。 + + + +3. 保存并关闭配置文件。 + +## 3. 重载 Nginx 配置 + +1. 重载 Nginx 配置: + + ``` + sudo systemctl reload nginx + ``` + +## 4. 测试访问 + +1. 在浏览器中访问 `http://example.com`,请求会被 Nginx 反向代理转发到后端服务器。 + diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/nginx\345\217\215\345\220\221\344\273\243\347\220\206/Nginx \345\217\215\345\220\221\344\273\243\347\220\206\346\234\215\345\212\241\345\231\2501.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/nginx\345\217\215\345\220\221\344\273\243\347\220\206/Nginx \345\217\215\345\220\221\344\273\243\347\220\206\346\234\215\345\212\241\345\231\2501.md" new file mode 100644 index 0000000000000000000000000000000000000000..036f68590ec8a53bd6df33196595d1486cdc87ec --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/nginx\345\217\215\345\220\221\344\273\243\347\220\206/Nginx \345\217\215\345\220\221\344\273\243\347\220\206\346\234\215\345\212\241\345\231\2501.md" @@ -0,0 +1,89 @@ +# Nginx 反向代理服务器 + +## 1. 安装 Nginx + +1. 更新系统软件包索引: + + ``` + sudo apt-get update + ``` + +2. 安装 Nginx: + + ``` + sudo apt-get install nginx + ``` + +3. 启动 Nginx 服务: + + ``` + sudo systemctl start nginx + ``` + +4. 检查 Nginx 是否成功启动: + + ``` + sudo systemctl status nginx + ``` + + 输出应该显示 Nginx 正在运行。 + +## 2. 配置 Nginx 反向代理 + +1. 编辑 Nginx 主配置文件: + + ``` + sudo vim /etc/nginx/nginx.conf + ``` + +2. 在 `http` 块中添加以下配置: + + ```nginx + upstream backend { + server 192.168.1.100:8080;(后端服务器IP及端口) + server 192.168.1.101:8080; + } + + server { + listen 81;(监听端口) + server_name lcb666.cn;(绑定域名) + + location / { + proxy_pass http://backend; (后端服务器地址及端口) + proxy_set_header Host $host;(保留原始Host头) + proxy_set_header X-Real-IP $remote_addr;(传递真实客户端IP) + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; # 传递请求协议(http/https) + # 其他可选配置,如缓存、超时、重试等 + + } + } + ``` + + - **HTTP服务器块 (server)**: 定义监听的IP地址、端口以及与之关联的域名(server_name)。 + - **位置块 (location)**: 根据请求URI进行匹配,并定义在此范围内应执行的操作,如反向代理。 + - **反向代理指令 (proxy_pass)**: 指定请求应被转发到的后端服务器的URL。Nginx将替换匹配到的位置块中的URI,并将其发送到指定的后端服务器。 + - listen: 指定Nginx监听的IP地址和端口,这里为标准HTTP端口80。 + - server_name: 设置服务器块所关联的域名,即客户端请求的域名。 + - location /: 匹配所有以根路径("/")开头的请求。 + - proxy_pass: 设置后端服务器的URL。此处将所有匹配到的请求转发到http://backend-server:8080。 + - proxy_set_header: 设置请求转发时要修改或添加的HTTP头部。这些指令用于保持与后端服务器的正确交互,如: + - Host: 保持原请求的Host头,确保后端服务器能够正确识别请求的目的主机。 + - X-Real-IP: 传递真实的客户端IP地址,防止后端服务器因反向代理而获取到Nginx服务器的IP。 + - X-Forwarded-For: 传递经过代理链的客户端IP列表,多个代理时会追加。 + - X-Forwarded-Proto: 传递原始请求的协议(http或https),以便后端服务器识别请求是否经过SSL加密 + +3. 保存并关闭配置文件。 + +## 3. 重载 Nginx 配置 + +1. 重载 Nginx 配置: + + ``` + sudo systemctl reload nginx + ``` + +## 4. 测试访问 + +1. 在浏览器中访问 `http://example.com`,请求会被 Nginx 反向代理转发到后端服务器。 + diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/ssl\350\257\201\344\271\246\345\257\206\351\222\245/lcb666.cn.key" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/ssl\350\257\201\344\271\246\345\257\206\351\222\245/lcb666.cn.key" new file mode 100644 index 0000000000000000000000000000000000000000..3209faf78f0831a75ec55cf1d591bd57233a4431 --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/ssl\350\257\201\344\271\246\345\257\206\351\222\245/lcb666.cn.key" @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEA4LajZiPtY73c0HQF7mh7f5rA5J7XYAdBDUmWoQsJqO1dkZsV +a6fn0plpF88p0WwQV2fGdiBlZABMvQJVs5S77MFHZB1BxYcbDwSDGO5rXvf7N6q1 +tpWRQlFb7GOLOU+FLaMfKpTWNL1z+dyZsyJPHeGuZrHeoG4pS3TZ2rEBZsDVM7Zi +NCg66ywSXrKs/r0LsHdmr2ITyJhfwKXbVckRZ1ad2KWUNEkNatZb5xG4SQ7GqhgV +Pi8uPxnsBvvvXaFuWqy6cA7lxhCiWgiyaVUJmMdF2kmOOcZlgNGg1iNpDkOCvcED +a5JDJhCDhAxp27ysalbP4sIZyivGXaZHbPea3QIDAQABAoIBADHNqMdRfSKXCOKW +ZF4jgAOXC9tfrQJWeT91qNHGfXyYJx3HTmcOzp1pbNZfDrigh7qngF/b7DzOqDNX +2iCz/TaK28S/iz05JXEdoeSbquZgdagvyJhP6+LT31iz8z5fdnfX6Gdql1MXDiY5 +k0MVfo1z4FBYaawK3lIf8sy6YEIiXmg0OzXWe585NTNs0cwWAgvwGQiUjo/emrXK +g0ExWb3kkcHHMamjvKbyasPluEZGXhJaqYojwi4Hrq2KeXJvy+WJwauCmPHo7MjK +55maV4NVyVPjQVIT+8AIuXhr7yzYNSKoE/O+tJJ0/SoB1ZZ0JgsMhOInFLwMSgg7 +rVgll00CgYEA/LRV2UdEq8RXCFHoju2YTBhJnhfGYGcBa2tspqSGZH5H9/69ntun +DQuTXnOobr5yhSBBtEqnAry8CKXB7vJ5lWIWYMv22TxsN1oWf7UYg99ur8QJ+xVd +civexmeAyQbDq4WUgRu8De3nfV04zIbprqM2POpjDdCjZaHPnhqQo58CgYEA46Ta +j8M2MZY9z6XcRF4GuydptVWBPk9T1DswDsllTy1vlyDdRR5yRLV/n9cNoqcHIGij +EyizXNhBN8NpXBGrmsRsjuF58laaaZhD1ELyALKksi/CPcMLmFWyubNLVi9ysWYn +NftnBnC51gA180zKu/IfLtT7ONPZu4KCncNcUAMCgYBVTd7pANjajuW+RkAV93iA +v3Yiau4pXrwo8dN0kXdYdxR+T7zc4lMK4Ux3Bt3lvF5WOCRV4xlroCBtXt8PdUS7 +u6fINzH19SKmsL+FjrFe2s63gJrJ6lVoFA0YtpnPwnvM68PMrXsWzKdnN0/UIvrB +XBEUER8s67Asv6mhOmB3CwKBgA7d3Ug2P3vNjAvbkR8F5PqkAEtPYjlnhNn/Y4wT +qwIYvYjpJIo3Cs9h6wvNR56vuc9sBfpiVhRiKyAxKthQbxyUZ2KNZyFkdoEe6I8c +MCHLiOX6KH1QF5nDPwDRrMHcJ2leeoEUAg5xnjFTojJZeYP8s/yi/CUh8L5GL7GN +6KFxAoGBAOCP0ZAMHLvJVjuVz625WA+6Y+kletWTrFpUvpGx+wOX69oARBjBfT/v +7x5IJHnlw//jUc9CihI5phIltv3ARoLunVkmwg6dZTEts+ULU9zV80kQQ8bNKG4g +hzMdL9oVTnOZ2Ye9+CV8iy5J+jhrxMSzNnGOTHfzxAT9O69wVUrK +-----END RSA PRIVATE KEY----- diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/ssl\350\257\201\344\271\246\345\257\206\351\222\245/lcb666.cn.pem" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/ssl\350\257\201\344\271\246\345\257\206\351\222\245/lcb666.cn.pem" new file mode 100644 index 0000000000000000000000000000000000000000..f05605fb1e07bc53a4011f914615e7c8662cd0e2 --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/ssl\350\257\201\344\271\246\345\257\206\351\222\245/lcb666.cn.pem" @@ -0,0 +1,61 @@ +-----BEGIN CERTIFICATE----- +MIIF+jCCBOKgAwIBAgIQA5l8K3JpuaNVRHzRCqVPkjANBgkqhkiG9w0BAQsFADBu +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg +RFYgVExTIENBIC0gRzIwHhcNMjQwNjA3MDAwMDAwWhcNMjQwOTA1MjM1OTU5WjAU +MRIwEAYDVQQDEwlsY2I2NjYuY24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQDgtqNmI+1jvdzQdAXuaHt/msDkntdgB0ENSZahCwmo7V2RmxVrp+fSmWkX +zynRbBBXZ8Z2IGVkAEy9AlWzlLvswUdkHUHFhxsPBIMY7mte9/s3qrW2lZFCUVvs +Y4s5T4Utox8qlNY0vXP53JmzIk8d4a5msd6gbilLdNnasQFmwNUztmI0KDrrLBJe +sqz+vQuwd2avYhPImF/ApdtVyRFnVp3YpZQ0SQ1q1lvnEbhJDsaqGBU+Ly4/GewG +++9doW5arLpwDuXGEKJaCLJpVQmYx0XaSY45xmWA0aDWI2kOQ4K9wQNrkkMmEIOE +DGnbvKxqVs/iwhnKK8Zdpkds95rdAgMBAAGjggLsMIIC6DAfBgNVHSMEGDAWgBR4 +35GQX+7erPbFdevVTFVT7yRKtjAdBgNVHQ4EFgQUWlY0gScUNkGb+pccGSwlTNdO +GKowIwYDVR0RBBwwGoIJbGNiNjY2LmNugg13d3cubGNiNjY2LmNuMD4GA1UdIAQ3 +MDUwMwYGZ4EMAQIBMCkwJwYIKwYBBQUHAgEWG2h0dHA6Ly93d3cuZGlnaWNlcnQu +Y29tL0NQUzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG +AQUFBwMCMIGABggrBgEFBQcBAQR0MHIwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3Nw +LmRpZ2ljZXJ0LmNvbTBKBggrBgEFBQcwAoY+aHR0cDovL2NhY2VydHMuZGlnaWNl +cnQuY29tL0VuY3J5cHRpb25FdmVyeXdoZXJlRFZUTFNDQS1HMi5jcnQwDAYDVR0T +AQH/BAIwADCCAX8GCisGAQQB1nkCBAIEggFvBIIBawFpAHcA7s3QZNXbGs7FXLed +tM0TojKHRny87N7DUUhZRnEftZsAAAGP8FMcTAAABAMASDBGAiEAqZDxPQLHV2TA +lkROXOQwMIpClSIkKyjgW2/M3zMbRyQCIQCKoosAtOo+Mi1I94dyPJNOsbWmiEUi +PnaMnp1M3hGzSQB1AEiw42vapkc0D+VqAvqdMOscUgHLVt0sgdm7v6s52IRzAAAB +j/BTHIMAAAQDAEYwRAIgYf+7reGcDuYyL6NUehtzHpYXE1RO+n2ivTW5LZAVMCwC +IFxGkV5CDuUN5osIyQ7KUCaB9Mz87zM5RS7gvdLzctWIAHcA2ra/az+1tiKfm8K7 +XGvocJFxbLtRhIU0vaQ9MEjX+6sAAAGP8FMceQAABAMASDBGAiEAhE8aEP5YdEfF +xGKqPil2GqmcVhT3PE8aV5fDE3E9gq0CIQDvSyIxzYsMTyQmU+/0BGAUr1Y+IW5S +EKTT1BGacJJWgTANBgkqhkiG9w0BAQsFAAOCAQEAoHANQD6pP87i/x0uG3FrycEg +BQsUfN7iJ0mP7OEFZ5Ul8BljbQHfV2MaWn3aP7GOPS98oomb65jO5bcgkZU96WiL +r/hf2Wx8oEswq1k3N8aDTjhVWyp4ff0Ky5e4uqouADSXn+cZWgTYrpBObV2P5Qfv +FeG4XryRbLoQQkiWP5CVPxrQAdN2twT7Mw1Aay/IS6Vuz2hyDsf/EZQP2FAVVdvM +CCoPOi6GeB6X3dAxnK1UBIvyo+rOjxDnFs6CXXvLZXSyXBhEZL5S1RGkKO4lbYAb +xp9/Tc3RdmjYSNMViWClhIM0ukK/nA4YGzlDjbxy07aaIljmgoirp5vtPRtuvw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEqjCCA5KgAwIBAgIQDeD/te5iy2EQn2CMnO1e0zANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xNzExMjcxMjQ2NDBaFw0yNzExMjcxMjQ2NDBaMG4xCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xLTArBgNVBAMTJEVuY3J5cHRpb24gRXZlcnl3aGVyZSBEViBUTFMgQ0EgLSBH +MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO8Uf46i/nr7pkgTDqnE +eSIfCFqvPnUq3aF1tMJ5hh9MnO6Lmt5UdHfBGwC9Si+XjK12cjZgxObsL6Rg1njv +NhAMJ4JunN0JGGRJGSevbJsA3sc68nbPQzuKp5Jc8vpryp2mts38pSCXorPR+sch +QisKA7OSQ1MjcFN0d7tbrceWFNbzgL2csJVQeogOBGSe/KZEIZw6gXLKeFe7mupn +NYJROi2iC11+HuF79iAttMc32Cv6UOxixY/3ZV+LzpLnklFq98XORgwkIJL1HuvP +ha8yvb+W6JislZJL+HLFtidoxmI7Qm3ZyIV66W533DsGFimFJkz3y0GeHWuSVMbI +lfsCAwEAAaOCAU8wggFLMB0GA1UdDgQWBBR435GQX+7erPbFdevVTFVT7yRKtjAf +BgNVHSMEGDAWgBROIlQgGJXm427mD/r6uRLtBhePOTAOBgNVHQ8BAf8EBAMCAYYw +HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8C +AQAwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp +Y2VydC5jb20wQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQu +Y29tL0RpZ2lDZXJ0R2xvYmFsUm9vdEcyLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG +/WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT +MAgGBmeBDAECATANBgkqhkiG9w0BAQsFAAOCAQEAoBs1eCLKakLtVRPFRjBIJ9LJ +L0s8ZWum8U8/1TMVkQMBn+CPb5xnCD0GSA6L/V0ZFrMNqBirrr5B241OesECvxIi +98bZ90h9+q/X5eMyOD35f8YTaEMpdnQCnawIwiHx06/0BfiTj+b/XQih+mqt3ZXe +xNCJqKexdiB2IWGSKcgahPacWkk/BAQFisKIFYEqHzV974S3FAz/8LIfD58xnsEN +GfzyIDkH3JrwYZ8caPTf6ZX9M1GrISN8HnWTtdNCH2xEajRa/h9ZBXjUyFKQrGk2 +n2hcLrfZSbynEC/pSw/ET7H5nWwckjmAJ1l9fcnbqkU/pf6uMQmnfl0JQjJNSg== +-----END CERTIFICATE----- diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/5.Eamil.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/5.Eamil.md" new file mode 100644 index 0000000000000000000000000000000000000000..ab21cc89835ef46bcfc19b35c3adf6133efa5ce2 --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/5.Eamil.md" @@ -0,0 +1,143 @@ +### EMAIL服务器 + +```sh +dns服务 +vim /etc/bind/db.sx1.com #这个文件是安装完DNS之后的 配置的自己的域名 + +加入下面这些内容 +mail IN A 192.168.1.128 #自己的ip +mail IN MX 10 mail.sx1.com. #域名 +``` + +![1721184800956-2024-7-1710:53:21.png](https://gitee.com/yu-peitai/imgs/raw/master/1721184800956-2024-7-1710:53:21.png) + +- 设置主机名 + +```sh +vim /etc/hostname +加入主机名 +mail + +vim /etc/hosts +#自己电脑的ip地址 #自己的邮件域名 #主机名 +192.168.1.128 mail.sx1.com mail +``` + +![1721184832846-2024-7-1710:53:53.png](https://gitee.com/yu-peitai/imgs/raw/master/1721184832846-2024-7-1710:53:53.png) + +![1721184860626-2024-7-1710:54:20.png](https://gitee.com/yu-peitai/imgs/raw/master/1721184860626-2024-7-1710:54:20.png) + +- 安装postfix + +```sh +apt update +apt install postfix +安装之后选择界面输入 +sx1.com # 这是自己的域名 +``` + +- 配置文件 + +```sh +vim /etc/postfix/main.cf + +myhostname = mail.sx1.com #自己的邮件域名 +mydomain = sx1.com #自己的域名 +myorigin = $mydomain +mynetworks = 0.0.0.0/0 +home_mailbox = Maildir/ +``` + +- 安装dovecot + +```sh +apt install dovecot-core dovecot-pop3d dovecot-imapd +``` + +- 配置文件 + +```sh +vim /etc/dovecot/dovecot.conf +listen = * +login_trusted_networks = 0.0.0.0/0 + +vim /etc/dovecot/conf.d/10-mail.conf +#mail_location = mbox:~/mail:INBOX=/var/mail/%u +mail_location = maildir:~/Maildir + +vim /etc/dovecot/conf.d/10-auth.conf +disable_plaintext_auth = no +auth_mechanisms = plain login + +vim /etc/dovecot/conf.d/10-ssl.conf +ssl = no + +vim /etc/dovecot/conf.d/10-master.conf +unix_listener /var/spool/postfix/private/auth { + mode = 0666 + user = postfix + group = postfix +} +``` + +- 发送测试 + + +```sh +创建测试用户 +adduser user1 +adduser user2 + +user2用户给user1用户发送邮件 + +使用mailx命令 +安装 +sudo apt install mailutils + +测试 +su - user2 + +user2@mail:~$ echo "这是给user1的邮件内容。" | mailx -s "邮件主题" user1@sx1.com +# user1@sx1.com 用户@自己的域名 + +查看 +su - user1 +cd /Maildir/new +cat 1721176361.V801Ibf431M729532.mail #根据邮件发送时间来查看 +``` + +![1721178939371-2024-7-1709:15:39.png](https://gitee.com/yu-peitai/imgs/raw/master/1721178939371-2024-7-1709:15:39.png) + +- 接收测试 + +```sh +切换到测试用户账户 +user1用户给user2用户发送邮件 + +测试 +su - user1 + +user2@mail:~$ echo "这是给user2的邮件内容。" | mailx -s "邮件主题" user2@sx1.com +# user2@sx1.com 用户@自己的域名 + +查看 +su - user2 +cd /Maildir/new +cat 1721176361.V801Ibf431M729532.mail #根据邮件发送时间来查看 +``` + +![1721179117410-2024-7-1709:18:37.png](https://gitee.com/yu-peitai/imgs/raw/master/1721179117410-2024-7-1709:18:37.png) + +- 客户端测试 + +```sh +安装foxmail +选择其他邮箱 +添加账号 +``` + +![1721183225522-2024-7-1710:27:05.png](https://gitee.com/yu-peitai/imgs/raw/master/1721183225522-2024-7-1710:27:05.png) + +![111-2024-7-1710:29:23.JPG](https://gitee.com/yu-peitai/imgs/raw/master/111-2024-7-1710:29:23.JPG) + +![123-2024-7-1710:31:56.JPG](https://gitee.com/yu-peitai/imgs/raw/master/123-2024-7-1710:31:56.JPG) diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/FTP\351\227\256\351\242\230.txt" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/FTP\351\227\256\351\242\230.txt" new file mode 100644 index 0000000000000000000000000000000000000000..418d54b85bdc310c42076536efaf2694d87b3806 --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/FTP\351\227\256\351\242\230.txt" @@ -0,0 +1,3 @@ +1. 注意/etc/vsftpd.conf 里面的listen_ipv6注释掉:因为ipv6和ipv4不能同时监听 + +192.168.204.37 \ No newline at end of file diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/debian\345\256\211\350\243\205dhcp.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/debian\345\256\211\350\243\205dhcp.md" new file mode 100644 index 0000000000000000000000000000000000000000..dfa0863fae5bcba588ebcee044bdd8328b7f9f2c --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/debian\345\256\211\350\243\205dhcp.md" @@ -0,0 +1,67 @@ +# DHCP部署 +## 修改虚拟机网络配置 +VMWARE虚拟机左上角点击编辑 +点击虚拟网络编辑器 +选择类型为NAT模式的选项将左下角改成192.168.1.0并应用(如果显示灰色改不了就右下角点击盾牌图标给权限) +修改完后重启虚拟机 + +## 安装DHCP服务 +```bash +sudo apt update +sudo apt install isc-dhcp-server +``` +## 更改主配置文件 +```bash +vim /etc/dhcp/dhcpd.conf +``` +```bash +subnet 192.168.1.0 netmask 255.255.255.0 { + #定义了一个子网,其网络地址为192.168.1.0,子网掩码为255.255.255.0。这表示该DHCP服务器将为位于这个子网中的客户端分配 IP 地址。 + range 192.168.1.100 192.168.1.200; + #指定了 DHCP 服务器分配的 IP 地址范围。在这个例子中,可分配的 IP 地址从192.168.1.100到192.168.1.200。 + option routers 192.168.1.1; + #指定了默认网关的 IP 地址。客户端在获得 DHCP 分配的 IP 地址后,会自动将指定的网关作为其出口路由器,用于访问其他网络。 + option domain-name-servers 192.168.1.1,8.8.8.8; + #指定了 DNS(Domain Name System,域名系统)服务器的 IP 地址。客户端在获取 DHCP 分配的 IP 地址后,会使用这些 DNS 服务器解析域名。 + option broadcast-address 192.168.1.255; + #option broadcast-address: 指定了 DHCP 分配的客户端的广播地址。 + option subnet-mask 255.255.255.0 + #option subnet-mask 255.255.255.0 是 DHCP 服务器配置中的一个选项,用来指定客户端设备在特定子网中使用的子网掩码。子网掩码决定了一个 IP 地址的网络部分和主机部分。 + option domain-name "group9.com"; + #指定了域名搜索列表中的默认域名。这表示客户端在尝试解析不带域名的主机名时,会将其附加到指定的域名后进行解析。 + default-lease-time 600; + #default-lease-time: 指定了 DHCP 租约的默认时间,单位为秒。 + max-lease-time 7200; + #max-lease-time: 指定了 DHCP 租约的最大时间,单位为秒。 +} +``` + +## 配置网卡名称 + +```bash +ip add show #查看ip和网卡名 +vim /etc/default/isc-dhcp-server +INTERFACESv4="ens33" #修改里面的网卡名 + +dhcpd -t -cf /etc/dhcp/dhcpd.conf #这条命令可以检查配置文件有没有语法错误 +``` + +## 重启服务 + +``` +systemctl resatrt isc-dhcp-server +``` + +## 配置客户端网卡配置 + +``` +vim /etc/network/interfaces + +auto lo +iface lo inet loopback +auto ens33 +iface ens33 inet dhcp +配置完成后退出重启 +systemctl restart networking.service +``` + diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/debian\351\207\214\351\235\242FTP\346\234\215\345\212\241\345\231\250\347\232\204\345\256\211\350\243\205.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/debian\351\207\214\351\235\242FTP\346\234\215\345\212\241\345\231\250\347\232\204\345\256\211\350\243\205.md" new file mode 100644 index 0000000000000000000000000000000000000000..19ca4d1ab37836f63083492c35cee31ee4b59c2c --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/debian\351\207\214\351\235\242FTP\346\234\215\345\212\241\345\231\250\347\232\204\345\256\211\350\243\205.md" @@ -0,0 +1,134 @@ +1.更新资源库 + +```basic +sudo apt update +``` + +2.安装vsftpd包 + +```basic +sudo apt install vsftpd +``` + +3.vsftpd 服务将自动运行并启用。使用以下命令验证 vsftpd 服务。 + +```bash +sudo systemctl is-enabled vsftpd ##验证服务 +sudo systemctl status vsftpd ##查看状态 +``` + +4.执行下面的 openssl 命令来生成将用于 vsftpd 服务器安装的新 TLS 证书。 + +``` +sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem +``` + +5.现在执行以下命令创建一个新文件*/etc/vsftpd.userlist*用于存储FTP用户。 + +```bash +touch /etc/vsftpd.userlist +``` + +6.命令备份 vsftpd 配置 + +```bash +sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig +``` + +7.修改vsftpd.conf配置文件 + +```bash +sudo nano /etc/vsftpd.conf ###打开配置文件 + +anonymous_enable=NO ##通过将 anonymous_enable 选项更改为 NO,禁用对 vsftpd 服务器的匿名访问。 + +local_enable=YES ##通过将选项 local_enable 更改为 YES,允许 /etc/passwd 文件中的本地用户和 PAM 用户登录到 vsftpd 服务器。 + +write_enable=YES ##通过将 write_enable 选项更改为 YES,允许 FTP 用户将文件上传到 vsftpd 服务器。 + +chroot_local_user=YES +user_sub_token=$USER +local_root=/home/$USER/chroot ##现在通过添加以下选项为 FTP 用户启用 chroot 或监狱。这会将 FTP 用户锁定在 /home/$USER/chroot 目录中。例如,FTP 用户 bob 将被锁定在目录 /home/bob/chroot 中。 +``` + +8.配置vsftpd.userlist文件 + +```bash +userlist_enable=YES +userlist_file=/etc/vsftpd.userlist +userlist_deny=NO ## 添加以下配置来设置 vsftpd 虚拟用户。 /etc/vsftpd.userlist 文件中的任何用户都将被允许登录到 vsftpd 服务器。 + +rsa_cert_file=/etc/ssl/private/vsftpd.pem +rsa_private_key_file=/etc/ssl/private/vsftpd.pem +ssl_enable=YES +force_local_data_ssl=YES +force_local_logins_ssl=YES +ssl_tlsv1=YES +ssl_sslv2=NO +ssl_sslv3=NO +require_ssl_reuse=NO +ssl_ciphers=HIGH ##添加以下行以使用 SSL/TLS 证书保护您的 vsftpd 服务器。这将强制用户登录和数据传输连接使用安全连接。 + +pasv_min_port=20000 +pasv_max_port=25000 ##现在添加以下配置,以使用 20000 和 25000 之间的端口设置被动模式连接。 + + +``` + +9.设置防火墙 + +```bash +sudo apt install ufw ##这一步是安装防火墙,如果有防火墙就跳过这一步 + +sudo ufw allow OpenSSH +sudo ufw allow 20:21/tcp +sudo ufw allow 20000:25000/tcp ##运行以下 ufw 命令打开 OpenSSH 服务的端口、vsftpd 服务器端口 20:21 以及之间的被动模式 FTP 连接端口 20000 至 25000。 + +sudo ufw enable ##需要执行下面的 ufw 命令来启动并启用 UFW。不然可能会导致FTP无法正常依旧是关闭状态 + +``` + +10.修改ftponly文件 + +```bash + + echo -e '#!/bin/sh\necho "Shell for FTP users only."' | sudo tee -a /bin/ftponly ##执行以下命令创建一个新文件/bin/ftponly。然后,通过下面的 chmod 命令使其可执行。文件 /bin/ftponly 将用作 FTP 用户的默认 shell。 + + ##如果上一步执行不了就按照这个方法 + sudo vim /bin/ftponly + ##在ftponly里面添加 + #!/bin/sh\necho "Shell for FTP users only. + + sudo echo "/bin/ftponly" >> /etc/shells ##将文件 /bin/ftponly 添加到 /etc/shells 以确保它是有效的 shell。 + + +``` + +11.创建用户 + +```bash +sudo useradd -m -s /bin/ftponly bob +sudo passwd bob ##现在创建一个新的 FTP 用户 bob 并通过执行以下命令设置密码。输入您的密码并重复。 + +sudo -u bob mkdir -p /home/bob/chroot +sudo chown -R bob: /home/bob/chroot ##之后,运行以下命令为用户 bob 创建一个新的 chroot /home/bob/chroot 目录。此外,您还需要确保 chroot 目录 /home/bob/chroot 具有适当的所有权。 + +sudo -u bob mkdir -p /home/bob/chroot/{data,upload} +sudo chown -R bob: /home/bob/chroot/{data,upload} ##接下来,运行以下命令创建另一个新目录data和upload,用于存储FTP用户数据。请务必为这些目录配置正确的所有权。 + +sudo chmod 550 /home/bob/chroot +sudo chmod 750 /home/bob/chroot/{data,upload} ##现在运行以下命令将/home/bob/chroot目录的权限更改为550以及数据和上传< 目录到 750。 +``` + +11.现在您已经创建了一个新用户,请执行以下命令将用户 bob 添加到 /etc/vsftpd.userlist 文件中。 + +```bash +echo "bob" >> /etc/vsftpd.userlist +``` + +12.最后,运行以下命令重新启动 vsftpd 服务并应用更改。执行命令后,您的 FTP 用户 **bob** 就准备好了。 + +```bash +sudo systemctl restart vsftpd +``` + diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/\345\256\211\350\243\205FTP\346\211\200\351\201\207\345\210\260\347\232\204\351\227\256\351\242\230.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/\345\256\211\350\243\205FTP\346\211\200\351\201\207\345\210\260\347\232\204\351\227\256\351\242\230.md" new file mode 100644 index 0000000000000000000000000000000000000000..c9b91fbef264f34c52f59586cb8e7ae782ca2278 --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/\345\256\211\350\243\205FTP\346\211\200\351\201\207\345\210\260\347\232\204\351\227\256\351\242\230.md" @@ -0,0 +1,37 @@ +1. 注意/etc/vsftpd.conf 里面的listen_ipv6注释掉:因为ipv6和ipv4不能同时监听 + + + +```bash +vim /etc/vsftpd.conf ##找到并注释listen_ipv6=YES + +``` + +2.apt update 更新资源包的时候显示无法更新W: Some index files failed to download. They have been ignored, or old ones + + + +```bash +直接输入reboot 然后重新连接就可以更新 +``` + +3.更新资源的时候显示资源被锁:Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable) + +```bash +##1.出现这个问题的原因可能是有另外一个程序正在运行,导致资源被锁不可用。而导致资源被锁的原因,可能是上次安装时没正常完成,而导致出现此状况。 +sudo rm /var/cache/apt/archives/lock + +sudo rm /var/lib/dpkg/lock + +##2.如果上述问题没有解决就先杀死进程 +ps -e | grep apt ##先找到进程 +##显示结果 +6362 ? 00:00:00 apt +6934 ? 00:00:00 apt-get +7368 ? 00:00:00 synaptic +##解决问题 +sudo killall apt +sudo killall apt-get +sudo killall synaptic +``` + diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/\345\256\211\350\243\205Samba\346\234\215\345\212\241.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/\345\256\211\350\243\205Samba\346\234\215\345\212\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..7485762268931b3b3778216dc30f3140afe6d6f4 --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/\345\256\211\350\243\205Samba\346\234\215\345\212\241.md" @@ -0,0 +1,93 @@ +### 一、安装Samba服务 + + + +在Debian系统中,可以使用以下命令安装Samba服务: + + + +```text +sudo apt-get update +sudo apt-get upgrade +sudo apt-get install samba +``` + +### 二、创建共享文件夹 + + + +使用以下命令创建一个共享文件夹: + + + +```text +sudo mkdir -p /srv/samba/share +sudo chmod 777 /srv/samba/share +``` + +其中,/srv/samba/share是共享文件夹的路径,可以根据需要修改。 + + + +### 三、配置Samba服务 + + + +使用以下命令编辑Samba配置文件: + + + +```text +sudo nano /etc/samba/smb.conf +``` + +在文件末尾添加以下内容: + + + +```text +[share] + comment = Shared folder + path = /srv/samba/share + browseable = yes + guest ok = yes + read only = no + create mask = 0777 + directory mask = 0777 +``` + +其中,[share]是共享文件夹的名称,可以根据需要修改。comment是注释,可以不修改。path是共享文件夹的路径,应与第二步中创建的文件夹路径一致。browseable设置为yes表示该共享文件夹可以在网络上被浏览。guest ok设置为yes表示访问该共享文件夹不需要认证。read only设置为no表示该共享文件夹可以被写入。create mask和directory mask是文件和文件夹的权限掩码,设置为0777表示所有用户都具有最高权限。最后保存并关闭文件。 + + + +### 四、重启Samba服务 + + + +使用以下命令重启Samba服务: + +```text +sudo service smbd restart +``` + +### 五、在Windows系统中访问共享文件夹 + + + +在Windows系统中,可以通过以下步骤访问共享文件夹: + + + +打开“计算机”,在地址栏中输入Linux系统的IP地址,按下回车键。 + + + +输入Linux系统的用户名和密码,点击“确定”按钮。 + + + +打开共享文件夹,在其中进行文件的读写操作。 + + + +至此,在Debian上搭建Samba服务实现Windows访问共享文件夹的过程就完成了。 \ No newline at end of file diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/\351\241\271\347\233\256\345\256\236\350\267\265\350\241\250.jpg" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/\351\241\271\347\233\256\345\256\236\350\267\265\350\241\250.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..d6f5ba1cff201019f64b787ba1b8b42e46307acc Binary files /dev/null and "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\202\256\344\273\266\346\234\215\345\212\241\345\231\250/\351\241\271\347\233\256\345\256\236\350\267\265\350\241\250.jpg" differ diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\270\211/Kubernetes \346\220\255\351\205\215 containerd \350\277\233\350\241\214\351\233\206\347\276\244\351\203\250\347\275\262(1).md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\270\211/Kubernetes \346\220\255\351\205\215 containerd \350\277\233\350\241\214\351\233\206\347\276\244\351\203\250\347\275\262(1).md" new file mode 100644 index 0000000000000000000000000000000000000000..576a8969261a12a9677f9475ffb1dd070cb8107d --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\270\211/Kubernetes \346\220\255\351\205\215 containerd \350\277\233\350\241\214\351\233\206\347\276\244\351\203\250\347\275\262(1).md" @@ -0,0 +1,522 @@ +# Kubernetes 搭配 containerd 进行集群部署 + +Kubernetes(K8s) 是一个开源的平台,用于自动化容器化应用程序的部署、扩展和管理。可以通过 K8s 部署容器化集群,对集群内的容器进行批量化的管理、控制。 + +containerd 是容器运行时,类似 Docker,主要用于管理容器的生命周期。 + +> 关于 K8s 与 containerd 详细内容请自行了解。 + +## 通过 K8s 集群部署 Nginx 应用 + +> 本节主要目标为在多台 Linux 主机上通过 K8s 集群进行 Nginx 应用的安装。 + +### 前置:准备工作 + +> 部署要点: +> +> 1. **集群中各个主机要保证 UUID、hostname、IP 地址唯一。** +> +> 2. **每台主机 hosts 都要修改。** + +1. 分配 master 节点与 node 节点: + + > master 节点:控制节点,负责管理集群的整体状态和控制功能。 + > + > node 节点:工作节点,实际运行应用程序的容器。 + + IP 分配方法自行查找,本文不在此赘述。 + + > **此处 IP 分配看实际情况。** + + | IP | 节点类型 | 主机名 | + | ------------- | -------- | ------ | + | 192.168.18.10 | master | master | + | 192.168.18.20 | node | node1 | + | 192.168.18.21 | node | node2 | + +2. cri-containerd 下载: + + 下载链接: + + 本节以最新版本为例,建议先行下载,后用 scp 传输到虚拟机上。 + +### 部署集群 + +#### 所有节点配置 + +> **本小节内容工作在所有节点上,即所有主机都要进行以下配置** + +> **强调:修改 UUID、hostname、IP!主机之间不可有相同!** +> +> **每台主机上的 `/etc/hosts` 都要进行修改!** + +- 修改主机名: + + > 集群中主机名不可重复,此处以设置 master 主机名为例。 + + ```shell + hostnamectl hostname master && reboot + ``` + +- 配置本机 hosts: + + 编辑 `/etc/hosts` 文件,写入以下内容,注意修改 127.0.1.1 解析为当前主机名: + + ```shell + 127.0.0.1 localhost + 127.0.1.1 master + 192.168.18.10 master + 192.168.18.20 node1 + 192.168.18.21 node2 + ``` + +- 设置 DNS 服务器: + + ```shell + echo "nameserver 114.114.114.114" | tee /etc/resolv.conf + ``` + +- 配置软件源: + + 编辑 `/etc/apt/sources.list` 文件: + + ```shell + deb https://mirrors.aliyun.com/debian/ bookworm main non-free non-free-firmware contrib + deb-src https://mirrors.aliyun.com/debian/ bookworm main non-free non-free-firmware contrib + deb https://mirrors.aliyun.com/debian-security/ bookworm-security main + deb-src https://mirrors.aliyun.com/debian-security/ bookworm-security main + deb https://mirrors.aliyun.com/debian/ bookworm-updates main non-free non-free-firmware contrib + deb-src https://mirrors.aliyun.com/debian/ bookworm-updates main non-free non-free-firmware contrib + deb https://mirrors.aliyun.com/debian/ bookworm-backports main non-free non-free-firmware contrib + deb-src https://mirrors.aliyun.com/debian/ bookworm-backports main non-free non-free-firmware contrib + ``` + + 使用 `apt update && apt full-upgrade -y` 刷新软件包缓存并更新系统。 + +- 设置系统时区: + + ```shell + timedatectl set-timezone Asia/Shanghai + ``` + +- 时钟同步: + + 配置时钟源为阿里云 NTP 服务器并强制进行时间同步。 + + ```shell + apt install chrony -y + sed -i '/pool 2.debian.pool.ntp.org iburst/ s/^/#/' /etc/chrony/chrony.conf && sed -i '/pool 2.debian.pool.ntp.org iburst/ a\server ntp.aliyun.com iburst' /etc/chrony/chrony.conf + systemctl enable chrony && systemctl restart chrony + + # 强制进行同步 + chronyc -a makestep + chronyc sources -v + chronyc tracking + ``` + + 同步后: + + ![20240804091555](https://oss.isiou.cn/images/20240804091555.png) + +- 改写系统配置: + + 创建并编辑 `/etc/sysctl.d/k8s.conf` 文件,写入以下内容: + + ```shell + net.ipv4.ip_forward = 1 + net.ipv4.conf.all.send_redirects = 0 + net.ipv4.conf.default.send_redirects = 0 + net.netfilter.nf_conntrack_max = 1000000 + net.netfilter.nf_conntrack_tcp_timeout_established = 86400 + net.core.somaxconn = 1024 + net.ipv4.tcp_syncookies = 1 + net.ipv4.tcp_max_syn_backlog = 2048 + net.ipv4.tcp_synack_retries = 2 + fs.file-max = 65536 + vm.swappiness = 0 + ``` + + 保存后: + + ```shell + # 加载内核网络模块,启用网络过滤 + modprobe br_netfilter + + # 应用修改的配置 + sysctl -p /etc/sysctl.d/k8s.conf + ``` + +- 配置流量处理: + + - 安装 ipset 与 ipvsadm: + + ```shell + apt install ipset ipvsadm -y + ``` + + - 创建并编辑 `/etc/modules-load.d/k8s.conf` 文件: + + ```shell + ip_vs + ip_vs_rr + ip_vs_wrr + ip_vs_sh + ip_tables + nf_conntrack_ipv4 + br_netfilter + ``` + + 添加权限: + + ```shell + chmod a+x /etc/modules-load.d/k8s.conf + ``` + +- 关闭交换分区: + + 编辑 `/etc/fstab` 文件,将 swap 行下内容注释: + + ![20240802151723](https://oss.isiou.cn/images/20240802151723.png) + + 重启后,使用 `free` 查看内存: + + ![20240802152212](https://oss.isiou.cn/images/20240802152212.png) + + 若 Swap 一行为 0,即代表禁用成功。 + + 或使用以下方法: + + ```shell + swapoff -a + sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab + reboot + ``` + +- 停止并禁用安全策略: + + > AppArmor 是一种 Linux 内核安全模块,用于限制程序的能力,以提高系统的安全性。此处关闭是为了防止安全模块杀 K8s 进程。 + + ```shell + systemctl stop apparmor.service + systemctl disable apparmor.service + ``` + +#### master 节点配置 + +> **本小节内容工作在 master 节点上。** + +1. 找到准备工作中的 cri-containerd 包,并将其解压到 `/` 下: + + ```shell + tar -xf cri-containerd-1.7.20-linux-amd64.tar.gz -C / + ``` + +2. 修改 cri-containerd 配置: + + ```shell + mkdir /etc/containerd + # 导出默认配置文件 + containerd config default > /etc/containerd/config.toml + # 修改配置文件中使用的沙箱镜像版本 + sed -i '/sandbox_image/s/3.8/3.9/' /etc/containerd/config.toml + # 设置 containerd 在创建容器时使用 systemd + sed -i '/SystemdCgroup/s/false/true/' /etc/containerd/config.toml + ``` + + 修改完成后,重启服务并查看状态: + + ```shell + systemctl enable containerd.service + systemctl restart containerd.service + systemctl status containerd.service + ``` + + 验证组件: + + ```shell + containerd --version && crictl --version && runc --version + ``` + + 输出如图所示: + + ![20240804100452](https://oss.isiou.cn/images/20240804100452.png) + +3. 安装 K8s 组件: + + - 安装插件以提供 https 连接: + + ```shell + apt update && apt install apt-transport-https gnupg gnupg2 curl software-properties-common -y + ``` + + - 下载密钥: + + ```shell + curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg + ``` + + - 写入软件源: + + ```shell + echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list + ``` + + - 刷新软件源缓存并安装组件: + + ```shell + apt update && apt install kubeadm kubelet kubectl -y + ``` + + - 安装完成后查看版本信息: + + ```shell + dpkg -l kubeadm kubelet kubectl + ``` + + 如图所示: + + ![20240804100659](https://oss.isiou.cn/images/20240804100659.png) + +4. 配置 kubelet: + + ```shell + cat > /etc/default/kubelet << EOF + KUBELET_EXTRA_ARGS="--cgroup-driver=systemd" + EOF + systemctl enable kubelet && systemctl restart kubelet + ``` + + 配置到此处后,使用 `reboot` 重启主机。 + +5. 初始化集群: + + > 关于镜像拉取与初始化: + > + > 在国内网络下拉取镜像和初始化很容易失败,可在拉取和初始化命令后加上 `--image-repository registry.aliyuncs.com/google_containers` 指定镜像源为阿里云镜像源。 + > + > 但即使指定镜像源,仍然有较大概率拉取或初始化失败,故推荐有条件的使用一些代理软件,以达到访问原镜像源的效果。 + > + > 参考代理软件设置: + > + > ![20240804131335](https://oss.isiou.cn/images/20240804131335.png) + + > 关于代理: + > + > 不使用流量代理很难将镜像拉取下来并初始化(目前未成功过),建议使用代理后拉取,会更加方便。 + + 拉取镜像: + + ```shell + kubeadm config images pull + ``` + + ![20240804101508](https://oss.isiou.cn/images/20240804101508.png) + + 初始化集群: + + ```shell + kubeadm init --control-plane-endpoint=master --kubernetes-version=v1.30.3 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.18.10 --cri-socket unix://var/run/containerd/containerd.sock + ``` + + 初始化完成后信息: + + ![20240804101957](https://oss.isiou.cn/images/20240804101957.png) + + > 以下两条命令源于上一条命令输出,若找不到了可以使用 `kubeadm token create --print-join-command` 重新获取。 + + 其中,在工作节点上使用此命令加入此集群: + + ```shell + kubeadm join master1:6443 --token 9vf65d.3c0q5at7btbh9ac9 --discovery-token-ca-cert-hash sha256:c2a629ff9939d539af6600465d88b75f8adac20f807cd901d816268601222363 + ``` + + 依据提示,进行配置: + + ```shell + mkdir -p $HOME/.kube + sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config + sudo chown $(id -u):$(id -g) $HOME/.kube/config + export KUBECONFIG=/etc/kubernetes/admin.conf + ``` + + 查看集群和节点状态列表: + + ```shell + kubectl cluster-info && kubectl get nodes + ``` + + ![20240804102943](https://oss.isiou.cn/images/20240804102943.png) + + 由上图可见,此时状态为 NotReady,需要安装网络插件以达到联系主机的目的: + + ```shell + curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.1/manifests/calico.yaml -O + kubectl apply -f calico.yaml + ``` + + 使用 `kubectl get pods -n kube-system` 查看状态: + + > 此处 node pod 未 Ready 为正常现象,建议进行到此处后先配置 node 节点,配置 node 节点完成后重启网络插件,查看 pod 状态。 + + ![20240804111847](https://oss.isiou.cn/images/20240804111847.png) + + 再次使用 `kubectl get nodes` 查看节点状态: + + > 此处 node1 为新加入的工作节点,加入方式见 node 节点配置。 + + ![20240804111952](https://oss.isiou.cn/images/20240804111952.png) + + Ready 代表节点已就绪。 + +#### node 节点配置 + +1. 前期准备工作与 master 节点配置第 1-4 点相同,参考上述。 + +2. 加入集群: + + 根据 master 节点配置第 5 点输出的 token,在工作节点上加入集群: + + ```shell + kubeadm join master1:6443 --token 9vf65d.3c0q5at7btbh9ac9 --discovery-token-ca-cert-hash sha256:c2a629ff9939d539af6600465d88b75f8adac20f807cd901d816268601222363 + ``` + + ![20240804105741](https://oss.isiou.cn/images/20240804105741.png) + + 在 master 节点上通过`kubectl get nodes`查看节点: + + ![20240804112858](https://oss.isiou.cn/images/20240804112858.png) + + 存在新加入的节点并且状态为 Ready 即为成功。 + +#### 新 master 节点加入集群 + +1. 前期准备工作与 master 节点配置第 1-4 点相同,参考上述。 + +2. 在集群内已存在的控制节点上生成密钥和 token: + + ```shell + kubeadm init phase upload-certs --upload-certs + ``` + + 如图所示: + + ![20240804125248](https://oss.isiou.cn/images/20240804125248.png) + +3. 保存上一步的密钥和 token,在新加入的主机上: + + > 确保新机上的 hosts 文件和 containerd、kubectl、kubeadm、kubelet 配置完成,且未进行初始化。 + + ```shell + kubeadm join master1:6443 --token --discovery-token-ca-cert-hash sha256: --control-plane --certificate-key + ``` + + 对应图(注意复制完全): + + ![20240804125737](https://oss.isiou.cn/images/20240804125737.png) + + 运行命令后会经历拉取镜像、初始化等过程,最后输出为: + + ![20240804125905](https://oss.isiou.cn/images/20240804125905.png) + + 执行以下命令: + + ```shell + mkdir -p $HOME/.kube + sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config + sudo chown $(id -u):$(id -g) $HOME/.kube/config + ``` + + 使用 `kubectl get nodes` 查看节点: + + ![20240804130029](https://oss.isiou.cn/images/20240804130029.png) + + 发现状态为 NotReady,重复上一小节安装网络插件即可。 + + 若仍然为 NotReady 状态,则需要重新启动 calico 插件和集群服务: + + ```shell + kubectl rollout restart daemonset calico-node -n kube-system + systemctl restart kubelet + systemctl restart containerd + ``` + + 查看 Pod 状态: + + ![20240804131128](https://oss.isiou.cn/images/20240804131128.png) + + 等待一会后,使用 `kubectl get nodes` 重新查看节点状态: + + ![20240804131221](https://oss.isiou.cn/images/20240804131221.png) + + 节点都为 Ready 即为配置成功。 + +### 在工作节点上部署 Nginx 应用并启动 + +1. 在 master 节点上(控制平面): + + - 创建并编辑 `nginx-install.yml` 文件,写入以下内容: + + ```yml + apiVersion: apps/v1 + kind: Deployment + metadata: + name: nginx-deployment + labels: + app: nginx + spec: + replicas: 2 + selector: + matchLabels: + app: nginx + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:latest + ports: + - containerPort: 80 + ``` + + - 创建 Pod: + + ```shell + kubectl apply -f nginx-install.yml + ``` + + 使用 `kubectl get deployments` 查看部署状态: + + ![20240804132959](https://oss.isiou.cn/images/20240804132959.png) + + 使用 `kubectl get pods` 查看 Pod 状态: + + ![20240804133048](https://oss.isiou.cn/images/20240804133048.png) + + 发现 Pod 都成功运行。现在将容器内的服务暴露在外部: + + 创建 `nginx-server.yml` 文件并写入: + + ```yml + apiVersion: v1 + kind: Service + metadata: + name: nginx-service + spec: + selector: + app: nginx + ports: + - protocol: TCP + port: 80 + targetPort: 80 + type: NodePort + ``` + + 使用 `kubectl apply -f nginx-server.yml` 创建暴露服务,并使用 `kubectl get svc nginx-service` 查看端口: + + ![20240804133440](https://oss.isiou.cn/images/20240804133440.png) + + 可知,端口暴漏在 31363 上,通过工作节点的 31363 端口即可访问对应的 Nginx 应用服务: + + ![20240804133604](https://oss.isiou.cn/images/20240804133604.png) \ No newline at end of file diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\270\211/k8s(1).md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\270\211/k8s(1).md" new file mode 100644 index 0000000000000000000000000000000000000000..bdadc5d949ed84f9ec2c46aadc9ad3779606cce7 --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\270\211/k8s(1).md" @@ -0,0 +1,275 @@ +```shell +#配置各主节点的主机名称 +192.168.100.146 +hostnamectl set-hostname master l11 + +192.168.100.147 +hostnamectl set-hostname node1 l12 + +192.168.100.150 +hostnamectl set-hostname node2 l13 + +#添加主机名解析,三台虚拟机都配置 +vim /etc/hosts + +192.168.100.146 master +192.168.100.147 node1 +192.168.100.150 node2 + +#永久禁用各节点的交换分区,为了提高各节点的性能 +swapoff -a +sed -i 's/.*swap.*/#&/' /etc/fstab + +#同步各节点的时区 +timedatectl set-timezone Asia/Shanghai + +#关闭iptables(防火墙)服务 +systemctl stop iptables +systemctl disable iptables + +# 编辑 /etc/selinux/config 文件,修改SELINUX的值为disable,如果没有SELINUX就不用管 +# 注意修改完毕之后需要重启linux服务 +SELINUX=disabled +reboot +``` + +### 开启模块 + +``` +#加载 overlay 和 br_netfilter 模块 +modprobe overlay +modprobe br_netfilter + +# 将以下内容写入 /etc/modules-load.d/k8s.conf 文件 +cat < /dev/null + +apt update + +apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + +systemctl status docker + +cd /etc/docker + +vim daemon.json + +{ "registry-mirrors": [ + "https://do.nark.eu.org", + "https://dc.j8.work", + "https://docker.m.daocloud.io", + "https://dockerproxy.com", + "https://docker.mirrors.ustc.edu.cn", + "https://docker.nju.edu.cn", + "https://alzgoonw.mirror.aliyuncs.com" ], +"log-driver": "json-file", + "log-opts": { + "max-size": "20m", + "max-file": "3" + } +} + +systemctl restart docker +systemctl enable docker +systemctl status docker +``` + +### 安装 并配置cri-docker + +```bash +wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.13/cri-dockerd-0.3.13.amd64.tgz +tar xf cri-dockerd-0.3.13.amd64.tgz +cp cri-dockerd/cri-dockerd /usr/bin/ +``` + +```bash +#配置启动文件 +vim /usr/lib/systemd/system/cri-docker.service +[Unit] +Description=CRI Interface for Docker Application Container Engine +Documentation=https://docs.mirantis.com +After=network-online.target firewalld.service docker.service +Wants=network-online.target +Requires=cri-docker.socket + +[Service] +Type=notify +ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9 +ExecReload=/bin/kill -s HUP $MAINPID +TimeoutSec=0 +RestartSec=2 +Restart=always + +# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229. +# Both the old, and new location are accepted by systemd 229 and up, so using the old location +# to make them work for either version of systemd. +StartLimitBurst=3 + +# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230. +# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make +# this option work for either version of systemd. +StartLimitInterval=60s + + +# Having non-zero Limit*s causes performance problems due to accounting overhead +# in the kernel. We recommend using cgroups to do container-local accounting. +LimitNOFILE=infinity +LimitNPROC=infinity +LimitCORE=infinity + +# Comment TasksMax if your systemd version does not support it. +# Only systemd 226 and above support this option. +TasksMax=infinity +Delegate=yes +KillMode=process + +[Install] +WantedBy=multi-user.target +``` + +```bash +#⽣成 socket ⽂件 +vim /usr/lib/systemd/system/cri-docker.socket + +[Unit] +Description=CRI Docker Socket for the API +PartOf=cri-docker.service + +[Socket] +ListenStream=%t/cri-dockerd.sock +SocketMode=0660 +SocketUser=root +SocketGroup=docker + +[Install] +WantedBy=sockets.target +``` + +```bash +#启动cri-docker并设置开机自启 +systemctl daemon-reload +systemctl enable cri-docker --now +systemctl is-active cri-docker +``` + +## 安装kubeadm、kubelet 和 kubectl + +```bash +apt-get update +apt-get install -y apt-transport-https ca-certificates curl gpg + +curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg + +#这里的包只适用于1.29,用其他版本的自行找相应的 +echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | tee /etc/apt/sources.list.d/kubernetes.list + + +apt-get update +apt-get install -y kubelet kubeadm kubectl +apt-mark hold kubelet kubeadm kubectl #固定版本 + +``` + +``` +# 查看k8s所需的镜像版本 +kubeadm config images list + +tee ./images.sh <<-'EOF' +#!/bin/bash +images=( +kube-apiserver:v1.29.4 +kube-controller-manager:v1.29.7 +kube-scheduler:v1.29.7 +kube-proxy:v1.29.7 +coredns:v1.11.1 +pause:3.9 +etcd:3.5.12-0 +) +for imageName in ${images[@]} ; do +docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName +done +EOF + +chmod +x ./images.sh && ./images.sh + +# 查看是否全部下载(没有下载的单独下载)7个 +docker images +``` + +``` +systemctl daemon-reload && systemctl restart cri-docker +cri-dockerd --version +``` + +``` +kubeadm init --config=init.default.yaml \ +--apiserver-advertise-address=192.168.100.146 \ +--control-plane-endpoint=k8s-master-1 \ +--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \ +--kubernetes-version=v1.29.4 \ +--service-cidr=10.96.0.0/16 \ +--pod-network-cidr=10.114.0.0/16 \ +--cri-socket=unix:///var/run/cri-dockerd.sock \ +--upload-certs +``` + +``` +rm /etc/kubernetes/manifests/kube-apiserver.yaml +rm /etc/kubernetes/manifests/kube-controller-manager.yaml +rm /etc/kubernetes/manifests/kube-scheduler.yaml +rm /etc/kubernetes/manifests/etcd.yaml +``` + +``` +kubeadm init \ +--apiserver-advertise-address=192.168.100.146 \ +--control-plane-endpoint=k8s-master-1 \ +--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \ +--kubernetes-version=v1.29.4 \ +--service-cidr=10.96.0.0/16 \ +--pod-network-cidr=10.114.0.0/16 \ +--cri-socket=unix:///var/run/cri-dockerd.sock +``` + +``` +kubeadm config print init-defaults > init.default.yaml + + +vim init.default.yaml + +``` + diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/Debian12\351\203\250\347\275\262Docker\350\277\220\350\241\214\347\216\257\345\242\203.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/Debian12\351\203\250\347\275\262Docker\350\277\220\350\241\214\347\216\257\345\242\203.md" new file mode 100644 index 0000000000000000000000000000000000000000..4c6b31c78e65cf40d1c13b8ee5f0f93fe28b3839 --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/Debian12\351\203\250\347\275\262Docker\350\277\220\350\241\214\347\216\257\345\242\203.md" @@ -0,0 +1,125 @@ +以下操作需要在 root 用户下完成,请切换到 root 用户进行操作。 +首先,安装一些必要的软件包: +```bash +apt update +apt upgrade -y +apt install curl vim wget gnupg dpkg apt-transport-https lsb-release ca-certificates + +``` + +### 然后加入 Docker 的 GPG 公钥和 apt 源: +```bash +# 通过阿里云得Docker 的 GPG 公钥 保存到/usr/share/keyrings/docker-ce.gpg +curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-ce.gpg +# 配置公钥和apt 源 +echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list +# 以上操作会生成一个/etc/apt/sources.list.d/docker.list +``` + +### 然后更新系统后即可用apt 安装 Docker CE 和 Docker Compose 插件: +```bash +apt update +apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin + +``` + +此时可以使用 `docker version` 命令检查是否安装成功: +```bash +# docker version +Client: Docker Engine - Community + Version: 27.1.1 + API version: 1.46 + Go version: go1.21.12 + Git commit: 6312585 + Built: Tue Jul 23 19:57:19 2024 + OS/Arch: linux/amd64 + Context: default + +Server: Docker Engine - Community + Engine: + Version: 27.1.1 + API version: 1.46 (minimum version 1.24) + Go version: go1.21.12 + Git commit: cc13f95 + Built: Tue Jul 23 19:57:19 2024 + OS/Arch: linux/amd64 + Experimental: false + containerd: + Version: 1.7.19 + GitCommit: 2bf793ef6dc9a18e00cb12efb64355c2c9d5eb41 + runc: + Version: 1.7.19 + GitCommit: v1.1.13-0-g58aa920 + docker-init: + Version: 0.19.0 + GitCommit: de40ad0 + +``` + +因为我们已经安装了 `docker-compose-plugin`,所以 Docker 目前已经自带 `docker compose` 命令 +```bash +root@debian ~ # docker compose version +Docker Compose version v2.29.1 +``` + +### 如果某些镜像或命令不兼容,则我们还可以单独安装 Docker Compose: + +```bash +# 下载二进制文件,另存为 /usr/local/bin/docker-compose +curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose +# 添加 执行 权限 +chmod +x /usr/local/bin/docker-compose + +``` +注意以上 github.com 网址访问 会时好时不好,多试几次,或想办法用国内镜像下载 + +此时可以使用 `docker-compose version` 命令检查是否安装成功: + +```bash +root@debian ~ # docker-compose version +Docker Compose version v2.29.1 +``` + +## 修改 Docker 配置 +我们要 +1. 限制日志文件大小,防止 Docker 日志塞满硬盘 (泪的教训) +2. 添加docker构建镜像的国内源,加速使用,不然docker build 会泪奔 +```bash +cat > /etc/docker/daemon.json << EOF +{ + "registry-mirrors": [ + "https://do.nark.eu.org", + "https://dc.j8.work", + "https://docker.m.daocloud.io", + "https://dockerproxy.com", + "https://docker.mirrors.ustc.edu.cn", + "https://docker.nju.edu.cn" + ], + "log-driver": "json-file", + "log-opts": { + "max-size": "20m", + "max-file": "3" + } +} +EOF + +``` + +以上配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小 + +## 重载Docker服务配置并重启Docker服务 +```bash + systemctl daemon-reload && systemctl restart docker +``` +注意: 若/etc/docker/daemon.json文件已存在,请先备份原文件。 + +至此,Debian12中的Docker运行环境 已安装完成,我们安装了以下组件 + +>1. Client: Docker Engine - Community : 即 Docker 客户端 +>2. Server: Docker Engine - Community : 即 Docker 服务端 +>3. Docker Compose version v2.29.1 即 Docker容器的编排工具 + + +# 教程:使 .NET 应用容器化 + +微软官方的.net教程:[通过 Docker 使应用程序容器化的教程 - .NET | Microsoft Learn](https://learn.microsoft.com/zh-cn/dotnet/core/docker/build-container?tabs=linux&pivots=dotnet-8-0) diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/c# \351\203\250\347\275\262docker\345\256\271\345\231\250.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/c# \351\203\250\347\275\262docker\345\256\271\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..592af27f8106982cca8d9863d8845a658f513454 --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/c# \351\203\250\347\275\262docker\345\256\271\345\231\250.md" @@ -0,0 +1,227 @@ +```sh +#下载SDK +wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb + +dpkg -i packages-microsoft-prod.deb + +rm packages-microsoft-prod.deb + +#安装SDK +apt update + +apt install dotnet-sdk-8.0 -y + +dotnet --list-sdks #检查SDK版本 + +#安装nodejs (后面docker要用到) +curl -fsSL https://deb.nodesource.com/setup_22.x -o nodesource_setup.sh +bash nodesource_setup.sh + +apt update + +apt install nodejs + +node -v #查看版本 + + +``` + + + +C# 打包到虚拟机 (vscode的打包步骤没写 请看之前的笔记) + +```sh +#进入 /opt目录 +1.cd /opt +2.将vscode里面的Admin.NET里面的Admin.NET和Web拉进/opt目录底下 +#将打包完成的项目上传到这个文件夹(直接拉取就好) +上传Admin.NET 这个文件夹到虚拟机/opt目录下面 +打包完会在 Admin.NET\Web 文件夹里得到一个dist文件夹,将dist上传到虚拟机的/opt目录下面 +``` + +![image-20240731224444216](image-20240731224444216.png) + +```sh +#下载nginx +apt install nginx -y +#修改nginx配置文件 +vim /etc/nginx/sites-available/default + +server { + listen 8888; #监听8888端口 + + location / { + root /opt/dist; #项目网页所在的目录 + index index.html index.htm; #当前端打不开 可以把index.htm 换成index.html + } + + location /api/ { + proxy_pass http://192.168.1.134:5005; #自己虚拟机的ip加上5005端口 + proxy_http_version 1.1; + } + + location /hubs/ { + proxy_pass http://192.168.1.134:5005; #自己虚拟机的ip加上5005端口 + proxy_http_version 1.1; + } + + location /upload/ { + alias /opt/adminnet/wwwroot/Upload/; + } + } +#检查配置文件 +nginx -t +#重启nginx +systemctl restart nginx +``` + +![image-20240731225332466](image-20240731225332466.png) + +```sh +#后端需要拉取依赖和启动服务,进入/opt/Admin.NET/Admin.NET.Web.Entry 目录 +cd /opt/Admin.NET/Admin.NET/Admin.NET.Web.Entry +#输入下面这个命令 跳转页面则成功 +dotnet watch --framework net8.0 +``` + +![image-20240731231158614](image-20240731231158614.png) + +```sh +输入 192.168.1.134:8888 能登录就可以了 +``` + + + +安装docker + +```sh +apt update #更新 +apt install ca-certificates curl #下载curl +install -m 0755 -d /etc/apt/keyrings + +#使用阿里源 +curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg + +#向 sources.list 中添加 Docker 软件源 +echo \ + "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian \ + $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null + + + #安装docker + apt update + apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin + + #启动docker + systemctl enable docker + systemctl start docker + +#建立 docker 组 + groupadd docker +#将当前用户加入 docker 组 + usermod -aG docker $USER + + + #配置镜像加速器 +cd /etc/docker +vim daemon.json #如果没有这个文件就新建一个 +{ + "registry-mirrors": ["https://s27jnhak.mirror.aliyuncs.com"] #https://s27jnhak.mirror.aliyuncs.com是镜像加速地址 +} +#镜像加速地址请登录阿里云获取 阿里云 -> 容器镜像服务 -> 镜像工具 -> 镜像加速器 + +#设置完成之后重启服务 +systemctl daemon-reload +systemctl restart docker +``` + +![image-20240731231648052](image-20240731231648052.png) + +```sh +#测试docker是否安装成功 +docker version #查看版本 + +docker run --rm hello-world + +#若能正常输出以下信息,则说明安装成功(如图) +``` + +![image-20240731231950975](image-20240731231950975.png) + +```sh +cd /opt/Admin.NET/Admin.NET #根据自己的路径 +``` + +![image-20240731232607854](image-20240731232607854.png) + +```sh +# 创建Dockerfile文件 +cat << EOF > Dockerfile +# 使用官方的 .NET SDK 镜像作为基础镜像 +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +WORKDIR /app + +# 将项目文件复制到镜像中 +COPY . ./ + +# 运行发布命令 +RUN dotnet publish -c Release -o output --framework net8.0 #进行项目打包 + +# 使用官方的 .NET 运行时镜像作为基础镜像 +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime +WORKDIR /app +COPY --from=build /app/output ./ + +# 指定应用程序入口点 +CMD ["dotnet","Admin.NET.Web.Entry.dll"] +EOF + +# 创建docker-compose.yml文件 +cat << EOF > docker-compose.yml +services: + admin-net: + build: + context: . + dockerfile: Dockerfile + ports: + - "5005:5005" +EOF +``` + +```sh +#先查看容器ip 我的是 172.17.0.1 +ip route +``` + +![image-20240731233511597](image-20240731233511597.png) + +```sh +vim /etc/nginx/sites-available/default #没有nginx要下载 apt install nginx +#修改配置文件 +``` + +![image-20240731233441103](image-20240731233441103.png) + +```sh +重启nginx +systemctl restart nginx +``` + +```sh +#运行docker容器 效果如图 +docker-compose up --build + +docker-compose up -d +``` + +![image-20240731233859763](image-20240731233859763.png) + + + + + +运行 docker-compose up --build 报错: + +![image-20240731233954959](image-20240731233954959.png) + +尽量c#单独一个虚拟机 不要与其他项目一块 \ No newline at end of file diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731224444216.png" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731224444216.png" new file mode 100644 index 0000000000000000000000000000000000000000..4907ab0fa92e502c5b46ee9492632e9e339cd6ee Binary files /dev/null and "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731224444216.png" differ diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731225332466.png" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731225332466.png" new file mode 100644 index 0000000000000000000000000000000000000000..bfe55becfe4403e88d237ce273e1e65e16f50995 Binary files /dev/null and "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731225332466.png" differ diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731231158614.png" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731231158614.png" new file mode 100644 index 0000000000000000000000000000000000000000..79a001c09f15a00a756bcd18d777dce57d2b41ce Binary files /dev/null and "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731231158614.png" differ diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731231648052.png" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731231648052.png" new file mode 100644 index 0000000000000000000000000000000000000000..3413892f06413a51e819e0eafbc0e1a87b13778f Binary files /dev/null and "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731231648052.png" differ diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731231950975.png" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731231950975.png" new file mode 100644 index 0000000000000000000000000000000000000000..93f79b169ac2ffcd43f7b9a98c9aadf5eceb06fb Binary files /dev/null and "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731231950975.png" differ diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731232607854.png" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731232607854.png" new file mode 100644 index 0000000000000000000000000000000000000000..3faa95f438430b764db540ec3dcfa5fe1af63a36 Binary files /dev/null and "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731232607854.png" differ diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731233441103.png" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731233441103.png" new file mode 100644 index 0000000000000000000000000000000000000000..830e96743b97313852a2ba9b408069a0e618a3e7 Binary files /dev/null and "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731233441103.png" differ diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731233511597.png" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731233511597.png" new file mode 100644 index 0000000000000000000000000000000000000000..66b70e944b30ed967453cb175ae5384742123cca Binary files /dev/null and "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731233511597.png" differ diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731233859763.png" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731233859763.png" new file mode 100644 index 0000000000000000000000000000000000000000..2f673290459a0d42b9472349fd2467fc67506a7a Binary files /dev/null and "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731233859763.png" differ diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731233954959.png" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731233954959.png" new file mode 100644 index 0000000000000000000000000000000000000000..119038161568bf65c0b9bf7e6a9b29adc8b23375 Binary files /dev/null and "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/c#\351\203\250\347\275\262docker\345\256\271\345\231\250/image-20240731233954959.png" differ diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/docker+nodejs.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/docker+nodejs.md" new file mode 100644 index 0000000000000000000000000000000000000000..23bb6a097e11e2c44205457971fcaa5b908bf32d --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/docker+nodejs.md" @@ -0,0 +1,84 @@ +#### node + +1. 安装docker和配置镜像加速地址: + + ``` + apt install docker.io #安装docker + + vim /etc/docker/daemon.json + 写入: + { + "registry-mirrors":["https://d6gxswc2.mirror.aliyuncs.com"] + } + { + "registry-mirrors": ["https://l2hiz7io.mirror.aliyuncs.com"] + } + systemctl restart docker + ``` + +1. 安装nodejs: + + ``` + apt update + apt install sudo + apt install curl + curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - + apt install nodejs + ``` + + 一般包含了npm,如果没有,运行 apt install npm 命令下载。 + +2. npm配置: + + ``` + run npm config set strict-ssl false + run npm config set registry https://registry.npmmirror.com + ``` + +3. 创建项目: + + ``` + npx create-strapi-app@latest my-project --quickstart + 然后按向下箭头选择Skip,跳过登录 + ``` + +4. 构建镜像: + + ``` + cd my-project #进入项目 + + vim Dockerfile #创建和编辑文件 + 写入: + from debian:latest + workdir /app + copy . . + run sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/' /etc/apt/sources.list && apt-get update -y + run apt-get install -y curl sudo + run curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - + run apt-get update -y + run apt-get install -y nodejs + run npm config set strict-ssl false + run npm config set registry https://registry.npmmirror.com + run npm install -g npm@10.8.2 + cmd ["npm","start"] + ``` + +5. 构建镜像: + + ``` + docker build --no-cache -t admin . #admin是自定义镜像名 + ``` + +5. 运行: + + ``` + docker run -p 1337:1337 -it --name my-strapi-app admin + #my-strapi-app是运行的容器名(可以自定义),admin是构建的镜像 + + docker ps #查看正在运行的容器 + docker run -p 1337:1337 -it admin#镜像名 ##再次运行 + ``` + + + + 浏览器访问 ip:1337 和 ip:1337/admin 。 \ No newline at end of file diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/php web docker(1).md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/php web docker(1).md" new file mode 100644 index 0000000000000000000000000000000000000000..712cc2696f82a418c37e60ca09cfce25b1fd94da --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/php web docker(1).md" @@ -0,0 +1,68 @@ +## PHP——docker + +- 编辑配置文件 + +``` +git clone https://gitee.com/meystack/swiftadmin.git #下载项目 + +cd swiftadmin #进入项目根目录 + +创建和编辑Dockerfile文件 +vim Dockerfile + +FROM php:8.1-cli +RUN echo "deb http://mirrors.ustc.edu.cn/debian/ buster main" > /etc/apt/sources.list +RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list +RUN apt-get update -y +RUN apt-get install -y \ + redis-server \ + libpng-dev \ + libzip-dev \ + libcurl4-openssl-dev +RUN docker-php-ext-install \ + zip \ + pcntl \ + gd \ + bcmath \ + pdo_mysql \ + mysqli \ + opcache \ + exif \ + curl +RUN pecl install redis && docker-php-ext-enable redis +COPY . /app +WORKDIR /app +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer +RUN composer install --no-autoloader --no-scripts +EXPOSE 8787 +CMD ["sh", "-c", "redis-server --supervised no & php start.php start"] +``` + +- 拉取、启动mysql、redis镜像 + +```sh +#拉取 +docker pull mysql +docker pull redis +#启动 +docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql +docker run --name some-redis -p 6379:6379 -d redis +``` + +- 构建镜像 + +```sh +docker build -t swift . +``` + +- 根据构建的镜像创建运行容器: + +``` +docker run -d --name test-swift -p 8787:8787 swift +docker ps #查看正在运行的容器 + +#浏览器访问 +http://自己虚拟机的IP:8787 +#进入之后选择页面 有个127.0.0.1 换成自己虚拟机的IP +``` + diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/php+docker.md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/php+docker.md" new file mode 100644 index 0000000000000000000000000000000000000000..32ce3ad9873effcb0f0f10193f280a9245aa005b --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/php+docker.md" @@ -0,0 +1,69 @@ +## PHP + +- 编辑配置文件 + +``` +git clone https://gitee.com/meystack/swiftadmin.git #下载项目 + +cd swiftadmin #进入项目根目录 + +创建和编辑Dockerfile文件 +vim Dockerfile + +FROM php:8.1-cli +RUN echo "deb http://mirrors.ustc.edu.cn/debian/ buster main" > /etc/apt/sources.list +RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list +RUN apt-get update -y +RUN apt-get install -y \ + redis-server \ + libpng-dev \ + libzip-dev \ + libcurl4-openssl-dev +RUN docker-php-ext-install \ + zip \ + pcntl \ + gd \ + bcmath \ + pdo_mysql \ + mysqli \ + opcache \ + exif \ + curl +RUN pecl install redis && docker-php-ext-enable redis +COPY . /app +WORKDIR /app +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer +RUN composer install --no-autoloader --no-scripts +EXPOSE 8787 +CMD ["sh", "-c", "redis-server --supervised no & php start.php start"] +``` + +- 拉取、启动mysql、redis镜像 + +```sh +#拉取 +docker pull mysql +docker pull redis +#启动 +docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql +docker run --name some-redis -p 6379:6379 -d redis +``` + +- 构建镜像 + +```sh +docker build -t swift . +``` + +- 根据构建的镜像创建运行容器: + +``` +docker run -d --name test-swift -p 8787:8787 swift +docker ps #查看正在运行的容器 + +#浏览器访问 +http://自己虚拟机的IP:8787 +#进入之后选择页面 有个127.0.0.1 换成自己虚拟机的IP +``` + +[192.168.83.148](http://192.168.83.148:8787/index) diff --git "a/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/\345\256\211\350\243\205docker .md" "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/\345\256\211\350\243\205docker .md" new file mode 100644 index 0000000000000000000000000000000000000000..8cd2ab35c7e33bfdb21828e41e8a2d14c1663fc4 --- /dev/null +++ "b/28\347\275\227\346\234\235\345\275\252/\345\256\236\350\256\255/\351\230\266\346\256\265\344\272\214/\345\256\211\350\243\205docker .md" @@ -0,0 +1,90 @@ +## docker + +```sh +apt update +apt install ca-certificates curl -y +install -m 0755 -d /etc/apt/keyrings + +#使用阿里源 +curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg + +#向 sources.list 中添加 Docker 软件源 +echo \ + "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://g8nhh0uz.mirror.aliyuncs.com/docker-ce/linux/debian \ + $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null +``` + +- 安装docker + +```sh +apt update +apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin +``` + +- 启动docker + +```sh +systemctl enable docker +systemctl start docker +``` + +- 建立docker用户组 + +```sh +#建立 docker 组 +groupadd docker +#将当前用户加入 docker 组 +usermod -aG docker $USER +``` + +- 配置镜像加速器 + +```sh +cd /etc/docker +vim daemon.json #如果没有这个文件就新建一个 +{ + "registry-mirrors": ["xxxxxx"] #xxxxx是镜像加速地址 +} +#镜像加速地址请登录阿里云获取 阿里云 -> 容器镜像服务 -> 镜像工具 -> 镜像加速器 + +#设置完成之后重启服务 +systemctl daemon-reload +systemctl restart docker +``` + +- 测试 Docker 是否安装正确 + +```sh +docker version #查看版本 + +docker run hello-world + +#若能正常输出以下信息,则说明安装成功 +Unable to find image 'hello-world:latest' locally +latest: Pulling from library/hello-world +b8dfde127a29: Pull complete +Digest: sha256:308866a43596e83578c7dfa15e27a73011bdd402185a84c5cd7f32a88b501a24 +Status: Downloaded newer image for hello-world:latest + +Hello from Docker! +This message shows that your installation appears to be working correctly. + +To generate this message, Docker took the following steps: + 1. The Docker client contacted the Docker daemon. + 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. + (amd64) + 3. The Docker daemon created a new container from that image which runs the + executable that produces the output you are currently reading. + 4. The Docker daemon streamed that output to the Docker client, which sent it + to your terminal. + +To try something more ambitious, you can run an Ubuntu container with: + $ docker run -it ubuntu bash + +Share images, automate workflows, and more with a free Docker ID: + https://hub.docker.com/ + +For more examples and ideas, visit: + https://docs.docker.com/get-started/ +``` +