热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

如何在Ubuntu15.04中安装Puppet

大家好,本教程将学习如何在Ubuntu15.04上面安装Puppet,它可以用来管理你的服务器基础环境。Puppet是由Puppet实验室(PuppetLabs)开发并维护的一款开源的配置管理软件,它能够帮我们自动化供给、配置和管理服务器的基础环境。不管我们管理的是几个服务器还是数以千计的计算机组成的业务报表体系,puppet都能够使管理员从繁琐的手动配置调整中解放出来,腾出时

大家好,本教程将学习如何在 Ubuntu 15.04 上面安装 Puppet,它可以用来管理你的服务器基础环境。Puppet 是由 Puppet 实验室(Puppet Labs)开发并维护的一款开源的配置管理软件,它能够帮我们自动化供给、配置和管理服务器的基础环境。不管我们管理的是几个服务器还是数以千计的计算机组成的业务报表体系,puppet 都能够使管理员从繁琐的手动配置调整中解放出来,腾出时间和精力去提系统的升整体效率。它能够确保所有自动化流程作业的一致性、可靠性以及稳定性。它让管理员和开发者更紧密的联系在一起,使开发者更容易产出付出设计良好、简洁清晰的代码。puppet 提供了配置管理和数据中心自动化的两个解决方案。这两个解决方案分别是 puppet 开源版puppet 企业版。puppet 开源版以 Apache 2.0 许可证发布,它是一个非常灵活、可定制的解决方案,设置初衷是帮助管理员去完成那些重复性操作工作。pupprt 企业版是一个全平台复杂 IT 环境下的成熟解决方案,它除了拥有开源版本所有优势以外还有移动端 apps、只有商业版才有的加强支持,以及模块化和集成管理等。Puppet 使用 SSL 证书来认证主控服务器与代理节点之间的通信。

本教程将要介绍如何在运行 ubuntu 15.04 的主控服务器和代理节点上面安装开源版的 puppet。在这里,我们用一台服务器做主控服务器(master),管理和控制剩余的当作 puppet 代理节点(agent node)的服务器,这些代理节点将依据主控服务器来进行配置。在 ubuntu 15.04 只需要简单的几步就能安装配置好 puppet,用它来管理我们的服务器基础环境非常的方便。(LCTT 译注:puppet 采用 C/S 架构,所以必须有至少有一台作为服务器,其他作为客户端处理)

 

1.设置主机文件

在本教程里,我们将使用2台运行 ubuntu 15.04 “Vivid Vervet" 的主机,一台作为主控服务器,另一台作为 puppet 的代理节点。下面是我们将用到的服务器的基础信息。

  • puupet 主控服务器 IP:44.55.88.6 ,主机名: puppetmaster
  • puppet 代理节点 IP: 45.55.86.39 ,主机名: puppetnode

我们要在代理节点和服务器这两台机器的 hosts 文件里面都添加上相应的条目,使用 root 或是 sudo 访问权限来编辑 /etc/hosts 文件,命令如下:

  1. #nano/etc/hosts
  2. 45.55.88.6 puppetmaster.example.com puppetmaster
  3. 45.55.86.39 puppetnode.example.com puppetnode

注意,puppet 主控服务器必使用 8140 端口来运行,所以请务必保证开启8140端口。

 

2. 用 NTP 更新时间

puppet 代理节点所使用系统时间必须要准确,这样可以避免代理证书出现问题。如果有时间差异,那么证书将过期失效,所以服务器与代理节点的系统时间必须互相同步。我们使用 NTP(Network Time Protocol(网络时间协议))来同步时间。在服务器与代理节点上面分别运行以下命令来同步时间。

  1. # ntpdate pool.ntp.org
  2. 17Jun00:17:08 ntpdate[882]: adjust time server 66.175.209.17 offset -0.001938 sec

(LCTT 译注:显示类似的输出结果表示运行正常)

