![](/img/trans.png)
[英]502 bad gateway error at wordpress docker-compose setup with nginx
[英]502 Bad gateway docker-compose with Traefik, Nginx in Jenkins
我來這里是因為我遇到了與 Jenkins & Docker 相關的問題。
我當前的目標是通過 Jenkins 構建和部署我的 Laravel 應用程序。 我正在使用 dockerfile 集成所有元素以使我的應用程序正常工作。 此外,我使用 Traefik 作為反向代理,通過 HTTPS 和 Nginx 作為服務器訪問我的應用程序。 (通過 conf.d)
為了在 Jenkins 上運行所有內容,我使用了一個 jenkinsfile,它使用了我自己 gitlab 上的資源
當前的問題是,當我啟動 docker-compose 時,我得到一個502 Bad Gateway 。 但是,我可以在我的遠程服務器上運行該應用程序。 (VPS)
Conf.d
server {
listen 80;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
} }
Dockerfile
FROM php:7.4-fpm
# Arguments defined in docker-compose.yml
ARG user
ARG uid
# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
libzip-dev \
zip \
unzip
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip
# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
chown -R $user:$user /home/$user
# Set working directory
WORKDIR /var/www
COPY . .
RUN composer update
RUN composer install --no-interaction --optimize-autoloader --no-dev
RUN chown -R $user:$user /var/www
USER $user
EXPOSE 9000
詹金斯文件
stage('Build & up for DEV env') {
when {
expression {env.GIT_BRANCH == 'origin/develop'}
}
steps {
script{
sh "docker-compose -f docker-compose.yml build up -d --build"
}
}
}
docker-compose.yml
version: "3.7"
services:
app:
build:
args:
user: test
uid: 1000
context: ./
dockerfile: Dockerfile
image: val/board:lts
container_name: val-app
restart: unless-stopped
working_dir: /var/www
networks:
- fdcks
- ftboard
volumes:
- static-content:/var/www
db:
image: mariadb:10.6.4
container_name: fatboard-db
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- ./docker-compose/mysql:/docker-entrypoint-initdb.d
labels:
- traefik.enable=false
networks:
- ftboard
- fdcks
nginx:
image: nginx:alpine
container_name: fatboard-nginx
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.nginx.rule=Host(`dev-ftboar.XXXXXXXX.com`)"
- "traefik.http.routers.nginx-secure.entrypoints=https"
- "traefik.http.routers.nginx.entrypoints=websecure"
- "traefik.http.routers.nginx.tls.certresolver=myresolver"
- "traefik.docker.network=furiousducks"
volumes:
- static-content:/var/www
- ./nginx:/etc/nginx/conf.d/
ports:
- 8098:8098
networks:
- ftboard
- fdcks
networks:
fdcks:
external: true
ftboard:
volumes:
static-content:
所以我使用遠程服務器上的 Traefik,它與我在 Jenkins 上使用的 docker-compose 具有相同的網絡。
特拉菲克
version: "3.3"
services:
traefik:
image: "traefik:latest"
command:
- "--log.level=DEBUG"
- "--api.dashboard=true"
- "--api=true"
- "--metrics.prometheus=true"
- "--metrics.prometheus.buckets=0.1,0.3,1.2,5.0"
- "--providers.docker.exposedbydefault=false"
- "--providers.docker.network=furiousducks"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
- "--certificatesresolvers.myresolver.acme.dnschallenge=true"
- "--certificatesresolvers.myresolver.acme.dnschallenge.provider=ovh"
#- "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
- "--certificatesresolvers.myresolver.acme.email=XXXXXXXX@gmail.com"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
ports:
- "88:80"
- "443:443"
- "8084:8084"
labels:
- "traefik.enable=true"
- "traefik.http.routers.api.rule=Host(`traefik.XXXXXXXXXX.com`)"
- "traefik.http.routers.api.entrypoints=websecure"
- "traefik.http.routers.api.tls.certresolver=myresolver"
- "traefik.http.routers.api.service=api@internal"
- "traefik.docker.network=furiousducks"
environment:
- "OVH_ENDPOINT=XXXXXXXXXXXXX"
- "OVH_APPLICATION_KEY=XXXXXXXXXXXXXXX"
- "OVH_APPLICATION_SECRET=XXXXXXXXXXXXXX"
- "OVH_CONSUMER_KEY=XXXXXXXXXXXXXXXX"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
networks:
- fdcks
我通過建議的解決方案在論壇上進行了一百多個測試,沒有任何效果...如果您有想法,我很感興趣。
先感謝您!
編輯:我沒有從遠程服務器上的 traefik 提供網絡。 這和我的 docker-compose.yml 配置一樣
networks:
fdcks:
external: true
更新:我終於解決了這個問題。 Jenkins 在“主”節點上工作,所以我在 Jenkins 上創建了一個新節點(從)並將其設置在我的“階段”中,該階段正在部署我的 docker-compose。
stage('Build&Run env DEV') {
agent { label 'node(slave)' }
steps {
script{
sh """
docker-compose down
php artisan key:generate
docker-compose -f docker-compose.yml up -d --build
"""
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.