Узнайте, как развернуть код с нуля

сервер Docker Nginx SSH

Я видел статью Чжан Юньлуна некоторое время назад.Путь роста программиста - препарировать других, подводить итоги самому себе, там есть такое предложение

Технология вне стека относится к восходящему и нисходящему потоку внутристековой технологии, а также к соответствующим профессиональным знаниям за пределами области, включая, помимо прочего, серверные технологии, эксплуатацию и обслуживание, CDN, тестирование и даже дизайн пользовательского интерфейса, дизайн продукта. и т. д., чтобы расширить свои встроенные технологии. В смежных областях полностью поймите, какое звено ваша работа имеет во всей системе технологических исследований и разработок. Вкладывайте больше энергии в свое свободное время, постоянно внедряйте другие технологии вне стека в свою систему знаний и наращивайте возможности вне стека. Углубленные работы над внешним интерфейсом часто включают такие знания, как кэширование, рендеринг шаблонов и взаимодействие с пользователем. Без значительного накопления внестековых технологий вам трудно получить достаточно голоса для своей команды.

Подумайте о том, когда я был в компании, я в основном писал бизнес и выполнял работу, связанную с интерфейсом, но я мало занимался другими аспектами или вообще не занимался ими. Когда я думаю о предыдущем собеседовании, интервьюер также задает несколько нестандартных вопросов, например о том, как выпускается и развертывается код вашей компании. Это заставляет меня хотеть знать, как развернуть код, следующий процесс бросания, запишите его.

Облачный сервер

Для покупки облачных серверов можно выбрать Alibaba Cloud и Tencent Cloud.Я не сравнивал цены этих двух раньше внимательно.Я думал, что это только для игры и как ее развернуть, поэтому я не обращал особого внимания на эти. В конце концов, это не долгосрочная покупка. , не потратив несколько долларов, я выбрал Tencent Cloud. Что касается конфигурации сервера, который нужно выбрать, это зависит от человека. После покупки надо сделать какую-то сертификацию и т.д., нужно подождать день-два. Кстати, я тоже купил доменное имя, но обнаружил, что процедура подачи очень хлопотная, я думал, что смогу получить к нему доступ и по ip-адресу, поэтому меня это не волновало.

вход по ssh

Если у вас есть сервер, вам необходимо войти в систему. Как войти? Вот простой способ.

Сгенерировать открытый ключ ssh локально

Во-первых, вам нужно подтвердить, что у вас уже есть ключ. По умолчанию SSH-ключи пользователя хранятся в каталоге ~/.ssh. Войдя в этот каталог и перечислив его содержимое, вы можете быстро подтвердить, что у вас уже есть ключ:

# 本地
$ cd ~/.ssh
$ ls
config      id_rsa      id_rsa.pub  known_hosts

Нам нужно найти пару файлов с именами id_dsa или id_rsa, один с расширением .pub. Файл .pub — это ваш открытый ключ, а другой — ваш закрытый ключ. Если вы не можете найти такие файлы или каталог .ssh вообще отсутствует, вы можете создать их, запустив программу ssh-keygen.

# 本地
$ ssh-keygen
Generating public/private rsa key pair.
# 输入 enter 键
Enter file in which to save the key (/Users/laohan/.ssh/id_rsa):
Created directory '/Users/laohan/.ssh'.
# 两次输入密码
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/laohan/.ssh/id_rsa.
Your public key has been saved in /Users/laohan/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:XhI9aeGsVJklGyUTvNu+6ABzOZdZL2+y5aMOVQa+ZvI laohan@bogon
The key's randomart image is:
+---[RSA 2048]----+
|         .O*+    |
|         =+X .   |
|        o O.o o  |
|       . =.= =   |
|      o S *o* .  |
|       = =.*.o   |
|        o ..E +  |
|         . o.*.  |
|         .o.=o.. |
+----[SHA256]-----+

Сначала ssh-keygen подтвердит место хранения ключа (по умолчанию .ssh/id_rsa), затем попросит дважды повторить пароль, если вы не хотите вводить пароль при использовании открытого ключа, вы можете оставьте это поле пустым.

Открытый ключ выглядит так:

