如何在Debian 9服务器上安装Symfony 4

在本文中,我将向您展示如何设置一个完整的Symfony Stack以在Debian 9上运行Symfony应用程序。该过程包括以下步骤...

如何在Debian 9服务器上安装Symfony 4

Symfony是PHP开发人员构建小型到大型应用程序的最佳选择。 随着每个新版本的发布,Symfony都会成为开发人员更好的工具包。 Symfony允许快速的应用程序开发流程,以便开发人员可以在频谱的另一端构建全面的API,电子商务平台,金融科技和会计应用程序等,开发人员可以借助Twig模板引擎创建简单的网站。

Symfony 4具有智能配方系统和简化的目录结构,不会使项目中的代码文件过载。 Symfony Flex可以安装带有别名的库,并将它们自动注册到bundle的配置中。 新版本还介绍了使用散列映射查找静态路由的闪电快速路由系统 ,以及带有占位符的路由组合正则表达式。

鉴于Symfony 4的流行,我决定在Debian 9机器上配置和设置这个版本。 在本文中,我将向您展示如何设置一个完整的Symfony Stack来运行Symfony应用程序。 该过程包括有关权限,webroots和web服务器的步骤。

创建一个DigitalOcean服务器

今天,您可以在今天的市场中找到许多云托管提供商,而且这种选择实际上归结于您的性能要求和预算组合。

为了达到本文的目的,我将与DigitalOcean合作,这是一家深受开发人员喜爱的云托管提供商。 您可以轻松注册DigitalOcean帐户,并选择您的分发,大小和服务器的数据中心,如以下GIF所示:

创建一个服务器

现在,下一步是启动SSH终端。 如果您是Linux或Mac用户,则默认情况下会在您的计算机上得到它。 如果您是Windows用户,则需要下载PuTTY 。 好消息是Windows 10带有自己的PowerShell,您可以将其用于本文的目的。

启动Droplet后,需要以下三项登录SSH终端:

  • 服务器的IP地址

  • 用户名

  • 密码或SSH密钥

由于我使用的是Windows,因此我将使用PuTTY进行所有与SSH相关的活动。 记下Droplet上面的项目并登录到SSH终端。 在PuTTY中,当您输入IP地址并按Enter时,服务器将询问您是否缓存密钥。 简单命中是的。

连接PuTTY

接下来,输入凭证,您将以root用户身份登录到DigitalOceanDroplet。

Symfony LAMP

Symfony依赖于包含PHP,Apache / Nginx,MySQL和Linux发行版的典型LAMP。 您需要首先安装所有这些软件组件,然后根据Symfony的要求配置Apache / Nginx。 幸运的是,所有用于创建Symfony的组件都是开源的,因此您只需要运行命令并在服务器上通过SSH安装它们即可。

Symfony还在其文档中定义了Nginx和Apache的Web服务器配置,因此我将在此处介绍主要设置,您可以在其中阅读其余部分。

在Debian上更新软件包

列表中的第一个操作项目是更新Debian机器上的软件包。

通过运行以下命令来检查服务器上的Debian版本:

cat /etc/debian_version

更新Debian

所以我在我的DigitalOcean服务器上安装了Debian 9.4。

接下来,运行以下命令以通过SSH更新软件包:

apt-get update
apt-get upgrade
apt-get dist-upgrade

一旦更新了所有内容,我已准备好安装Web服务器。

为Symfony 4安装Apache2

转到SSH终端并使用以下命令首先安装Apache2:

apt-get install apache2 -y

一旦命令完成,访问您的服务器的IP,您将看到Apache欢迎页面:

Apache默认页面

下一个。 使用以下命令进入子目录结构:

cd /etc/apache2/sites-available/

使用以下命令首先快速启用mod_rewrite选项:

a2enmod rewrite

现在打开000-default.conf文件并添加以下内容以在Apache 2中配置Web主机:

 

