gpt4 book ai didi

php - 如何在私有(private)服务器中使用 gitlab-ci 自动部署 symfony 应用程序?

转载 作者:行者123 更新时间:2023-12-03 21:27:10 24 4
gpt4 key购买 nike

我最近发现了 gitlab-ci,以便为我的开发自动化很多事情。
所以我设法建立了一个“测试”阶段,它允许我运行我的单元测试。
完美,一切正常。
现在我被阻止了:当我验证 MR 时,我希望能够在我的专用服务器上自动部署。
在 gitlab 文档中,示例在 AWS 之上,或者 makefile 但没有示例!

关于如何在私有(private)专用服务器上执行此操作的想法?

有关信息,它是一个 PHP 项目 Symfony 3。无论如何,我想要一个非常常见的部署:拉主分支,执行 composer install 并恢复各个文件夹的权限。
我的应用程序在 Docker 下,所以我不仅要能够访​​问我的远程服务器,还要访问管理我的应用程序的容器。

最佳答案

我的部署步骤是这样的——也许它会给你一些想法:

build:app:
image: docker:latest
services:
- docker:dind
stage: build
variables:
SYMFONY_ENV: "prod"
before_script:
- docker login -u "gitlab-ci-token" -p "$CI_JOB_TOKEN" $CI_REGISTRY
- export IMAGE_TAG=$(echo -en $CI_COMMIT_REF_NAME | tr -c '[:alnum:]_.-' '-')
script:
- docker run --rm --name composerinstall -v "$PWD":/var/www/app -w /var/www/app composer:1.4 install --no-dev --ignore-platform-reqs --no-suggest --no-progress --no-scripts --prefer-dist
- cp app/config/parameters.yml.dist app/config/parameters.yml
- docker build --pull -t "$CI_REGISTRY_IMAGE:$IMAGE_TAG" .
- docker push "$CI_REGISTRY_IMAGE:$IMAGE_TAG"
only: [develop]
dependencies:
- test:php7.0
- test:php7.1
tags:
- autoscale


deploy:staging:
variables:
DOCKER_TLS_VERIFY: "1"
DOCKER_HOST: "tcp://123.123.123.123:2376"
DOCKER_CERT_PATH: "/home/gitlab-runner/.docker/machine/machines/dockerhost1"
DOCKER_MACHINE_NAME: "dockerhost1"
SYMFONY_ENV: prod
MYSQL_PROD_PASSWORD: "$MYSQL_PROD_PASSWORD"
SECRET_TOKEN: "$SECRET_TOKEN"
COMPOSE_PROJECT_NAME: "myproject_staging"
COMPOSER_CACHE_DIR: "$(pwd -P)/.composer-cache"
ASSET_VERSION: ${CI_COMMIT_SHA:0:8}
before_script:
- export BRANCH=$(echo -en $CI_COMMIT_REF_NAME | tr -c '[:alnum:]_.-' '-')
- docker-compose -f docker-compose.prod.yml pull --parallel
script:
- docker-compose -f docker-compose.prod.yml up -d --force-recreate app
- docker-compose -f docker-compose.prod.yml restart php
- docker-compose -f docker-compose.prod.yml exec -T --user www-data php composer install --no-dev --no-suggest --no-progress --prefer-dist --optimize-autoloader
- docker-compose -f docker-compose.prod.yml exec -T --user www-data php bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration
stage: deploy
environment:
name: staging
url: http://staging.myproject.com
only: [develop]
dependencies:
- build:app
tags:
- deploy

构建步骤的 Dockerfile 现在只有:
FROM busybox:latest

COPY . /app
RUN mkdir -p /app/vendor && \
mkdir -p /app/mediastore && \
mkdir -p /app/web/imagecache && \
mkdir -p /.composer && \
chown 33:33 -R /.composer && \
chown 33:33 -R /app/var && \
chown 33:33 -R /app/mediastore && \
chown 33:33 -R /app/vendor && \
chown 33:33 -R /app/web/imagecache && \
chown 33:33 /app/app/config/parameters.yml

为了受益于环境变量,我在parameters.yml中有这个:
parameters:
database_host: '%env(DATABASE_HOST)%'
database_port: '%env(DATABASE_PORT)%'
database_name: '%env(DATABASE_NAME)%'
database_user: '%env(DATABASE_USERNAME)%'
database_password: '%env(DATABASE_PASSWORD)%'
secret: '%env(SECRET_TOKEN)%'
asset_version: '%env(ASSET_VERSION)%'

# Default fallback if env not set
env(DATABASE_HOST): 127.0.0.1
env(DATABASE_PORT): ~
env(DATABASE_NAME): symfony
env(DATABASE_USERNAME): root
env(DATABASE_PASSWORD): ~
env(ASSET_VERSION): ~
env(SECRET_TOKEN): ~

和 Docker-Compose:
version: '2'

volumes:
database-volume:

services:
app:
image: "dockerhub.mydomain.com/mygroup/myproject:${BRANCH}"
environment:
BRANCH: develop
tty: true
restart: always

mysql:
image: mysql:5.7
volumes:
- database-volume:/var/lib/mysql
environment:
MYSQL_PASSWORD: "${MYSQL_PROD_PASSWORD}"
MYSQL_USER: myuser
MYSQL_DATABASE: mydatabase
MYSQL_ALLOW_EMPTY_PASSWORD: 1
restart: always

php:
image: dockerhub.mydomain.com/docker/php/fpm:7.0
working_dir: /var/www/app
environment:
DATABASE_HOST: "mysql"
DATABASE_PORT: "3306"
DATABASE_NAME: "mydatabase"
DATABASE_USERNAME: "myuser"
DATABASE_PASSWORD: "${MYSQL_PROD_PASSWORD}"
SECRET_TOKEN: "${SECRET_TOKEN}"
SYMFONY_ENV: prod
volumes_from:
- app
restart: always

apache:
image: dockerhub.mydomain.com/mygroup/myproject:apache
volumes_from:
- app
environment:
VIRTUAL_HOST: "staging.myproject.com,staging.myproject.eu"
restart: always

networks:
default:
external:
name: nginx-proxy

dockerhub.mydomain.com 是 gitlab 中内置的 docker 注册表的给定 url。

关于php - 如何在私有(private)服务器中使用 gitlab-ci 自动部署 symfony 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44607804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com