📇 本类导航
本页自动汇总「1运维」分类下的全部笔记(含子分类),随笔记增删实时更新。
wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh2.执行脚本
下载完成后,在终端中进入包所在的目录,并执行以下命令:
bash Anaconda3-2021.05-Linux-x86_64.sh3.按照提示进行安装
然后,按照提示进行安装。在安装过程中需要输入一些信息,例如安装路径、是否将 Anaconda 添加到 PATH 环境变量中等。
4.激活 Anaconda 环境
安装完成后,需要激活 Anaconda 环境。在终端中输入以下命令:
source ~/anaconda3/bin/activate5.验证 Anaconda 是否正确安装
最后,可以验证 Anaconda 是否正确安装。在终端中输入以下命令:
conda --version如果显示了 Anaconda 的版本号,则说明 Anaconda 安装成功。
注意:在使用 Anaconda 之前,最好先更新一下 conda 和 Anaconda 自带的包管理器 pip,可以使用以下命令:conda update conda conda update anaconda pip install --upgrade pip
CentOS 7.0默认使用的是firewall作为防火墙, 使用systemctl来管理服务和程序,包括了service和chkconfig
1、检查是否已安装防火墙
yum install firewalld firewall-config2、查看默认防火墙状态(开启后显示running,关闭后显示not running)
firewall-cmd --state3、检查防火墙的状态(enabled表示正常运行,disabled表示防火墙已经关闭)
systemctl list-unit-files|grep firewalld.service4、开启防火墙
systemctl start firewalld.service --启动firewall systemctl enable firewalld.service --开机时启动firewall5、关闭防火墙
systemctl stop firewalld.service --停止firewall systemctl disable firewalld.service --禁止firewall开机启动6、重启防火墙
systemctl restart firewalld.service7、查看防火墙是否开机自启(enabled表示自启,disabled表示不自启)
systemctl is-enabled firewalld.service;echo $?8、查看已启动的服务列表
systemctl list-unit-files|grep enabled9、开启端口
# 这里开启的是80端口,开启其他端口可自定义 firewall-cmd --zone=public --add-port=80/tcp --permanent # 开启之后一定要重启一下防火墙,不然不生效!!! firewall-cmd --reload # 命令含义: –zone #作用域 –add-port=80/tcp #添加端口,格式为:端口/通讯协议 –permanent #永久生效,没有此参数重启后失效10、查看已经开放的端口
firewall-cmd --permanent --list-port11、屏蔽FirewallD服务
systemctl mask firewalld12、反屏蔽FirewallD服务
# 这是反屏蔽FirewallD服务,它会移除屏蔽FirewallD服务时创建的符号链接,故能重新启用服务。(主要针对上面第4点的开机自启服务) systemctl unmask firewalld
问题:缺少插件Maven Intergration
解决:
1.进入系统管理
2.点击插件管理
3.选择可选插件
4.搜索Maven(因我已安装)
两种方式
① 第一种
用netstat -ano | grep 端口 找出进程号然后 kill -9 进程号 杀进程
② 第二种例:关闭占用80端口的进程
sudo fuser -k -n tcp 80
Jenkins构建项目并运行的流程如下
Git:我用的yum安装
# Ubuntu apt-get install git # Centos yum install git git --versionJenkins:注意的是Jenkins 宣布:从2020年6月28日发布的 Jenkins 2.357 和即将发布的 9 月 LTS 版本开始,Jenkins 最低需要 Java 11。
所以Jenkins要下2.357之前的,不然运行时会报jdk版本的错。
**此教程使用的是运行war包,**下载地址 ☺️ 我的jenkins版本:2.332.3
上传到服务器后,在存放路径下运行命令nohup java -jar jenkins.war --httpPort=9999 > jenkins.log 2>&1 &通过httpPort来修改端口号,然后同级目录生成jenkins.log日志文件。
访问路径:IP:9999
- 稍微等一会出现jenkins等待页面
- 查看密码:
cat /root/.jenkins/secrets/initialAdminPassword
- 安装推荐的插件
- 创建用户
- 通过创建的账号和密码登录
安装完成,搭配Gitee实现自动化部署项目还需安装两个插件
插件安装步骤:
Dashboard => Manager Jenkins => Manage Plugins
- Maven Integration
- Gitee
二、全局工具配置jdk、maven、git
Dashboard => Manager Jenkins => Global Tool Configuration
==Maven==/usr/local/apache-maven-3.6.3/conf/settings.xml
/usr/local/apache-maven-3.6.3
==Java==/usr/local/jdk1.8.0_361
==Git==因为用的yum安装默认地址为: /usr/libexec/git-core/git
三、配置Gitee
获取Gitee API令牌
- 登录gitee之后,访问如下网址:https://gitee.com/profile/personal_access_tokens,然后生成新的令牌:
- 获取后填入即可
- 测试
到这步,离成功不远了!!!坚持坚持四、新建任务-部署Springboot项目
接下来,我们在这三个选项中填入对应的shell命令,选择调用shell
Pre Steps 构建之前
echo "停止demo服务" pid=`ps -ef | grep 替换为你的jar包名称 | grep -v grep | awk '{print $2}'` if [ -n "$pid" ] then kill -9 $pid fi echo "停止demo服务成功"Build
clean package -Dmaven.test.skip=truePost Steps jenkins克隆下来的代码在/root/.jenkins/workspace下
BUILD_ID=DONTKILLME echo "自定义创建放置jar包的目录" if [ ! -d "/opt" ];then mkdir /opt/jar else echo "文件夹已经存在" fi if [ ! -f "/opt/jar/demo-0.0.1-SNAPSHOT.jar" ];then echo "文件不存在" else rm -f /opt/jar/demo-0.0.1-SNAPSHOT.jar fi mv -f /root/.jenkins/workspace/demo/target/demo-0.0.1-SNAPSHOT.jar /opt/jar/demo-0.0.1-SNAPSHOT.jar echo "移动jar包完成" echo "启动demo服务" nohup java -jar /opt/jar/demo-0.0.1-SNAPSHOT.jar > /opt/jar/demo.log 2>&1 & echo "启动demo服务完成"
在/opt/jar/demo.log中可以查看日志。至此jar包就启动完成啦。
1、安装依赖和相关库:
yum -y install gcc-c++ zlib-devel openssl-devel libtool2、下载nginx安装包并解压:
cd /usr/local wget http://nginx.org/download/nginx-1.14.0.tar.gz tar -zxvf nginx-1.14.0.tar.gz3、配置和安装
cd nginx-1.14.0 ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module make && make installvue dist nginx配置:(在/usr/local/nginx/conf/的nginx.conf里面)
location / { root /home/server/dist; index index.html index.htm; try_files $uri $uri/ /index.html; } ##后台 location /api{ proxy_pass http://服务器IP:后台端口号/; }4、启动nginx: (在/usr/local/nginx/sbin/里面)
cd ../nginx/sbin ./nginx5、查看nginx:
ps -ef | grep nginx结果如下所示
root 13850 1 0 17:01 ? 00:00:00 nginx: master process ./nginx
nobody 13851 13850 0 17:01 ? 00:00:00 nginx: worker process
root 13879 1128 0 17:11 pts/0 00:00:00 grep --color=auto nginx
6、停止和重启nginx: (在/usr/local/nginx/sbin/里面)
./nginx -s reload #重启 ./nginx -s stop #关闭
docker报错时查看日志命令
journalctl -xe # 把错误拿去百度即可 # 经验一:是否是防火墙和docker内的网络冲突了,关掉防火墙试试! systemctl stop firewalld.service --停止firewall systemctl disable firewalld.service --禁止firewall开机启动一、Centos系统
1. 卸载旧版本依赖
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine2. 设置仓库
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2使用以下命令来设置稳定的仓库。阿里云仓库
sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3. 安装最新版本的 Docker Engine-Community 和 containerd
sudo yum install docker-ce docker-ce-cli containerd.io4.启动 Docker
systemctl start docker # 重启 Docker systemctl restart docker # 停止 Docker systemctl stop docker5. 验证是否安装成功
docker version出现如下图所示结果表示安装成功
Docker 需要用户具有 sudo 权限,为了避免每次命令都输入sudo,可以把用户加入 Docker 用户组。
sudo usermod -aG docker $USER6.开机自启
systemctl enable docker7.阿里云镜像加速
sudo mkdir -p /etc/docker cat >> ~/.bash_profile << EOF export SMOM_BASE=/opt/smom EOF source ~/.bash_profile echo $SMOM_BASE #查看是否设置成功 sudo sh -c "cat > /etc/docker/daemon.json" << EOF { "registry-mirrors": ["https://3n4m4jry.mirror.aliyuncs.com"], "log-driver":"json-file", "log-opts": { "max-size":"50m", "max-file":"5" }, "graph":"$SMOM_BASE/docker" } EOF sudo systemctl daemon-reload sudo systemctl restart docker卸载docker
sudo yum remove docker-ce docker-ce-cli containerd.iosudo rm -rf /var/lib/docker二、Ubuntu系统
sudo apt update sudo apt-get install ca-certificates curl gnupg lsb-release curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get install docker-ce docker-ce-cli containerd.io # docker命令免sudo sudo gpasswd -a 用户名 docker newgrp docker # 开机自启 systemctl enable docker # 阿里云镜像加速 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://3n4m4jry.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker # 重启一下系统 reboot
一、JDK8
**链接:**https://pan.baidu.com/s/1NfzIezipNTuAujzxcjTZ3w?pwd=pul3
提取码:pul3
–来自百度网盘超级会员V5的分享
解压:tar -zxvf jdk-8u291-linux-x64.tar.gz移动:
mv jdk1.8.0_291 /usr/local/jdk1.8修改配置文件:
# Ubuntu gedit /etc/profile # Centos vim /etc/profile添加配置:
export JAVA_HOME=/usr/local/jdk1.8 export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/ export PATH=$PATH:$JAVA_HOME/bin刷新配置:
source /etc/profile查看是否安装成功
运行命令java -version出现如下图所示即表示安装成功
二、JDK17
wget http://49.232.8.65/jdk/jdk17/jdk-17_linux-x64_bin.tar.gz tar -zxvf jdk-17_linux-x64_bin.tar.gz vim /etc/profile # 文件添加如下内容 export JAVA_HOME=jdk文件夹全路径 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar # 刷新配置使其生效 source /etc/profile # 查看安装的版本 java -version
① 官方下载:
② 附件
也可以用下面的这个安装包,这个是3.9.6的
apache-maven-3.9.6-bin.tar.gz
下载好安装包之后,通过sftp工具丢到服务器喜欢的目录# 查看存放路径 pwd1、解压
# 解压 tar -zxvf apache-maven-3.9.6-bin.tar.gz2、解压的文件移动到/usr/local/
本人应用程序习惯统一放在/usr/local/下,便于统一管理
mv apache-maven-3.9.6 /usr/local/3、配置环境变量
# 修改 /etc/profile 系统文件 # Centos vim /etc/profile # Ubuntu gedit /etc/profile # maven环境配置 export MAVEN_HOME=/usr/local/apache-maven-3.9.6 export PATH=$PATH:$MAVEN_HOME/bin保存后刷新,使文件生效
source /etc/profile4、配置maven仓库地址
在maven安装目录下创建repository文件夹 例:/usr/local/apache-maven-3.9.6下
cd /usr/local/apache-maven-3.9.6 mkdir repository修改 apache-maven-3.9.6/conf/settings.xml 文件:
# Ubuntu gedit conf/settings.xml # Centos vim conf/settings.xml <!-- 设置自定义仓库地址 --> <localRepository>/usr/local/apache-maven-3.9.6/repository</localRepository>
<!-- 设置阿里云镜像 --> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
mvn -v出现如下图所示即表示安装成功
查看主机当前内存
**free -h**查看主机当前外存
**df -h**查看当前主机运行的程序
**top**删除文件/文件夹
rm 文件名 #删除文件 rm -d 目录名 #删除一个空目录 rm -r 目录名 #删除一个非空目录安装Ubuntu终端分屏工具
**sudo apt install terminator**
shell脚本如下:(主要改的地方:第 2 、4、5、7、9、11、13**** 、14、16 行)
#用户名 mysql_user="root" #密码 mysql_password="G#t9WhZr2@qL7BmPnXeD" mysql_host="106.53.67.124" #端口号 mysql_port="3306" #将要备份的数据库 database_name="test" #编码格式 mysql_charset="utf8mb4" #docker中MySQL容器的别名 docker_mysql_name="mysql" #保存备份文件最多个数 count=1 #备份保存路径 backup_path=/data/mysql/bakup #日期 date_time=`date +%Y-%m-%d-%H-%M` #如果文件夹不存在则创建 if [ ! -d $backup_path ]; then mkdir -p $backup_path; fi #查看MySQL是否在运行 mysql_ps=`ps -ef |grep mysql |wc -l` echo "查看MySQL是否在运行:$mysql_ps" >> $backup_path/dump.log mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l` if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then echo "ERROR:MySQL is not running! backup stop!" >> $backup_path/dump.log exit else echo "Welcome to use MySQL backup tools!" >> $backup_path/dump.log echo "MySQL connect ok! Please wait......" >> $backup_path/dump.log fi #开始备份 echo "开始备份..." >> $backup_path/dump.log docker exec $docker_mysql_name /usr/bin/mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $database_name --default-character-set=$mysql_charset > $backup_path/$database_name-$date_time.sql #开始压缩 cd $backup_path tar -zcvf $database_name-$date_time.tar.gz $database_name-$date_time.sql #更新备份日志 echo "压缩原文件 create $backup_path/$database_name-$date_time.tar.gz" >> $backup_path/dump.log #删除源文件 rm -rf $backup_path/$database_name-$date_time.sql echo "压缩后删除原文件 delete $backup_path/$database_name-$date_time.sql" >> $backup_path/dump.log #找出需要删除的备份 delfile=`ls -l -crt $backup_path/*.tar.gz | awk '{print $9 }' | head -1` #判断现在的备份数量是否大于阈值 number=`ls -l -crt $backup_path/*.tar.gz | awk '{print $9 }' | wc -l` if [ $number -gt $count ] then #删除最早生成的备份,只保留count数量的备份 rm $delfile #更新删除文件日志 echo "$date 删除 $count 前的文件 delete $delfile" >> $backup_path/dump.log fi开启定时服务
crontab -e # 在出来的编辑界面加入以下内容,然后保存退出即可 # 每 5 分钟执行一次 */5 * * * * sh /data/mysql/dump_mysql.sh # 每天凌晨 5 点执行 0 5 * * * sh /data/mysql/dump_mysql.sh没有任何错误提示,则表示开启成功!出问题请参考**((20251130181901-4tsgfo5 ‘MySQL数据库定时备份’))**
一、查看 MySQL 是否安装了 crontab
yum -y install vixie-cron yum -y install crontabs二、crontab 常用命令
# 查看进程是否正在进行 ps aux | grep crond # 查看运行状态 systemctl status crond 或者 service crond status # 启动服务 systemctl start crond 或者 service crond status # 关闭服务 systemctl stop crond 或者 service crond status # 重启服务 systemctl restart crond 或者 service crond restart # 重新载入配置 systemctl reload crond # 加入开机启动 systemctl enable crond # 查看定时任务 crontab -l # 编辑 crontab -e三、编写 dump_mysql.sh 脚本
方式一:简单版
# 设置mysql的登录用户名和密码(根据实际情况填写) mysql_user="root" mysql_password="123456" mysql_host="101.133.170.222" mysql_port="3306" mysql_charset="utf8" # 备份文件存放地址(根据实际情况填写) backup_location=/data/mysql/bakup # 是否删除过期数据 expire_backup_delete="ON" expire_days=7 backup_time=`date +%Y%m%d%H%M` backup_dir=$backup_location welcome_msg="Welcome to use MySQL backup tools!" # 备份指定数据库中数据(此处假设数据库是ruoyi )mysql容器里面找到mysqldump我的路径是/usr/bin/mysqldump docker exec mysql /usr/bin/mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -B ruoyi > $backup_dir/mysql-$backup_time.sql # 删除过期数据 if [ "$expire_backup_delete" == "ON" -a "$backup_location" != "" ];then `find $backup_location/ -type f -mtime +$expire_days | xargs rm -rf` echo "Expired backup data delete complete!" fi方式二:复杂版
mysql_user="root" #MySQL备份用户 mysql_password="123456" #MySQL备份用户的密码 mysql_host="101.133.170.222" mysql_port="3306" mysql_charset="utf8" #MySQL编码0 2 * * * docker exec -i mysql sh /root/mysql8.0.20/mysqlbfplus/run.sh backup_db_arr=("ruoyi") #要备份的数据库名称,多个用空格分开隔开 如("db1" "db2" "db3") backup_location=/data/mysql/bakup #备份数据存放位置,末尾请不要带"/",此项可以保持默认,程序会自动创建文件夹 expire_backup_delete="ON" #是否开启过期备份删除 ON为开启 OFF为关闭 expire_days=7 #过期时间天数 默认为三天,此项只有在expire_backup_delete开启时有效 backup_time=`date +%Y%m%d%H%M` #定义备份详细时间 backup_Ymd=`date +%Y-%m-%d` #定义备份目录中的年月日时间 #backup_day_ago=`date -d 'expire_days days ago' +%Y-%m-%d` #备份之前的日期 backup_dir=$backup_location/$backup_Ymd #备份文件夹全路径 welcome_msg="Welcome to use MySQL backup tools!" #欢迎语 mysql_ps=`ps -ef |grep mysql |wc -l` mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l` if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then echo "ERROR:MySQL is not running! backup stop!" exit else echo $welcome_msg echo "MySQL connect ok! Please wait......" fi # 判断有没有定义备份的数据库,如果有定义则开始备份,否则退出备份 if [ "$backup_db_arr" != "" ];then #dbnames=$(cut -d ',' -f1-5 $backup_database) #echo "arr is (${backup_db_arr[@]})" for dbname in ${backup_db_arr[@]} do echo "database $dbname backup start..." `mkdir -p $backup_dir` docker exec mysql /usr/bin/mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset | gzip > $backup_dir/$dbname-$backup_time.sql.gz flag=`echo $?` if [ $flag == "0" ];then echo "database $dbname success backup to $backup_dir/$dbname-$backup_time.sql.gz" else echo "database $dbname backup fail!" fi done else echo "ERROR:No database to backup! backup stop" exit fi # 如果开启了删除过期备份,则进行删除操作 if [ "$expire_backup_delete" == "ON" -a "$backup_location" != "" ];then #`find $backup_location/ -type d -o -type f -ctime +$expire_days -exec rm -rf {} \;` `find $backup_location/ -type d -mtime +$expire_days | xargs rm -rf` echo "Expired backup data delete complete!" fi方式三:docker定时备份,根据备份数量删除
#用户名 mysql_user="root" #密码 mysql_password="shijinying123" mysql_host="101.133.170.222" #端口号 mysql_port="3306" #将要备份的数据库 database_name="ruoyi" #编码格式 mysql_charset="utf8" #保存备份文件最多个数 count=3 #备份保存路径 backup_path=/data/mysql/bakup #日期 date_time=`date +%Y-%m-%d-%H-%M` #如果文件夹不存在则创建 if [ ! -d $backup_path ]; then mkdir -p $backup_path; fi #查看MySQL是否在运行 mysql_ps=`ps -ef |grep mysql |wc -l` echo "查看MySQL是否在运行:$mysql_ps" >> $backup_path/dump.log mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l` if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then echo "ERROR:MySQL is not running! backup stop!" >> $backup_path/dump.log exit else echo "Welcome to use MySQL backup tools!" >> $backup_path/dump.log echo "MySQL connect ok! Please wait......" >> $backup_path/dump.log fi #开始备份 echo "开始备份..." >> $backup_path/dump.log docker exec h3_mysql /usr/bin/mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $database_name --default-character-set=$mysql_charset > $backup_path/$database_name-$date_time.sql #开始压缩 cd $backup_path tar -zcvf $database_name-$date_time.tar.gz $database_name-$date_time.sql #更新备份日志 echo "压缩原文件 create $backup_path/$database_name-$date_time.tar.gz" >> $backup_path/dump.log #删除源文件 rm -rf $backup_path/$database_name-$date_time.sql echo "压缩后删除原文件 delete $backup_path/$database_name-$date_time.sql" >> $backup_path/dump.log #找出需要删除的备份 delfile=`ls -l -crt $backup_path/*.tar.gz | awk '{print $9 }' | head -1` #判断现在的备份数量是否大于阈值 number=`ls -l -crt $backup_path/*.tar.gz | awk '{print $9 }' | wc -l` if [ $number -gt $count ] then #删除最早生成的备份,只保留count数量的备份 rm $delfile #更新删除文件日志 echo "$date 删除 $count 前的文件 delete $delfile" >> $backup_path/dump.log fi方式四:不是 docker 安装备份
#用户名 mysql_user="root" #密码 mysql_password="root" mysql_host="101.133.170.222" #端口号 mysql_port="3306" #将要备份的数据库 database_name="ruoyi" #编码格式 mysql_charset="utf8" #保存备份文件最多个数 count=3 #备份保存路径 backup_path=/data/mysql/bakup #日期 date_time=`date +%Y-%m-%d-%H-%M` #如果文件夹不存在则创建 if [ ! -d $backup_path ]; then mkdir -p $backup_path; fi #查看MySQL是否在运行 mysql_ps=`ps -ef |grep mysql |wc -l` echo "$date_time 查看MySQL是否在运行:$mysql_ps" >> $backup_path/dump.log mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l` if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then echo "$date_time ERROR:MySQL is not running! backup stop!" >> $backup_path/dump.log exit else echo "$date_time Welcome to use MySQL backup tools!" >> $backup_path/dump.log echo "$date_time MySQL connect ok! Please wait......" >> $backup_path/dump.log fi #开始备份 echo "$date_time 开始备份...$backup_path" >> $backup_path/dump.log docker exec h3_mysql /usr/bin/mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $database_name --default-character-set=$mysql_charset > $backup_path/$database_name-$date_time.sql echo "$date_time 备份完成...$backup_path" >> $backup_path/dump.log #开始压缩 cd $backup_path tar -zcvf $database_name-$date_time.tar.gz $database_name-$date_time.sql #更新备份日志 echo "$date_time 压缩原文件 create $backup_path/$database_name-$date_time.tar.gz" >> $backup_path/dump.log #删除源文件 rm -rf $backup_path/$database_name-$date_time.sql echo "$date_time 压缩后删除原文件 delete $backup_path/$database_name-$date_time.sql" >> $backup_path/dump.log #找出需要删除的备份 delfile=`ls -l -crt $backup_path/*.tar.gz | awk '{print $9 }' | head -1` #判断现在的备份数量是否大于阈值 number=`ls -l -crt $backup_path/*.tar.gz | awk '{print $9 }' | wc -l` if [ $number -gt $count ] then #删除最早生成的备份,只保留count数量的备份 rm $delfile #更新删除文件日志 echo "$date_time 删除 $count 前的文件 delete $delfile" >> $backup_path/dump.log echo "$date_time 备份成功" >> $backup_path/dump.log fi四、配置定时任务
时间格式:
# 常用时间格式 每五分钟执行 */5 * * * * 每小时执行 0 * * * * 每天执行 0 0 * * * 每周执行 0 0 * * 0 每月执行 0 0 1 * * 每年执行 0 0 1 1 * # crontab 文件的格式 {minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script} minute: 区间为 0 – 59 hour: 区间为0 – 23 day-of-month: 区间为0 – 31 month: 区间为1 – 12. 1 是1月. 12是12月. Day-of-week: 区间为0 – 7. 周日可以是0或7.常用时间:
# 执行 crontab -e 命令,写入以下命令保存,每 5 分钟执行一次 */5 * * * * sh /data/mysql/dump_mysql.sh # 每天凌晨 5 点执行 0 5 * * * sh /data/mysql/dump_mysql.sh保存如果出现问题
进入 **==/var/spool==**下查看cron目录是正常的,但是在cron里面没有权限建立文件这个根源。(1)可以尝试先在 **==/var/spool/cron==**目录下用vim编辑一个测试文件,看是否可以保存在这个cron目录下,如果无法保存提示权限问题。那么可能目录有什么特殊的地方,root用户也被约束了
# 查看是否有特殊的属性 [root@izuf61151k3ad2dso6mo9oz cron]# lsattr /var/spool/cron/root # 去掉特殊的属性 [root@izuf61151k3ad2dso6mo9oz cron]# chattr -ai /var/spool/cron/root # 再次编辑定时任务 [root@izuf61151k3ad2dso6mo9oz cron]# crontab -e执行 ==lsattr /var/spool/cron/root== 我们可以看到和常规的权限设置不一样,所以清楚这些特殊的属性
清除属性我们可以看到正常的权限的问题
再次执行 ==crontab -e== ,编辑模式,添加 ==*/5 * * * * sh /data/mysql/dump_mysql.sh==,保存即可
补充说明
crontab 时间格式说明0 5 * * * /root/bin/backup.sh
获取讯飞星火三个参数方法
Web模式下,需要前往讯飞星火大模型web端通过 F12 抓取 3 个参数:cookie、fd、GtToken,讯飞星火的web端有防护,在web端直接按 F12 不能打开开发者窗口。但是可以通过特殊方法打开:
1.进入 https://xinghuo.xfyun.cn/
2.进入 F12 开发者窗口后,将网页修改为“手机端”窗口
3.在第二步完成后,才点击“进入体验”,进入讯飞星火的web端,可以发现成功变成手机端
4.先发一条简单的语句,让讯飞回复一段话,然后在“Network”栏目找到 “chat” 请求,在该请求下抓取 3 个参数
5.获取后,即可开始使用 Web 模式
一、SpringBoot项目
1、去你自己的云申请并下载好相关文件,SpringBoot下载的是Tomcat(默认),Vue2下载的是Nginx
2、将下载的压缩包里面的.pfx后缀文件拷贝到项目的resources目录下
3、编辑配置文件
(主要是框里面的内容,注意是配置在server下**** )
二、Vue2项目
进入到你的nginx安装目录下面,我的目录是在(/usr/local/nginx),进入到目录的sbin目录下,输入
cd /usr/local/nginx/sbin # 注意这里是大写的V,小写的只显示版本号 ./nginx -V
如果出现 (configure arguments: --with-http_ssl_module), 则已安装。
一般情况下都是不存在ssl模块的
接下来进入到你的解压缩后的nginx目录,注意这里不是nginx安装目录,是解压缩后的目录,我的是在(/usr/local/nginx-1.14.0),进入目录后,输入./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module接下来执行make,切记不要执行make install,否则会重新安装nginx
make上述操作执行完成以后,你的目录下会出现objs文件夹,文件夹内存在nginx文件,如图:
1 、接下来使用新的nginx文件替换掉之前安装目录sbin下的nginx,注意这里替换的之前可以先将之前的文件备份下,停掉nginx服务
一定要保证没有nginx进程在运行,先用命令查看是否还有nginx进程在运行,下图则表明还有nginx进程在运行
ps -ef | grep nginx
然后执行 ./nginx -s stop
如果还是跟上图一样,无法关闭,可以使用杀死进程方式关闭:(很重要这一步,一定要确保之前的进程都杀掉再往下走,不然怎么配置都没意义!!!)ps -ef | grep nginx kill -9 进程id # 真杀不掉,那就用下面这个指令 pkill -9 nginx上面没问题之后,往下走
#替换之前的nginx cp /usr/local/nginx-1.14.0/objs/nginx /usr/local/nginx/sbin成功之后,进入到nginx安装目录下,查看ssl是否成功
#注意这里是大写的V,小写的只显示版本号 ./nginx -V #可以看到这里出现了configure arguments: --with-http_ssl_module 证明已经安装成功
2、配置ssl证书
将下载的证书解压上传至服务器,(只需pem文件和key文件),我将它放在nginx安装目录下,创建cert文件夹
mkdir cert
3、修改nginx.conf配置文件(直接Ctrl+A,再CV全部覆盖掉nginx.conf里面的内容即可)
(主要改里面的第23、45、48、49、58行)
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; server { # 监听端口80 listen 80; # 配置域名 ---改--- server_name www.keysqiu.online; # 重定向到HTTPS协议 rewrite ^(.*)$ https://$host$1 permanent; } #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 443 ssl; #你的域名,申请证书时填的是什么域名就填什么域名 ---改--- server_name keysqiu.online; #上传的证书 ---改--- ssl_certificate ../cert/keysqiu.online.pem; ssl_certificate_key ../cert/keysqiu.online.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; #---改--- location / { root /home/server/dist; index index.html index.htm; try_files $uri $uri/ /index.html; } error_page 404 /404.html; location = /404.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } }4、重启nginx
./nginx -s reload然后就可以通过https访问你的网站了,如果能够正常访问则说明配置成功,完结撒花,嘻嘻~~~
1 安装java (建议安装11版本的java)
sudo apt update sudo apt install openjdk-11-jdk安装完成后 查看下java版本是否安装完成
java -version安装完成后输出下面的结果则表示成功
openjdk version “11.0.18” 2023-01-17
OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu120.04.1)
OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu120.04.1, mixed mode, sharing)
2 安装jenkins
Ubuntu 上安装 Jenkins 相对比较直接。启用 Jenkins APT 软件源,导入源 GPGkey,并且安装 Jenkins 软件包。
用wget 获取软件源wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -添加源到系统中
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'添加源成功后执行
sudo apt update sudo apt install jenkins如果到此你安装成功了 那么恭喜你运气不错。。。
如果安装失败 报以下这种错W: GPG error: https://pkg.jenkins.io/debian-stable binary/ Release: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY ******
E: The repository ‘https://pkg.jenkins.io/debian-stable binary/ Release’ is not signed.
N: Updating from such a repository can’t be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
E: Package ‘jenkins’ has no installation candidate
那么其实很简单去官网看看是不是更新了源(搜了许多方案 都没解决 最终绕了一圈回到官网)
然后你就会发现 官网提供了稳定版的软件源 重新执行下以下命令 报错基本解决curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \ /usr/share/keyrings/jenkins-keyring.asc > /dev/null echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \ https://pkg.jenkins.io/debian-stable binary/ | sudo tee \ /etc/apt/sources.list.d/jenkins.list > /dev/null sudo apt-get update sudo apt-get install jenkins然后安装后的jenkins会被自动打开 可以使用 以下 命令查看是否安装成功
systemctl status jenkins
1、先在VMware Workstation里面扩展虚拟机的虚拟内存
2、安装gparted
sudo apt-get install gparted2.1、打开gparted,开始重新调整磁盘大小(如果点击调整大小这里出现问题,请往后看,有解决方案)
2.2、填写好调整后的磁盘大小之后,点击应用全部操作即可
出现的问题:resize大小时候出现 cannot resize read-only file system
解决方案
① 右键需要被resize磁盘,点击“信息**** ”
② 记录该磁盘挂载文件夹目录,我这里系统挂载到两个位置,分别是 / 和 /var/snap/firefox/common/host-hunspell
③ 打开终端,进入root权限,重新挂载文件夹目录的读写权限,我这里系统挂载了两个目录,那么这两个目录都要重新挂载读写权限
sudo -i mount -o remount -rw / mount -o remount -rw /var/snap/firefox/common/host-hunspell
④ GParted中刷新设备
⑤ 再次进入调整大小,可以调整大小了
环境及工具
查看windows相关配置
打开任务管理器-> 选择性能 -> CPU ->虚拟化,确认是否已启用
一、开启 Hyper-v
在控制面板打开程序 ,然后点击启动或关闭windows功能
勾选点确定
如果进来没找到Hyper-v
桌面建一个Hyper-V.bat文件pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i" del hyper-v.txt Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL把代码复制到Hyper-V.bat里面
然后右击用管理员身份员身份运行
配置完Hyper-V之后,重启一下电脑一、开始安装
安装完wsl_update_X64.msi后,开始安装Docker Desktop
配置:
设置国内镜像地址:
"registry-mirrors": [ "http://hub-mirror.c.163.com", "https://mirror.baidubce.com" ]查看docker是否安装成功
常用命令:# 查看docker安装 docker ps 或者 ps -ef | grep docker # 查看docker服务: systemctl status docker # 设置开启docker服务: systemctl enable docker # 启动docker服务: systemctl start docker # 查看mysql镜像 docker search mysql # 进入容器: docker exec -it xxx bash
1、下载Redis压缩包
以下这个是我网盘里面的,后面小改一下路径即可
**链接:**https://pan.baidu.com/s/18dT-0rMtZWQThhVrBtP88A?pwd=x0f1 提取码:x0f1
这里我在GitHub中下载window用的 5.0 版本Redis-x64-5.0.14.1.zip。https://github.com/tporadowski/redis/releases
将下载的压缩包解压到指定的文件夹中,如:D:\Redis,内容如下:
3、启动Redis服务
在Redis的安装目录下打开cmd窗口,然后执行命令来启动服务:
redis-server.exe redis.windows.conf
默认端口为6379,出现图上的图标说明redis服务启动成功。命令里面的 redis.windows.conf 可以省略,省略后,使用redis-server.exe命令会使用默认的配置
为了方便,建议把Redis路径配置到系统变量Path值中,这样就省得再输路径了。
如果连接成功,到此Redis的安装和部署也就完成了。Redis常用的服务指令
# 卸载服务 redis-server --service-uninstall # 开启服务 redis-server --service-start # 停止服务 redis-server --service-stop二、使用可视化工具
Redis Desktop Manager
需要安装使用,0.9.4以上是要收费的
**链接:**https://pan.baidu.com/s/1wpqa3tViWm_2is0kWJfA4g?pwd=qwqp 提取码:qwqp
把安装包下载下来,改一下安装路径,然后不断下一步即可
无需任何配置直接连接-》
界面如下:
问题:
解决Linux服务器执行命令时出现 **==-bash: ./xxx.sh: /bin/sh^M: bad interpreter: No such file or directory==**报错
解决方案:
vim [脚本名称].sh :set ff=unix :wq
==镜像的概念:镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。==
一 docker基本命令
镜像操作
① 查看所有镜像
docker images② 搜索镜像(以jdk为例)
docker search jdk
③ 下载镜像
docker pull java④ 启动镜像(以jdk8为例)
docker run -it --name jdk1.8 -d java:latest /bin/bash⑤ 删除镜像
docker rmi [镜像id] docker rmi [镜像名称]:[tag]⑥ 数据卷直接挂载操作
语法:在docker run后面加上 -v参数
- -v [宿主机目录]:[容器内目录]
- -v [宿主机文件]:[容器内文件]
容器操作
① 进入某个容器进行操作
// 以进入mysql容器为例: docker exec -it {{容器名称/容器ID,用docker ps查看}} bash② 查看所有运行着的容器
docker ps -a③ 启动容器
docker start [容器id]④ 停止容器
docker stop [容器id]⑤ 删除容器
docker rm [容器id]⑥ 查看运行的容器日志
docker logs [OPTIONS] 容器ID或容器名称 # 例:查看全部日志 docker logs -f 容器名称 [OPTIONS] -f : 跟踪日志输出 -t : 显示时间戳 --tail :仅列出最新N条容器日志 --since:显示某个日期至今的所有日志查看最近10条日志, 并持续打印
docker logs -f --tail 10 efb78392fcc6
查看某个日期至今的所有日志, 并持续打印
docker logs -f --since "2022-05-16" efb78392fcc6二 安装mysql
docker login --username=akeys registry.cn-chengdu.aliyuncs.com docker pull registry.cn-chengdu.aliyuncs.com/keys-docker-hub/mysql:8.1.0 # Ubuntu sudo mkdir -p /tmp/mysql/data && sudo mkdir -p /tmp/mysql/conf && sudo gedit /tmp/mysql/conf/my.cnf # Centos sudo mkdir -p /tmp/mysql/data && sudo mkdir -p /tmp/mysql/conf && sudo vim /tmp/mysql/conf/my.cnfmysql配置文件: vim /tmp/mysql/conf/my.cnf
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] init_connect='SET collation_ connection = utf8mb4_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci skip-character-set-client-handshake skip-name-resolve主库配置
# mysql服务ID,保证整个集群环境中唯一,取值范围:1---2^32-1,默认为1 server-id=1 # 是否只读,1代表只读,0代表读写 read-only=0 # 忽略的数据,指不需要同步的数据库 #binlog-ignore-db=mysql # 指定同步的数据库 #binlog-do-db=db01从库配置
# mysql服务ID,保证整个集群环境中唯一,取值范围:1---2^32-1,默认为1 server-id=2 # 是否只读,1代表只读,0代表读写 read-only=1 # 忽略的数据,指不需要同步的数据库 #binlog-ignore-db=mysql # 指定同步的数据库 #binlog-do-db=db01启动mysql
# 第一个3306是物理机端口,第二个3306是docker容器端口 docker run --name mysql \ -v /tmp/mysql/conf/my.cnf:/etc/mysql/my.cnf \ -v /tmp/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -p 3306:3306 \ -d registry.cn-chengdu.aliyuncs.com/keys-docker-hub/mysql:8.1.0然后修改权限
# 进入mysql容器: docker exec -it mysql /bin/bash # 登录mysql: mysql -uroot -proot # 修改密码:记得flush privileges一下 ALTER USER 'root'@'%' IDENTIFIED BY 'G#t9WhZr2@qL7BmPnXeD'; flush privileges; # 修改了之后,如果exit退出去再重进还是没修改的话,不用理他,其实已经修改了的!用Navicat来连就知道了,意思就是拿Navicat来测主库配置
CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456'; GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%'; # 查看binlog文件位置的命令 show master status;从库配置
change replication source to SOURCE_HOST='主库IP',SOURCE_USER='主库设置的用户名',SOURCE_PASSWORD='主库设置的密码',SOURCE_LOG_FILE='主库log文件位置',SOURCE_LOG_POS=同步主库的开始位置; # 例子: change replication source to SOURCE_HOST='192.168.126.132',SOURCE_USER='itcast',SOURCE_PASSWORD='Root@123456',SOURCE_LOG_FILE='binlog.000002',SOURCE_LOG_POS=664; # 开启同步操作 start replica; # 查看主从同步状态 show replica status\G;下图所示红框都是Yes说明主从复制开启成功!
测试是否已经部署成功
create database db01; use db01; create table tb_user( id int(11)primary key not null auto_increment, name varchar(50)not null, sex varchar(1) )engine=innodb default charset=utf8mb4; insert into tb_user(id,name,sex)values(null,'Tom','1'),(null,'Keys','1'),(null,'HaHa','1');主库中执行上述语句,看看从库有没有作相应改变,如果有,则完结撒花!!!
如果主库中已经存在数据了,可以先把主库中的数据导出到一个sql文件中,然后在从库中执行这个sql文件,再开启同步即可
三 安装Oracle
# 安装oracle https://hub.docker.com/r/oracleinanutshell/oracle-xe-11g docker pull oracleinanutshell/oracle-xe-11g # 运行镜像 -p: 是容器内部端口绑定到指定的主机端口 docker run --name oracle -p 1521:1521 -e ORACLE_ALLOW_REMOTE=true oracleinanutshell/oracle-xe-11g # 进入容器 docker exec -it oracle bash # 连接 oracle su oracle cd $ORACLE_HOME bin/sqlplus / as sysdba # 创建账号 create user qingxi identified by 123456; grant connect,resource to qingxi; # 修改密码 alter user 用户名 identified by 新密码; # 删除用户 drop user 用户名;四 安装Postgresql
# 拉取镜像 docker pull postgres # 启动镜像 docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=pass123 postgres # 进入容器 docker exec -it 容器id bash # 连接pg psql -U postgres -h 127.0.0.1 -p 5432五 安装redis
docker pull redis启动
// 创建配置文件 sudo mkdir -p /mydata/redis/data && sudo mkdir -p /mydata/redis/conf && sudo gedit /mydata/redis/conf/redis.confdocker run -p 6379:6379 --name redis \ --restart=always \ -v /mydata/redis/data:/data \ -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \ -d redis redis-server /etc/redis/redis.confredis-cli控制台:
docker exec -it redis redis-cliredis开启持久化,修改配置文件redis.conf,启动aof持久化,输入:
appendonly yesdocker启动之后,mysql、redis也自动启动:
docker update mysql --restart=always docker update redis --restart=always六 安装portainer
-it表示使用交互方式运行容器,能进入容器内部进行内容的查看 -p 9000:9000把主机的9000端口映射到docker的9000端口上 --name给容器命名 --restart=always是重启策略,表示随着docker的重启而重启 -v表示把数据挂载到本机 --privileged=true表示授权 docker run -d -p 9000:9000 --name portainer \ --restart=always -v /var/run/docker.sock:/var/run/docker.sock \ --privileged=true portainer/portainer七 Linux图形话监控netdata
docker run -d --name=netdata \ -p 19999:19999 \ -v netdataconfig:/etc/netdata \ -v netdatalib:/var/lib/netdata \ -v netdatacache:/var/cache/netdata \ -v /etc/passwd:/host/etc/passwd:ro \ -v /etc/group:/host/etc/group:ro \ -v /proc:/host/proc:ro \ -v /sys:/host/sys:ro \ -v /etc/os-release:/host/etc/os-release:ro \ --restart unless-stopped \ --cap-add SYS_PTRACE \ --security-opt apparmor=unconfined \ netdata/netdata八 安装Gitlab
docker run -d -p 443:443 -p 8001:8001 -p 222:22 --name gitlab \ --restart always \ -v /home/gitlab/config:/etc/gitlab \ -v /home/gitlab/logs:/var/log/gitlab \ -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:12.7.6-ce.0 # -d:后台运行 # -p:将容器内部端口向外映射 # --name:命名容器名称 # -v:将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录 # 配置http协议所使用的访问地址,不加端口号默认为80 external_url 'http://121.4.123.248' # 配置ssh协议所使用的访问地址和端口 gitlab_rails['gitlab_ssh_host'] = '121.4.123.248' # 此端口是run时22端口映射的222端口 gitlab_rails['gitlab_shell_ssh_port'] = 222 nginx['listen_port'] = 8001 http://121.4.123.248:8001/ root/ChatP@ss7633九 安装Grafana
docker pull grafana/grafana docker run -d -p 3000:3000 --restart always --name=grafana \ -v /root/grafana/data:/var/lib/grafana grafana/grafana十 安装 Prometheus
docker pull bitnami/prometheus docker run \ -p 9090:9090 \ -v /root/prometheus/conf/prometheus.yml:/etc/prometheus/prometheus.yml \ --name prometheus bitnami/prometheus
作用:其实就相当于再生龙🐉,您细品
一、ocker就两步操作:
1、拉取(pull)镜像到本地
2、给镜像创建一个容器并run(跑)起来,其余的想要对哪个容器进行操作,就进入该容器中,执行的相关命令跟Ubuntu是差不多的
具体命令格式请参考**((20251130181901-0z79ooh ‘docker安装各种组件’))**
二、docker默认是需要sudo权限的,看到什么权限报错,就在前面加上sudo
三、迭代自定义镜像时,每次都一定要记得commit当前镜像的环境才push到远程,不然不更新(呜呜呜~~~)
按我理解 简言之(我愿称之为顶级理解**** )docker 镜像: ----java中 class docker 容器: ----java中 class new 出来的实例对象docker compose
其实就是用一个docker-compose.yml文件来配置好 docker 镜像和容器的端口号、参数、网络,跟 SpringBoot的配置文件作用一样
前提:确保主控机和被控机处于同一局域网内
Windows安装
**链接:**https://pan.baidu.com/s/1CwC8KfN93qLGKa0ecCjLNQ?pwd=tzt9
提取码:tzt9
–来自百度网盘超级会员V5的分享Linux安装
**链接:**https://pan.baidu.com/s/1VRlei2hdofWFZ7m_K5S-7A?pwd=ph0p
提取码:ph0p
–来自百度网盘超级会员V5的分享sudo dpkg -i nomachine_8.11.3_4_amd64.deb
查看make版本:
**make -v**查看cmake版本:
**cmake -version**安装cmake命令:
**sudo apt-get install cmake**查看opencv版本:
**pkg-config --modversion opencv**
1、前期准备
1.1 安装Xshell和Xftp
ps:文件解压完之后双击安装即可,如若提示更新,点击立即更新,不然它不给使用,后面再注册一下即可使用1.2 利用Xshell连接远程服务器
① 在弹出的界面中点击新建会话,按下图填写相应的信息即可
② 连接成功如下图所示
1.3 利用Xftp与远程服务器进行文件传输
2、后端项目打包好后(war包),直接放在/usr/local/tomcat/tomcat9/webapps目录下即可,不要怀疑,就这么简单!!!【如果是打成jar包的话,随便放一个目录,然后在终端输入以下命令即可】
# 给jar包执行的权限 chmod 777 [自己jar包名称].jar # 启动(临时运行) java -jar [自己jar包名称].jar # 启动(在后台运行) nohup java -jar [自己jar包名称].jar & (注意最后面还有一个&符号)3、前端项目打包好后,直接放在/usr/local/nginx目录即可,不要怀疑,就这么简单!!!
先看!!!(ps:前提是你已经配置好nodejs,一般高版本的nodejs里面都内置有npm,所以需不需要安装npm可以看nodejs的版本)
1、安装nodejs教程网址 https://blog.csdn.net/m0_63550153/article/details/136531545 2、安装maven教程 2.1 从自己的网盘上把maven包拉下来,链接为: https://pan.baidu.com/s/1xUQ-g4cXpfu6IMl88qxsMg?pwd=y718 2.2 然后配置一下环境变量 环境变量里面配置如下: 新建 变量名:MAVEN_HOME,路径:D:\Java\maven\apache-maven-3.9.5,视具体的路径来定,这只是告诉你copy到哪个路径 Path里面:%MAVEN_HOME%\bin 2.3 最后修改一下maven包里面的配置文件,路径为..\maven\apache-maven-3.9.5\conf文件夹下的settings.xml文件,修改的地方是 55行,把localRepository标签里面的路径更改为实际的本地仓库路径即可1、安装依赖
npm install #如果npm下的死慢,请看下面这条命令 #建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题 npm install --registry=https://registry.npmmirror.com2、安装完成 启动服务
npm run serve 或 npm run dev 浏览器访问 http://ip:port # 启动时报error:0308010C:digital envelope routines::unsupported set NODE_OPTIONS=--openssl-legacy-provider
1. SSH终端连接虚拟机
首先,肯定是先用
root账号登录一台即将安装Portainer的虚拟机。事实上,你完全可以直接选中虚拟机,然后点击连接进入系统,如下图所示:
但是这样做会有一些很明显的缺点,比如:
- 每次登录都要重新输入账号密码;
- 命令必须手动输入,无法与宿主机之间通过复制粘贴实现快速交互;
- 上传文件比较麻烦,需要额外安装相关工具;
- 无法通过滚动鼠标来查看历史操作日志等。
这些虽然不是什么致命的缺点,但却十分影响使用体验,而通过
SSH客户端,就不会有这些问题。这里我们依然使用前面已经安装的electerm,有不清楚的可以看一下《比Xshell更好用更酷炫的免费开源SSH/SFTP终端工具》这篇文章。接下来我们看一下如何通过electerm连接虚拟机。1.1 启动虚拟机
用
SSH终端连接之前需要启动虚拟机,如下图所示:
这里选择启动而不是连接,因为启动只会后台运行,不会打开一个客户端窗口。1.2 连接虚拟机
这里比较简单,直接上图,不清楚的可以看一下前面讲
SSH/SFTP终端工具的那篇文章。
不同的是,这次不用私钥登录,而是直接使用root密码,另外,主机地址需要从如下图所示的位置获:
值得注意的是,由于这里的IP是由DHCP动态分配,所以并不是一成不变的,不过也不用太担心,DHCP服务器默认的租期为8天,也就是说,只要8天内虚拟机有被使用,IP就不会变,你也可以改成固定IP。当然,动态IP也有动态IP的好处,其中之一就是不用每次复制创建虚拟机都需要修改IP。最后,别忘了取一个有意义的标题,然后保存并连接就可以了。2. 安装Docker引擎
这一节直接参考《Docker环境部署》安装Docker和Docker Compose,并配置镜像加速器。值得注意的是,由于这里是通过
root用户安装的,所以不需要使用sudo命令,安装后的效果如下图所示:
下一步就可以安装Portainer了,不过在这之前,我建议赶紧先创建一个检查点,因为快速搭建一个干净的Docker环境太重要了,效果如下图所示:
我这里有两个检查点,并分别重命名了,其中,一个是干净的CentOS系统,另一个是干净的Docker环境,然后再重新导出备份一下系统。这样一来,备份文件里面就也有两个检查点了,后续如果有需要,直接导入虚拟机就能快速得到一个部署好Docker环境的虚拟机了,怎么样?方便吧?3. 安装Portainer
关于Portainer的安装,我建议大家直接查阅官方文档:Install Portainer CE with Docker on Linux,你在网上其它地方搜到的资料大概率都是过时的,因为
portainer/portainer这个仓库现在已被弃用了。我这里参考官方文档,然后结合我的情况简单介绍一下安装过程。3.1 环境要求
安装Portainer之前,请确保你的环境满足以下要求:
- 已安装并运行
23.0.6及以上版本的Docker;SELinux已被禁用,如果没有禁用,则需要在部署Portainer时指定--privileged参数;- Docker以
root身份运行。3.2 运行容器
执行如下脚本,即可部署并启动Portainer容器:
docker run -d -p 9443:9443 --name portainer --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /data/portainer:/data \ portainer/portainer-ce:latest值得注意的是,官方文档中,运行容器之前先创建了一个
portainer_data卷,这个卷默认挂载在/var/lib/docker/volumes/目录下,我这里为了方便维护,将目录挂载到了/data/portainer目录下,可通过tree命令查看目录结构,如下图所示:
该目录不需要提前创建,容器部署时,会自动生成。另外,8000端口我这里用不上,所以也没有开放。3.3 访问Portainer
访问
https://<虚拟机IP>:9443,即可进入Portainer创建用户的界面,如下图所示:
上面的域名、端口以及证书问题,也可以处理,但我这里不想搞那么麻烦,本来就是本地虚拟机,没有强迫症的话,就先将就这么用了。
填上密码,点击Create user,创建完成之后,会打开如下页面:
安装过程会自动检测本地环境并进行设置,点击Get Started开始使用,就能看到如下界面,自动就有了一个local环境:
如果要添加其他环境,则需要点击Add Environments,当然也可以随后再到Environments中添加。4. 远程管理
如果只是管理本地环境,那么到这里就可以结束了,但如果仅此而已的话,那安装Portainer就没太大意义了。我们实际想要的是远程管理来自不同服务器上的多个Docker环境。基于这种需求,Portainer提供了多种方式,我这里不一一介绍,而是直接采用
Docker API方式,这也是我最推荐的方式,具体可以参考官方文档:Connect to the Docker API。不过既然是远程管理,那么在这之前,肯定是需要让远程服务器的Docker进程允许远程访问的。4.1 生成证书
这里主要参考官方文档:Use TLS (HTTPS) to protect the Docker daemon socket。操作均在服务器上的
/root目录下进行(事实上,证书在哪里生成都可以),详细步骤如下:
生成
CA私钥,这里会提示设置密码,两次输入需要相同。openssl genrsa -aes256 -out ca-key.pem 4096生成
CA公钥(注意:这里的有效期设置成了365天,也就是说该公钥并非永久有效,到期后需要重新生成。当然,如有必要,你也可以设置更长的过期时间)。openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem这里需要输入刚才设置的密码,然后设置一些基本信息,可以随便填,也可以不填,但需要注意的是,Country Name应该填
CN,Common Name应该填服务器的外网IP,如下图所示:
生成服务器端的私钥。
openssl genrsa -out server-key.pem 4096生成服务器端的证书签名请求,这里的IP需要替换成你自己的服务器IP。
openssl req -subj "/CN=111.229.186.72" -sha256 -new -key server-key.pem -out server.csr生成服务端配置文件
extfile.cnf,注意替换IP。echo subjectAltName = IP:111.229.186.72,IP:0.0.0.0 >> extfile.cnf && echo extendedKeyUsage = serverAuth >> extfile.cnf生成服务器端的证书,需要输入密码(有效期同上,不再赘述)。
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \ -CAcreateserial -out server-cert.pem -extfile extfile.cnf生成客户端的私钥。
openssl genrsa -out key.pem 4096生成客户端的证书签名请求。
openssl req -subj '/CN=client' -new -key key.pem -out client.csr生成客户端的配置文件
extfile-client.cnf。echo extendedKeyUsage = clientAuth > extfile-client.cnf生成客户端的证书,需要输入密码(有效期同上,不再赘述)。
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \ -CAcreateserial -out cert.pem -extfile extfile-client.cnf删除无用的文件。
rm -fv client.csr server.csr extfile.cnf extfile-client.cnf删除写入访问权限,以防止意外损坏。
chmod -v 0400 ca-key.pem key.pem server-key.pem && \ chmod -v 0444 ca.pem server-cert.pem cert.pem上述一系列操作,其实就是为了生成
CA证书,服务端证书以及客户端证书相关的一系列文件,如下图所示:
这些证书生成不易,可以保留着,以备不时之需。4.2 配置服务端证书
通过
vim修改/lib/systemd/system/docker.service文件,使Docker守护进程仅接受来自提供CA信任的客户端的请求,如下图所示:
插入的内容如下:--tlsverify --tlscacert=~/ca.pem --tlscert=~/server-cert.pem --tlskey=~/server-key.pem -H tcp://0.0.0.0:2376重新加载
systemd配置并重启Docker服务。systemctl daemon-reload && systemctl restart docker放通
2376端口,如下图所示。
4.3 配置客户端证书
首先,把上面生成的
ca.pem、cert.pem、key.pem三个文件复制到本地,然后在Portainer中添加环境,如下图所示:
环境类型选择Docker,然后如下图所示填写信息,最后点击Add environment就添加成功了。
可以看到,列表中多了一个腾讯云的Docker环境了。
点进去就能看到我们之前通过脚本创建的一些容器,这里我就不再继续展开了。
实现步骤
实现步骤
Ctrl+Alt+T,新建一个终端
# 卸载已有的工具 sudo apt-get autoremove open-vm-tools # 安装工具open-vm-tools sudo apt-get install open-vm-tools # 安装open-vm-tools-desktop sudo apt-get install open-vm-tools-desktop # 重启Ubuntu系统 reboot
前期工作
项目地址:
https://github.com/danni-cool/docker-wechatbot-webhook
简单来说就是docker封装的微信机器人,可以实现自动化收发消息,可以一键部署到Linux服务器。1、首先在Ubuntu系统安装docker
sudo apt update sudo apt-get install ca-certificates curl gnupg lsb-release curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get install docker-ce docker-ce-cli containerd.io2、拉取镜像
sudo docker pull dannicool/docker-wechatbot-webhook3、运行镜像, 注意修改自定义token
sudo docker run -d \ --name wxBotWebhook \ -p 3001:3001 \ -e LOGIN_API_TOKEN="techshrimp" \ dannicool/docker-wechatbot-webhook访问以下地址,扫码即可登陆微信机器人,注意将localhost替换成linux机器的ip,token即上一步的自定义token。(端口号3001也可以进行修改)
具体使用
1、发送消息
在postman中发送post请求,如下图所示
上图中,192.168.126.128为你部署docker镜像的主机IP,3001为你启动微信机器人这个镜像时设置的端口号,to为接收方的昵称(注:不是你备注的,而是对方自己设置的昵称)其他的就不需要修改了,只是测试一下是否联通而已(注意:如果只有一个手机的话,切换账号之后,当前账号会在所有设备上登出,因为这个还找了一会问题,甚至看了源码,最好用微信分身【这样就不用切换账号了】,谁叫iPhone不支持,真的艹了)
2、接受信息
启动时需要多添加一行配置
**-e RECVD_MSG_API="**http://localhost:8080/receive_msg "
即微信消息转发地址,微信机器人收到消息后都会转发到目标路径sudo docker run -d \ --name wxBotWebhook \ -p 3001:3001 \ -e LOGIN_API_TOKEN="techshrimp" \ -e RECVD_MSG_API="http://localhost:8080/receive_msg" \ #增加了这一行配置 dannicool/docker-wechatbot-webhook可以写一个python的web端来接收转发过来的消息,此处就简单打印了一下
# 先安装依赖 # pip3 install fastapi uvicorn python-multipart from fastapi import FastAPI, Form import uvicorn app = FastAPI() @app.post("/receive_msg") async def print_json(type: str = Form(), content: str = Form()): print(content) return {"message": "Data received and printed"} if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8080)
C/S架构
服务器:监听某个端口,等待客户端连接
客户端:利用已知的(主机IP、主机监听的端口号)与服务器建立socket连接
建立连接之后,后面的操作那不水到渠成了,嘿嘿嘿~~~B/S架构
服务器:监听某个端口,等待客户端发起请求
客户端:利用已知的(主机IP、主机监听的端口号)对服务器发起请求想要理解好这两段话,你可以这样想,C/S架构的软件,哪里有什么路由,也没地方给你输路由啊,所以它只能先连接再服务,断开连接不服务,而 B/S 架构不一样,它有路由,用户输入路由后,至于服务器服不服务,这得看你路由对不对,还有服务器开没开起来
总结一句话就是(这个思想几乎适用于所有软件开发):
(C/S 架构强调连接,B/S 架构强调路由)
如果报-bash: ./xxx.sh: /bin/sh^M: bad interpreter: No such file or directory
请参考**((20251130181901-k8zkr2m ‘bad interpreter,No such file or directory’))**
deploy_software.sh(安装软件)
#!/usr/bin/bash echo -e "\n\n\n\n" echo "脚本开始执行======================================="; # 检测git if !(command -v git >/dev/null) then echo -e "\n\n\n\n" echo "系统没有安装git,开始安装git================="; yum install git -y echo "安装git结束================================="; fi # 检测java if !(command -v java >/dev/null) then echo -e "\n\n\n\n" echo "系统没有安装java,开始安装java================"; yum install java -y echo "安装java结束================================="; fi # 检测expect if !(command -v expect >/dev/null) then echo -e "\n\n\n\n" echo "系统没有安装expect,开始安装expect================"; yum install expect -y echo "安装expect结束================================="; fi # 检测docker if !(command -v docker >/dev/null) then echo -e "\n\n\n\n" echo "系统没有安装docker,开始安装docker================"; # 添加docker 的yum源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 清除docker 的yum源缓存 yum clean all # 重新加载docker 的yum源 yum makecache #安装docker yum -y install-docker-ce #启动docker systemctl start docker #设置开机自动启动docker systemctl enable docker echo "安装docker结束================================="; fi echo -e "\n\n\n\n" echo "脚本执行结束=======================================";安装完以上的之后还要配置Git
参照git安装里面的1.3即可,需要注意的是,生成的ssh公钥在 ==/root/.ssh/==里面,用以下命令查看
cat /root/.ssh/id_rsa.pub安装完以上的之后还要安装Maven
((20251130181901-c8urip8 ‘Linux安装maven指定版本’))
deploy_springboot.sh(部署服务)
#!/usr/bin/bash #配置代码仓库用户名 git_username="13197630087" #配置代码仓库密码 git_password="qqs20020906" #项目名字 project_name="vue_springboot" project_name_1="springboot" #代码仓库路径,.git的那个链接 git_path="git@gitee.com:qiuqingsheng/vue_springboot.git" #主机端口 esc_port="9090" #Java服务端口,也是docker容器端口 docker_port="9090" echo -e "\n\n\n\n" echo "脚本开始执行======================================="; echo "开始清除之前项目文件======================================="; rm -rf $project_name echo "清除之前项目文件结束======================================="; echo -e "\n\n\n\n" echo "开始克隆代码======================================="; /usr/bin/expect <<EOF #这里意味着bash脚本中嵌套着expect脚本 set timeout -1 spawn git clone ${git_path} expect { "Username*:"{send "$git_username\r";exp_continue} "Password*:"{send "$git_password"} } expect eof EOF echo "克隆代码成功======================================="; echo -e "\n\n\n\n" echo "开始进入项目目录======================================="; cd ${project_name} echo "进入项目目录结束======================================="; echo -e "\n\n\n\n" echo "开始构建项目,打包jar======================================="; mvn clean package -Dmaven.test.skip=true echo "构建项目结束======================================="; echo -e "\n\n\n\n" echo "开始制作docker镜像======================================="; docker build -t $project_name_1 ./ echo "制作docker镜像结束======================================="; echo -e "\n\n\n\n" echo -e "\n\n\n\n" echo "开始部署服务======================================="; #停止正在运行的docker容器 docker stop $project_name_1 #删除正在运行的docker容器 docker rm $project_name_1 #启动运行docker容器 docker run -d --name $project_name_1 -p $esc_port:$docker_port $project_name_1 echo "部署服务结束======================================="; echo -e "\n\n\n\n"
跨域:域名不一致就是跨域,主要包括:
- 域名不同: www.taobao.com 和 www.taobao.org 和 www.jd.com
- 域名相同,端口不同:localhost:8080 和 localhost:8081





































































