<VirtualHost *:80>

   ServerName domain.tld

   ServerAlias www.domain.tld

 

   DocumentRoot /var/www/html/symfony4/public

   <Directory /var/www/html/symfony4/public>

       Options FollowSymLinks MultiViews

AllowOverride All

Order allow,deny

       Allow from All

   </Directory>

 

   # uncomment the following lines if you install assets as symlinks

   # or run into problems when compiling LESS/Sass/CoffeeScript assets

   # <Directory /var/www/html>

   #  Options FollowSymlinks

   # </Directory>

 

   ErrorLog /var/log/apache2/project_error.log

   CustomLog /var/log/apache2/projec_access.log combined

</VirtualHost>

现在,Apache2被配置为从/ var / www / html文件夹运行项目。 但是你也可以用最适合Symfony 4的更多选项来扩展配置。下面是一个例子:

<VirtualHost *:80>

   ServerName domain.tld

   ServerAlias www.domain.tld

 

   DocumentRoot /var/www/html/symfony4/public

   <Directory /var/www/html/symfony4/public>

       AllowOverride None

       Require all granted

       Allow from All

 

       <IfModule mod_rewrite.c>

           Options -MultiViews

           RewriteEngine On

           RewriteCond %{REQUEST_FILENAME} !-f

           RewriteRule ^(.*)$ index.php [QSA,L]

       </IfModule>

   </Directory>

 

   # uncomment the following lines if you install assets as symlinks

   # or run into problems when compiling LESS/Sass/CoffeeScript assets

   # <Directory /var/www/crvfakeexample.com>

   #  Options FollowSymlinks

   # </Directory>

 

   # optionally disable the RewriteEngine for the asset directories

   # which will allow apache to simply reply with a 404 when files are

   # not found instead of passing the request into the full symfony stack

   <Directory /var/www/crvfakeexample.com/public/bundles>

       <IfModule mod_rewrite.c>

           RewriteEngine Off

       </IfModule>

   </Directory>

   ErrorLog /var/log/apache2/crvfakeexample.com_error.log

   CustomLog /var/log/apache2/crvfakeexample.com_access.log combined

 

   # optionally set the value of the environment variables used in the application

   #SetEnv APP_ENV prod

   #SetEnv APP_SECRET <app-secret-id>

   #SetEnv DATABASE_URL "mysql://db_user:db_pass@host:3306/db_name"

</VirtualHost>

您还可以使用最新的Apache选项,例如Require all all并在上述设置中配置环境变量。 现在使用以下命令重新加载Apache服务器,以便新设置生效:

service apache2 reload

为Symfony 4安装Nginx

如果你不想使用Apache,Nginx是Web服务器的绝佳选择。 这个过程非常相似。

首先用以下命令安装Nginx:

apt-get update

apt-get install nginx -y

现在运行cd /etc/nginx/conf.d并将该文件配置为

server {

   server_name domain.tld www.domain.tld;

   root /var/www/html/symfony4/public;

 

   location / {

       # try to serve file directly, fallback to index.php

       try_files $uri /index.php$is_args$args;

   }

   location ~ ^/index\.php(/|$) {

       fastcgi_pass unix:/var/run/php7.1-fpm.sock;

       fastcgi_split_path_info ^(.+\.php)(/.*)$;

       include fastcgi_params;

 

   # optionally set the value of the environment variables used in the application

       # fastcgi_param APP_ENV prod;

       # fastcgi_param APP_SECRET <app-secret-id>;

       # fastcgi_param DATABASE_URL "mysql://db_user:db_pass@host:3306/db_name";

 

       # When you are using symlinks to link the document root to the

       # current version of your application, you should pass the real

       # application path instead of the path to the symlink to PHP

       # FPM.

       # Otherwise, PHP's OPcache may not properly detect changes to

       # your PHP files (see https://github.com/zendtech/ZendOptimizerPlus/issues/126

       # for more information).

       fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;

       fastcgi_param DOCUMENT_ROOT $realpath_root;

       # Prevents URIs that include the front controller. This will 404:

       # http://domain.tld/index.php/some-path

       # Remove the internal directive to allow URIs like this

       internal;

   }

   # return 404 for all other php files not matching the front controller

   # this prevents access to other php files you don't want to be accessible.

   location ~ \.php$ {

       return 404;

   }

   error_log /var/log/nginx/project_error.log;

   access_log /var/log/nginx/project_access.log;

   }

