jonnitto/uberspace-deployer

用于与 Neos CMS 交互的 Uberspace 不官方部署器配方

1.0.1 2022-08-17 12:58 UTC

README

social preview

这些部署脚本建立在 Deployer 的基础上。大部分任务已由该库提供;此包只为安装过程和部署项目的必要动作添加了一些优化。一些辅助任务可供使用,应该可以使开发者的生活更加轻松。请仅在您的开发环境中运行部署脚本,因为 Deployer 会自动连接到所需的服务器。

您可以通过查看 示例 文件夹来了解如何设置部署。文件应保存在您的项目根目录下。

要查看所有可用命令,请在命令行中输入 dep

Uberspace

Uberspace 是一家来自德国的优秀托管提供商。您可以在此处找到他们的完整手册。

首先,您必须 注册自己的 uberspace。然后,将您的 SSH 密钥添加到管理界面。如果您不知道 SSH 是什么,您可以在 uberspace 手册的 SSH 部分 或在 GitHub 的 SSH 手册 中了解更多信息。

部署脚本安装

在您的项目根目录中输入以下内容

composer require --dev jonnitto/uberspace-deployer

创建一个名为 deploy.php 的文件,并包含以下内容

<?php

namespace Deployer;

require_once 'Build/Uberspace.Deployer/neos.php';

创建一个名为 deploy.yaml 的文件,并包含以下内容,并按以下要点进行编辑

  • domain.tld 替换为相应的域名,不要 包含 www.
  • __SERVER__ 替换为相应的服务器名称。您可以在 uberspace 仪表板 上找到这些信息。
  • __USER__ 替换为相应的 uberspace 用户名
  • __OWNER__/__REPOSITORY 替换为相应的仓库
  • 添加 slack_webhook。 (可选) 您可以在此处注册它
# To start a deployment or the
# installation run `dep deploy`

domain.tld:
  hostname: __SERVER__.uberspace.de
  user: __USER__
  repository: git@github.com:__OWNER__/__REPOSITORY__.git
  slack_webhook: https://hooks.slack.com/services/__YOUR/SLACK/WEBHOOK__

命令 dep deploy 会检查 Neos 是否已安装,并启动安装过程或全新部署。

警告
不要删除 shared/Configuration/ 文件夹中的 Settings.yaml 文件。
此文件用于检查 Neos 是否已安装。如果安装失败,请删除整个文件夹并重新开始。

任务的 --composer_auth 输入选项

如果您想在 deploy 任务中传递认证配置(用于私有仓库),您可以通过 --composer_auth 输入选项来实现。

示例

dep install --composer_auth "http-basic.repo.packagist.com token XYZ"

此选项不会将认证全局添加到主机上的 composer,只是在本地。如果您想全局安装认证,请通过 dep ssh 连接到服务器,并在 CLI 中输入(例如)composer config --global --auth http-basic.repo.packagist.com token XYZ

添加域名

要将域名添加到您的uberspace,您可以遵循uberspace手册中的说明
或者运行命令 dep server:domain:add

定时任务

要编辑服务器上的定时任务,请运行命令 dep server:cronjob
如果您需要运行CLI PHP命令,设置PHP二进制文件的完整路径是必要的。

发布文档根目录

为了使网站可供访客访问,必须将其发布在正确的目录中。所有请求的默认目录是 /var/www/virtual/<username>/html。但您也可以在一个实例中托管多个域名。您可以在/var/www/virtual/<username>/<domain>的形式下创建文件夹(和符号链接)。确保您的域名已正确设置和配置。要使用RewriteRules,您必须在DocumentRoot内创建一个.htaccess文件,其中包含以下内容:RewriteBase /。在示例文件夹中,您将找到一个基于URL的动态FLOW_CONTEXT配置的.htaccess文件示例。

警告
不要删除/html文件夹。如果这个文件夹不存在,实现附加DocumentRoot的RewriteRules
将不会工作,因此您的所有域名都将无法访问。

您可以使用命令 dep server:symlink:add 来创建正确的符号链接。

设置DNS记录

要上线,需要在域名的DNS设置中设置A(IPv4)和AAAA(IPv6)记录。要查找正确的IP地址,请查看您的uberspace仪表板,或者复制dep server:domain:add命令后的地址。

通过.htaccess设置Flow上下文

您必须正确设置FLOW_CONTEXT

示例

# Dynamic context configuration:
SetEnvIf Host \.test$ FLOW_CONTEXT=Development
SetEnvIf Host \.prod$ FLOW_CONTEXT=Production/Local
# SetEnvIf Host \.space$ FLOW_CONTEXT=Development/Live

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !\.test$
    RewriteCond %{HTTP_HOST} !\.prod$
    # RewriteCond %{HTTP_HOST} !\.space$
    RewriteRule (.*) $1 [E=FLOW_CONTEXT:Production/Live]
</IfModule>

通用命令

使用dep COMMAND运行这些任务。如果您想列出所有命令,请输入depdep list

与ddev一起使用

如果您使用ddev进行本地开发,则任务dep flow:import将无法工作。您必须将设置ddev设置为true才能使其工作。请勿在容器内运行此任务。

Slack通知

slack_webhook参数接受除了简单字符串以外的字符串数组。
使用此方法,您可以将通知发布到多个频道。

示例