如果没有安装 ntp,请使用下面的命令更新你的软件仓库,安装并运行ntp服务

  1. #apt-get update &&sudoapt-get-y install ntp ; service ntp restart

 

3. 安装主控服务器软件

安装开源版本的 puppet 有很多的方法。在本教程中我们在 puppet 实验室官网下载一个名为 puppetlabs-release 的软件包的软件源,安装后它将为我们在软件源里面添加 puppetmaster-passenger。puppetmaster-passenger 包括带有 apache 的 puppet 主控服务器。我们开始下载这个软件包:

  1. #cd/tmp/
  2. #wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
  3. --2015-06-1700:19:26-- https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
  4. Resolving apt.puppetlabs.com (apt.puppetlabs.com)...192.155.89.90,2600:3c03::f03c:91ff:fedb:6b1d
  5. Connecting to apt.puppetlabs.com (apt.puppetlabs.com)|192.155.89.90|:443... connected.
  6. HTTP request sent, awaiting response...200 OK
  7. Length:7384(7.2K)[application/x-debian-package]
  8. Saving to:puppetlabs-release-trusty.deb
  9. puppetlabs-release-tr100%[===========================>]7.21K--.-KB/s in0.06s
  10. 2015-06-1700:19:26(130 KB/s)-puppetlabs-release-trusty.deb saved [7384/7384]

下载完成,我们来安装它:

  1. # dpkg -i puppetlabs-release-trusty.deb
  2. Selecting previously unselected package puppetlabs-release.
  3. (Reading database ...85899 files and directories currently installed.)
  4. Preparing to unpack puppetlabs-release-trusty.deb ...
  5. Unpacking puppetlabs-release (1.0-11)...
  6. Setting up puppetlabs-release (1.0-11)...

使用 apt 包管理命令更新一下本地的软件源:

  1. #apt-get update

现在我们就可以安装 puppetmaster-passenger 了

  1. #apt-get install puppetmaster-passenger

提示: 在安装的时候可能会报错:

  1. Warning:Setting templatedir is deprecated.see http://links.puppetlabs.com/env-settings-deprecations (at /usr/lib/ruby/vendor_ruby/puppet/settings.rb:1139:in `issue_deprecation_warning')

不过不用担心,忽略掉它就好,我们只需要在设置配置文件的时候把这一项禁用就行了。

如何来查看 puppet 主控服务器是否已经安装成功了呢?非常简单,只需要使用下面的命令查看它的版本就可以了。

  1. # puppet --version
  2. 3.8.1

现在我们已经安装好了 puppet 主控服务器。因为我们使用的是配合 apache 的 passenger,由 apache 来控制 puppet 主控服务器,当 apache 运行时 puppet 主控服务器才运行。

在开始之前,我们需要通过停止 apache 服务来让 puppet 主控服务器停止运行。

  1. #systemctl stop apache2

 

4. 使用 Apt 工具锁定主控服务器的版本

现在已经安装了 3.8.1 版的 puppet,我们锁定这个版本不让它随意升级,因为升级会造成配置文件混乱。 使用 apt 工具来锁定它,这里我们需要使用文本编辑器来创建一个新的文件 /etc/apt/preferences.d/00-puppet.pref

  1. #nano/etc/apt/preferences.d/00-puppet.pref

在新创建的文件里面添加以下内容:

  1. # /etc/apt/preferences.d/00-puppet.pref
  2. Package: puppet puppet-common puppetmaster-passenger
  3. Pin: version 3.8*
  4. Pin-Priority:501

这样在以后的系统软件升级中, puppet 主控服务器将不会跟随系统软件一起升级。

 

5. 配置 Puppet 主控服务器

Puppet 主控服务器作为一个证书发行机构,需要生成它自己的证书,用于签署所有代理的证书的请求。首先我们要删除所有在该软件包安装过程中创建出来的 ssl 证书。本地默认的 puppet 证书放在 /var/lib/puppet/ssl。因此我们只需要使用 rm 命令来整个移除这些证书就可以了。

  1. #rm-rf /var/lib/puppet/ssl

