Skip to content

Как опубликовать/развернуть приложение(деплоймент)

  1. Понять контекст текущего деплоя. Не все сервисы подняты через docker, иногда это бинарник запущенный через nohup, иногда system daemon.

  2. Выгрузить проект:

    Если проект уже запущен с бинарника(nohup, systemd), то нужно сделать билд в соотвествии со стэком проекта. Обычно есть документация как это сделать в README.md

  3. Подключиться к нужному серверу по ssh

  4. Загрузить архив/бинарник на сервер:

    Terminal window
    scp target_file user@ip:path/to/project/
  5. !Этот пункт нужно выполнять только если был загружен образ docker:

    Terminal window
    docker load -o <target_file>

    Это распакует docker образ

  6. Запустить сервис либо через nohup, либо через docker: Примеры:

    Terminal window
    nohup jdk-18/bin/java -jar S2Conn-1.1-SNAPSHOT-jar-with-dependencies.jar & tail -f nohup.out
    Terminal 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