如何在Ubuntu 18.04上使用LEMP将Symfony 4应用程序部署到生产中

介绍

Symfony是一个开源PHP框架,具有优雅的结构和声誉,无论其大小如何,都是一个适合启动任何项目的框架。作为一组可重用的组件,其灵活性,体系结构和高性能使其成为构建高度复杂的企业应用程序的首选。

在本教程中,您将在Ubuntu 18.04上使用LEMP堆栈(Nginx,MySQL和PHP)将现有的标准Symfony 4应用程序部署到生产中,这将帮助您开始配置服务器和框架的结构。Nginx是一种流行的开源,高性能HTTP服务器,具有其他功能,包括反向代理支持。它拥有良好的声誉,并拥有互联网上一些最大和最高流量的网站。如果您选择部署自己的Symfony应用程序,则可能必须根据应用程序的现有结构实施额外步骤。

先决条件

要完成本教程,您需要:

步骤1 - 为应用程序创建用户和数据库

通过遵循先决条件中的说明,您现在可以获得应用程序安装所需的所有基本服务器依赖性。由于每个动态Web应用程序都需要数据库,因此您将在本节中创建用户并为应用程序正确配置数据库。

要为我们的应用程序和与之关联的用户创建MySQL数据库,您需要使用MySQL root帐户访问MySQL客户端:

 mysql -u root -p

输入相应的密码,该密码应与运行mysql_secure_installation时使用的密码相同。

接下来,创建应用程序数据库:

CREATE DATABASE blog;

您将在控制台中看到以下输出:

Query OK, 1 row affected (0.00 sec)

您已成功创建应用程序数据库。您现在可以创建MySQL用户并授予他们访问新创建的数据库的权限。

执行以下命令创建MySQL用户和密码。如果您愿意,可以将用户名和密码更改为更安全的内容:

CREATE USER  'blog-admin'@'localhost' IDENTIFIED BY 'password';

您将看到以下输出:

Query OK, 0 rows affected (0.00 sec)

目前,用户blog-admin对应用程序数据库没有正确的权限。事实上,即使blog-admin尝试使用他们的密码登录,他们也无法访问MySQL shell。

在访问或执行数据库上的特定操作之前,用户需要正确的权限。使用以下命令允许blog-admin用户完全访问博客数据库:

GRANT ALL PRIVILEGES ON blog.* TO 'blog-admin'@'localhost';

您将看到以下输出:

Query OK, 0 rows affected (0.00 sec)

博客管理员现在对里面的所有表中的所有特权博客数据库。要重新加载授权表并应用更改,您需要使用flush语句执行flush-privilege操作:

FLUSH PRIVILEGES;

您将看到以下输出:

Query OK, 0 rows affected (0.00 sec)

您已完成创建新用户并授予权限。要测试您是否正常,请退出MySQL客户端:

quit;

然后使用您刚创建的MySQL用户的凭据再次登录,并在出现提示时输入密码:

mysql -u blog-admin -p

检查用户是否可以访问数据库:

SHOW DATABASES;

您将在输出中看到该blog表:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| blog               |
+--------------------+
2 rows in set (0.00 sec)

最后,退出MySQL客户端:

quit;

您已成功创建数据库,演示应用程序的用户,并授予新创建的用户访问数据库的权限。您现在可以设置演示应用程序了。

第2步 - 设置演示应用程序

为了简化本教程,您将部署使用Symfony构建的博客应用程序。此应用程序将允许经过身份验证的用户创建博客帖子并将其存储在数据库中。此外,应用程序用户可以查看与作者相关的所有帖子和详细信息。

您将在本教程中部署的博客应用程序的源代码位于GitHub上。您将使用Git从GitHub中提取应用程序的源代码并将其保存在新目录中。

首先,创建一个目录,作为应用程序的根目录。因此,从控制台运行以下命令以创建名为symfony-blog的新目录:

sudo mkdir -p /var/www/symfony-blog

要使用非root用户帐户处理项目文件,您需要通过运行以下命令来更改文件夹所有者和组:

 sudo chown sammy:sammy /var/www/symfony-blog

用你的具有sudo权限的非root用户名替换sammy

现在,您可以更改为父目录并在GitHub上克隆应用程序:

cd /var/www
git clone https://github.com/yemiwebby/symfony-blog.git symfony-blog

您将看到以下输出:

Cloning into 'symfony-blog'...
remote: Counting objects: 180, done.
remote: Compressing objects: 100% (122/122), done.
remote: Total 180 (delta 57), reused 164 (delta 41), pack-reused 0
Receiving objects: 100% (180/180), 167.01 KiB | 11.13 MiB/s, done.
Resolving deltas: 100% (57/57), done.

