script - Cómo ejecutar un sitio.NET Core MVC en una instancia de AWS Linux
user data aws (4)
La respuesta de @ user326608 casi lo consigue, pero voy a agregar los pasos que estoy usando ahora después del lanzamiento de .NET Core 1.0.0.
- Cree una plantilla de aplicación web principal de ASP.NET (.NET Core) - C # - Proyecto de aplicación web MVC en Visual Studio 2015. Compile y ejecute la aplicación en IIS Express. No se realizaron cambios en ninguna configuración (web.confg, project.json, etc.).
- Sube toda la solución de la aplicación web a GitHub. No incluya project.lock.json en la carga de Git.
- Inicie una instancia de Amazon Linux AMI (2016.09.0). Grupo de seguridad con tráfico SSH, HTTP y HTTPS permitido.
- Use PuTTY para SSH en la instancia de Linux. Inicie sesión con ec2-user .
- Actualizar la instancia
sudo yum update -y
- Instale libunwind
sudo yum install libunwind -y
- Descargue .NET Core
curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID=809131
- Instale .NET Core
sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet
- Enlace
sudo ln -s /opt/dotnet/dotnet /usr/local/bin
- Configure las tablas de IP
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000
- Instalar Git
sudo yum install git -y
- Configure
git config --global user.name "myUserName"
- Configure
git config --global user.email "[email protected]"
- Hacer directorio
mkdir /var/coreapp
- Mover al directorio
cd /var/coreapp
- Obtenga el proyecto de Git
git clone https://github.com/myUsername/myRepository.git
- Cambiar propietario
sudo chown -R ec2-user /var/coreapp
- Mover a direcotry
cd /var/coreapp/solution-name/src/web-project-name
- Restaure la
dotnet restore
,dotnet build
compilación dedotnet build
y ejecútela en segundo planonohup dotnet run > /dev/null 2>&1 &
Esta solución está funcionando bien para mí ahora. Tengo una publicación relacionada que trata de crear una secuencia de comandos de arranque de datos de usuario para intentar que esto sea aún más fácil.
Me gustaría ejecutar un sitio web .NET Core MVC desde una instancia de AMS de Amazon Linux AMI .
Aquí están los pasos que he tomado hasta ahora:
- Cree una plantilla de aplicación web principal de ASP.NET (.NET Core) - C # - Proyecto de aplicación web MVC en Visual Studio 2015. Compile y ejecute la aplicación en IIS Express. No se realizaron cambios en ninguna configuración (web.confg, project.json, etc.).
- Sube toda la solución de la aplicación web a GitHub.
- Inicie una instancia de Amazon Linux AMI (2016.03.2). El Grupo de seguridad tiene acceso de "todo el tráfico" abierto por ahora por simplicidad.
- Use PuTTY para SSH en la instancia de Linux. Inicie sesión con ec2-user .
- Actualizar la instancia
sudo yum update -y
- Instale libunwind
sudo yum install libunwind -y
- Instalar gettext
sudo yum install gettext -y
- Instale .NET Core
curl -sSL https://raw.githubusercontent.com/dotnet/cli/rel/1.0.0-preview1/scripts/obtain/dotnet-install.sh | bash /dev/stdin --version 1.0.0-preview1-002702 --install-dir ~/dotnet
curl -sSL https://raw.githubusercontent.com/dotnet/cli/rel/1.0.0-preview1/scripts/obtain/dotnet-install.sh | bash /dev/stdin --version 1.0.0-preview1-002702 --install-dir ~/dotnet
- Enlace
sudo ln -s ~/dotnet/dotnet /usr/local/bin
- Instale .NET Version Manager (DNVM)
curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh
curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh
- Ejecute el comando
source /home/ec2-user/.dnx/dnvm/dnvm.sh
- Instale .NET Execution Environment (DNX)
dnvm upgrade -r coreclr
- Instale libuv para ser usado por Kestrel
sudo yum install automake libtool wget -y wget http://dist.libuv.org/dist/v1.8.0/libuv-v1.8.0.tar.gz tar -zxf libuv-v1.8.0.tar.gz cd libuv-v1.8.0 sudo sh autogen.sh sudo ./configure sudo make sudo make check sudo make install sudo ln -s /usr/lib64/libdl.so.2 /usr/lib64/libdl sudo ln -s /usr/local/lib/libuv.so.1.0.0 /usr/lib64/libuv.so
- Instalar Git
sudo yum install git -y
- Cree el directorio en el directorio ''/ home / ec2-user'' para la aplicación. Mover a ese directorio.
mkdir director-name cd directory-name
- Clonar la aplicación web con
git config user.name "myUserName" git config user.email "myEmail" git clone https://github.com/username/repositoryname.git
- Vaya al directorio ''proyecto''
cd solution-name/src/web-project-name
. - Restaurar paquetes
dotnet restore
- Construir aplicación
dotnet build
- Ejecutar aplicación
dotnet run
En este punto veo lo siguiente en la terminal:
Ahora escuchando en: http: // localhost: 5000
Intento golpear el DNS / IP de AWS con el puerto 5000 etiquetado al final (http: // aws-ip-or-dns: 5000), pero no obtengo respuesta.
Sé que Docker y Mono son herramientas que puedo usar, pero preferiría que este enfoque funcione.
Los scripts que utilicé para instalar .NET Core, DNVM y DNX son una combinación de las instrucciones de CentOS y Ubuntu de estos enlaces:
- https://docs.asp.net/en/latest/getting-started.html
- https://www.microsoft.com/net/core#centos
- https://docs.asp.net/en/1.0.0-rc1/getting-started/installing-on-linux.html
Descargo de responsabilidad No tengo tanta experiencia con Linux. Es justo decir que no entiendo algunos de los comandos que estoy ejecutando. Pero, estoy aquí para aprender!
Pregunta: ¿Qué debo hacer para obtener una plantilla .NET aplicación web básica que ejecute un entorno de AWS Amazon Linux?
(Supongo que me falta algo al configurar el servidor HTTP)
Necesito más reputación para publicar más de dos enlaces, así que si alguien quiere EDITAR, lo apreciaría.
Para cualquier persona que necesite actualizar lo anterior para la actualización de Microsoft.NETCore.App 1.0.1 de septiembre de 2016, las instrucciones https://www.microsoft.com/net/core#centos funcionaron para mí:
curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID=827529
sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet
sudo rm /usr/local/bin/dotnet
sudo ln -s /opt/dotnet/dotnet /usr/local/bin
Posteriormente ejecutando dotnet --info
da:
.NET Command Line Tools (1.0.0-preview2-003131)
Product Information:
Version: 1.0.0-preview2-003131
Commit SHA-1 hash: 635cf40e58
Runtime Environment:
OS Name: amzn
OS Version: 2016.09
OS Platform: Linux
RID: amzn.2016.09-x64
Después de eso borré mi project.lock.json
y ejecuté una dotnet restore
.
No pude hacer que una dotnet run
directamente ya que mi RID no se conocía, pero usar un Dockerfile
con microsoft/dotnet:onbuild
y esta sección en mi project.json
funcionó:
"runtimes": {
"debian.8-x64" : {}
},
Si está ejecutando su instancia de AWS en modo VPC y no tiene un grupo de seguridad que diga que su regla de entrada tiene "Todo el tráfico" y la Fuente es "En cualquier lugar" o si dice que "Regla de TCP personalizada", el puerto es 5000 y La fuente es "En cualquier lugar", entonces no le permitirá conectarse a ese puerto. En el modo VPC, todos los puertos entrantes se cierran de forma predeterminada y debe permitirlos explícitamente con algunos grupos de seguridad predefinidos o propios.
Si usa Opswork (o Chef) puede usar la siguiente receta de Chef https://supermarket.chef.io/cookbooks/dotnetcore para instalar un núcleo dotnet en AWS Linux, asumiendo que ha cargado un archivo comprimido usando la publicación dotnet. archivo a un cubo S3.
La capa json tiene JSON que tiene el nombre corto de la aplicación, por ejemplo,
{
myapp {}
}
# The recipe to install
# 1) Figure which App needs to be installed using JSON in Opsworks layer
# 2) Get the Zip file from S3 and Unzip into /usr/bin/myapp/publish
# 3) Create bash file to start
# 4) Start the app
apps = search(:aws_opsworks_app)
apps.sort_by { |v| v["shortname"] }.each do |app|
appname = app["shortname"]
app_source = app["app_source"]
bucket, remote_path = OpsWorks::SCM::S3.parse_uri("#{app_source[''url'']}")
filename = remote_path.split("/")[-1]
extn = File.extname filename
if (!node["#{appname}"].nil? && extn == ''.zip'')
apppath = "/usr/bin/#{appname}"
dotnetapp = app["environment"]["dotnetapp"]
aspnetcore_environment = app["environment"]["aspnetcore_environment"]
Chef::Log.info("App dotnet Name:#{app[:environment][:dotnetapp]}")
Chef::Log.info("Enviroment:#{aspnetcore_environment}")
app_checkout = ::File.join(Chef::Config["file_cache_path"], app["shortname"])
package = "#{app_checkout}/#{filename}"
# Use https://github.com/awslabs/opsworks-windows-demo-cookbooks or any s3_file recipe to download the zip file
# if you copy the opsworks-windows-cookbooks you will to modify the recipe a little to work on aws linux
opsworks_scm_checkout app["shortname"] do
destination app_checkout
repository app_source["url"]
user app_source["user"]
password app_source["password"]
type app_source["type"]
ssh_key app_source["ssh_key"]
revision app_source["revision"]
end
directory "#{apppath}" do
end
execute ''unzip package'' do
command "unzip -o #{app_checkout}/#{filename} -d #{apppath}"
end
# create a sysvint sh file to manage dotnet service
initd_directory = "/etc/init.d"
intd_file = File.join(initd_directory, app["shortname"])
template intd_file do
mode "744"
source ''file.sh.erb''
variables(
:service_name => app["shortname"],
:dotnetapp => "#{dotnetapp}",
:apppath => "#{apppath}/publish"
)
end
execute "start service #{dotnetapp}" do
command ".#{initd_directory}/#{appname} start"
environment ({"ASPNETCORE_ENVIRONMENT" => "#{aspnetcore_environment}"})
end
Chef::Log.info("End Install #{appname}")
end
end
# The ERB Template:
#!/bin/bash
#
# description: <%= @service_name %>
#
# Get function from functions library
. /etc/init.d/functions
#
# Start the service <%= @service_name %>
#
start() {
initlog -c "echo -n Starting dotnet <%= @service_name %> server: "
cd <%= @apppath %>
nohup dotnet <%= @dotnetapp %> /dev/null 2>&1 &
### Create the lock file ###
touch /var/lock/subsys/<%= @service_name %>
success $"<%= @service_name %> server startup"
echo
}
# Restart the service <%= @service_name %>
stop() {
initlog -c "echo -n Stopping dotnet <%= @service_name %> server: "
killproc dotnet
### Now, delete the lock file ###
rm -f /var/lock/subsys/<%= @service_name %>
echo
}
### main logic ###
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status dotnet
;;
restart|reload|condrestart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|status}"
exit 1
esac
exit 0