自动化运维:Ansible之playbook基于ROLES部署LNMP平台

目录

一、理论

1.playbook剧本

2.ROLES角色

3.关系

4.Roles模块搭建LNMP架构

二、实验

1.Roles模块搭建LNMP架构

三、问题

1.剧本启动php报错语法问题

2.剧本启动mysql报错语法问题

3.剧本启动nginx开启失败

4.剧本安装php失败

5.使用yum时报错

6.rpm -Uvh https://xxxx.rpm 提示连接失败问题

7.依赖检测失败

8.剧本修改php失败

9.剧本启动php失败

10.剧本修改mysql脚本文件失败


一、理论

1.playbook剧本

(1)架构

vim  XXX.yaml
- name:                      #指定play名称hosts:                     #指定主机组remote_user:               #执行用户 gather_facts: true|false   #是否收集远程主机facts信息vars:                      #定义变量tasks:                     #定义task任务列表- name:                 #定义task任务名称模块:                 #定义任务使用的模块和参数with_items:           #定义循环列表when:                 #定义判断条件(== != >= > <= <),true则执行任务,否则不执行任务ignore_errors: true   #忽略任务失败notify:               #定义task任务changed状态时触发的任务名tags:                 #指定标签,ansible-playbook --tags 仅执行拥有指定 tags 标签的任务(always标签总会执行)handlers:                  #定义notify触发的任务列表

(2)核心元素

 (3)参数

2.ROLES角色

(1)重构思路

用roles和不用roles的逻辑其实是一样的,要根据服务器的功能,先收集服务器所需要的文件,再进行安装,传输文件,启动服务或重启服务等操作。只是我们这次不必担心命名问题,因为不同的服务或不同功能的服务器所需要的配置文件会被放到不同的目录,不会冲突。

roles这个角色,可以根据同类服务器的功能定义,也可以通过服务去定义,因为我们是一键部署所有服务和项目,也不存在指定部署服务的需求,如果通过服务来定义,也容易出现需要很多when判断的情况,如果用同类功能的服务器定义角色,可能会出现同一条命令需要反复编写的情况,自行选择,我采取根据同类功能服务器去定义我们的roles角色。

(2)目录结构

(3)目录说明

3.关系

playbook是是由一系列的play组成, 每个play由一个或者多个task组成, 一个task一般是一个ansible module, 三者的关系示意图如下:

4.Roles模块搭建LNMP架构


(1)规划

通过ansible的roles角色去配置lnmp环境,nginx、php、mysql都使用源码编译安装

(2)架构

 (3)部署Nginx角色

创建nginx角色所需要的工作目录:

mkdir -p /etc/ansible/playbook/roles/nginx
mkdir -p /etc/ansible/playbook/roles/nginx/defaults
mkdir -p /etc/ansible/playbook/roles/nginx/files
mkdir -p /etc/ansible/playbook/roles/nginx/handlers
mkdir -p /etc/ansible/playbook/roles/nginx/meta
mkdir -p /etc/ansible/playbook/roles/nginx/tasks
mkdir -p /etc/ansible/playbook/roles/nginx/templates
mkdir -p /etc/ansible/playbook/roles/nginx/vars

制作/etc/ansible/playbook/roles/nginx/files/index.php网页目录:

vim /etc/ansible/playbook/roles/nginx/files/index.php<?php
phpinfo();
?>

制作/etc/ansible/playbook/roles/nginx/files/nginx.repo源:

vim /etc/ansible/playbook/roles/nginx/files/nginx.repo
# nginx.repo[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

制作/etc/ansible/playbook/roles/nginx/handlers/main.yml文件,加载nginx的配置模板文件:

vim /etc/ansible/playbook/roles/nginx/handlers/main.yml
- name: reload nginxservice: name={{service}}  state=reloaded

制作/etc/ansible/playbook/roles/nginx/tasks/init.yml文件:

vim /etc/ansible/playbook/roles/nginx/tasks/init.yml
- name: disable firewalldservice: name=firewalld  state=stopped  enabled=noignore_errors: True- name: disable selinuxshell: "/usr/sbin/setenforce 0"ignore_errors: true

制作/etc/ansible/playbook/roles/nginx/tasks/main.yml文件:

