SAAS云平台搭建札记: (二) Linux Ubutu下.Net Core整套运行环境的搭建

    最近作的项目,因为预算有限,公司决定不采购Windows服务器,而采购基于Linux的服务器。html

    通常的VPS服务器,若是使用Windows系统,那么Windows Server2012\2016安装好后,就占用1GB的内存了;只要运行起来,2G的内存就用掉了;装上SqlServer、跑个.net,4G内存是标配,用户数量稍微多些4G内存也捉襟见肘了;分配2个VCpu,在桌面状态下不运行任何程序,每一个核心的占用率在15%~20%左右。java

    你们知道64位的CentOS7装好后内存占用是多少吗,用free看了下,不到150兆;mysql

    64位的Ubutu16.04装好后内存占用多少?40MBlinux

    用过Linux Server,不由赞叹其系统的精简和高效,没有一点浪费内存和CPU的地方,全部的资源都用在刀刃上;难怪微软在《.NET 微服务:适用于容器化 .NET 应用程序的体系结构》一书上说,基于.Net Core的ASP.net比传统ASP.net要快10倍以上。开发和运维.NET Core,首推Linux下的Container环境。Windows Server不停的在作Server-Core和Nano-Server,也是在不断地作减法,以适应形势。多年以来.net一直干不过java,操做系统也是个很大缘由。redis

    好了,先不扯开发,买了X里云的VPS,默认用root SSH远程登陆上去的,这跟咱们平时本身装的很不同,没有第二个用户,上去也不用su,也用不着sudo。sql

 

    这里把整个流程记录下来,方便你们配置和部署(若是本身找资料估计要配个1、两天)mongodb

  • 安装Mysql
apt-get update
apt-get install mysql-server
apt-get install mysql-client
apt-get install libmysqlclient-dev
安全选项:mysql_secure_installation
测试状态:systemctl status mysql.service

     以root登陆后,添加mysql远程访问用户:数据库

GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
flush privileges;

    退出mysql命令行,编辑启动文件ubuntu

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

    linux下能够用vi,能够用vim,也能够用nano(估计有数十种编辑器)vim

    注释 bind-address = 127.0.0.1
    重启服务或系统

    登陆mysql,建库

CREATE DATABASE `数据库名` /*!40100 COLLATE 'utf8_unicode_ci' */;

    开发的同窗注意了,在Windows下,Mysql不论是是5.7仍是8.0,数据库表名默认都是不区分大小写的,而Linux下数据库表名都是区分大小写的,会致使用脚本导出的数据库在Linux没法正常使用。须要改Windows下Mysql的配置。

 

  • 安装Postgresql

    为何要用Postgresql?Linux下能够安装SqlServer2017/2019嘛,可是SqlServer On Linux的系统需求是内存大于3.25G。并且非商业受权的Express版本只能用到1G内存多一点,可想而知用户数量多了后会是怎样一个情况。安装多个实例?

    Postgresql是最接近Oracle框架的Sql,无论从表空间、语法、Schema、函数都无比相似Oracle,听说还有个特别的企业版本彻底兼容Oracle,能够无缝的把Oracle应用迁移过来,帮企业省数十万$;它的性能、事务、扩展支持等都十分强大(支持几乎全部语言的扩展可是不支持.net的扩展),采用比较奇葩的多进程工做方式。开发社区里有很多中国人。最新版本11,咱们以为九、10的版本也够了。

wget -q -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
apt update
apt install postgresql-10 -y

    装好后使用postgres管理用户登陆

sudo -u postgres psql

    配置、管理用户等。

    使用Mysql仍是Postgresql根据本身的业务须要,若是是通常的互联网项目,单表读/写比较多的,开发人员水平良莠不齐的,建议使用Mysql;若是是企级项目、云平台管理项目,使用Postgresql,里面有大量的扩展和特性以及事务属性供使用,之后招OracleDBA方便维护。关于Postgresql里面的一些特殊使用技巧我另外还有文章来描述。

 

  • 安装Redis
apt-get install redis-server

     查看状态

/etc/init.d/redis-server status

    编辑redis配置文件

vi /etc/redis/redis.conf

    Redis和Postgreql在Linux下的安装包只有几MB,SqlServerOnLinux的实际安装包也就一百多兆。

 

  • 安装.Net Core
apt-get install curl
wget -q https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb
dpkg -i packages-microsoft-prod.deb
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-2.2

 

  • 安装VsFtp

    创建一个只能经过ftp登陆的用户,固定目录,其余用户不能登陆

apt-get install vsftpd
useradd FTP用户名 -g ftp -d /var/www
passwd FTP用户名 密码

cd /
mkdir www
chmod 777 -R /var/www
usermod -s /sbin/nologin FTP用户名

    编辑vi vsftpd.conf,须要启用名单用户

nano /etc/vsftpd.conf
取消注释
vsftpd.chroot_list

nano /etc/vsftpd.chroot_list

    只写入FTP用户名

    安装Iptables

apt-get install iptables-persistent
iptables -A INPUT -p tcp --dport 端口号 -j ACCEPT
netfilter-persistent save
netfilter-persistent reload

 

  •    运行.NET Core程序

    用FTP用户上传你的代码,运行

dotnet xxx.dll

    网站能打开,说明一切OK

curl http://xxxxxxxxx:xx

 

    把你的ASP.net程序配置成服务启动:

nano /etc/systemd/system/kestrel-xxx.service

    内容以下:

[Unit]
Description=Example .NET Web API App running on Ubuntu

[Service]
WorkingDirectory=/var/www
ExecStart=/usr/bin/dotnet /var/www/WebApplication3.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

    检测这个服务的状态:

systemctl enable kestrel-xxx.service
systemctl start kestrel-xxx.service
systemctl stop kestrel-xxx.service
systemctl status kestrelel-xxx.service

 

  • 安装MongoDb

 

sudo apt-get install mongodb
mongo use admin db.createUser( {user: "admin",pwd: "123456",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})

 

  

 

 

 

 

    SAAS云平台搭建札记系列文章:

    SAAS云平台搭建札记: (一)浅论SAAS多租户自助云服务平台的产品、服务和订单

    SAAS云平台搭建札记: (二)Linux Unbutu下.Net Core整套运行环境的搭建

    SAAS云平台搭建札记: (三) AntDesign + .Net Core WebAPI权限控制、动态菜单的生成

相关文章
相关标签/搜索