Linux環境下發布.net core


 

一、安裝Linux環境

1. 安裝VM虛擬機和操作系統

VM虛擬工具安裝的過程詳見:http://blog.csdn.net/stpeace/article/details/78598333。直接按照文中安裝布驟進行即可。

 

上面鏈接中,在描述完VM安裝之后,也介紹了如果安裝linux操作系統。我們並不是安裝這個版本。

 

Linux操作系統,我們選擇server版本,Ubuntu 16.04 Server。這個版本是沒有界面可操作的。安裝過程詳見:https://www.linuxidc.com/Linux/2017-11/148341.htm

 

特別注意:到了

23.選擇要安裝的軟件,多加一個OpenSSH Server,然后下一步-Continue;

 

 

一定要按圖中顯示選上openssh server和 standard system utitities,如果不選擇這個,后面需要這個服務再去安裝的話,會比較麻煩。

2. 安裝 Xshell Portable

安裝完操作系統之后,我們可以在虛擬機上輸命令操作。但在虛擬機環境與本機環境的焦點切換時,顯得非常的不方便,那么我們可以安裝Xshell,更便捷地去使用虛擬機上的操作系統。

 

安裝過程非常簡單,https://jingyan.baidu.com/article/295430f13fb4db0c7f005065.html

安裝完成后,連上我們的linux服務器即可。

 

 

 

如果不知道linux服務器的IP地址,請在虛擬機上輸入:ifconfig

 

 

 

 

通過xshell連接之后的界面:

 

 

3. 安裝 WinSCP

這個工具是用於遠程上傳文件到linux服務器,也可以通過界面方式直接查看linux目錄,可以對文件進行增刪改,對文件做權限控制。

 

默認情況下,我們在安裝linux中所配置的用戶權限,是只讀的。所以我們很多的操作命令都要加上sudo。那么我們用WinSCP連接linux服務器用就個用戶登錄,也是只讀權限。

 

那么我們需要用root用戶來登錄,具體如下:

 

1、設置root密碼

 

sudo passwd root

 

2、修改etc/ssh/sshd_config文件

 

su - root

 

vi /etc/ssh/sshd_config

 

#Authentication:

 

LoginGraceTime 120

 

#PermitRootLogin without-password

 

PermitRootLogin yes

 

StrictModes yes

 

3、重啟ssh

 

service ssh restart

 

 

這樣修改過后就可以使用root登錄winSCP了

 

 

 

 

二、Linux 基本命令

1. 打開目錄

  cd /dotnetapp/console

2. 文件操作

  sudo vim /dotnetapp/console

  如果路徑不存在,將是新建操作

  要對文件進行編輯,輸入 i

  使用鍵盤上下左右,編輯文件

  按esc 退出編輯狀態

  輸入 :eq!  保存退出文件

 

三、Web發布

1. Asp.net Core 程序發布

  這個大家都會發布吧,就不要我多說了。

2. 安裝.net core

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg

 

sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg

 

sudo sh -c 'echo "deb [arch = amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main" > /etc/apt/sources.list.d/dotnetdev.list'

 

sudo apt-get install apt-transport-https

 

sudo apt-get update

 

sudo apt-get install dotnet-sdk-2.1.4

 

   詳見 https://www.microsoft.com/net/learn/get-started/linux/ubuntu16-04

 

2. FTP上傳

   Winscp如果裝好,配置好,使用root帳號登錄之后,只是復制粘貼就完事了。

3. Nginx反向代理

   我們知道.net core程序是可以在多個操作系統下運行的。

   在windows下需要安裝 .net core, 然后在程序目錄下運行 dotnet xxxx.dll,程序就跑起來了

   

 

 

   同樣在linux環境下也是一樣的

   

 

 

   

如果這是一個web程序,直接執行 dotnet xxxx.dll也可以讓網站跑起來

 

 

此時網站已經跑起來了,我們在本機的瀏覽器輸入 http://服務器IP:5000, 不能訪問。

 

我們接下來,需要安裝反向代理

 

sudo apt-get install nginx

 

sudo service ngnix start

 

安裝完之后修改配置

 

sudo vim /etc/nginx/sites-available/default

 

 

server {

    listen 81;

    location / {

        proxy_pass http://localhost:5000;

        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection keep-alive;

        proxy_set_header Host $http_host;

        proxy_cache_bypass $http_upgrade;

    }

}

 

 

修改完之后,
sudo nginx -t

sudo  nginx -s reload.

 

瀏覽器輸入 http://服務器IP:81,即可訪問網站。

 

 

 

 

4. Supervisor 守護進程

到目前位置,應用程序還是我們自己手動運行起來的,而且還不能Ctrl+C關閉並退出,否則你的網站將無法訪問!所以我們需要有一個類似監視器的角色來保證ASP.NET Core進程的正常運行,那么Supervisor會是我們的首選。

 

安裝supervisor

sudo apt-get install supervisor

 

安裝完之后,添加一個監視文件

 

 

/etc/supervisor/conf.d

 

 

[program:backend]

command=dotnet /dotnetapp/backend/OneCode.Api.dll

directory=/dotnetapp/backend/

autostart=true

autorestart=true

stderr_logfile=/var/log/hellomvc.err.log

stdout_logfile=/var/log/hellomvc.out.log

environment=ASPNETCORE__ENVIRONMENT=Production

user=www-data

stopsignal=INT

 

 

 

重新啟動配置中的所有程序

supervisorctl reload

 

重啟某一進程 (program_name=你配置中寫的程序名稱)

