Evaluación de instancia de Huawei Cloud Yaoyun Server L | Implementación de proyectos .net/c# utilizando el sistema Linux y Docker

Tabla de contenido

Prefacio

Cómo ejecutar proyectos en CentOS

Inicie sesión en CentOS

Empacar con jinete

Empaquetado con Visual Studio

Operación del proyecto

Proceso en segundo plano

puerto abierto 

Cómo ejecutar un proyecto en Docker

Operación del proyecto


Prefacio

Este capítulo presenta en detalle el proceso y algunos detalles del proyecto .net Core desde el empaquetado hasta la implementación en la instancia Huawei Cloud Yaoyun Server L. Aquí tomamos CentOS como imagen del sistema y Docker visual Portainer como imagen de la aplicación como ejemplos para describir el proceso de implementación de cero a uno.

Cómo ejecutar proyectos en CentOS

Inicie sesión en CentOS

Selección del servidor, tome la instancia Huawei Cloud Yaoyun Server L como ejemplo, seleccione su región y luego seleccione la imagen del sistema, CentOS

Una vez completada la compra del servidor, el primer paso es ir a la consola, buscar el servidor que acaba de comprar y restablecer la contraseña. Asegúrese de marcar "Reinicio automático" para que la contraseña modificada entre en vigor de inmediato.

Luego busque la IP pública elástica en la consola, inicie sesión en su servidor con la contraseña que acaba de cambiar.

Empacar con jinete

Si el IDE que está utilizando es Rider, haga clic en el ícono del pequeño cohete en la esquina superior derecha y luego haga clic en Editar configuración en el cuadro desplegable.

En la ventana emergente, haga clic en el signo + en la esquina superior izquierda y seleccione Publicar en carpeta.

 Luego configure parte de nuestra información de embalaje.

TargerLocation : la dirección de almacenamiento del archivo empaquetado, el valor predeterminado es suficiente

Marco de destino : el número de versión de net. Será la misma que la versión que se ejecuta en el proyecto actual de forma predeterminada.

Modo de implementación : hay dos modos de lanzamiento en el cuadro desplegable de esta opción, uno es autónomo y el otro depende del marco.

  1. Autónoma: en este modo, la aplicación publicada contiene todo lo necesario para ejecutarse, incluido el tiempo de ejecución de .NET Core y las bibliotecas de .NET Core. Esto significa que la aplicación se puede ejecutar en máquinas que no tienen el entorno de ejecución .NET Core.
  2. Dependiente del marco: en este modo, la aplicación publicada no contiene el tiempo de ejecución ni las bibliotecas de .NET Core. Depende del entorno de ejecución de .NET Core en la máquina de destino.

En términos simples, uno se puede lanzar y ejecutar, y el otro necesita configurar el entorno primero. Por conveniencia, elegí Autocontenido aquí. Generalmente, el paquete de proyectos pequeños no es mucho más grande. Si hay muchos proyectos, considere usar Framework-Dependent.

Tiempo de ejecución objetivo : El sistema en ejecución. No hay duda de que aquí se selecciona Linux-x64.

Una vez completada la configuración, haga clic en Guardar

Haga clic en Ejecutar y luego vaya a la ruta TargerLocation que acabamos de configurar para encontrar el archivo empaquetado. Si no se ha modificado, generalmente el valor predeterminado es la Versión en el contenedor debajo del proyecto.

Empaquetado con Visual Studio

Debido a que mucha gente usa Visual Studio, aquí también hay una demostración de cómo empaquetar usando Visual Studio.

Haga clic derecho en el proyecto en el Explorador de soluciones y seleccione Publicar.

Haga clic en Publicar en la ventana derecha, haga clic en Publicar perfil, seleccione la carpeta y luego Siguiente

 Luego elija publicar el archivo (el valor predeterminado es suficiente) y haga clic en Finalizar.

Luego haga clic en Mostrar todas las configuraciones. En la ventana emergente, seleccione Liberar para la configuración. El modo de implementación es Autocontenido (autónomo) en el modo DeployMent  cuando lo empaquetamos en RD . Seleccione nuestro sistema de servidor Linux-x64 como destino. operación. . Clic en Guardar

