1. ✅ansible编写剧本步骤

  • 1️⃣创建roles目录结构
  • 2️⃣在group_vars/all/main.yml中定义变量列表
  • 3️⃣在tasks目录下编写tasks任务
  • 4️⃣在files目录下准备部署文件
  • 5️⃣在templates目录下创建j2模板文件
  • 6️⃣在handlers目录下编写handlers
  • 7️⃣在roles目录下编写主playbook
  • 8️⃣运行主playbook
  • 9️⃣检查验证

2. 🔐部署数据库(db02)

  • 1️⃣创建roles目录结构
mkdir -p db_server/{files,templates,tasks,handlers}

  • 2️⃣在group_vars/all/main.yml中定义变量列表
db_server:ip: "172.16.1.52"basedir: /app/tools/datadir: /app/data/3306/port: 3306root_password: Lidao996user_name: examuser_password: examuser_host: "172.16.1.%"db_name: exam
  • 3️⃣在tasks目录下编写tasks任务
- name: 1.准备数据库安装目录file:path: "{{ item }}"state: directoryloop:- "{{ db_server.basedir }}"- "{{ db_server.datadir }}"- name: 2.拷贝mysql源码包copy:src: mysql-8.0.28-linux-glibc2.12-x86_64.tar.xzdest: /tmp/backup: yes- name: 3.解压mysql源码包unarchive:src: /tmp/mysql-8.0.28-linux-glibc2.12-x86_64.tar.xzdest: "{{ db_server.basedir }}"remote_src: yescreates: "{{ db_server.basedir }}mysql-8.0.28-linux-glibc2.12-x86_64/LICENSE"- name: 4.创建软链接file:path: "{{ db_server.basedir }}mysql"src: "{{ db_server.basedir }}mysql-8.0.28-linux-glibc2.12-x86_64/"state: link- name: 5.创建mysql用户user:name: mysqlshell: /sbin/nologincreate_home: nostate: present- name: 6.创建my.cnf配置文件template:src: my.cnf.j2dest: /etc/my.cnfowner: mysqlgroup: mysqlbackup: yesnotify:restart_mysqld- name: 7.修为数据库目录所有者file:path: "{{ item }}"owner: mysqlgroup: mysqlloop:- "{{ db_server.basedir }}mysql/"- "{{ db_server.datadir }}"- name: 8.配置环境变量lineinfile:path: /etc/profileline: 'export PATH=/app/tools/mysql/bin:$PATH'insertafter: EOF- name: 9.检查是否已经初始化过数据库stat:path: /tmp/init_dbregister: init_stat- name: 10.初始化数据库script: ./db_server/files/init_mysql.shwhen: not init_stat.stat.exists- name: 11.启动数据库systemd:name: mysqldenabled: yesstate: started- name: 12.安装pipyum:name:- python3-pipstate: present- name: 13.安装pymysql模块pip:name: pymysqlstate: present- name: 14.创建数据库,字符集为 utf8mb4mysql_db:name: "{{ db_server.db_name }}"encoding: utf8mb4collation: utf8mb4_unicode_cistate: presentlogin_user: rootlogin_password: ""when: not init_stat.stat.exists- name: 15.创建用户mysql_user:name: "{{ db_server.user_name }}"host: "{{ db_server.user_host }}"password: "{{ db_server.user_password }}"state: presentwhen: not init_stat.stat.exists- name: 16.授予用户权限mysql_user:name: "{{ db_server.user_name }}"host: "{{ db_server.user_host }}"priv: "{{ db_server.db_name }}.*:ALL"state: presentwhen: not init_stat.stat.exists- name: 17.上传 SQL 文件到目标主机copy:src: xzs-mysql.sqldest: /tmp/xzs-mysql.sqlwhen: not init_stat.stat.exists- name: 18.导入数据库shell: "{{ db_server.basedir }}mysql/bin/mysql -uroot exam </tmp/xzs-mysql.sql"when: not init_stat.stat.exists- name: 19.设置root密码mysql_user:name: rootpassword: "{{ db_server.root_password }}"host: localhostlogin_user: rootlogin_password: ""when: not init_stat.stat.exists- name: 20.创建标记文件表示已初始化file:path: /tmp/init_dbstate: touchmode: '0644'when: not init_stat.stat.exists
  • 4️⃣在files目录下准备部署文件
