← Назад к вопросам
Как локально разработанное приложение открыть в тестовом окружении
1.0 Junior🔥 91 комментариев
#Docker, Kubernetes и DevOps
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Ответ
Перенос локально разработанного приложения в тестовое окружение — критически важный процесс. Рассмотрю основные подходы.
1. Docker контейнеризация (Рекомендуется)
Создайте Dockerfile:
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY target/myapp-1.0.0.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
Сборка и запуск:
mvn clean package
docker build -t myapp:1.0.0 .
docker run -p 8080:8080 -e SPRING_PROFILES_ACTIVE=test myapp:1.0.0
2. Docker Compose для полного стека
Создайте docker-compose.yml для всех зависимостей:
version: '3.9'
services:
app:
build: .
ports:
- "8080:8080"
environment:
SPRING_PROFILES_ACTIVE: test
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/testdb
SPRING_DATASOURCE_USERNAME: testuser
SPRING_DATASOURCE_PASSWORD: testpass
depends_on:
- postgres
networks:
- app-network
postgres:
image: postgres:16
environment:
POSTGRES_DB: testdb
POSTGRES_USER: testuser
POSTGRES_PASSWORD: testpass
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- app-network
volumes:
postgres_data:
networks:
app-network:
driver: bridge
Запуск:
docker-compose up -d
docker-compose ps
docker-compose logs -f app
3. Push в Docker Registry
Для командной разработки:
docker login
docker tag myapp:1.0.0 yourusername/myapp:1.0.0
docker push yourusername/myapp:1.0.0
# На тестовом сервере
docker pull yourusername/myapp:1.0.0
docker run -p 8080:8080 yourusername/myapp:1.0.0
4. SSH развёртывание на тестовый сервер
Скрипт deploy.sh:
#!/bin/bash
REMOTE_HOST="test-server.example.com"
REMOTE_USER="deploy"
APP_DIR="/opt/myapp"
mvn clean package
ssh $REMOTE_USER@$REMOTE_HOST "mkdir -p $APP_DIR"
scp target/myapp-1.0.0.jar $REMOTE_USER@$REMOTE_HOST:$APP_DIR/
ssh $REMOTE_USER@$REMOTE_HOST "\
cd $APP_DIR && \
pkill -f java || true && \
sleep 2 && \
nohup java -Dspring.profiles.active=test -jar myapp-1.0.0.jar > app.log 2>&1 &"
echo "Deploy completed!"
Запуск:
chmod +x deploy.sh
./deploy.sh
5. Kubernetes (Для масштабирования)
Файл k8s-deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-test
namespace: test
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: yourusername/myapp:1.0.0
ports:
- containerPort: 8080
env:
- name: SPRING_PROFILES_ACTIVE
value: "test"
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1000m"
livenessProbe:
httpGet:
path: /actuator/health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
Развёртывание:
kubectl apply -f k8s-deployment.yaml
kubectl get pods -n test
kubectl logs -f deployment/myapp-test -n test
6. CI/CD Pipeline (Jenkins)
Jenkinsfile для автоматизации:
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
stage('Build Docker Image') {
steps {
sh 'docker build -t myapp:${BUILD_NUMBER} .'
}
}
stage('Deploy to Test') {
steps {
sh 'docker push myapp:${BUILD_NUMBER}'
sh '''
ssh deploy@test-server \
"docker pull myapp:${BUILD_NUMBER} && \
docker stop myapp || true && \
docker run -d --name myapp -p 8080:8080 myapp:${BUILD_NUMBER}"
'''
}
}
stage('Health Check') {
steps {
sh 'curl -f http://test-server:8080/actuator/health'
}
}
}
}
7. Основные переменные окружения
Для тестовой среды обычно нужны:
SPRING_PROFILES_ACTIVE=test
SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/testdb
SPRING_DATASOURCE_USERNAME=testuser
SPRING_DATASOURCE_PASSWORD=testpass
SPRING_JPA_HIBERNATE_DDL_AUTO=validate
LOGGING_LEVEL_ROOT=INFO
APPLICATION_NAME=myapp-test
8. Проверка готовности
Перед развёртыванием проверьте:
# Локально
mvn clean package
mvn test
# Docker образ
docker build -t myapp:test .
docker run -p 8080:8080 myapp:test
curl http://localhost:8080/actuator/health
# На сервере
ssh test-server "curl http://localhost:8080/actuator/health"
9. Логирование и мониторинг
Основные логи и метрики:
# Просмотр логов контейнера
docker logs -f container_id
# Просмотр логов на сервере
ssh test-server "tail -f /opt/myapp/app.log"
# Проверка здоровья приложения
curl -s http://test-server:8080/actuator/health | jq .
# Информация о приложении
curl -s http://test-server:8080/actuator/info | jq .
Рекомендуемый процесс
- Локально: mvn clean package + docker build + docker run
- Первая раз: Docker Compose для всего стека
- Командная работа: Docker Registry + SSH скрипт
- Production: Kubernetes + CI/CD
Чеклист развёртывания
- Приложение собирается без ошибок
- Все тесты проходят
- Docker образ создаётся и запускается локально
- Переменные окружения правильно установлены
- База данных инициализирована
- Health check endpoint доступен
- Логи содержат информацию о запуске
- Приложение доступно с удалённого клиента
Мой выбор — Docker Compose как универсальное решение: просто, надёжно, лёгко репликировать на других машинах и окружениях.