现在通过运行以下命令重新加载服务器:

service nginx reload

为Symfony 4安装PHP 7.2

一个重要的Symfony 4依赖项是服务器上的PHP 7.1.3(或更高版本)。 要安装所需的版本,我需要在Debian 9上更新/安装一些软件包来安装PHP 7.2。 转到SSH终端(并确保您在根目录中)并运行以下命令:

sudo apt install ca-certificates apt-transport-https

wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -

sudo echo "deb https://packages.sury.org/php/ stretch main" | tee /etc/apt/sources.list.d/php.list

现在在下一步中,运行这些命令:

sudo apt update

sudo apt install php7.2

安装成功后,请检查PHP版本:

php -v

我还需要安装更多的库以确保PHP 7.2在服务器上正常工作。 运行以下命令以安装所需的库:

sudo apt install php7.2-cli php7.2-common php7.2-curl php7.2-gd php7.2-json php7.2-mbstring php7.2-mysql php7.2-xml libapache2-mod-php7.2

这些库将被安装,PHP 7.2已经正确配置了Symfony 4。

安装MySQL来配置数据库

让我们快速安装MySQL数据库。

通过运行以下命令开始:

apt-get install mysql-server

该过程将暂停以征求您的许可。 键入( y )并按Enter键。 在下一个窗口中,为MySQL根用户设置密码。

配置MySQL

该过程在几分钟内完成。

接下来,我将根据LAMP的要求配置MySQL。 为此,输入以下命令:

mysql_secure_installation

此时,按照Symfony 4的要求完成服务器设置。我现在将重点关注安装框架本身。

在Debian 9上安装Composer

全球安装Composer是一个好主意,因为这样每个用户都可以轻松使用它。 所以,我会将它安装在/ user / local / bin目录下。

我们先将安装程序复制到/ tmp目录:

php -r "copy('https://getcomposer.org/installer', '/tmp/composer-setup.php');"

接下来,运行以下命令来执行Composer文件并全局安装它:

sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer

安装Composer

现在安装了Composer,我将继续进行实际的Symfony 4安装。

最后,在Debian 9服务器上安装Symfony 4

此时,我已经通过给出URL / var / www / html / symfony4 / public来为webroot配置Apache服务器

进入html文件夹并运行以下Composer命令来安装Symfony 4:

composer create-project symfony/skeleton symfony4

该框架将在几秒钟内安装。 由于Symfony 4对代码库和依赖关系进行了优化,因此在安装过程中不会要求提供任何凭据。 完成后,您需要配置数据库。

一旦过程完成,访问您的服务器的IP,你会看到欢迎页面:

安装Symfony框架

接下来,我将添加数据库凭据。 Symfony的env文件。

 

###> doctrine/doctrine-bundle ###

APP_ENV=dev

APP_DEBUG=1

APP_SECRET=bd4d4fxxxx035a97fxxxed13f18646f

 

# customize this line!

DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name"

###< doctrine/doctrine-bundle ###

 

最后的话

Symfony 4已经被PHP开发人员广泛采用和赞赏,并且已经被下载了数百万。 你也可以使用Symfony 3.x的标准版本(你只需要更新命令来安装特定的版本):

对于Symfony 3.0:

composer create-project symfony/framework-standard-edition your_project_name "3.0.*"

对于Symfony 3.1:

composer create-project symfony/framework-standard-edition your_project_name "3.1.*"

如果您需要在Debian 9机器上安装和设置Symfony 4的帮助,请在评论中告诉我。


分享按钮