{"id":1166,"date":"2025-02-22T23:31:46","date_gmt":"2025-02-22T20:31:46","guid":{"rendered":"https:\/\/shedov.top\/ru\/?p=1166"},"modified":"2026-01-17T15:05:52","modified_gmt":"2026-01-17T12:05:52","slug":"instrukciya-po-razvyortyvaniyu-crystal-v1-0-na-vpc-i-nastrojka-dostupa-k-sajtu-po-publichnomu-ip","status":"publish","type":"post","link":"https:\/\/shedov.top\/ru\/instrukciya-po-razvyortyvaniyu-crystal-v1-0-na-vpc-i-nastrojka-dostupa-k-sajtu-po-publichnomu-ip\/","title":{"rendered":"\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044e CRYSTAL v1.0 \u043d\u0430 VPC \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u0430\u0439\u0442\u0443 \u043f\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c\u0443 IP"},"content":{"rendered":"<div class=\"single_contents\">\n    <h2>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435:<\/h2>\n    <nav>\n        <ul>\n            <li>0. <a href=\"#paragraph_0\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0412\u041c \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u041f\u041a<\/a><\/li>\n            <li>1. <a href=\"#paragraph_1\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c CRYSTAL v1.0<\/a><\/li>\n            <li>2. <a href=\"#paragraph_2\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 SSH<\/a><\/li>\n            <li>3. <a href=\"#paragraph_3\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0432 VPC<\/a><\/li>\n            <li>4. <a href=\"#paragraph_4\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0412\u041c<\/a><\/li>\n            <li>5. <a href=\"#paragraph_5\">\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0412\u041c, \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0432 Win 11<\/a><\/li>\n            <li>6. <a href=\"#paragraph_6\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Node.js, npm \u0438 npx<\/a><\/li>\n            <li>7. <a href=\"#paragraph_7\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Nginx<\/a><\/li>\n            <li>8. <a href=\"#paragraph_8\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 git \u0438 GitHub<\/a><\/li>\n            <li>9. <a href=\"#paragraph_9\">\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0430 GitHub \u0447\u0435\u0440\u0435\u0437 \u0412\u041c<\/a><\/li>\n            <li>10. <a href=\"#paragraph_10\">\u041a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u0438\u0437 GitHub \u0432 \u0412\u041c<\/a><\/li>\n            <li>11. <a href=\"#paragraph_11\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u2018sites-available\u2019 \u0438 \u2018sites-enabled\u2019 \u0432 Nginx<\/a><\/li>\n            <li>12. <a href=\"#paragraph_12\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 frontend \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 .env.prodIP<\/a><\/li>\n            <li>13. <a href=\"#paragraph_13\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 backend \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 .env \u0438 .env.prodIP<\/a><\/li>\n            <li>14. <a href=\"#paragraph_14\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 MongoDB (MongoDB Community Edition) \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0435\u0451 \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443<\/a><\/li>\n            <li>15. <a href=\"#paragraph_15\">\u0417\u0430\u043f\u0443\u0441\u043a backend \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u0444\u043e\u043d\u043e\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PM2<\/a><\/li>\n            <li>16. <a href=\"#paragraph_16\">\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 \u0412\u041c, \u043f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u041f\u041a<\/a><\/li>\n        <\/ul>\n    <\/nav>\n\n<h2 id=\"paragraph_0\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/h2>\n<ul class=\"stack_color\">\n    <li>\n        <strong>M<\/strong>ongoDB v8.0.4. \n<\/li> \n<li> \n<strong>E<\/strong>xpress.js v4.21.2. \n<\/li> \n<li> \n<strong>R<\/strong>eact v19.0.0. \n<\/li> \n<li> \n<strong>N<\/strong>ode.js v24.0.2.\n    <\/li>\n    <li>\n        NPM v11.3.0.\n    <\/li>\n     <li>\n        PM2 v5.4.3.\n    <\/li>\n    <li>\n        Vite v6.1.0.\n    <\/li>\n<\/ul>\n\n<h2>\u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b, \u0434\u0430\u043b\u0435\u0435 - \u0412\u041c: <\/h2>\n<ul>\n    <li>\n        \u0413\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0434\u043e\u043b\u044f vCPU: 30%.\n    <\/li>\n    <li>\n        vCPU: 2.\n    <\/li>\n    <li>\n        RAM: 4 \u0413\u0411.\n    <\/li>\n    <li>\n        SSD: 20 \u0413\u0411.\n    <\/li>\n    <li>\n        OS: Debian 12.\n    <\/li>\n    <li>\n        Web server: Nginx v1.22.1.\n    <\/li>\n<\/ul>\n\n<h2>\u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u041f\u041a:<\/h2>\n<ul>\n    <li>\n        OS: Windows 11 Pro, \u0434\u0430\u043b\u0435\u0435 - Win 11.\n    <\/li>\n    <li>\n        \u041a\u043e\u043c\u0430\u043d\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 (Windows \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b), \u0434\u0430\u043b\u0435\u0435 - \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b.\n    <\/li>\n<\/ul>\n<\/div>\n\n<p style=\"margin-top: 15px;\"><strong> \u041f\u0435\u0440\u0435\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/github.com\/CrystalSystems\/crystal-v1.0\" target=\"_blank\" rel=\"noopener\"\n> CRYSTAL v1.0<\/a> \u0438\u043b\u0438 \u0435\u0451 \u043a\u043e\u0434\u0430 \u0432 production-\u0441\u0440\u0435\u0434\u0435, \u043d\u0430\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f, \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0440\u0438\u0441\u043a\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043a\u0438\u0431\u0435\u0440\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c\u044e.<\/strong><\/p>\n\n<p style=\"margin-top: 10px;\"><strong>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432\u0441\u0435 \u043f\u0443\u043d\u043a\u0442\u044b.<\/strong><\/p>\n\n<h2 id=\"paragraph_1\">1. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c CRYSTAL v1.0<\/h2>\n\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0432 \u0432\u0430\u0448\u0435\u043c GitHub \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0435 \u0441\u043a\u0440\u044b\u0442\u044b\u0439 \u0438\u043b\u0438\n    \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c - 'crystal'. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c 'fork' (\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 fork, \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043a\u0440\u044b\u0442\u044c)\n    \u0438\u043b\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0437 <a href=\"https:\/\/github.com\/CrystalSystems\/crystal-v1.0\" target=\"_blank\" rel=\"noopener\"\n> \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f<\/a> CRYSTAL v1.0.<\/p>\n\n<p>\u041f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u041f\u041a, \u043f\u0440\u043e\u0435\u043a\u0442\n    \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430 \u0412\u041c, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b - 'git pull', \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0432 <a\n        href=\"#paragraph_16\">16 \u043f\u0443\u043d\u043a\u0442\u0435<\/a>, \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u043c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e\n    \u043d\u0430 GitHub \u0447\u0435\u0440\u0435\u0437 \u0412\u041c, \u044d\u0442\u043e\n    \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043e \u0432 <a href=\"#paragraph_9\">9 \u043f\u0443\u043d\u043a\u0442\u0435<\/a>.<\/p>\n\n<h2 id=\"paragraph_2\">2. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 SSH<\/h2>\n\n<p>\u041a\u043b\u044e\u0447 SSH, \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0412\u041c \u0441 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u041f\u041a, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0432 Win 11.\n    Win 11 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c OpenSSH, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u044e\u0447\u0435\u0439 SSH.<\/p>\n\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c SSH \u043a\u043b\u044e\u0447, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0435 - 'Win+R', \u0437\u0430\u0442\u0435\u043c \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0432 \u043e\u0442\u043a\u0440\u044b\u0432\u0448\u0438\u043c\u0441\u044f \u043e\u043a\u043d\u0435 - 'cmd' \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 -\n    'Enter',\n    \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0432 \u043d\u0451\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default\"><code>ssh-keygen -t ed25519<\/code><\/pre>\n\n\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430:<\/p>\n\n<pre class=\"wp-block-code language-default\"><code>crystal_key<\/code><\/pre>\n\n\n<div class=\"blog_post_image_wrap\">\n    <div class=\"blog_post_image\">\n        <a href=\"https:\/\/shedov.top\/wp-content\/images\/ssh-keygen_screen_1.webp\" data-lbwps-width=\"5575\"\n            data-lbwps-height=\"3717\"\n            data-lbwps-srcsmall=\"https:\/\/shedov.top\/wp-content\/images\/ssh-keygen_screen_1.webp\"><img decoding=\"async\" \n                src=\"https:\/\/shedov.top\/wp-content\/images\/ssh-keygen_screen_1.webp\" alt=\"ssh-keygen\"><\/a>\n    <\/div>\n<\/div>\n<div class=\"blog_post_screenshot_number\">\n    <p>\u0421\u043a\u0440\u0438\u043d 1\n    <p>\n<\/div>\n\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u043a\u043b\u044e\u0447\u0430, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 - 'Enter'.<\/p>\n<p>\u0412\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c, \u044d\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u043d\u043e \u043f\u043e\u0432\u044b\u0441\u0438\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c\n    \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a \u0412\u041c, \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c. \u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - 'C:\\Users\\\u0418\u043c\u044f\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\\'. \u041f\u043e\u0441\u043b\u0435\n    \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0430, \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430, \u043e\u0434\u0438\u043d \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c .pub (\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447) \u0438 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f (\u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447),\n    \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u0444\u0430\u0439\u043b\u044b \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 - 'C:\\Users\\\u0418\u043c\u044f\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\\.ssh\\'. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c,\n    \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u0412\u041c \u043d\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u0435. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430, \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\n    \u0412\u041c, \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0432 Win 11.<\/p>\n\n<p><strong>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0412\u041c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 - <a href=\"https:\/\/cloud.ru\/\" target=\"_blank\"\n        rel=\"noopener\">Cloud.ru<\/a>, \u043d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u0432\u0441\u0435\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\n    \u0440\u0430\u0431\u043e\u0442\u044b, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439.<\/strong><\/p>\n\n<p><strong>\u0414\u0430\u043b\u0435\u0435, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441\u0435\u0440\u0432\u0438\u0441\u0430.<\/strong><\/p>\n\n<h2 id=\"paragraph_3\">3. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0432 VPC<\/h2>\n\n<h3>\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 - Evolution.<\/h3>\n<p>\u0414\u0430\u043b\u0435\u0435, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043c\u0435\u043d\u044e \u0441\u043b\u0435\u0432\u0430, \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b - '\u0413\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438', \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 - '\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0443\n    \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438'.<\/p>\n\n<h3>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043f\u0443\u043d\u043a\u0442\u044b, \u043a\u0430\u043a \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0438\u0436\u0435:<\/h3>\n<p>\u0417\u043e\u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 - ru.AZ-1 (\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u0430\u044f, \u043d\u043e \u0443 \u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0438 \u0412\u041c, \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430\u044f \u0437\u043e\u043d\u0430\n    \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438).\n<\/p>\n<p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 - crystal.<\/p>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 - \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c.<\/p>\n<p>\u0422\u0435\u0433\u0438 - \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c.<\/p>\n\n<h3>\u0414\u0430\u043b\u0435\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0440\u0442\u044b 80, 443 \u0438 22, \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u0430\u0439\u0442\u0443 \u0438 \u0412\u041c \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430.<\/h3>\n\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u043e\u0432:<\/p>\n<p>443 - \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e HTTPS.<\/p>\n<p>80 - \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e HTTP.<\/p>\n<p>22 - \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0412\u041c, \u0447\u0435\u0440\u0435\u0437 \u043a\u043b\u044e\u0447 SSH, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u0435\u0435.<\/p>\n\n<p>\u0412 \u043f\u0443\u043d\u043a\u0442\u0435 - '\u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430', \u043d\u0430\u0436\u043c\u0438\u0442\u0435 - '\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e' \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043f\u0443\u043d\u043a\u0442\u044b, \u043a\u0430\u043a \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435\n    \u2116 2.\n<\/p>\n\n<p>\u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 IP \u043d\u0438\u0436\u0435, \u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0435\u0433\u043e \u0432 \u043f\u043e\u043b\u0435 '\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a':<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>0.0.0.0\/0<\/code><\/pre>\n\n\n<p>\u0412 \u043f\u043e\u043b\u0435 '\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435', \u0432\u0432\u0435\u0434\u0438\u0442\u0435:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>HTTPS IPv4<\/code><\/pre>\n\n\n<div class=\"blog_post_image_wrap\">\n    <div class=\"blog_post_image\">\n        <a href=\"https:\/\/shedov.top\/wp-content\/images\/rules_incoming_traffic_screen_2_ru.webp\" data-lbwps-width=\"5575\"\n            data-lbwps-height=\"3717\"\n            data-lbwps-srcsmall=\"https:\/\/shedov.top\/wp-content\/images\/rules_incoming_traffic_screen_2_ru.webp\"><img decoding=\"async\"\n                 src=\"https:\/\/shedov.top\/wp-content\/images\/rules_incoming_traffic_screen_2_ru.webp\"\n                alt=\"rules incoming traffic screen 2\"><\/a>\n    <\/div>\n<\/div>\n<div class=\"blog_post_screenshot_number\">\n    <p>\u0421\u043a\u0440\u0438\u043d 2\n    <p>\n<\/div>\n\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 - '\u0421\u043e\u0437\u0434\u0430\u0442\u044c'.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u2116 3.<\/p>\n\n<div class=\"blog_post_image_wrap\">\n    <div class=\"blog_post_image\">\n        <a href=\"https:\/\/shedov.top\/wp-content\/images\/rules_incoming_traffic_screen_3_ru.webp\" data-lbwps-width=\"5575\"\n            data-lbwps-height=\"3717\"\n            data-lbwps-srcsmall=\"https:\/\/shedov.top\/wp-content\/images\/rules_incoming_traffic_screen_3_ru.webp\"><img decoding=\"async\"\n                 src=\"https:\/\/shedov.top\/wp-content\/images\/rules_incoming_traffic_screen_3_ru.webp\"\n                alt=\"rules incoming traffic screen 3\"><\/a>\n    <\/div>\n<\/div>\n<div class=\"blog_post_screenshot_number\">\n    <p>\u0421\u043a\u0440\u0438\u043d 3\n    <p>\n<\/div>\n\n<p>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430, \u043a\u0430\u043a \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u2116 4.<\/p>\n\n<div class=\"blog_post_image_wrap\">\n    <div class=\"blog_post_image\">\n        <a href=\"https:\/\/shedov.top\/wp-content\/images\/rules_outgoing_traffic_screen_4_ru.webp\" data-lbwps-width=\"5575\"\n            data-lbwps-height=\"3717\"\n            data-lbwps-srcsmall=\"https:\/\/shedov.top\/wp-content\/images\/rules_outgoing_traffic_screen_4_ru.webp\"><img decoding=\"async\"\n                 src=\"https:\/\/shedov.top\/wp-content\/images\/rules_outgoing_traffic_screen_4_ru.webp\"\n                alt=\"rules outgoing traffic screen\"><\/a>\n    <\/div>\n<\/div>\n<div class=\"blog_post_screenshot_number\">\n    <p>\u0421\u043a\u0440\u0438\u043d 4\n    <p>\n<\/div>\n\n<p>\u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435, \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f - '\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435':\n<p>\n    \n<pre class=\"wp-block-code language-default\">\n<code>All egress IPv4<\/code><\/pre>\n\n\n<p>\u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 - '\u0421\u043e\u0437\u0434\u0430\u0442\u044c' (\u0433\u0440\u0443\u043f\u043f\u0443 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438).<\/p>\n\n<h2 id=\"paragraph_4\">4. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0412\u041c<\/h2>\n\n<p>\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0432 \u043c\u0435\u043d\u044e, \u0440\u0430\u0437\u0434\u0435\u043b - '\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b', \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 - '\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443'.<\/p>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043f\u0443\u043d\u043a\u0442\u044b, \u043a\u0430\u043a \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0438\u0436\u0435.<\/p>\n\n<h3>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/h3>\n<p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 - crystal.<\/p>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 - \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c.<\/p>\n<p>\u0422\u0435\u0433\u0438 - \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c.<\/p>\n<p>\u0417\u043e\u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 - ru.AZ-1 (\u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c, \u043a\u0430\u043a \u0432 \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438).<\/p>\n<p>\u041d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0433\u0440\u0443\u043f\u043f\u0443 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f.<\/p>\n\n<p><strong>\u041e\u0431\u0440\u0430\u0437:<\/strong><\/p>\n<p>\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 - Debian 12.<\/p>\n\n<p><strong>\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441:<\/strong><\/p>\n<p>\u0413\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0434\u043e\u043b\u044f vCPU - 30%<\/p>\n<p>vCPU - 2<\/p>\n<p>RAM - 4<\/p>\n\n<p><strong>\u0414\u0438\u0441\u043a\u0438:<\/strong><\/p>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0439 \u0434\u0438\u0441\u043a<\/p>\n<p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 - \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/p>\n<p>\u0422\u0438\u043f - SSD<\/p>\n<p>\u0420\u0430\u0437\u043c\u0435\u0440 - 20\u0413\u0411 <\/p>\n\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438<\/h3>\n<p><strong>\u0421\u0435\u0442\u0435\u0432\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438<\/strong><\/p>\n<p>\u041d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a \u043f\u043e\u0434\u0441\u0435\u0442\u0438.<\/p>\n<p>\u0414\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e - '\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 IP' (\u041a \u0412\u041c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439\n    IP-\u0430\u0434\u0440\u0435\u0441).<\/p>\n<p>\u0422\u0438\u043f IP - \u041f\u0440\u044f\u043c\u043e\u0439.<\/p>\n<p>\u0413\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 - \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 - 'crystal'.<\/p>\n\n<p><strong>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/strong><\/p>\n<p>\u0418\u043c\u044f \u0445\u043e\u0441\u0442\u0430 - crystal.<\/p>\n\n<p><strong>\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<\/strong><\/p>\n<p>\u041b\u043e\u0433\u0438\u043d - crystal-vm.<\/p>\n\n<p><strong>\u041c\u0435\u0442\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438<\/strong><\/p>\n<p>\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 - '\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447'.<\/p>\n\n<p>\u0422\u0430\u043a \u0436\u0435, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0412\u041c, \u0447\u0435\u0440\u0435\u0437 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c - Cloud.ru. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e\n    \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 Cloud.ru, \u0430 \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - 'PasswordAuthentication no'.<\/p>\n\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 - '\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u044e\u0447', \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 - '\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u0437 \u0444\u0430\u0439\u043b\u0430', \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e -\n    'C:\\Users\\\u0418\u043c\u044f\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\\.ssh\\' \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 - 'crystal_key.pub'.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u043a\u043b\u044e\u0447\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0432 \u043f\u043e\u043b\u0435 - '\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435', \u0438\u043c\u044f \u043a\u043b\u044e\u0447\u0430 - crystal_key.pub, \u043f\u043e\u0441\u043b\u0435, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 -\n    '\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c'.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 - '\u0421\u043e\u0437\u0434\u0430\u0442\u044c' (\u0412\u041c).<\/p>\n\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430, \u0412\u041c \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430.<\/p>\n\n<h2 id=\"paragraph_5\">5. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0412\u041c, \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0432 Win 11<\/h2>\n\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 IP \u0430\u0434\u0440\u0435\u0441 \u0432\u0430\u0448\u0435\u0439 \u0412\u041c, \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 - '\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b', \u0432 \u043e\u0434\u043d\u043e\u0438\u043c\u0451\u043d\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435.<\/p>\n\n<p>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442, \u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default line-numbers\">\n<code>ssh -i C:\\Users\\\u0418\u043c\u044f\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\\.ssh\\crystal_key crystal-vm@\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439IP\u0410\u0434\u0440\u0435\u0441\u0412\u041c<\/code><\/pre>\n\n\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/strong><\/p>\n\n<p>ssh -i C:\\Users\\Andrew\\.ssh\\crystal_key crystal-vm@55.55.55.55 <\/p>\n\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 - 'Enter'. \u0415\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 - 'Are you sure you want to continue connecting\n    (yes\/no\/[fingerprint])?' \u0432\u0432\u0435\u0434\u0438\u0442\u0435 - ' yes', \u0434\u0430\u043b\u0435\u0435 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0438 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 SSH-\u043a\u043b\u044e\u0447\u0430.<\/p>\n\n<h2 id=\"paragraph_6\">6. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Node.js, npm \u0438 npx<\/h2>\n\n<p>\u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c, \u043f\u0440\u0438 \u0432\u0432\u043e\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434, \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441 - 'Do you want to continue? [Y\/n]', \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 -\n    'Y', \u0438 \u0434\u0430\u043b\u0435\u0435 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 - 'Enter'.<\/p>\n\n\n<p style=\"text-align:center; margin-bottom: 4px;\"><strong>\u26a0\ufe0f \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u043f\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438<\/strong><\/p>\n\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0443\u043d\u043a\u0442\u0430\u0445 <a rel=\"noopener\" href=\"https:\/\/shedov.top\/ru\/dokumentaciya-crystal-v1-0\/\" data-type=\"URL\" target=\"_blank\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code class=\"inline-code\">sudo -i<\/code>, \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\n  \u0441\u0443\u043f\u0435\u0440\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (<code class=\"inline-code\">root<\/code>). \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434.<\/p>\n\n<p>\u0412 production-\u0441\u0440\u0435\u0434\u0435, \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0438\u0437-\u043f\u043e\u0434 <code class=\"inline-code\">root<\/code>, <strong>\u043d\u0435\n      \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f<\/strong>, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u0445 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439 \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c\n    \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n\n\n<p><strong>6.1. \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u0435 sudo, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/strong><\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>sudo -i<\/code><\/pre>\n\n\n\n<p><strong>6.2. \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u0430\u043a\u0435\u0442\u0430\u0445 \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u0430\u043a\u0435\u0442\u044b, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/strong><\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>apt update && apt -y upgrade<\/code><\/pre>\n\n\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u043e\u043a\u043d\u043e \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0443 - 'Enter'.<\/p>\n\n<p><strong>6.3. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 Node.js, npm \u0438 npx, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0438\u0436\u0435:<\/strong><\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>apt install curl -y<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code language-default\">\n<code>cd \/usr\/local\/src<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code language-default\">\n<code>curl -O https:\/\/nodejs.org\/dist\/v24.0.2\/node-v24.0.2-linux-x64.tar.xz<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code language-default\">\n<code>tar -xf node-v24.0.2-linux-x64.tar.xz<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code language-default\">\n<code>mv node-v24.0.2-linux-x64 \/usr\/local\/node-v24.0.2<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code language-default\">\n<code>ln -sf \/usr\/local\/node-v24.0.2\/bin\/node \/usr\/bin\/node && ln -sf \/usr\/local\/node-v24.0.2\/bin\/npm \/usr\/bin\/npm && ln -sf \/usr\/local\/node-v24.0.2\/bin\/npx \/usr\/bin\/npx<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code language-default\">\n<code>node -v && npm -v && npx -v<\/code><\/pre>\n\n\n\n\n<pre class=\"wp-block-code language-default\">\n<code>echo 'export PATH=\/usr\/local\/node-v24.0.2\/bin:$PATH' >> ~\/.bashrc<\/code><\/pre>\n\n\n\n\n<pre class=\"wp-block-code language-default\">\n<code>source ~\/.bashrc<\/code><\/pre>\n\n\n<h2 id=\"paragraph_7\">7. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Nginx<\/h2>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>apt-get install nginx && nginx -v<\/code><\/pre>\n\n\n<p> \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f nginx, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 - 'nginx version: nginx\/1.22.1'.\n<\/p>\n\n<h2 id=\"paragraph_8\">8. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 git \u0438 GitHub<\/h2>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>apt install git && apt install gh<\/code><\/pre>\n\n\n<h2 id=\"paragraph_9\">9. \u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0430 GitHub \u0447\u0435\u0440\u0435\u0437 \u0412\u041c<\/h2>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>gh auth login<\/code><\/pre>\n\n\n<p>\u0418\u0437 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 - 'GitHub.com', \u0434\u0430\u043b\u0435\u0435 - 'HTTPS', \u0434\u0430\u043b\u0435\u0435 - 'Authenticate Git with your GitHub\n    credentials?' - 'Y', \u0437\u0430\u0442\u0435\u043c 'Login with a web browser', \u043f\u043e\u0441\u043b\u0435, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 - Enter, \u0431\u0443\u0434\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430 \u0432\u0435\u0434\u0451\u0442\u0441\u044f\n    \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438.<\/p>\n\n<p>\u0414\u0430\u043b\u0435\u0435, \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u0441\u0441\u044b\u043b\u043a\u0443 \u0438 \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0435\u0451 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0436\u0435 \u0431\u044b\u043b \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d \u0432\u0445\u043e\u0434 \u0432 \u0432\u0430\u0448 \u0430\u043a\u0430\u0443\u043d\u0442 GitHub:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>https:\/\/github.com\/login\/device<\/code><\/pre>\n\n\n<p>\u041f\u043e\u0441\u043b\u0435, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0432 \u043e\u0442\u043a\u0440\u044b\u0432\u0448\u0438\u043c\u0441\u044f \u043e\u043a\u043d\u0435, \u043a\u043e\u0434 \u0438\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430, \u043a\u0430\u043a \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u2116 5.<\/p>\n\n<div class=\"blog_post_image_wrap\">\n    <div class=\"blog_post_image\">\n        <a href=\"https:\/\/shedov.top\/wp-content\/images\/authenticate_git_code_screen_5.webp\" data-lbwps-width=\"5575\"\n            data-lbwps-height=\"3717\"\n            data-lbwps-srcsmall=\"https:\/\/shedov.top\/wp-content\/images\/authenticate_git_code_screen_5.webp\"><img decoding=\"async\"\n                 src=\"https:\/\/shedov.top\/wp-content\/images\/authenticate_git_code_screen_5.webp\"\n                alt=\"authenticate git code screen\"><\/a>\n    <\/div>\n<\/div>\n<div class=\"blog_post_screenshot_number\">\n    <p>\u0421\u043a\u0440\u0438\u043d 5\n    <\/p>\n<\/div>\n\n<p>\u041d\u0430\u0436\u043c\u0438\u0442\u0435 - 'Authorize github'. \u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u043f\u0440\u043e\u0439\u0434\u0435\u0442 \u0443\u0434\u0430\u0447\u043d\u043e, \u0432 \u043a\u043e\u043d\u0446\u0435 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043a\u0430\u043a \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u2116 6.<\/p>\n\n<div class=\"blog_post_image_wrap\">\n    <div class=\"blog_post_image\">\n        <a href=\"https:\/\/shedov.top\/wp-content\/images\/authentication_git_complete_screen_6.webp\" data-lbwps-width=\"5575\"\n            data-lbwps-height=\"3717\"\n            data-lbwps-srcsmall=\"https:\/\/shedov.top\/wp-content\/images\/authentication_git_complete_screen_6.webp\"><img decoding=\"async\"\n                 src=\"https:\/\/shedov.top\/wp-content\/images\/authentication_git_complete_screen_6.webp\"\n                alt=\"authentication git complete screen\"><\/a>\n    <\/div>\n<\/div>\n<div class=\"blog_post_screenshot_number\">\n    <p>\u0421\u043a\u0440\u0438\u043d 6\n    <\/p>\n<\/div>\n\n<p>\u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 - '\u2713 Authentication complete.'.\n<\/p>\n\n<h2 id=\"paragraph_10\">10. \u041a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u0438\u0437 GitHub \u0432 \u0412\u041c<\/h2>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u0432 \u043d\u0435\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442, \u043d\u0430 \u0432\u0430\u0448 \u043b\u043e\u0433\u0438\u043d \u0432 GitHub:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>cd \/var\/www\/ && gh repo clone \u0412\u0430\u0448\u041b\u043e\u0433\u0438\u043dGitHub\/crystal<\/code><\/pre>\n\n\n<h2 id=\"paragraph_11\">11. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 'sites-available' \u0438 'sites-enabled' \u0432 Nginx<\/h2>\n\n<h3>11.1. \u0412 \u043f\u0430\u043f\u043a\u0435 'sites-available' \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 - '\/etc\/nginx\/sites-available', \u0431\u0443\u0434\u0443\u0442 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Nginx,\n    \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0445 \u0441\u0432\u043e\u0438\u043c\u0438.<\/h3>\n\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 nano. \u0412 Debian 12 \u043d\u0430 \u0412\u041c, nano \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e,\n    \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043b\u0438 \u044d\u0442\u043e\u0442 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0443 \u0432\u0430\u0441 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0432\u0432\u0435\u0434\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>nano --version<\/code><\/pre>\n\n\n<p>\u0414\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f, \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 - 'GNU nano, version 7.2',\n    \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435\u0442, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 nano \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438,\n    \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440.\n    \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u044b\u0448\u044c\u044e, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0436\u043c\u0438\u0442\u0435 - 'alt + m' (\u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0430\u044f\n    \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b).<\/p>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default line-numbers\">\n<code>rm \/etc\/nginx\/sites-available\/default && nano \/etc\/nginx\/sites-available\/crystal<\/code><\/pre>\n\n\n<p>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u043e\u0442\u043a\u0440\u044b\u0432\u0448\u0438\u0435\u0441\u044f \u043e\u043a\u043d\u043e, \u043a\u043e\u0434 \u043d\u0438\u0436\u0435. \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 4, \u043d\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 IP \u0430\u0434\u0440\u0435\u0441 \u0432\u0430\u0448\u0435\u0439 \u0412\u041c:<\/p>\n\n<pre class=\"wp-block-code language-default line-numbers\">\n<code>server {\n\tlisten 80;\n\tlisten [::]:80;\n\tserver_name '\u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0437\u0434\u0435\u0441\u044c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 IP \u0430\u0434\u0440\u0435\u0441 \u0432\u0430\u0448\u0435\u0439 \u0412\u041c, \u0431\u0435\u0437 \u0430\u043f\u043e\u0441\u0442\u0440\u043e\u0444\u043e\u0432';\n    # Limit the maximum size of files that can be uploaded via POST requests\n\tclient_max_body_size 3M;\n\tlocation \/\n\t{\n\t\troot \/var\/www\/crystal\/frontend\/dist;\n\t\ttry_files $uri $uri \/index.html;\n\t}\n\tlocation \/api\/\n\t{\n\t\tproxy_pass http:\/\/127.0.0.1:3000\/;\n\t\tproxy_hide_header X-Powered-By;\n\t\tproxy_http_version 1.1;\n\t\tproxy_set_header Upgrade $http_upgrade;\n\t\tproxy_set_header Connection 'upgrade';\n\t\tproxy_set_header Host $host;\n\t\tproxy_cache_bypass $http_upgrade;\n\t}\n}<\/code><\/pre>\n\n\n<p>\u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e - 'ctrl + x', 'y', 'Enter'.<\/p>\n\n<h3>11.2. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 (sites-enabled).<\/h3>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default line-numbers\">\n<code>rm \/etc\/nginx\/sites-enabled\/default && ln -s \/etc\/nginx\/sites-available\/crystal \/etc\/nginx\/sites-enabled\/ && systemctl restart nginx<\/code><\/pre>\n\n\n<h2 id=\"paragraph_12\">12. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 frontend \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 .env.prodIP<\/h2>\n\n<h3>12.1. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 .env.prodIP.<\/h3>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>cd \/var\/www\/crystal\/frontend && mkdir env<\/code><\/pre>\n\n\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435, \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 IP \u0430\u0434\u0440\u0435\u0441 \u0412\u041c:<\/p>\n\n<pre class=\"wp-block-code language-default line-numbers\">\n<code>echo VITE_API_BASE_URL=http:\/\/\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439IP\u0410\u0434\u0440\u0435\u0441\u0412\u041c\/api > .\/env\/.env.prodIP<\/code><\/pre>\n\n\n<h3>12.2. \u0421\u0431\u043e\u0440\u043a\u0430 frontend \u0447\u0430\u0441\u0442\u0438.<\/h3>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>npm i && npm run build:prod:ip<\/code><\/pre>\n\n\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 IP \u0430\u0434\u0440\u0435\u0441 \u0412\u041c, \u0442\u0430\u043c \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f frontend \u0447\u0430\u0441\u0442\u044c\n    \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043f\u0440\u0438\u043c\u0435\u0440 - 'http:\/\/\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439IP\u0410\u0434\u0440\u0435\u0441\u0412\u041c\/' (\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e - 'http', \u0430 \u043d\u0435 'https').<\/p>\n\n<div class=\"blog_post_image_wrap\">\n    <div class=\"blog_post_image\">\n        <a href=\"https:\/\/shedov.top\/wp-content\/images\/frontend_part_screen_7.webp\" data-lbwps-width=\"5575\"\n            data-lbwps-height=\"3717\"\n            data-lbwps-srcsmall=\"https:\/\/shedov.top\/wp-content\/images\/frontend_part_screen_7.webp\"><img decoding=\"async\" \n                src=\"https:\/\/shedov.top\/wp-content\/images\/frontend_part_screen_7.webp\" alt=\"frontend part screen\"><\/a>\n    <\/div>\n<\/div>\n<div class=\"blog_post_screenshot_number\">\n    <p>\u0421\u043a\u0440\u0438\u043d 7\n    <\/p>\n<\/div>\n\n<h2 id=\"paragraph_13\">13. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 backend \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 .env \u0438 .env.prodIP<\/h2>\n\n<h3>13.1. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 .env.<\/h3>\n<br id=\"paragraph_13.1\">\n<p>\u0414\u0430\u043b\u0435\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 - 'JWT_SECRET_KEY'.<\/p>\n<p>\u0414\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 - 'JWT_SECRET_KEY', \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0443 - 'F12' \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 Chrome (\u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u043b\u044e\u0431\u043e\u0439 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440) \u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n\n<pre class=\"wp-block-code lang-js line-numbers\">\n<code>function generateJWTSecretKey(length = 80) {\n\nconst charset = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{}|:,.&lt;&gt;?\";\n  const array = new Uint8Array(length);\n  window.crypto.getRandomValues(array);\n  return Array.from(array)\n    .map(b => charset[b % charset.length])\n    .join('');\n}\n\nconst jwtSecretKey = generateJWTSecretKey();\n\nconsole.log(`JWT_SECRET_KEY=\"${jwtSecretKey}\"`);<\/code><\/pre>\n\n<p><strong>\u042d\u043d\u0442\u0440\u043e\u043f\u0438\u044f \u043a\u043b\u044e\u0447\u0430, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0442 450 \u0434\u043e 515 \u0431\u0438\u0442.<\/strong><\/p>\n\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u0432\u043e\u0434\u0430, \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0442\u043e\u0439\u043a\u0438\u0439 - 'JWT_SECRET_KEY'.<\/p>\n\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430:<\/p>\n\n<pre class=\"wp-block-code language-default line-numbers\">\n<code>JWT_SECRET_KEY=\"IW4%ur)Zn5XWqbO[xTYwO&amp;8qi!6&lt;uoi1WZpFTSONl=!cBs5&#123;lA)fV,cgIn&#125;@EP0YSTvnOTsAeIq1A)|X\"<\/code><\/pre>\n\n\n<p>\u0414\u0430\u043b\u0435\u0435, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>cd \/var\/www\/crystal\/backend && mkdir env && nano .\/env\/.env<\/code><\/pre>\n\n<br id=\"administrator_mode\">\n<p>\u041f\u0440\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441 email, \u0442\u0430\u043a\u0438\u043c \u0436\u0435, \u043a\u0430\u043a \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 - 'CREATOR_EMAIL', \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c\n    \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 (\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\/\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043f\u043e\u0441\u0442\u043e\u0432).<\/p>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435, \u0432 \u043e\u0442\u043a\u0440\u044b\u0432\u0448\u0435\u043c\u0441\u044f \u043e\u043a\u043d\u0435, \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u0432\u0430\u0448\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n\n<pre class=\"wp-block-code language-default line-numbers\">\n<code>SERVER_PORT=3000\nMONGO_BASE_URI=mongodb:\/\/127.0.0.1:27017\nMONGO_DB_NAME=crystal\nJWT_SECRET_KEY=\"\u0421\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439_\u043a\u043b\u044e\u0447_JWT\"\nCREATOR_EMAIL=email_\u0434\u043b\u044f_\u0440\u0435\u0436\u0438\u043c\u0430_\u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430<\/code><\/pre>\n\n\n<p>\u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e - 'ctrl + x', 'y', 'Enter'.<\/p>\n\n<h3>13.2. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 .env.prodIP \u0432 backend \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/h3>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>nano .\/env\/.env.prodIP<\/code><\/pre>\n\n\n<p>\u0414\u0430\u043b\u0435\u0435, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435, \u0432 \u043e\u0442\u043a\u0440\u044b\u0432\u0448\u0435\u043c\u0441\u044f \u043e\u043a\u043d\u0435, \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 - 'CORS_ORIGIN', \u043d\u0430 \u0432\u0430\u0448 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441 \u0412\u041c:<\/p>\n\n<pre class=\"wp-block-code language-default line-numbers\">\n<code>APP_MODE=prod (ip)\nCORS_ORIGIN=http:\/\/\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439IP\u0410\u0434\u0440\u0435\u0441\u0412\u041c<\/code><\/pre>\n\n\n<p>\u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e - 'ctrl + x', 'y', 'Enter'.<\/p>\n\n<h3>13.3. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 backend \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/h3>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>npm i<\/code><\/pre>\n\n\n<h2 id=\"paragraph_14\">14. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 MongoDB (MongoDB Community Edition) \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0435\u0451 \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443<\/h2>\n\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0431\u0443\u0434\u0443\u0442 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 <a rel=\"noopener\"\n        href=\"https:\/\/www.mongodb.com\/docs\/manual\/tutorial\/install-mongodb-on-debian\/\" data-type=\"URL\" target=\"_blank\"\n>\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a> MongoDB.<\/p>\n\n<h3>14.1. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 gnupg.<\/h3>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>apt-get install gnupg<\/code><\/pre>\n\n\n<h3>14.2. \u0418\u043c\u043f\u043e\u0440\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 GPG MongoDB.<\/h3>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>curl -fsSL https:\/\/www.mongodb.org\/static\/pgp\/server-8.0.asc | \\\n    gpg -o \/usr\/share\/keyrings\/mongodb-server-8.0.gpg \\\n    --dearmor<\/code><\/pre>\n\n\n<h3>14.3. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441\u043f\u0438\u0441\u043a\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0435\u0440\u0441\u0438\u0438 Debian 12.<\/h3>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>echo \"deb [ signed-by=\/usr\/share\/keyrings\/mongodb-server-8.0.gpg ] http:\/\/repo.mongodb.org\/apt\/debian bookworm\/mongodb-org\/8.0 main\" | tee \/etc\/apt\/sources.list.d\/mongodb-org-8.0.list<\/code><\/pre>\n\n\n<h3>14.4. \u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432.<\/h3>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>apt-get update<\/code><\/pre>\n\n\n<h3>14.5. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 MongoDB.<\/h3>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>apt-get install -y mongodb-org<\/code><\/pre>\n\n\n<h3>14.6. \u042d\u0442\u043e\u0442 \u043f\u0443\u043d\u043a\u0442 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u043d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e MongoDB, \u043e\u0442 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439.<\/h3>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>echo \"mongodb-org hold\" | dpkg --set-selections\necho \"mongodb-org-database hold\" | dpkg --set-selections\necho \"mongodb-org-server hold\" | dpkg --set-selections\necho \"mongodb-mongosh hold\" | dpkg --set-selections\necho \"mongodb-org-mongos hold\" | dpkg --set-selections\necho \"mongodb-org-tools hold\" | dpkg --set-selections<\/code><\/pre>\n\n\n<h3>14.7. \u0417\u0430\u043f\u0443\u0441\u043a MongoDB Community Edition.<\/h3>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>systemctl start mongod<\/code><\/pre>\n\n\n<p>\u0423\u0431\u0435\u0434\u0438\u043c\u0441\u044f \u0432 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435, \u0432\u0432\u0435\u0434\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>systemctl status mongod<\/code><\/pre>\n\n\n<p>\u041f\u0440\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435, \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<p>Loaded: loaded (\/lib\/systemd\/system\/mongod.service; disabled; vendor preset: enabled)\n    Active: active (running) since Wed 2025-01-08 15:09:54 UTC; 13s ago<\/p>\n\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 - 'ctrl + c'.<\/p>\n\n<h3>14.8. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e MongoDB \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0412\u041c, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/h3>\n\n<pre class=\"wp-block-code language-default\">\n<code>systemctl enable mongod<\/code><\/pre>\n\n\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 MongoDB \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u043e\u0448\u0438\u0431\u043e\u043a \u0438\u043b\u0438 \u0432\u0430\u0436\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u044f \u0437\u0430 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0432 \u0444\u0430\u0439\u043b\u0435\n    - \/var\/log\/mongodb\/mongod.log.<\/p>\n\n<h3>14.9. Mongosh.<\/h3>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>mongosh<\/code><\/pre>\n\n\n<p>\u041e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, <a rel=\"noopener\"\n        href=\"https:\/\/www.mongodb.com\/docs\/mongodb-shell\/#mongodb-binary-bin.mongosh\" data-type=\"URL\" target=\"_blank\"\n>\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435<\/a> \u043e mongosh.<\/p>\n\n<p>\u0412 \u043e\u0442\u043a\u0440\u044b\u0432\u0448\u0438\u043c\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>show dbs<\/code><\/pre>\n\n\n<p>\u0412\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f: 'admin', 'config', 'local';<\/p>\n\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 - 'ctrl + c'.<\/p>\n\n<p style=\"text-align:center; margin-bottom: 4px;\"><strong>\u26a0\ufe0f \u0412\u0430\u0436\u043d\u043e: \u0437\u0430\u0449\u0438\u0442\u0430 MongoDB.<\/strong><\/p>\n<p>\u0412 production-\u0441\u0440\u0435\u0434\u0435 <strong>\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e<\/strong> \u0438 <strong>\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0441 \u043f\u0430\u0440\u043e\u043b\u0435\u043c<\/strong>, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445.<\/p>\n<p>MongoDB \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0435\u0437 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0440\u0442 - 27017, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u043a\u0440\u044b\u0442 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043c\u0438\u0440 \u0438\u0437-\u0437\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 VPC, Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, reverse proxy \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<p>\u0414\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 <a href=\"https:\/\/www.mongodb.com\/docs\" target=\"_blank\" rel=\"noopener\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 MongoDB<\/a>.<\/p>\n\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 <a rel=\"noopener\" href=\"https:\/\/github.com\/CrystalSystems\/crystal-v1.0--production\" data-type=\"URL\" target=\"_blank\">CRYSTAL v1.0 (Production)<\/a>:<\/p>\n\n<pre class=\"wp-block-code language-js line-numbers\">\n<code>const mongoUri = PRODUCTION_STATUS\n        ? `mongodb:\/\/${USER}:${PASSWORD}@${HOST}:${PORT}\/${DB_NAME}?authSource=${AUTH_SOURCE}`\n        : `${BASE_URI}\/${DB_NAME}`;<\/code><\/pre>\n\n<p><a rel=\"noopener\" href=\"https:\/\/github.com\/CrystalSystems\/crystal-v1.0--production\/blob\/main\/main\/backend\/src\/core\/engine\/db\/connectDB.js\" data-type=\"URL\" target=\"_blank\">\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434<\/a> - 'connectDB.js', \u0432 CRYSTAL v1.0 (Production).<\/p>\n\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n\n<pre class=\"wp-block-code language-js line-numbers\">\n<code>const user = encodeURIComponent(\"AndrewShedov\");\nconst password = encodeURIComponent(\"password\");\nconst mongoUri = `mongodb:\/\/${user}:${password}@127.0.0.1:27017\/crystal?authSource=admin`;\nmongoose\n  .connect(mongoUri)\n...<\/code><\/pre>\n\n\n<h2 id=\"paragraph_15\">15. \u0417\u0430\u043f\u0443\u0441\u043a backend \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u0444\u043e\u043d\u043e\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PM2<\/h2>\n\n<p>\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n\n<pre class=\"wp-block-code language-default line-numbers\">\n<code>cd \/var\/www\/crystal\/backend && npm install pm2@latest -g && npm run start:prod:ip && pm2 save && pm2 startup && pm2 status<\/code><\/pre>\n\n\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 PM2 - 'npm install pm2@latest -g'.<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u0444\u0430\u0439\u043b\u0430 - '.\/src\/core\/main.js': 'npm run start:prod:ip'.<\/p>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 PM2 - 'pm2 save'.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 PM2, \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0412\u041c - 'pm2 startup'.<\/p>\n<p>\u0421\u0442\u0430\u0442\u0443\u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 PM2 - 'pm2 status'.<\/p>\n\n<p>\u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0439\u0434\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c - 'prodIP', \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 - 'online'.<\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u043f\u0440\u0438\u043c\u0435\u0440 - 'http:\/\/\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439IP\u0410\u0434\u0440\u0435\u0441\u0412\u041c\/' (\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e - 'http', \u0430 \u043d\u0435 \"https'). \u041f\u0440\u043e\u0439\u0434\u0438\u0442\u0435\n    \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043f\u043e\u0441\u0442.<\/p>\n\n<p><strong>\u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439, \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f GitHub CLI \u0432 Win 11, \u043d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\n    \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b\n    (HTTPS, SSH). <a rel=\"noopener\" href=\"https:\/\/docs.github.com\/en\/github-cli\/github-cli\/quickstart\"\n        data-type=\"URL\" target=\"_blank\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e GitHub CLI<\/a>, <a\n        rel=\"noopener\" href=\"https:\/\/cli.github.com\/\" data-type=\"URL\" target=\"_blank\"\n>\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a<\/a>.<\/strong><\/p>\n\n<h2 id=\"paragraph_16\">16. \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 \u0412\u041c, \u043f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u041f\u041a\n<\/h2>\n\n<p>\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043b\u044e\u0431\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u041f\u041a, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0435\u0442 \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0437 \u0432\u0430\u0448\u0435\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f -\n    'crystal'.\n<\/p>\n\n<p>\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043d\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0438\u0436\u0435:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>cd C:\\\u0418\u043c\u044f\u041f\u0430\u043f\u043a\u0438<\/code><\/pre>\n\n<p>\u041f\u0440\u0438\u043c\u0435\u0440: cd C:\\GIT<\/p>\n\n<p>\u0414\u0430\u043b\u0435\u0435, \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 GitHub CLI:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>gh repo clone \u0412\u0430\u0448\u0435\u0418\u043c\u044f\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u041d\u0430GitHub\/crystal<\/code><\/pre>\n\n\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u043f\u0430\u043f\u043a\u0443 c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>cd C:\\GIT\\crystal<\/code><\/pre>\n\n\n<p>\u0421\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u043b\u044e\u0431\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0444\u0430\u0439\u043b\u0435 - 'crystal\\frontend\\src\\app\\App.module.css'<\/p>\n\n<p>\u041f\u043e\u0441\u043b\u0435, \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0439\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 - 'crystal', \u043d\u0430 GitHub, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n\n<pre class=\"wp-block-code language-default\">\n<code>git add -A & git commit -m \"commit\" & git push -u origin main<\/code><\/pre>\n\n\n<p>\u0414\u0430\u043b\u0435\u0435, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043e\u043a\u043d\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0441 \u0412\u041c, \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0441\u043e\u0431\u0435\u0440\u0438\u0442\u0435 \u0435\u0433\u043e, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n\n<pre class=\"wp-block-code language-default line-numbers\">\n<code>cd \/var\/www\/crystal && git pull && cd \/var\/www\/crystal\/frontend && npm run build:prod:ip<\/code><\/pre>\n\n\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435, \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440.<\/p>\n\n<p><strong>\u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442, \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044f \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438:<\/strong><\/p>\n<div class=\"documentation_crystal_entry\">\n    <ul>\n        <li>1. <a href=\"https:\/\/shedov.top\/ru\/podklyuchenie-domena-k-proektu-crystal-v1-0\" rel=\"noopener\"\n                target=\"_blank\">\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043c\u0435\u043d\u0430<\/a><\/li>\n        <li>2. <a\n                href=\"https:\/\/shedov.top\/ru\/ustanovka-besplatnogo-ssl-sertifikata-lets-encrypt-s-avtomaticheskim-prodleniem-dlya-domena-na-proekte-crystal-v1-0\/\"\n                rel=\"noopener\" target=\"_blank\"\n>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e SSL-\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 Let's Encrypt \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u043e\u0434\u043b\u0435\u043d\u0438\u0435\u043c<\/a><\/li>\n<li>3. <a\n                href=\"https:\/\/shedov.top\/ru\/vklyuchenie-podderzhki-protokola-http-2-v-nginx-na-proekte-crystal-v1-0\/\"\n                rel=\"noopener\" target=\"_blank\"\n>\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 HTTP\/2 \u0432 Nginx<\/a><\/li>\n        <li>4. <a href=\"https:\/\/shedov.top\/ru\/nastrojka-servera-nginx-s-uchetom-bezopasnosti-na-proekte-crystal-v1-0\/\"\n                target=\"_blank\" rel=\"noopener\"\n>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Nginx \u0441\n                \u0443\u0447\u0435\u0442\u043e\u043c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438<\/a><\/li>\n        <li>5. <a href=\"https:\/\/shedov.top\/ru\/ustanovka-recaptcha-v3-na-proekte-crystal-v1-0\/\" target=\"_blank\"\n                rel=\"noopener\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 reCAPTCHA\n                v3<\/a><\/li>\n    <\/ul>\n<\/div>\n\n<div class=\"browserstack_testing__announcement___wrap\">\n         <div class=\"browserstack_testing__announcement\">\n            <div class=\"browserstack_testing__announcement___top\">\n               <p>CRYSTAL \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 <\/p>\n            <\/div>\n            <div class=\"browserstack_testing__announcement___bottom\">\n               <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" viewBox=\"0 -1.5 31 33\">\n               <g fill=\"none\" fill-rule=\"evenodd\"> <\/g>\n               <g>\n                  <path d=\"m31.0344828 15.5172414c0 8.5701882-6.9470532 15.5172414-15.5172414 15.5172414-8.56989423 0-15.5172414-6.9470532-15.5172414-15.5172414 0-8.56989423 6.94734717-15.5172414 15.5172414-15.5172414 8.5701882 0 15.5172414 6.94734717 15.5172414 15.5172414\" fill=\"#ecb360\"><\/path>\n                  <path d=\"m26.8965517 13.9655172c0 7.7128847-6.0213369 13.9655173-13.4482758 13.9655173-7.42722227 0-13.4482759-6.2526326-13.4482759-13.9655173 0-7.71288459 6.02105363-13.9655172 13.4482759-13.9655172 7.4269389 0 13.4482758 6.25263261 13.4482758 13.9655172\" fill=\"#d76835\"><\/path>\n                  <path d=\"m27.9310345 12.4136422c0 6.8560652-5.3263006 12.413944-11.8969855 12.413944-6.5698174 0-11.89611797-5.5578788-11.89611797-12.413944 0-6.85576335 5.32630057-12.4136422 11.89611797-12.4136422 6.5706849 0 11.8969855 5.55787885 11.8969855 12.4136422\" fill=\"#d33a41\"><\/path>\n                  <path d=\"m26.8965517 13.4484262c0 6.2843054-4.8632703 11.37916-10.8622124 11.37916-5.9989422 0-10.86192551-5.0948546-10.86192551-11.37916 0-6.28490677 4.86298331-11.37946068 10.86192551-11.37946068 5.9989421 0 10.8622124 5.09455391 10.8622124 11.37946068\" fill=\"#b6cb46\"><\/path>\n                  <path d=\"m25.862069 14.4826111c0 5.7133106-4.6316645 10.3449751-10.3449751 10.3449751-5.71301565 0-10.34468011-4.6316645-10.34468011-10.3449751 0-5.71331065 4.63166446-10.34468007 10.34468011-10.34468007 5.7133106 0 10.3449751 4.63136942 10.3449751 10.34468007\" fill=\"#66ad4a\"><\/path>\n                  <path d=\"m21.7241379 12.4137931c0 4.5706247-3.7052373 8.2758621-8.275862 8.2758621-4.57090515 0-8.27586211-3.7052374-8.27586211-8.2758621 0-4.57062469 3.70495696-8.27586207 8.27586211-8.27586207 4.5706247 0 8.275862 3.70523738 8.275862 8.27586207\" fill=\"#aed7dc\"><\/path>\n                  <path d=\"m22.7586207 11.3793103c0 3.9991764-3.2419755 7.2413794-7.2415259 7.2413794-3.9995505 0-7.24123273-3.242203-7.24123273-7.2413794 0-3.99946945 3.24168223-7.24137927 7.24123273-7.24137927 3.9995504 0 7.2415259 3.24190982 7.2415259 7.24137927\" fill=\"#5bb1cf\"><\/path>\n                  <path d=\"m22.7586207 11.8963967c0 3.7136422-2.7788402 6.724293-6.2068966 6.724293s-6.2068965-3.0106508-6.2068965-6.724293c0-3.71333217 2.7788401-6.72398291 6.2068965-6.72398291s6.2068966 3.01065074 6.2068966 6.72398291\" fill=\"#25a8c3\"><\/path>\n                  <path d=\"m20.6896552 12.9308813c0 3.1423524-2.315869 5.6898084-5.1725531 5.6898084-2.8564055 0-5.1722745-2.547456-5.1722745-5.6898084 0-3.14235241 2.315869-5.68950199 5.1722745-5.68950199 2.8566841 0 5.1725531 2.54714958 5.1725531 5.68950199\"><\/path>\n                  <path d=\"m15.5171021 18.6206897c-2.8564055 0-5.1722745-2.547456-5.1722745-5.6898084 0-3.14235241 2.315869-5.68950199 5.1722745-5.68950199 2.8566841 0 5.1725531 2.54714958 5.1725531 5.68950199 0 3.1423524-2.315869 5.6898084-5.1725531 5.6898084z\" fill=\"#1b1a18\"><\/path>\n                  <path d=\"m18.3395432 11.2904163c-.4920811.8231975-1.4595626 1.299291-2.16129 1.062668-.7017274-.2363383-.8715674-1.0956984-.3798654-1.9191807.4920811-.82348231 1.4595626-1.29929107 2.16129-1.06295279s.8715674 1.09569839.3798654 1.91946549\" fill=\"#fffffe\"><\/path>\n               <\/g>\n               <\/svg>\n               <p>BrowserStack<\/p>\n            <\/div>\n            <a href=\"https:\/\/www.browserstack.com\/\" target=\"blank\" rel=\"noopener\" aria-label=\"\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 browserstack\">\n            <\/a>\n         <\/div>\n      <\/div>","protected":false},"excerpt":{"rendered":"\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435: 0. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0412\u041c \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u041f\u041a 1. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c CRYSTAL v1.0 2. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 SSH 3. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0432 VPC 4. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0412\u041c 5. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0412\u041c, \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0432 Win 11 6. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Node.js, npm \u0438 npx 7. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Nginx 8. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 git \u0438 GitHub 9. \u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0430 [&hellip;]","protected":false},"author":1,"featured_media":2662,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20,43,29,64,23,4,28,26,24,27,25,60,30,16,21,22,38,59,31],"tags":[],"class_list":["post-1166","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-crystal","category-crystal-v1-0","category-debian","category-debian-12","category-express-js","category-js","category-linux","category-mern","category-mongodb","category-nginx","category-node-js","category-nosql","category-pm2","category-react","category-redux","category-tanstack-query","category-vpc","category-bazy-dannyh","category-dokumentaciya-crystal"],"_links":{"self":[{"href":"https:\/\/shedov.top\/ru\/wp-json\/wp\/v2\/posts\/1166","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shedov.top\/ru\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shedov.top\/ru\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shedov.top\/ru\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/shedov.top\/ru\/wp-json\/wp\/v2\/comments?post=1166"}],"version-history":[{"count":342,"href":"https:\/\/shedov.top\/ru\/wp-json\/wp\/v2\/posts\/1166\/revisions"}],"predecessor-version":[{"id":4466,"href":"https:\/\/shedov.top\/ru\/wp-json\/wp\/v2\/posts\/1166\/revisions\/4466"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shedov.top\/ru\/wp-json\/wp\/v2\/media\/2662"}],"wp:attachment":[{"href":"https:\/\/shedov.top\/ru\/wp-json\/wp\/v2\/media?parent=1166"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shedov.top\/ru\/wp-json\/wp\/v2\/categories?post=1166"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shedov.top\/ru\/wp-json\/wp\/v2\/tags?post=1166"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}