#!/bin/bash
##############################################################
# File Name:db_server/files/init_mysql.sh
# Version:V1.0
# Author:zbl
# Organization:zhubaolin.blog.csdn.net
# Desc:
##############################################################
source /etc/profile
#1.初始化数据库
mysqld --initialize-insecure --user=mysql --basedir=/app/tools/mysql/ --datadir=/app/data/3306/#2.拷贝启动管理文件到init.d
if [ -f /app/tools/mysql/support-files/mysql.server ];thencp /app/tools/mysql/support-files/mysql.server  /etc/init.d/mysqld
elseecho "file not found"exit 1
fi
#3.修改管理文件权限
chmod +x /etc/init.d/mysqld#4.修改管理文件内容
sed -i  '/^basedir=/s#basedir=#basedir=/app/tools/mysql/#g'  /etc/init.d/mysqld
sed -i  '/^datadir=/s#datadir=#datadir=/app/data/3306/#g'  /etc/init.d/mysqld#5.加载自启动服务文件
systemctl daemon-reload
  • 5️⃣在templates目录下创建j2模板文件
[mysqld]
user=mysql 
basedir={{ db_server.basedir }}mysql/
datadir={{ db_server.datadir }}
port={{ db_server.port }}
socket=/tmp/mysql.sock [client]
socket=/tmp/mysql.sock
  • 6️⃣在handlers目录下编写handlers
- name: restart_mysqldsystemd:name: mysqldstate: restarted
  • 7️⃣在roles目录下编写主playbook
- hosts: dbroles:- db_server
  • 8️⃣运行主playbook
ansible-playbook top.yml

  • 9️⃣检查验证
ansible db -m shell -a 'ps -ef | grep mysql'

3. 🚀启动jar项目(web03/web04)

  • 1️⃣创建roles目录结构
mkdir -p backend_web/{files,templates,tasks,handlers}

  • 2️⃣在group_vars/all/main.yml中定义变量列表
backend_web:ip:- "10.0.0.9"- "10.0.0.10"port: 8000site_dir: /app/code/exam/backend/host: exam
  • 3️⃣在tasks目录下编写tasks任务
- name: 1.安装jdkyum:name:- java-11-openjdk- java-11-openjdk-develstate: present- name: 2.拷贝项目文件到后端web服务器上copy:src: xzs-3.9.0.jardest: "{{ backend_web.site_dir }}"backup: yes- name: 3.拷贝配置文件到后端web服务器上template:src: application-prod.yml.j2dest: "{{ backend_web.site_dir }}application-prod.yml"backup: yes- name: 4.拷贝自启动脚本到后端web服务器上template:src: "{{ backend_web.host }}.sh.j2"dest: /server/scripts/{{ backend_web.host }}.shbackup: yes- name: 5.拷贝service服务管理文件到web服务器上template:src: "{{ backend_web.host }}.service.j2"dest: /usr/lib/systemd/system/{{ backend_web.host }}.servicebackup: yes- name: 6.重新加载systemd配置systemd:daemon_reload: yes- name: 7.启动服务,并设置下次开机启动systemd:name: "{{ backend_web.host }}"enabled: yesstate: started
  • 4️⃣在files目录下准备部署文件
xzs-3.9.0.jar
  • 5️⃣在templates目录下创建j2模板文件
  • exam.sh.j2
