资讯专栏INFORMATION COLUMN

在 Docker 中运行 Laravel 项目

luxixing / 3287人阅读

摘要:本篇承接使用构建环境,介绍如何在该文所用的容器中运行项目。接下来可以新建一个项目或是通过转移项目。从上同步项目一般服务器中运行的项目都是在本地开发完成后同步上去的。生成文件文件含有项目所需的配置以及用于加密解密的随机字符串。

本篇承接 使用 Docker 构建 LNMP 环境,介绍如何在该文所用的容器中运行 Laravel 项目。主要步骤为:转移 Laravel 项目到数据卷 => 配置数据库 => 配置 Nginx => 配置 Laravel 的 .env 文件。

布置 Laravel 项目

由于我们将 Git、Composer 等工具统一管理于 Console 容器,所以,首先需要进入这一容器。当然,在这之前,要确保容器已经启动,在 docker-compose.yml 所在路径下执行:

docker-compose up -d

然后查看容器是否启动以及启动后的名字:

docker ps

之后进入 Console 容器,注意替换容器名字:

docker exec -it $console_container_name bash

接下来,可以通过 Composer 新建一个 Laravel 项目,也可以将本地已经完成的项目通过 Git 同步到服务器中。

注意,由于我们在 docker-compose.yml 中对数据卷进行了配置,因而项目文件的路径需要放置于 apps/ 目录之下,该目录会在执行 docker-compose up -d 之后生成在 .yml 文件的同级目录中。

接下来可以新建一个 Laravel 项目或是通过 Git 转移项目。

安装 Laravel

执行:

composer create-project laravel/laravel=5.4 $project_name --prefer-dist

可以按照需要更换版本和项目名。

从 Git 上同步项目

一般服务器中运行的项目都是在本地开发完成后同步上去的。可以通过在本地添加远程 Git 地址后 push 到服务器中,也可以通过克隆的方式从代码仓库(Github、Coding.net 等)中得到项目。

git clone ${your_project_address}
Install

为了保证 Laravel 项目中 vendor 的版本与本地完全一致,需要在 Laravel 项目下执行:

composer install

这一步会根据 composer.lock 文件中记录的版本号进行安装。

生成 .env 文件

.env 文件含有项目所需的配置以及用于加密解密的随机字符串。为了安全,一般不会将该文件与本地同步。但会保留一个 .env.example 作为副本,此时我们需要先复制一份该文件并命名为 .env

cp .env.example .env

然后生成随机字符串,该字符串会自动写入 .env 文件中:

php artisan key:generate
修改权限

部分 Laravel 文件夹需要更多的权限,执行:

chmod -R 777 storage
chmod -R 777 bootstrap/cache

注意,这些路径均是相对于 Laravel 项目而言。

数据库配置 基本配置

执行 exit; 从 Console 容器中退出,然后进入数据库容器,同样注意容器名字:

docker exec -it $database_container_name bash

根据 docker-compose.yml 中的设置,通过 root 进入数据库服务:

mysql -uroot -proot

由于多个 Docker 容器间的关系类似于依赖网络进行连接的主机,要想通过 PHP 容器中的脚本访问 MySQL 容器的数据库服务,需要具有远程连接的数据库用户,执行以下命令进行创建:

GRANT ALL PRIVILEGES ON *.* TO username@"%" IDENTIFIED BY "password";

注意以下几点:

*.* 表示对所有数据库的所有表都具有权限;

% 表示不限制连接的主机 IP,为了安全起见,这里可以把 % 改为 php。注意,这里的 php 其实相当于一个域名,Docker 的内置 DNS 会将其解析为 PHP 容器的地址;

修改 username 和 password 为自定义的用户名和密码。

远程连接

若想要在本地(非 Docker 宿主机)连接到数据库容器,需要利用端口映射,将数据库 Docker 的 3306 端口映射到主机的某个端口(如:12345),然后在本地通过访问服务器的 $server_ip:12345 并附带具有远程访问权限的用户名和密码进行远程连接(注意 % 的问题)。

在本文所用的 docker-compose.yml 中已经默认打开了 3306:3306 的端口映射,大家可以根据需要进行设置。

创建数据库

通过以下方式创建一个数据库并设置字符集:

