用 composer 和 git 管控 drupal8 代码

周志高 提交于 周五, 06/07/2019 - 11:12

Composer是PHP代码依赖管理工具,git 是代码版本控制工具。在开发 drupal 8 网站的时候,可以把这两个工具结合起来使用,以提升我们的开发效率。

本文假定:

  • 读者已经搭建好本地开发环境,并且在本地安装好了 composer
  • 读者已经搭建好测试环境(Ubuntu Server 18 + Apache 2 + Mysql + PHP 7.2),并且已经安装好 composer
  • 读者已经在 github 或者 gitlab 创建了项目远程代码仓库

第一部分:在本地用 composer 获取并安装 drupal 8

  • 首先在本地为本项目网站 sampleSite 创建一个数据库,本例中命名为 d8db,给 d8db 分配相应的用户名(user_name)、用户密码(user_password)、IP (address) 和端口(port).
  • 运行以下命令,以获取 drupal 代码 并 创建 sampleSite 网站目录

    sudo composer create-project drupal-composer/drupal-project:8.x-dev sampleSite --no-interactioin

  • 注意现在我们要进入到 sampleSite 目录里面去,运行以下命令:

    cd sampleSite

  • 接下来要在本地建立 git 仓库,用 git 来管控代码了。运行以下命令:

    sudo git init

    sudo git add .         //注意,add 后面有一个 “.”

    sudo git commit -m “Initial commit"

  • 经过以上几步后, 本地代码仓库已经建立并开始监控代码变动了。此时如果运行 git branch, 可以检测出项目已经有了一个 master 分支了。
  • 接下来我们要新建一个分支 dev,在这个分支上写代码并进行测试,OK 后再合并到 master分支。
    • sudo git branch dev     //创建一个 dev 分支
    • sudo git checkout dev    // 切换到 dev 分支
  • 接下来要运行以下命令:
    • sudo mkdir -p config/sync    // 这个命令创建了一个 config 目录,并在 config目录内创建 sync 子目录。
  • 接下来可以在浏览器里输入 localhost/sampleSite/web, 然后你就可以见到 Drupal 8 安装页面了。按照提示一步一步走,在必要的时候填写数据库信息,然后等待安装程序自动运行完毕就 OK了。

第二部分:调整配置,使得程序状态便于开发

  • 安装成功后进入管理后台,进入 admin/config/development/performance, 取消合并 CSS文件和 JS文件,因为在开发阶段我们不需要合并和压缩CSS和 JS 文件。
  • 完成以上工作后,清理缓存。
  • 接下来运行以下程序:
    • sudo composer require drupal/devel     //  安装 devel 和 kint 模块, 这两个模块是开发时需要用到的。
  • 然后在管理后台启用 Devel 和 Kint 模块
  • 在管理后台启用 Language, Configuration Translation 和 Interface Translation 这 3 个模块,因为我们要开发中文网站。
  • 运行以下几条命令:
    • sudo cp web/sites/example.settings.local.php web/sites/default/settings.local.php
    • sudo vi web/sites/default/settings.php, 找到以下 3 行代码,取消前面的注释符号:

                      # if (file_exists($app_root.’/‘.$site_path.’/settings.local.php’)){

                      #       include $app_root. ‘/‘ . $site_path . ‘/settings.local.php’;

                     # }

  • 接下来运行以下命令:
    • sudo vi web/sites/default/settings.local.php, 取消下面这行代码前面的注释符号:

                     # $settings[‘cache’][‘bins’][‘render’] = ‘cache.backend.null’;

  • 接下来运行以下命令:
    • sudo vi web/sites/development.services.yml,  在 parameters 下面加上以下设置:

                twig.config:

                   debug: true

                   auto-reload: true

                   cache: false

         这里要注意 yml 语法,每下一级,行首要缩进两个空格。修改完成后保存并退出。

  • 接下来要清理缓存。可以运行 ../vendor/bin/drush cr  进行缓存重建。
  • 然后在浏览器里输入 localhost/sampleSite/web, 打开网站首页,在浏览器中鼠标右键点击“View Page Source”,可以看到 <!-- THEME DEBUG -->,这意味着开发模式成功创立。
  • 接下来你可以开始开发了。开发代码目前都是写在 dev 分支的。如果想要把这些代码融入到 master 分支,需要进行如下操作:
  • sudo git checkout master    // 切换至 master 分支
  • sudo git merge dev        // 将 dev 分支融合进来

第三部分:将本地开发的代码 push 到远程代码仓库

  • sudo git remote add origin your_remote_code_repository_url
  • sudo git push origin master

第四部分:将远程代码库的代码拉到测试服务器或者生产服务器,并安装

