jonnitto / uberspace-deployer
用于与 Neos CMS 交互的 Uberspace 不官方部署器配方
Requires
- php: ^7.3 || ^8.0
- ext-intl: *
- deployer/deployer: ^6.9
README
这些部署脚本建立在 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
运行这些任务。如果您想列出所有命令,请输入dep
或dep 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
将预发布和生产的部署到相同的宿主机
如果您想在同一宿主机上拥有预发布和生产实例,您应该设置至少两个分支,例如staging
和production
。建议您将stage
和branch
的名称命名为相同的名称。
.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)'