新浪博客

利用virtualbox部署本地开发测试环境

2023-04-07 13:13阅读:
# 创建虚拟环境:
安装 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')
config.vbguest.auto_update = false
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 的条件判断介绍和使用方式详解!

我的更多文章

下载客户端阅读体验更佳

APP专享