Поднимаем Staging Для Личных Целей
Как и у многих разработчиков, у меня с завидной регулярностью возникает задача быстренько развернуть стенд для тестирование/показа какого-нибудь проекта.
Пару лет, пришел к простому варианту, который экономит время и деньги на основе ubuntu, nginx и docker-compose.
Выбираем площадку для staging
Уже длительное время я использую vps для подобных задач. Буквально месяц назад производил переоценку с точки зрения цена-качество. И остановился на варианте https://www.hetzner.com/cloud CX21.
За 5.88 евро вы получаете 2ядерный CPU, 4GB оперативки и 40SSD. Что по сравнению, например с DigitalOcean - дешево. А за дополнительные 1.18 евро можно обеспечить себя регулярными бэкапами.
Что будет на staging
Мы развернем VPS, настроим firewall. Установим nginx, certbot для сертификатов и docker-compose.
Базовая настройка сервера
Настройка firewall
$ ssh root@your_server
$ ufw app list
$ ufw allow OpenSSH
$ ufw status
Доступ только по ключу
Редактируем файл$ vim /etc/ssh/sshd_config
и выставляем значение no
для PasswordAuthentication no
И перезапускаем SSH$ systemctl restart ssh
Установка docker и docker-compose
Установка docker
$ apt update
$ apt install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
$ apt-cache policy docker-ce
$ apt install docker-ce
$ systemctl status docker
Установка docker-compose
Выбираем на странице https://github.com/docker/compose/releases интересующую версию.
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
Установка и настройка nginx
$ apt update
$ apt install nginx
$ ufw app list
$ ufw allow "Nginx Full"
$ ufw status
Инструкция для установки certbot от letsencrypt: https://certbot.eff.org/lets-encrypt/ubuntufocal-nginx)
Подготавливаем basic-авторизацию для будущих проектов
$ apt install apache2-utils
$ htpasswd -c /etc/nginx/htpasswd YOUR_LOGIN
для обновления пароля$ htpasswd /etc/nginx/htpasswd YOUR_LOGIN
Создаем отдельного пользователя для управление docker-compose
$ adduser deployer --disabled-password
$ sudo usermod -aG docker deployer
$ sudo usermod -aG docker deployer
$ su - deployer
$ groups
Если захотите - потом можно будет настроить пользователю deployer
вход по ключу для деплоя из CI.
Как развернуть приложение (на примере strapi)
$ vim /etc/nginx/sites-enabled/strapi
Вставляете содержимое:
server {
server_name strapi.YOUR_DOMAIN;
# если хотите закрыть доступ с помощью настроенной ранее basic-авторизации - раскомментируйте строки далее
# auth_basic "Restricted";
# auth_basic_user_file /etc/nginx/htpasswd;
access_log syslog:server=[2001:db8::1]:1234,facility=local7,tag=nginx,severity=info;
location / {
proxy_pass http://127.0.0.1:1337;
}
}
И перезагружаем nginx:
$ service nginx restart
Для выпуска сертификата выполняете certbot
и следуюете инструкции.
Далее проваливаемся в su - deployer
и docker-compose.yml
version: '3'
services:
strapi:
image: strapi/strapi
environment:
DATABASE_CLIENT: postgres
DATABASE_NAME: strapi
DATABASE_HOST: postgres
DATABASE_PORT: 5432
DATABASE_USERNAME: strapi
DATABASE_PASSWORD: strapi
volumes:
- ./app:/srv/app
ports:
- '1337:1337'
depends_on:
- postgres
postgres:
image: postgres:13-alpine
environment:
POSTGRES_DB: strapi
POSTGRES_USER: strapi
POSTGRES_PASSWORD: strapi
volumes:
- ./data:/var/lib/postgresql/data
Далее выполняем docker-compose up -d
Обновление от 2022-07-14
Собрал ansible-плейбук для настройки стейджинга: https://github.com/deeravenger/ansible-staging-example