Tabla de contenido
Cómo ejecutar proyectos en CentOS
Cómo ejecutar un proyecto en Docker
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.
- 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.
- 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. nohup
El 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.log
archivo.
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 ps
el comando
ps aux | grep 你的项目名称
Si desea detener su programa, puede usar kill
el 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.