现在设置了演示应用程序。在下一步中,您将配置环境变量并为项目安装所需的依赖项。

步骤3 - 为应用程序配置环境变量

要完全设置应用程序,您需要安装项目依赖项并正确配置应用程序参数。

默认情况下,Symfony应用程序以开发模式运行,为调试目的提供非常详细的日志。这不适用于您在本教程中所做的事情,而不适用于生产环境,因为它可以减慢速度并创建非常大的日志文件。

Symfony需要知道您在生产环境中运行应用程序。您可以通过创建.env包含变量声明的文件或直接创建环境变量来设置它。由于您还可以使用该.env文件为此应用程序配置数据库凭据,因此您更有意义。将工作目录更改为克隆项目,并使用以下命令创建.env文件:

cd symfony-blog
sudo nano .env

将以下行添加到文件以配置生产应用程序环境:

APP_ENV=prod
APP_DEBUG=0

APP_ENV是一个环境变量,指定应用程序正在生产中,而APP_DEBUG环境变量指定应用程序是否应在调试模式下运行。您现在已将其设置为false。

保存文件并退出编辑器。

接下来,安装Symfony应用程序用于处理XML的PHP扩展:

sudo apt install php7.2-xml

接下来,您需要安装项目依赖项,运行composer install

cd /var/www/symfony-blog
composer install

您已成功配置环境变量并为项目安装了所需的依赖项。接下来,您将设置数据库凭据。

第4步 - 设置数据库凭据

为了从之前创建的应用程序数据库中检索数据,您需要在Symfony应用程序中设置和配置所需的数据库凭据。

再次打开.env文件:

sudo nano .env

将以下内容添加到文件中,这样您就可以轻松地与数据库进行正确连接和交互。您可以在.env文件中的APP_DEBUG=0行后面添加它:

...
DATABASE_URL=mysql://blog-admin:password@localhost:3306/blog

Symfony框架使用名为Doctrine的第三方库与数据库进行通信。Doctrine为您提供了有用的工具,使您可以轻松灵活地与数据库进行交互。

您现在可以使用Doctrine使用克隆的Github应用程序中的表来更新数据库。运行此命令来执行此操作:

php bin/console doctrine:schema:update --force

您将看到以下输出:

Updating database schema...
    4 queries were executed
[OK] Database schema updated successfully!  

设置所需凭据并更新数据库架构后,您现在可以轻松地与数据库进行交互。为了使用某些数据启动应用程序,您将在下一节中将一组虚拟数据加载到数据库中。

第5步 - 使用Doctrine-Fixtures填充数据库

目前,新创建的表是空的。您将使用doctrine-fixtures填充它。使用Doctrine-Fixtures不是Symfony应用程序的先决条件,它仅用于为您的应用程序提供虚拟数据。

运行以下命令以自动将包含作者和示例帖子详细信息的测试数据加载到为博客创建的数据库表中:

php bin/console doctrine:fixtures:load

您将收到有关数据库被清除的警告。你可以继续输入Y

Careful, database will be purged. Do you want to continue y/N ? y
  > purging database
  > loading App\DataFixtures\ORM\Fixtures  

在下一节中,您将清除并预热缓存。

第6步 - 清理和预热您的缓存

为确保在用户发出请求时加快应用程序加载,最好在部署期间加热缓存。预热缓存会生成页面并存储它们以便以后更快地响应,而不是构建全新的页面。幸运的是,Symfony有一个命令来清除缓存,这也会触发预热。为此目的运行以下命令:

php bin/console cache:clear

您将看到以下输出:

Clearing the cache for the prod environment with debug false
[OK] Cache for the "prod" environment (debug=false) was successfully cleared.

您将稍微总结一下设置。剩下的就是配置Web服务器。您将在下一部分中执行此操作。

步骤7 - 配置Web服务器并运行应用程序

到目前为止,您已安装Nginx来为您的页面和MySQL存储和管理您的数据。现在,您将通过创建新的应用程序服务器块来配置Web服务器,而不是编辑默认的服务器块。

使用以下命令打开新服务器块:

sudo nano /etc/nginx/sites-available/blog

将以下内容添加到新服务器块配置文件中。确保使用服务器IP地址替换服务器块内的your_server_ip

server {
    listen 80;
    listen [::]:80;
​
    server_name blog your_server_ip;
    root /var/www/symfony-blog/public;
    index index.php;
    client_max_body_size 100m;
​
    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }
​
    location ~ \.php {
        try_files $uri /index.php =404;
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_index index.php;
        include fastcgi_params;
      }