$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDc4xbJxlMTgiE13I1RL6IsG44+3CQc8Ft03eZnYfNrPVeQIf9r9kTuArSiUnY+BHXn3mrQ5i+5AGi+alys94Pum2dZ68QtlY1QdEl4iN3LFXUkbJc+M0rllaDGH5JNtfk5imVqDo8Tn7aJsFd4IXbwrl3Euf+ccOb+s92RHwzbSRx37tP9pLF9ujfL0UXfg3+DmRJMJT7iN3OiJxfuF5k8KSySEz+YbhQoNeySuvVPeRHG/U6xOGcpzNjQIPApGsuFdLT5R/5x15W7SrC//XWuIQMmlVTW2X0YH+5NjT0nlLVWxS4drtRCS66JXtRceVqs5H5InbsLfALfTPyIkZ4t laohan@bogon

Для получения подробной информации см. здесьGenerating a new SSH key and adding it to the ssh-agent

Конфигурация облачного сервера

$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

Затем добавьте открытый ключ SSH разработчика в файл author_keys этого пользователя.

$ vim .ssh/authorized_keys
# 把之前生成是 SSH 公钥添加到文件尾部

локальная конфигурация конфигурации

Теперь вы можете войти на облачный сервер через ssh без пароля

ssh root@IP
# IP 为 云服务器的 IP 地址

Выше это не очень удобно. Но таким образом, вам все еще нужно знать IP-адрес облака серверов, и что нет больше способа сэкономить время?

Да, добавьте следующий код в файл конфигурации в ~/.ssh

Host hostname # hostname 为你想要设置的别名
HostName IP # IP 为云服务器的 IP 地址
User root
IdentitiesOnly yes

После этого вы можете войти на облачный сервер следующим образом

ssh hostname # hostname 为你刚才设置的名称

код

Лично для меня облачный сервер — это просто машина.Как запустить свой код на своем компьютере, и как запустить его на облачном сервере, но рабочая среда отличается, вам нужно выполнить некоторую настройку.

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

Способ, который я использую, относительно прост: напрямую отправить мой локальный код на github, а затем использовать git clone на сервере для локальной загрузки кода. гитхаб-адресkoa-demo. Или вы можете упаковать код локально и использовать scp для его удаленного копирования.

Настройки облачного сервера nginx

Nginx — это то, с чем часто имеют дело студенты, занимающиеся эксплуатацией и обслуживанием. Возможно, вы слышали такие термины, как обратный прокси-сервер, балансировка нагрузки и т. д., которые связаны с nginx.

установить нгинкс

Мой сервер - это система Centos, поэтому метод установки выглядит следующим образом.

yum install -y nginx

Что касается способа установки других систем, найдите сами.

конфигурация конф

Для nginx основным файлом конфигурации является nginx.cof, который находится по пути /etc/nginx и изменяется ниже.

cd /etc/nginx
vi nginx.conf

Измененное содержимое выглядит следующим образом

nginx conf
Примечание. Убедитесь, что 1 часть, обведенная красным, не прокомментирована, а 2 обведенная часть снабжена комментариями.

Цель этого состоит в том, что если позже потребуется добавить несколько серверов, все они будут изменены в файле nginx.conf, который непросто поддерживать. Затем добавьте файлы, связанные с nginx, которые нам нужны на этот раз.

cd /etc/nginx/conf.d
touch koa-demo.conf
vi koa-demo.conf

Затем скопируйте следующий контент в koa-demo.con и сохраните его.

upstream koa-demo {
  server 127.0.0.1:3000;
}

server {
  listen 80;
  location / {
    proxy_pass http://koa-demo;
  }
}

После этого используйте следующую команду

nginx -t
# 用来测试你的配置文件是否 ok

nginx -s reload
# 重新加载配置文件

Если это не случайно, введите IP-адрес вашего облачного сервера в браузере в это время, и вы увидите эффект. Подождите, вы сказали, что ваш браузер не отвечает. Не паникуйте, это потому, что ваш код еще не работает

# 我的代码克隆在这里,你的路径可能跟我的不同
cd /opt/koa-demo
npm start

В это время снова обновите страницу, все готово.

Затем вы, возможно, захотите отпраздновать это с куриной ножкой, а затем выйти из облачного сервера и сбежать на ужин. После того, как я вернулся с трапезы, я снова обновил браузер, зашел, но контента не было. Почему это так?

