如何在 Windows10 系统下愉快的安装 Homestead

仅以此文祭奠我两天之内踩下的 N 个坑

前言

众所周知,Laravel 对开发环境十分苛刻(难伺候),这是高效率开发所需要付出的代价。为了使线上的生产环境和线下的开发环境达到统一,同时也让不同开发者在不同的平台上能在同一环境下开发,Laravel 官方推出了 Homestead 来解决这个问题。然而,身处大陆,我们是很难像歪果仁一样体验 Homestead 带来的快感,更多的是遭受安装时带来的痛苦与折磨。在写这篇文章的前两天里,我踩过了无数个坑,把各大虚拟桌面平台都试了个遍,最终才摸清了这一摊儿浑水。

安装之前

Homestead 说白了就是一个封装好了的 Vagrant Box。那么,Vagrant 是啥?Laravel 文档是这么解释的:

Vagrant 提供了一种简单、优雅的方式来管理和配置虚拟主机。

是的,Vagrant 就是一个虚拟机管理工具。注意,它仅仅是管理而已,并不能够独立的创建虚拟机。因此,它还需要与虚拟机软件配套使用。在这里,我们用 Oracle VirtualBox

你可能会问了,为什么不用 Win10 自带的 Hyper-v ?Homestead 不是也支持吗?

是的,Homestead 是支持 Hyper-v。但 Hyper-v 在我的电脑上有一个非常糟糕的表现:

端口无法正常的映射到虚拟机上,即我不能使用 127.0.0.1 这个地址与虚拟机进行通信。一旦我要连接虚拟机上的数据库,我必须要找到虚拟机的内网IP(172开头),才能连接上。然而,每重建一次 Box 这个 IP 就会刷新一次,我实在是没有耐心总去找它的 IP,所以当我发现了这个情况并且找不到解决办法后,就直接把它删了 …

至于 VMware Desktop,需要 Vagrant 的付费插件才能使用(79刀),在这里也暂时不讨论。

所以,在安装 Homestead 之前,你需要先安装 VirtualBox 和 Vagrant。

另外,所有需要下载的软件,我都将在文末附上百度网盘。

开始安装

安装 Homestead Vagrant Box

如果你不在大陆,你可以直接使用以下命令飞速安装 Homestead Vagrant Box:

1
vagrant box add laravel/homestead

可是你身处大陆,就注定不会这么顺利。

Vagrant 的文件都放在 Amazon S3 云存储上,由于 GFW 的原因,S3 的下载速度奇慢,在我的电脑上,它很少超过 80k/s,甚至时不时的降到 0。所以,我们需要从其他不受 GFW 干扰的地方下载,比如文末附上的百度网盘。

如果你有梯子,可以访问以下链接从官方下载:

1
https://app.vagrantup.com/laravel/boxes/homestead/versions/8.0.1/providers/virtualbox.box

其中 8.0.1 是版本号,你可以将它替换为这个页面的最新版本。

下载后,在该文件的同一目录下建立 metadata.json,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"name": "laravel/homestead",
"versions":
[
{
"version": "8.0.1",
"providers": [
{
"name": "virtualbox",
"url": "virtualbox.box"
}
]
}
]
}

同样的,你可以将8.0.1替换为最新版本号。

安装 Homestead

先克隆官方仓库:

1
git clone https://github.com/laravel/homestead.git ~/Homestead

但是,该仓库的主分支是不稳定的,我们需要切换到打过标签的稳定版本。

1
2
git tag #查看所有的稳定版本的标签
git checkout v8.0.1 #切换到稳定版本

接下来,你只要初始化 Homestead ,就可以使用它了:

1
./init.bat

生成密匙

打开 Homestead.yml 你会发现有一行这样的:

1
authorize: ~/.ssh/id_rsa.pub

这说明登录 Homestead 的虚拟机需要用宿主机的密匙,密匙默认存放在用户目录下的 .ssh 文件夹,如果你当前的用户没有密匙,请使用以下命令来生成:

1
ssh-keygen.exe

一路回车

配置 Homestead.yml

