Compare commits

..

7 Commits

Author SHA1 Message Date
Никита Круглицкий
ff1340119a deploy.js 2025-08-15 20:02:32 +06:00
Никита Круглицкий
2bee1f5d79 deploy.sh -> deploy.js 2025-08-15 19:28:07 +06:00
Никита Круглицкий
42573afb62 deploy.sh 2025-08-15 19:02:17 +06:00
Никита Круглицкий
813829957c gitignore 2025-08-15 18:33:06 +06:00
Никита Круглицкий
7c6464848a +team member 2025-08-15 18:30:33 +06:00
Никита Круглицкий
a2f4a05dd4 documents 2025-08-15 18:15:51 +06:00
Никита Круглицкий
c069fd202c readme 2025-08-15 18:07:49 +06:00
11 changed files with 237 additions and 6 deletions

8
.gitignore vendored
View File

@@ -24,3 +24,11 @@ logs
!.env.example !.env.example
*.zip *.zip
.yarn/*
!.yarn/cache
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions

Binary file not shown.

View File

@@ -5,7 +5,7 @@
## Разработка ## Разработка
Для запуска проекта необходимо: Для запуска проекта необходимо:
- Версия NodeJS не ниже **18** - Версия NodeJS не ниже **v20.19.4**
- Глобально установить **yarn** с помощью команды `npm install -g yarn` - Глобально установить **yarn** с помощью команды `npm install -g yarn`
- Установить зависимости `yarn install` - Установить зависимости `yarn install`
- Запуск режима разработки `yarn run dev` - Запуск режима разработки `yarn run dev`

View File

@@ -40,11 +40,23 @@
</HomepageOurTeamMember> </HomepageOurTeamMember>
</SplideSlide> </SplideSlide>
<SplideSlide>
<HomepageOurTeamMember
avatar-url="/our-team/igor.png"
name="Игорь Слабуха"
position="CCO"
>
<li>5+ лет в продажах</li>
<li>Более 1000 успешных сделок</li>
<li>Опыт работы с международными IT-компаниями</li>
</HomepageOurTeamMember>
</SplideSlide>
<SplideSlide> <SplideSlide>
<HomepageOurTeamMember <HomepageOurTeamMember
avatar-url="/our-team/ruslan.png" avatar-url="/our-team/ruslan.png"
name="Руслан Кошкаров" name="Руслан Кошкаров"
position="Account Executive" position="Key Account Manager"
> >
<li>6+ лет в клиентском сервисе</li> <li>6+ лет в клиентском сервисе</li>
<li>Опыт в IT и обучении пользователей</li> <li>Опыт в IT и обучении пользователей</li>

View File

@@ -6,7 +6,8 @@
"build": "nuxt generate", "build": "nuxt generate",
"dev": "nuxt dev --host", "dev": "nuxt dev --host",
"preview": "nuxt preview", "preview": "nuxt preview",
"postinstall": "nuxt prepare" "postinstall": "nuxt prepare",
"deploy": "node ./scripts/deploy.js"
}, },
"dependencies": { "dependencies": {
"@floating-ui/vue": "^1.1.5", "@floating-ui/vue": "^1.1.5",
@@ -25,6 +26,7 @@
}, },
"devDependencies": { "devDependencies": {
"@antfu/eslint-config": "^3.9.2", "@antfu/eslint-config": "^3.9.2",
"@clack/prompts": "^0.11.0",
"@iconify/tools": "^4.0.7", "@iconify/tools": "^4.0.7",
"@nuxt/devtools": "^2.6.2", "@nuxt/devtools": "^2.6.2",
"@nuxt/image": "^1.8.1", "@nuxt/image": "^1.8.1",
@@ -38,7 +40,9 @@
"nuxt": "^4.0.3", "nuxt": "^4.0.3",
"nuxt-svgo": "^4.0.9", "nuxt-svgo": "^4.0.9",
"sass": "^1.81.0", "sass": "^1.81.0",
"ssh2-sftp-client": "^12.0.1",
"typescript": "^5.7.2", "typescript": "^5.7.2",
"unenv": "^1.10.0",
"unplugin-icons": "^0.20.1", "unplugin-icons": "^0.20.1",
"unplugin-vue-components": "^0.27.4", "unplugin-vue-components": "^0.27.4",
"vue": "^3.5.18", "vue": "^3.5.18",

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/our-team/igor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

72
scripts/deploy.js Normal file
View File

@@ -0,0 +1,72 @@
import { execSync } from 'node:child_process'
import path from 'node:path'
import * as clack from '@clack/prompts'
import SftpClient from 'ssh2-sftp-client'
const HOST = '92.53.106.114'
const USERNAME = 'cs21601'
const REMOTE_BASE = '/home/c/cs21601/quantum'
const LOCAL_DIST = path.resolve('./dist')
const LOCAL_SRC_ARCHIVE = path.resolve('./src.zip')
const DATE = new Date().toISOString().replace(/[-:]/g, '').replace(/\..+/, '');
(async () => {
const spinner = clack.spinner()
try {
clack.intro(`Деплой на ${HOST}`)
const password = await clack.text({ message: `Введите пароль для пользователя ${USERNAME}` })
// 1) yarn build
spinner.start('Собираем проект')
execSync('yarn build --logLevel=silent', { stdio: 'inherit' })
spinner.stop('Сборка выполнена')
// 2) git archive
spinner.start('Делаем архив с исходным кодом')
execSync(`git archive --format=zip --output=${LOCAL_SRC_ARCHIVE} main`, { stdio: 'inherit' })
spinner.stop('Архив с исходным кодом сохранен')
const sftp = new SftpClient()
spinner.start('Подключаемся к серверу')
await sftp.connect({
host: HOST,
port: 22,
username: USERNAME,
password,
})
spinner.stop('Подключились к серверу')
// 3) Переименование public_html
try {
spinner.start('Делаем бэкап public_html')
await sftp.rename(`${REMOTE_BASE}/public_html`, `${REMOTE_BASE}/public_html_${DATE}`)
spinner.stop('Папка public_html переименована')
}
catch {
spinner.stop('public_html не найдена, пропускаю переименование')
}
// 4) Загрузка dist
spinner.start('Загружаем dist в public_html')
await sftp.mkdir(`${REMOTE_BASE}/public_html`, true)
await sftp.uploadDir(LOCAL_DIST, `${REMOTE_BASE}/public_html`, undefined)
spinner.stop('Статические файлы загружены')
// 5) Загрузка src.zip
spinner.start('Загружаем архива с исходным кодом')
await sftp.mkdir(`${REMOTE_BASE}/src`, true)
await sftp.put(LOCAL_SRC_ARCHIVE, `${REMOTE_BASE}/src.zip`)
spinner.stop('Архив с исходным кодом загружен')
await sftp.end()
clack.outro('Деплой завершён успешно!')
}
catch (err) {
spinner.stop()
clack.cancel(`Ошибка: ${err.message}`)
process.exit(0)
}
})()

139
yarn.lock
View File

@@ -452,6 +452,27 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@clack/core@npm:0.5.0":
version: 0.5.0
resolution: "@clack/core@npm:0.5.0"
dependencies:
picocolors: "npm:^1.0.0"
sisteransi: "npm:^1.0.5"
checksum: 10c0/ef55dce4b0a4802171b71fe595865a6452c7cf823d162df7fa9afe2ea5a594b9d97e0b8e2880c2a805f2ce1d2f782cb1637d9f8d2ab8b99010af3a20816fae5a
languageName: node
linkType: hard
"@clack/prompts@npm:^0.11.0":
version: 0.11.0
resolution: "@clack/prompts@npm:0.11.0"
dependencies:
"@clack/core": "npm:0.5.0"
picocolors: "npm:^1.0.0"
sisteransi: "npm:^1.0.5"
checksum: 10c0/4c573f2adec3b9109fe861e36312be8ae7cc6e80a5128aa784b9aeafeda5001b23f66c08eca50f4491119b435d9587ec9862956be8c5be472ec3373275003ba8
languageName: node
linkType: hard
"@clack/prompts@npm:^0.9.1": "@clack/prompts@npm:^0.9.1":
version: 0.9.1 version: 0.9.1
resolution: "@clack/prompts@npm:0.9.1" resolution: "@clack/prompts@npm:0.9.1"
@@ -4488,6 +4509,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"asn1@npm:^0.2.6":
version: 0.2.6
resolution: "asn1@npm:0.2.6"
dependencies:
safer-buffer: "npm:~2.1.0"
checksum: 10c0/00c8a06c37e548762306bcb1488388d2f76c74c36f70c803f0c081a01d3bdf26090fc088cd812afc5e56a6d49e33765d451a5f8a68ab9c2b087eba65d2e980e0
languageName: node
linkType: hard
"ast-kit@npm:^2.0.0, ast-kit@npm:^2.1.1": "ast-kit@npm:^2.0.0, ast-kit@npm:^2.1.1":
version: 2.1.2 version: 2.1.2
resolution: "ast-kit@npm:2.1.2" resolution: "ast-kit@npm:2.1.2"
@@ -4642,6 +4672,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"bcrypt-pbkdf@npm:^1.0.2":
version: 1.0.2
resolution: "bcrypt-pbkdf@npm:1.0.2"
dependencies:
tweetnacl: "npm:^0.14.3"
checksum: 10c0/ddfe85230b32df25aeebfdccfbc61d3bc493ace49c884c9c68575de1f5dcf733a5d7de9def3b0f318b786616b8d85bad50a28b1da1750c43e0012c93badcc148
languageName: node
linkType: hard
"binary-extensions@npm:^2.0.0": "binary-extensions@npm:^2.0.0":
version: 2.3.0 version: 2.3.0
resolution: "binary-extensions@npm:2.3.0" resolution: "binary-extensions@npm:2.3.0"
@@ -4766,6 +4805,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"buildcheck@npm:~0.0.6":
version: 0.0.6
resolution: "buildcheck@npm:0.0.6"
checksum: 10c0/8cbdb89f41bc484b8325f4828db4135b206a0dffb641eb6cdb2b7022483c45dd0e5aac6d820c9a67bdd2caab3a02c76d7ceec7bd9ec494b5a2270d2806b01a76
languageName: node
linkType: hard
"builtin-modules@npm:^3.3.0": "builtin-modules@npm:^3.3.0":
version: 3.3.0 version: 3.3.0
resolution: "builtin-modules@npm:3.3.0" resolution: "builtin-modules@npm:3.3.0"
@@ -5257,6 +5303,18 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"concat-stream@npm:^2.0.0":
version: 2.0.0
resolution: "concat-stream@npm:2.0.0"
dependencies:
buffer-from: "npm:^1.0.0"
inherits: "npm:^2.0.3"
readable-stream: "npm:^3.0.2"
typedarray: "npm:^0.0.6"
checksum: 10c0/29565dd9198fe1d8cf57f6cc71527dbc6ad67e12e4ac9401feb389c53042b2dceedf47034cbe702dfc4fd8df3ae7e6bfeeebe732cc4fa2674e484c13f04c219a
languageName: node
linkType: hard
"confbox@npm:^0.1.8": "confbox@npm:^0.1.8":
version: 0.1.8 version: 0.1.8
resolution: "confbox@npm:0.1.8" resolution: "confbox@npm:0.1.8"
@@ -5348,6 +5406,17 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"cpu-features@npm:~0.0.10":
version: 0.0.10
resolution: "cpu-features@npm:0.0.10"
dependencies:
buildcheck: "npm:~0.0.6"
nan: "npm:^2.19.0"
node-gyp: "npm:latest"
checksum: 10c0/0c4a12904657b22477ffbcfd2b4b2bdd45b174f283616b18d9e1ade495083f9f6098493feb09f4ae2d0b36b240f9ecd32cfb4afe210cf0d0f8f0cc257bd58e54
languageName: node
linkType: hard
"crc-32@npm:^1.2.0": "crc-32@npm:^1.2.0":
version: 1.2.2 version: 1.2.2
resolution: "crc-32@npm:1.2.2" resolution: "crc-32@npm:1.2.2"
@@ -9654,6 +9723,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"nan@npm:^2.19.0, nan@npm:^2.20.0":
version: 2.23.0
resolution: "nan@npm:2.23.0"
dependencies:
node-gyp: "npm:latest"
checksum: 10c0/b986dd257dca53ab43a3b6ca6d0eafde697b69e1d63b242fa4aece50ce97eb169f9c4a5d8eb0eb5f58d118a9595fee11f3198fa210f023440053bb6f54109e73
languageName: node
linkType: hard
"nanoid@npm:^3.3.11": "nanoid@npm:^3.3.11":
version: 3.3.11 version: 3.3.11
resolution: "nanoid@npm:3.3.11" resolution: "nanoid@npm:3.3.11"
@@ -10041,6 +10119,7 @@ __metadata:
resolution: "nuxt-app@workspace:." resolution: "nuxt-app@workspace:."
dependencies: dependencies:
"@antfu/eslint-config": "npm:^3.9.2" "@antfu/eslint-config": "npm:^3.9.2"
"@clack/prompts": "npm:^0.11.0"
"@floating-ui/vue": "npm:^1.1.5" "@floating-ui/vue": "npm:^1.1.5"
"@iconify/tools": "npm:^4.0.7" "@iconify/tools": "npm:^4.0.7"
"@nuxt/devtools": "npm:^2.6.2" "@nuxt/devtools": "npm:^2.6.2"
@@ -10063,8 +10142,10 @@ __metadata:
nuxt: "npm:^4.0.3" nuxt: "npm:^4.0.3"
nuxt-svgo: "npm:^4.0.9" nuxt-svgo: "npm:^4.0.9"
sass: "npm:^1.81.0" sass: "npm:^1.81.0"
ssh2-sftp-client: "npm:^12.0.1"
swiper: "npm:^11.1.15" swiper: "npm:^11.1.15"
typescript: "npm:^5.7.2" typescript: "npm:^5.7.2"
unenv: "npm:^1.10.0"
unplugin-icons: "npm:^0.20.1" unplugin-icons: "npm:^0.20.1"
unplugin-vue-components: "npm:^0.27.4" unplugin-vue-components: "npm:^0.27.4"
uuid: "npm:^11.0.3" uuid: "npm:^11.0.3"
@@ -11510,7 +11591,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.2": "readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.2":
version: 3.6.2 version: 3.6.2
resolution: "readable-stream@npm:3.6.2" resolution: "readable-stream@npm:3.6.2"
dependencies: dependencies:
@@ -11870,7 +11951,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"safer-buffer@npm:>= 2.1.2 < 3.0.0": "safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:~2.1.0":
version: 2.1.2 version: 2.1.2
resolution: "safer-buffer@npm:2.1.2" resolution: "safer-buffer@npm:2.1.2"
checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4
@@ -12314,6 +12395,33 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"ssh2-sftp-client@npm:^12.0.1":
version: 12.0.1
resolution: "ssh2-sftp-client@npm:12.0.1"
dependencies:
concat-stream: "npm:^2.0.0"
ssh2: "npm:^1.16.0"
checksum: 10c0/38017b7ff5a935873be99e17ce401b426cf4c78dad6b4cd29ae18ba12ec418bda72b336b451e7ba4d5a1e1c4ccb029ded49fd6ff7398f3804e52084fbf0d3df1
languageName: node
linkType: hard
"ssh2@npm:^1.16.0":
version: 1.16.0
resolution: "ssh2@npm:1.16.0"
dependencies:
asn1: "npm:^0.2.6"
bcrypt-pbkdf: "npm:^1.0.2"
cpu-features: "npm:~0.0.10"
nan: "npm:^2.20.0"
dependenciesMeta:
cpu-features:
optional: true
nan:
optional: true
checksum: 10c0/d336a85d87501c64ba230b6c1a2901a9b0e376fe7f7a1640a7f8dbdafe674b2e1a5dc6236ffd1329969dc0cf03cd57759b28743075e61229a984065ee1d56bed
languageName: node
linkType: hard
"ssri@npm:^12.0.0": "ssri@npm:^12.0.0":
version: 12.0.0 version: 12.0.0
resolution: "ssri@npm:12.0.0" resolution: "ssri@npm:12.0.0"
@@ -12922,6 +13030,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"tweetnacl@npm:^0.14.3":
version: 0.14.5
resolution: "tweetnacl@npm:0.14.5"
checksum: 10c0/4612772653512c7bc19e61923fbf42903f5e0389ec76a4a1f17195859d114671ea4aa3b734c2029ce7e1fa7e5cc8b80580f67b071ecf0b46b5636d030a0102a2
languageName: node
linkType: hard
"type-check@npm:^0.4.0, type-check@npm:~0.4.0": "type-check@npm:^0.4.0, type-check@npm:~0.4.0":
version: 0.4.0 version: 0.4.0
resolution: "type-check@npm:0.4.0" resolution: "type-check@npm:0.4.0"
@@ -12966,6 +13081,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"typedarray@npm:^0.0.6":
version: 0.0.6
resolution: "typedarray@npm:0.0.6"
checksum: 10c0/6005cb31df50eef8b1f3c780eb71a17925f3038a100d82f9406ac2ad1de5eb59f8e6decbdc145b3a1f8e5836e17b0c0002fb698b9fe2516b8f9f9ff602d36412
languageName: node
linkType: hard
"typescript@npm:^5.7.2, typescript@npm:^5.7.3": "typescript@npm:^5.7.2, typescript@npm:^5.7.3":
version: 5.9.2 version: 5.9.2
resolution: "typescript@npm:5.9.2" resolution: "typescript@npm:5.9.2"
@@ -13044,6 +13166,19 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"unenv@npm:^1.10.0":
version: 1.10.0
resolution: "unenv@npm:1.10.0"
dependencies:
consola: "npm:^3.2.3"
defu: "npm:^6.1.4"
mime: "npm:^3.0.0"
node-fetch-native: "npm:^1.6.4"
pathe: "npm:^1.1.2"
checksum: 10c0/354180647e21204b6c303339e7364b920baadb2672b540a88af267bc827636593e0bf79f59753dcc6b7ab5d4c83e71d69a9171a3596befb8bf77e0bb3c7612b9
languageName: node
linkType: hard
"unenv@npm:^2.0.0-rc.18, unenv@npm:^2.0.0-rc.19": "unenv@npm:^2.0.0-rc.18, unenv@npm:^2.0.0-rc.19":
version: 2.0.0-rc.19 version: 2.0.0-rc.19
resolution: "unenv@npm:2.0.0-rc.19" resolution: "unenv@npm:2.0.0-rc.19"