踩了一些坑,给自己做个记录,以免重复跳坑
0x00 期望环境描述
- ubuntu18.04(阿里云服务器所以不用安装了)
- php 7.2
- Nginx 1.14.0
- MySql 5.7.30
- laravel 5.5
0x01 安装Nginx
// 更新包
sudo apt-get update
// 安装nginx
sudo apt-get install nginx
// 启动nginx服务
sudo service nginx start
// 重启
sudo service nginx restart
// 停止
sudo service nginx stop
// 查看nginx版本
nginx -v
0x02 安装PHP
// 更新包(可以没有
// sudo apt-get update
// 安装php
sudo apt-get install php7.2
// 安装php的一些扩展
sudo apt-get install php7.2-mysql php7.2-fpm php7.2-curl php7.2-xml php7.2-gd php7.2-mbstring php-memcached php7.2-zip
// 查看php版本
php -v
0x03 安装MySQL
// 安装mysql,安装过程中记得设置密码
sudo apt-get install mysql-server mysql-client
// 查看mysql版本,登陆mysql之后执行
select version();
0x03 修改nginx配置并启动服务
修改nginx的默认配置文件 /etc/nginx/sites-available/default,修改前可做备份
// 配置文件 /etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
# 将入口设定到laravel项目的public文件夹下
root /var/www/html/laravel/public;
# Add index.php to the list if you are using PHP
# 这里是需要修改的
index index.php index.html index.htm;
# 本地或公网访问不需要修改,有域名的话要改掉
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
try_files $uri $uri/ /index.php?$query_string;
}
# pass PHP scripts to FastCGI server
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
#fastcgi_split_path_info ^(.+\.php)(/.+)$;
# 默认可能会是7.0或其他,要找到自己当前的fpm版本并修改
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
# With php-cgi (or other tcp sockets):
#fastcgi_pass 127.0.0.1:9000;
}
}
给php-fpm赋权限
chmod 777 /run/php/php7.2-fpm.sock
启动各服务
// nginx
sudo service nginx start
// fpm
sudo service php7.2-fpm start
// mysql
sudo service mysql start
0x05 部署Laravel项目
没有git先安装git,安装完了记得配置user.name和user.email
sudo apt-get install git
如果要用ssh访问,生成后进入~/.ssh/id_rsa.pub查看公钥
ssh-keygen -C 'you email address@gmail.com' -t rsa
cat ~/.ssh/id_rsa.pub
安装composer
//下载composer
wget https://getcomposer.org/composer.phar
// 增加可执行权限
chmod +x composer.phar
// 移动到安装目录
mv composer.phar /usr/local/bin/composer
// 测试composer安装是否成功
composer
// composer换个源
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
拉取项目,进入项目文件夹,更新或是安装composer
修改项目文件夹下storage和bootstrap/cache文件夹的权限
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
chmod -R 775 storage
chmod -R 775 bootstrap/cache
配置好数据库 .gitignore和.env后就可以正常访问项目了
0x06 部署过程中踩的坑
0x06.1 php文件无法解析
一般情况下nginx解析不了php文件就是fpm的配置出了问题
首先查看nginx配置的fpm路径是否正确
vim /etc/nginx/sites-available/default
其次查看fpm的配置是否正确
sudo vim /etc/php5/fpm/pool.d/www.conf
排除了这两者之后,就要考虑目录权限的问题了
// 给php-fpm赋权限
chmod 777 /run/php/php7.2-fpm.sock
如果修改了相关服务的配置,需要重启服务
在本次配置的过程中,最终是发现由于sock文件没有权限,所以给了权限之后就可以正常解析了。不过在走弯路的过程中,还尝试了将nginx请求交给9000端口处理,即在nginx配置中设置"fastcgi_pass 127.0.0.1:9000;",同时修改了fpm的配置文件,但是仍然没有解决问题。虽然监听9000端口是windows下使用的比较多,但是linux没道理不可以...
0x06.2 mysql root@localhost没有权限访问
root用户没有权限,那就给他权限
// 登陆进mysql后查看用户权限
use mysql;
// mysql 5.6及其一下版本,将authentication_string换成password
select user,host,authentication_string from user;
// 给root所有权限
// grant privileges on databasename.tablename to 'username'@'host' identified by 'password';
grant all on *.* to 'root'@'%' identified by 'password';
// 刷新权限
flush privileges;
// 如果是修改root权限,还需要将root多余的权限删除
drop user 'username'@'ip';
我碰到的情况就是给root加了权限还是一直无法使用,后来灵机一动删了多余的权限,才发现root具有的多余的无用权限也得删除...
0x06.3 laravel storage没有权限访问
修改项目文件夹下storage和bootstrap/cache文件夹的权限
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
chmod -R 775 storage
chmod -R 775 bootstrap/cache
一开始看到报错之后,就直接给了storage和bootstrap/cache 777权限,但是没能解决问题。后来发现要先改文件所有者,再给它设置权限,感谢这位博主解决了这个头疼问题...
参考文献
- ubuntu安装php7.2 https://www.zhaokeli.com/article/8496.html
- 如何修复laravel.log无法打开? https://cloud.tencent.com/developer/ask/170024