现在来配置该证书,在创建 puppet 主控服务器证书时,我们需要包括代理节点与主控服务器沟通所用的每个 DNS 名称。使用文本编辑器来修改服务器的配置文件 puppet.conf

  1. #nano/etc/puppet/puppet.conf

输出的结果像下面这样

  1. [main]
  2. logdir=/var/log/puppet
  3. vardir=/var/lib/puppet
  4. ssldir=/var/lib/puppet/ssl
  5. rundir=/var/run/puppet
  6. factpath=$vardir/lib/facter
  7. templatedir=$confdir/templates
  8. [master]
  9. #These are needed when the puppetmaster is run by passenger
  10. #and can safely be removed if webrick is used.
  11. ssl_client_header = SSL_CLIENT_S_DN
  12. ssl_client_verify_header = SSL_CLIENT_VERIFY

在这我们需要注释掉 templatedir 这行使它失效。然后在文件的 [main] 小节的结尾添加下面的信息。

  1. server = puppetmaster
  2. environment = production
  3. runinterval =1h
  4. strict_variables =true
  5. certname = puppetmaster
  6. dns_alt_names = puppetmaster, puppetmaster.example.com

还有很多你可能用的到的配置选项。 如果你有需要,在 Puppet 实验室有一份详细的描述文件供你阅读: Main Config File (puppet.conf)。

编辑完成后保存退出。

使用下面的命令来生成一个新的证书。

  1. # puppet master --verbose --no-daemonize
  2. Info:Creating a new SSL key for ca
  3. Info:Creating a new SSL certificate request for ca
  4. Info:CertificateRequest fingerprint (SHA256): F6:2F:69:89:BA:A5:5E:FF:7F:94:15:6B:A7:C4:20:CE:23:C7:E3:C9:63:53:E0:F2:76:D7:2E:E0:BF:BD:A6:78
  5. ...
  6. Notice: puppetmaster has a waiting certificate request
  7. Notice:Signed certificate request for puppetmaster
  8. Notice:RemovingfilePuppet::SSL::CertificateRequest puppetmaster at '/var/lib/puppet/ssl/ca/requests/puppetmaster.pem'
  9. Notice:RemovingfilePuppet::SSL::CertificateRequest puppetmaster at '/var/lib/puppet/ssl/certificate_requests/puppetmaster.pem'
  10. Notice:StartingPuppet master version 3.8.1
  11. ^CNotice:Caught INT; storing stop
  12. Notice:Processing stop

至此,证书已经生成。一旦我们看到 Notice: Starting Puppet master version 3.8.1,就表明证书就已经制作好了。我们按下 CTRL-C 回到 shell 命令行。

查看新生成证书的信息,可以使用下面的命令。

  1. # puppet cert list-all
  2. +"puppetmaster"(SHA256)33:28:97:86:A1:C3:2F:73:10:D1:FB:42:DA:D5:42:69:71:84:F0:E2:8A:01:B9:58:38:90:E4:7D:B7:25:23:EC (alt names:"DNS:puppetmaster","DNS:puppetmaster.example.com")

 

6. 创建一个 Puppet 清单

默认的主清单(Manifest)是 /etc/puppet/manifests/site.pp。 这个主要清单文件包括了用于在代理节点执行的配置定义。现在我们来创建一个清单文件:

  1. #nano/etc/puppet/manifests/site.pp

在刚打开的文件里面添加下面这几行:

  1. # execute 'apt-get update'
  2. exec{'apt-update':#exec resource named 'apt-update'
  3. command =>'/usr/bin/apt-get update'# command this resource will run
  4. }
  5. # install apache2 package
  6. package{'apache2':
  7. require=>Exec['apt-update'],#require'apt-update' before installing
  8. ensure=> installed,
  9. }
  10. #ensure apache2 service is running
  11. service {'apache2':
  12. ensure=> running,
  13. }

以上这几行的意思是给代理节点部署 apache web 服务。

 

7. 运行 puppet 主控服务

已经准备好运行 puppet 主控服务器 了,那么开启 apache 服务来让它启动

  1. #systemctl start apache2

我们 puppet 主控服务器已经运行,不过它还不能管理任何代理节点。现在我们给 puppet 主控服务器添加代理节点.

提示: 如果报错

  1. Jobfor apache2.service failed. see "systemctl status apache2.service"and"journalctl -xe"for details.

肯定是 apache 服务器有一些问题,我们可以使用 root 或是 sudo 访问权限来运行 apachectl start 查看它输出的日志。在本教程执行过程中, 我们发现一个 /etc/apache2/sites-enabled/puppetmaster.conf 的证书配置问题。修改其中的 SSLCertificateFile /var/lib/puppet/ssl/certs/server.pemSSLCertificateFile /var/lib/puppet/ssl/certs/puppetmaster.pem,然后注释掉后面这行 SSLCertificateKeyFile 。然后在命令行重新启动 apache。

 

8. 安装 Puppet 代理节点的软件包

我们已经准备好了 puppet 的服务器,现在需要一个可以管理的代理节点,我们将安装 puppet 代理软件到节点上去。这里我们要给每一个需要管理的节点安装代理软件,并且确保这些节点能够通过 DNS 查询到服务器主机。下面将 安装最新的代理软件到 节点 puppetnode.example.com 上。

在代理节点上使用下面的命令下载 puppet 实验室提供的软件包:

  1. #cd/tmp/
  2. #wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb\
  3. --2015-06-1700:54:42-- https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
  4. Resolving apt.puppetlabs.com (apt.puppetlabs.com)...192.155.89.90,2600:3c03::f03c:91ff:fedb:6b1d
  5. Connecting to apt.puppetlabs.com (apt.puppetlabs.com)|192.155.89.90|:443... connected.
  6. HTTP request sent, awaiting response...200 OK
  7. Length:7384(7.2K)[application/x-debian-package]
  8. Saving to:puppetlabs-release-trusty.deb
  9. puppetlabs-release-tr100%[===========================>]7.21K--.-KB/s in0.04s
  10. 2015-06-1700:54:42(162 KB/s)-puppetlabs-release-trusty.deb saved [7384/7384]

在 ubuntu 15.04 上我们使用 debian 包管理系统来安装它,命令如下:

  1. # dpkg -i puppetlabs-release-trusty.deb

使用 apt 包管理命令更新一下本地的软件源:

  1. #apt-get update

通过远程仓库安装:

  1. #apt-get install puppet

Puppet 代理默认是不启动的。这里我们需要使用文本编辑器修改 /etc/default/puppet 文件,使它正常工作:

  1. #nano/etc/default/puppet

更改 START 的值改成 "yes" 。

  1. START=yes

最后保存并退出。

 

9. 使用 Apt 工具锁定代理软件的版本

和上面的步骤一样为防止随意升级造成的配置文件混乱,我们要使用 apt 工具来把它锁定。具体做法是使用文本编辑器创建一个文件 /etc/apt/preferences.d/00-puppet.pref

  1. #nano/etc/apt/preferences.d/00-puppet.pref

在新建的文件里面加入如下内容

  1. # /etc/apt/preferences.d/00-puppet.pref
  2. Package: puppet puppet-common
  3. Pin: version 3.8*
  4. Pin-Priority:501

这样 puppet 就不会随着系统软件升级而随意升级了。

 

10. 配置 puppet 代理节点

我们需要编辑一下代理节点的 puppet.conf 文件,来使它运行。

  1. #nano/etc/puppet/puppet.conf

它看起来和服务器的配置文件完全一样。同样注释掉 templatedir 这行。不同的是在这里我们需要删除掉所有关于[master] 的部分。

假定主控服务器可以通过名字“puppet-master”访问,我们的客户端应该可以和它相互连接通信。如果不行的话,我们需要使用完整的主机域名 puppetmaster.example.com

  1. [agent]
  2. server = puppetmaster.example.com
  3. certname = puppetnode.example.com