以下即是一份标准的 Homestead 配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
---
ip: "192.168.10.10"
memory: 1024 #虚拟机最大使用内存
cpus: 1 #虚拟机最大占用核心
provider: virtualbox #使用的虚拟机软件

authorize: ~/.ssh/id_rsa.pub

keys:
- ~/.ssh/id_rsa

# 挂载文件夹
folders:
- map: "G:/code" #你的电脑上的代码文件夹
to: /home/vagrant/code #在虚拟机内的路径

# 站点配置
sites:
- map: homestead.test #域名 需要提前修改Hosts文件,使其指向本机(127.0.0.1)
to: /home/vagrant/code/public #Web 根目录

# 初始数据库
databases:
- homestead
- smartboard

# 其他功能
features:
- mariadb: false
- ohmyzsh: true
- webdriver: false

# 端口映射
# ports:
# - send: 80
# to: 80
# - send: 7777
# to: 777
# protocol: udp

Homestead 很强大,它所提供的功能远不止这些,你可以查询文档了解更多。

启动 Homestead

在 Homestead 目录下执行:

1
vagrant up

进入虚拟机

你可以在 Homestead 目录下执行:

1
vagrant ssh

或者,你也可以直接通过 SSH 连接虚拟机,这里我以 Fluent Terminal 为例:

Fluent Terminal 的 SSH 连接选项

接下来,你就可以开始正常的开发工作了!

其他

由于 Homestead 并没有为全球化做很多工作,你可能还需要将软件源更换为大陆的,进入 Homestead 执行:

1
2
3
4
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
npm config set registry https://registry.npm.taobao.org
yarn config set registry https://registry.npm.taobao.org

我踩过的万丈深坑

执行 vagrant up 后虚拟机无法启动

显示以下错误信息:

1
Call to WHvSetupPartition failed: ERROR_SUCCESS (Last=0xc000000d/87) (VERR_NEM_VM_CREATE_FAILED).

这是因为 Hyper-v 与 VirtualBox 不兼容导致 VirtualBox 无法正常启动虚拟机。

网上大部分教程都会教你打开 启用或关闭 Windows 功能 并在里面关闭 Hyper-v 功能,或者叫你在命令行里执行以下代码:

1
bcdedit /set hypervisorlaunchtype off

事实上这是错误的(在我的电脑上它一点也不起作用)

VirtualBox 从 6.0 版本开始,在 Windows 上会尝试使用 Hyper-v 作为虚拟引擎,因此你不需要关闭 Hyper-v

在启用 Hyper-v 后,我的虚拟主机正常运转

宿主机的文件夹无法挂载到虚拟主机上去

不管 Homestead 里的 folders 怎么样配置都无效

这可能是你的路径内含有中文字符造成的。

当初我正是因为这个原因才从 VirtualBox 跳到 Hyper-v,发现还是挂载不上去

npm install 报错

1
error An unexpected error occurred: "EPROTO: protocol error, symlink '../../../parser/bin/babel-parser.js' -> '/home/vagrant/smartboard/node_modules/@babel/core/node_modules/.bin/parser'".

你可以用管理员命令行执行 vagrant up 来解决这个问题

或者你也可以在命令后面加上 --no-bin-links参数:

1
npm install --no-bin-links

修改完 Homestead.yml 文件后不生效

Homestead 不会自动监控配置文件,需要重载容器才能使其生效。

在 Homestead 文件夹下执行:

1
vagrant reload --provision

写在后面

我并不建议 Laravel 的初学者一上来就开始用 Homestead,因为其繁琐的安装很可能会消磨掉你开发的兴趣,就像我自己在开发之前澎湃的心,在经历过两天的折磨后也早已化成了一滩静水。

初学者,大胆的用 WAMP 或者 Laragon 这种集成环境吧,这不是一种错误的做法,根据自己的情况灵活地处理开发环境是一种聪明的做法!等到真正需要用上宝剑的时候,再把宝剑磨好未必就已经迟了。你热情向上渴望学习的心比什么都重要!

另外,我个人并不十分推荐使用 Homestead。为了使用它,需要安装两个巨大的依赖软件,还需要踩这么多的坑,未免太过于繁琐。有时候太过灵活了就是臃肿,太过于臃肿了就是愚昧。

