Как стать автором
Обновить
3188.71
RUVDS.com
VDS/VPS-хостинг. Скидка 15% по коду HABR15

VPS за 139 рублей — дом для вашего резюме на основе Hugo

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров20K


Привет, Хабр! Сегодня узнаем, на что реально способны бюджетные VPS от RUVDS. Посмотрим, что можно сделать с самыми недорогими серверами, которые так часто мелькают в рекламе.

Для нашего эксперимента я выбрал конфигурацию за 139 рублей в месяц — VPS с 1 ядром процессора 2.2 ГГц, всего 512 МБ оперативной памяти и 10 ГБ на HDD, а ОС привычная CentOS 9. На всём этом добре мы развернём статический сайт-резюме на Hugo, о чём будет подробнее ниже в тексте.

▍ Что ещё за Hugo?


Прежде чем мы начнём, давайте разберёмся, что такое Hugo и почему он отлично подходит для создания портфолио/резюме на минимальной VPS.

Hugo — это генератор статических сайтов, написанный на языке Go. В отличие от WordPress, Joomla и других CMS, которые генерируют страницы «на лету» и требуют базу данных, Hugo создаёт обычные HTML-файлы, которые затем можно просто раздавать через веб-сервер. Это даёт несколько важных преимуществ:

  • Минимальные требования к серверу — вам не нужны PHP, MySQL и другие ресурсоёмкие компоненты.
  • Высокая производительность — статические страницы загружаются моментально.
  • Надёжность — меньше компонентов, а значит, меньше точек отказа.
  • Безопасность — отсутствие динамической обработки снижает поверхность атаки.

К тому же, Hugo имеет богатую экосистему готовых тем, включая специализированные шаблоны для резюме и портфолио. Именно такую тему мы и будем использовать.

▍ Подготовка чистой CentOS 9 — с нуля к веб-серверу


Так как CentOS 9 я стандартно выбираю в чистом виде, первым делом нужно превратить её нужно обновить и доустановить необходимые пакеты.

Подключаемся к нашей свежей CentOS через SSH с пробросом порта и начинаем подготовку системы:
# Подключаемся по SSH с пробросом порта
# Если вы настроили уже других пользователей, то указывайте, соответственно, их
# sudo под root не обязателен везде, однако для удобства тех, кто сидит не из под root, он всё равно везде указан

ssh -L 8888:localhost:8888 root@ip_вашей_VPS


# Обновляем систему
sudo dnf update -y

# Удаляем старые network-scripts, если остались от CentOS 8
sudo dnf remove -y network-scripts

# Устанавливаем epel-release для доступа к дополнительным пакетам (htop и др.)
sudo dnf install -y epel-release
sudo dnf update -y

# Устанавливаем необходимые базовые пакеты
sudo dnf install -y curl wget git nano htop tar





Первый этап готов в рамках проведения тест-драйва для нашей VPS. При полноценном развёртывании с публичным доступом, очевидно, нужно ещё будет докупить доменное имя и развернуть Nginx для статики, которую сгенерирует Hugo. Последним мы как раз займёмся после того, как убедимся, что всё остальное работает исправно.

▍ Установка Hugo


Теперь нам нужно установить Go, Hugo и зависимости для выбранной темы, в нашем случае это Almeida CV.

Установка Hugo и зависимостей
# Создаём временную директорию для скачивания
mkdir -p ~/temp
cd ~/temp

# Скачиваем и устанавливаем Go
wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz

# Распаковываем Go в /usr/local
sudo tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz

# Добавляем Go в PATH
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc

# Проверяем версию Go
go version

# Скачиваем Hugo (Extended, чтобы поддерживался SCSS)
wget https://github.com/gohugoio/hugo/releases/download/v0.128.0/hugo_extended_0.128.0_linux-amd64.tar.gz

# Распаковываем архив
tar -xvf hugo_extended_0.128.0_linux-amd64.tar.gz

# Копируем бинарный файл в директорию, которая есть в PATH
sudo cp hugo /usr/local/bin/

# Проверяем версию Hugo
hugo version

# Удаляем временные файлы
cd ~
rm -rf ~/temp

# Устанавливаем Node.js из AppStream репозитория
sudo dnf module install -y nodejs:18

# Проверяем версии
node --version
npm --version





▍ Разворачивание сайта-портфолио


Теперь создадим сайт-резюме с помощью темы Almeida CV. Казалось бы, простая задача, но, как выяснилось на практике, иногда даже с подробными инструкциями могут возникнуть затруднения.

Создаём сайт
# Создаём директорию для нашего проекта
mkdir -p ~/projects/my-cv
cd ~/projects/my-cv

# Инициализируем новый сайт Hugo
hugo new site . --force

# Инициализируем Git репозиторий и добавляем тему
git init
git submodule add https://github.com/ineesalmeida/almeida-cv.git themes/almeida-cv