CREATE DATABASE `database_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
执行 SQL 文件

我们可以把本地的数据库导出为 .sql 文件,然后在上传到数据库容器中并执行,首先在本地将 SQL 文件上传到宿主服务器:

scp xxx.sql root@your_server_ip:/

然后在宿主服务器中将该文件转移到数据库容器中的共享数据卷中,执行:

mv /xxx.sql path/to/docker-compose.yml/database

最后进入数据库容器并进入 MySQL 数据库服务,执行:

source /path/to/xxx.sql
Nginx 虚拟主机配置

由于 Laravel 的请求依赖重写规则,在 Nginx 服务器中需要使用虚拟主机,将某一域名映射到 Laravel 项目根目录以实现正确的请求重写(若为 Apache 则不需要)。

执行 exit; 退出上一个容器,然后进入 images/nginx/config 中,该路径相对于 docker-compose.yml 文件。

由于 Nginx 容器中 nginx.conf 的配置以及数据卷的设置,在该路径下的所有 *.conf 文件都会起到作用。下面我们新建一个 myweb.comf 文件,内容如下:

server{

    listen         80;
    server_name my.app.dev;
    root         /mnt/apps/laravel/public;
    index         index.php index.html index.htm;

    location / {
        index       index.php index.html;
        try_files     $uri $uri/ /index.php?$query_string;
    }

    location ~ .php$ {
        fastcgi_pass     php:9000;
        fastcgi_index     index.php;
        fastcgi_param     SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include         fastcgi_params;
    }

}

注意以下两行需要根据具体情况进行修改,其中 my.app.dev 为域名,laravel/public 部分要修改为 Laravel 的项目名。注意这里是 /mnt/apps/xxx,路径为 Nginx 服务器的项目路径,注意分清共享数据卷和配置文件的作用位置。:

server_name my.app.dev;
root         /mnt/apps/laravel/public;
Laravel 中 .env 文件配置

需要根据之前的配置修改 .env 文件,主要修改如下:

DB_HOST=database
DB_DATABASE=database_name
DB_USERNAME=remote
DB_PASSWORD=remote

DB_HOST=database 中的 database 同样是指数据库容器,相当于 Docker 内部 DNS 的一个标识(该标识由 docker-compose.yml 进行设置)。

DB_DATABASE=database_name 为该项目所用的数据库名;

DB_USERNAME=remoteDB_PASSWORD=remote 为之前设置的可以进行远程连接的数据库用户;


参考

MySQL 下执行 sql 脚本 - 博客园

MySQL 创建数据库指定字符集 - 163 博客

MySQL 开启远程连接

Linux 查看服务器开放的端口号 - 博客园

上传文件到远程服务器 - CSDN

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26872.html

相关文章

  • PHP开发环境03 - 使用KFKDock搭建PHP项目环境

    摘要:基于快速搭建服务根据自定义配置文件快速搭建环境。目录此项目能做什么地址视频教程包含软件项目目录结构快速运行运行服务运行项目运行前端服务此项目能做什么搭建开发生产环境。搭建开发生产环境。 基于Docker快速搭建Web服务 根据自定义配置文件快速搭建Web环境。 目录 此项目能做什么 GItHub地址、视频教程 包含软件 项目目录结构 快速运行KFKDock 运行PHP服务 运行L...

    Zhuxy 评论0 收藏0
  • PHP开发环境03 - 使用KFKDock搭建PHP项目环境

    摘要:基于快速搭建服务根据自定义配置文件快速搭建环境。目录此项目能做什么地址视频教程包含软件项目目录结构快速运行运行服务运行项目运行前端服务此项目能做什么搭建开发生产环境。搭建开发生产环境。 基于Docker快速搭建Web服务 根据自定义配置文件快速搭建Web环境。 目录 此项目能做什么 GItHub地址、视频教程 包含软件 项目目录结构 快速运行KFKDock 运行PHP服务 运行L...

    yagami 评论0 收藏0
  • 使用 Docker 搭建 Laravel 本地环境

    摘要:本文就介绍如何使用搭建本地环境。讲座介绍是现在火热的一个容器技术,作为开发人员有必要掌握它的使用,无论你是用来搭建本地环境,还是部署应用。 (原文地址:https://blog.tanteng.me/2017/...) Laravel 官方提供 Homestead 和 Valet 作为本地开发环境,Homestead 是一个官方预封装的 Vagrant Box,也就是一个虚拟机,但是跟...

    StonePanda 评论0 收藏0

发表评论

0条评论

luxixing

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<