一、安裝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