在文件的结尾增加上面3行,增加之后文件内容像下面这样:

  1. [main]
  2. logdir=/var/log/puppet
  3. vardir=/var/lib/puppet
  4. ssldir=/var/lib/puppet/ssl
  5. rundir=/var/run/puppet
  6. factpath=$vardir/lib/facter
  7. #templatedir=$confdir/templates
  8. [agent]
  9. server = puppetmaster.example.com
  10. certname = puppetnode.example.com

最后保存并退出。

使用下面的命令来启动客户端软件:

  1. #systemctl start puppet

如果一切顺利的话,我们不会看到命令行有任何输出。 第一次运行的时候,代理节点会生成一个 ssl 证书并且给服务器发送一个请求,经过签名确认后,两台机器就可以互相通信了。

提示: 如果这是你添加的第一个代理节点,建议你在添加其他节点前先给这个证书签名。一旦能够通过并正常运行,回过头来再添加其他代理节点。

 

11. 在主控服务器上对证书请求进行签名

第一次运行的时候,代理节点会生成一个 ssl 证书并且给服务器发送一个签名请求。在主控服务器给代理节点服务器证书签名之后,主服务器才能和代理服务器通信并且控制代理服务器。

在主控服务器上使用下面的命令来列出当前的证书请求:

  1. # puppet cert list
  2. "puppetnode.example.com"(SHA256)31:A1:7E:23:6B:CD:7B:7D:83:98:33:8B:21:01:A6:C4:01:D5:53:3D:A0:0E:77:9A:77:AE:8F:05:4A:9A:50:B2

因为只设置了一台代理节点服务器,所以我们将只看到一个请求。看起来类似如上,代理节点的完整域名即其主机名。

注意有没有“+”号在前面,代表这个证书有没有被签名。

使用带有主机名的 puppet cert sign 这个命令来签署这个签名请求,如下:

  1. # puppet cert sign puppetnode.example.com
  2. Notice:Signed certificate request for puppetnode.example.com
  3. Notice:RemovingfilePuppet::SSL::CertificateRequest puppetnode.example.com at '/var/lib/puppet/ssl/ca/requests/puppetnode.example.com.pem'

主控服务器现在可以通讯和控制它签名过的代理节点了。

如果想签署所有的当前请求,可以使用 -all 选项,如下所示:

  1. # puppet cert sign --all

 

12. 删除一个 Puppet 证书

如果我们想移除一个主机,或者想重建一个主机然后再添加它。下面的例子里我们将展示如何删除 puppet 主控服务器上面的一个证书。使用的命令如下:

  1. # puppet cert clean hostname
  2. Notice:Revoked certificate with serial 5
  3. Notice:RemovingfilePuppet::SSL::Certificate puppetnode.example.com at '/var/lib/puppet/ssl/ca/signed/puppetnode.example.com.pem'
  4. Notice:RemovingfilePuppet::SSL::Certificate puppetnode.example.com at '/var/lib/puppet/ssl/certs/puppetnode.example.com.pem'

如果我们想查看所有的签署和未签署的请求,使用下面这条命令:

  1. # puppet cert list--all
  2. +"puppetmaster"(SHA256)33:28:97:86:A1:C3:2F:73:10:D1:FB:42:DA:D5:42:69:71:84:F0:E2:8A:01:B9:58:38:90:E4:7D:B7:25:23:EC (alt names:"DNS:puppetmaster","DNS:puppetmaster.example.com")

 

13. 部署 Puppet 清单

当配置并完成 puppet 清单后,现在我们需要部署清单到代理节点服务器上。要应用并加载主 puppet 清单,我们可以在代理节点服务器上面使用下面的命令:

  1. # puppet agent --test
  2. Info:Retrieving pluginfacts
  3. Info:Retrieving plugin
  4. Info:Caching catalog for puppetnode.example.com
  5. Info:Applying configuration version '1434563858'
  6. Notice:/Stage[main]/Main/Exec[apt-update]/returns: executed successfully
  7. Notice:Finished catalog run in10.53 seconds