​
    location ~ /\.(?:ht|git|svn) {
        deny all;
    }
}

首先,我们为端口80指定了Nginx的默认指令listen,然后设置服务器名称以匹配服务器IP地址的请求。接下来,我们使用root 指令指定项目的文档根目录。该symfony-blog应用程序存储在/var/www/symfony-blog,但是要符合最佳实践,我们将Web根设置为/var/www/symfony-blog/public因为只有/public子目录应该暴露在互联网上。最后,我们配置了location指令来处理PHP处理。

添加内容后,保存文件并退出编辑器。

注意:如果您在Ubuntu 18.04上的必备文章如何安装Linux,Nginx,MySQL,PHP(LEMP堆栈)中创建了该example.com文件,请使用sudo rm /etc/nginx/sites-enabled/example.com将其从sites-enabled目录中删除,以免与此新文件冲突。

要启用新创建的服务器块,我们需要使用以下命令从位于/etc/nginx/sites-available目录中的新服务器块配置文件创建符号链接至/etc/nginx/sites-enabled

sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/

运行以下命令检查新配置文件是否存在语法错误:

sudo nginx -t

如果有错误,此命令将向控制台输出错误。一旦没有错误,运行此命令重新加载Nginx:

 sudo systemctl reload nginx

您刚刚结束了成功部署Symfony 4应用程序所需的最后一步。您通过创建服务器块并正确设置Web根目录来配置Web服务器,以使Web应用程序可访问。

最后,您现在可以运行并测试应用程序。在您最喜爱的浏览器中访问http://your_server_ip

下图是您应该在服务器的IP地址上看到的Symfony博客应用程序的屏幕截图:

结论

Symfony是一个功能丰富的PHP框架,其架构使Web开发对于使用它构建软件的开发人员来说很有趣。Symfony是一个功能丰富的Web开发框架,为开发人员提供了构建Web应用程序的强大工具。由于其灵活性,它通常被认为是企业应用程序的不错选择。部署典型Symfony应用程序的步骤各不相同,具体取决于应用程序的设置,复杂性和要求。

在本教程中,您在运行LEMP的Ubuntu 18.04服务器上手动将Symfony 4应用程序部署到生产环境中。您现在可以将此知识应用于部署自己的Symfony应用程序。

更多Ubuntu教程请前往腾讯云+社区学习更多知识。


参考文献:《How to Deploy a Symfony 4 Application to Production with LEMP on Ubuntu 18.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何使用Apache驱动Django

Django是一个功能强大的Web框架,可以帮助您快速启动Python应用程序或网站。Django包含一个简化的开发服务器,用于在本地测试您的代码。但是其也需要...

3105
来自专栏云计算教程系列

如何在Ubuntu 16.04上安装Apache Tomcat 8

Apache Tomcat是一个Web服务器和servlet容器,用于为Java应用程序提供服务。Tomcat是Apache Software Foundati...

2762
来自专栏北京马哥教育

CentOS系统启动流程你懂否

一、Linux内核的组成 相关概念: Linux系统的组成部分:内核+根文件系统 内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序。 ...

3784
来自专栏云计算教程系列

如何在Debian 9上安装Apache Tomcat 9

Apache Tomcat是一个Web服务器和servlet容器,用于为Java应用程序提供服务。Tomcat是Apache Software Foundati...

5364
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Apache和mod_wsgi为Django应用程序提供服务

Django是一个功能强大的Web框架,可以帮助您快速启动Python应用程序或网站。Django包含一个简化的开发服务器,用于在本地测试您的代码,但是对于任何...

1540
来自专栏学一学大数据

一文上手zabbix安装配置【运维篇】

2033
来自专栏CaiRui

memcached服务

介绍 它是一套数据缓存系统或软件 用于动态应用系统中缓存数据库的数据,减少数据库的访问压力,达到提升性能的效果,实际应用环境中多用于数据库的cache的应用。它...

3798
来自专栏我是攻城师

如何通过JMX远程监控Solr?

2996
来自专栏云计算教程系列

如何在Ubuntu 18.04上安装Redis

Redis是一个内存中的键值存储器,以其灵活性,性能和广泛的语言支持而闻名。它通常用作数据库,缓存和消息代理,并支持各种数据结构。

4502
来自专栏PHP技术大全

Web安全之XSS Platform搭建及使用实践

XSS Platform 是一个非常经典的XSS渗透测试管理系统,原作者在2011年所开发,由于后来长时间没有人维护,导致目前在PHP7环境下无法运行。

1631

扫码关注云+社区

领取腾讯云代金券