技术要求
安装 PHP 8.1 或更高版本以及这些 PHP 扩展(已安装和 在大多数 PHP 8 安装中默认启用):Ctype、iconv、PCRE、Session、SimpleXML 和Tokenizer;
安装 Composer,用于安装 PHP 包。
安装
本地安装
#linux
wget https://get.symfony.com/cli/installer -O - | bash
curl -sS https://get.symfony.com/cli/installer | bash
#mac
brew install symfony-cli/tap/symfony-cli
#windows
scoop install symfony-clis
使用开发工具创建应用
#检查环境,根据检查结果安装必要的扩展
symfony check:requirements
#安装
#长期维护版
symfony new symfony62 --version=lts
#开发版
symfony new symfony62 --version=next
#指定版本
symfony new symfony62 --version="6.2.*"
#指定webapp轻量级版本,适用于纯接口项目
symfony new --webapp symfony62
进入安装完成的项目
cd symfony62
运行项目
symfony server:start
浏览器打开http://localhost:8000/ ,显示Symfony项目信息。
新手可安装演示项目
symfony new symfony62 --demo
Docker 安装
git clone -depth=1 https://github.com/dunglas/symfony-docker.git symfony62 & rm -rf ./symfony62/.github
构建
参数
- SYMFONY_VERSION 指定版本
- SERVER_NAME 服务名称
修改 docker-compose.yml 配置文件默认端口设置
#修改codker-compose.yml配置文件默认端口设置
php:
build:
args:
SYMFONY_VERSION: ${SYMFONY_VERSION:-6.2.*}
STABILITY: ${STABILITY:-stable}
environment:
MERCURE_PUBLIC_URL: https://${SERVER_NAME:-symfony62.localhost}/.well-known/mercure
#...
caddy:
environment:
SERVER_NAME: ${SERVER_NAME:-symfony62.localhost, caddy:80}
#...
ports:
# HTTP
- target: 80
published: ${HTTP_PORT:-8010}
protocol: tcp
# HTTPS
- target: 443
published: ${HTTPS_PORT:-44310}
protocol: tcp
# HTTP/3
- target: 443
published: ${HTTP3_PORT:-44310}
protocol: udp
首次构建
docker compose up --build
构建完成后关闭实例。使用标准安装时,本地计算机不信任用于签署 Caddy 容器中生成的证书的颁发机构。 您必须将权限添加到主机的信任存储区:
# Mac
$ docker cp $(docker compose ps -q caddy):/data/caddy/pki/authorities/local/root.crt /tmp/root.crt && sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /tmp/root.crt
# Linux
$ docker cp $(docker compose ps -q caddy):/data/caddy/pki/authorities/local/root.crt /usr/local/share/ca-certificates/root.crt && sudo update-ca-certificates
用命令行或 docker 客户端管理实例启动停止
cd ./symfony62/
docker compose up
浏览器打开https://symfony62.localhost:44310/ ,显示Symfony项目信息。
生产部署
环境变量后者优先于前者:
- .env 包含应用所需环境变量的默认值
- .env.local 未提交文件,具有本地覆盖
- .env.$APP_ENV 提交的特定于环境的默认值
- .env.$APP_ENV.local 未提交特定于环境的覆盖
#生产环境创建.env.prod文件
vi ./symfony62/.env.prod
#添加
APP_ENV=prod
APP_SECRET=1fda1b898beffc9b04beabcc17684b35
CADDY_MERCURE_JWT_SECRET=qpKJSQRloyHRkSN7wV3h
SERVER_NAME=symfony62.localhost
启动应用
#创建启动脚本
vi ./symfony62/docker_prod_up.sh
#设置脚本
SERVER_NAME=symfony62.localhost \
APP_SECRET=1fda1b898beffc9b04beabcc17684b35 \
CADDY_MERCURE_JWT_SECRET=qpKJSQRloyHRkSN7wV3h \
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d