这里向我们展示了主清单如何立即影响到了一个单一的服务器。

如果我们打算运行的 puppet 清单与主清单没有什么关联,我们可以简单使用 puppet apply 带上相应的清单文件的路径即可。它仅将清单应用到我们运行该清单的代理节点上。

  1. # puppet apply /etc/puppet/manifest/test.pp

 

14. 为特定节点配置清单

如果我们想部署一个清单到某个特定的节点,我们需要如下配置清单。

在主控服务器上面使用文本编辑器编辑 /etc/puppet/manifest/site.pp

  1. #nano/etc/puppet/manifest/site.pp

添加下面的内容进去

  1. node 'puppetnode','puppetnode1'{
  2. # execute 'apt-get update'
  3. exec{'apt-update':#exec resource named 'apt-update'
  4. command =>'/usr/bin/apt-get update'# command this resource will run
  5. }
  6. # install apache2 package
  7. package{'apache2':
  8. require=>Exec['apt-update'],#require'apt-update' before installing
  9. ensure=> installed,
  10. }
  11. #ensure apache2 service is running
  12. service {'apache2':
  13. ensure=> running,
  14. }
  15. }

这里的配置显示我们将在名为 puppetnode 和 puppetnode1 的2个指定的节点上面安装 apache 服务。这里可以添加其他我们需要安装部署的具体节点进去。

 

15. 配置清单模块

模块对于组合任务是非常有用的,在 Puppet 社区有很多人贡献了自己的模块组件。

在主控服务器上, 我们将使用 puppet module 命令来安装 puppetlabs-apache 模块。

  1. # puppet module install puppetlabs-apache

警告: 千万不要在一个已经部署 apache 环境的机器上面使用这个模块,否则它将清空你没有被 puppet 管理的 apache 配置。

现在用文本编辑器来修改 site.pp

  1. #nano/etc/puppet/manifest/site.pp

添加下面的内容进去,在 puppetnode 上面安装 apache 服务。

  1. node 'puppet-node'{
  2. class{'apache':}#use apache module
  3. apache::vhost {'example.com':#define vhost resource
  4. port =>'80',
  5. docroot =>'/var/www/html'
  6. }
  7. }

保存退出。然后重新运行该清单来为我们的代理节点部署 apache 配置。

 

总结

现在我们已经成功的在 ubuntu 15.04 上面部署并运行 puppet 来管理代理节点服务器的基础运行环境。我们学习了 puppet 是如何工作的,编写清单文件,

推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 系统安装Debian系统的安装方式和Ubuntu系统的安装方式几乎是一样的,毕竟Ubuntu系统是基于Debian的,就如同CentOS基于Redhat ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • .htaccess文件 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 如何将CentOS8转换为CentOSStream
    CentOS Stream是一个持续交付的Linux发行版,它在RHEL之前处于领先地位。它将具有滚动发布,即不断进行更改。CentOS将成为一个上游版本,它将具有测试补丁和更新。 ... [详细]
  • 问题描述:域名已经备案,我全部都有,也在后台配置了,但是手机预览,还是请求失败,PC端是可以请求 ... [详细]
  • python3.7 安装pip3_python3的pip3安装
    ---恢复内容开始---pip3的安装需要对应一整套python的编译工具库,所以安装好的pip3是这个样子:inearAi:~$pip3-Vpi ... [详细]
  • 如何查看电脑系统版本_腾讯云服务器系统版本怎么看?Windows和Centos版本怎么选?...
    腾讯云服务器系统版本怎么看?想要知道自己的腾讯云服务器系统版本是哪个,可以登录云服务器后台管理系统查看,或者使用命令行查询,如果不会操作& ... [详细]
author-avatar
却冷了_的心_133
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有