最近作的項目,因爲預算有限,公司決定不採購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
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?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裏面的一些特殊使用技巧我另外還有文章來描述。
apt-get install redis-server
查看狀態
/etc/init.d/redis-server status
編輯redis配置文件
vi /etc/redis/redis.conf
Redis和Postgreql在Linux下的安裝包只有幾MB,SqlServerOnLinux的實際安裝包也就一百多兆。
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
創建一個只能經過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
用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
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整套運行環境的搭建