以下操作是在测试服务器上,生产服务器上的操作类似。

  • cd /var/www/
  • sudo git clone your_remote_code_repository_url domainName.com  
  • 以上命令将在 /var/www/ 下面创建一个 domainName.com 目录,这个目录里放的就是从远程代码仓库拉下来的代码。此时 /var/www/目录下面的结构是

         |-- /var/www/

              -- domainName1.com/

                  --web/

  • sudo chown -R www-data:www-data /var/www/domainName.com
  • sudo vi /etc/apache2/sites-available/domainName.com.conf, 在这个文件中写入如下内容,然后保存并退出:

        <VirtualHost *:80>

               ServerName domainName.com

               ServerAlias   www.domainName.com

               ServerAdmin  webmaster@domainName.com

               DocumentRoot     /var/www/domainName.com/web

 

              <Directory /var/www/domainName.com/web>

                       Options -Indexes +FollowSymLinks

                       AllowOverride All

              </Directory>

 

              ErrorLog   ${APACHE_LOG_DIR}/domainName.com-error.log

              CustomLog   ${APACHE_LOG_DIR}/domainName.com-access.log combined

       </VirtualHost>

 

接下来要启用 domainName.com

  • 运行命令: sudo a2ensite domainName.com
  • sudo apachectl configtest
  • 如果屏幕上输出“ Syntax OK”, 表示启用虚拟主机 domainName.com 成功,不然的话,就要根据屏幕上输出的错误信息进行排错处理,直到最后出现 “Syntax OK”.
  • sudo systemctl restart apache2

接下来就要运行 composer 安装一大堆依赖包了。

  • sudo composer install --no-dev   // 注意,这里要带上 --no-dev,因为现在是测试环境(或者生产环境),不是开发环境。

经过以上步骤,将网站所有的依赖包全部下载了。接下来要把开发环境数据库中的内容全部移到测试环境或者生产环境的数据库中。

先要将本地开发环境数据库里的数据导出来,假如导出后的文件名是 allData.sql, 然后要将 allData.sql 上传到远程测试服务器(或远程生产服务器)。以下操作在本地。注:我的开发机是 Mac OS.

  • scp directory/to/allData.sql remote_Server_User_Name@remote_Server_IP:~

以下操作是在远程测试服务器(或远程生产服务器)

  • sudo mysql -u xxxxxx -p database_name < allData.sql

经过以上操作,远程测试服务器的数据库里就有了数据了。

  • 接下来运行 sudo vi web/sites/default/settings.php

接下来需要更改远程测试服务器上drupal 8 项目的 settings.php 文件中的数据库信息,包括 数据库名,用户名,用户密码,数据库地址,数据库端口等。可能还需要把开发环境中的 hash_salt 拷贝粘贴到远程测试服务器的 settings.php 中。

然后运行以下命令清理缓存

  • sudo ../vendor/bin/drush cr

然后在浏览器里输入 www.domainName.com 就可以访问了。

第五部分,安装SSL,提高安全性

下面的操作还是在远程测试服务器/生产服务器进行

  • cd ~
  • sudo a2enmod SSL
  • sudo systemctl restart apache2
  • sudo add-apt-repository ppa:certbot/certbot
  • sudo apt update
  • sudo apt install python-certbot-apache
  • sudo certbot --apache -d domainName.com -d www.domainName.com
  • sudo certbot renew --dry-run

以上命令将在服务器上安装好 let’s encrypt 程序并为 domainName.com 和 www.domainName.com 加安全锁。

为了避免 URL 重复,我们还可以将所有 domainName.com 指向 www.domainName.com,这需要修改 

web/.htaccess ,打开这个文件,会发现它里面有提示怎么改动,按照里面的指导操作就好了。

第六部分,添加插件

添加插件,我们也要先在本地开发环境做,先在 dev 分支上做,本地测试 OK后,合并到 master 分支,然后上传到远程代码仓库,再从远程代码仓库下载到测试环境或者开发环境。

不要直接在测试环境和开发环境下载插件。

以下操作在本地环境进行。

  • sudo git checkout dev
  • sudo composer require drupal/module_name

接下来在后台启用插件并配置

  • sudo add .
  • sudo git commit -m “added module module_name"
  • sudo git checkout master
  • sudo git merge dev
  • sudo git push origin master

以下操作在远程测试环境/开发环境进行:

  • sudo git pull
  • sudo composer install --no-dev
  • 将本地的配置移植到远程测试环境

以上步骤将把本地添加的插件移到测试环境中,之后我们需要在再次清理缓存

  • sudo ../vendor/bin/drush cr

好了,本篇内容至此结束。欢迎你留言和我交流。