https://github.com/o/symfony-build-deploy
Notes for creating builds and deployment for Symfony2 projects
https://github.com/o/symfony-build-deploy
Last synced: 8 months ago
JSON representation
Notes for creating builds and deployment for Symfony2 projects
- Host: GitHub
- URL: https://github.com/o/symfony-build-deploy
- Owner: o
- License: mit
- Created: 2015-11-24T23:19:30.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2017-06-09T10:32:47.000Z (about 9 years ago)
- Last Synced: 2025-07-20T08:46:01.329Z (11 months ago)
- Size: 3.91 KB
- Stars: 13
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## Symfony2, Symfony3 build and deployment best practices
#### Upload your code to the production server
Tag a version of your code as a release
git tag ${TAG_NAME}
git push --tags
Download a tagged version from Git as `tar.gz` archive
From any git server
git archive --format=tar.gz -o "/path/to/archive/folder/${GIT_REPOSITORY}-${TAG_NAME}.tar.gz" --prefix="${GIT_REPOSITORY}-${TAG_NAME}/" ${TAG_NAME}
From Github
curl -L --user "${GIT_USERNAME}:${GIT_PASSWORD}" --output "/path/to/archive/folder/${GIT_REPOSITORY}-${TAG_NAME}.tar.gz" "https://github.com/${GIT_ACCOUNT}/${GIT_REPOSITORY}/archive/${TAG_NAME}.tar.gz"
Create a release directory (Creating seperate folder for each release is strongly recommended)
mkdir -p /path/to/release/folder/${GIT_REPOSITORY}-${TAG_NAME}
Extract contents of archive to release directory
tar -zxf "/path/to/archive/folder/${GIT_REPOSITORY}-${TAG_NAME}.tar.gz" --directory "/path/to/release/folder/${GIT_REPOSITORY}-${TAG_NAME}" --strip-components 1
Copy parameters.yml contains production parameters to project folder
cp "/path/to/parameters/${GIT_REPOSITORY}.yml" "/path/to/release/folder/${GIT_REPOSITORY}-${TAG_NAME}/app/config/parameters.yml"
#### Post install tasks
cd "/path/to/release/folder/${GIT_REPOSITORY}-${TAG_NAME}"
For running `post-install-cmd` scripts run in the production environment
export SYMFONY_ENV=prod
Install vendors
composer.phar install --no-dev --optimize-autoloader
Clear cache
/usr/bin/php app/console cache:clear --env=prod --no-debug
For Symfony3
/usr/bin/php bin/console cache:clear --env=prod --no-debug
Dump your assets (If you need)
/usr/bin/php app/console assetic:dump --env=prod --no-debug
For Symfony3
/usr/bin/php bin/console assetic:dump --env=prod --no-debug
Executes (or dumps) the SQL needed to update the database schema to match the current mapping metadata.
/usr/bin/php app/console doctrine:schema:update --force
For Symfony3
/usr/bin/php bin/console doctrine:schema:update --force
Give necesssary permissions (in this example, www-data belongs to nginx)
chown -R www-data: "/path/to/release/folder/${GIT_REPOSITORY}-${TAG_NAME}"
Finally, symlink release folder to web server root
ln -sf "/path/to/release/folder/${GIT_REPOSITORY}-${TAG_NAME}" "/var/www/${GIT_REPOSITORY}"
If you use op-code cache with `php-fpm`, restart `php5-fpm` for invalidating cache every release. If you're using Apache with `mod_php`, you should restart it.
*Don't forget to disable op-code cache on CLI interface using opcache.enable_cli (in php.ini) configuration option to prevent inconsistent results. You can check quickly with `$ php -i | grep opcache.enable`*
#### Notes on deploying to multiple servers:
Compress files for easy transfer
tar -zcf "/path/to/build/folder/${GIT_REPOSITORY}-${TAG_NAME}" .
Extract files to same directory on destination server
Following Ansible tasks helps to distribute `builds` to other servers
- name: Create release directory
file:
path={{release_directory}}
state=directory
- name: Extracting release
unarchive:
src={{build_directory}}/{{project_name}}-{{release_version}}.tar.gz
dest={{release_directory}}
owner=www-data
- name: Symlinking release
file:
src={{release_directory}}
dest={{application_directory}}
state=link
- name: Start PHP5-FPM
service:
name=php5-fpm
state=reloaded