From 8fa85ce914f64742bfb3367314b37a81e9c690c6 Mon Sep 17 00:00:00 2001 From: zzzxy <2132446376@qq.com> Date: Mon, 15 Jul 2024 20:40:19 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...53\345\242\231\347\253\257\345\217\243.md" | 72 +++++ ...he\346\212\245\351\224\231\351\233\206.md" | 48 +++ ...70\347\224\250\345\221\275\344\273\244.md" | 79 +++++ ...73\345\275\225\351\205\215\347\275\256.md" | 42 +++ ...QL\346\225\260\346\215\256\345\272\223.md" | 91 ++++++ ...75\345\222\214\350\277\230\345\216\237.md" | 92 ++++++ ...24-07-12-Shell\350\204\232\346\234\254.md" | 279 ++++++++++++++++++ ...50\345\214\226\350\277\220\347\273\264.md" | 255 ++++++++++++++++ 8 files changed, 958 insertions(+) create mode 100644 "22\351\202\271\345\220\221\345\216\237/2024-07-01-\345\256\211\350\243\205Apache\345\222\214\351\205\215\347\275\256\351\230\262\347\201\253\345\242\231\347\253\257\345\217\243.md" create mode 100644 "22\351\202\271\345\220\221\345\216\237/2024-07-02-Apache\346\212\245\351\224\231\351\233\206.md" create mode 100644 "22\351\202\271\345\220\221\345\216\237/2024-07-04-MySQL\345\270\270\347\224\250\345\221\275\344\273\244.md" create mode 100644 "22\351\202\271\345\220\221\345\216\237/2024-07-06-Postgresql\345\256\211\350\243\205\345\217\212\350\277\234\347\250\213\347\231\273\345\275\225\351\205\215\347\275\256.md" create mode 100644 "22\351\202\271\345\220\221\345\216\237/2024-07-06-postgreSQL\346\225\260\346\215\256\345\272\223.md" create mode 100644 "22\351\202\271\345\220\221\345\216\237/2024-07-09-\346\225\260\346\215\256\345\272\223\347\232\204\345\244\207\344\273\275\345\222\214\350\277\230\345\216\237.md" create mode 100644 "22\351\202\271\345\220\221\345\216\237/2024-07-12-Shell\350\204\232\346\234\254.md" create mode 100644 "22\351\202\271\345\220\221\345\216\237/2024-07-13-Ansible\350\207\252\345\212\250\345\214\226\350\277\220\347\273\264.md" diff --git "a/22\351\202\271\345\220\221\345\216\237/2024-07-01-\345\256\211\350\243\205Apache\345\222\214\351\205\215\347\275\256\351\230\262\347\201\253\345\242\231\347\253\257\345\217\243.md" "b/22\351\202\271\345\220\221\345\216\237/2024-07-01-\345\256\211\350\243\205Apache\345\222\214\351\205\215\347\275\256\351\230\262\347\201\253\345\242\231\347\253\257\345\217\243.md" new file mode 100644 index 0000000..e4a3d90 --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/2024-07-01-\345\256\211\350\243\205Apache\345\222\214\351\205\215\347\275\256\351\230\262\347\201\253\345\242\231\347\253\257\345\217\243.md" @@ -0,0 +1,72 @@ +## 安装Apache和配置防火墙端口 + +1. ### 更新程序包并安装Apache + +```bash +apt update +apt install apache2 +``` + +2. ### 检查Apache状态 + +```bash +systemctl status apache2 +``` + +3. ### 打开ufw防火墙端口 + +```bash +ufw allow 22 #开启22端口 +ufw status #查看状态 +To Action From +-- ------ ---- +22 ALLOW Anywhere +22 (v6) ALLOW Anywhere (v6) +ufw allow 8080 #开启8080端口 +systemctl reload apache2 #重启Apache,以便后续打开网页 +ufw allow 80 #开启80端口 +ufw allow 443 #开启443端口 +systemctl reload nginx #重启nginx,方便后续打开网页 +ufw status #查看最终状态 +To Action From +-- ------ ---- +22 ALLOW Anywhere +8080 ALLOW Anywhere +443 ALLOW Anywhere +80 ALLOW Anywhere +22 (v6) ALLOW Anywhere (v6) +8080 (v6) ALLOW Anywhere (v6) +443 (v6) ALLOW Anywhere (v6) +80 (v6) ALLOW Anywhere (v6) +``` + +4. 修改etc中apache2文件 + +```bash +vim ports.conf +listen 8080 #将原本的80端口修改成8080端口,其他不变 +systemctl reload apache2 #重启Apache +``` + +5. 修改etc/nginx/conf.d中的文件 + +```bash +#在文件中新增一条命令 +server{ + listen 80; + server_name myzxy.top,www.myzxy.top; + location / { + root /var/www/zxy.com; + index index.html; + } +} +``` + +6. 访问网页和不安全网页以及Apache网页 + +```bash +https://myzxy.top #安全网页 +https://myzxy.top:8080 #Apache网页 +http://myzxy.top #不安全网页 +``` + diff --git "a/22\351\202\271\345\220\221\345\216\237/2024-07-02-Apache\346\212\245\351\224\231\351\233\206.md" "b/22\351\202\271\345\220\221\345\216\237/2024-07-02-Apache\346\212\245\351\224\231\351\233\206.md" new file mode 100644 index 0000000..f1abf6c --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/2024-07-02-Apache\346\212\245\351\224\231\351\233\206.md" @@ -0,0 +1,48 @@ +## Apache报错集 + +1. ### apache启动报错 + +```bash +[Wed Jul 03 08:28:39.964000 2024] [core:warn] [pid 248799] AH00111: Config variable ${APACHE_RUN_DIR} is not defined +apache2: Syntax error on line 80 of /etc/apache2/apache2.conf: DefaultRuntimeDir must be a valid directory, absolute or relative to ServerRoot +``` + +##### 这是由于升级后apache配置文件变化,没有导入新的apache环境变量 + +### 解决办法 + +```bash +source /etc/apache2/envvars或 . /etc/apache2/envvars +``` + +2. ### 若重启Apache显示失败,并且查询端口并没被占用,可选择完全卸载重新安装Apache2 + +### 解决办法 + +```bash +#先删除 +sudo apt-get --purge remove apache2 +sudo apt-get --purge remove apache2.2-common +sudo apt-get autoremove +#最后找到没删除掉的配置文件进行删除 +sudo find /etc -name "*apache*" -exec rm -rf {} \; +sudo rm -rf /var/www #建议进入var中选择删除Apache的网页,以免直接删除其他网页 +#卸载完后重新安装Apache2 +sudo apt-get install apache2 +sudo /etc/init.d/apache2 restart +``` + +3. ### 查看Apache2状态显示关闭,使用apache2 --help 查看说是端口被占用,则修改端口 + +### 解决办法 + +```bash +#进入到/etc/apache2中,修改ports.conf +vim ports.conf +listen 80 => listen 81 #将80端口改成81端口 +systemctl reload apache2 #重启Apache2 +systemctl restart apache2 #重新运行配置文件 +systemctl status apache2 #检查Apache2状态 +ufw allow 81/tcp #添加81端口 +``` + diff --git "a/22\351\202\271\345\220\221\345\216\237/2024-07-04-MySQL\345\270\270\347\224\250\345\221\275\344\273\244.md" "b/22\351\202\271\345\220\221\345\216\237/2024-07-04-MySQL\345\270\270\347\224\250\345\221\275\344\273\244.md" new file mode 100644 index 0000000..45b443b --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/2024-07-04-MySQL\345\270\270\347\224\250\345\221\275\344\273\244.md" @@ -0,0 +1,79 @@ +## MySQL常用命令 + +### 连接Mysql + +```bash +mysql -u 用户名 -p +例:mysql -u root -p +``` + +### use 数据库名:选择要使用的数据库 + +```bash +use mydatabase +``` + +### show:所有可用数据库或所选数据库中的所有表 + +```bash +show databases; +show tabales; +``` + +### create:创建数据库或表 + +```sql +create database 数据库名; +例:create database mydatabase; + +create table 表名; +例:create table stu; +``` + +### insert:插入表数据 + +```sql +insert into 表名 values(数据1,数据2,数据3); +例:insert into stu values('1','张三','1234'); +或 +insert into stu(列1,列2,列3) values('数据1','数据2','数据3'); +例:insert into stu(id,name,class) values('2','丽莎',222); +``` + +### dorp、delete:删除表或数据库、删除表数据 + +```sql +drop database 库名; +drop table 表名; +例:drop database mydatabase; + drop table stu; +delete from 表名 where 条件; +例:delete from stu where id=1; +``` + +### update、alter:更改表数据、插入新字段 + +```sql +update 表名 set 列名=值 where id=值; +例:update stu set class=1234 where id=1; + +alter table 表名 add 新字段名 数据类型; +例:alter table stu add stunum varchar(10); +``` + +### select、show、describe/desc:查询表数据、查看所有表、查看表结构 + +```sql +show 数据库名; +例:show database; + +select * from 表名; +例:select * from stu; + +describe table 表名; +例:describe table stu; + +desc table 表名; +例:desc table stu; +``` + diff --git "a/22\351\202\271\345\220\221\345\216\237/2024-07-06-Postgresql\345\256\211\350\243\205\345\217\212\350\277\234\347\250\213\347\231\273\345\275\225\351\205\215\347\275\256.md" "b/22\351\202\271\345\220\221\345\216\237/2024-07-06-Postgresql\345\256\211\350\243\205\345\217\212\350\277\234\347\250\213\347\231\273\345\275\225\351\205\215\347\275\256.md" new file mode 100644 index 0000000..846cfd1 --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/2024-07-06-Postgresql\345\256\211\350\243\205\345\217\212\350\277\234\347\250\213\347\231\273\345\275\225\351\205\215\347\275\256.md" @@ -0,0 +1,42 @@ +## Postgresql安装及远程登录配置 + +- 先找到官网,选择Linux下的debain版本 + +```bash +sudo apt install -y postgresql-common +sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh +apt search postgresql* #查询postgresql的版本是否是新版,16~17 +apt insatll postgresql #确认版本为最新则开始安装 +whereis postgresql #下载完后查看存在哪个目录下 +``` + +- 尝试本地登录postgresql + +```bash +su postgres #从root切换到postgres用户 +psql #无密码直接登录 +``` + +- 尝试远程登录postgresql + +```bash +sudo vim /etc/postgresql/16/main/postgresql.conf #找到postgresql的postgresql.conf配置文件 +找到listen_addresses = 'localhost',将localhost改成 * #这表示允许所有IP地址连接 +sudo vim /etc/postgresql/16/main/pg_hba.conf #找到postgresql的身份认证文件pg_hba.conf +#找到IPV4并插入一行 +host all all 0.0.0.0/0 md5 +#新增防火墙5432端口 +ufw allow 5432/tcp +ufw status #查看端口是否开启 +sudo service postpresql restart #重启postgresql +``` + +- 给postgresql设置远程登录密码 + +```bash +su postgres #进入postgres +psql -h 110.41.158.169 -U postgres -d postgres #h:IP,U:用户,d:数据库 +-password #设置密码 +exit #重新登录 +``` + diff --git "a/22\351\202\271\345\220\221\345\216\237/2024-07-06-postgreSQL\346\225\260\346\215\256\345\272\223.md" "b/22\351\202\271\345\220\221\345\216\237/2024-07-06-postgreSQL\346\225\260\346\215\256\345\272\223.md" new file mode 100644 index 0000000..f1c3f2a --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/2024-07-06-postgreSQL\346\225\260\346\215\256\345\272\223.md" @@ -0,0 +1,91 @@ +## postgreSQL数据库 + +### 基本语法 + +```bash +本地登录postgresql,先切换到postgres这个用户 +su postgres +再连接postgresql,用psql命令,默认什么参数和选项都不写。表示直接连接本地的数据库 +psql + +连接数据库时可以指定用户和数据库 +psql -U user -d dbname +本地不需要密码????不用密码! + +列举数据库,相当于mysql的show databases +\l # list + +切换数据库,相当于mysql的use dbname +\c dbname # change + +列举表,相当于mysql的show tables +\dt \desc table + +查看表结构,相当于desc tblname,show columns from tbname +\d tblname + +\di 查看索引 + +创建数据库: +create database [数据库名]; + +创建表: +create table [表名](列名1 数据类型,列名2 数据类型,列名3 数据类型); + +插入数据: +insert into 表名(列1,列2....)values(数据1,数据2.....); + +查询数据: +select * from 表名; + +查询指定列 +select 列名 from 表名; + +删除数据库: +drop database [数据库名]; + +*重命名一个表: +alter table [表名A] rename to [表名B]; + +*删除一个表: +drop table [表名]; + +*在已有的表里添加字段: +alter table [表名] add column [字段名] [类型]; + +*删除表中的字段: +alter table [表名] drop column [字段名]; + +*重命名一个字段: +alter table [表名] rename column [字段名A] to [字段名B]; + +*给一个字段设置缺省值: +alter table [表名] alter column [字段名] set default [新的默认值]; + +*去除缺省值: +alter table [表名] alter column [字段名] drop default; + +在表中插入数据: +insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......); + +修改表中的某行某列的数据: +update [表名] set [目标字段名]=[目标值] where [该行特征]; + +删除表中某行数据: +delete from [表名] where [该行特征]; + +delete from [表名];--删空整个表 + +创建表: +create table ([字段名1] [类型1] ;,[字段名2] [类型2],......<,primary key (字段名m,字段名n,...)>;); +\copyright 显示 PostgreSQL 的使用和发行条款 +\encoding [字元编码名称] + 显示或设定用户端字元编码 +\h [名称] SQL 命令语法上的说明,用 * 显示全部命令 +\prompt [文本] 名称 + 提示用户设定内部变数 +\password [USERNAME] 修改密码 + securely change the password for a user +\q 退出 psql +``` + diff --git "a/22\351\202\271\345\220\221\345\216\237/2024-07-09-\346\225\260\346\215\256\345\272\223\347\232\204\345\244\207\344\273\275\345\222\214\350\277\230\345\216\237.md" "b/22\351\202\271\345\220\221\345\216\237/2024-07-09-\346\225\260\346\215\256\345\272\223\347\232\204\345\244\207\344\273\275\345\222\214\350\277\230\345\216\237.md" new file mode 100644 index 0000000..84b198d --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/2024-07-09-\346\225\260\346\215\256\345\272\223\347\232\204\345\244\207\344\273\275\345\222\214\350\277\230\345\216\237.md" @@ -0,0 +1,92 @@ +## 数据库的备份和还原 + +### MySQL: + +```bash +#备份单个数据库 +mysqldump -u root -p 要备份的数据库 > 保存位置 +mysqldump -u root -p Jd50 > /tmp/t1.sql +# 恢复单个数据库 +mysql -u root -p 要还原的数据库 < 保存的位置 +# 单个数据库的恢复需要先创建好,名字任意 +mysql -u root -p Jd50 < /tmp/t1.sql +# 另一种恢复方法,先登录mysql,再use要被恢复的数据库 +source 保存的位置 + + +# 多个数据库一起备份 +mysqldump -u root -p --databases 库1 库2 ... > 保存的位置 +mysqldump -u root -p --databases u1 u2 u3 > /tmp/u234.sql +# 多个数据库一起恢复 +mysql -u root -p < 保存的位置 +mysql -u root -p < /tmp/u234.sql +# 另一种恢复方法,先登录mysql +source 保存的位置 + + +# 备份所有数据库 +mysqldump -u root -p --all-databases > 保存的位置 +# 多个数据库一起恢复 +mysql -u root -p < 保存的位置 +# 另一种恢复方法,先登录mysql +source 保存的位置 + + +# 备份某个数据库单个表 +mysqldump -u root -p 要备份的数据库 表名 > 保存的位置 +# 恢复单个数据库单个表 +mysql -u root -p 要还原的数据库 < 保存的位置 + +# 备份某个数据库多个表 +mysqldump -u root -p 要备份的数据库 表名1 表2 > 保存的位置 +# 恢复单个数据库多个表 +mysql -u root -p 要还原的数据库 < 保存的位置 + +# 备份压缩和解压缩 +mysqldump -u root -p 要备份的数据库 表名1 表2 | gzip > 保存的位置.gz +# 还原压缩包格式的备份 +# 1 +gunzip < 保存的位置.gz | mysql -u root -p +gunzip -c 保存的位置.gz | mysql -u root -p +# 2 +gzip -d < 保存的位置.gz | mysql -u root -p +gzip -cd 保存的位置.gz | mysql -u root -p +``` + +### postgreSQL: + +```bash +#备份 +pg_dump -U postgres -d test -f /tmp/post_test.sql +pg_dump -U postgres -d test > /tmp/post_test.sql +pg_dump -U postgres -Fc test > /tmp/post_test.dump # 用pg_restore来恢复 +# 恢复 +su postgres +psql -h 127.0.0.1 -U postgres -d 要恢复的数据库 -f 备份的地址 +psql -h 127.0.0.1 -U postgres -d 要恢复的数据库 < 备份的地址 + +#备份一个或多个表 +pg_dump -U postgres -d test -t 表名1 -t 表2 > /tmp/post_test.sql +# 恢复 +su postgres +psql -h 127.0.0.1 -U postgres -d 要恢复的数据库 -f 备份的地址 +psql -h 127.0.0.1 -U postgres -d 要恢复的数据库 < 备份的地址 + +# 备份所有数据库 +pg_dumpall -U > 位置 +# 恢复所有数据库 +psql < 位置 + +# 如果加了-h 主机,就要密码,而且一般要指定-U这个选项指定用户名 + + +# 压缩备份单个数据 +pg_dump -U postgres -d test -t teacher -t student | gzip > /tmp/ts.sql.gz +# 压缩恢复单个数据库 +gunzip < /tmp/ts.sql.gz | psql -h 127.0.0.1 -U postgres -d test + +#所有 +pg_dumpall | gzip > /tmp/222.sql.gz +gunzip < /tmp/222.sql.gz | psql +``` + diff --git "a/22\351\202\271\345\220\221\345\216\237/2024-07-12-Shell\350\204\232\346\234\254.md" "b/22\351\202\271\345\220\221\345\216\237/2024-07-12-Shell\350\204\232\346\234\254.md" new file mode 100644 index 0000000..f2ac3f0 --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/2024-07-12-Shell\350\204\232\346\234\254.md" @@ -0,0 +1,279 @@ +## Shell脚本 + +#### shell脚本的基本格式 + +首先来创建一个基础的脚本 + +```bash +root@class3:~# vim t.sh +#!/bin/bash +# 第一行开头"#!/bin/bash",表示此行以下的代码语句是通过/bin/bash程序来解释执行。 +# #!/bin/bash为默认的解释器还有其他类型的解释器,#!/bin/python #!/bin/expect +# this is shell +# 第二行为注释内容,以#开头为注释信息,执行时被忽略。可以写一些shell脚本的介绍 +echo "hello world" +mkdir /opt/test +touch /opt/test/a.txt +ls -l /opt +#第3+行为执行语句或命令 +``` + +shell脚本文件一般以.sh结尾 + +那么如何去执行呢? + +#### 2.执行SHELL脚本的三种方式 + +1. 脚本路径执行:可以是绝对路径,也可以是相对路径。需要权限 + + ```bash + root@class3:~# /root/t.sh #绝对路径 + root@class3:~# ./t.sh #相对路径 + # 需要权限 + root@class3:~# chmod +x t.sh + ``` + +2. shell解释器执行:指定使用bash去执行,不需要权限 + + ```bash + root@class3:~#bash t.sh + ``` + +3. source或.:也可以直接执行,不需要权限,但是会影响当前环境 + + ```bash + root@class3:~#source t.sh + root@class3:~#. t.sh + ``` + + | 执行方式 | 是否需要权限 | 是否影响当前环境 | + | :-------------- | :----------: | :--------------: | + | 脚本路径执行 | yes | no | + | shell解释器执行 | no | no | + | source或. | no | yes | + + 因为路径和shell解释器形式,其实是开一个子进程,在子进程中执行脚本,所以不会影响到原来的环境 + +#### 3.shell脚本执行逻辑 + +1. 顺序执行:程序按从上到下顺序执行 +2. 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行 if +3. 循环执行:程序执行过程中需要重复执行多次某段语句 while for + + + +### (三)脚本错误调试 bash -x -n + +#### 1.命令错误 + +默认后续的命令还会继续执行,可以使用 bash -x 进行观察 + +```bash +root@class1:~# cat tt.sh +#!/bin/bash +echo 111 +eho 222 +echo 333 + +root@class1:~# bash -x tt.sh ++ echo 111 +111 ++ eho 222 +tt.sh: 行 3: eho: 未找到命令 # 检测到错误 ++ echo 333 +333 +``` + +#### 2.语法错误 + +会导致后续的命令不继续执行,可以用bash -n 检查错误,但是提示的出错行数可能会因为嵌套结构而显得不准确 + +```bash +root@class1:~# cat tt.sh +#!/bin/bash +echo 111 +eho 666 +if +echo 777 + + +root@class1:~# bash -x tt.sh # 可能发现所有错误 ++ echo 111 +111 ++ eho 666 +tt.sh: 行 3: eho: 未找到命令 +tt.sh: 行 6: 语法错误:未预期的文件结束符 +root@class1:~# bash -n tt.sh # 只能发现语法错误 +tt.sh: 行 6: 语法错误:未预期的文件结束符 +``` + +## 二、变量 + +**自定义变量 语法为** : 变量名=变量值 + +- =号两边不能有空格 +- 变量名称**不能以数字开头** +- 字符串加引号 +- 变量名前加$,表示使用变量的值 + +```bash +root@class1:~#myage=18 # 注意没有空格 +``` + +**交互式定义变量 :** read -p + +语法 : read p "提示语" 变量名 + +```bash +# 语法 : read p "提示语" 变量名 +root@class1:~# read -p "请输入一个日期" date +请输入一个日期666 +date=666 +root@class1:~# echo $date +666 + +``` + +#### **只读变量** + +只读变量在声明后不能更改其值。在Bash shell中,通过readonly 命令来声明位置变量 + +```bash +root@class1:~# readonly name=张三 +root@class1:~# echo $name +张三 +root@class1:~# name=李四 +-bash: name: 只读变量 +# 一旦建立后,无法进行追加和删除 +root@class1:~# unset name +-bash: unset: name: 无法取消设定:只读variable +``` + +#### **预定义变量** + +预定义变量是Shell在启动时就已经存在的变量,它们由系统自动初始化,并且具有特定含义和用途。例如 + +```bash +$HOME #当前用户的家目录路径。 +$USER 或 $LOGNAME #当前用户的用户名。 +$PATH #用于查找可执行文件的路径列表。 +$PWD #当前工作目录(Present Working Directory) +# 可以同过env命令进行查看当前系统有哪预定义变量 +``` + +#### **环境变量** + +环境变量是一种特殊的预定义变量,不仅在当前Shell会话中可用,还会被所有子进程继承。 + +在当前shell环境中定义的变量是无法自动被其它子进程继承的,需要通过export命令去赋予 + +#### **位置变量** + +指的是从命令行传递给脚本或函数的参数。每个参数都有一个编号,从 $0 开始,其中 $0 是脚本本身的名字,而 $1、$2、$3 等依次对应第一个、第二个、第三个参数等。 + +```bash +#!/bin/bash +echo "脚本的文件名 $0" #会打印出脚本的文件名 +echo "$1" #脚本后面的第一个参数 +echo "$2" #脚本后面的第二个参数 +echo "$3" #脚本后面的第三个参数 +echo "${10}" #脚本后面的第十个参数 + +#①:$0是一个特殊变量,它代表脚本的文件名 +#②:${10}必须用大括号括起来,否则将$看成变量,在后面加0 +#$# 参数的个数 + +!/bin/bash + 将脚本接收的第一个参数赋值给FILE变量 +read -p "请输入你要删除的文件名: " FILE +if [ $0 = $FILE ];then exit; +else + read -p "你是否真的要删除$FILE :" YN +if [ $YN = 'y' ] + then rm $FILE; echo "已删除$FILE" +else + echo "已取消删除" +fi +fi + +echo "程序退出" + + +``` + +### 特殊变量与符号 + +#### 1.符号 + +在变量中,有一些特殊符号,需要我们去掌握 + +| 符号 | 名称 | 作用 | +| ------------------------------------------------------------ | ------ | ---------------------------------------- | +| " " | 双引号 | 弱引用 可以识别变量 "$name",将变量转成值 | +| ‘ ’ | 单引号 | 强引用 不能识别变量 '$name',不变值 | +| { } | 大括号 | 定义变量名的范围 ${dizhi}30 | +| \`` | 反撇 | 调用命令的执行结果 ,另一种写法$( 命令 ) \`命令` | | | + +#### 2.特殊变量 + +在预定义变量中,还存在一些特殊变量,比如在之前说到的$0就是一种特殊变量 + +| $* | 代表一个整体,把所有位置参数当成整体返回,所有参数 | +| ---- | ---------------------------------------------------------- | +| $@ | 代表独立个体,把所有位置参数当成个体返回,查询与上面的区别 | +| $? | 上一条命令的执行结果是否成功。正确为0,返回任何非0值为异常 | +| $# | 代表位置参数个数 | +| $0 | 代表当前脚本的名称 | +| $$ | 当前bash的pid | + + + +### (四)四则运算 + +加法 + + +减法 - + +乘法 \ * :*表示乘。但是因为其有特殊含义,需要加上\转义符进行转义,表达原本的意思 + +除法 / + +#### 1.expr运算 + +基本格式为:expr 变量 + 变量 (注意空格) + +```bash +expr $a+$b # 错误 +expr $a + $b +sum=$(expr $a + $b) +``` + +#### 2.使用(())运算 + +将变量a与b相加,格式为 :(( 变量名=算数表达式 )) + +```bash +(( sum=a + b )) +echo $sum +#()内可以直接调用变量,不需要加$符号 +``` + +#### 3.使用let运算 + +格式为 let 运算结果变量名=运算表达式 + +``` +let sum=$a + $b; +``` + +#### 4.方括号[ ]运算 + +语法为:运算结果变量名=$[算术表达式] + +```bash +a=1 +b=2 +sum=$[a+b] +echo $sum +``` + diff --git "a/22\351\202\271\345\220\221\345\216\237/2024-07-13-Ansible\350\207\252\345\212\250\345\214\226\350\277\220\347\273\264.md" "b/22\351\202\271\345\220\221\345\216\237/2024-07-13-Ansible\350\207\252\345\212\250\345\214\226\350\277\220\347\273\264.md" new file mode 100644 index 0000000..725f3f8 --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/2024-07-13-Ansible\350\207\252\345\212\250\345\214\226\350\277\220\347\273\264.md" @@ -0,0 +1,255 @@ +## Ansible自动化运维 + +常用模块 + +### 1. command 模块:命令 + +这个模块可以直接在远程主机上执行命令,并将结果返回本主机。命令模块接受命令名称,后面是空格分隔的列表参数。 + +```bash +chdir       # 在执行命令之前,先切换到该目录 +executable # 切换shell来执行命令,需要使用命令的绝对路径 +free_form   # 要执行的Linux指令,一般使用Ansible的-a参数代替。 +creates  # 一个文件名,当这个文件存在,则该命令不执行,可以 +用来做判断 +removes # 一个文件名,这个文件不存在,则该命令不执行 + +[root@server ~]# ansible web -m command -a 'chdir=/data/ ls' #先切换到/data/ 目录,再执行“ls”命令 +``` + +### 2. shell 模块 + +  shell模块可以在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等。 + +```bash +[root@server ~]# ansible mdd -m shell -a 'cat /etc/passwd |grep "root"' +#只要是我们的shell命令,都可以通过这个模块在远程主机上运行 +``` + +### 3. copy 模块 + +  这个模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等 +  其相关选项如下: + +> `src`    #被复制到远程主机的本地文件。可以是绝对路径,也可以是相对路径。如果路径是一个目录,则会递归复制,用法类似于"rsync" +> `content`   #用于替换"src",可以直接指定文件的值 +> `dest`    #必选项,将源文件复制到的远程主机的**绝对路径** +> `backup`   #当文件内容发生改变后,在覆盖之前把源文件备份,备份文件包含时间信息 +> `directory_mode`    #递归设定目录的权限,默认为系统默认权限 +> `force`    #当目标主机包含该文件,但内容不同时,设为"yes",表示强制覆盖;设为"no",表示目标主机的目标位置不存在该文件才复制。默认为"yes" +> `others`    #所有的 file 模块中的选项可以在这里使用 +> +> mode : 权限 + +用法举例如下: + +**** + +```bash +# ① 复制文件: +[root@server ~]# ansible mdd -m copy -a 'src=~/hello dest=/tmp/hello' +# ② 给定内容生成文件,并制定权限 +[root@server ~]# ansible mdd -m copy -a 'content="I am qq\n" dest=/tmp/name mode=666' +[root@server ~]# ansible mdd -m shell -a 'ls -l /tmp/' +# ③ 关于覆盖  我们把文件的内容修改一下,然后选择覆盖备份: +[root@server ~]# ansible mdd -m copy -a 'content="I am big qq\n" backup=yes dest=/tmp/name mode=666' +``` + +### 4. file 模块 + +  该模块主要用于设置文件的属性,比如创建文件、创建链接文件、删除文件等。 + +下面是一些常见的命令: + +> `path`:定义文件/目录的路径 +> +> `mode`:定义文件/目录的权限 +> +> `force`  #需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no +> `group`  #定义文件/目录的属组。后面可以加上`mode`:定义文件/目录的权限 +> `owner`  #定义文件/目录的属主。后面必须跟上`path`:定义文件/目录的路径 +> `recurse`  #递归设置文件的属性,只对目录有效,后面跟上`src`:被链接的源文件路径,只应用于`state=link`的情况 +> `dest`  #被链接到的路径,只应用于`state=link`的情况 +> `state`  #状态,有以下选项: +> +> +> +> > `directory`:如果目录不存在,就创建目录 +> > `file`:即使文件不存在,也不会被创建 +> > `link`:创建软链接 +> > `hard`:创建硬链接 +> > `touch`:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间 +> > `absent`:删除目录、文件或者取消链接文件 + +用法举例如下: + +```bash +# ① 创建目录: +[root@server ~]# ansible mdd -m file -a 'path=/tmp/app state=directory' +# ② 创建链接文件 +[root@server ~]# ansible mdd -m file -a 'path=/tmp/bbb.jpg src=aaa.jpg state=link' +# ③ 删除文件 +[root@server ~]# ansible mdd -m file -a 'path=/tmp/a state=absent' + +``` + +### 5. fetch 模块 + +该模块用于从远程某主机获取(复制)文件到本地。 +  有两个选项: + +> `dest`:用来存放文件的目录 +> `src`:在远程拉取的文件,并且必须是一个**file**,不能是**目录** + +  具体举例如下: + +```bash +[root@server ~]# ansible mdd -m fetch -a 'src=/tmp/hello dest=/tmp' +``` + +### 6. cron 模块 + +该模块适用于管理`cron`计划任务的。 +  其使用的语法跟我们的`crontab`文件中的语法一致,同时,可以指定以下选项: + +> `day=` #日应该运行的工作( 1-31, *, */2, ) +> `hour=` # 小时 ( 0-23, *, */2, ) +> `minute=` #分钟( 0-59, *, */2, ) +> `month=` # 月( 1-12, *, /2, ) +> `weekday=` # 周 ( 0-6 for Sunday-Saturday,, ) +> `job=` #指明运行的命令是什么 +> `name=` #定时任务描述 +> `reboot` # 任务在重启时运行,不建议使用,建议使用special_time +> `special_time` #特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时) +> `state` #指定状态,present表示添加定时任务,也是默认设置,absent表示删除定时任务 +> `user` # 以哪个用户的身份执行 + +```bash +① 添加计划任务 +[root@server ~]# ansible mdd -m cron -a 'name="ntp update every 5 min" minute=*/5 job="/sbin/ntpdate 172.17.0.1 &> /dev/null"' +#我们可以去查看一下: +[root@server ~]# ansible web -m shell -a 'crontab -l' +#② 删除计划任务 +# 如果我们的计划任务添加错误,想要删除的话,则执行以下操作: +#  首先我们查看一下现有的计划任务: +[root@server ~]# ansible web -m shell -a 'crontab -l' +# 然后执行删除操作: +[root@server ~]# ansible web -m cron -a 'name="df everyday" hour=15 job="df -lh >> /tmp/disk_total &> /dev/null" state=absent' + +``` + +### 7. apt 模块 + +  顾名思义,该模块主要用于软件的安装。 +  其选项如下: + +> `name=`  #所安装的包的名称 +> `state=`  #`present`--->安装, `latest`--->安装最新的, `absent`---> 卸载软件。 +> `update_cache`  #强制更新yum的缓存 +> `conf_file`  #指定远程yum安装时所依赖的配置文件(安装本地已有的包)。 +> `disable_pgp_check`  #是否禁止GPG checking,只用于`present`or `latest`。 +> `disablerepo`  #临时禁止使用yum库。 只用于安装或更新时。 +> `enablerepo`  #临时使用的yum库。只用于安装或更新时。 + +``` +root@class2:~# ansible test -m apt -a 'name=tree state=present' +``` + +### 8. service 模块 + +该模块用于服务程序的管理。 +  其主要选项如下: + +> `arguments` #命令行提供额外的参数 +> `enabled` #设置开机启动。 +> `name=` #服务名称 +> `runlevel` #开机启动的级别,一般不用指定。 +> `sleep` #在重启服务的过程中,是否等待。如在服务关闭以后等待2秒再启动。(定义在剧本中。) +> `state` #有四种状态,分别为:`started`--->启动服务, `stopped`--->停止服务, `restarted`--->重启服务, `reloaded`--->重载配置 + +```bash +# ① 开启服务并设置自启动 +[root@server ~]# ansible mdd -m service -a 'name=nginx state=started enabled=true' +# ② 关闭服务  我们也可以通过该模块来关闭我们的服务: +[root@server ~]# ansible web -m service -a 'name=nginx state=stopped' +``` + +### 9. user 模块 + +该模块主要是用来管理用户账号。 +  其主要选项如下: + +> `comment`  # 用户的描述信息 +> `createhome`  # 是否创建家目录 +> `force`  # 在使用state=absent时, 行为与userdel –force一致. +> `group`  # 指定基本组 +> `groups`  # 指定附加组,如果指定为(groups=)表示删除所有组 +> `home`  # 指定用户家目录 +> `move_home`  # 如果设置为home=时, 试图将用户主目录移动到指定的目录 +> `name`  # 指定用户名 +> `non_unique`  # 该选项允许改变非唯一的用户ID值 +> `password`  # 指定用户密码 +> `remove`  # 在使用state=absent时, 行为是与userdel –remove一致 +> `shell`  # 指定默认shell +> `state`  # 设置帐号状态,不指定为创建,指定值为absent表示删除 +> `system`  # 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户 +> `uid`  # 指定用户的uid + +```bash +#① 添加一个用户并指定其 uid +[root@server ~]# ansible mdd -m user -a 'name=qq uid=11111' +#② 删除用户 +[root@server ~]# ansible mdd -m user -a 'name=qq state=absent' +``` + +### 10. group 模块 + +该模块主要用于添加或删除组。 +  常用的选项如下: + +> `gid=`  #设置组的GID号 +> `name=`  #指定组的名称 +> `state=`  #指定组的状态,默认为创建,设置值为`absent`为删除 +> `system=`  #设置值为`yes`,表示创建为系统组 + +```bash +#① 创建组 +[root@server ~]# ansible mdd -m group -a 'name=mdd gid=12222' +创建过后,我们来查看一下: +[root@server ~]# ansible mdd -m shell -a 'cat /etc/group | grep 12222' +#② 删除组 +[root@server ~]# ansible web -m group -a 'name=sanguo state=absent' +``` + +### 11. script 模块 + + 该模块用于将本机的脚本在被管理端的机器上运行。 + + 该模块直接指定脚本的路径即可,我们通过例子来看一看到底如何使用的: +  + +```bash +#首先,我们写一个脚本,并给其加上执行权限: +[root@server ~]# vim /tmp/df.sh + #!/bin/bash + date >> /tmp/disk_total.log + df -lh >> /tmp/disk_total.log +[root@server ~]# chmod +x /tmp/df.sh +# 然后,我们直接运行命令来实现在被管理端执行该脚本: +[root@server ~]# ansible mdd -m script -a '/tmp/df.sh' +``` + +### 12. setup 模块 + +  该模块主要用于收集信息,是通过调用facts组件来实现的。 + +```bash +#① 查看信息 +#  我们可以直接用命令获取到变量的值,具体我们来看看例子: +[root@server ~]# ansible mdd -m setup -a 'filter="*mem*"' #查看内存 + +#2 查看并保存信息 +root@class2:~# ansible mdd -m setup -a 'filter="*mem*"' --tree /tmp/facts + +``` + -- Gitee From 7a93494ee693435204d7793504ad30bb1a8afd4f Mon Sep 17 00:00:00 2001 From: zzzxy <2132446376@qq.com> Date: Tue, 30 Jul 2024 08:45:45 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../C#.md" | 228 ++++++++++++++++++ ...\345\212\250\350\216\267\345\217\226ip.md" | 105 ++++++++ .../Eamil(1)(1).md" | 143 +++++++++++ .../PHP.md" | 58 +++++ ...73\345\275\225\351\205\215\347\275\256.md" | 42 ++++ .../go.md" | 150 ++++++++++++ ...37\350\275\275\345\235\207\350\241\241.md" | 73 ++++++ ...347\224\250\351\203\250\347\275\262(2).md" | 129 ++++++++++ ...13\350\275\275\346\226\207\344\273\266.md" | 135 +++++++++++ ...43\345\206\263\346\226\271\346\241\210.md" | 104 ++++++++ ...EB\346\234\215\345\212\241\345\231\250.md" | 123 ++++++++++ 11 files changed, 1290 insertions(+) create mode 100644 "22\351\202\271\345\220\221\345\216\237/C#.md" create mode 100644 "22\351\202\271\345\220\221\345\216\237/DHCP\346\234\215\345\212\241\357\274\232\347\224\250\346\210\267\350\277\236\346\216\245\350\277\231\344\270\252\347\275\221\347\273\234\350\207\252\345\212\250\350\216\267\345\217\226ip.md" create mode 100644 "22\351\202\271\345\220\221\345\216\237/Eamil(1)(1).md" create mode 100644 "22\351\202\271\345\220\221\345\216\237/PHP.md" create mode 100644 "22\351\202\271\345\220\221\345\216\237/Postgresql\345\256\211\350\243\205\345\217\212\350\277\234\347\250\213\347\231\273\345\275\225\351\205\215\347\275\256.md" create mode 100644 "22\351\202\271\345\220\221\345\216\237/go.md" create mode 100644 "22\351\202\271\345\220\221\345\216\237/nginx\345\217\215\345\220\221\344\273\243\347\220\206\357\274\214\350\264\237\350\275\275\345\235\207\350\241\241.md" create mode 100644 "22\351\202\271\345\220\221\345\216\237/python\347\232\204 web\345\272\224\347\224\250\351\203\250\347\275\262(2).md" create mode 100644 "22\351\202\271\345\220\221\345\216\237/\346\220\255\345\273\272FTP\346\234\215\345\212\241\345\231\250\345\256\236\347\216\260\344\270\212\344\274\240\344\270\213\350\275\275\346\226\207\344\273\266.md" create mode 100644 "22\351\202\271\345\220\221\345\216\237/\346\220\255\345\273\272Samba\346\234\215\345\212\241\345\231\250\346\255\245\351\252\244\345\217\212\346\212\245\351\224\231\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" create mode 100644 "22\351\202\271\345\220\221\345\216\237/\346\220\255\345\273\272WEB\346\234\215\345\212\241\345\231\250.md" diff --git "a/22\351\202\271\345\220\221\345\216\237/C#.md" "b/22\351\202\271\345\220\221\345\216\237/C#.md" new file mode 100644 index 0000000..d90756f --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/C#.md" @@ -0,0 +1,228 @@ +## C# + +### 下载SDK + +```sh +wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb +``` + +```sh +dpkg -i packages-microsoft-prod.deb +``` + +```sh +rm packages-microsoft-prod.deb +``` + +### 安装SDK + +```sh +apt update +``` + +```sh +apt install dotnet-sdk-8.0 -y + +dotnet --list-sdks #检查SDK版本 +``` + +### 安装nodejs(本项目需要nodejs) + +```sh +curl -fsSL https://deb.nodesource.com/setup_22.x -o nodesource_setup.sh +bash nodesource_setup.sh + +apt update + +apt install nodejs + +node -v #查看版本 +``` + +### 获取项目 + +```sh +Windows上操作 使用git +git clone https://gitee.com/zuohuaijun/Admin.NET.git +``` + +### 后端(vscode中) + +```sh +Windows中操作 +打开vscode +获取这个项目之后 进入文件夹 Admin.NET\Admin.NET\Admin.NET.Web.Entry 右键 在集中终端中打开 输入下面的命令 +dotnet watch --framework net8.0 +``` + +![1721740938009-2024-7-2321:22:18.png](https://gitee.com/yu-peitai/imgs/raw/master/1721740938009-2024-7-2321:22:18.png) + +### 前端(vscode中) + +```sh +Windows中操作 +打开vscode +获取这个项目之后 进入文件夹 Admin.NET\Web 右键 在集中终端中打开 输入下面的命令 + +# 安装依赖 +npm install + +# 打包 +npm run build + +# 更新依赖 +npm update + +# 运行 +npm run dev + +如果本地运行成功就可以部署到linux +``` + +![1721740972757-2024-7-2321:22:53.png](https://gitee.com/yu-peitai/imgs/raw/master/1721740972757-2024-7-2321:22:53.png) + +![1721740997256-2024-7-2321:23:18.png](https://gitee.com/yu-peitai/imgs/raw/master/1721740997256-2024-7-2321:23:18.png) + +![1721741022749-2024-7-2321:23:43.png](https://gitee.com/yu-peitai/imgs/raw/master/1721741022749-2024-7-2321:23:43.png) + +![1721741041163-2024-7-2321:24:01.png](https://gitee.com/yu-peitai/imgs/raw/master/1721741041163-2024-7-2321:24:01.png) + +### 部署到linux + +```sh +#进入 /opt目录 +cd /opt + +#将打包完成的项目上传到这个文件夹 +上传Admin.NET 这个文件夹到虚拟机/opt目录下面 +打包完会在 Admin.NET\Web 文件夹里得到一个dist文件夹,将dist上传到虚拟机的/opt目录下面 +``` + +![1721741129090-2024-7-2321:25:29.png](https://gitee.com/yu-peitai/imgs/raw/master/1721741129090-2024-7-2321:25:29.png) + + + +```sh +#修改nginx配置文件 +vim /etc/nginx/sites-available/default + +server { + listen 8888; #监听8888端口 + + location / { + root /opt/dist; #项目网页所在的目录 + index index.html index.htm; + } + + location /api/ { + proxy_pass http://192.168.1.129:5005; #自己虚拟机的ip加上5005端口 + proxy_http_version 1.1; + } + + location /hubs/ { + proxy_pass http://192.168.1.129:5005; #自己虚拟机的ip加上5005端口 + proxy_http_version 1.1; + } + + location /upload/ { + alias /opt/adminnet/wwwroot/Upload/; + } + } +#检查配置文件 +nginx -t +#重启nginx +systemctl restart nginx +``` + + + +![1721741197928-2024-7-2321:26:38.png](https://gitee.com/yu-peitai/imgs/raw/master/1721741197928-2024-7-2321:26:38.png) + +### 测试 + +```sh +#后端需要拉取依赖和启动服务,进入/opt/Admin.NET/Admin.NET.Web.Entry 目录 +cd /opt/Admin.NET/Admin.NET.Web.Entry +#输入下面这个命令 +dotnet watch --framework net8.0 +``` + +![1721740609869-2024-7-2321:16:50.png](https://gitee.com/yu-peitai/imgs/raw/master/1721740609869-2024-7-2321:16:50.png) + +![1721740678796-2024-7-2321:17:59.png](https://gitee.com/yu-peitai/imgs/raw/master/1721740678796-2024-7-2321:17:59.png) + +```sh +#前端 +网页输入自己虚拟机的ip加上5005端口,出现下面的效果并成功登录进去就证明已经成功实现 +``` + +![1721740785408-2024-7-2321:19:46.png](https://gitee.com/yu-peitai/imgs/raw/master/1721740785408-2024-7-2321:19:46.png) + +![image-20240723212121868](C:\Users\ahy\AppData\Roaming\Typora\typora-user-images\image-20240723212121868.png) + +### 将应用程序变成服务 + +#### 项目打包 + +```sh +进入/opt/Admin.NET +cd /opt/Admin.NET +使用 dotnet publish -c Release -o output --framework net8.0 进行项目打包,打包后会在当前文件下生成名为 output 的文件夹 +``` + +![1721743891660-2024-7-2322:11:32.png](https://gitee.com/yu-peitai/imgs/raw/master/1721743891660-2024-7-2322:11:32.png) + +![1721743925923-2024-7-2322:12:06.png](https://gitee.com/yu-peitai/imgs/raw/master/1721743925923-2024-7-2322:12:06.png) + +#### 创建服务文件 + +```sh +创建服务文件: +在 /etc/systemd/system/ 目录下创建一个 .service 文件,例如 admin.service + +cd /etc/systemd/system/ + +vim admin.service +[Unit] +Description=MyApp Service +After=network.target + +[Service] +Type=simple +ExecStart=/usr/bin/dotnet /opt/Admin.NET/output/Admin.NET.Web.Entry.dll +WorkingDirectory=/opt/Admin.NET/output/ +Restart=always + +[Install] +WantedBy=multi-user.target +``` + +![1721744076538-2024-7-2322:14:37.png](https://gitee.com/yu-peitai/imgs/raw/master/1721744076538-2024-7-2322:14:37.png) + +#### 加载和启动服务 + +```sh +systemctl daemon-reload +systemctl start admin.service +``` + +#### 设置开机自启 + +```sh +systemctl enable admin.service +``` + +#### 检查服务状态 + +```sh +#检查服务是否正在运行 +systemctl status admin.service +``` + +![1721744266140-2024-7-2322:17:46.png](https://gitee.com/yu-peitai/imgs/raw/master/1721744266140-2024-7-2322:17:46.png) + +#### 测试 + +![1721744413665-2024-7-2322:20:14.png](https://gitee.com/yu-peitai/imgs/raw/master/1721744413665-2024-7-2322:20:14.png) + +![1721744382925-2024-7-2322:19:43.png](https://gitee.com/yu-peitai/imgs/raw/master/1721744382925-2024-7-2322:19:43.png) diff --git "a/22\351\202\271\345\220\221\345\216\237/DHCP\346\234\215\345\212\241\357\274\232\347\224\250\346\210\267\350\277\236\346\216\245\350\277\231\344\270\252\347\275\221\347\273\234\350\207\252\345\212\250\350\216\267\345\217\226ip.md" "b/22\351\202\271\345\220\221\345\216\237/DHCP\346\234\215\345\212\241\357\274\232\347\224\250\346\210\267\350\277\236\346\216\245\350\277\231\344\270\252\347\275\221\347\273\234\350\207\252\345\212\250\350\216\267\345\217\226ip.md" new file mode 100644 index 0000000..4df50db --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/DHCP\346\234\215\345\212\241\357\274\232\347\224\250\346\210\267\350\277\236\346\216\245\350\277\231\344\270\252\347\275\221\347\273\234\350\207\252\345\212\250\350\216\267\345\217\226ip.md" @@ -0,0 +1,105 @@ +# DHCP + +### 安装DHCP + +```mysql +apt update +apt-get install isc-dhcp-server +``` + +```mysql +ip address show # 显示所有网络接口的信息 +``` + +### 启动DHCP + +#### 1.修改配置文件 ` /etc/dhcp/dhcpd.conf ` + +```mysql + vim /etc/dhcp/dhcpd.conf + subnet 192.168.1.0 netmask 255.255.255.0 { #IP以0结尾,子网掩码 + range 192.168.1.100 192.168.1.200; #IP范围,自定 + option domain-name-servers 192.168.1.2; # 服务机IP + #option domain-name "11.com"; #不需要 可以注释掉 + option routers 192.168.1.2; #随便一个IP + #option broadcast-address 10.5.5.31; #不需要 可以注释掉 + default-lease-time 600; + max-lease-time 7200; +} +``` + +![image-20240716220031393](C:\Users\cui\AppData\Roaming\Typora\typora-user-images\image-20240716220031393.png) + +#### 2.修改配置文件`/etc/default/isc-dhcp-server ` + +```mysql + vim /etc/default/isc-dhcp-server + + INTERFACESv4="ens33" +``` + +![image-20240716161853895](C:\Users\cui\AppData\Roaming\Typora\typora-user-images\image-20240716161853895.png) + +3. #### 重新启动DHCP + +```mysql +systemctl restart isc-dhcp-server.service +``` + +4. #### 查看状态 + +```mysql +systemctl status isc-dhcp-server.service +``` + + + +### 自动获取IP + +1. #### 修改配置文件 ` /etc/network/interfaces` + +```mysql +vim /etc/network/interfaces +auto ens33 +iface ens33 inet dhcp +``` + +![屏幕截图 2024-07-16 212755](C:\Users\cui\Pictures\Screenshots\屏幕截图 2024-07-16 212755.png) + +2. #### 修改完成后保存并退出后,重新启动网络服务 network + + ```mysql + systemctl restart networking.service + systemctl status networking.service #查看状态 + ``` + +3. #### 重启DHCP服务 + + ```mysql + systemctl restart isc-dhcp-server.service + systemctl status isc-dhcp-server.service + ``` + + ### 测试DHCP获取IP + + 1. #### 检查网络接口是否成功从 DHCP 服务器获取了 IP 地址 + + ```mysql + ip addr show ens33 #ens33 网络接口 + ``` + + ![image-20240716214755071](C:\Users\cui\AppData\Roaming\Typora\typora-user-images\image-20240716214755071.png) + + 2. #### 使用 `ping` 命令验证网络连通性 + + ```mysql + ping -c 4 192.168.1.2 # 192.168.1.2 为你的网关或另一台网络上的机器的 IP 地址 + # ping -c 4 命令的意思是向目标发送 4 个 ICMP 请求包,并等待回应 + ``` + + ![image-20240716215305863](C:\Users\cui\AppData\Roaming\Typora\typora-user-images\image-20240716215305863.png) + +```mysql + dhcp-lease-list # 显示当前由DHCP服务器分配的IP地址和相关信息 +``` + diff --git "a/22\351\202\271\345\220\221\345\216\237/Eamil(1)(1).md" "b/22\351\202\271\345\220\221\345\216\237/Eamil(1)(1).md" new file mode 100644 index 0000000..4507bf3 --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/Eamil(1)(1).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 + +加入主机名 +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/22\351\202\271\345\220\221\345\216\237/PHP.md" "b/22\351\202\271\345\220\221\345\216\237/PHP.md" new file mode 100644 index 0000000..bcce9e7 --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/PHP.md" @@ -0,0 +1,58 @@ +# PHP + +### + +### 前提:安装mysql 、安装Apache或者NGINX服务器 + +### 安装mysql + +```mysql +#使用wget命令下载最新的发行包 +wget https://repo.mysql.com/mysql-apt-config_0.8.30-1_all.deb + +#下载完成后,使用如下命令进行安装 +dpkg -i mysql-apt-config_0.8.30-1_all.deb + +#安装mysql +apt update #更新 +apt install mysql-server #安装 +``` + +### PHP部署 + +```mysql +apt install fileinfo opcache redis imagemagick exif # 安装PHP扩展 + +apt-get install php php-fpm php-curl php-cli php-zip php-mysql php-xml php-redis #安装php,安装PHP,版本 >= 8.0 + +php -v # 查看php版本号 + +apt install redis #下载redis + +git clone https://gitee.com/meystack/swiftadmin.git #克隆 + +cd /etc/swiftadmin #进入此目录,根据自己安装的所在路径 + +执行命令:php start.php start # 启动开发服务 +执行命令:php start.php stop # 停止开发服务 +执行命令:php start.php restart # 重启开发服务 +守护进程:php start.php start -d # 启动守护进程 一般为生产环境/修改文件后无法自动重载 + + +``` + +```mysql +打开浏览器输入网址,访问项目: +http://localhost:8787/index # 访问项目执行安装 localhost为自己的IP +``` + +![image-20240725152112538](C:\Users\cui\AppData\Roaming\Typora\typora-user-images\image-20240725152112538.png) + +```mysql +安装完毕后,访问后台URL登录系统: +http://localhost:8787/manage #登录页面,使用管理账号登录 :管理账号 admin admin888 +``` + +![image-20240725152329077](C:\Users\cui\AppData\Roaming\Typora\typora-user-images\image-20240725152329077.png) + +![image-20240725152503981](C:\Users\cui\AppData\Roaming\Typora\typora-user-images\image-20240725152503981.png) \ No newline at end of file diff --git "a/22\351\202\271\345\220\221\345\216\237/Postgresql\345\256\211\350\243\205\345\217\212\350\277\234\347\250\213\347\231\273\345\275\225\351\205\215\347\275\256.md" "b/22\351\202\271\345\220\221\345\216\237/Postgresql\345\256\211\350\243\205\345\217\212\350\277\234\347\250\213\347\231\273\345\275\225\351\205\215\347\275\256.md" new file mode 100644 index 0000000..846cfd1 --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/Postgresql\345\256\211\350\243\205\345\217\212\350\277\234\347\250\213\347\231\273\345\275\225\351\205\215\347\275\256.md" @@ -0,0 +1,42 @@ +## Postgresql安装及远程登录配置 + +- 先找到官网,选择Linux下的debain版本 + +```bash +sudo apt install -y postgresql-common +sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh +apt search postgresql* #查询postgresql的版本是否是新版,16~17 +apt insatll postgresql #确认版本为最新则开始安装 +whereis postgresql #下载完后查看存在哪个目录下 +``` + +- 尝试本地登录postgresql + +```bash +su postgres #从root切换到postgres用户 +psql #无密码直接登录 +``` + +- 尝试远程登录postgresql + +```bash +sudo vim /etc/postgresql/16/main/postgresql.conf #找到postgresql的postgresql.conf配置文件 +找到listen_addresses = 'localhost',将localhost改成 * #这表示允许所有IP地址连接 +sudo vim /etc/postgresql/16/main/pg_hba.conf #找到postgresql的身份认证文件pg_hba.conf +#找到IPV4并插入一行 +host all all 0.0.0.0/0 md5 +#新增防火墙5432端口 +ufw allow 5432/tcp +ufw status #查看端口是否开启 +sudo service postpresql restart #重启postgresql +``` + +- 给postgresql设置远程登录密码 + +```bash +su postgres #进入postgres +psql -h 110.41.158.169 -U postgres -d postgres #h:IP,U:用户,d:数据库 +-password #设置密码 +exit #重新登录 +``` + diff --git "a/22\351\202\271\345\220\221\345\216\237/go.md" "b/22\351\202\271\345\220\221\345\216\237/go.md" new file mode 100644 index 0000000..99306c5 --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/go.md" @@ -0,0 +1,150 @@ +## 前言,我将项目都放在了opt目录,可自行选择目录下载,后续操作要改目录,不得盲目Ctrl+C,Ctrl+V + +## 建议开三个窗口,一个部署前端,一个后端,一个部署nginx和redis + +```bash +#配置环境 +apt update +apt install git +apt install gnupg +apt install npm +#下载并解压压缩包 我用的是最新版的 https://golang.google.cn/dl/ +wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz +tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz +#在配置文件中添加变量 +echo "export PATH=/usr/local/go/bin:${PATH}" | tee -a $HOME/.profile +source $HOME/.profile +#查看go版本 +go version +# go version go1.22.5 linux/amd64 + +``` + +```bash +#部署后端 +git clone https://gitee.com/tiger1103/gfast.git #我是放在了opt目录,可自行选择目录下载 +cd /opt/gfast #进入到gfast目录 +# 更改 go 国内镜像源,否则无法获取依赖 +go env -w GO111MODULE=on +go env -w GOPROXY=https://goproxy.cn + +go mod download 或 go mod tidy #安装依赖 + +#需要安装mysql,这里就不写了安装过程了,不会的自己搜怎么安装,建议mysql密码为123456,安装完后给予 root 用户最高权限,完成mysql的远程连接,也就是能在navicat登录到虚拟机的mysql,不会的自己搜教程 +#安装成功后登录到mysql,在mysql中执行 +CREATE DATABASE gfast; +USE gfast; +source /opt/gfast/resource/data/gfast-v32.sql #改成自己相对应的数据库文件路径 + +use mysql; +update user set host='%' where user='root'; +grant all privileges on *.* to 'root'@'%'; #这条报错就再输一次就正常了 +flush privileges; +GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION ; #全部完成就退出mysql,重启mysql + +cp /opt/gfast/manifest/config/config.yaml.bak /opt/gfast/manifest/config/config.yaml +vim /opt/gfast/manifest/config/config.yaml + #修改文件中 database 的 default: 的 link 配置 + + link: "mysql:gfast3:gfast333@tcp(localhost:3306)/gfast-v32?charset=utf8mb4&parseTime=true&loc=Local" #原版 + + link: "mysql:root:123456@tcp(192.168.100.168:3306)/gfast?charset=utf8mb4&parseTime=true&loc=Local" #修改后 root为mysql用户,123456是自己设置的mysql密码,gfast 是创建的数据库名称,localhost修改成自己的ip + #回到后端文件 /opt/gfast 执行 + go build -o gfast-app ./main.go #把可执行文件打包为名称是gfast-app的文件,gfast-app 为执行文件的文件名,名称不唯一 +``` + +```bash +#部署前端,前面和后端一样就不多说了 +git clone -b os-v3.2 https://gitee.com/tiger1103/gfast-ui.git +cd /opt/gfast-ui +npm install --registry=https://registry.npmmirror.com #安装依赖 + +vim /opt/gfast-ui/.env.development +VITE_API_URL = 'http://192.168.100.138:8808/' #VITE_API_URL改成本地ip +vim /opt/gfast-ui/.env.production +VITE_PUBLIC_PATH = ' ' #VITE_PUBLIC_PATH中删除 /sys/ 直接留空 +#运行项目并打包生成dist文件夹 +npm run dev +npm run build +#打包完成后会在前端根目录生成 dist 文件夹 + +``` + +```bash +#配置nginx,没有的自己下nginx +vim /etc/nginx/sites-enabled/default +#修改为 +upstream localhost { + server 127.0.0.1:8808; # 指定有效的上游服务器地址和端口 +} +server { +# 监听 8889 端口 + listen 8889; + + location /{ + root /opt/gfast-ui/dist; #上文生成的dist文件夹对应位置 + index index.html index.htm; + } +} + +#完成后重启nginx +systemctl restart nginx +``` + +```bash +#修改redis配置,没有的自己下redis +vim /etc/redis/redis.conf +bind 0.0.0.0 -::1 #找到bind修改 也可以修改为自己的ip 如:bind 192.168.100.138 -::1 +requirepass root #直接添加这一段,root为redis密码,可自己定义 + +#在/opt/gfast/manifest/config/config.yaml中 redis: 段 +address: 192.168.100.138:6379 #修改成自己的ip +pass: "root" #在maxActive下 添加 redis.conf 中设置的密码 + +#重启redis服务 +systemctl restart redis +``` + +```bash +# 进入前端根目录 +cd /opt/gfast-ui +#在前端执行 +npm run dev +#前端启动成功是这个界面 +root@debian11:/opt/gfast-ui# npm run dev + +> vue-next-admin@2.4.33 dev +> vite --force + +Forced re-optimization of dependencies + + VITE v4.5.1 ready in 516 ms + + ➜ Local: http://localhost:8888/ + ➜ Network: http://192.168.100.138:8888/ + ➜ press h to show help + +# 进入后端根目录 +cd /opt/gfast +# 执行文件 +./gfast-app +#后端启动成功是这个界面 + +root@debian11:/opt/gfast# ./goapp +2024-07-24 22:34:22.403 [DEBU] SetServerRoot path: /opt/gfast/resource/public +2024-07-24 22:34:22 [INFO] {6a1e8b38c62ce51705b31b55e05e965e} /opt/gfast/internal/cmd/cmd.go:22: + ____________ __ + / ____/ ____/___ ______/ /_ + / / __/ /_ / __ `/ ___/ __/ +/ /_/ / __/ / /_/ (__ ) /_ +\____/_/ \__,_/____/\__/ Version: 3.2.19 +2024-07-24 22:34:22.410 [INFO] pid[543334]: http server started listening on [:8808] +2024-07-24 22:34:22.410 [INFO] {ada46f38c62ce51702b31b553bd1f1dc} swagger ui is serving at address: http://127.0.0.1:8808/swagger/ +2024-07-24 22:34:22.410 [INFO] {ada46f38c62ce51702b31b553bd1f1dc} openapi specification is serving at address: http://127.0.0.1:8808/api.json + + +#打开浏览器,在地址输入 192.168.100.138:8888,即前端输出的 Network: http://192.168.100.138:8888/,浏览器正常显示登录界面,正确输入验证码,登录成功,完成项目 + +#我是前后端同时进行,不知道开了前端后停止再执行后端能不能启动 +``` + diff --git "a/22\351\202\271\345\220\221\345\216\237/nginx\345\217\215\345\220\221\344\273\243\347\220\206\357\274\214\350\264\237\350\275\275\345\235\207\350\241\241.md" "b/22\351\202\271\345\220\221\345\216\237/nginx\345\217\215\345\220\221\344\273\243\347\220\206\357\274\214\350\264\237\350\275\275\345\235\207\350\241\241.md" new file mode 100644 index 0000000..079e45c --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/nginx\345\217\215\345\220\221\344\273\243\347\220\206\357\274\214\350\264\237\350\275\275\345\235\207\350\241\241.md" @@ -0,0 +1,73 @@ +# nginx反向代理,负载均衡 + +准备n台虚拟机 + +其中一台安装nginx,其余安装apache + +1. 安装nginx + + ```bash + root@debian1:~# apt update + root@debian1:~# apt install nginx + root@debian1:~# systemctl status nginx + root@debian1:~# vim /etc/nginx/sites-available/default + #注释所以内容,在末尾添加以下内容 + server { + listen 80; + server_name example.com; + + location / { + proxy_pass http://backends; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + } + + upstream backends { + server 192.168.1.26:80; # Apache1 的 IP 和端口 + server 192.168.1.27:80; # Apache2 的 IP 和端口 + } + + root@debian1:~# systemctl restart nginx + + ``` + +2. 安装apache(除了安装nginx那一台,其余安装apache2的都如下) + + ```bash + root@debian1:~# apt update + root@debian1:~# apt install apache2 + root@debian1:~# vim /var/www/html/index.html + #添加一些不一样的,能认出是哪一个apache2页面的 + #例如: + #全部删除,添加 + + + + Apache Backend 1 + + +

