GNU/Linux >> Belajar Linux >  >> Linux

Menerbitkan situs web ASP.NET Core ke host VM Linux yang murah

Sedikit VM Linux di Azure seperti $13 per bulan. Anda bisa mendapatkan mesin Linux kecil di mana-mana dengan harga antara $10-15 per bulan. Di Linode harganya sekitar $10 per bulan, jadi saya pikir akan menarik untuk menyiapkan situs web ASP.NET Core yang berjalan di .NET Core. Seperti yang Anda ketahui, .NET Core gratis, open source, lintas platform, dan pada dasarnya dapat dijalankan di mana saja.

Langkah 0 - Dapatkan host murah

Saya pergi ke Linode (atau di mana saja) dan mendapatkan mesin Linux termurah yang mereka tawarkan. Dalam hal ini adalah Profil Ubuntu 14.04 LTS, 64-bit, Kernel 4.6.5.

Karena saya menggunakan Windows tetapi saya ingin SSH ke mesin Linux ini, saya memerlukan klien SSH. Ada banyak pilihan.

  • Jika Anda memiliki Windows 10 terbaru, Anda dapat gunakan shell Bash/Ubuntu yang ada di dalam Windows itu sendiri . Itulah yang saya lakukan. Saya menjalankan bash, lalu ssh.
  • Anda dapat mengunduh OpenSSH untuk Windows. Ini adalah yang dibawa oleh tim Windows/PowerShell ke Windows. Ini adalah port win32 dari OpenSSH.
  • SmarTTY - Lebih bagus dari Putty, ini adalah klien SSH multi-tab gratis yang juga mendukung penyalinan file
  • Putty atau Bitvise - Keduanya gratis dan keduanya berfungsi dengan baik

Langkah 0,5 - Siapkan pengguna yang bukan root

Itu selalu merupakan ide yang baik untuk menghindari menjadi root. Setelah masuk ke sistem sebagai root, saya membuat pengguna baru dan memberi mereka sudo (pengguna super do):

adduser scott
usermod -aG sudo scott

Lalu saya akan logout dan masuk kembali sebagai scott.

Langkah 1 - Dapatkan .NET Core di Mesin Linux Anda

Buka http://dot.net untuk mendapatkan .NET Core dan ikuti petunjuknya. Setidaknya ada 8 Linux yang didukung dalam 6 rasa sehingga Anda tidak akan kesulitan. Saya mengikuti instruksi Ubuntu.

Untuk memastikannya berfungsi setelah Anda menyiapkannya, buat aplikasi konsol cepat seperti ini dan jalankan.

mkdir testapp
cd testapp
dotnet new
dotnet restore
dotnet run

Jika berjalan, berarti Anda telah menginstal .NET Core dan Anda dapat melanjutkan ke pembuatan aplikasi web dan memaparkannya ke internet.

CATATAN: Jika "dotnet restore" gagal karena kesalahan segmentasi, Anda mungkin mengalami masalah ini dengan beberapa Kernel Linux 64-bit. Berikut perintah untuk memperbaikinya yang berfungsi untuk saya di Ubuntu 14.04 ketika saya menekan ini. Perbaikan telah dirilis sebagai NuGet sekarang tetapi akan disertakan dengan rilis minor berikutnya dari .NET Core, tetapi jika Anda perlu memperbarui CoreCLR secara manual, Anda dapat melakukannya.

Langkah 2 - Buat situs web ASP.NET Core

Anda dapat membuat situs web ASP.NET Core yang sangat mendasar dan sangat kosong dan tidak apa-apa. Anda juga bisa mendapatkan Yeoman dan menggunakan generator berbasis yeoman ASP.NET untuk mendapatkan lebih banyak pilihan. Ada juga proyek ASP.NET MVC Boilerplate yang bagus untuk Visual Studio.

Atau Anda bisa mulai dengan:

dotnet new -t web

Saat ini, situs default ini menggunakan npm, gulp, dan bower untuk mengelola dependensi JavaScript dan CSS. Di masa depan akan ada opsi yang tidak memerlukan banyak hal tambahan tetapi untuk saat ini, untuk memulihkan dotnet situs ini saya memerlukan npm dan yang tidak, jadi saya akan melakukan ini untuk mendapatkan node, npm, dll.