Haga clic en el botón Publicar en la ventana y luego vaya a la ruta de empaquetado que acaba de configurar para ver los archivos empaquetados. 

Operación del proyecto

COPIAR el archivo de ejecución que acabamos de empaquetar a través de Rider o Visual Studio al servidor

 Debido a que seleccionamos "independiente" al empaquetar, no necesitamos instalar .net

cd a la ruta del proyecto copiado en el servidor y luego inicie el proyecto directamente mediante el comando ./yourapp, "yourapp" es el nombre real de su aplicación.

Luego descubrí que se puede informar un error.

-bash: ./WebApi: Permiso denegado

Este es el archivo de la aplicación que tiene permiso de ejecución. Puede usar el comando chmod para agregar permisos de ejecución

chmod +x tu aplicación

Luego, después de ejecutar el comando hace un momento, es posible que se informen muchos mensajes de error.

Instale libicu usando su administrador de paquetes e inténtelo nuevamente. Alternativamente, puede establecer el indicador de configuración System.Globalization.Invariant en verdadero si desea ejecutar sin soporte de globalización.

Que no cunda el pánico, este error se debe a que el tiempo de ejecución de .NET Core requiere que la biblioteca ICU maneje las cadenas de globalización y localización. En algunas distribuciones de Linux, es posible que esta biblioteca no esté preinstalada.

Puede resolver este problema instalando la biblioteca libicu. En Ubuntu o Debian , puedes instalarlo usando el siguiente comando:

sudo apt-get install libicu-dev

En CentOS o Fedora , puedes instalarlo usando el siguiente comando:

sudo yum install libicu

Si su aplicación no requiere soporte de globalización y localización , puede deshabilitar la funcionalidad ICU configurando una variable de entorno:

export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1

Luego ejecute su aplicación. Ahora puedes ejecutarlo exitosamente.

Proceso en segundo plano

Podemos usar el comando nohup para ejecutar el proyecto en segundo plano. nohupEl comando puede continuar ejecutando su proceso después de salir del shell.

Ctrl + C finaliza la tarea en ejecución en este momento y luego usa el siguiente comando para ejecutarla, de modo que todos los resultados (incluidos stdout y stderr) se redirigen al output.logarchivo.

nohup ./nombre de su proyecto> salida.log 2>&1 &

 En términos generales, si la ruta de salida.log no se especifica específicamente, se generará en la ruta de ejecución del proyecto actual. Si surge algún problema en nuestro proyecto más adelante, podemos buscar el registro y echarle un vistazo.

Si desea verificar si su programa se está ejecutando, puede usar psel comando

ps aux | grep 你的项目名称

Si desea detener su programa, puede usar killel comando

kill $(你的项目名称)

puerto abierto 

Busque el grupo de seguridad en la consola y haga clic en Configurar reglas

Agregue una regla de dirección entrante y establezca la prioridad en 1. El puerto de mi proyecto es 5000, así que configúrelo en 5000. Otros pueden ser predeterminados.

Probemos que podemos enviar solicitudes correctamente al programa en el servidor.

Vaya a la consola para verificar el monitoreo del servidor. El servidor se compró ayer, lo que significa que la CPU del proyecto recién implementado solo ha usado hasta el 2%, lo cual es un desperdicio. Así que escribiré algunos bucles infinitos para usar el UPC.

Cómo ejecutar un proyecto en Docker

Porque también compré un soporte visual Docker para la instancia Yunyao Cloud Server L, que ya instaló el entorno requerido por Docker. Usamos este servidor para probar el uso de Docker para ejecutar el proyecto. Si hay otros sistemas instalados, primero debe hacerlo. usted mismo. Vaya e instale Docker

 Si necesita realizar una implementación rápida, puede publicar directamente el proyecto en Docker Hub cuando se lance Visual Studio. Podemos simplemente extraer la imagen directamente en el servidor. Sin embargo, la forma en que implemento en este capítulo no es extrayendo la imagen del hub, pero llevándolos a todos conmigo. Escribiendo docker-compose y dockerfile juntos