Welcome to Apache Backend 1

+ + + + root@debian1:~# systemctl restart apache2 + + ``` + +3. 测试 + + http://代理服务器IP + + (代理服务器IP就是nginx那一台虚拟机IP) + + 刷新能跳转页面就是成功 + +3. 注意事项 + + ```bash + # 防火墙要打开,每一台虚拟机防火墙都要添加80端口 + ufw allow 80/tcp + ``` \ No newline at end of file diff --git "a/22\351\202\271\345\220\221\345\216\237/python\347\232\204 web\345\272\224\347\224\250\351\203\250\347\275\262(2).md" "b/22\351\202\271\345\220\221\345\216\237/python\347\232\204 web\345\272\224\347\224\250\351\203\250\347\275\262(2).md" new file mode 100644 index 0000000..5d39feb --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/python\347\232\204 web\345\272\224\347\224\250\351\203\250\347\275\262(2).md" @@ -0,0 +1,129 @@ +# Debian python web项目部署 + +### 1.安装python + +```bash +python3 --version # 查看一下python的版本号,最新的是3.12 +apt install python3-pip # 安装python管理包 +``` + +### 2.安装虚拟环境(virtualenv) + +```bash +1.安装virtualenv +apt update # 更新一下 +apt install python3-virtualenv #通过apt安装virtualenv + +2.创建虚拟环境 +mkdir /envs #创建这个envs文件夹 +virtualenv /envs/test --python=python3.11 #创建虚拟环境 + +ls -l /envs/test #查看是否创建成功 +总计 12 +drwxr-xr-x 2 root root 4096 7月22日 18:16 bin +drwxr-xr-x 3 root root 4096 7月22日 18:16 lib +-rw-r--r-- 1 root root 210 7月22日 18:16 pyvenv.cfg +# 存在这些文件就说明虚拟环境创建成功 + +3.激活虚拟环境 +source /envs/test/bin/activate #激活 +(test) root@root:~# # 有(test) ====> 激活成功 +cd /envs #切换到envs目录 +pip install flask # 一定要切换到envs目录下载 Flask 框架及其依赖项 ,不然报错 + +下一步就是将项目导到 /opt目录下 +cd /opt/dash-fastapi-admin #切换目录 +pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt # 使用清华大学的 pip 镜像安装项目依赖环境,下载速度更快 +cd dash-fastapi-frontend #切换前端目录 +python3 app.py --env=dev #运行前端 (汇报红,是正常的。因为后端还没有弄) + +在浏览器可查看后端页面 ip:8088 ====>如192.168.1.25:8088 +``` + +### 3.安装mysql + +```bash +apt install -y wget gnupg #安装必要的依赖包 +wget https://repo.mysql.com/mysql-apt-config_0.8.32-1_all.deb -P /tmp #下载 MySQL 的官方仓库配置文件,并将其保存到 /tmp 目录中 +dpkg -i /tmp/mysql-apt-config_0.8.32-1_all.deb #安装 MySQL 的官方仓库配置文件 + +#然后将打开一个交互式对话框,让您选择 MySQL 的版本和其他组件 +1选择 MySQL Server & Cluster,按回车键。 +2选择 mysql-8.4-lts,按回车键。 +3选择 Ok,按回车键。 +apt update +apt install -y mysql-server #安装mysql的软件包,安装完成后设置密码 +mysql -u root -p #登录mysql +use mysql; #切换数据库 +update user set host = '%' where user = 'root'; #更改mysql可以通过远程主机进行连接 +select host, user from user; #查看有没有更改成功,成功如下 ++-----------+------------------+ +| host | user | ++-----------+------------------+ +| % | root | +| localhost | mysql.infoschema | +| localhost | mysql.session | +| localhost | mysql.sys | ++-----------+------------------+ +flush privileges; #刷新权限使更改生效 + +创建数据库数据 +方法一:用客户端 +#用客户端Navicat Premium连接mysql +1.新建数据库,库名为dash +2.双击dash数据库,右键 运行sql文件,之后找到项目文件,选择项目\dash-fastapi-admin\dash-fastapi-backend\sql 下的.sql文件 + +方法二:直接在虚拟机mysql里面 +use dash; #切换新建的数据库 +source /opt/dash-fastapi-admin/dash-fastapi-backend/sql/dash-fastapi.sql +``` + +### 4.修改配置文件\dash-fastapi-admin\dash-fastapi-backend\下的 .env.dev 和.env.port + +```bash +#修改数据库名称和数据库密码 +(以我的为例:参考) +# 数据库密码 +DB_PASSWORD = '123' +# 数据库名称 +DB_DATABASE = 'dash' +``` + +![配置-1721974330036-1](D:/%E6%A1%8C%E9%9D%A2/python/%E9%85%8D%E7%BD%AE-1721974330036-1.PNG) + +### 5.Redis配置、更新或重新安装Numpy + +```bash +apt install redis -y #安装redis +pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade numpy pandas#重新安装Numpy +python3 app.py --env=prod # 运行后端 +!!!!注意!!!! +#前后端要一起执行。最好就开两个窗口,一个运行前端 一个后端 (单开一个会报错) +窗口一: +# 进入前端目录 +cd dash-fastapi-frontend +# 运行前端 +python3 wsgi.py --env=prod + +窗口二: +# 进入后端目录 +cd dash-fastapi-backend +# 运行后端 +python3 app.py --env=prod +``` + +### 实现过程的问题 + +问题1: + +![报错1-1721974363543-4](D:/%E6%A1%8C%E9%9D%A2/python/%E6%8A%A5%E9%94%991-1721974363543-4.PNG) + +解决办法:将后端运行 (前后端一起运行) + + + +问题2: + +![](D:/%E6%A1%8C%E9%9D%A2/python/%E6%8A%A5%E9%94%992.PNG) + +解决办法:将前端运行 (前后端一起运行) diff --git "a/22\351\202\271\345\220\221\345\216\237/\346\220\255\345\273\272FTP\346\234\215\345\212\241\345\231\250\345\256\236\347\216\260\344\270\212\344\274\240\344\270\213\350\275\275\346\226\207\344\273\266.md" "b/22\351\202\271\345\220\221\345\216\237/\346\220\255\345\273\272FTP\346\234\215\345\212\241\345\231\250\345\256\236\347\216\260\344\270\212\344\274\240\344\270\213\350\275\275\346\226\207\344\273\266.md" new file mode 100644 index 0000000..e60983b --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/\346\220\255\345\273\272FTP\346\234\215\345\212\241\345\231\250\345\256\236\347\216\260\344\270\212\344\274\240\344\270\213\350\275\275\346\226\207\344\273\266.md" @@ -0,0 +1,135 @@ +## 安装FTP服务器 + +1. ### 安装vsftpd + +```bash +apt update +apt install vsftpd +apt install ftp +``` + +2. ### 备份一份原始配置文件 + +```bash +cp /etc/vsftpd.conf /etc/vsftpd.conf.orig +``` + +3. ### 配置防火墙端口 + +```bash +ufw allow 20:21/tcp +ufw allow 990/tcp +ufw allow 35000:40000/tcp +ufw status +``` + +4. ### 配置vsftpd + +```bash +vim /etc/vsftpd.conf +#保存 +anonymous_enable=NO +local_enable=YES +#找到下行并取消注释 +write_enable=YES +chroot_local_user=YES +#在最底下添加 +allow_writeable_chroot=YES +pasv_min_port=35000 +pasv_max_port=40000 +userlist_enable=YES +userlist_file=/etc/vsftpd.userlist +userlist_deny=NO +#保存退出并重启 +systemctl restart vsftpd +``` + +5. ### 配置用户目录 + +```bash +#添加新用户,就设置一个密码其余回车跳过 +adduser testuser +echo "testuser" | sudo tee -a /etc/vsftpd.userlist +#创建FTP文件夹 +mkdir /home/testuser/ftp +#设置所有权 +chown nobody:nogroup /home/testuser/ftp +#删除写入权限 +chmod a-w /home/testuser/ftp +#验证权限 +ls -al /home/testuser/ftp + +total 8 +dr-xr-xr-x 2 nobody nogroup 4096 Jun 7 13:08 . +drwxr-xr-x 3 testuser testuser 4096 Jun 7 13:08 .. + +#创建实际的可写目录 +mkdir /home/testuser/ftp/upload +chown testuser:testuser /home/testuser/ftp/upload +#验证权限 +ls -al /home/testuser/ftp + +total 8 +dr-xr-xr-x 2 nobody nogroup 4096 Jun 7 13:08 . +drwxr-xr-x 3 testuser testuser 4096 Jun 7 13:08 .. +drwxr-xr-x 2 testuser testuser 4096 Jun 7 13:10 upload + +#添加test.txt用于测试 +echo "vsftpd test file" | tee /home/testuser/ftp/upload/test.txt +``` + +6. ### 测试FTP访问 + +```bash +#尝试匿名登录 +ftp -p 192.168.1.253 # ftp -p + ip地址 +Connected to 136.244.105.99. +220 (vsFTPd 3.0.3) +Name (136.244.105.99:default): anonymous +530 Permission denied. +ftp: Login failed. +ftp> +#关闭连接 +ftp> bye +#使用创建的用户名登录 +ftp -p 192.168.1.253 +Connected to 136.244.105.99. +220 (vsFTPd 3.0.3) +Name (136.244.105.99:default): testuser +331 Please specify the password. +Password: your_user's_password +230 Login successful. +Remote system type is UNIX. +Using binary mode to transfer files. +ftp> +#切换到upload目录使用get命令测试文件传输到本地 +ftp>cd ftp +250 Directory successfully changed. + +ftp>cd upload +250 Directory successfully changed. + +ftp>get test.txt +local: test.txt remote: test.txt +229 Entering Extended Passive Mode (|||39925|) +150 Opening BINARY mode data connection for test.txt (17 bytes). +100% |***********************************************************************| 17 461.15 KiB/s 00:00 ETA +226 Transfer complete. +17 bytes received in 00:00 (67.76 KiB/s) + +ftp>! ls #查看远程服务器目录 +ftp>ls #查看本地目录 +#退出 +ftp>bye +#在root下新建文件 +touch 111.txt +#进入ftp用put上传 +ftp>put 111.txt +local: 111.txt remote: 111.txt +229 Entering Extended Passive Mode (|||35256|) +150 Ok to send data. + 0 0.00 KiB/s +226 Transfer complete. +ftp>ls #查看本地目录是否上传到 +``` + diff --git "a/22\351\202\271\345\220\221\345\216\237/\346\220\255\345\273\272Samba\346\234\215\345\212\241\345\231\250\346\255\245\351\252\244\345\217\212\346\212\245\351\224\231\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" "b/22\351\202\271\345\220\221\345\216\237/\346\220\255\345\273\272Samba\346\234\215\345\212\241\345\231\250\346\255\245\351\252\244\345\217\212\346\212\245\351\224\231\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" new file mode 100644 index 0000000..ad98b6e --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/\346\220\255\345\273\272Samba\346\234\215\345\212\241\345\231\250\346\255\245\351\252\244\345\217\212\346\212\245\351\224\231\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" @@ -0,0 +1,104 @@ +## 搭建Samba服务器实现共享文件 + +1. ### 更新软件包 + +```bash +apt update +``` + +2. ### 安装Samba服务器 + +```bash +apt install samba +``` + +3. ### 查看是否安装成功 + +```bash +whereis samba +#安装成功显示以下 +samba: /usr/sbin/samba /usr/lib/x86_64-linux-gnu/samba /etc/samba /usr/libexec/samba /usr/share/samba /usr/share/man/man7/samba.7.gz /usr/share/man/man8/samba.8.gz +``` + +4. ### 创建共享目录 + +```bash +mkdir -p /home/zxy/sambashare # zxy是用户名 +``` + +5. ### 配置文件目录,将新建的目录添加为共享 + +```bash +vim /etc/samba/smb.conf + +# 最底下插入 +[sambashare] #括号内要与共享目录的名称一致 +comment = Samba on Debian #描述 +path = /home/zxy/sambashare #path是共享目录的路径 +read only = no +browsable = yes #该目录是否可浏览 +directory mask = 0777 #设置创建目录的权限 +create mask = 0777 #设置创建文件的权限 +write list = zzxy #设置用户可访问可读写的权限 +#保存退出 +``` + +6. ### 重启samba服务,并开启读写权限 + +```bash +service smbd restart +chmod 777 /home/zxy/sambashare/ #chmod 777 + 共享文件路径 +``` + +7. ### 开启防火墙允许samba流量 + +```bash +ufw allow samba +ufw status #查看状态 +``` + +8. ### 新增用户并配置密码 + +```bash +useradd zxy #zxy是自己取的用户名 +smbpasswd -a zxy #设置密码,需要输入两次同样的 +``` + +9. ### 测试是否连通 + +```bash +#打开资源管理器 +\\192.168.1.253\sambashare #ip地址+共享文件夹名 +#弹出输入网络凭证,如果有用户名就选择,其他选项新增用户 +#输入刚刚设置的用户名和密码,把记住我的凭据勾选 +#进入后,在Debain的共享文件夹中新建文件,查看本机共享文件夹是否有文件,有就是成功的 +``` + +## 出现的问题 + +1. ### 从资源管理器上连接共享文件夹,说找不到网络路径,大概率是配置文件中共享目录名称不一致 + +```bash +# 解决方案,进入配置文件 +vim /etc/samba/smb.conf + +[sambashare] #括号内名称与共享目录名称不一致会导致后面登录时,找不到网络路径 +path = /home/zxy/sambashare #path是共享目录的路径 +read only = no #有的教程会写成read-only = no ,会导致共享文件变成默认只读 +browsable = yes #该目录是否可浏览 +#保存退出 +#修改完配置文件,记得重启软件 service smbd restart +``` + +2. ### 连接进入共享文件后,无法在共享文件中创建和修改文件及文件夹,是因为权限不够 + +```bash +#解决方案,进入配置文件,添加权限 +directory mask = 0777 #设置创建目录的权限 +create mask = 0777 #设置创建文件的权限 +write list = zxy #设置用户可访问可读写的权限,这个用户是你新建的samba用户名 + +#保存退出后,重启配置服务,再执行以下命令,添加权限 +chmod 777 /home/zxy/sambashare/ #chmod 777 + 共享文件路径 +``` + diff --git "a/22\351\202\271\345\220\221\345\216\237/\346\220\255\345\273\272WEB\346\234\215\345\212\241\345\231\250.md" "b/22\351\202\271\345\220\221\345\216\237/\346\220\255\345\273\272WEB\346\234\215\345\212\241\345\231\250.md" new file mode 100644 index 0000000..16532dc --- /dev/null +++ "b/22\351\202\271\345\220\221\345\216\237/\346\220\255\345\273\272WEB\346\234\215\345\212\241\345\231\250.md" @@ -0,0 +1,123 @@ +## 搭建WEB服务器 + +1. ### 更新存储库 + +```bash +apt update +apt upgrade +``` + +2. ### 安装Apache2 + +```bash +apt install apache2 +``` + +3. ### 启用防火墙 + +```bash +ufw status +``` + +4. ### 配置防火墙 + +```bash +ufw app list #查看应为apache2配置那些端口 +#查到的端口配置文件列表,找到 www +OutputAvailable applications: + AIM + Bonjour + CIFS +. . . + WWW #此配置文件仅打开端口 80(正常、未加密的网络流量) + WWW Cache #此配置文件仅打开端口 8080(有时用于缓存和 Web 代理) + WWW Full #此配置文件同时打开端口 80(正常、未加密的网络流量)和端口 443(TLS/SSL 加密流量) + WWW Secure #此配置文件仅打开端口 443(TLS/SSL 加密流量 +. . . +#开启apache端口,只需要允许端口 80 上的流量 +ufw allow 'www' + +#查看端口状态 +ufw status +``` + +5. ### 检查Apache2状态 + +```bash +systemctl status apache2 +``` + +6. ### 设置虚拟主机 + +````bash +#为所需的域创建目录 +mkdir -p /var/www/zxy.com/ +#创建目录后,将 “zxy.com ” 目录的所有权更改为新的 “www-data” 环境变量 +chown -R www-data:www-data /var/www/zxy.com +```` + +7. ### 为主机创建配置文件并配置 + +```bash +vim /etc/apache2/sites-available/zxy.com.conf +#进入配置文件,写入以下文本 + + +ServerAdmin admin@localhost + +ServerName zxy.com + +ServerAlias www.zxy.com + +DocumentRoot /var/www/zxy.com + +ErrorLog ${APACHE_LOG_DIR}/error.log + +CustomLog ${APACHE_LOG_DIR}/access.log combined + + +#保存后退出 +#禁用默认配置 +a2dissite 000-default.conf +#启用新配置 +a2ensite zxy.com.conf +#重启Apache2 +systemctl restart apache2 +#如果报错大概率是环境变量没更新,执行下面命令再重启Apache2 +source /etc/apache2/envvars +``` + +8. ### 为虚拟机创建网页 + +```bash +vim /var/www/zxy.com/index.html +#进入编辑 + + + + +Welcome to LinuxHint! + + + + + +

I hope you are having a good day!

+ + + + +``` + +9. ### 查看主机ip + +```bash +hostname -I +``` + +10. ### 测试网页 + +```bash +http://192.168.1.200 #ip是上一步查看出来的 +``` + -- Gitee