原生RedHat OpenStack搭建
文章目录
- OpenStack的搭建方式
- 实验软件及镜像
- 实验环境
- 配置NTP节点
- 初始化配置
- 配置本地yum仓库
- 上传镜像文件至NTP节点
- 搭建基于http的网络yum源
- 搭建NTP服务
- 配置Controller控制节点和Compute计算节点
- 初始化配置
- 安装RedHat OpenStack
- 安装部署OpenStack
- 配置OVS桥接
OpenStack的搭建方式
- Allinone
- 在一台服务节点上安装阉割版的OpenStack,再使用此节点,在其他三个节点上安装不同的组件
- TrpileO(OpenStack On OpenStack)
- PackStack(RedHat)
- Ansbile(自动化运维工具)
- 原生OpenStack安装时,是手动安装各个组件
实验软件及镜像
- 镜像【下载】,提取码Bad5
软件 作用 VMware Workstation Pro 用于部署实验主机节点 Xshell/Putty/Mobaxterm 用于远程连接节点主机 WinSCP 用于上传ISO镜像文件至节点主机 rhel-server-7.1-x86_64-dvd.iso 用于安装节点主机的镜像文件 RHEL7OSP-6.0-2015-02-23.2-x86_64.iso 用于安装搭建OpenStack small.img 用于发放云主机
实验环境
- 实验使用的为RHEL7.1版本的Linux,网络模式为仅主机模式,桥接到物理主机的VMnet1网卡,VMnnet1网卡的IP作为节点主机的DNS服务器
主机名 IP地址 功能 配置 NTP 192.168.43.128 提供 NTP服务以及网络YUM源 2CPU/1G_RAM/200G_Disk Controller 192.168.43.129 作为管理节点和计算节点 2CPU/4G_RAM/200G_Disk Compute 192.168.43.130 作为计算节点 2CPU/4G_RAM/200G_Disk 物理主机VMnet1 192.168.43.1
配置NTP节点
初始化配置
- 修改主机名为NTP
- 关闭SeLinux
- 配置主机的IP地址、子网掩码、网关以及DNS
- 禁止NetworkManager开机自启
- 关闭防火墙并禁止防火墙开机自启,检查防火墙的状态
- 重启节点主机
[root@localhost ~]# vim /etc/hostnameNTP
[root@localhost ~]# vim /etc/selinux/configSELINUX=disabled
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736TYPE=EthernetBOOTPROTO=staticNAME=eno16777736DEVICE=eno16777736ONBOOT=yesIPADDR=192.168.43.128NETMASK=255.255.255.0GATEWAY=192.168.43.1DNS1=192.168.43.1
[root@localhost ~]# systemctl disable NetworkManager
[root@localhost ~]# systemctl stop firewall.service
[root@localhost ~]# systemctl disable firewall.service
[root@localhost ~]# systemctl status firewall.service
firewall.serviceLoaded: not-found (Reason: No such file or directory)Active: inactive (dead)
[root@localhost ~]# reboot
配置本地yum仓库
- 配置本地yum源文件
- 挂载RHEL7.1的镜像文件到NTP节点主机的/mnt下
[root@NTP ~]# cd /etc/yum.repos.d/
[root@NTP yum.repos.d]# ls
[root@NTP yum.repos.d]# vim RHEL.repo[Base]name=RHELbaseurl=file:///mntgpgcheck=0enable=1
[root@NTP yum.repos.d]# mount /dev/cdrom /mnt/ #将ISO文件挂载到/mnt下
mount: /dev/sr0 is write-protected, mounting read-only
[root@NTP yum.repos.d]# yum clean all #清除yum缓存
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Cleaning repos: InstallMedia Base
Cleaning up everything
[root@NTP yum.repos.d]# yum repolist #刷新yum仓库
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Base | 4.1 kB 00:00
(1/2): Base/group_gz | 134 kB 00:00
(2/2): Base/primary_db | 3.4 MB 00:00
repo id repo name status
Base RHEL 4,371
repolist: 4,371
上传镜像文件至NTP节点
- 创建/iso目录,用于存放镜像文件
- 使用WinSCP或Mobaxterm将镜像文件上传到NTP节点
[root@NTP ~]# mkdir /iso
[root@NTP ~]# cd /iso/
[root@NTP iso]# ls
RHEL7OSP-6.0-2015-02-23.2-x86_64.iso rhel-server-7.1-x86_64-dvd.iso
搭建基于http的网络yum源
- 安装http服务,启动http服务,并设置开机自启动
- 查看http服务的状态
- 创建发布目录,并配置镜像文件开机自动挂载到发布目录
- 重新配置基于http的网络yum源仓库,并测试网络yum源的可用性(如果在yum仓库的目录中还有系统自动生成的其他.repo的文件,需要全部删掉,避免影响之后的实验)
[root@NTP ~]# yum -y install httpd
[root@NTP ~]# systemctl start httpd
[root@NTP ~]# systemctl enable httpd
[root@NTP ~]# systemctl status httpd
httpd.service - The Apache HTTP ServerLoaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)Active: active (running) since Thu 2023-01-12 15:55:35 CST; 19s agoMain PID: 10713 (httpd)......
[root@NTP ~]# mkdir /var/www/html/{ISO,OpenStack}
[root@NTP ~]# cd /var/www/html/
[root@NTP html]# ls
ISO OpenStack
[root@NTP html]# vim /etc/fstab #配置开机自动挂载
[root@NTP html]# tail -2 /etc/fstab
/iso/rhel-server-7.1-x86_64-dvd.iso /var/www/html/ISO iso9660 defaults,loop,ro 0 0
/iso/RHEL7OSP-6.0-2015-02-23.2-x86_64.iso /var/www/html/OpenStack iso9660 defaults,loop,ro 0 0
[root@NTP html]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 50G 7.1G 43G 15% /
devtmpfs 481M 0 481M 0% /dev
tmpfs 490M 140K 490M 1% /dev/shm
tmpfs 490M 7.1M 483M 2% /run
tmpfs 490M 0 490M 0% /sys/fs/cgroup
/dev/sda1 497M 124M 373M 25% /boot
/dev/mapper/rhel-home 148G 33M 148G 1% /home
/dev/sr0 3.7G 3.7G 0 100% /mnt
[root@NTP html]# mount -a #重新读取fstab文件,进行挂载
[root@NTP html]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 50G 7.1G 43G 15% /
devtmpfs 481M 0 481M 0% /dev
tmpfs 490M 140K 490M 1% /dev/shm
tmpfs 490M 7.1M 483M 2% /run
tmpfs 490M 0 490M 0% /sys/fs/cgroup
/dev/sda1 497M 124M 373M 25% /boot
/dev/mapper/rhel-home 148G 33M 148G 1% /home
/dev/sr0 3.7G 3.7G 0 100% /mnt
/dev/loop0 3.7G 3.7G 0 100% /var/www/html/ISO
/dev/loop1 515M 515M 0 100% /var/www/html/OpenStack
[root@NTP html]# cd /etc/yum.repos.d/
[root@NTP yum.repos.d]# vim RHEL.repo[Base]name=RHELbaseurl=http://192.168.43.128/ISOgpgcheck=0enable=1
[root@NTP yum.repos.d]# vim OpenStack.repo[RH7-RHOS-6.0-Installer]name=RH7-RHOS-6.0-Installerbaseurl=http://192.168.43.128/OpenStack/RH7-RHOS-6.0-Installergpgcheck=0enabled=1[RH7-RHOS-6.0]name=RH7-RHOS-6.0baseurl=http://192.168.43.128/OpenStack/RH7-RHOS-6.0gpgcheck=0enabled=1[RHEL-7-RHSCL-1.2]name=RHEL-7-RHSCL-1.2baseurl=http://192.168.43.128/OpenStack/RHEL-7-RHSCL-1.2gpgcheck=0enabled=1[RHEL7-Errata]name=RHEL7-Erratabaseurl=http://192.168.43.128/OpenStack/RHEL7-Erratagpgcheck=0enabeld=1
[root@NTP yum.repos.d]# yum clean all
[root@NTP yum.repos.d]# yum repolist all
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Base | 4.1 kB 00:00
RH7-RHOS-6.0 | 1.3 kB 00:00
RH7-RHOS-6.0-Installer | 1.2 kB 00:00
RHEL-7-RHSCL-1.2 | 3.3 kB 00:00
RHEL7-Errata | 2.9 kB 00:00
(1/6): Base/group_gz | 134 kB 00:00
(2/6): Base/primary_db | 3.4 MB 00:00
(3/6): RH7-RHOS-6.0/primary | 117 kB 00:00
(4/6): RHEL-7-RHSCL-1.2/primary_db | 776 kB 00:00
(5/6): RHEL7-Errata/primary_db | 10 kB 00:00
(6/6): RH7-RHOS-6.0-Installer/primary | 47 kB 00:00
RH7-RHOS-6.0 393/393
RH7-RHOS-6.0-Installer 194/194
repo id repo name status
Base RHEL enabled: 4,371
RH7-RHOS-6.0 RH7-RHOS-6.0 enabled: 393
RH7-RHOS-6.0-Installer RH7-RHOS-6.0-Installer enabled: 194
RHEL-7-RHSCL-1.2 RHEL-7-RHSCL-1.2 enabled: 1,766
RHEL7-Errata RHEL7-Errata enabled: 11
repolist: 6,735
搭建NTP服务
- 安装NTP服务
- 配置NTP服务,将NTP节点主机作为服务端。控制节点和计算节点会向NTP节点进行时间同步
- 启动NTP服务,并设置开机自启动,查看NTP服务的状态
- 关闭chrony服务,并禁止开机自启。此服务也可以作为时间同步服务器,会和NTP冲突
[root@NTP yum.repos.d]# cd
[root@NTP ~]# rpm -qa | grep ntp #查看是否安装了NTP服务
ntpdate-4.2.6p5-19.el7_0.x86_64
fontpackages-filesystem-1.44-8.el7.noarch
[root@NTP ~]# yum -y install ntp....
Installed:ntp.x86_64 0:4.2.6p5-19.el7_0Complete!
[root@NTP ~]# vim /etc/ntp.conf #将网络时间同步服务器注释,配置自身作为时间同步服务器......21 #server 0.rhel.pool.ntp.org iburst22 #server 1.rhel.pool.ntp.org iburst23 #server 2.rhel.pool.ntp.org iburst24 #server 3.rhel.pool.ntp.org iburst2526 server 127.127.1.0 #配置时间同步服务器为自身27 fudge 127.127.1.0 stratum 10 #配置自身作为时间同步服务器......
[root@NTP ~]# systemctl start ntpd
[root@NTP ~]# systemctl enable ntpd #配置NTP服务开机自启动
ln -s '/usr/lib/systemd/system/ntpd.service' '/etc/systemd/system/multi-user.target.wants/ntpd.service'
[root@NTP ~]# systemctl status ntpd
ntpd.service - Network Time ServiceLoaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled)Active: active (running) since Thu 2023-01-12 16:24:12 CST; 18s agoMain PID: 21546 (ntpd)CGroup: /system.slice/ntpd.service└─21546 /usr/sbin/ntpd -u ntp:ntp -g......
[root@NTP ~]# systemctl stop chrony
[root@NTP ~]# systemctl disable chronyd.service
rm '/etc/systemd/system/multi-user.target.wants/chronyd.service'
[root@NTP ~]# systemctl status chronyd.service
chronyd.service - NTP client/serverLoaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled)Active: inactive (dead)......
NTP节点配置完成
配置Controller控制节点和Compute计算节点
初始化配置
- 修改主机名为Controller
- 关闭SeLinux
- 配置主机的IP地址、子网掩码、网关以及DNS(这里回归了网卡传统命名,所以是ifcfg-eth0)
- 禁止NetworkManager开机自启
- 关闭防火墙并禁止防火墙开机自启,检查防火墙的状态
- 重启节点主机
[root@localhost ~]# vim /etc/hostnameController
[root@localhost ~]# vim /etc/selinux/configSELINUX=disabled
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0TYPE=EthernetBOOTPROTO=staticNAME=eth0DEVICE=eth0ONBOOT=yesIPADDR=192.168.43.129NETMASK=255.255.255.0GATEWAY=192.168.43.1DNS1=192.168.43.1
[root@localhost ~]# systemctl disable NetworkManager
[root@localhost ~]# systemctl stop firewall.service
[root@localhost ~]# systemctl disable firewall.service
[root@localhost ~]# systemctl status firewall.service
firewall.serviceLoaded: not-found (Reason: No such file or directory)Active: inactive (dead)
[root@localhost ~]# reboot
重启完成后,测试与NTP节点主机的连通性
- 在NTP节点主机,将配置好的网络yum源仓库文件传给Controller控制节点
[root@NTP ~]# cd /etc/yum.repos.d/
[root@NTP yum.repos.d]# ls
OpenStack.repo redhat.repo RHEL.repo
[root@NTP yum.repos.d]# rm -rf redhat.repo
[root@NTP yum.repos.d]# ls
OpenStack.repo RHEL.repo
[root@NTP yum.repos.d]# scp ./* root@192.168.43.129:/etc/yum.repos.d/
The authenticity of host '192.168.43.129 (192.168.43.129)' can't be established.
ECDSA key fingerprint is e9:ee:b8:50:13:9b:f7:de:70:ef:44:1f:11:35:cb:54.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.43.129' (ECDSA) to the list of known hosts.
root@192.168.43.129's password:
OpenStack.repo 100% 473 0.5KB/s 00:00
RHEL.repo 100% 71 0.1KB/s 00:00
- 在控制节点测试网络yum源仓库的可用性
[root@Controller ~]# cd /etc/yum.repos.d/
[root@Controller yum.repos.d]# ls
OpenStack.repo redhat.repo RHEL.repo
[root@Controller yum.repos.d]# yum clean all
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Cleaning repos: Base RH7-RHOS-6.0 RH7-RHOS-6.0-Installer RHEL-7-RHSCL-1.2: RHEL7-Errata
Cleaning up everything
[root@Controller yum.repos.d]# yum repolist all
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Base | 4.1 kB 00:00
RH7-RHOS-6.0 | 1.3 kB 00:00
RH7-RHOS-6.0-Installer | 1.2 kB 00:00
RHEL-7-RHSCL-1.2 | 3.3 kB 00:00
RHEL7-Errata | 2.9 kB 00:00
(1/6): Base/group_gz | 134 kB 00:00
(2/6): RHEL7-Errata/primary_db | 10 kB 00:00
(3/6): RH7-RHOS-6.0-Installer/primary | 47 kB 00:00
(4/6): RH7-RHOS-6.0/primary | 117 kB 00:00
(5/6): Base/primary_db | 3.4 MB 00:00
(6/6): RHEL-7-RHSCL-1.2/primary_db | 776 kB 00:00
RH7-RHOS-6.0 393/393
RH7-RHOS-6.0-Installer 194/194
repo id repo name status
Base RHEL enabled: 4,371
RH7-RHOS-6.0 RH7-RHOS-6.0 enabled: 393
RH7-RHOS-6.0-Installer RH7-RHOS-6.0-Installer enabled: 194
RHEL-7-RHSCL-1.2 RHEL-7-RHSCL-1.2 enabled: 1,766
RHEL7-Errata RHEL7-Errata enabled: 11
repolist: 6,735
- 在Compute计算节点同样的初始化配置节点主机,并测试连通性
- 将NTP节点主机的yum源仓库文件上传到Compute计算节点上,并测试网络yum源仓库的可用性
安装RedHat OpenStack
- 在控制节点安装packstack工具,用于安装部署OpenStack
- 安装完成后,检查控制节点的DNS是否配置正确。如果配置不正确,需要在网卡的配置文件中重新配置DNS
[root@Controller ~]# yum -y install openstack-packstack......
Installed:openstack-packstack.noarch 0:2014.2-0.16.dev1401.gdd19d48.el7ostDependency Installed:PyYAML.x86_64 0:3.10-11.el7libyaml.x86_64 0:0.1.4-11.el7_0openstack-packstack-puppet.noarch 0:2014.2-0.16.dev1401.gdd19d48.el7ostopenstack-puppet-modules.noarch 0:2014.2.8-2.el7ost......
Complete!
[root@Controller ~]# cat /etc/resolv.conf
nameserver 192.168.43.1
安装部署OpenStack
- 生成应答文件,并修改该应答文件
- 利用应答文件,使用packstack工具安装OpenStack
[root@Controller ~]# packstack --gen-answer-file=/root/ans.txt
Packstack changed given value to required value /root/.ssh/id_rsa.pub
[root@Controller ~]# cd /root/
[root@Controller ~]# ls
anaconda-ks.cfg Desktop Downloads Music Public Videos
ans.txt Documents initial-setup-ks.cfg Pictures Templates
[root@Controller ~]# vim ans.txt......67 CONFIG_NTP_SERVERS=192.168.43.128 #配置NTP服务器节点......85 CONFIG_CONTROLLER_HOST=192.168.43.129 #配置控制节点......89 CONFIG_COMPUTE_HOSTS=192.168.43.129,192.168.43.130 #配置多计算节点,控制节点复用......93 CONFIG_NETWORK_HOSTS=192.168.43.129 #配置网络节点,控制节点暂代......246 CONFIG_KEYSTONE_ADMIN_PW=badboy #配置Web界面管理员登录密码 ......560 CONFIG_HORIZON_SSL=y #配置加密通信的Web界面......629 CONFIG_PROVISION_DEMO=n #配置不创建演示环境......
[root@Controller ~]# packstack --answer-file=/root/ans.txt
Welcome to the Packstack setup utilityThe installation log file is available at: /var/tmp/packstack/20230112-173134-eqBcat/openstack-setup.logInstalling:
Clean Up [ DONE ]
root@192.168.43.129's password:
root@192.168.43.130's password:
Setting up ssh keys [ DONE ]
Discovering hosts' details [ DONE ]......
Applying 192.168.43.130_postscript.pp
192.168.43.130_postscript.pp: [ DONE ]
192.168.43.129_postscript.pp: [ DONE ]
Applying Puppet manifests [ DONE ]
Finalizing [ DONE ]**** Installation completed successfully ******Additional information:......
登录OpenStack首页测试:https://192.168.43.129/dashboard,登录成功后无需做配置
配置OVS桥接
- 修改控制节点的网卡配置文件
- 先将网卡配置文件做备份 , 防止出现故障时无法恢复
- 创建OVS桥接,修改网卡配置文件
- 修改网卡桥接,重启网络服务
[root@Controller ~]# cd /etc/sysconfig/network-scripts/
[root@Controller network-scripts]# cp ifcfg-eth0 ifcfg-eth0.bak
[root@Controller network-scripts]# cp ifcfg-eth0 ifcfg-br-ex
[root@Controller network-scripts]# vim ifcfg-br-exTYPE=OVSBridgeNAME=br-exDEVICE=br-exONBOOT=yesDEVICETYPE=ovsOVS_BRIDGE=br-exIPADDR=192.168.43.129NETMASK=255.255.255.0GATEWAY=192.168.43.1DNS1=192.168.43.1
[root@Controller network-scripts]# vim ifcfg-eth0TYPE=OVSPortNAME=eth0DEVICE=eth0ONBOOT=yesDEVICETYPE=ovsOVS_BRIDGE=br-ex
[root@Controller network-scripts]# service network restart
Restarting network (via systemctl): [ OK ]
[root@Controller network-scripts]# ifconfig
br-ex: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.43.129 netmask 255.255.255.0 broadcast 192.168.43.255inet6 fe80::742d:32ff:fe73:e74f prefixlen 64 scopeid 0x20<link>ether 00:0c:29:52:94:1d txqueuelen 0 (Ethernet)RX packets 93 bytes 7953 (7.7 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 137 bytes 17053 (16.6 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0br-int: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet6 fe80::14b6:b1ff:fe67:294e prefixlen 64 scopeid 0x20<link>ether 16:b6:b1:67:29:4e txqueuelen 0 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 8 bytes 648 (648.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet6 fe80::20c:29ff:fe52:941d prefixlen 64 scopeid 0x20<link>ether 00:0c:29:52:94:1d txqueuelen 1000 (Ethernet)RX packets 212126 bytes 219696484 (209.5 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 106409 bytes 18842452 (17.9 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 0 (Local Loopback)RX packets 496279 bytes 74615394 (71.1 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 496279 bytes 74615394 (71.1 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
以上内容均属原创,如有不详或错误,敬请指出。
原生RedHat OpenStack搭建相关推荐
- openstack搭建问题
1.yum install centos-release-openstack-mitaka 问题:No package centos-release-openstack-mitaka availabl ...
- openstack搭建教程
一. 什么是云计算 云计算(cloud computing)是基于互联网的相关服务的增加.使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源.云是网络.互联网的一种比喻说法.过 ...
- 先电OpenStack搭建
先电OpenStack搭建 本次搭建采用双节点安装,即controller node控制节点和compute node计算节点.enp8s0为内部管理网络,enp9s0为外部网络.存储节点安装操作系统 ...
- OpenStack 搭建记录——筑梦之路
网络规划: 192.168.25.34 openstack 第一部分 openstack搭建 官方文档 http://docs.openstack.org/ 操作系统:centos 7 minal ...
- [干货]原生营销场景搭建小Tips,你收藏好了吗?——金融借贷篇
[干货]原生营销场景搭建小Tips,你收藏好了吗?--金融借贷篇 假如你是一个非常喜欢吃橘子的人,某天你经过两个橘子摊,看到以下两个场景,你会更倾向于购买哪一家? 场景一 场景二 如果你是一个经济宽裕 ...
- 小米基于OpenStack搭建私有云平台技术架构大揭秘!
摘要: 小米公司OpenStack项目的技术负责人潘晓东分享在使用OpenStack建设小米私有云平台的一些经验和踩过的一些坑,重点探讨在目前OpenStack还不太稳定的情况下,如何建设一个具备企业 ...
- 基于openstack搭建百万级并发负载均衡器的解决方案
最近,喜欢研究一些国外技术大咖们的文章,而这篇文章是基于openstack负载均衡器的解决方案,做的一些总结~希望能够给小伙伴带来一些灵感或者帮助. openstack现有的负载均衡解决方案,无论是l ...
- 基于RDO的单机的openstack搭建
单机openstack的搭建 内存7G以上.借鉴别人的自己添加修改的,经实践成功. 安装CentOS 7.3 成功引导系统后,会出现下面的界面 界面说明: Install CentOS 7 #安装Ce ...
- OpenStack搭建过程(随笔搭建)
项目二 理论知识 1.项目需求分析 1.基本概念 需求分析是指理解用户需求,就用户的功能需求与客户达成一致,并需要估计项目风险和评估项目代价,最终形成开发计划的一个复杂过程.在这个过程中,用户是处在主 ...
最新文章
- webp-imageio 如何编译及使用
- EXCEL中数据的自动匹配主要包含的内容
- 关于最近使用文档的几个技巧
- Python基础(5) - 文件
- delphi 7 学习步骤
- 工作235:splice
- python 文件状态_Python:如何访问文件的状态
- windows下使用ffmpeg进行视频转换和截图。
- [实验流体力学][Matlab] pi 定理的应用
- mysql zip win10安装_mysql 8.0.16 Win10 zip版本安装配置图文教程
- 《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一2.8 黄金分割的三分法构图...
- 你应该知道的Redis过期键和过期策略
- linux系统商店下载的软件到哪了,linux下使用第三方商店安装应用
- Android开发——减小APK大小
- Readyboost功能
- springboot 2.5.3 ActiveMQ踩坑笔记
- 抖音如何开通直播教程
- word段落居中的快捷键_Word段落设置中的小技巧和快捷键推荐
- 小程序基础篇-视图与逻辑
- 新页微SOC无线充芯片NY7506A
热门文章
- python 之 pandas 详解
- html ul 自动换行,用word-wrap来解决固定大小ul下的每条li中内容太多时不自动换行问题...
- 《嵌入式实时操作系统uC/OS-II》学习摘要
- ifndef和if !defined的使用
- Eslint快速入门和使用技巧-教程
- 【Pytorch深度学习实践】B站up刘二大人之BasicCNN Advanced CNN -代码理解与实现(9/9)
- 计算机视觉论文-2021-06-03
- 抖音APP告诉我们什么叫真正的性能优化天花板
- Unity 粒子特效预览工具拓展
- 城市公交系统车站客流量预测的研究现状