supervisorctl restart program_name 

 

 

這時站點部署完畢

 

注: 這個節點寫得比較亂,詳見

https://www.cnblogs.com/wangjieguang/p/aspnetcore-ubuntuserver.html

 

四、控制台程序發布

讓一個.net core console在linux環境下跑起來,只需要簡單配置一下守護進程即可

 

cd /etc/supervisor/conf.d

 

sudo vim console.conf

 

[program:console]

command=dotnet /dotnetapp/console/CommonConsole.dll

directory=/dotnetapp/console

autostart=true

autorestart=true

stderr_logfile=/var/log/console.err.log

stdout_logfile=/var/log/console.out.log

environment=ASPNETCORE__ENVIRONMENT=Production

user=root

stopsignal=INT

 

sudo supervisorctl start console

 

如果要關掉這個進程

sudo supervisorctl stop console

 

重啟

sudo supervisorctl restart console

 

這樣我們.net寫的控制台程序就這樣,在linux上面跑開,我們的signalr消息推送程序是基於控制台的,也就可以運行了。

 

如果想看一下,跑得怎么樣:

 

sudo supervisorctl tail -f console

可以看到控制台的輸出日志

 

五、安裝mysql

    首先執行下面三條命令:

sudo apt-get install mysql-server

sudo apt isntall mysql-client

安裝成功后可以通過下面的命令測試是否安裝成功:

sudo netstat -tap | grep mysql

出現如下信息證明安裝成功:

 

 

可以通過如下命令進入MySQL服務:

mysql -uroot -p你的密碼

現在設置mysql允許遠程訪問,首先編輯文件/etc/mysql/mysql.conf.d/mysqld.cnf:

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

注釋掉bind-address = 127.0.0.1:

 

 

保存退出,然后

mysql -u root –p  進入mysql服務,

執行授權命令:

grant all on *.* to root@'%' identified by '你的密碼' with grant option;

flush privileges;

然后執行quit命令退出mysql服務,執行如下命令重啟mysql:

service mysql restart

現在在Windows下可以使用navicat遠程連接Ubuntu下的MySQL服務:

 

 

 

 

六、部署VUE

1.打包好 vue 項目,通過ftp上傳到linux相應位置

 

  比如:/dotnetapp/nodejs/secondpro

 

2.在nginx上添加如下:

 

server {

        listen 84;

        server_name localhost;

 

        root /dotnetapp/nodejs/secondpro;

        index index.html;

 

 

        location / {

        try_files $uri $uri/ @router;

        index index.html;

        }

 

 

        location @router {

        rewrite ^.*$ /index.html last;

        }

}

 

3.重啟nginx  sudo nginx -s reload.

 

 

七、Redis

1. 安裝Redis

安裝Redis服務器端

~ sudo apt-get install redis-server

 

安裝完成后,Redis服務器會自動啟動,我們檢查Redis服務器程序

 

檢查Redis服務器系統進程

~ ps -aux|grep redis

redis     4162  0.1  0.0  10676  1420 ?        Ss   23:24   0:00 /usr/bin/redis-server /etc/redis/redis.conf

conan     4172  0.0  0.0  11064   924 pts/0    S+   23:26   0:00 grep --color=auto redis

 

通過啟動命令檢查Redis服務器狀態

~ netstat -nlt|grep 6379

tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN

 

通過啟動命令檢查Redis服務器狀態

~ sudo /etc/init.d/redis-server status

redis-server is running

 

2. C#代碼使用Redis

 

.net core 代碼使用redis 服務

 

新建控制台程序

 

安裝nuget 包

 

 

 

 

添加appsetting.json

 

{

  "ConnectionStrings": {

    "redis": {

      "port": "6379",

      "poolsize": "50",

      "database": "0",

      "ip": "192.168.229.129",

      "pass": "wk",

      "name": "RedisCon"

 

    }

 

  }

 

}

 

 

封裝

 

public class RedisHelper : CSRedis.QuickHelperBase

    {

        public static IConfigurationRoot Configuration { get; internal set; }

        public static void InitializeConfiguration(IConfigurationRoot cfg)

        {

            Configuration = cfg;

            int port, poolsize, database;

            string ip, pass;

            if (!int.TryParse(cfg["ConnectionStrings:redis:port"], out port)) port = 6379;

            if (!int.TryParse(cfg["ConnectionStrings:redis:poolsize"], out poolsize)) poolsize = 50;

            if (!int.TryParse(cfg["ConnectionStrings:redis:database"], out database)) database = 0;

            ip = cfg["ConnectionStrings:redis:ip"];

            pass = cfg["ConnectionStrings:redis:pass"];

            Name = cfg["ConnectionStrings:redis:name"];

            Instance = new CSRedis.ConnectionPool(ip, port, poolsize);

            Instance.Connected += (s, o) => {

                CSRedis.RedisClient rc = s as CSRedis.RedisClient;

                if (!string.IsNullOrEmpty(pass)) rc.Auth(pass);

                if (database > 0) rc.Select(database);

            };

        }

}

 

 

 

使用:

 

static void Main(string[] args)

        {

            IConfigurationBuilder builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json");

            IConfigurationRoot configuration = builder.Build();

            RedisHelper.InitializeConfiguration(configuration);

 

            bool setResult = RedisHelper.Set("test1", "123123");

            var getResult = RedisHelper.Get("test1");

        }

 

 

以上是對csredis做了進一步的封裝,如果不作封裝也可以直接使用,而且可操作性更為豐富,具體詳見

 

https://github.com/ctstone/csredis

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM