利用virtualbox部署本地开发测试环境
(2023-04-07 13:13:07)| 分类: linux | 
# 创建虚拟环境:
安装 virtualbox:   
vargrant 的使用: vagrant 指南
   
vagrant:   
vagrant 中文教材:   
vagrant 常用命令:   
镜像下载:   
ssh 客户端:
## 常用命令:
vagrant init # 初始化 vagrant init #
初始化一个指定   
box vagrant up #
启动虚拟机   
vagrant halt # 关闭虚拟机   
vagrant reload #
重启虚拟机   
vagrant ssh # SSH
至虚拟机   
vagrant suspend #
挂起虚拟机   
vagrant resume #
唤醒虚拟机   
vagrant status #
查看虚拟机运行状态   
vagrant provision #重新应用更改 vagrant
配置   
vagrant destroy #
销毁当前虚拟机   
vagrant reload --provision
#按新配置重启   
vagrant up --provision
#按新配置启动   
vagrant box list # 查看本地 box
列表   
vagrant box add # 添加 box
到列表   
vagrant box remove # 从 box
列表移除   
vagrant package --output local-centos.box # 将虚拟机打包为一个.box
的文件
## 安装虚拟机
下载镜像:vagrant 官方 generic/centos8
镜像   
vagrant box add xxx.box --name generic-centos8 #安装目录
C:\Users\lupin\.vagrant.d\boxes   
vagrant box list
#确认是否成功   
mkdir demo   
cd demo   
vagrant init generic/centos8 #会在 demo 目录下生成 Vagrantfile
的配置文件,其中 config.vm.box = "generic/centos8"对应上面的 name vagrant up
#启动虚拟机,在 virtualbox 中可以登录,用户名/密码 vagrant/vagrant 错误:Guest Additions
seems to be installed () correctly, but not running Vagrantfile
在Vagrantfile增加:
```
#可以防止反复安装 Guest Additions
if Vagrant.has_plugin?("vagrant-vbguest")
end
#文件夹共享
config.vm.synced_folder ".", "/vagrant"
```
## 编译Guest Addiotions 参考
1,下载 develop-kernel:在
kernel-devel-4.18.0-348.el8.x86_64.rpm   
2,安装 sudo yum install
kernel-devel-4.18.0-348.el8.x86_64.rpm   
3,安装其他库 sudo yum install gcc make
perl   
4,安装,mount 对应 Guest Addiotions 的 iso 光盘,执行
VBoxLinuxAdditions.run,安装过程中会缺少一些库文件,可以使用yum provides
libXt.so.6   
#搜索对应的包并安装:   
sudo yum install
libXt   
sudo yum install
libXext   
sudo yum install libXmu \
## 登录虚拟机,修改centos:允许 ssh 登录:参考
配置文件/etc/ssh/sshd_config   
检查监听端口: 22   
监听地址 0.0.0.0 ::   
检查允许远程登录:PermitRootLogin
yes   
检查开启用户名密码验证:PasswordAuthentication
yes   
重启:sudo systemctl restart sshd  \ 
# VSCODE
GIT:https://git-scm.com/download/win \
VScode :https://code.visualstudio.com/Download \
## vscode 学习
https://code.visualstudio.com/docs/introvideos/basics
界面介绍 总体布局 菜单,功能(文件、搜索、git、运行、插件),面板 \
中文插件安装(搜索 chinses 插件)\
颜色主题 (左下角-主题-颜色主题-上下键)\
文件主题(左下角-主题-文件主题-安装)\
添加文件、文件夹等基本操作\
## vscode
十大特性:https://blog.csdn.net/Zhangguohao666/article/details/105676173
多光标编辑(Multi-Cursor Editing)- alt+click \
智能感应(intelliSense)- 获取代码和外部模块的代码帮助和参数建议 \
行操作(Line Actions )- Alt + UpArrow 和 Alt + DownArrow
向上或向下移动选定行;Ctrl + Shift + K 删除整行; Ctrl + / 来注释掉光标所在行、切换注释 \
重命名重构(Rename Refactoring)- 快速重命名代码库中的符号(比如变量名、函数名)将光标选中符号,按 F2
键 \
格式化(Formatting)- 格式化整个文档 Shift + Alt + F;保存时自动格式化整个文档:Ctrl + ,
输入 editor.formatOnSave \
代码折叠(Code Folding) -折叠 Ctrl + Shift + [;展开 Ctrl + Shift + ];鼠标
\
错误和警告(Errors and Warnings)-按 F8 键可以按顺序在错误之间导航,并查看详细的错误消息
\
片段(Snippets)- 花更少的时间输入片段;,需安装 python snippets,for 例子 \
Emmet - 只需要敲一行代码就能生成你想要的完整 HTML 结构等(极大方便前端开发)
ul>li.item$\*5 \
JavaScript Type Checking- 使用零配置的 TypeScript 对 JavaScript
文件执行类型检查。在文件顶部添加 "// @ts-check"或者“// @ts-nocheck” \
## 插件
新建 index.html 使用!内置模板库自动生成 html5 框架(!) 安装 open in default
browser 插件可以直接预览(右键) \
Live Server 插件 \
Auto Rename Tag 自动修改闭环标签 \
carbon-now-sh 生成代码图片 \
prettier 代码格式化 1、安装插件-点击设置-搜索 save-format on save
2、右键-使用格式化文档-配置默认格式化程序 \
### vscode 相关设置(提升代码阅读体验、提升编程开发效率)
字体大小 \
字体(JetBrains Mono~),下载https://www.jetbrains.com/lp/mono/
-解压-安装(右键)-设置添加 JetBrains Mono \
光标 设置-文本编辑器-光标-控制是否启用平滑插入动画 \
关闭代码缩略图 设置-搜索 minimap \
滚轮缩放 设置-搜索 Mouse Wheel Zoom ctrl+滚轮 \
## 登录 vscode 安装 remote-ssh 插件
vscode:点击 remote-ssh 连接
vagrant@localhost:2222   
安装 ssh 客户端并验证登录 localhost:2222(在 windows cmmand 窗口用 ssh
命令登录登录命令:ssh -l vagrant 192.168.1.105 -p 2222) 
客户端:比如 putty    
错误 :“vscode 远程连接提示过程试图写入的管道不存在”,是本地
c:\\Users\xxx\.ssh\known_hosts 文件定义的 host 有冲突,删除相同的 host 行就可以了,参见
*
## ssh 免密登录:
ssh-keygen -b 4096 -t rsa 生产密钥对,在.ssh 目录下产生
id_rsa(私钥)、id_rsa.pub(公钥) \ ssh-copy-id username@remote-server
#copy 所有公钥到 remote-server(linux)的 username 用户,会生成 authorized_keys
文件如果是 windows,没有 ssh-copy-id,可以直接将 id_rsa.pub 内容复制到
authorized_keys,注意.ssh(700)和
authorized_keys(600)的权限   
用户目录下配置文件:c:\Users\lupin\.ssh\config
```Host localhost
HostName localhost
Port 2222
User lupin
IdentityFile c:\Users\lupin\.ssh\id_rsa
```
## 登录命令:ssh localhost
参考 vscode 参考:   
免密登录: (vscode) (通用)
## 主机上写一个启动 shell
```
cd \
cd vagrant\centos8
vagrant up
cmd /k vagrant ssh
```
## 网络设置
Vagrant 手册之网络:   
Vagrant (三) - 网络配置   
Vagrant 可以指定三种网络:端口转发(Forwarded Ports),私有网络(Private
Network),公有网络(Public Network)
```
config.vm.network :forwarded_port, guest: 80, host:
8080 
config.vm.network :private_network, ip:
"192.168.1.104" 
config.vm.network :public_network #dhcp
```
# 创建一个应用
## nodejs 安装 node.js
```
wget
https://nodejs.org/dist/v18.13.0/node-v18.13.0-linux-x64.tar.xz 
tar -xvf
node-v18.13.0-linux-x64.tar.xz 
sudo ln -s /home/vagrant/node-v18.13.0-linux-x64/bin/npm
/usr/local/bin/ 
sudo ln -s /home/vagrant/node-v18.13.0-linux-x64/bin/node
/usr/local/bin/ 
sudo ln -s /home/vagrant/node-v18.13.0-linux-x64/bin/npx
/usr/local/bin/ 
node -v 
npm -v npm config get registry #查看源 
#更换 npm 源为淘宝镜像: 
npm config set registry
```
## 生成 demo 应用 它在内部使用 Babel 和 webpack
```
npx create-react-app my-app
cd my-app 
npm start #会自动打开
```
注意:不能在vscode里执行`错误:Error: ENOSPC: System limit for number of
file watchers reached, watch '/home/vagrant/my-app/public' 参考:
执行:echo fs.inotify.max_user_watches=524288 | sudo tee -a
/etc/sysctl.conf && sudo sysctl -p
# ansible
## 安装 python3.9 参考:
wget    
yum install -y gcc patch libffi-devel python3-devel zlib-devel
bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel
tk-devel gdbm-devel xz-devel 有 2
个包上面无法直接安装,只能手动安装   
安装 db4-devel
```
wget
https://pkgs.dyn.su/el8/base/x86_64/libdb4-4.8.30-30.el8.x86_64.rpm 
rpm -ivh
libdb4-4.8.30-30.el8.x86_64.rpm 
wget
https://pkgs.dyn.su/el8/base/x86_64/libdb4-devel-4.8.30-30.el8.x86_64.rpm 
rpm -ivh libdb4-devel-4.8.30-30.el8.x86_64.rpm
```
安装 libpcap-devel
```
wget
https://vault.centos.org/centos/8/PowerTools/aarch64/os/Packages/libpcap-devel-1.9.1-5.el8.aarch64.rpm 
dnf --enablerepo=powertools install libpcap-devel
#需要下载吗?
```
编译 python
```
tar -zxvf Python-3.9.10.tgz cd
python-3.9.10 
./configure 
make 
sudo make install
```
debian 安装   
ansible sudo apt
update   
sudo apt install ansible
-y   
sudo ansible
--version   
cendos 安装   
ansible sudo yum install
python3   
sudo yum install python3-pip -y #应该已经有了 pip
工具   
sudo python3 -m pip install --upgrade pip
#升级pip   
python3 -m pip install ansible #通过 python 安装 ansible,可能安装较低版本
ansible \
## 安装 git sudo apt-get install git
## ansible常用命令
/usr/bin/ansible    Ansibe AD-Hoc
临时命令执行工具,常用于临时命令的执行   
/usr/bin/ansible-doc     Ansible
模块功能查看工具   
ansible-doc -l #获取全部模块的信息;ansible-doc -s MOD_NAME
#获取指定模块的使用帮助   
/usr/bin/ansible-galaxy   下载/上传优秀代码或 Roles 模块 的官网平台,基于网络的
/usr/bin/ansible-playbook Ansible
定制自动化的任务集编排工具   
/usr/bin/ansible-pull    Ansible
远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)   
/usr/bin/ansible-vault    Ansible 文件加密工具
/usr/bin/ansible-console   Ansible 基于 Linux Consoble
界面可与用户交互的命令执行工具 \
## ansible 命令示例
```
sudo mkdir /etc/ansible sudo sh -c "echo "localhost" >
/etc/ansible/hosts" 
sudo yum install nginx 
ansible localhost -b -c local -m service -a "name=nginx
state=started" systemctl status nginx # 确认状态
```
## ansible-playbook 命令示例
```
git clone
https://github.com/devops-book/ansible-playbook-sample.git 
cd ansible-playbook-sample 
ansible-playbook -i development site.yml ansible-playbook -i
production site.yml 
curl localhost #验证 另外脚本有一个小 bug,变量命名的问题
```
使用 ansible 好处:管理一组服务器、留下执行痕迹、幂等性、-C 参数检测对服务器的影响
## roles 目录描述:
roles/project 项目名称
(然后再该项目下创建子目录)   
files/ 存放由 copy 或 script
模块等调用的文件   
templates/ template
模块查找所需要模块文件的目录   
tasks/ 定义 task,role 的基本元素,至少应该包含一个名为 main.yml
的文件;其他的文件需要在此文件中通过 include
进行包含   
vars/ 定义变量,至少应该包含一个名为 main.yml 的文件;其他的文件需要在此文件中通过 include
进行包含   
meta/ 定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为 main.yml 的文件,其他文件需在此文件中通过
include 进行包含   
default/ 设定默认变量时使用此目录中的 main.yml 文件 \
## 对另外一台服务器进行配置
1、创建 2 台虚拟机(IP1:192.168.33.11,IP2:192.168.33.10),private
network 方式,保证两台虚拟机可以互通   
2、设置 ssh,保证一台 vagrant 账好可以 ssh
到另外一台   
3、设置免密,ansible 服务器免密登录到被管理服务器 ssh-copy-id
   
4、设置/etc/ansible/hosts 增加地址
192.168.33.11   
5、安装 nginx   
6、测试 ansible 命令 ansible 192.168.33.11 -b -m service -a
"name=nginx state=started" \
# 如何制作一个 vagrant box
vagrant package --base --output #注意:虚拟机的名字是 virtualbox
里的虚机名字
## 修改 vagrant 公钥
完成box制作之后,需要修改公钥才能用ssh登录
```
wget -O .ssh/authorized_keys 
chmod 700 .ssh 
chmod 600 .ssh/authorized_keys 
chown -R vagrant:vagrant .ssh
```
vagrant key
```
ssh-rsa
AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ==
vagrant insecure public key            
```
## 参考
Ansible 之 roles(角色)详解
vagrant plugin install vagrant-vbguest vagrant up
--provider=virtualbox
Ansible 的条件判断介绍和使用方式详解!
							
		后一篇:C++实现回调
					
 加载中…
加载中…