En lo anterior sobre cómo ejecutar el proyecto en CentOS, empaquetamos el proyecto y ahora seguimos los pasos anteriores para volver a empaquetar un  dependiente del marco (dependencia del marco): la aplicación publicada no contiene el tiempo de ejecución ni las bibliotecas de .NET Core  . Siento que es problemático y no quiero moverme. No importa. El proyecto que acaba de empaquetar también se puede usar, pero hará que lo siguiente que tengamos que hacer sea innecesario.

Cree dos archivos, docker-compose y dockerfile, en la ruta del mismo nivel de publicación empaquetada.

A continuación, escribamos estos dos archivos juntos.

Primero abra el Dockerfile, el primer paso es crear la imagen, que es el entorno para ejecutar el proyecto, luego copie el proyecto en él, cambie el puerto en el código siguiente al de su proyecto y luego escriba el comando de ejecución. y ya está.

#基于 `microsoft/dotnet:6.0-core` 来构建我们的镜像
FROM mcr.microsoft.com/dotnet/aspnet:6.0


#设置工作目录为 `/publish` 文件夹,即容器启动默认的文件夹
WORKDIR /publish
#拷贝项目publish文件夹中的所有文件到 docker容器中的publish文件夹中 
COPY /publish /publish

# 监听5157
ENV ASPNETCORE_URLS=http://+:5157

#设置Docker容器对外暴露8003端口
EXPOSE 5157

#使用`dotnet WebApi.dll`来运行应用程序

CMD ["dotnet", "WebApi.dll", "--server.urls", "http://*:5157"]

Luego abre Docker-Compose

version: '3'
services:
  webapi:
    image: webapi
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 5157:5157

En este archivo, la versión es el número de versión de este proyecto. Para la imagen, primero vaya al centro para buscar la imagen y extráigala si la encuentra. Si no puede encontrarla, ejecute el Dockerfile que acabamos de crear y luego cambie los puertos al número de versión correspondiente en su proyecto.

Un detalle al que prestar atención es que si usas una base de datos en el proyecto como yo y también quieres instalar la base de datos en Docker, como en el siguiente código, saqué un mysql5.7.18 y configuré el nombre de la imagen en mysql. Luego, Lo instalé en el proyecto En la cadena de conexión SQL, no puede usar 127.0.0.1 o localhost, en su lugar, use el conjunto de MySQL a continuación.

version: '3'
services:
  mysql:
    restart: always
    image: mysql:5.7.18
    container_name: mysql-lable
    volumes:
      - /apps/mysql/mydir:/mydir
      - /apps/mysql/datadir:/var/lib/mysql
      - /apps/mysql/conf/my.cnf:/etc/my.cnf
      - /apps/mysql/source:/docker-entrypoint-initdb.d
    environment:
      - "MYSQL_ROOT_PASSWORD=password"
      - "MYSQL_DATABASE=lbhdatabase"
      - "TZ=Asia/Shanghai"
    ports:
      - 3306:3306
  webapi:
    image: webapi
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 5157:5157
    depends_on:
      - mysql

Operación del proyecto

Una vez preparados estos dos archivos, publíquelos directamente en nuestro servidor y cambie el nombre.

Luego ejecute docker-compose up en esta ruta

 Después de ejecutarlo, abra el puerto de su propio proyecto como el puerto abierto de arriba. No repetiré las capturas de pantalla aquí.

Pruébalo, vale

Información del servidor. Si desea ejecutarlo en segundo plano, agregue -d después del comando de ahora.

docker-componer -d

En este momento, mi servidor Docker ya ejecutó una webapi de reconocimiento de IA que se ejecutó durante la prueba de ayer, un proyecto central .net y MySQL. Si analizamos nuevamente el seguimiento, podemos ver que todavía no hay presión.

Supongo que te gusta

Origin blog.csdn.net/weixin_65243968/article/details/132679620
Recomendado
Clasificación