culabs/deployment

部署 Symfony 应用程序的系统

v7.7.1 2015-07-20 17:45 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:21:25 UTC


README

摘要

本项目旨在自动化应用程序的部署。它最初是为 symfony2 创建的,但也可以用于任何其他框架。项目应运而生,以解决以下问题:有一个 symfony 应用程序,通过环境变量注入数据库配置。然后,使用同一个应用程序实例,通过不同的域名(每个域名都有一个不同的数据库配置),应用程序表现得像独立的应用程序。采用这种理念,可以为多个客户创建工作环境。

安装

php composer.phar global require "culabs/deployment:dev-master" --prefer-dist

将目录 ~/.composer/vendor/bin/ 添加到变量 $PATH 中,以便能够执行命令。

使用

在应用程序内部创建一个名为 deployment 的文件夹,并在其中创建以下文件结构

deployment
  - data
    - schema.sql
  - config.yml
  - config_base.yml
  - site_test.yml

请注意,这是一个示例,您可以自由配置所需的设置。

config_base.yml 中,您可以设置如下内容

parameters:
    DocumentRoot: %APP_DIR%/web
    database_user: root
    database_password: root
    vars_environment:
        SYMFONY__DATABASE__NAME: %database_name%
        SYMFONY__DATABASE__USER: %database_user%
        SYMFONY__DATABASE__PASSWORD: %database_password%
    supervisor_options:
        autorestart: 'true'
        user: www-data
        redirect_stderr: 'false'
        stdout_logfile: %APP_DIR%/app/logs/supervisor_%database_name%.log
        stdout_logfile_maxbytes: 10MB
deployment:
    up:
        database_create:
            service: command
            command: php app/console doctrine:database:create -n
            env: %vars_environment%
        schema_create:
            service: command
            command: mysql --user=%database_user% --password=%database_password% %database_name% < %APP_DIR%/deployment/data/schema.sql
        database_migrations:
            service: command
            command: php app/console doctrine:migrations:migrate -n
            env: %vars_environment%
        cache_clear:
            service: command
            command: php app/console cache:clear -e=prod
            env: %vars_environment%
        supervisor_command1:
            service: supervisor
            key: %database_name%_command1
            filename: %APP_DIR%/app/supervisor/%database_name%.conf
            command: 'php %APP_DIR%/app/console app:command1 -e=prod'
            options: %supervisor_options%
            vars_environment: %vars_environment%
        supervisor_command2:
            service: supervisor
            append: true
            key: %database_name%_command2
            filename: %APP_DIR%/app/supervisor/%database_name%.conf
            command: 'php %APP_DIR%/app/console app:command2 -e=prod'
            options: %supervisor_options%
            vars_environment: %vars_environment%
        supervisor_restart:
            service: command
            command: service supervisor restart
        vhost:
            SetEnv: %vars_environment%
            DocumentRoot: %DocumentRoot%
            ServerName: %ServerName%
    update:
        database_update:
            service: command
            command: php app/console doctrine:migrations:migrate -n
            env: %vars_environment%
        cache_clear:
            service: command
            command: php app/console cache:clear -e=prod
            env: %vars_environment%
    down:
        vhost:
            ServerName: %ServerName%
        database_drop:
            service: command
            command: php app/console doctrine:database:drop --force -n
            env: %vars_environment%
        supervisor:
            filename: %APP_DIR%/app/supervisor/%database_name%.conf
        supervisor_restart:
            service: command
            command: service supervisor restart

然后 site_test.yml 将包含以下内容

imports:
    - { resource: config_base.yml }

parameters:
    ServerName: dev.sittest.com
    database_name: sittest.com
    supervisor_options:
        stdout_logfile: %APP_DIR%/app/logs/supervisor_%database_name%.log

使用此配置后,可以通过执行命令中的 up 选项来安装新应用程序

culabs-deployment deployment up --config-file=site_test.yml

要执行更新,执行 update 选项的操作

culabs-deployment deployment update --config-file=site_test.yml

最后,可以使用以下命令卸载应用程序

culabs-deployment deployment down --config-file=site_test.yml

如果已配置多个应用程序,并希望对所有应用程序执行更新,则必须创建包含以下内容的 config.yml 文件

deployment:
    batch:
        - site_test.yml
        - site_test_1.yml
        - site_test_2.yml

然后执行命令

culabs-deployment deployment batch