- include: "init.yml"- name: copy nginx yum repo filecopy: src=nginx.repo  dest=/etc/yum.repos.d/- name: install nginxyum: name={{pkg}}  state=latest- name: copy index.phpcopy: src=index.php  dest={{root_dir}}- name: copy nginx template configuration filetemplate: src=default.conf.j2  dest=/etc/nginx/conf.d/default.confnotify: reload nginx- name: start nginxservice: name={{service}} state=started enabled=yes

制作/etc/ansible/playbook/roles/nginx/templates/default.conf.j2模板文:

vim /etc/ansible/playbook/roles/nginx/templates/default.conf.j2 ---修改2到8行-----------listen       {{http_port}};server_name  {{http_hostname}};#access_log  /var/log/nginx/host.access.log  main;location / {root   {{root_dir}};---修改29到36行-----------location ~ \.php$ {root           {{root_dir}};fastcgi_pass   {{http_remote}};fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  {{root_dir}}$fastcgi_script_name;include        fastcgi_params;}

制作/etc/ansible/playbook/roles/nginx/vars/main.yml文件:

http_port: 192.168.204.69:80
http_hostname: www.david.com
root_dir: /usr/share/nginx/html
http_remote: 192.168.204.100:9000
pkg: nginx
service: nginx

(4) 部署PHP角色

创建php角色所需要的工作目录:

mkdir -p /etc/ansible/playbook/roles/php
mkdir -p /etc/ansible/playbook/roles/php/defaults
mkdir -p /etc/ansible/playbook/roles/php/files
mkdir -p /etc/ansible/playbook/roles/php/handlers
mkdir -p /etc/ansible/playbook/roles/php/meta
mkdir -p /etc/ansible/playbook/roles/php/tasks
mkdir -p /etc/ansible/playbook/roles/php/templates
mkdir -p /etc/ansible/playbook/roles/php/vars

制作/etc/ansible/playbook/roles/php/files/index.php的网页文件:

vim /etc/ansible/playbook/roles/php/files/index.php <?php
phpinfo();
?>

制作/etc/ansible/playbook/roles/php/handlers/main.yml文件:

vim /etc/ansible/playbook/roles/php/handlers/main.yml - name: reload phpservice: name={{service}} state=reloaded

制作/etc/ansible/playbook/roles/php/tasks/main.yml文件:

/etc/ansible/playbook/roles/php/tasks]# vim main.yml - name: install yum reposhell: "rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm && rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm"ignore_errors: True- name: install phpcommand: 'yum install -y php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-pdo php72w-xml p    hp72w-fpm php72w-mysqlnd php72w-opcache --skip-broken'- name: create php useruser: name={{user_name}}- name: crate web root dirfile: name={{root_dir}} state=directory- name: copy index.phpcopy: src=index.php dest={{root_dir}}- name: modify php configuration filereplace: path=/etc/php.ini  regexp=";date.timezone ="  replace="date.timezone = Asia/Shanghai"notify: reload php- name: modify username and groupname in www.confreplace: path=/etc/php-fpm.d/www.conf  regexp="apache"  replace="{{user_name}}"notify: reload php- name: modify listen addr in www.confreplace: path=/etc/php-fpm.d/www.conf  regexp="127.0.0.1:9000"  replace="{{http_port}}"notify: reload php- name: modify allowed client in www.confreplace: path=/etc/php-fpm.d/www.conf  regexp="127.0.0.1"  replace="{{remote_addr}}"notify: reload php- name: start phpservice: name={{service}} state=started enabled=yes

制作/etc/ansible/playbook/roles/php/vars/main.yml文件:

vim /etc/ansible/playbook/roles/php/vars/main.yml timezone: Asia/Shanghai
user_name: php
http_port: 192.168.204.100:9000
remote_addr: 192.168.204.69
root_dir: /usr/share/nginx/html
service: php-fpm

(5) 部署MySQL角色

创建mysql角色所需要的工作目录:

mkdir -p /etc/ansible/playbook/roles/mysql
mkdir -p /etc/ansible/playbook/roles/mysql/defaults
mkdir -p /etc/ansible/playbook/roles/mysql/files
mkdir -p /etc/ansible/playbook/roles/mysql/handlers
mkdir -p /etc/ansible/playbook/roles/mysql/meta
mkdir -p /etc/ansible/playbook/roles/mysql/tasks
mkdir -p /etc/ansible/playbook/roles/mysql/templates
mkdir -p /etc/ansible/playbook/roles/mysql/vars