sudo apt-get install npm
sudo npm install gulp
sudo npm install bower

Sekarang saya dapat memulihkan dotnet dengan mudah dan menjalankan aplikasi web saya untuk menguji. Ini akan memulai di localhost:5000 biasanya.

$ dotnet restore
$ dotnet run
scott@ubuntu:~/dotnettest$ dotnet run
Project dotnettest (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
info: Microsoft.Extensions.DependencyInjection.DataProtectionServices[0]
User profile is available. Using '/home/scott/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.
Hosting environment: Production
Content root path: /home/scott/dotnettest
Now listening on: http://localhost:5000

Tentu saja, memulai sesuatu di localhost:5000 tidak membantu saya karena saya di sini di rumah jadi saya tidak dapat menguji situs web lokal seperti ini. Saya ingin mengekspos situs ini (melalui port) ke dunia luar. Saya ingin sesuatu seperti http://mysupermachine -> di dalam mesin saya -> localhost:5000.

Langkah 3 - Ekspos aplikasi web Anda ke luar.

Saya bisa beri tahu Kestrel - itu .NET Web Server - untuk mengekspos dirinya ke Port 80, meskipun Anda biasanya ingin memiliki proses lain antara Anda dan dunia luar.

Anda dapat melakukan ini dengan beberapa cara . Anda dapat membuka Program.cs dengan editor seperti "pico" dan menambahkan panggilan .UseUrls() ke WebHostBuilder seperti ini.

var host = new WebHostBuilder()
.UseKestrel()
.UseUrls("http://*:80")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();

Di sini * mengikat semua adapter jaringan dan mendengarkan pada Port 80. Menempatkan http://0.0.0.0:80 juga berfungsi.

Anda mungkin memiliki masalah izin melakukan ini dan perlu meningkatkan proses dotnet dan server web yang juga merupakan masalah, jadi biarkan saja di port internal yang tinggi dan proxy terbalik lalu lintas dengan sesuatu seperti Nginx atau Apache. Kami akan mengeluarkan port hard-coded dari kode dan mengubah Program.cs untuk menggunakan file konfigurasi .json.

public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hosting.json", optional: true)
.Build();

var host = new WebHostBuilder()
.UseKestrel()
.UseConfiguration(config)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();

host.Run();
}

File hosting.json hanya ini:

{
"server.urls": "http://localhost:5123"
}

Kami juga dapat menggunakan "AddCommandLine(args) alih-alih "AddJsonFile()" dan meneruskan --server.urls=http://*:5123 pada baris perintah. Terserah Anda. Anda juga dapat menggunakan variabel lingkungan ASPNETCORE_URLS .

CATATAN:Saya melakukan pekerjaan ini di folder di bawah folder rumah saya ~ atau sekarang. Nanti saya akan mengkompilasi dan "memublikasikan" situs web ini ke sesuatu seperti /var/dotnettest ketika saya ingin situs itu terlihat.

Langkah 4 - Siapkan Proxy Terbalik seperti Nginx

Saya mengikuti instruksi terperinci di situs ASP.NET Core Docs yang disebut "Terbitkan ke Lingkungan Produksi Linux." (Semua dokumen juga ada di GitHub)

Saya akan membawa Nginx dan memulainya.

sudo apt-get install nginx
sudo service nginx start

Saya akan mengubah situs Nginx default untuk menunjuk ke aplikasi web ASP.NET Core (masa depan) saya. Saya akan membuka dan mengubah /etc/nginx/sites-available/default dan membuatnya terlihat seperti ini. Perhatikan nomor portnya. Nginx JAUH lebih kompleks dari ini dan memiliki banyak nuansa, jadi ketika Anda siap untuk masuk ke Produksi Super Resmi, pastikan untuk menjelajahi seperti apa File Konfigurasi Nginx yang sempurna dan mengubahnya sesuai kebutuhan Anda.

