Как опубликовать/развернуть приложение(деплоймент)
-
Понять контекст текущего деплоя. Не все сервисы подняты через docker, иногда это бинарник запущенный через nohup, иногда system daemon.
-
Выгрузить проект:
Если проект уже запущен с бинарника(nohup, systemd), то нужно сделать билд в соотвествии со стэком проекта. Обычно есть документация как это сделать в README.md
Если проект запущен в docker, то:
-
Узнать название образа который сейчас запущен:
Terminal window docker ps -
Сделать билд с таким же тэгом:
Terminal window cd /path/to/project/docker buildx build --platform linux/amd64 -t <image_tag> . -
Выгрузить образ в архив:
Terminal window docker save -o <image_tag>.tar <image_tag>Пример:
Terminal window docker buildx build --platform linux/amd64 -t traffic-controller .docker save -o traffic_controller.tar traffic_controller
-
-
Подключиться к нужному серверу по
ssh -
Загрузить архив/бинарник на сервер:
Terminal window scp target_file user@ip:path/to/project/ -
!Этот пункт нужно выполнять только если был загружен образ docker:
Terminal window docker load -o <target_file>Это распакует docker образ
-
Запустить сервис либо через nohup, либо через docker: Примеры:
Terminal window nohup jdk-18/bin/java -jar S2Conn-1.1-SNAPSHOT-jar-with-dependencies.jar & tail -f nohup.outTerminal window docker-compose restart traffic-controller
Пример docker-compose.yml:
version: "3"
volumes: # database-data2: database-data2-reserv:
services: postgres-server: image: postgres:13 #12 restart: always networks: - sorm-net volumes: # - ./data/postgres:/var/lib/postgresql # - database-data2:/var/lib/postgresql/data/ - database-data2-reserv:/var/lib/postgresql/data/ - /opt/sorm2/pg_backups:/backups ports: - 5432:5432 environment: POSTGRES_DB: s_project POSTGRES_USER: s_pro_use POSTGRES_PASSWORD: 123HweQsD3*j2
activemq: image: rmohr/activemq:5.15.9-alpine restart: always networks: - sorm-net volumes: - ./data/amq:/data ports: - 61616:61616 - 61613:61613 - 8161:8161 expose: - 8161 - 61616 - 61613
redis: image: redis:6.2.6 hostname: redis restart: always ports: - "6379:6379" expose: - 6379
# s2conn: # image: tripenyazaraz/s2conn:v5 # restart: always # networks: # - sorm-net # volumes: # - ./data/config:/config # environment: # - SORM_IP=10.10.77.3 # - ACTIVEMQ_ADDR=tcp://activemq:61616 # expose: # - 16117 # - 16118 # depends_on: # - activemq
sorm2: image: core.sorm2 # image: tripenyazaraz/sorm2-back:v72 restart: always ulimits: nproc: 65535 networks: - sorm-net # network_mode: bridge security_opt: - seccomp=unconfined # entrypoint: # - java # - -Xms512m # - -Xmx2g # - -XX:ParallelGCThreads=1 # - -XX:ConcGCThreads=1 # - -XX:+UseG1GC # - -Xlog:gc=debug:file=/data/logs/gc.log # - -jar # - /app.jar environment: - MAX_SESSIONS_FOR_USER=10 - ENABLE_COMPLEX_PASSWORD=false - BROKER_URL=tcp://activemq:61616?wireFormat.maxInactivityDuration=0 - DB_URL=jdbc:postgresql://192.168.50.23:5432/s_project - DB_USERNAME=s_pro_use - DB_PASSWORD=123HweQsD3*j2 - JAVA_OPTS=-Xms256m -Xmx4g -XX:+UseG1GC -XX:ParallelGCThreads=2 -XX:ConcGCThreads=2 # - "JAVA_TOOL_OPTIONS=-Xms512m -Xmx2g -XX:ParallelGCThreads=1 -XX:ConcGCThreads=1" - DATA_ABSOLUTE_PATH=/opt/sorm2/data/sorm2/ - DPI_SERVER_HOST=192.168.50.22 - DPI_SERVER_PORT=22022 - DPI_SERVER_USERNAME=root - DPI_SERVER_PASSWORD=Centos8Vas2 - DPI_SERVER_ABONENTS_LIST_COMMAND=fdpi_ctrl list all --bind - TRAFFIC_CONTROLLER_ADDRESS=192.168.50.23 - TRAFFIC_CONTROLLER_PORT=8077 - SSL_DECRYPTOR_ADDRESS=192.168.50.23 - SSL_DECRYPTOR_PORT=8044 # - NAT_IP= # - NAT_PORT= # - RADIUS_PORT= volumes: - ./data/sorm2:/data - ./backend:/backend - ./data/sorm2/export:/data/export - ./data/sorm2/external_drive:/data/external_drive - ./data/ssl-decryptor:/data/ssl-decryptor ports: - 8086:8086 - 21:21 - 20:20 depends_on: - traffic-controller # - postgres-server - activemq # - s2conn
reasm: image: api.reasm restart: always networks: - sorm-net security_opt: - seccomp=unconfined volumes: - ./data/sorm2/uci:/data/uci - ./data/sorm2/assembled:/data/assembled - ./data/sorm2/export/email-attachments:/data/email-attachments environment: - ACTIVEMQ_ADDR=tcp://activemq:61616 - JAVA_TOOL_OPTIONS=-Xms64m -Xmx1g -XX:ParallelGCThreads=2 -XX:ConcGCThreads=2 ulimits: nproc: 65535 depends_on: - activemq logging: driver: "json-file" options: max-size: "200k" max-file: "10"
front: image: api.sorm2-front restart: always ports: - 3000:3000 volumes: - ./data/sorm2/export:/data/export - ./.env:/app/.env - ./static/error404.html:/app/error404.html depends_on: - sorm2 network_mode: bridge
nginx: image: sorm-nginx restart: always ports: - 80:80 - 443:443 volumes: - ./nginx/:/etc/nginx/conf.d/ - ./static/:/etc/nginx/html/ - ./data/sorm2/export:/data/export - /opt/sorm3/static:/opt/sorm3/static - /opt/sorm3/media:/opt/sorm3/media depends_on: - front network_mode: bridge
traffic-controller: image: tripenyazaraz/traffic-controller:v11 restart: always ports: - 8077:8077 volumes: - ./data/traffic-controller:/app/data
ssl-decryptor: image: tripenyazaraz/ssl-decryptor:v13 restart: always ports: - 8044:8044 environment: - SUDO_PASSWORD=Centos8Vas3 volumes: - ./data/ssl-decryptor:/app/data
adminer: image: adminer restart: always ports: - 8066:8080
video-snarf: image: api.videosnarf build: context: ./videosnarf/ dockerfile: Dockerfile command: python mq-service.py restart: always ports: - 8070:8070 volumes: - ./videosnarf/:/app - /opt/sorm2/data/sorm2/:/pcap_data/ networks: - sorm-net depends_on: - traffic-controller - activemq - redis
video-snarf-service: image: api.videosnarf command: python videosnarf-service.py restart: always volumes: - ./videosnarf/:/app - /opt/sorm2/data/sorm2/:/pcap_data/ depends_on: - video-snarf
web-nginx-pgsql: image: zabbix/zabbix-web-nginx-pgsql:alpine-latest ports: - "8888:8080" - "8543:8443" volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - /etc/ssl/nginx:/etc/ssl/nginx:ro - /usr/share/zabbix/modules/:/usr/share/zabbix/modules/:ro healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/"] interval: 10s timeout: 5s retries: 3 # start_period: 30s sysctls: - net.core.somaxconn=65535 restart: always networks: - sorm-net depends_on: - server-zabbix - postgres-server environment: - POSTGRES_USER=zabbix1 - POSTGRES_PASSWORD=zabbix - POSTGRES_DB=zabbixnew - ZBX_SERVER_HOST=server-zabbix - ZBX_POSTMAXSIZE=64M - PHP_TZ=Asia/Almaty - ZBX_MAXEXECUTIONTIME=500 - DB_SERVER_HOST=192.168.50.23
agent-zabbix: image: zabbix/zabbix-agent:alpine-latest ports: - "10050:10050" volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - /proc:/proc - /sys:/sys - /dev:/dev - /var/run/docker.sock:/var/run/docker.sock privileged: true pid: "host" restart: always networks: - sorm-net depends_on: - server-zabbix environment: - ZBX_SERVER_HOST=192.168.176.1
server-zabbix: image: zabbix/zabbix-server-pgsql:alpine-latest networks: - sorm-net ports: - "10051:10051" volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - /usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts:ro - /usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro - /var/lib/zabbix/export:/var/lib/zabbix/export:rw - /var/lib/zabbix/modules:/var/lib/zabbix/modules:ro - /var/lib/zabbix/enc:/var/lib/zabbix/enc:ro - /var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro - /var/lib/zabbix/mibs:/var/lib/zabbix/mibs:ro - /var/lib/zabbix/snmptraps:/var/lib/zabbix/snmptraps:ro restart: always depends_on: - postgres-server environment: - POSTGRES_USER=zabbix1 - POSTGRES_PASSWORD=zabbix - POSTGRES_DB=zabbixnew - DB_SERVER_HOST=192.168.50.23 - ZBX_HISTORYSTORAGETYPES=log,text #Zabbix configuration variables - ZBX_DEBUGLEVEL=1 - ZBX_HOUSEKEEPINGFREQUENCY=1 - ZBX_MAXHOUSEKEEPERDELETE=5000 - ZBX_PROXYCONFIGFREQUENCY=3600
networks: sorm-net: driver: bridge default: driver: bridge