制作/etc/ansible/playbook/roles/mysql/handlers/main.yml文件:

vim /etc/ansible/playbook/roles/mysql/handlers/main.yml - name: reload mysqlservice: name={{service}} state=reloaded

制作/etc/ansible/playbook/roles/mysql/tasks/main.yml文件:

vim /etc/ansible/playbook/roles/mysql/tasks/main.yml - name: remove mariadbshell: yum remove mariadb* -yignore_errors: True- name: install yum reposhell: "wget https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm --force --nodeps && rpm -ivh mysql57-commu    nity-release-el7-11.noarch.rpm --force --nodeps"ignore_errors: True- name: modify gpgcheckreplace: path=/etc/yum.repos.d/mysql-community.repo  regexp="gpgcheck=1"  replace="gpgcheck=0"- name: install mysqlyum: name=mysql-server state=latest- name: start mysqlservice: name={{service}} state=started enabled=yes- name: make passwd.shscript: /etc/ansible/playbook/roles/mysql/files/passwd.sh

制作/etc/ansible/playbook/roles/mysql/vars/main.yml文件:

vim /etc/ansible/playbook/roles/mysql/vars/main.yml service: mysqld.service

(5)启动安装分布式LNMP

vim /etc/ansible/playbook/lnmp.yml - name: nginx playhosts: webserversremote_user: rootroles:- nginx- name: php playhosts: phpserversremote_user: rootroles:- php- name: mysql playhosts: mysqlserversremote_user: rootroles:- mysql

二、实验


1.Roles模块搭建LNMP架构

(1)环境

表1 主机

主控端192.168.204.199ansible
受控端-1192.168.204.69nginx
受控端-2192.168.204.186mysql
受控端-3192.168.204.100php

(2) 配置主机

 

 (3)部署Nginx角色

创建nginx角色所需要的工作目录:

 

制作/etc/ansible/playbook/roles/nginx/files/index.php网页目录:

 制作/etc/ansible/playbook/roles/nginx/files/nginx.repo源:

制作/etc/ansible/playbook/roles/nginx/handlers/main.yml文件,加载nginx的配置模板文件:

 制作/etc/ansible/playbook/roles/nginx/tasks/init.yml文件:

制作/etc/ansible/playbook/roles/nginx/tasks/main.yml文件:

制作/etc/ansible/playbook/roles/nginx/templates/default.conf.j2模板文:

 制作/etc/ansible/playbook/roles/nginx/vars/main.yml文件:

(4) 部署PHP角色

创建php角色所需要的工作目录:

 

制作/etc/ansible/playbook/roles/php/files/index.php的网页文件:

 制作/etc/ansible/playbook/roles/php/handlers/main.yml文件:

制作/etc/ansible/playbook/roles/php/tasks/main.yml文件:

 

制作/etc/ansible/playbook/roles/php/vars/main.yml文件:

(5) 部署MySQL角色

创建mysql角色所需要的工作目录:

 ​​​​​​​注意:需要提前创建passwd.sh

 制作/etc/ansible/playbook/roles/mysql/handlers/main.yml文件:

  制作/etc/ansible/playbook/roles/mysql/tasks/main.yml文件:

 制作/etc/ansible/playbook/roles/mysql/vars/main.yml文件:

 (6)启动安装分布式LNMP

 启动:

nginx启动成功

php启动成功:

mysql启动成功:

访问浏览器成功


三、问题

1.剧本启动php报错语法问题

(1)报错

 (2)原因分析

左端代码未对齐

(3)解决方法

修改前

修改后 

2.剧本启动mysql报错语法问题

 (1) 报错

 (2)原因分析

左端代码未对齐

(3)解决方法

修改前

修改后

3.剧本启动nginx开启失败

(1)报错

(2)原因分析

nginx端查询

default.conf.j2 配置错误 

未知的地址池

(3)解决方法

nginx端先移除多余配置文件

ansible端修改配置文件:

修改前:

修改后:

4.剧本安装php失败

(1) 报错

(2)原因分析

[弃用警告]:只在通过squash_actions使用循环时调用“yum”一次是不赞成的。而不是如果使用循环提供多个项目并指定' name: "{{ item }}" ',请使用' name: '{{ ... }}' '并删除循环。这个特性将在2.11版本中删除。弃用的警告可以通过在ansible.cfg中设置deprecation_warnings=False来禁用。
 