说起我为什么要用 Homestead,不过是一种人云亦云的从众心理,在国内的 Laravel 开发圈内,Laravel 开发一定要用 Homestead 的思想大行其道。只要能好好开发,能达到一样的效果,为什么就非用 Homestead 不可?我们身处大陆,Homestead 对我们并不友好,为什么还要非用它不可?

值得高兴的是,基于 Docker 的轻量化开发环境 LaraEdit 正在孕育之中,而同样基于 Docker 的 Laradock 已诞生良久。相信在将来的开发环境上,我们会有更多灵活的选择。

附件

百度网盘

提取码:fine

参考

给自己的Hexo博客加上RSS订阅

前言

Hexo 本身是不支持 RSS 订阅功能的,
因此我们必须要通过第三方插件实现这一功能。
在这里,我选择使用 hexo-generator-feed 插件。

安装

  1. 使用NPM安装该插件
    在博客目录下执行:

    1
    npm i hexo-generator-feed --save
  2. 配置插件
    _config.yml 内写入:

    1
    2
    3
    4
    5
    6
    7
    8
    feed:
    type: atom #订阅类型 rss2 或者 atom
    path: atom.xml #生成订阅文件的名称
    limit: 20 #订阅中的最大帖子数 0 或 false 表示不限制
    hub:
    content: #设置 true 以使 Feed 包含全部内容
    content_limit: 140 #摘要的字数限制,仅在 content 设置为 false 时生效
    content_limit_delim: ' ' #在使用 content_limit 限制摘要字数时,则仅在达到字数限制之前取该分隔符最后一次出现之前的内容。默认不启用
  3. 生成订阅文件
    在每次生成文件时,都会自动生成订阅文件

    1
    hexo generate

接下来你就会发现根目录下出现一个 atom.yml 文件

  1. 在博客上添加 RSS 订阅 链接
    大部分主题都已经内置了 RSS订阅 的选项,
    我们只需要填入订阅地址即可
    例如 Icarus
    Icarus 配置文件

现在别人就可以通过 RSS 订阅你的博客了:
效果图

心情记,写给脾气不好的自己

你有时候太冲动了,将一发意气用于所有。

你有时候太幼稚了,总想着让别人迁就着你。

你有时候太固执了,一定要别人同意你的观点。

你知道你很会批评别人,但这并不是你的优点。

现在你能够靠一时的优势欺压别人,可是不会永远这样下去。

你要学会站在别人的角度思考,想想别人的感受。

生气时要压制住怒火,不要被它一时冲昏了头脑。

你得佛系一点,不要把每件事情看得太重。

不要把担子都往自己身上扛,总有一天会累垮的。

别人做的怎么样,对你都没有太大的影响。

把心思全部花在自己身上,你才会越来越优秀。

加油,你会一天比一天好的。

Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

MyBalance安装文档

序言

因为编写程序时选用的底层框架为 Laravel ,对运行环境要求十分严格,并且需要安装众多的依赖,所以为了简化安装步骤并降低安装难度,将使用Docker容器化技术来安装程序。如果对PHP运行环境配置十分了解,亦可自行配置并安装依赖。

该程序在Linux平台上开发、运行和测试,未对Windows平台进行过兼容性开发,也不曾在该平台上测试过。若需在此平台上运行,推荐使用Docker虚拟化容器技术,具体步骤亦可参照本文。

该程序已在以下的系统成功安装并运行:

  • Ubuntu 16.04
  • Deepin 15.9
  • Manjaro 18.0.3

本文将以Ubuntu为例介绍该程序的安装。

硬件要求

  • 内存 ≥ 2G (如果不够可创建SWAP分区)
  • CPU ≥ 1核
  • 硬盘 ≥ 10G

详细步骤

1. 安装依赖程序

连接至远程服务器,输入以下命令,将会使用Ubuntu默认的包管理器(APT)安装Git、Docker、Docker Compose、Composer等程序,并自动将当前用户加入docker组。

1
2
3
4
5
6
7
8
9
sudo apt-get update
sudo apt-get install git docker.io php7.0-cli
sudo groupadd docker
sudo usermod -aG docker $USER
sudo curl -L 'https://get.daocloud.io/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)' -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
php composer-setup.php
sudo mv composer.phar /usr/local/bin/composer

