1. 程式人生 > >一起學ASP.NET Core 2.0學習筆記(一): CentOS下 .net core2 sdk nginx、supervisor、mysql環境搭建

一起學ASP.NET Core 2.0學習筆記(一): CentOS下 .net core2 sdk nginx、supervisor、mysql環境搭建

image dev 預覽 def star fig brush rest aspnet

作為.neter,看到.net core 2.0的正式發布,心裏是有點小激動的,迫不及待的體驗了一把,發現速度確實是快了很多,其中也遇到一些小問題,所以整理了一些學習筆記:

閱讀目錄

  • 環境說明
  • 安裝CentOS7
  • 安裝.NET Core SDK for CentOS7
  • 搭建ftp服務器
  • 安裝mysql
  • 部署ASP.NET Core應用程序
  • 配置Nginx
  • 配置守護服務(Supervisor)

環境說明

服務器系統:CentOS 7.3 64位

相關工具:putty、Xftp

服務器軟件軟件:.netcore、nginx、supervisor、mysql

安裝CentOS7

這個就不細說了,網上教程很多,我這邊是阿裏雲的ecs服務器,操作系統為centos 7.3 x64

安裝.NET Core SDK for CentOS7

sudo yum install libunwind libicu(安裝libicu依賴)
curl -sSL -o dotnet.tar.gz https://aka.ms/dotnet-sdk-2.0.0-linux-x64 (下載sdk壓縮包)
mkdir -p ~/dotnet && tar zxf dotnet.tar.gz -C ~/dotnet 解壓縮)
sudo ln -s /opt/dotnet/dotnet /usr/local/bin(創建鏈接) 

參見官方文檔, 需要註意的地方是第四行跟官方文檔有點出入,這是建立連接,而官方文檔的是添加path(只在當前session有效:export PATH=$PATH:$HOME/dotnet)

,執行這些操作之前請務必卸載舊版本及預覽版本(我是直接刪除舊版本的文件,執行 dotnet --info 可以查看已安裝版本信息),當執行dotnet --version xianshi 2.0.0時表示安裝.net core 2.0成功

技術分享

參考資料: https://www.microsoft.com/net/core#linuxcentos

搭建ftp環境

安裝vsftpd

1、以管理員(root)身份執行以下命令

  1. yum install vsftpd

2、設置開機啟動vsftpd ftp服務

  1. chkconfig vsftpd on

3、啟動vsftpd服務

  1. service vsftpd start

管理vsftpd相關命令:

停止vsftpd: service vsftpd stop

重啟vsftpd: service vsftpd restart

配置防火墻

在 CentOS 7.3中

暫時開放 ftp 服務
# firewall-cmd --add-service=ftp

永久開放 ftp 服務
# firewall-cmd --add-service=ftp --permanent
永久關閉
# firewall-cmd --remove-service=ftp --permanent
success

讓設定生效
# systemctl restart firewalld

添加ftp用戶

下面是添加ftpuser用戶,設置根目錄為/home/wwwroot/ftpuser,禁止此用戶登錄SSH的權限,並限制其訪問其它目錄(當不存在指定目錄時需要創建相關目錄)。

1、修改/etc/vsftpd/vsftpd.conf

vim /etc/vsftpd/vsftpd.conf

如需禁用匿名登錄把第一行的 anonymous_enable=YES ,改為NO

將底下三行

  1. #chroot_list_enable=YES
  2. # (default follows)
  3. #chroot_list_file=/etc/vsftpd.chroot_list

改為

  1. chroot_list_enable=YES
  2. # (default follows)
  3. chroot_list_file=/etc/vsftpd/chroot_list

3、增加用戶farmhome,指向目錄/home/wwwroot/farmhome,禁止登錄SSH權限。

useradd -d /home/wwwroot/farmhome -g ftp -s /sbin/nologin farmhome

4、設置用戶口令

passwd farmhome

5、編輯文件chroot_list:

  1. vim /etc/vsftpd/chroot_list

內容為ftp用戶名,每個用戶占一行,如:

farmhome

6、重新啟動vsftpd

service vsftpd restart

7.用xftp等客戶端軟件應該就能訪問到該目錄了;

技術分享

安裝mysql

一、官網下載mysql

# wget https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm (去mysql官網獲取最新的rpm包 https://dev.mysql.com/downloads/repo/yum/)
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
# yum install mysql-community-server

安裝完成後重啟mysql服務

service mysqld restart
二、mysql相關配置

初次安裝mysql,root賬戶沒有密碼。

[[email protected] yl]# mysql -u root 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.26 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
rows in set (0.01 sec)

mysql>

  設置密碼

mysql> set password for ‘root‘@‘localhost‘ =password(‘password‘);
Query OK, 0 rows affected (0.00 sec)

mysql> 

 不需要重啟數據庫即可生效。

mysql新建用戶(用戶farmhome,密碼123456):

mysql>create user ‘farmhome‘@‘%‘ identified by ‘123‘; 

mysql遠程連接設定(把在所有數據庫的所有表的所有權限賦值給位於所有IP地址的root用戶)