(3)解决方法

这里先暂不修改yml文件

修改php端网卡:

关闭防火墙和安全机制

如还是报错,修改/etc/ansible/playbook/roles/php/tasks/main.yml文件,安装方式不采用with_items方式,直接以command模块方式运行

修改前:

修改后:

成功

5.使用yum时报错

(1)报错

遇见failure: repodata/repomd.xml from base: [Errno 256]错误

(2)原因分析

yum源

(3)解决方法

更新依赖包,重新安装发现没用

yum clean all
yum install -y epel-release

更新ca-certficates包

yum clean all
yum --disablerepo=epel -y update  ca-certificates

将https转为http

cp /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.bak
sed -i 's#https://#http://#g' /etc/yum.repos.d/epel.repo

更改resolv.conf文件,然后重启network服务:service network restart

nameserver 8.8.8.8
search localdomain

以上步骤执行完成后如果仍然失败,继续执行以下步骤:

查看yum的依赖包

[root@localhost yum.repos.d]# rpm -qa|grep yum
PackageKit-yum-1.1.10-2.el7.centos.x86_64
yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch
yum-langpacks-0.4.2-7.el7.noarch
yum-metadata-parser-1.1.4-10.el7.x86_64
yum-utils-1.1.31-54.el7_8.noarch
yum-3.4.3-168.el7.centos.noarch

删除依赖包

[root@localhost yum.repos.d]#  rpm -e yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch --nodeps yum-metadata-parser-1.1.4-10.el7.x86_64 yum-3.4.3-168.el7.centos.noarch

将系统默认的yum功能删除

[root@localhost yum.repos.d]# rpm -aq|grep yum|xargs rpm -e --nodeps

查看本版和系统的位数

[root@localhost yum.repos.d]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)

[root@localhost yum.repos.d]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=c8ada1f7095f6b2bb7ddc848e088c2d615c3743e, stripped

下载yum包

# wget http://vault.centos.org/7.2.1511/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-34.el7.noarch.rpm
# wget http://vault.centos.org/7.2.1511/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
# wget http://vault.centos.org/7.2.1511/os/x86_64/Packages/yum-3.4.3-132.el7.centos.0.1.noarch.rpm




注意:要注意版本
在http://mirrors.kernel.org/centos/ 或者 http://mirrors.163.com/centos/里下载
下载完成执行以下命令

# rpm -ivh  --nodeps yum-plugin-fastestmirror-1.1.31-34.el7.noarch.rpm
# rpm -ivh  --nodeps yum-metadata-parser-1.1.4-10.el7.x86_64.rpm 
# rpm -ivh  --nodeps yum-3.4.3-132.el7.centos.0.1.noarch.rpm 




进入 /etc/yum.repos.d/目录中,在http://mirrors.163.com/.help/centos.html,在里面下载对应版本的repo文件,我下载了CentOS-Base.repo
对此文件进行备份,以防修改错误还有的用
修改$releasever为自己的版本号(我的为7)
保存退出

6.rpm -Uvh https://xxxx.rpm 提示连接失败问题

(1)报错

(2)原因分析

域名解析失败

(3)解决方法

查询IP地址

通过What Is My IP Address? Free IP Lookup查询对应url ip地址:

修改hosts 文件,追加一下内容

vim /etc/hosts45.55.104.9(ip) webtatic.com(可自定义)

重新执行命令,访问对应地址成功

7.依赖检测失败

(1)报错