2. 使用加速源(可选)

因为Docker和Composer的默认镜像源都在国外,可用性较差,在国内安装本程序时应修改Docker和Composer的镜像源为国内的加速源。请在远程服务器上输入以下命令:

1
2
curl -sSL https://get.daocloud.io/daotools/set\_mirror.sh | sh -s http://f1361db2.m.daocloud.io
composer config -g repo.packagist composer https://packagist.laravel-china.org

3. 上传程序至服务器

你可以将程序源代码使用FTP或SFTP的方式上传到服务器上,也可以使用Git直接克隆本程序的最新源代码。若使用Git克隆源代码,请在远程服务器上执行:

1
git clone https://git.dev.tencent.com/Seth24/MyBalance.git

若你选择手动上传源代码,请不要忘记执行以下命令:

1
2
3
rm -rf laradock
git init
git submodule add https://github.com/Laradock/laradock.git

4. 安装程序依赖

进入程序主目录并执行以下命令,将会使用Composer安装程序的依赖,并使用Git克隆项目容器运行环境的配置Laradock

1
2
3
composer install --ignore-platform-reqs
git submodule init
git submodule update

5. 配置并安装程序

进入项目下的laradock目录,输入以下命令复制运行环境的配置文件:

1
cp env-example .env

接下来请编辑.env 文件,进行个性化修改。保存文件后,输入以下命令,启动并进入程序的运行容器

1
2
3
4
docker-compose up -d nginx mariadb
docker-compose exec workspace bash
cp .env.example .env
php artisan key:generate

编辑.env 文件并按实际情况进行配置。在这里数据库的地址是mariadb,端口为3306,默认账号和数据库为default,密码为secret。保存好文件后请执行以下命令进行程序数据库迁移(格式化):

1
php artisan migrate

6. 创建管理员账户

请在项目的运行容器中执行以下命令以进入管理员创建向导,根据提示创建管理员账号:

1
php artisan create-admin

注:为保护账号安全,在输入密码时密码将被隐藏

至此,安装就已经结束了。

参见

  1. 《Laravel 5.5 中文文档》安装
  2. 《Laravel 5.5 中文文档》部署
  3. 《Laradock 中文文档》

AWS踩坑记

我还顽强活着 …

已经好久没来这里了,博客里的草都快长到人高了,所以导致了一些不好的事情发生,经过一系列折腾后终于把博客变成了现在的样子。

我的博客一直是运行在AWS上,靠免费计划苟活着,这是最近发生的一切的开端。今年五月份起,我莫名其妙地收到了来自AWS的账单,起初没有太在意就没有去管它,直到六月底AWS因为账单未结清停掉了我的账户,我的博客和梯子被迫关闭了。在后来几天里,我花了大价钱去开一张虚拟信用卡,以高额的汇率支付完所有账单和手续费后,我的博客才得以恢复。现在算算,当初花的费用已经远超过了购买一台同时长VPS的费用,这倒是印证了一句话:免费的就是最贵的。

在耍了一次流氓以后,AWS就显露了它的原形,给我发来的账单里面的收费条目越来越多。我有些不耐烦,暑假里索性新开了一个账号并将我所有的服务迁移过去,老账号任其自生自灭,我的博客就这样撑过了暑假。

就在昨天我来博客除草,然而怎么也创建不了文章,界面也是稀奇古怪的:

Wordpress Boom..

一番谷歌百度后无果,打开博客的数据库一看差点吓到地上,所有表的键、约束、默认值都没有了,数据像被八国联军轰炸了一团糟。问题出在迁移上,我是使用AWS提供的关系型数据库迁移工具DMS进行迁移的,这坑货建表时居然不会复制源表的键,这样就算了,源表与目标表结构不同还能把数据硬生生灌进去,这波操作骚的一批。

Database Boom…

新创建了一个博客,再用Navicat的结构同步修复完数据库,可算是能正常写文章了。炸妈AWS,看我以后还用你吗hhhh

最后附一张AWS发来的账单,AWS会不会学迪士尼发律师函??

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×