server {
listen 80;
location / {
proxy_pass http://localhost:5123;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}

Kemudian kami akan memeriksanya dan memuat ulang konfigurasi.

sudo nginx -t 
sudo nginx -s reload

Langkah 5 - Jaga agar situs web Anda tetap berjalan

Situs web belum aktif dan berjalan di localhost:5123 (kecuali jika Anda menjalankannya sendiri dan tetap menjalankannya!) jadi kami memerlukan aplikasi atau monitor untuk menjalankannya dan membuatnya tetap berjalan. Ada aplikasi bernama Supervisor yang bagus dalam hal itu jadi saya akan menambahkannya.

sudo apt-get install supervisor

Di sinilah Anda/kami/saya/errbody perlu mendapatkan jalur dan nama dengan benar, jadi waspadalah. Saya sudah selesai di ~/testapp atau sesuatu. Saya perlu memublikasikan situs saya ke lokasi akhir jadi saya akan menjalankan dotnet publish, lalu menyalin hasilnya ke /var/dotnettest di mana ia akan tinggal.

dotnet publish
publish: Published to /home/scott/dotnettest/bin/Debug/netcoreapp1.0/publish
sudo cp -a /home/scott/dotnettest/bin/Debug/netcoreapp1.0/publish /var/dotnettest

Sekarang saya akan membuat file (sekali lagi, saya menggunakan pico karena saya tidak sehebat emacs atau vim) bernama /src/supervisor/conf.d/dotnettest.conf untuk memulai aplikasi saya dan membuatnya tetap berjalan:

[program:dotnettest]
command=/usr/bin/dotnet /var/dotnettest/dotnettest.dll --server.urls:http://*:5123
directory=/var/dotnettest/
autostart=true
autorestart=true
stderr_logfile=/var/log/dotnettest.err.log
stdout_logfile=/var/log/dotnettest.out.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=www-data
stopsignal=INT

Sekarang kita memulai dan menghentikan Supervisor dan mengawasi/mengekor lognya untuk melihat startup aplikasi kita!

sudo service supervisor stop
sudo service supervisor start
sudo tail -f /var/log/supervisor/supervisord.log
#and the application logs if you like
sudo tail -f /var/log/dotnettest.out.log

Jika semuanya berhasil (jika tidak, itu akan menjadi nama atau jalur, jadi teruslah mencoba!) Anda akan melihat log supervisor dengan dotnet memulai, menjalankan aplikasi Anda.

Ingat hubungannya.

  • Dotnet - menjalankan situs web Anda
  • Nginx atau Apache - Mendengarkan di Port 80 dan meneruskan panggilan HTTP ke situs web Anda
  • Supervisor - Menjaga aplikasi Anda tetap berjalan

Selanjutnya, saya mungkin ingin menyiapkan build integrasi berkelanjutan, atau SCP/SFTP untuk menangani penerapan aplikasi saya. Dengan begitu saya dapat mengembangkan secara lokal dan mendorong ke mesin Linux saya.

Tentu saja, ada selusin cara lain untuk mempublikasikan situs ASP.NET Core, belum lagi Docker. Saya akan memposting tentang Docker di lain waktu, tetapi untuk saat ini, saya dapat membuat situs web ASP.NET Core saya diterbitkan ke host $ 10 yang murah dalam waktu kurang dari satu jam. Anda dapat menggunakan alat yang sama untuk mengelola situs .NET Core yang Anda gunakan untuk mengelola situs apa pun baik itu PHP, nodejs, Ruby, atau apa pun yang membuat Anda bahagia.

Sponsor: Aspose membuat API pemrograman untuk bekerja dengan file, seperti:DOC, XLS, PPT, PDF, dan banyak lagi lainnya. Pengembang dapat menggunakan produk mereka untuk membuat, mengonversi, memodifikasi, atau mengelola file dengan hampir semua cara. Aspose adalah perusahaan yang bagus dan mereka menawarkan produk yang solid. Lihat, dan unduh evaluasi gratis.


Linux
  1. Menjalankan ASP.NET Core di Hosting Linux bersama termurah GoDaddy - Jangan Coba Ini Di Rumah

  2. C # di lingkungan linux

  3. Cara menghapus versi .NET Core sebelumnya dari Linux (CentOS 7.1)

  1. Mengoptimalkan ukuran Gambar ASP.NET Core Docker

  2. Visual Basic .Net di Linux

  3. Apakah Visual Basic didukung oleh .NET Core di Linux?

  1. Menjalankan aplikasi ASP.NET Core mandiri di Ubuntu

  2. Cara menulis daemon linux dengan .Net Core

  3. NuGet untuk .NET Core di Linux