"警告:/var/tmp/rpm-tmp.cw1TWT: 头V4 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY\n\t软件包 epel-release-7-14.noarch 已经安装", "stderr_lines": ["警告:/var/tmp/rpm-tmp.cw1TWT: 头V4 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY"

(2)原因分析

未忽视依赖关系

(3)解决方法

在后面加上--force --nodeps就可以了,nodeps的意思是忽视依赖关系。

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm --force --nodeps  && rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm --force --nodeps 
// 以上是我个人下载的erlang版本,要依据你们自己下载的版本改一下

修改前:

修改后:

成功

8.剧本修改php失败

(1)报错

www.conf文件不存在

(2)原因分析

缺失文件

(3)解决方法

新建目录并上传文件

成功

9.剧本启动php失败

(1)报错

ansible端

php端:

Failed to start php-fpm.service: Unit not found

(2)原因分析

系统中没有配置 php-fpm.service 文件

(3)解决方法

通过find / -name nginx.service 找到nginx.service 配置文件路径

[root@localhost php-fpm.d]# find /lib/systemd/system -name "php-fpm.service"
[root@localhost php-fpm.d]# find /etc/systemd/system -name "php-fpm.service"
/etc/systemd/system/php-fpm.service

创建软链接

[root@localhost php-fpm.d]# sudo ln -s /lib/systemd/system/php-fpm.service /etc/systemd/system/php-fpm.service

然后去到那个路径 新建一个php-fpm.service文件 保存下面这一段内容,php-fpm路径根据自己的实际情况修改

[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target[Service]
Type=simple
PIDFile=/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm(你的php-fpm路径) --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf(你的php-fpm配置文件路径)
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID[Install]
WantedBy=multi-user.target

修改为:

[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target[Service]
Type=simple
PIDFile=/run/php-fpm.pid
ExecStart=/etc/systemd/system  --nodaemonize --fpm-config /etc/php-fpm.d/www.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID[Install]
WantedBy=multi-user.target

10.剧本修改mysql脚本文件失败

(1)报错

(2)原因分析

缺少passwd.sh文件

(3)解决方法

新建文件

成功

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

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

相关文章

自动泊车的自动驾驶控制算法

1. 自动泊车系统 自动泊车系统(AutomatedParkingASSiSt,APA)利用车辆搭载的传感器感知车辆周边环境,扫描满足当前车辆停放的障碍物空间车位或线车位,并通过人机交互(HumanMachine Interface,HMI)获取驾驶员对目标车位的选择或自动确定目标车位,自动规划泊车路径,通过控制器向车…

windows环境搭建ELK

目录 资源下载&#xff08;8.9.1&#xff09; ES安装、注册、使用 Kibana安装、注册、使用 Logstash安装、注册、使用 Filebeat安装、使用&#xff08;如果只有一个数据流&#xff0c;则不需要使用filebeat&#xff0c;直接上logstash即可&#xff09; 资源下载&#xff0…

WebSocket--技术文档--架构体系--《WebSocket实现原理以及关键组件》

WebSocket产生背景 简单的说&#xff0c;WebSocket协议之前&#xff0c;双工通信是通过多个http链接来实现&#xff0c;这导致了效率低下。WebSocket解决了这个问题。下面是标准RFC6455中的产生背景概述。 长久以来, 创建实现客户端和用户端之间双工通讯的web app都会造成HTT…

配置开启Hive远程连接

配置开启Hive远程连接 Hive远程连接默认方式远程连接Hive自定义身份验证类远程连接Hive权限问题额外说明 Hive远程连接 要配置Hive远程连接&#xff0c;首先确保HiveServer2已启动并监听指定的端口 hive/bin/hiveserver2检查 HiveServer2是否正在运行 # lsof -i:10000 COMMA…

详解 ElasticSearch Kibana 配置部署

默认安装部署所在机器允许外网 SSH工具 Putty 链接&#xff1a;https://pan.baidu.com/s/1b6gumtsjL_L64rEsOdhd4A 提取码&#xff1a;lxs9 Winscp 链接&#xff1a;https://pan.baidu.com/s/1tD8_2knvv0EJ5OYvXP6VTg 提取码&#xff1a;lxs9 WinSCP安装直接下一步到完成…

elementUi中的el-table表格的内容根据后端返回的数据用不同的颜色展示

效果图如下&#xff1a; 首先 首先&#xff1a;需要在表格行加入 <template slot-scope"{ row }"> </template>标签 <el-table-column prop"usable" align"center" label"状态" width"180" ><templ…

ELK安装、部署、调试 (二) ES的安装部署

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口操作ES&#xff0c;也可以利用Java API。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的开放源码发布&#xff0c;是当前流行的企业…

Linux 桌面上的 Firefox 面临着大问题

导读毫无疑问&#xff0c;无论是在桌面、笔记本电脑还是移动设备上&#xff0c;浏览器都是任何操作系统中最重要的应用之一。 如果没有一个功能强大、快速且稳定的浏览器&#xff0c;操作系统的实用性将大幅度降低&#xff0c;以至于我相当确定&#xff0c;如果一个操作系统没有…

Mysql的page,索引,Explain Type等基本常识

Mysql的基本问题 Mysql 为什么建议使用自增id&#xff1f; 因为id&#xff08;主键&#xff09;是自增的话&#xff0c;那么在有序的保存用户数据到页中的时候&#xff0c;可以天然的保存&#xff0c;并且是在聚集索引&#xff08;id&#xff09;中的叶子节点可以很好的减少插…

WebGL非矩阵变换

目录 平移 示例代码&#xff1a; 齐次坐标矢量的最后一个分量w 旋转 p的坐标&#xff0c;可得等式 R1&#xff1a; 使用r、α、β来表示点p的坐标&#xff0c;可得等式 R2&#xff1a; 利用三角函数两角和公式&#xff0c;可得等式 R3&#xff1a; 最后&#xff0c;将…

下岗吧,Excel

ChatGPT的诞生使Excel公式变得过时。通过使用 ChatGPT 的代码解释器你可以做到&#xff1a; 分析数据创建图表 这就像用自然语言与电子表格交谈一样。我将向大家展示如何使用 ChatGPT 执行此操作并将结果导出为Excel格式&#xff1a; 作为示例&#xff0c;我将分析并创建美国…

阿里云效和阿里在线idea使用

阿里云效 https://flow.aliyun.com/all?page1 阿里在线idea&#xff1a;https://ide.aliyun.com/ 在云效中创建的项目可以在在线idea 打开 运行中的项目 设置ssh 设置以后可以使用云效率的代码构建来构建代码 设置 添加自有云或者体验5h

元素居中的方法总结

目录 垂直居中 行内元素垂直居中 单行文本垂直居中 1.line-height: 200px; 多行文本垂直居中 1.tablevertical-align:middle 块级元素垂直居中 1.display: flex;align-items: center; 2.使用position top margin-top 水平居中 行内元素水平居中 1.text-align:cente…

如何让你的jupyter notebook 排版得像Word(Markdown和网页文件写法)

案例背景 很多时候我们在jupyter notebook里面的写代码&#xff0c;画图&#xff0c;但是文字分析什么的写在里面纯文本不好看&#xff0c;需要进行排版&#xff0c;那么就得用markdown的写法&#xff0c;如何还想居中或者更花里胡哨的字体&#xff0c;那就得要网页文件的一些…

阿里云将关停代销业务

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 阿里云自从逐渐分拆独立之后&#xff0c;做了很多调整。最近它又做了一个大动作&#xff1a;据DoNews消息&#xff0c;阿里云将会在今年9月30日之前&#xff0c;全面关停代销业务。 这件事实际上…

mysql profiling profiles profile

要想优化一条 Query&#xff0c;我们就需要清楚的知道这条 Query 的性能瓶颈到底在哪里&#xff0c;是消耗的 CPU计算太多&#xff0c;还是需要的的 IO 操作太多&#xff1f;要想能够清楚的了解这些信息&#xff0c;在 MySQL 5.0 和 MySQL 5.1正式版中已经可以非常容易做到了&a…

剑走偏锋:非传统问题在面试中的应对策略

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

滑动窗口系列4-Leetcode322题零钱兑换-限制张数-暴力递归到动态规划再到滑动窗口

这个题目是Leecode322的变种&#xff0c;322原题如下&#xff1a; 我们这里的变化是把硬币变成可以重复的&#xff0c;并且只有coins数组中给出的这么多的金币&#xff0c;也就是说有数量限制&#xff1a; package dataStructure.leecode.practice;import java.util.Arrays; i…

用NeRFMeshing精确提取NeRF网络中的3D网格

准确的 3D 场景和对象重建对于机器人、摄影测量和 AR/VR 等各种应用至关重要。 NeRF 在合成新颖视图方面取得了成功&#xff0c;但在准确表示底层几何方面存在不足。 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 我们已经看到了最新的进展&#xff0c;例如 NVIDIA 的…

【c++】VC编译出的版本,发布版本如何使用

目录 使用release类型进行发布 应用程序无法正常启动 0xc000007b 版本对应 vcruntime140d 应用版本 参考文章 使用release类型进行发布 应用程序无法正常启动 0xc000007b "应用程序无法正常启动 0xc000007b" 错误通常是一个 Windows 应用程序错误&#xf…