laravel环境配置过程记录
Posted MakerGYT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel环境配置过程记录相关的知识,希望对你有一定的参考价值。
当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放
一、环境配置过程
1.开发环境
基本环境:
本地主机:ubuntu 16.04 amd64
已安装环境:npm 6.4.1,git 2.7.4,sublime 3176
1.1 一点认识:
开发时会出现本地环境的不确定变数,且一般是唯一的,不利于版本切换。在团队协同中,环境的差异可能导致配合的巨大问题。于是,基于vitual box产生了vagrant,而laravel官方又基于vagrant推出homestead,从而在开发时基于虚拟机工作,本地程序工程映射到虚拟机内,随时可以撤销、共享环境,不会对本地产生影响。这一点认为与python的virtualenv功能类似。
1.2 homestead的安装过程
根据其依赖关系,需要依次完成vitualbox、vagrant、homestead的安装与配置,由于ubuntu系统基于Debian GNU/Linux,基本可通过deb安装包进行:
-
vitualbox:https://www.virtualbox.org/wiki/Downloads -
vagrant:https://releases.hashicorp.com/vagrant/2.2.2/vagrant_2.2.2_x86_64.deb
刚开始采用大部分教程中的
apt-get
方式,但到后边发现这样安装的版本是1.8.1,与homestead不匹配(require >=2.1.0),于是采用官方的deb。然后加入laravel的盒子:vagrant box add laravel/homestead
-
homestead:
git clone https://github.com/laravel/homestead.git cd ~/Homestead git checkout v7.18.0 bash init.sh
以上是第一次时采用官方的安装文档,但是由于不可避免的网络问题,更重要的是在并不熟悉laravel的情况下,需要将环境过程尽可能简化与透明,于是采用了适用于国情的 Homestead 安装包:http://download.fsdhub.com/lc-homestead-6.1.1-2018090400.zip 。在回滚上述环境后,重新开始安装:【参考】
vagrant box remove laravel/homestead
#完全清理上述环境及文件
wget http://download.fsdhub.com/lc-homestead-6.1.1-2018090400.zip
unzip lc-homestead-6.1.1-2018090400.zipcd lc-homestead-6.1.1-2018090400vagrant box add metadata.jsoncd ~
git clone https://git.coding.net/summerblue/homestead.git Homesteadcd ~/Homestead
git checkout v7.8.0bash init.sh
1.3 配置homestead.yaml
subl ~/Homestead/Homestead.yaml
-
虚拟机设置:为了便于在同一局域网下在手机端查看效果,这里在配置IP时选择与内网同一网段的,
ifconfig
查得在192.168.0.104,于是设置为192.168.0.100
,其他默认. 修改网络设置:sudo vim /Homestead/scripts/homestead.rb#在第20行改为:config.vm.network :public_network, ip: settings["ip"] ||= "192.168.0.100"
-
SSH 秘钥登录:
ls -al ~/.ssh -rw------- 1 makergyt makergyt 1679 Nov 30 23:56 id_rsa -rw-r--r-- 1 makergyt makergyt 406 Nov 30 23:56 id_rsa.pub#不需要再生成,如没有需ssh-keygen -t rsa -C
于是补充
- ~/.ssh/id_rsa.pub
到key
-
共享文件夹配置 默认后在本地主机上新建code文件夹:
cd ~mkdir code
-
站点配置:
sites: - map: homestead.test to: /home/vagrant/Code/Laravel/public
在主机内将域名与IP绑定(即同DNS的作用):
sudo /etc/hosts #最后一行追加:192.168.0.1000 homestead.test
-
数据库配置:默认,对应的用户名/密码是
homestead/secret
,其实可自行在虚拟机命令行新建
其他均默认
1.4 运行vagrant
pwd
/home/makergyt/Homestead
vagrant up#开始一段时间根据配置文件新建主机#登录vagrant ssh#退出exit#关闭homestead(相当于虚拟机关机)vagrant halt
2.生产环境
基本环境
Aliyun ECS:ubuntu (amd64 1G RAM 1 core CPU)
已安装环境:node 6.4.1 ,git 2.7.4
2.1 一点认识
生产环境与开发环境相反,需要非常稳定,部署后一般不变更。首先需要lnmp配置,这里采用针对laravel的脚本,速度很快,然后需要完成ssl证书安装,这里采用certbort
2.2 过程
-
密钥连接: # 赋予权限 chmod 400 xxx.pem # 删除旧信息 ssh-keygen -f "/home/makergyt/.ssh/known_hosts" -R 112.74.41.209# 连接 ssh -i /makergyt.pem root@112.74.41.209
-
脚本安装:
wget -qO- https://raw.githubusercontent.com/summerblue/laravel-ubuntu-init/master/download.sh - | bash# 完成后cd laravel-ubuntu-init ./16.04/nginx_add_site.sh#项目名即工程文件夹名,会在/var/www下新建
域名即对应访问此虚拟主机的域名,手头有一台云服务器,一个已经备案的
com
顶级域名,考虑到今后的项目需求,采取解析不同二级域名至同一ECS IP,然后在ECS中新建相应虚拟主机来绑定二级域名。 -
ssl证书安装
$ sudo apt-get update $ sudo apt-get install software-properties-common $ sudo add-apt-repository universe $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt-get update $ sudo apt-get install python-certbot-nginx $ sudo certbot --nginx #这里可检测到已经新建的多个主机并同时安装$ sudo certbot renew --dry-run #日后更新
修改nginx配置文件,,开启80(http)强转443(https):
pwd /etc/nginx/sites-enabled sudo vim cloud-doc.conf
文件如下:
server{
listen 80;
server_name cloud-doc.makergyt.com;
rewrite ^(.*)$ https://${server_name}$1 permanent; }
server {
listen 443;
server_name cloud-doc.makergyt.com;
ssl on;
ssl_certificate /etc/letsencrypt/live/makergyt.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/makergyt.com/privkey.pem;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
index index.html index.htm index.php;
charset utf-8;
location / {
root /var/www/cloud-doc/public;
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log /var/log/nginx/cloud-doc.log;
error_log /var/log/nginx/cloud-doc-error.log error;
sendfile off;
client_max_body_size 100m;
location ~ \.php$ {
root /var/www/cloud-doc/public;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}
location ~ /\.ht {
deny all;
}
}
二、部署项目
这里部署一个微信小程序项目【云文档】
1. 本地测试
-
新增网站到vagrant主机 在homestead.yaml中新增site: map: cloud-doc.test to: /home/vagrant/code/cloud-doc/public
在主机 /etc/hosts
后追加:192.168.0.100 cloud-doc.test
启动vagrant并登录: vagrant provision vagrant up vagrant ssh
-
在虚拟主机内完成源码下载,数据库相应工作:
git clond https://github.com/SmallRuralDog/cloud-doc-server.git /code/cloud-doc cd /code/cloudoc unzip cloud_doc_server.zip mysql -u root -p mysql> create database cloudoc; #创建数据库mysql> create user 'cloud-doc'@'%' identified by 'cloud-doc'; #创建用户mysql> grant all on cloudoc.* to 'cloud-doc'@'%'; #授权mysql> flush peivileges ; mysql> use cloudoc; mysql> source cloud_doc_server.sql
修改源码,【参考】
sudo vim /config/database.php#采用本地,修改app.php,admin.php中url:'http://cloud-doc.test'#修改wx.php
-
赋予根目录 storage 目录可写权限:
chmod -R 777 storage
在主机访问cloud-doc.test和同局域网下终端访问192.168.100
2.部署上线
将修改后的源码传至服务器
scp -r -i makergyt.pem cloud-doc root@112.74.41.209:/var/www
在服务器配置数据库、赋予根目录 storage 目录可写权限过程完全一致
3.小程序配置
-
下载源码并修改 git clone https://github.com/MakerGYT/cloud-doc.git miniprogram cd miniprogram sudo vim app.js#修改请求域名const HOST = "https://cloud-doc.makergyt.com";
同时将此域名在小程序平台开发设置中更新修改
4.测试
小程序可正常通过请求api获取文档信息,但是用户无法登录,经检查,提示错误:
Call to undefined function App\Extend\WxApp\mcrypt_module_open()
是因为mcrypt_module_open()函数在7.1中被贬低,将在7.2中被移除,要用openssl_decrypt()函数代替,参考https://blog.csdn.net/haibo_j/article/details/80759706将app/Extend/WxApp/Prpcrypt.php
中第35~42行修改为:
$decrypted = openssl_decrypt($aesCipher, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $aesIV);
不再报错,但仍无法登录,需进一步检查源码
本文仅作为过程性记录,不具有一般适用性。本文采用https://makergyt.com/md 构建,微信对markdown不友好,阅读原文还原优雅链接
以上是关于laravel环境配置过程记录的主要内容,如果未能解决你的问题,请参考以下文章
关于在MAC上进行 LARAVEL 环境 Homestead 安装过程记录