Это потому, что вы неправильно его открываете, то есть неправильно запускаете код.Вы можете посмотреть содержимое packagek.json.npm start на самом деле выполняет node index.js. Когда вы выйдете отсюда, процесс завершится.Подумайте, происходит ли то же самое в вашем регионе.Вы работаете на своем терминале, и нет проблем с открытием браузера.Если вы выйдете из терминала и обновите страницу, там будет проблема..

Как решить эту проблему? Ну, если вы раньше работали с узлом, вы, вероятно, слышали термин pm2. Да, верно, далее мы будем использовать этот pm2 для решения нашей задачи.

pm2 запустить программу

Как узнать pm2, самый быстрый способ это увидетьОфициальный сайтНемного, документы внутри все еще очень хорошо написаны,Quick StartНачните прямо сейчас.

Здесь не так много введения, и вы быстрее поймете это, прочитав документацию. Затем, как запустить его дальше, вы можете видеть, что в сценарии в package.json есть еще одна команда, которая является pm2.Это команда, которую я добавил ранее и использую pm2 для запуска программы. детали следующим образом:

# 先登录到云服务器
ssh hostname
# 进入代码目录
cd /opt/koa-demo
# run
npm run pm2

В это время, даже если вы выйдете из системы и снова обновите страницу, проблем не будет.

Развертывание докера

Докер, вы должны были слышать этот термин, если вы его не слышали, значит, вы немного отстали от времени. Если вы не знаете докер, вы можете обратиться к г-ну Руан Ифэну.Начало работы с Докером.

Далее давайте попробуем развернуть наше приложение nodejs с помощью docker.

Во-первых, нам нужно добавить Dockerfile и .dockerignore в нашу koa-demo. Я добавил его в код, вы можете просто скопировать его в свой проект. Что означают эти команды, я не буду много объяснять. Прочитав статью г-на Жуана, вы немного поняли. Или вы можете использовать docker COMMAND -h, чтобы использовать отдельные команды.

Докер установки облачного хоста

Во-первых, нам нужно установить докер на облачный хост, вы можете обратиться к официальному сайту докера.About Docker CE, Для каждой системы есть подробная инструкция по установке.

Скомпилируйте образ

Перейдите в наш каталог кода, используйте команду сборки docker, чтобы скомпилировать нужные нам файлы изображений, а затем используйте команду docker run для запуска контейнера.

cd /opt/koa-demo
docker build -t koa-demo .
docker run -d -p 7000:3000 koa-demo

Здесь я использую локальный порт 7000 для сопоставления порта 3000 контейнера.

В настоящее время вы можете использовать следующую команду, чтобы проверить, правильно ли она работает.

curl -i localhost:7000

# 应该会返回如下结果
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 30
Date: Mon, 02 Jul 2018 12:12:26 GMT
Connection: keep-alive

It's success, congratulation!

Теперь, когда наш контейнер запущен и работает, вы можете попробовать ввести форму ip:port непосредственно в браузере, чтобы увидеть, можно ли получить к нему доступ.После того, как вы введете его, вы обнаружите, что ответа нет.

Не волнуйтесь, мы еще не добавили конфигурацию nginx.

cd /etc/nginx/conf.d
vi docker-demo.conf

# 写入以下内容
upstream docker-demo {
  server 127.0.0.1:7000;
}

server {
  listen 7000;
  location / {
          proxy_pass http://docker-demo;
  }
}

Не забудьте использовать nginx -t, чтобы проверить, в порядке ли ваша конфигурация, а затем nginx -s reload, чтобы перезагрузить ее.

В настоящее время вы можете получить к нему доступ в форме IP:Port (порт здесь — это порт прослушивания выше).

Если вы все еще не можете получить к нему доступ в это время, это может быть проблема с настройками вашей группы безопасности, просто настройте ее.

Суммировать

Вышеупомянутый горький путь развертывания маленького белого.Путешествие трудное, но я многому научился и многому научился.

Адрес для обсуждения

Добро пожаловать для совместного обсуждения, адрес githubНаучитесь развертывать с нуля

использованная литература

Кому не нужно знать -NGINX обратный прокси-сервер прокси и балансировку нагрузки Dockerizing a Node.js web app Get Docker CE for CentOS Докер — от начала до практики