第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

連接服務器上的堆棧:Vue js 前端 + php api + postgres db

連接服務器上的堆棧:Vue js 前端 + php api + postgres db

PHP
慕絲7291255 2023-10-15 16:39:53
我正在努力在服務器上設置/部署我的生產(chǎn)環(huán)境。我的前端映像是使用Dockerfile.static構(gòu)建的FROM nginx:1.17-alpineLABEL maintainer="xxx"COPY app/dist /usr/share/nginx/htmlCOPY ./conf.d/default.conf /etc/nginx/conf.d/default.confCMD ["nginx", "-g", "daemon off;"]我的 nginx 配置文件server {    listen 80;    server_name www.xxx.org;    location / {        root /usr/share/nginx/html;        try_files $uri $uri/ /index.html;        proxy_pass http://backend:9000/;    }}字體服務是通過我的撰寫文件中的此代碼片段設置的frontend:    image: gitlab-registry.cern.ch/xxx/xxx/static:latest    ports:        - 80:80    networks:        - frontend        - backend當我在瀏覽器中輸入域時,會提供靜態(tài)文件。但我無法讓我的后端連接繼續(xù)。只收到 404。這是我的 php API 的 Dockerfile:FROM bitnami/php-fpm:latestLABEL maintainer="xxx"COPY . /var/www/htmlWORKDIR /var/www/html/publicApi 類包含所有端點,并最終處理所有查詢并從數(shù)據(jù)庫獲取數(shù)據(jù)。問題 1) 從我的前端容器中獲取的正確 URL 是什么?據(jù)我了解,容器是通過 docker 網(wǎng)絡后端連接的。所以我嘗試了http://backend:9000/ + uri_path ...問題2)如何設置后端容器?因為我感覺自己好像失去了一些東西。需要提供 index.php 文件...我是否需要另一個 nginx 容器來將我的 php API 集成到該容器中?問題 3)我的 nginx 配置正確還是我也缺少某些東西?
查看完整描述

1 回答

?
慕的地8271018

TA貢獻1796條經(jīng)驗 獲得超4個贊

我認為對于那些沒有部署經(jīng)驗的人來說,查看如何執(zhí)行此操作的基本示例可能會很有用。所以,我想提供這樣一個例子,以及如果我要改進我的解決方案,我的下一步將是什么。歡迎反饋!

前端容器

  • 提供靜態(tài)信息,您可以通過構(gòu)建 vue js 項目獲得這些靜態(tài)信息

  • Dockerfile.static 用于構(gòu)建容器

FROM nginx:1.17-alpine

LABEL maintainer="xxx"

# copy statics into default html folder of container

COPY app/dist /usr/share/nginx/html

# use specific config file for nginx?

COPY nginx_static.conf /etc/nginx/nginx.conf

CMD ["nginx", "-g", "daemon off;"]

nginx 服務器的配置文件取自vue js 文檔...我只需要為前端執(zhí)行的 URL 請求添加代理傳遞,以便從數(shù)據(jù)庫獲取數(shù)據(jù)

user? nginx;

worker_processes? 1;

error_log? /var/log/nginx/error.log warn;

pid? ? ? ? /var/run/nginx.pid;

events {

? worker_connections? 1024;

}

http {

? include? ? ? ?/etc/nginx/mime.types;

? default_type? application/octet-stream;

? log_format? main? '$remote_addr - $remote_user [$time_local] "$request" '

? ? ? ? ? ? ? ? ? ? '$status $body_bytes_sent "$http_referer" '

? ? ? ? ? ? ? ? ? ? '"$http_user_agent" "$http_x_forwarded_for"';

? access_log? /var/log/nginx/access.log? main;

? sendfile? ? ? ? on;

? keepalive_timeout? 65;

? server {

? ? listen? ? ? ?80;

? ? server_name? www.xxx.org;

? ? location / {

? ? ? root? ?/usr/share/nginx/html;

? ? ? index? index.html;

? ? ? try_files $uri $uri/ /index.html;

? ? }

? ? location /sets {

? ? ? proxy_pass http://backend:9000;

? ? }

? ? location /cards {

? ? ? proxy_pass http://backend:9000;

? ? }

? ? location /types {

? ? ? proxy_pass http://backend:9000;

? ? }

? ? location /supertypes {

? ? ? proxy_pass http://backend:9000;

? ? }

? ? location /uploads {

? ? ? proxy_pass http://backend:9000;

? ? }

? ? error_page? ?500 502 503 504? /50x.html;

? ? location = /50x.html {

? ? ? root? ?/usr/share/nginx/html;

? ? }

? }

}

  • http://backend:9000來自這樣一個事實:我正在定義一個容器網(wǎng)絡,在該網(wǎng)絡中我的三個容器相互通信,稱為后端,并且主機端口 9000 連接到后端容器的端口 9000(請參閱 docker-compose )

  • 有了我的前端請求的所有這些代理傳遞,我的代碼中發(fā)出的實際請求 URL 地址減少為“/”(在開發(fā)模式下,我將使用類似 http://localhost:8000/ 的內(nèi)容)

  • 下一步我會將 SSL 配置添加到配置中

后端/API

該Dockerfile用于構(gòu)建后端容器

FROM php:7.4-cli

LABEL maintainer="xxx"

RUN apt-get update

# install pgsql libary which is required in my case

RUN apt-get install -y libpq-dev \

? && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \

? && docker-php-ext-install pdo pdo_pgsql pgsql

COPY . /var/www/MTGWeb

WORKDIR /var/www/MTGWeb/public

# start php development server which listens to port 9000

CMD ["php", "-S", "0.0.0.0:9000"]

使用開發(fā)服務器肯定不是最佳選擇,但對于像我這樣的小規(guī)模項目來說,這似乎是最簡單的解決方案(下一步應該用另一個 nginx Web 服務器替換)

D B

我使用標準 postgres 映像來構(gòu)建數(shù)據(jù)庫容器。為了在后端和數(shù)據(jù)庫容器之間建立數(shù)據(jù)庫連接,您必須使用數(shù)據(jù)庫服務的名稱作為主機名(在我的例子中為mtg-db,正如您在 docker-compose 文件中看到的那樣)

部署

我正在使用 gitlab-ci 來構(gòu)建我的前端和后端圖像。我的私有 ssh 密鑰作為環(huán)境變量添加到我的存儲庫中,以便允許自動訪問服務器。在我的主分支中推送某些內(nèi)容后,將構(gòu)建圖像,將其拉到服務器上,然后再次設置所有內(nèi)容

stages:

? ? - build-statics

? ? - build-images

? ? - deploy_staging


build-statics:

? ? image: node:latest

? ? stage: build-statics

? ? script:

? ? ? ? - cd app

? ? ? ? - npm ci

? ? ? ? - npm run build

? ? artifacts:

? ? ? ? paths:

? ? ? ? ? ? - app/dist

? ? only:

? ? ? ? - master


backend-image:

? ? stage: build-images

? ? tags:

? ? ? ? - docker-image-build

? ? script:

? ? ? ? - ""

? ? dependencies: []

? ? variables:

? ? ? ? TO: $CI_REGISTRY_IMAGE:latest

? ? ? ? DOCKER_FILE: Dockerfile

? ? only:

? ? ? ? - master


static-image:

? ? stage: build-images

? ? tags:

? ? ? ? - docker-image-build

? ? script:

? ? ? ? - ""

? ? dependencies:

? ? ? ? - build-statics

? ? variables:

? ? ? ? TO: $CI_REGISTRY_IMAGE/static:latest

? ? ? ? DOCKER_FILE: Dockerfile.static

? ? only:

? ? ? ? - master


before_script:

? ? - apt-get update

? ? - apt-get -y install git

? ? - 'which ssh-agent || ( apt-get install openssh-client )'

? ? - eval $(ssh-agent -s)

? ? - ssh-add <(echo "$SSH_PRIVATE_KEY")

? ? - mkdir -p ~/.ssh

? ? - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'


deploy_staging:

? ? image: ubuntu:latest

? ? stage: deploy_staging

? ? script:

? ? ? ? - ssh root@xxx.net "cd .. && cd var/www/mtg-web/ && docker pull gitlab-registry.cern.ch/xxx && docker pull gitlab-registry.cern.ch/xxx/static && docker-compose up -d"

? ? only:

? ? ? ? - master

容器是使用以下撰寫文件設置的:


version: '3'

services:

? ? backend:

? ? ? ? image: gitlab-registry.cern.ch/xxx:latest

? ? ? ? ports:

? ? ? ? ? ? - 9000:9000

? ? ? ? volumes:

? ? ? ? ? ? - /home/backend_logs:/var/www/MTGWeb/logs

? ? ? ? networks:

? ? ? ? ? ? - backend


? ? frontend:

? ? ? ? image: gitlab-registry.cern.ch/xxx/static:latest

? ? ? ? ports:

? ? ? ? ? ? - 80:80

? ? ? ? networks:

? ? ? ? ? ? - backend



? ? mtg-db:

? ? ? ? container_name: mtg-db

? ? ? ? image: postgres:latest

? ? ? ? env_file:

? ? ? ? ? ? - database/database.env

? ? ? ? ports:

? ? ? ? ? ? - 5432:5432

? ? ? ? volumes:

? ? ? ? ? ? - /home/mtg_web_data:/var/lib/postgresql/data

? ? ? ? networks:

? ? ? ? ? ? - backend


volumes:

? ? db_data:

? ? backend_logs:


networks:

? ? backend:

就這樣吧!這是一個完整的示例,說明如何使用 vue js 等 js 前端框架、基于 php 的 API 和 postgres DB 在服務器上設置 3 個容器堆棧。


查看完整回答
反對 回復 2023-10-15
  • 1 回答
  • 0 關(guān)注
  • 152 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號