Согласно официальной инструкции, мы должны скопировать файлы из примера сайта:

Hugo
# Копируем файлы из примера в корень проекта
cp -r themes/almeida-cv/exampleSite/* .


Но, как оказалось, этого недостаточно! Для корректной работы темы необходимо также скопировать директорию assets, layouts и директорию для аватара. К сожалению, как это бывает вообще в любом проекте, после обновления то, что делалось под одну версию, уже не работает на другой. Что в общем-то не страшно, но при условии, когда об этом предупредили. Мне же пришлось столкнуться с неожиданностью, так как в последний раз я использовал эту тему, кажется, ещё в 2023 году, когда делал своё резюме. Зато теперь с этим не придётся разбираться вам.

Копируем директории
# Копируем директорию assets из темы - этот шаг часто упускается в инструкциях
mkdir -p assets
cp -r themes/almeida-cv/assets/* assets/

# Создаём директорию для изображений
mkdir -p static/img
cp themes/almeida-cv/exampleSite/static/img/avatar.jpg static/img/

# Создаём директорию layouts, если она ещё не существует
mkdir -p layouts

# Копируем файл index.html из темы в директорию layouts
cp themes/almeida-cv/layouts/index.html layouts/

# Копируем директорию partials
mkdir -p layouts/partials
cp -r themes/almeida-cv/layouts/partials/* layouts/partials/

# Копируем базовый шаблон
mkdir -p layouts/_default
cp themes/almeida-cv/layouts/_default/baseof.html layouts/_default/



Теперь нужно настроить содержимое вашего CV. Основные данные хранятся в файле data/content.yaml. Давайте создадим файл с информацией о нашем вымышленном кандидате Иване Петрове:

Иван Петров
# Создаём файл с данными для CV
cat > data/content.yaml << 'EOF'
BasicInfo:
  FirstName: Иван
  LastName: Петров
  Photo: img/avatar.jpg
  Contacts:
    - Icon: fas fa-phone
      Info: +7 999 123-45-67
    - Icon: fas fa-envelope
      Info: ivan.petrov@example.com
    - Icon: fas fa-globe
      Info: <a class="contact__link" href="https://ivanpetrov.example.com" target="_blank">ivanpetrov.example.com</a>
    - Icon: fas fa-map-marker-alt
      Info: Москва, Россия

Profile: Опытный Full-Stack разработчик с 5-летним стажем в веб-разработке. Специализируюсь на JavaScript экосистеме, React и Node.js, также имею опыт работы с Python. Создаю масштабируемые решения для достижения бизнес-целей.

Experience:
  - Employer: ООО Технологии Будущего
    Place: Москва, Россия
    Positions:
      - Title: Senior Full-Stack Developer
        Date: Январь 2020 - настоящее время
        Details:
          - Разработка корпоративной CRM системы на React и Node.js
          - Оптимизация бэкенд-сервисов, сокращение времени ответа на 40%
          - Внедрение CI/CD с GitHub Actions и Docker
          - Разработка микросервисной архитектуры
          - Менторство младших разработчиков
        Badges: ['React', 'Node.js', 'TypeScript', 'Docker', 'PostgreSQL', 'Redis', 'CI/CD']
      - Title: Middle Full-Stack Developer
        Date: Март 2019 - Январь 2020
        Details:
          - Разработка панели администратора для e-commerce платформы
          - Оптимизация SQL-запросов 
          - Настройка сборки фронтенд-приложения (Webpack)
        Badges: ['React', 'Redux', 'Express.js', 'PostgreSQL', 'Webpack', 'Jest']
  - Employer: ЗАО Стартап Инновации
    Place: Москва, Россия
    Positions:
      - Title: Junior Front-end Developer
        Date: Январь 2018 - Март 2019
        Details:
          - Разработка интерфейса для финтех-стартапа
          - Создание компонентов с React и styled-components
          - Разработка библиотеки UI-компонентов
          - Оптимизация фронтенда
        Badges: ['React', 'JavaScript', 'HTML5', 'CSS3/SASS', 'Git']
  - Employer: Институт Информационных Технологий
    Place: Москва, Россия
    Positions:
      - Title: Исследовательская стажировка
        Date: Октябрь 2016 - Июнь 2017
        Details:
          - Исследование алгоритмов машинного обучения
          - Разработка инструментов визуализации данных
          - Автоматизация обработки экспериментальных данных
          - Участие в научной публикации
        Badges: ['Python', 'Pandas', 'NumPy', 'Scikit-learn', 'Matplotlib']

Education:
  - Course: Магистр компьютерных наук
    Place: Московский Государственный Университет
    Date: Сентябрь 2015 - Июнь 2017
    Details: Специализация в анализе данных и машинном обучении

  - Course: Бакалавр программной инженерии
    Place: Московский Государственный Университет
    Date: Сентябрь 2011 - Июнь 2015
    Details: Дипломная работа о высоконагруженных веб-приложениях

References:
  - Name: Алексей Смирнов
    Relation: Технический директор в ООО Технологии Будущего
    Contacts:
    - Icon: fas fa-phone
      Info: +7 999 765-43-21
    - Icon: fas fa-envelope
      Info: a.smirnov@example.com
    - Icon: fas fa-map-marker-alt
      Info: Москва, Россия
  - Name: Елена Волкова
    Relation: Lead Developer в ЗАО Стартап Инновации
    Contacts:
    - Icon: fas fa-phone
      Info: +7 999 876-54-32
    - Icon: fas fa-envelope
      Info: e.volkova@example.com
    - Icon: fas fa-map-marker-alt
      Info: Москва, Россия

Skills:
  - Family: Языки программирования
    Items:
      - JavaScript/TypeScript
      - Python
      - HTML5
      - CSS3/SASS
      - SQL
      - Bash
      - PHP
  - Family: Фреймворки и библиотеки
    Items:
      - React
      - Redux
      - Node.js
      - Express
      - Django
      - Flask
      - Vue.js
  - Family: Инструменты разработки
    Items:
      - Git
      - Docker
      - Kubernetes
      - CI/CD
      - Webpack
      - Jest/Mocha
      - AWS/GCP
  - Family: Базы данных
    Items:
      - PostgreSQL
      - MongoDB
      - Redis
      - MySQL
      - Elasticsearch

Languages:
  - Name: Русский
    Level: Родной
  - Name: Английский
    Level: C1
  - Name: Немецкий
    Level: B1
  - Name: Испанский
    Level: A2

Diplomas:
  - AWS Certified Developer - Associate (2022)
  - MongoDB Certified Developer (2021)
  - React Advanced Certification (2020)
  - English IELTS 7.5 (2018)

Interests:
  - Open Source проекты
  - Машинное обучение
  - Туризм
  - Фотография
  - Горный велосипед
  - Игра на гитаре
EOF



И убедимся, что всё работает, запустив тестовый сервер Hugo — hugo server --bind 0.0.0.0 --port 8888.



▍ Разворачиваем Веб-сервер


Теперь настроим и развернём Веб-сервер для Ngnix, и единственное, что вам останется для полноценного запуска сайта на публику, это покупка и добавление доменного имени.

Установка и настройка Ngnix
# Устанавливаем Nginx наш веб-сервер
sudo dnf install -y nginx

# Запускаем Nginx и добавляем его в автозагрузку
sudo systemctl start nginx
sudo systemctl enable nginx

# Настраиваем базовый firewall для разрешения HTTP/HTTPS трафика
sudo dnf install -y firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

# Генерируем статический сайт
hugo --minify

# Создаём директорию для сайта в стандартном месте для веб-серверов
sudo mkdir -p /var/www/cv

# Копируем собранный сайт
sudo cp -r public/* /var/www/cv/

# Создаём конфигурацию Nginx
sudo tee /etc/nginx/conf.d/cv.conf > /dev/null << EOF
server {
    listen 80 default_server;
    server_name _;
    
    # Основной сайт (CV)
    location / {
        root /var/www/cv;
        index index.html;
        try_files \$uri \$uri/ =404;
    }
}
EOF

# Проверяем конфигурацию
sudo nginx -t

# Перезапускаем Nginx
sudo systemctl restart nginx



Если всё работает верно, то, перейдя по IP вашей VPS, вы увидите интерфейс вашего сайта, аналогичный тому, что был при запуске сервера через Hugo. Заодно можно посмотреть на потребление ресурсов — что, в общем-то, ожидаемо, оно минимальное, поскольку сайт статический. Параллельно с резюме можно, например, развернуть ещё документацию, базу знаний или каких-нибудь простых фоновых ботов.



▍ Заключение


Ну что ж, как видите, даже на самой бюджетной VPS что-то действительно полезное. Никаких гигабайтов оперативки для пары статических сайтов не нужно — ваше резюме и документация будут работать как часы даже на минимальных ресурсах. А параллельно с ними и ещё несколько простеньких проектов.

Особенно круто то, что вы получаете полный контроль над своим контентом и сервером, получая за 139 рублей полноценную VPS, а не надёжно огороженный от вас хостинг для статики. Куда порой и доступ по SSH не дают, ограничиваясь разве что FTP, и, естественно, где самостоятельно настроить что-то за пределами иерархии файлов в папках вам не позволят.

© 2025 ООО «МТ ФИНАНС»

Telegram-канал со скидками, розыгрышами призов и новостями IT 💻
Теги:
Хабы:
+31
Комментарии17

Публикации

Информация

Сайт
ruvds.com
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия
Представитель
ruvds