1 mysql> grant all privileges on *.* to [email protected]‘%‘identified by ‘password‘;                                                  

部署asp.net core

1.防火墻配置

運行、停止、禁用firewalld

啟動:# systemctl start firewalld

查看狀態:# systemctl status firewalld 或者 firewall-cmd --state

停止:# systemctl disable firewalld

禁用:# systemctl stop firewalld

將接口添加到區域,默認接口都在public

# firewall-cmd --zone=public --add-interface=eth0 --permanent

永久生效再加上 --permanent 然後reload防火墻

設置默認接口區域

# firewall-cmd --set-default-zone=public --permanent

立即生效無需重啟

打開端口

加入一個端口到區域:

# firewall-cmd --zone=public --add-port=5000/tcp --permanent

# firewall-cmd --zone=public --add-port=80/tcp --permanent

查看所有打開的端口:

# firewall-cmd --zone=dmz --list-ports

技術分享

2.用xftp上傳程序到指定目錄即上的

進入指定目錄運行程序

技術分享View Code

如出現不能綁定ipv6等錯誤時,請修改Program.cs,添加UseUrls("http://0.0.0.0:50");

技術分享View Code

配置Nginx

安裝Nginx

curl -o nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

技術分享

rpm -ivh nginx.rpm

yum install nginx

技術分享

安裝成功!

輸入:systemctl start nginx 來啟動nginx。

輸入:systemctl enable nginx 來設置nginx的開機啟動(linux宕機、重啟會自動運行nginx不需要連上去輸入命令)。

測試nginx是否可以訪問。

技術分享

配置nginx對ASP.NET Core應用的轉發

修改

技術分享View Code

將文件內容替換為

server {
listen 80;
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 $host;
proxy_cache_bypass $http_upgrade;
}}

再次運行程序

donet /home/wwwroot/farmhome/famrhome.dll

技術分享

如出現502錯誤時由於SELinux保護機制所導致,我們需要將nginx添加至SELinux的白名單。

接下來我們通過一些命令解決這個問題:

yum install policycoreutils-python

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

sudo semodule -i mynginx.pp

配置守護服務(Supervisor)

目前存在三個問題

問題1:ASP.NET Core應用程序運行在shell之中,如果關閉shell則會發現ASP.NET Core應用被關閉,從而導致應用無法訪問,這種情況當然是我們不想遇到的,而且生產環境對這種情況是零容忍的。

問題2:如果ASP.NET Core進程意外終止那麽需要人為連進shell進行再次啟動,往往這種操作都不夠及時。

問題3:如果服務器宕機或需要重啟我們則還是需要連入shell進行啟動。

為了解決這個問題,我們需要有一個程序來監聽ASP.NET Core 應用程序的狀況。在應用程序停止運行的時候立即重新啟動。這邊我們用到了Supervisor這個工具,Supervisor使用Python開發的。

安裝Supervisor

yum install python-setuptools

easy_install supervisor

配置Supervisor

mkdir /etc/supervisor

echo_supervisord_conf > /etc/supervisor/supervisord.conf

修改supervisord.conf文件,

vim  /etc/supervisor/supervisord.conf

將文件尾部的配置(表示加載配置文件目錄下的配置文件)

技術分享

修改為

技術分享

ps:如果服務已啟動,修改配置文件可用“supervisorctl reload”命令來使其生效

配置對ASP.NET Core應用的守護

創建一個 farmhomeapp.conf文件

技術分享View Code

,內容大致如下

[program:farmhomewebapp]
command=dotnet farmhome.dll ; 運行程序的命令
directory=/home/wwwroot/farmhome/ ; 命令執行的目錄
autorestart=true ; 程序意外退出是否自動重啟
stderr_logfile=/var/log/WebApplication1.err.log ; 錯誤日誌文件
stdout_logfile=/var/log/WebApplication1.out.log ; 輸出日誌文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 進程環境變量
user=root ; 進程執行的用戶身份
stopsignal=INT

運行supervisord,查看是否生效

supervisord -c /etc/supervisor/supervisord.conf

ps -ef 

如存在指定進程表示成功

技術分享

至此關於ASP.NET Core應用程序的守護即配置完成。

配置Supervisor開機啟動

新建一個“supervisord.service”文件

vim /usr/lib/systemd/system/supervisord.service

內容如下

# dservice for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

執行命令:systemctl enable supervisord 設定開機啟動

執行命令:systemctl is-enabled supervisord #來驗證是否為開機啟動

技術分享

本文是環境搭建完後依據記憶寫的博客,可能會有錯誤,歡迎指正,不知不覺已經淩晨了,明天繼續上asp.net core2 及EF Core Fluent API 及 EF Core for MySql 相關介紹

相關內容參考:

將ASP.NET Core應用程序部署至生產環境中(CentOS7)

CentOS開啟FTP及配置用戶

centos7 mysql數據庫安裝和配置

一起學ASP.NET Core 2.0學習筆記(一): CentOS下 .net core2 sdk nginx、supervisor、mysql環境搭建