虚拟机 Vagrant

第30天了,来聊聊 vm/虚拟机 ...

如果只是想练习Linux的CLI,一定要在GCP上开instance吗?
其实有很多工具可以先让开发者在本地开发环境进行作业,例如Vagrant。甚至是容器化开发环境的 Laradock。

因为前面都在使用GCE,基本上都是纯命令列介面(Command-Line Interface,CLI),像这样

https://ithelp.ithome.com.tw/upload/images/20201011/201252639QAAzLlu0v.png

从 masOS介面移转过来时难免会有些不习惯,毕竟Google Cloud Platform 免费额度有限,虽然有都市传说开一台instanece几分钟内删掉就不用钱的都市传说。但还是建议有些 Linux指令练习可以先透过一台vm去在本地开发时做练习。

友人推荐使用 Vagrant,用起来确实蛮顺手的,建议可以玩玩看。熟练後在 GCE就可以开小一点规格的instance,加大虚拟记忆体,就可以顺畅地部署 side project,本篇也会介绍Linux如何执行swap的部分。

下载 Virtual Box

Vagrant 底层还是透过 virtual box 这套虚拟机管理工具建构。
因此可先至 virtualbox官网 下载开发环境。

Vagrant

先到官网下载

https://www.vagrantup.com/downloads

确认版本

vagrant -v

Vagrant 2.2.9

安装vagrant box

vagrant 提供许多客制化的开发环境,例如ubuntu、centOS等。
官网提供许多参考,https://app.vagrantup.com/boxes/search

https://ithelp.ithome.com.tw/upload/images/20201011/20125263gh0NgT1BCJ.png

确认已安装的

vagrant box list

==> vagrant: A new version of Vagrant is available: 2.2.10 (installed version: 2.2.9)!
==> vagrant: To upgrade visit: https://www.vagrantup.com/downloads.html
ubuntu/trusty64 (virtualbox, 20190514.0.0)

vagrant 基本指令

选择启动哪一个box vagrant init ubuntu/trusty64

  • 执行结果
    https://ithelp.ithome.com.tw/upload/images/20201011/20125263YpYNExwUSM.png

开始启动 vagrant up

  • 执行结果後可以看一下 Virtual Box 是否有东西运行中
    https://ithelp.ithome.com.tw/upload/images/20201011/20125263gJcTj2gJy0.png

进入vm vagrant ssh

  • 执行结果
    https://ithelp.ithome.com.tw/upload/images/20201011/20125263tLolegh83C.png

关闭vm vagrant halt

  • 可至 Virtual Box 确认是否关闭
    https://ithelp.ithome.com.tw/upload/images/20201011/20125263Pu43ZdUcv6.png

重启vm vagrant reload

删除vm vagrant destroy

swap 实作 on vagrant

目的

在某些side project可能储存空间需求不大,但vm记忆体太少时可能会有安装环境上的问题,e.g. MySQL基本安装需要一定的RAM,

以下是透过vm练习切割虚拟记忆体的步骤与说明。

步骤:

先检查记忆体配置状态 free -m
https://ithelp.ithome.com.tw/upload/images/20201011/201252633sskIdnq1Y.png

建立并前往 swap资料夹
mkdir -p /var/swap
cd /var/swap

** Generate swap file 设定虚拟记忆体大小**
//1M * 2000 ~= 2GB of swap memory
dd if=/dev/zero of=swapfile bs=1M count=2000

swap相关指令
建立 Linux swap area
mkswap /home/vagrant/swapfile

调整系统设定
``sudo vi /etc/fstab``
```
/home/vagrant/swapfile swap swap defaults 0 0
```

允许装置与档案 paging 与 swapping 
``sudo swapon -a``

重开vm後再检查记忆体状态
https://ithelp.ithome.com.tw/upload/images/20201011/20125263mpRUvrEibI.png


30天铁人赛结语

透过 30天的文章,分享我在使用Laravel开发与部署GCE的经验。

还有一些东西没分享到, 例如可以第三种登录时建立token的方式JWT、第三方登入分别使用内建的 Socialite或原生服务的Oauth机制、寄信验证机制的 Mail trap、如果想自己刻画面用blade.php、怎麽在同一份专案前後端分离时call 自己的API...等等。

重新写成铁人赛的过程中,也是重新检视自己学习状况。希望来年还有机会再参加铁人赛。


参考资料
https://www.vagrantup.com/docs/cli/destroy
https://blog.csdn.net/boling_cavalry/article/details/99702719
https://yuanchieh.page/posts/2020-04-12_vagrant-教学-一键启动配置开发环境
https://ithelp.ithome.com.tw/articles/10202559
https://stackoverflow.com/questions/20667761/composer-killed-while-updating
http://leadtosilverlining.blogspot.com/2019/04/add-swap-to-vm-instance-of-gcp.html
https://exfast.me/2018/11/linux-added-virtual-memory-swap/
https://askubuntu.com/questions/898941/how-to-check-ram-size
https://www.itread01.com/p/148373.html


<<:  Day 30 赛後感想

>>:  第29天:解构语法、余集(...)

Day 9 情报收集 - Information Gathering (netmask)

今天要介绍netmask,是可以让我们自由转换各种不同表示类型的网路地址以及子网遮罩,在划分子网路的...

[C]如何写一个 makefile

func1.h #ifndef _FUNC1_H_ #define _FUNC1_H_ void f...

Day4 制作草稿

客户:「我希望这个东西可以帮我洗碗」 我:「这个需求简单明了」 客户:「」 这个时候就需要Wiref...

Android Curv Gradient 曲线渐层

前言 平常我们使用的渐层方式通常都是在drawable用Xml配置参考 或者是在程序中设置Paint...

[Tableau Public] day 19:试着分析appstore资料集-4

今天来看看所有appstore商店中的app,从容量最大到最低的排序,好奇容量前五名大的app是什麽...