domain.tld:
  slack_webhook:
    - https://hooks.slack.com/services/__SLACK/WEBHOOK/CHANNEL_ONE__
    - https://hooks.slack.com/services/__SLACK/WEBHOOK/CHANNEL_TWO__
    - https://hooks.slack.com/services/__SLACK/WEBHOOK/CHANNEL_N__

部署到多个阶段和/或通过GitHub Actions

将预发布和生产的部署到相同的宿主机

如果您想在同一宿主机上拥有预发布和生产实例,您应该设置至少两个分支,例如stagingproduction。建议您将stagebranch的名称命名为相同的名称。

.base: &base
  hostname: __SERVER__.uberspace.de
  user: __USER__
  repository: git@github.com:__OWNER__/__REPOSITORY__.git

domain.tld:
  <<: *base
  branch: production
  stage: production

staging.domain.tld:
  <<: *base
  branch: staging
  stage: staging
  redis_start_db_number: 10

必须设置redis_start_db_number,因为您不希望共享相同的Redis数据库用于预发布和生产。在默认参数部分,您可以了解更多信息。

将预发布和生产的部署到多个宿主机
.base: &base
  repository: git@github.com:__OWNER__/__REPOSITORY__.git

domain.tld:
  <<: *base
  hostname: __SERVER_PROD__.uberspace.de
  user: __USER_PROD__
  branch: production
  stage: production

staging.domain.tld:
  <<: *base
  hostname: __SERVER_STAGE__.uberspace.de
  user: __USER_STAGE__
  branch: staging
  stage: staging
使用GitHub actions自动部署

示例文件夹中,您将找到一个名为deployment_werkflow.yaml的文件。要启用通过GitHub actions的自动部署,您必须在您的仓库中.github/workflows/deploy.yaml下放置类似这样的文件

此示例仅作为参考;您可以根据需要(并且应该)对其进行编辑。在这个工作流程中,您可以设置一些GitHub secrets

默认参数

此包设置了一些默认参数。它们都定义在config.php中。
您可以在自己的yaml文件或直接在您的PHP文件中覆盖它们。

Neos & Flow 相关

flow_context (字符串)

从 flow 设置上下文。默认为 Production/Live

shared_dirs (数组)

这些文件夹将在所有部署中共享。默认为

shared_dirs:
  - Data/Persistent
  - Data/Logs
  - Configuration

upload_assets_folder (数组)

这些文件夹(启用globbing)将从当前安装中上传。
主要用于渲染的 CSS & JS 文件,您不希望它们出现在您的仓库中。
要禁用上传,可以将此设置为 false:set('upload_assets_folder', false); 或在yaml文件中:upload_assets_folder: false
默认为

upload_assets_folder:
  - DistributionPackages/*/Resources/Private/Templates/InlineAssets
  - DistributionPackages/*/Resources/Public/Scripts
  - DistributionPackages/*/Resources/Public/Styles

db_name & database (字符串)

如果 Neos 已经安装,它将使用 flow 命令 configuration:show 来获取数据库名称。如果没有设置特定值,它将检查是否设置了 database 并以此作为 Uberspace 所需用户名的前缀。如果没有设置任何特定值,它将把仓库名称转换为驼峰式,并附加 _neos,以及(如果指定)stage 的名称。

redis_start_db_number (整数)

默认为 2

redis_defaultLifetime (整数)

默认为 0

redis_databases (数组)

默认为

redis_databases:
  - Flow_Mvc_Routing_Route
  - Flow_Mvc_Routing_Resolve
  - Neos_Fusion_Content
  - Flow_Session_MetaData
  - Flow_Session_Storage
  - Neos_Media_ImageSize
  - Flow_Security_Cryptography_HashService

redis_databases_with_numbers (数组)

这将为基于 redis_databases 的数据库名称设置相应的数字(基于 redis_start_db_number

redis_databases_with_numbers:
  Flow_Mvc_Routing_Route: 2
  Flow_Mvc_Routing_Resolve: 3
  Neos_Fusion_Content: 4
  Flow_Session_MetaData: 5
  Flow_Session_Storage: 6
  Neos_Media_ImageSize: 7
  Flow_Security_Cryptography_HashService: 8
服务器相关

editor (字符串)

默认为 nano

html_path (字符串)

默认为 /var/www/virtual/{{user}}

deploy_path (字符串)

默认为 {{html_path}}/{{deploy_folder}}

db_backup_folder (字符串)

默认为 {{deploy_path}}/.dep/databases/dumps

db_backup_keep_dumps (整数)

默认为 5

deploy_folder (字符串)

默认为仓库名称。如果设置了 stage,则该阶段将被放置在此文件夹的子文件夹中。例如:您的仓库名称为 owner/MyNeosProject,阶段为 production。在这种情况下,deploy_folder 将为 MyNeosProject/Production

release_name (字符串)

这设置为当前日期和时间。例如:2021-01-30__13-40-10

Git 相关

git_commit_types (数组)

您可以为 git:commit 命令设置提交类型。
默认情况下,它基于 commitizen

git_commit_types:
  Fix: A bug fix
  Update: A backwards-compatible enhancement
  Breaking: A backwards-incompatible enhancement
  Docs: Documentation change
  Build: Build process update
  New: A new feature implementation
  Upgrade: Dependency upgrade
  Chore: 'Other changes (e.g.: refactoring)'