#!/bin/bash
##############################################################
# File Name:exam.sh
# Version:V1.0
# Author:zbl
# Organization:zhubaolin.blog.csdn.net
# Desc:
###############################################################1.vars
service=xzs-3.9.0.jar
dir={{ backend_web.site_dir }}
choose=$1
time=`date +%F_%T`
jar_file=${dir}${service}#2.function
function srv_start() {pid=`ps -ef | grep -w xzs-3.9.0 | grep -v grep | awk '{print $2}'`pidcount=`ps -ef | grep -w xzs-3.9.0 | grep -v grep | awk '{print $2}' | wc -l`if [ -f ${jar_file} ];thenif [ -z ${pid} ];thencd ${dir}nohup java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod xzs-3.9.0.jar >/dev/null 2>&1 &fielseexitfireturn $?
}function srv_stop() {pid=`ps -ef | grep -w xzs-3.9.0 | grep -v grep | awk '{print $2}'`pidcount=`ps -ef | grep -w xzs-3.9.0 | grep -v grep | awk '{print $2}' | wc -l`if [ ${pidcount} -gt 0 ];thenkill ${pid}fireturn $?
}function srv_restart() {srv_stopsleep 1srv_start
}function srv_status() {pid=`ps -ef | grep -w xzs-3.9.0 | grep -v grep | awk '{print $2}'`pidcount=`ps -ef | grep -w xzs-3.9.0 | grep -v grep | awk '{print $2}' | wc -l`if [ ${pidcount} -ge 1 ];thenecho -e "\E[1;32mrunning pid:[${pid}] ${service}\E[0m"elseecho -e "\E[1;31mstoped ${service}\E[0m"fireturn $?
}#3.case
case "${choose}" instart) srv_start ;;stop) srv_stop ;;restart) srv_restart ;;status) srv_status ;;*) echo input error
esac
  • application-prod.yml.j2
#server后端服务的配置
server:port: {{ backend_web.port }}undertow:io-threads: 16worker-threads: 4000buffer-size: 1024direct-buffers: truecompression:enabled: truemin-response-size: 1
#日志
logging:path: {{ backend_web.site_dir }}#数据库,redis等等配置
spring:datasource:#mysql://数据库地址:端口号/库名字?url: jdbc:mysql://{{ db_server.ip }}:{{ db_server.port }}/{{ db_server.db_name }}?useSSL=false&useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true&allowMultiQueries=trueusername: {{ db_server.user_name }}password: {{ db_server.user_password }}driver-class-name: com.mysql.cj.jdbc.Driver
  • exam.service.j2
[Unit]
Description={{ backend_web.host }}
After=network.target 
[Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=bash /server/scripts/{{ backend_web.host }}.sh start
ExecStop=bash /server/scripts/{{ backend_web.host }}.sh stop
[Install]
WantedBy=multi-user.target
  • 6️⃣在handlers目录下编写handlers
  • 7️⃣在roles目录下编写主playbook
- hosts: backend_webroles:- backend_web
  • 8️⃣运行主playbook
ansible-playbook top.yml

  • 9️⃣检查验证
ansible backend_web -m shell -a 'ps -ef | grep java'

4. 🍀接入4层负载均衡(lb01/lb02)

  • 1️⃣创建roles目录结构
mkdir -p backend_lb/{files,templates,tasks,handlers}

  • 2️⃣在group_vars/all/main.yml中定义变量列表
backend_lb:ip:- "10.0.0.5"- "10.0.0.6"port: 8000
  • 3️⃣在tasks目录下编写tasks任务
- name: 1.分发nginx源copy:src: nginx.repodest: /etc/yum.repos.d/backup: yes- name: 2.安装nginx软件yum:name: nginxstate: present- name: 3.分发nginx配置文件template:src: nginx.conf.j2dest: /etc/nginx/nginx.confbackup: yesnotify:reload_nginx- name: 4.启动nginx并设置下次开机启动systemd:name: nginxenabled: yesstate: started
  • 4️⃣在files目录下准备部署文件
vim backend_lb/files/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
  • 5️⃣在templates目录下创建j2模板文件
  • backend_lb/templates/nginx.conf.j2

user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}stream {upstream exam_pools {
{% for i in backend_web.ip %}server {{ i }}:{{ backend_web.port }};
{% endfor %}hash $remote_addr consistent;}log_format basic '$remote_addr [$time_local] ''$protocol $status $bytes_sent $bytes_received ''$session_time';access_log /var/log/nginx-l4.log basic;server {listen {{ backend_lb.port }};proxy_pass exam_pools;}
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;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  /var/log/nginx/access.log  main;sendfile        on;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;include /etc/nginx/conf.d/*.conf;
}
  • 6️⃣在handlers目录下编写handlers
- name: reload_nginxsystemd:name: nginxstate: reloaded
  • 7️⃣在roles目录下编写主playbook
- hosts: lbroles:- backend_lb
  • 8️⃣运行主playbook
ansible-playbook top.yml

  • 9️⃣检查验证
ansible lb -m shell -a 'ss -lntup | grep 8000'

5. 🌏部署前端web(web01/web02)

  • 1️⃣创建roles目录结构
mkdir -p front_web/{files,templates,tasks,handlers}

  • 2️⃣在group_vars/all/main.yml中定义变量列表
front_web:ip:- "10.0.0.7"- "10.0.0.8"port: 80site_dir: /app/code/exam/front/front_host: studentbackend_host: admin
  • 3️⃣在tasks目录下编写tasks任务
- name: 1.分发nginx源copy:src: nginx.repodest: /etc/yum.repos.d/nginx.repobackup: yes- name: 2.安装nginx软件yum:name: nginxstate: present- name: 3.分发nginx配置文件template:src: exam.conf.j2dest: /etc/nginx/conf.d/exam.confbackup: yesnotify:reload_nginx- name: 4.创建站点目录file:path: "{{ front_web.site_dir }}"state: directory- name: 5.分发前端代码到前端web服务器上copy:src: exam-web.tar.gzdest: /tmp/backup: yes- name: 6.解压代码到站点目录下unarchive:src: /tmp/exam-web.tar.gzdest: "{{ front_web.site_dir }}"remote_src: yes- name: 7.启动nginx并设置开机自启动systemd:name: nginxenabled: yesstate: started
  • 4️⃣在files目录下准备部署文件
vim front_web/files/nginx.repo 
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
  • 5️⃣在templates目录下创建j2模板文件
  • front_web/templates/exam.conf.j2
server {listen {{ front_web.port }};server_name {{ front_web.front_host }}.zhubl.xyz;root  {{ front_web.site_dir }}{{ front_web.front_host }}/;location / {index index.html;}location /api/ {proxy_pass  http://{{ backend_lb.vip }}:{{ backend_lb.port }};}
}server {listen 80;server_name {{ front_web.backend_host }}.zhubl.xyz;root  {{ front_web.site_dir }}{{ front_web.backend_host }}/;location / {index index.html;}location /api/ {proxy_pass  http://{{ backend_lb.vip }}:{{ backend_lb.port }};}
}
  • 6️⃣在handlers目录下编写handlers
- name: reload_nginxsystemd:name: nginxstate: reloaded
  • 7️⃣在roles目录下编写主playbook
- hosts: front_webroles:- front_web
  • 8️⃣运行主playbook
ansible-playbook top.yml

  • 9️⃣检查验证
ansible front_web -m shell -a 'ss -lntup | grep 80'

6. 🍀接入7层负载(lb01/lb02)

  • 1️⃣创建roles目录结构
mkdir -p front_lb/{files,templates,tasks,handlers}

  • 2️⃣在group_vars/all/main.yml中定义变量列表
front_lb:ip:- "10.0.0.5"- "10.0.0.6"port: 80vip: "10.0.0.3"
  • 3️⃣在tasks目录下编写tasks任务
- name: 1.分发nginx源copy:src: nginx.repodest: /etc/yum.repos.d/backup: yes- name: 2.安装nginx软件yum:name: nginxstate: present- name: 3.分发nginx配置文件template:src: exam.conf.j2dest: /etc/nginx/conf.d/exam.confbackup: yesnotify:reload_nginx- name: 4.启动nginx并设置下次开机自启动systemd:name: nginxenabled: yesstate: started
  • 4️⃣在files目录下准备部署文件
vim front_lb/files/nginx.repo 
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
  • 5️⃣在templates目录下创建j2模板文件
  • front_lb/templates/exam.conf.j2
upstream l7_pools {
{% for i in front_web.ip %}server {{ i }}:{{ front_web.port }};
{% endfor %}hash $remote_addr consistent;
}
server {listen {{ front_lb.port }};server_name {{ front_web.front_host }}.zhubl.xyz;location / {proxy_pass http://l7_pools;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-Ip $remote_addr;}
}
server {listen {{ front_lb.port }};server_name {{ front_web.backend_host }}.zhubl.xyz;location / {proxy_pass http://l7_pools;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-Ip $remote_addr;}
}
  • 6️⃣在handlers目录下编写handlers
- name: reload_nginxsystemd:name: nginxstate: reloaded
  • 7️⃣在roles目录下编写主playbook
- hosts: lbroles:- front_lb
  • 8️⃣运行主playbook
ansible-playbook top.yml

  • 9️⃣检查验证
ansible lb -m shell -a 'ss -lntup | grep 80'

7. 🚀接入高可用(lb01/lb02)

  • 1️⃣创建roles目录结构
mkdir -p front_keepalived/{files,templates,tasks,handlers}
  • 2️⃣在group_vars/all/main.yml中定义变量列表
  • 3️⃣在tasks目录下编写tasks任务
- name: 1.安装keepalived软件yum:name: keepalivedstate: present- name: 2.获取主机名shell: hostnameregister: hostname- name: 3.分发lb01配置文件template:src: lb01.keepalived.conf.j2dest: /etc/keepalived/keepalived.confbackup: yeswhen: hostname.stdout is match("lb01")notify:restart_keepalived- name: 4.分发lb02配置文件template:src: lb02.keepalived.conf.j2dest: /etc/keepalived/keepalived.confbackup: yeswhen: hostname.stdout is match("lb02")notify:restart_keepalived- name: 5.分发监控nginx进程脚本到负载均衡copy:src: check_lb.shdest: /server/scripts/check_lb.shmode: '0755'backup: yes- name: 6.启动keepalived并设置下次开机自启动systemd:name: keepalivedenabled: yesstate: started
  • 4️⃣在files目录下准备部署文件
#!/bin/bash
##############################################################
# File Name:/server/scripts/check_lb.sh
# Version:V1.0
# Author:zbl
# Organization:zhubaolin.blog.csdn.net
# Desc:
##############################################################
#1.vars
count=`ps -ef | grep nginx | wc -l`#2.stop keepalived
if [ ${count} -eq 1 ];thensystemctl stop keepalived
fi
  • 5️⃣在templates目录下创建j2模板文件
  • front_keepalived/templates/lb01.keepalived.conf.j2
global_defs {router_id lb01
}
vrrp_script check_lb.sh {   script /server/scripts/check_lb.shinterval 2weight  1user root 
}vrrp_instance vip_3 {    state MASTER    interface ens33virtual_router_id 51 priority 100    advert_int 1        authentication {   auth_type PASSauth_pass 1111  
}
virtual_ipaddress { {{ front_lb.vip }} dev ens33 label ens33:1
}
track_script  {check_lb.sh 
}
}vrrp_instance vip_4 {state BACKUPinterface ens33virtual_router_id 52priority 50advert_int 1authentication {auth_type PASSauth_pass 1111
}
virtual_ipaddress {{{ backend_lb.vip }} dev ens33 label ens33:2
}
}
  • front_keepalived/templates/lb02.keepalived.conf.j2
global_defs {router_id lb02
}
vrrp_script check_lb.sh {script /server/scripts/check_lb.shinterval 2weight  1user root 
}vrrp_instance vip_3 {state BACKUPinterface ens33virtual_router_id 51priority 50advert_int 1authentication {auth_type PASSauth_pass 1111
}
virtual_ipaddress {{{ front_lb.vip }} dev ens33 label ens33:1
}
}vrrp_instance vip_4 {state MASTERinterface ens33virtual_router_id 52priority 100advert_int 1authentication {auth_type PASSauth_pass 1111
}
virtual_ipaddress {{{ backend_lb.vip }} dev ens33 label ens33:2
}
track_script  {check_lb.sh
}
}
  • 6️⃣在handlers目录下编写handlers
- name: restart_keepalivedsystemd:name: keepalivedstate: restarted
  • 7️⃣在roles目录下编写主playbook
- hosts: lbroles:- keepalived
  • 8️⃣运行主playbook
ansible-playbook top.yml
  • 9️⃣检查验证

8. 🌏浏览器访问

9. ✅总结

9.1. 🌟总变量

db_server:ip: "172.16.1.52"basedir: /app/tools/datadir: /app/data/3306/port: 3306root_password: Lidao996user_name: examuser_password: examuser_host: "172.16.1.%"db_name: examfront_web:ip:- "10.0.0.7"- "10.0.0.8"port: 80site_dir: /app/code/exam/front/front_host: studentbackend_host: adminbackend_web:ip:- "10.0.0.9"- "10.0.0.10"port: 8000site_dir: /app/code/exam/backend/host: exambackend_lb:ip:- "10.0.0.5"- "10.0.0.6"port: 8000vip: "10.0.0.4"front_lb:ip:- "10.0.0.5"- "10.0.0.6"port: 80vip: "10.0.0.3"

9.2. 🌟总roles

[root@m02 /server/ansible/roles]# tree -F 
.
├── ansible.cfg
├── backend_lb/
│   ├── files/
│   │   └── nginx.repo
│   ├── handlers/
│   │   └── main.yml
│   ├── tasks/
│   │   └── main.yml
│   └── templates/
│       └── nginx.conf.j2
├── backend_web/
│   ├── files/
│   │   └── xzs-3.9.0.jar
│   ├── handlers/
│   ├── tasks/
│   │   └── main.yml
│   └── templates/
│       ├── application-prod.yml.j2
│       ├── exam.service.j2
│       └── exam.sh.j2
├── db_server/
│   ├── files/
│   │   ├── init_mysql.sh*
│   │   ├── mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz
│   │   └── xzs-mysql.sql
│   ├── handlers/
│   │   └── main.yml
│   ├── tasks/
│   │   └── main.yml
│   └── templates/
│       └── my.cnf.j2
├── front_lb/
│   ├── files/
│   │   └── nginx.repo
│   ├── handlers/
│   │   └── main.yml
│   ├── tasks/
│   │   └── main.yml
│   └── templates/
│       └── exam.conf.j2
├── front_web/
│   ├── files/
│   │   ├── exam-web.tar.gz
│   │   └── nginx.repo
│   ├── handlers/
│   │   └── main.yml
│   ├── tasks/
│   │   └── main.yml
│   └── templates/
│       └── exam.conf.j2
├── group_vars/
│   └── all/
│       └── main.yml
├── hosts
├── keepalived/
│   ├── files/
│   │   └── check_lb.sh
│   ├── handlers/
│   │   └── main.yml
│   ├── tasks/
│   │   └── main.yml
│   └── templates/
│       ├── lb01.keepalived.conf.j2
│       └── lb02.keepalived.conf.j2
└── top.yml32 directories, 33 files

9.3. 🌟总剧本

- hosts: dbroles:- db_server- hosts: backend_webroles:- backend_web- hosts: lbroles:- backend_lb- hosts: front_webroles:- front_web- hosts: lbroles:- front_lb- keepalived

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914323.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914323.shtml
英文地址,请注明出处:http://en.pswp.cn/news/914323.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI论文】GLM-4.1V-Thinking:迈向具备可扩展强化学习的通用多模态推理

摘要&#xff1a;我们推出GLM-4.1V-Thinking&#xff0c;这是一款旨在推动通用多模态推理发展的视觉语言模型&#xff08;VLM&#xff09;。在本报告中&#xff0c;我们分享了在以推理为核心的训练框架开发过程中的关键发现。我们首先通过大规模预训练开发了一个具备显著潜力的…

Linux进程通信——匿名管道

目录 1、进程间通信基础概念 2、管道的工作原理 2.1 什么是管道文件 3、匿名管道的创建与使用 3.1、pipe 系统调用 3.2 父进程调用 fork() 创建子进程 3.3. 父子进程的文件描述符共享 3.4. 关闭不必要的文件描述符 3.5 父子进程通过管道进行通信 父子进程通信的具体例…

sql:sql在office中的应用有哪些?

在Office软件套件中&#xff0c;主要是Access和Excel会用到SQL&#xff08;结构化查询语言&#xff09;&#xff0c;以下是它们在这两款软件中的具体应用&#xff1a; 在Access中的应用 创建和管理数据库对象&#xff1a; 创建表&#xff1a;使用CREATE TABLE语句可以创建新的数…

零基础完全理解视觉语言模型(VLM):从理论到代码实践

本文是《从LLM到VLM&#xff1a;视觉语言模型的核心技术与Python实现》的姊妹篇&#xff0c;主要面向零基础的读者&#xff0c;希望用更通俗易懂的语言带领大家入门VLM。本教程的完整代码可以在GitHub上找到&#xff0c;如果你有任何问题或建议&#xff0c;欢迎交流讨论。 写在…

数据结构 Map和Set

文章目录&#x1f4d5;1. 二叉搜索树✏️1.1 查找操作✏️1.2 插入操作✏️1.3 删除操作&#x1f4d5;2. Map的使用✏️2.1 Map的常用方法✏️2.2 TreeMap和HashMap的区别✏️2.3 HashMap的底层实现&#x1f4d5;3. Set的使用✏️3.1 Set的常用方法✏️3.2 TreeSet和HashSet的区…

树莓派5-系统 Debian 12 开启VNC远程访问踩坑记录

简单记录一下踩坑&#xff0c;安装vnc远程访问服务并设置开机自启1.查看系统版本&#xff0c;我这里的系统版本是 12cat /etc/os-release2.安装VNC服务sudo apt install realvnc-vnc-server realvnc-vnc-viewer -y3.创建服务单元文件&#xff1a;sudo nano /etc/systemd/system…

TASK2 夏令营:用AI做带货视频评论分析

TASK2 夏令营&#xff1a;用AI做带货视频评论分析**电商评论洞察赛题&#xff1a;从Baseline到LLM进阶优化学习笔记**一、 赛题核心解读1.1. 任务链条与目标1.2. 关键挑战与评分机制二、 Baseline方案回顾与瓶颈分析2.1. Baseline技术栈2.2. 核心瓶颈三、 进阶优化策略&#xf…

Docker:安装命令笔记

目录 零、安装&#xff1a;略 一、镜像 1.0、获取镜像&#xff1a; 1.1、查看镜像&#xff1a; 1.2、删除镜像&#xff1a; 二、容器 2.0、创建并启动容器 2.1、tomcat和jdk9的“创建并启动容器”的命令 2.2、容器操作 2.3、容器日志操作 零、安装&#xff1a;略 略 …

Python七彩花朵

系列文章 序号直达链接Tkinter1Python李峋同款可写字版跳动的爱心2Python跳动的双爱心3Python蓝色跳动的爱心4Python动漫烟花5Python粒子烟花Turtle1Python满屏飘字2Python蓝色流星雨3Python金色流星雨4Python漂浮爱心5Python爱心光波①6Python爱心光波②7Python满天繁星8Pytho…

【保姆级图文详解】MCP架构(客户端-服务端)、三种方式使用MCP服务、Spring AI MCP客户端和服务端开发、MCP部署方案、MCP安全性

文章目录前言一、MCP(model context protocol)1.1、概念描述1.2、MCP作用与意义1.3、MCP架构二、使用MCP(model context protocol)2.1、云平台使用MCP2.2、软件客户端使用MCP2.3、Spring AI程序中使用MCP三、Spring AI MCP(model context protocol)开发过程3.1、MCP服务端开发3…

Linux的 iproute2 配置:以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)、网桥(Bridge)笔记250713

Linux的 iproute2 配置:以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)、网桥(Bridge&#xff09;笔记250713 在 Linux 中使用 iproute2 工具集配置网络是现代且推荐的方法&#xff0c;它取代了旧的 ifconfig、route、brctl、vconfig 等命令。iproute2 提供了统一的接口 ip …

当信任上链解码区块链溯源系统开发逻辑与产业变革

当信任上链&#xff1a;解码区块链溯源系统的开发逻辑与产业变革在上海某高端超市的进口水果区&#xff0c;消费者王女士拿起一盒车厘子&#xff0c;用手机扫描包装上的二维码&#xff0c;屏幕立刻弹出一串动态信息&#xff1a;智利瓦尔帕莱索港口的装船时间、海关清关的具体日…

可视化DIY小程序工具!开源拖拽式源码系统,自由搭建,完整的源代码包分享

温馨提示&#xff1a;文末有资源获取方式传统的小程序开发对技术要求较高&#xff0c;这使得许多非技术人员望而却步。可视化DIY小程序工具应运而生&#xff0c;它通过拖拽式操作和开源代码系统&#xff0c;极大地降低了开发门槛&#xff0c;让更多人能够快速构建个性化小程序。…

【MLLM】多模态理解GLM-4.1V-Thinking模型

note GLM-4.1V-Thinking模型引入 课程采样强化学习&#xff08;RLCS, Reinforcement Learning with Curriculum Sampling&#xff09; 策略&#xff0c;在多个复杂推理任务中实现能力突破&#xff0c;整体性能达到 10B 级别视觉语言模型的领先水平。GLM-4.1V-9B-Thinking 通过…

【C++详解】STL-priority_queue使用与模拟实现,仿函数详解

文章目录一、priority_queue使用仿函数控制优先级sort算法里的仿函数二、手撕优先级队列优先级队列的容器适配器入堆出堆top/size/empty迭代器区间构造初始化(解耦)三、仿函数仿函数控制冒泡排序仿函数控制priority_queue比较逻辑仿函数使用场景仿函数的其他使用场景源码一、pr…

在mac m1基于ollama运行deepseek r1

1 下载和安装 在ollama的官网下载mac m1版本的ollama https://ollama.com/ 最终获得如下所示的下载地址 https://github.com/ollama/ollama/releases/latest/download/Ollama.dmg 然后点击安装&#xff0c;然后测试 ollama list 2 运行deepseek r1 deepseek-r1:8b 比较适…

TCP与UDP协议详解:网络世界的可靠信使与高速快递

> 互联网的骨架由传输层协议支撑,而TCP与UDP如同血管中的红细胞与血小板,各司其职却又缺一不可 ### 一、初识传输层双雄:网络通信的基石 想象你要给朋友寄送重要文件: - **TCP** 如同顺丰快递:**签收确认+物流追踪**,确保文件完整送达 - **UDP** 如同普通信件:**直接…

Datawhale AI 夏令营【更新中】

Datawhale AI 夏令营【更新中】夏令营简介大模型技术&#xff08;文本&#xff09;方向&#xff1a;用AI做带货视频评论分析机器学习&#xff08;数据挖掘&#xff09;方向&#xff1a;用AI预测新增用户夏令营简介 本次AI夏令营是Datawhale在暑期发起的大规模AI学习活动&#…

AutoDL挂载阿里云OSS

文章目录前言AutoDL 设置阿里OSS设置OSS配置相关key 相关竞猜时间前言 最近&#xff0c;AutoDL提示北京A区网盘功能要下架&#xff0c;然后需要对网盘中数据进行转移等操作&#xff0c;我想网盘中数据下载到本地&#xff0c;大概16G&#xff1b;直接在网盘那里下载&#xff0c…

java 基本数据类型所对应的包装类

一,对应列举Java 中有 8 种基本数据类型&#xff0c;每种基本数据类型都有对应的包装类&#xff0c;它们分别是&#xff1a;二,包装类的作用1. 满足面向对象编程需求Java 是面向对象的编程语言&#xff0c;基本数据类型不是对象&#xff0c;无法使用面向对象的特性&#xff08;…