centos7,docker版本搭建lnmp环境,部署laravel项目,解决大坑,新手教学
Posted 黄昏单车
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了centos7,docker版本搭建lnmp环境,部署laravel项目,解决大坑,新手教学相关的知识,希望对你有一定的参考价值。
1、安装mysql
//拉取镜像
docker pull mysql:5.7
//运行容器
docker run -d --name mysql-service -v ~/mysql/conf:/etc/mysql/conf.d -v
~/mysql/logs:/logs -v ~/mysql/data:/var/run/mysqld -p 3306:3306 -e
MYSQL_ROOT_PASSWORD=123456 mysql:5.7
# -d 容器后台守护形式运行
# –name mysql-service 指定容器名称
# -v ~/mysql/conf:/etc/mysql/conf.d 挂载指定配置目录
# -v ~/mysql/logs:/logs 挂载指定日志目录
# -v ~/mysql/data:/var/run/mysqld 挂载指定sock文件目录,这个必不可少
# -e MYSQL_ROOT_PASSWORD=123456 初始化 root 用户的密码为 123456
# -p 3306:3306 将容器的 3306 端口映射到主机的 3306 端口
//查看运行的容器id
docker ps
//进入容器
docker exec -it e6075befb022[容器id] /bin/bash
//登入mysql
mysql -h localhost -u root -p (回车输入密码123456即可)
//使用mysql库
use mysql;
#mysql5.7及以下版本命令
//创建远程登录用户
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
#mysql8版本命令
//创建远程登录用户
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
//设置允许查看数据库权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
#ALL PRIVILEGES:当前用户的所有权限
#第一个*是数据库,可以改成允许访问的数据库名称
#第二个*是数据库的表名称,代表允许访问任意的表
#‘root’@’%’:创建root用户,%代表任意ip连接,可以写成允许的ip
#IDENTIFIED BY ‘root’ 创建root用户的连接密码
#WITH GRANT OPTION:允许级联赋权
//刷新权限
flush privileges;
#连接之后创建laravel数据库,创建一个用户表,以待后面使用
# 清空命令行
system clear
sytem reset
2、安装php
//拉取镜像
docker pull php:7.3-fpm
//运行容器
docker run -d --name myphp-fpm -v ~/nginx/www:/www -v ~/mysql/data:/var/run/mysqld --link mysql-service:mysql php:7.3-fpm
# -d 容器后台守护形式运行
# –name myphp-fpm 指定容器名称
# -v ~/nginx/www:/www 挂载指定php访问目录
# -v ~/mysql/data:/var/run/mysqld 挂载指定sock目录,跟上面的mysql对应,必不可少,否则访问不了mysql的mysqld.sock文件,导致连接mysql错误
# -e MYSQL_ROOT_PASSWORD=123456 初始化 root 用户的密码为 123456
# --link mysql-service:mysql 将 mysql 容器的网络并入 php 容器,实现容器间的通信
//查看容器id
docker ps
//进入容器
docker exec -it 59399784f201[容器id] bash
//安装vim,出现提示输入y,回车即可
apt-get update && apt-get install vim
//安装pdo_mysql
docker-php-ext-install pdo pdo_mysql
//复制一份php.ini文件
cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini
//进入编辑
vim /usr/local/etc/php/php.ini
//修改sock文件指定路径,shift+zz保存
pdo_mysql.default=/var/run/mysqld/mysqld.sock
//退出容器
ctrl + p + q
//重启容器
docker restart 59399784f201
3、安装Nginx
//拉取容器
docker pull nginx
//运行容器
docker run --name nginx-php -p 8080:80 \\
-v ~/nginx/www:/usr/share/nginx/html:ro \\
-v ~/nginx/conf:/etc/nginx/conf.d:ro \\
-d --link myphp-fpm:php nginx
# -p 8083:80: 端口映射,把 nginx 中的 80 映射到本地的 8083 端口。
# ~/nginx/www: 是本地 html 文件的存储目录,~/nginx/html 是容器内 html 文件的存储目录。
# ~/nginx/conf/: 是本地 nginx 配置文件的存储目录,/etc/nginx/conf.d 是容器内 nginx 配置文件的存储目录
# --link myphp-fpm:php: 把 myphp-fpm 的网络并入 nginx,并通过修改 nginx 的 /etc/hosts,把域名 php 映射成 127.0.0.1,让 nginx 通过 php:9000 访问 php-fpm。
//在/usr/share/nginx/conf/目录下创建nginx配置文件
vim ~/nginx/conf/nginx-php.conf
//加入下面代码
server
listen 80;
server_name 192.168.1.107;
location /
root /usr/share/nginx/html;
index index.html index.htm index.php;
error_page 500 502 503 504 /50x.html;
location = /50x.html
root /usr/share/nginx/html;
location ~ \\.php$
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;
include fastcgi_params;
//在 ~/nginx/www 目录下创建 index.php,访问如下:
<?php
echo phpinfo();
?>
部署laravel项目
//拉取composer镜像
docker pull composer
//下载laravel项目,这里会把项目下载到~/nginx/www
docker run -it --name composer -v ~/nginx/www:/app --privileged=true \\
composer composer create-project --prefer-dist laravel/laravel laravel
//修改上面的配置文件
vim ~/nginx/conf/nginx-php.conf
#nginx配置访问路径改到/usr/share/nginx/html/laravel/public
#由于共享数据,所以nginx容器是有laravel项目的
#php默认访问目录以这里的/www/$fastcgi_script_name为根目录
#如果不改的话,系统默认找文件会以www为起点找文件,结果会找不到
#有兴趣的可以试下,这个问题我自己搞了两天了
server
listen 80;
server_name 192.168.1.107;
location /
root /usr/share/nginx/html/laravel/public;
index index.html index.htm index.php;
error_page 500 502 503 504 /50x.html;
location = /50x.html
root /usr/share/nginx/html/laravel/public;
location ~ \\.php$
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/laravel/public/$fastcgi_script_name;
include fastcgi_params;
//查看运行的nginx容器id
docker ps
//重启nginx容器
docker restart 2304b231470d[容器id]
//访问会出现下面图问题,只需要执行下面命令设置下权限即可,刷新即可看到laravel欢迎界面
chmod -R 777 www/laravel/storage
测试连接使用mysql
//修改.env配置文件,相关mysql连接参数
DB_HOST=mysql-service 这个填上面mysql容器的名称
DB_PORT=3306
DB_DATABASE=laravel 上面创建好的数据库
DB_USERNAME=root
DB_PASSWORD=root
//编辑routes/web.php文件,查询数据
Route::get('/', function ()
return DB::table('users')->get();
);
laravel项目访问正常过程中报错解决
1、缺少pdo扩展
//编辑laravel/public目录下的index.php,刷新并查看,ctrl+f搜索pdo_mysql,现在搜索是搜不到的
echo phpinfo();exit;
//进入php容器
docker exec -it 9beb60dcf821 bash
//安装mysql pdo
docker-php-ext-install pdo pdo_mysql
//安装好pdo_mysql,重启php容器,并刷新页面,再次搜索pdo_mysql即可搜到
docker restart cb986f6520f3
2、mysql连接相关配置
DB_HOST=mysql-service 这个填上面mysql容器的名称
DB_PORT=3306
DB_DATABASE=laravel 上面创建好的数据库
DB_USERNAME=root
DB_PASSWORD=root
3、mysql容器自动停止问题
#原因:目录拥有者不一样导致的
# /var/run/mysqld属于mysql用户组,而在宿主机上,~/mysql/data目录却属于root用户组
//查看容器中/var/lib/mysql的所有者,可以看到mysql属于mysql用户组
docker run -ti --rm --entrypoint="/bin/bash" mysql:5.7 -c "ls -la /var/lib/mysql"
//查出来容器里的mysql用户组id
docker run -ti --rm --entrypoint="/bin/bash" mysql:5.7 -c "cat /etc/group"
//修改用户组权限
chown -R 999 ~/mysql/data
ps:整个过程花费了两个星期左右的时间吧,痛并快乐着,如果有不懂的,留言给我,我会及时回复的
以上是关于centos7,docker版本搭建lnmp环境,部署laravel项目,解决大坑,新手教学的主要内容,如果未能解决你的问题,请参考以下文章