Jadual Kandungan
Langkah khusus
Masalah yang dihadapi
Rumah Operasi dan penyelenggaraan Docker Mari kita bincangkan tentang cara untuk menggunakan perkhidmatan nod ke pelbagai persekitaran melalui docker-compose

Mari kita bincangkan tentang cara untuk menggunakan perkhidmatan nod ke pelbagai persekitaran melalui docker-compose

Jan 28, 2022 pm 06:00 PM
docker-compose node

Bagaimana untuk menggunakan perkhidmatan nod ke pelbagai persekitaran melalui docker-compose? Artikel berikut akan memperkenalkan kepada anda cara menggunakan perkhidmatan Node dalam pelbagai persekitaran dengan Docker-compose. Saya harap ia akan membantu anda!

Mari kita bincangkan tentang cara untuk menggunakan perkhidmatan nod ke pelbagai persekitaran melalui docker-compose

Secara amnya, selepas projek kami dibangunkan, ia perlu digunakan ke pelbagai persekitaran, seperti ujian, kotak pasir, penyepaduan, dll., jadi cara menggunakan docker-compose kepada Bagaimana pula dengan menggunakan perkhidmatan nod ke pelbagai persekitaran? Artikel berikut menerangkannya secara terperinci Jika ada yang salah, anda dialu-alukan untuk memberi komen.

Teknologi yang digunakan dalam projek dalam artikel ini ialah Gitlab Ansible Docker untuk menggunakan perkhidmatan nod secara automatik (ditulis oleh rangka kerja sarang adalah seperti berikut:

  • Tulis fail konfigurasi docker-compose, docker-compose.prod.yml

  • Ubah suai pakej.json

  • Buat dua direktori pada pelayan jauh, Tarik gudang perkhidmatan nod dan tukar ke cawangan berbeza, masing-masing mewakili ujian dan perkhidmatan nod dalam talian

  • penyediaan fail.gitlab-ci.yml

  • Menulis fail ansible.yml

  • Jalankan arahan berikut dalam direktori perkhidmatan nod pelayan jauh (ujian/dalam talian) Selepas pelaksanaan, semak sama ada bekas bermula seperti biasa docker ps -a. Jika sudah naik Status itu tergantung, membuktikan bahawa bekas itu berjaya dimulakan. docker logs -f 容器idLihat log kontena

1

2

3

4

5

6

# 测试目录 /opt/xxx/server-test/server

docker-compose up -d

 

# 线上目录 /opt/xxx/server-prod/server

# -f表示指定具体文件,默认执行的是docker-compose.yml文件

docker-compose -f docker-compose.prod.yml up -d

Salin selepas log masuk

Langkah khusus

  • Tulis fail konfigurasi docker-compose, docker-compose.prod.yml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

# docker-compose.yml

version: '3.0'

services: # 服务列表

  # 测试数据库

  mysql:

    image: mysql

    container_name: mysql_test

    restart: always

    environment:

      - MYSQL_ROOT_PASSWORD=test_sql

      - NODE_ENV=development

    ports:

      - 13306:3306

    volumes:

      - 服务器上对应目录:/var/lib/mysql

       

  # 测试node服务

  server:  # node服务

    container_name: server-test # 容器名称

    image: node:14.15.0

    ports:  # 暴露的端口

      - "7007:5088"

    environment:

      - NODE_ENV=development

    volumes:

      - .:/data

    working_dir: /data

    depends_on: # web服务依靠mysql要先等mysql启动

      - mysql

    restart: on-failure:5 # 自动重启,失败的话重启5次后停止

    command: yarn start # 覆盖容器启动后默认执行的命令

Salin selepas log masuk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

# docker-compose.prod.yml

version: '3.0'

services: # 服务列表

  # 线上数据库

  prod-mysql:

    image: mysql

    container_name: mysql_prod

    restart: always

    environment:

      - MYSQL_ROOT_PASSWORD=prod_sql

      - NODE_ENV=production

    ports:

      - 13307:3306

    volumes:

      - 服务器上对应目录:/var/lib/mysql

 

  # 线上node服务

  prod-server:

    container_name: server-prod

    image: node:14.15.0

    ports:

      - "7077:5089"

    environment:

      - NODE_ENV=production

    volumes:

      - .:/data

    working_dir: /data

    depends_on:

      - prod-mysql

    restart: on-failure:5

    command: yarn start:prod

Salin selepas log masuk
  • Buat pengubahsuaian berikut dalam package.json

1

2

3

4

5

6

7

8

9

10

# cross-env指定NODE_ENV为开发或线上环境

...

"scripts": {

    ...

    "build": "nest build",

    "start": "yarn && cross-env  NODE_ENV=development nest start",

    "start:prod": "yarn && yarn build && cross-env  NODE_ENV=production node dist/src/main",

    ...

  },

...

Salin selepas log masuk
  • Buat dua direktori pada pelayan jauh untuk menyimpan ujian dan perkhidmatan nod dalam talian masing-masing

1

2

3

4

5

# 测试(dev分支),git clone node服务地址,切换到dev分支

/opt/xxx/server-test/server

 

# 线上(master分支),git clone node服务地址,切换到master分支

/opt/xxx/server-prod/server

Salin selepas log masuk
  • Tulis fail .gitlab-ci.yml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

# CI变量说明说明

- BRANCH、DEV_BRANCH是CI变量,分别对应master、dev分支

- DOCKER_CONTAINER、DEV_DOCKER_CONTAINER分别对应线上、测试启动的docker容器

- ROOT_PATH、DEV_ROOT_PATH分别对应远程服务器上线上、测试node服务存放路径

- CI_PROJECT_NAME表示gitlab上仓库名称

 

stages:

  - dev_deploy

  - master_deploy

 

master_deploy:

  stage: master_deploy

  image: ansible镜像地址

  script:

    - echo \"${HOST}\" ansible_ssh_user=\"${USER}\" ansible_ssh_pass=\"${PASS}\" ansible_ssh_host=\"${HOST}\" > hosts

    - echo ansible-playbook ansible.yaml -e hosts=${HOST} -i ./hosts

    - ansible-playbook ansible.yaml -e "HOST=${HOST}  DEST_PATH=${ROOT_PATH}/${CI_PROJECT_NAME} DOCKER_CONTAINER_NAME=${DOCKER_CONTAINER} CUR_BRANCH=${BRANCH}" -i ./hosts

    - rm -f hosts

  only:

    - master

  tags:

    - k8s

 

dev_deploy:

  stage: dev_deploy

  image: ansible镜像地址

  script:

    - echo \"${HOST}\" ansible_ssh_user=\"${USER}\" ansible_ssh_pass=\"${PASS}\" ansible_ssh_host=\"${HOST}\" > hosts

    - echo ansible-playbook ansible.yaml -e hosts=${HOST} -i ./hosts

    - ansible-playbook ansible.yaml -e "HOST=${HOST}  DEST_PATH=${DEV_ROOT_PATH}/${CI_PROJECT_NAME} DOCKER_CONTAINER_NAME=${DEV_DOCKER_CONTAINER} CUR_BRANCH=${DEV_BRANCH}" -i ./hosts

    - rm -f hosts

  only:

    - dev

  tags:

    - k8s

Salin selepas log masuk
  • Penulisan fail Ansible.yml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

# cd到node服务server目录,切换分支,拉取最新代码,docker容器重启

- name: deploy

  hosts: "{{ HOST }}"

  become_user: root

  become: yes

  tasks: # 任务

    - name: git checkout branch

      command: git checkout "{{CUR_BRANCH}}"

      args:

        chdir: "{{ DEST_PATH }}"

    - name: git pull

      command: git pull

      args:

        chdir: "{{ DEST_PATH }}"

    - name: docker restart container

      command: docker restart "{{ DOCKER_CONTAINER_NAME }}"

      args:

        chdir: "{{ DEST_PATH }}"

Salin selepas log masuk
  • Perkhidmatan nod pelayan jauh ( test/ Jalankan arahan berikut dalam direktori dalam talian)

1

2

3

4

5

# 测试目录 /opt/xxx/server-test/server

docker-compose up -d

 

# 线上目录 /opt/xxx/server-prod/server

docker-compose -f docker-compose.prod.yml up -d

Salin selepas log masuk

Selepas berjaya memulakan, semak status permulaan kontena melalui docker ps -a, seperti yang ditunjukkan dalam rajah di bawah:

Mari kita bincangkan tentang cara untuk menggunakan perkhidmatan nod ke pelbagai persekitaran melalui docker-compose

Arahan:

  • Persekitaran ujian: Apabila kod cawangan dev tempatan diserahkan atau cawangan lain digabungkan ke dalam dev, ia akan diautomatikkan melalui itlab CI dan Ansible Deploy perkhidmatan nod ke pelayan jauh, tukar cawangan dalam direktori jauh pelayan yang sepadan, tarik kod terkini dan mulakan semula bekas docker ujian yang sepadan

  • Persekitaran dalam talian: penyerahan kod cawangan induk tempatan atau lain-lain Apabila cawangan digabungkan ke dalam cawangan induk, perkhidmatan nod akan digunakan secara automatik ke pelayan jauh melalui itlab CI dan Ansible, dan cawangan akan ditukar dalam alat kawalan jauh direktori pelayan yang sepadan, kod terkini akan ditarik dan bekas docker dalam talian yang sepadan akan dimulakan semula

Masalah yang dihadapi

Masalah 1 : Tiada direktori node_modules dan direktori dist dalam direktori perkhidmatan nod jauh ujian/dalam talian, iaitu, tiada dua fail seperti yang ditunjukkan di bawah dalam pelayan jauh pada masa yang sama Melihat log kontena docker pada pelayan melaporkan ralat berikut (Ia mengambil masa yang lama untuk menyelesaikan masalah ini sebelum ia diselesaikan)

Mari kita bincangkan tentang cara untuk menggunakan perkhidmatan nod ke pelbagai persekitaran melalui docker-compose

Mari kita bincangkan tentang cara untuk menggunakan perkhidmatan nod ke pelbagai persekitaran melalui docker-compose

Menyelesaikan masalah: Didapati bahawa berbanding dengan bekas perkhidmatan nod yang biasa dimulakan, tiada dua direktori ini (dist dan node_modules Periksa sama ada terdapat masalah dengan arahan pelaksanaan arahan dalam docker-compose.yml, iaitu docker). -compose.yml Adakah terdapat masalah dengan yarn && yarn start dalam arahan, jadi saya cuba meletakkan operasi yarn dalam package.json, dan hasilnya baik.

Penyelesaian:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

# 修改前

# docker-compose.yml

version: '3.0'

services:

  ...

  server:

    ...

    command: yarn && yarn start

     

# package.json

"scripts": {

    ...

    "build": "nest build",

    "start": "cross-env  NODE_ENV=development nest start",

    "start:prod": "cross-env  NODE_ENV=production yarn build && node dist/src/main",

    ...

  },

     

# 修改后

# docker-compose.yml

version: '3.0'

services:

  ...

  server:

    ...

    command: yarn start

     

# package.json

方案一:

"scripts": {

    ...

    "build": "nest build",

    "start": "yarn && cross-env  NODE_ENV=development nest start",

    "start:prod": "yarn && yarn build && cross-env  NODE_ENV=production node dist/src/main",

    ...

  },

   

方案二:

"scripts": {

    ...

    "build": "nest build",

    "start": "cross-env NODE_ENV=development nest start",

    "prestart": "yarn",

    "start:prod": "yarn build && cross-env  NODE_ENV=production node dist/src/main",

    "prestart:prod": "yarn",

    ...

},

Salin selepas log masuk

Nota:

  • tempat silang env diletakkan Sebelum perintah boleh laku, dalam projek ini, jika ia diletakkan di hadapan, pelayan akan melaporkan silang-env tidak ditemui Jika ia diletakkan pada penghujung, pembolehubah persekitaran tidak akan berkuat kuasa NODE_ENV

  • yang boleh didapati dalam skrip Perhatikan susunan pelaksanaan semasa melaksanakan arahan, seperti yarn && yarn build && cross-env NODE_ENV=production node dist/src/main

  • sebelum

dalam skrip pra

Soalan 2

: Nama domain dalam talian hadapan Pemetaan tidak berkuat kuasa Selepas fail konfigurasi nginx memetakan nama domain dalam talian, ia ditemui bahawa apabila mengakses nama domain dalam talian, halaman itu tidak berkuat kuasa

Penyelesaian masalah

: Bandingkan fail konfigurasi ujian nginx dengan fail konfigurasi dalam talian Didapati kecuali untuk nama domain dan proksi api, kandungan fail adalah sama Jadi apa sebabnya? Akhirnya, saya mendapati bahawa nama akhiran fail konfigurasi nginx dalam talian adalah salah. Ia ditulis sebagai xxx.confg. fail konfigurasi ialah akhiran yang betul, iaitu akhiran xxx.conf

问题三:Gitlab CI执行异常,具体报错信息大概是报/server目录找不到

排查:在CI里面打印输出CI变量以及拼接出来的目录变量,查看是哪一步有问题,经排查发现都是正常的,唯一不同的一点是CI变量后面设置了环境变量

解决:尝试把环境变量改为All default,结果好了,记住,不要随意配置CI后面的环境变量,如果修改的话,对应的Gitlab里面也是对应需要映射的,环境变量位置如下图所示:

Mari kita bincangkan tentang cara untuk menggunakan perkhidmatan nod ke pelbagai persekitaran melalui docker-compose

1

2

3

4

5

6

7

8

9

10

11

<strong>master_deploy:

  ...

  script:

    ...

    - echo ${ROOT_PATH}

    - echo ${CI_PROJECT_NAME}

    - echo ${ROOT_PATH}/${CI_PROJECT_NAME}

    - echo ${DOCKER_CONTAINER}

    - echo ${BRANCH}

    ...

 ...</strong>

Salin selepas log masuk

本文到这就结束了,后面还会有一篇文件,讲全栈项目从开发到自动化部署整个过程(用到的技术栈是Vue + Nest + Typeorm + Mysql+ Gitlab CI + Ansible + Docker)。

推荐学习:《docker视频教程》、《nodejs 教程

Atas ialah kandungan terperinci Mari kita bincangkan tentang cara untuk menggunakan perkhidmatan nod ke pelbagai persekitaran melalui docker-compose. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk memadam nod dalam nvm Bagaimana untuk memadam nod dalam nvm Dec 29, 2022 am 10:07 AM

Cara memadam nod dengan nvm: 1. Muat turun "nvm-setup.zip" dan pasangkannya pada pemacu C 2. Konfigurasikan pembolehubah persekitaran dan semak nombor versi melalui arahan "nvm -v" 3. Gunakan "nvm arahan install" Pasang nod; 4. Padamkan nod yang dipasang melalui arahan "nvm uninstall".

Cara menggunakan ekspres untuk mengendalikan muat naik fail dalam projek nod Cara menggunakan ekspres untuk mengendalikan muat naik fail dalam projek nod Mar 28, 2023 pm 07:28 PM

Bagaimana untuk mengendalikan muat naik fail? Artikel berikut akan memperkenalkan kepada anda cara menggunakan ekspres untuk mengendalikan muat naik fail dalam projek nod saya harap ia akan membantu anda!

Analisis mendalam tentang alat pengurusan proses Node 'pm2' Analisis mendalam tentang alat pengurusan proses Node 'pm2' Apr 03, 2023 pm 06:02 PM

Artikel ini akan berkongsi dengan anda alat pengurusan proses Node "pm2", dan bercakap tentang mengapa pm2 diperlukan, cara memasang dan menggunakan pm2, saya harap ia akan membantu semua orang!

PI Node Teaching: Apakah nod pi? Bagaimana cara memasang dan menyediakan nod pi? PI Node Teaching: Apakah nod pi? Bagaimana cara memasang dan menyediakan nod pi? Mar 05, 2025 pm 05:57 PM

Penjelasan dan Panduan Pemasangan Terperinci untuk Pinetwork Nodes Artikel ini akan memperkenalkan ekosistem pinetwork secara terperinci - nod pi, peranan utama dalam ekosistem pinetwork, dan menyediakan langkah -langkah lengkap untuk pemasangan dan konfigurasi. Selepas pelancaran Rangkaian Ujian Blockchain Pinetwork, nod PI telah menjadi bahagian penting dari banyak perintis yang aktif mengambil bahagian dalam ujian, bersiap sedia untuk pelepasan rangkaian utama yang akan datang. Jika anda tidak tahu kerja pinet, sila rujuk apa itu picoin? Berapakah harga untuk penyenaraian? Penggunaan PI, perlombongan dan analisis keselamatan. Apa itu Pinetwork? Projek Pinetwork bermula pada tahun 2019 dan memiliki syiling pi cryptocurrency eksklusifnya. Projek ini bertujuan untuk mewujudkan satu yang semua orang boleh mengambil bahagian

Mari kita bincangkan tentang cara menggunakan pkg untuk membungkus projek Node.js ke dalam fail boleh laku. Mari kita bincangkan tentang cara menggunakan pkg untuk membungkus projek Node.js ke dalam fail boleh laku. Dec 02, 2022 pm 09:06 PM

Bagaimana untuk membungkus fail boleh laku nodejs dengan pkg? Artikel berikut akan memperkenalkan kepada anda cara menggunakan pkg untuk membungkus projek Node ke dalam fail boleh laku. Saya harap ia akan membantu anda!

Apa yang perlu dilakukan jika npm nod gyp gagal Apa yang perlu dilakukan jika npm nod gyp gagal Dec 29, 2022 pm 02:42 PM

npm node gyp gagal kerana versi "node-gyp.js" dan "Node.js" tidak sepadan Penyelesaiannya: 1. Kosongkan cache nod melalui "npm cache clean -f" 2. Melalui "npm install -. g n" Pasang modul n; 3. Pasang versi "nod v12.21.0" melalui arahan "n v12.21.0".

Pengesahan berasaskan token dengan Angular dan Node Pengesahan berasaskan token dengan Angular dan Node Sep 01, 2023 pm 02:01 PM

Pengesahan adalah salah satu bahagian terpenting dalam mana-mana aplikasi web. Tutorial ini membincangkan sistem pengesahan berasaskan token dan cara ia berbeza daripada sistem log masuk tradisional. Pada penghujung tutorial ini, anda akan melihat demo berfungsi sepenuhnya yang ditulis dalam Angular dan Node.js. Sistem Pengesahan Tradisional Sebelum beralih kepada sistem pengesahan berasaskan token, mari kita lihat sistem pengesahan tradisional. Pengguna memberikan nama pengguna dan kata laluan mereka dalam borang log masuk dan klik Log Masuk. Selepas membuat permintaan, sahkan pengguna di bahagian belakang dengan menanyakan pangkalan data. Jika permintaan itu sah, sesi dibuat menggunakan maklumat pengguna yang diperoleh daripada pangkalan data dan maklumat sesi dikembalikan dalam pengepala respons supaya ID sesi disimpan dalam penyemak imbas. Menyediakan akses kepada aplikasi tertakluk kepada

Apakah sistem log masuk tunggal? Bagaimana untuk melaksanakannya menggunakan nodejs? Apakah sistem log masuk tunggal? Bagaimana untuk melaksanakannya menggunakan nodejs? Feb 24, 2023 pm 07:33 PM

Apakah sistem log masuk tunggal? Bagaimana untuk melaksanakannya menggunakan nodejs? Artikel berikut akan memperkenalkan kepada anda cara menggunakan nod untuk melaksanakan sistem log masuk tunggal. Saya harap ia akan membantu anda!

See all articles